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

```asm
<main>:
  endbr64
  push   %r15
  mov    $0x200,%edi
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x78,%rsp
  call   <malloc@plt>
  mov    $0x200,%edi
  mov    %rax,%r14
  mov    %rax,0x10(%rsp)
  call   <malloc@plt>
  mov    $0x200,%edi
  mov    %rax,%rbx
  mov    %rax,0x20(%rsp)
  call   <malloc@plt>
  mov    $0x200,%edi
  mov    %rax,0x28(%rsp)
  call   <malloc@plt>
  mov    $0x200,%edi
  mov    %rax,0x18(%rsp)
  call   <malloc@plt>
  lea    0x4(%r14),%rsi
  mov    %rax,0x30(%rsp)
  mov    %r14,%rax
  mov    %rbx,%r14
  sub    %rsi,%r14
  mov    %rsi,0x48(%rsp)
  cmp    $0x8,%r14
  jbe    L760
  mov    %rbx,%rdi
  movaps D247(%rip),%xmm1
  pxor   %xmm0,%xmm0
  lea    0x200(%rax),%rbx
  sub    %rax,%rdi
  mov    %rdi,%rdx
  nopw   0x0(%rax,%rax,1)
L56:
  movups %xmm1,(%rax)
  movups %xmm0,(%rdx,%rax,1)
  add    $0x10,%rax
  cmp    %rbx,%rax
  jne    L56
  mov    0x10(%rsp),%rdi
  mov    0x20(%rsp),%rdx
  mov    %rdi,%rax
  sub    %rdi,%rdx
L608:
  movups (%rax),%xmm4
  movups %xmm4,(%rdx,%rax,1)
  add    $0x10,%rax
  cmp    %rbx,%rax
  jne    L608
L519:
  mov    0x10(%rsp),%rax
  mov    0x20(%rsp),%r12
  mov    %rax,%rbp
  sub    %rax,%r12
  jmp    L142
  nopw   0x0(%rax,%rax,1)
L209:
  movss  0x0(%rbp,%r12,1),%xmm0
  ucomiss D247(%rip),%xmm0
  jp     L55
L426:
  jne    L55
  add    $0x4,%rbp
  cmp    %rbx,%rbp
  je     L192
L142:
  movss  0x0(%rbp),%xmm0
  ucomiss D247(%rip),%xmm0
  jp     L680
  je     L209
L680:
  xor    %eax,%eax
  call   <abort@plt>
  movss  0x0(%rbp,%r12,1),%xmm0
  ucomiss D247(%rip),%xmm0
  jnp    L426
  nopw   0x0(%rax,%rax,1)
L55:
  xor    %eax,%eax
  add    $0x4,%rbp
  call   <abort@plt>
  cmp    %rbx,%rbp
  jne    L142
L192:
  mov    0x10(%rsp),%rax
  cmp    $0x8,%r14
  jbe    L68
  movaps D233(%rip),%xmm1
  pxor   %xmm0,%xmm0
  nopw   0x0(%rax,%rax,1)
L681:
  movups %xmm1,(%rax)
  add    $0x10,%rax
  movups %xmm0,-0x10(%rax,%r12,1)
  cmp    %rbx,%rax
  jne    L681
  mov    0x10(%rsp),%rax
  nopw   0x0(%rax,%rax,1)
L689:
  movups (%rax),%xmm5
  add    $0x10,%rax
  movups %xmm5,-0x10(%rax,%r12,1)
  cmp    %rbx,%rax
  jne    L689
L176:
  mov    0x10(%rsp),%rbp
  jmp    L499
  nopl   0x0(%rax)
L455:
  movss  0x0(%rbp,%r12,1),%xmm0
  ucomiss D233(%rip),%xmm0
  jp     L168
L579:
  jne    L168
  add    $0x4,%rbp
  cmp    %rbx,%rbp
  je     L692
L499:
  movss  0x0(%rbp),%xmm0
  ucomiss D233(%rip),%xmm0
  jp     L26
  je     L455
L26:
  xor    %eax,%eax
  call   <abort@plt>
  movss  0x0(%rbp,%r12,1),%xmm0
  ucomiss D233(%rip),%xmm0
  jnp    L579
  nopw   0x0(%rax,%rax,1)
L168:
  xor    %eax,%eax
  add    $0x4,%rbp
  call   <abort@plt>
  cmp    %rbx,%rbp
  jne    L499
L692:
  mov    0x28(%rsp),%rcx
  mov    0x18(%rsp),%rdi
  mov    0x48(%rsp),%rax
  mov    %rcx,%rdx
  mov    %rdi,%rsi
  sub    %rax,%rdx
  sub    %rax,%rsi
  cmp    $0x8,%r14
  seta   %al
  cmp    $0x8,%rdx
  mov    %rdx,0x38(%rsp)
  seta   %dl
  mov    %rsi,0x40(%rsp)
  and    %edx,%eax
  cmp    $0x8,%rsi
  seta   %dl
  and    %edx,%eax
  mov    %eax,%edx
  mov    %al,0x57(%rsp)
  mov    0x20(%rsp),%rax
  lea    0x4(%rax),%rsi
  mov    %rcx,%rax
  sub    %rsi,%rax
  mov    %rsi,0x58(%rsp)
  cmp    $0x8,%rax
  mov    %rdi,%rax
  seta   0x54(%rsp)
  sub    %rsi,%rax
  mov    %rcx,%rsi
  movzbl 0x54(%rsp),%r11d
  cmp    $0x8,%rax
  lea    0x4(%rcx),%rcx
  mov    %rdi,%rax
  seta   0x55(%rsp)
  sub    %rcx,%rax
  movzbl 0x55(%rsp),%r8d
  cmp    $0x8,%rax
  mov    %edx,%eax
  mov    %rcx,0x60(%rsp)
  seta   0x56(%rsp)
  and    %r11d,%eax
  movzbl 0x56(%rsp),%ecx
  test   %al,%r8b
  je     L860
  test   %cl,%cl
  je     L860
  mov    0x10(%rsp),%rdx
  movaps D247(%rip),%xmm1
  pxor   %xmm0,%xmm0
  sub    %rdx,%rdi
  mov    %rdx,%rax
  sub    %rdx,%rsi
  mov    %rdi,%rdx
  cs nopw 0x0(%rax,%rax,1)
L54:
  movups %xmm1,(%rax)
  movups %xmm0,(%rax,%r12,1)
  movups %xmm0,(%rsi,%rax,1)
  movups %xmm0,(%rdx,%rax,1)
  add    $0x10,%rax
  cmp    %rbx,%rax
  jne    L54
L696:
  mov    0x10(%rsp),%rax
  cmp    $0x8,%r14
  jbe    L500
  nopl   0x0(%rax,%rax,1)
L345:
  movups (%rax),%xmm1
  add    $0x10,%rax
  movaps %xmm1,%xmm0
  mulps  %xmm1,%xmm0
  mulps  %xmm1,%xmm0
  divps  %xmm1,%xmm0
  movups %xmm0,-0x10(%rax,%r12,1)
  cmp    %rbx,%rax
  jne    L345
L246:
  mov    0x10(%rsp),%rdi
  mov    0x28(%rsp),%rdx
  sub    %rdi,%rdx
  cmpq   $0x8,0x38(%rsp)
  mov    %rdi,%rax
  jbe    L712
  nopw   0x0(%rax,%rax,1)
L423:
  movups (%rax),%xmm1
  movaps %xmm1,%xmm0
  addps  %xmm1,%xmm0
  addps  %xmm1,%xmm0
  addps  %xmm1,%xmm0
  divps  %xmm1,%xmm0
  movups %xmm0,(%rdx,%rax,1)
  add    $0x10,%rax
  cmp    %rbx,%rax
  jne    L423
L649:
  mov    0x10(%rsp),%rdi
  mov    0x18(%rsp),%rdx
  sub    %rdi,%rdx
  cmpq   $0x8,0x40(%rsp)
  mov    %rdi,%rax
  jbe    L547
  nopl   0x0(%rax,%rax,1)
L299:
  movups (%rax),%xmm1
  movaps %xmm1,%xmm0
  mulps  %xmm1,%xmm0
  addps  %xmm1,%xmm0
  divps  %xmm1,%xmm0
  subps  %xmm1,%xmm0
  movups %xmm0,(%rdx,%rax,1)
  add    $0x10,%rax
  cmp    %rbx,%rax
  jne    L299
L580:
  mov    0x10(%rsp),%rax
  mov    0x28(%rsp),%rbp
  mov    %r14,0x68(%rsp)
  mov    0x18(%rsp),%r13
  mov    %rax,%r15
  sub    %rax,%rbp
  mov    %rax,%r14
  jmp    L704
  xchg   %ax,%ax
L851:
  movss  (%r14,%r12,1),%xmm0
  ucomiss D31(%rip),%xmm0
  jp     L23
L930:
  jne    L23
  movss  (%r14,%rbp,1),%xmm0
  ucomiss D204(%rip),%xmm0
  jp     L334
L414:
  jne    L334
L384:
  mov    %r13,%rcx
  movss  D161(%rip),%xmm2
  sub    %r15,%rcx
  ucomiss (%rcx,%r14,1),%xmm2
  jp     L418
  jne    L418
  add    $0x4,%r14
  cmp    %rbx,%r14
  je     L386
L704:
  movss  (%r14),%xmm0
  ucomiss D247(%rip),%xmm0
  jp     L437
  je     L851
L437:
  xor    %eax,%eax
  call   <abort@plt>
  movss  (%r14,%r12,1),%xmm0
  ucomiss D31(%rip),%xmm0
  jnp    L930
  nopl   0x0(%rax)
L23:
  xor    %eax,%eax
  call   <abort@plt>
  movss  (%r14,%rbp,1),%xmm0
  ucomiss D204(%rip),%xmm0
  jnp    L414
  xchg   %ax,%ax
L334:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L384
  nopl   0x0(%rax)
L500:
  movss  (%rax),%xmm1
  add    $0x4,%rax
  movaps %xmm1,%xmm0
  mulss  %xmm1,%xmm0
  mulss  %xmm1,%xmm0
  divss  %xmm1,%xmm0
  movss  %xmm0,-0x4(%rax,%r12,1)
  cmp    %rbx,%rax
  jne    L500
  jmp    L246
  nopl   0x0(%rax,%rax,1)
L712:
  movss  (%rax),%xmm1
  movaps %xmm1,%xmm0
  addss  %xmm1,%xmm0
  addss  %xmm1,%xmm0
  addss  %xmm1,%xmm0
  divss  %xmm1,%xmm0
  movss  %xmm0,(%rdx,%rax,1)
  add    $0x4,%rax
  cmp    %rbx,%rax
  jne    L712
  jmp    L649
  nopw   0x0(%rax,%rax,1)
L547:
  movss  (%rax),%xmm1
  movaps %xmm1,%xmm0
  mulss  %xmm1,%xmm0
  addss  %xmm1,%xmm0
  divss  %xmm1,%xmm0
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rdx,%rax,1)
  add    $0x4,%rax
  cmp    %rbx,%rax
  jne    L547
  jmp    L580
  nopw   0x0(%rax,%rax,1)
L418:
  xor    %eax,%eax
  add    $0x4,%r14
  mov    %rcx,0x8(%rsp)
  call   <abort@plt>
  mov    0x8(%rsp),%rcx
  cmp    %rbx,%r14
  jne    L704
L386:
  mov    0x30(%rsp),%rsi
  mov    0x68(%rsp),%r14
  mov    %rcx,%r13
  mov    %rsi,%rax
  sub    0x48(%rsp),%rax
  cmp    $0x8,%rax
  mov    %rsi,%rax
  seta   %dl
  sub    0x58(%rsp),%rax
  cmp    $0x8,%rax
  mov    %rsi,%rax
  seta   %r8b
  sub    0x60(%rsp),%rax
  cmp    $0x8,%rax
  mov    0x18(%rsp),%rax
  seta   %dil
  lea    0x4(%rax),%r9
  mov    %rsi,%rax
  sub    %r9,%rax
  cmp    $0x8,%rax
  movzbl 0x57(%rsp),%eax
  seta   %r9b
  and    %edx,%eax
  and    0x54(%rsp),%al
  and    0x55(%rsp),%al
  and    %r8d,%eax
  and    0x56(%rsp),%al
  test   %dil,%al
  je     L373
  test   %r9b,%r9b
  je     L373
  mov    0x10(%rsp),%rcx
  movaps D233(%rip),%xmm1
  pxor   %xmm0,%xmm0
  sub    %rcx,%rsi
  mov    %rcx,%rax
  mov    %rsi,%r10
  nopw   0x0(%rax,%rax,1)
L609:
  movups %xmm1,(%rax)
  movups %xmm0,(%rax,%r12,1)
  movups %xmm0,(%rax,%rbp,1)
  movups %xmm0,0x0(%r13,%rax,1)
  movups %xmm0,(%r10,%rax,1)
  add    $0x10,%rax
  cmp    %rbx,%rax
  jne    L609
L31:
  mov    0x10(%rsp),%rax
  cmp    $0x8,%r14
  jbe    L523
  nopw   0x0(%rax,%rax,1)
L619:
  movups (%rax),%xmm1
  add    $0x10,%rax
  movaps %xmm1,%xmm0
  mulps  %xmm1,%xmm0
  mulps  %xmm1,%xmm0
  divps  %xmm1,%xmm0
  movups %xmm0,-0x10(%rax,%r12,1)
  cmp    %rbx,%rax
  jne    L619
L583:
  cmpq   $0x8,0x38(%rsp)
  mov    0x10(%rsp),%rax
  jbe    L443
  nop
L802:
  movups (%rax),%xmm1
  add    $0x10,%rax
  movaps %xmm1,%xmm0
  addps  %xmm1,%xmm0
  addps  %xmm1,%xmm0
  addps  %xmm1,%xmm0
  divps  %xmm1,%xmm0
  movups %xmm0,-0x10(%rax,%rbp,1)
  cmp    %rbx,%rax
  jne    L802
L179:
  cmpq   $0x8,0x40(%rsp)
  mov    0x10(%rsp),%rax
  jbe    L647
  nopl   0x0(%rax)
L616:
  movups (%rax),%xmm1
  add    $0x10,%rax
  movaps %xmm1,%xmm0
  mulps  %xmm1,%xmm0
  addps  %xmm1,%xmm0
  divps  %xmm1,%xmm0
  subps  %xmm1,%xmm0
  movups %xmm0,-0x10(%rax,%r13,1)
  cmp    %rbx,%rax
  jne    L616
L463:
  and    %r8d,%edx
  test   %dil,%dl
  je     L198
  test   %r9b,%r9b
  je     L198
  mov    0x10(%rsp),%rdi
  mov    0x30(%rsp),%rdx
  mov    %rdi,%rax
  sub    %rdi,%rdx
  xchg   %ax,%ax
L646:
  movups (%rax,%r12,1),%xmm0
  movups (%rax),%xmm6
  movups (%rax,%rbp,1),%xmm7
  movups (%rax,%r13,1),%xmm4
  addps  %xmm6,%xmm0
  addps  %xmm7,%xmm0
  addps  %xmm4,%xmm0
  movups %xmm0,(%rdx,%rax,1)
  add    $0x10,%rax
  cmp    %rbx,%rax
  jne    L646
L501:
  mov    0x10(%rsp),%rax
  mov    0x30(%rsp),%r14
  mov    %rax,%r15
  sub    %rax,%r14
  jmp    L551
  nopl   0x0(%rax)
L520:
  movss  (%r15,%r12,1),%xmm0
  ucomiss D204(%rip),%xmm0
  jp     L311
L850:
  jne    L311
  movss  (%r15,%rbp,1),%xmm0
  ucomiss D204(%rip),%xmm0
  jp     L755
L14:
  jne    L755
  movss  D161(%rip),%xmm3
  ucomiss 0x0(%r13,%r15,1),%xmm3
  jp     L398
L610:
  jne    L398
  movss  (%r14,%r15,1),%xmm0
  ucomiss D51(%rip),%xmm0
  jp     L544
L656:
  jne    L544
  add    $0x4,%r15
  cmp    %rbx,%r15
  je     L164
L551:
  movss  (%r15),%xmm0
  ucomiss D233(%rip),%xmm0
  jp     L552
  je     L520
L552:
  xor    %eax,%eax
  call   <abort@plt>
  movss  (%r15,%r12,1),%xmm0
  ucomiss D204(%rip),%xmm0
  jnp    L850
L311:
  xor    %eax,%eax
  call   <abort@plt>
  movss  (%r15,%rbp,1),%xmm0
  ucomiss D204(%rip),%xmm0
  jnp    L14
  nopw   0x0(%rax,%rax,1)
L755:
  xor    %eax,%eax
  call   <abort@plt>
  movss  D161(%rip),%xmm3
  ucomiss 0x0(%r13,%r15,1),%xmm3
  jnp    L610
  nopl   0x0(%rax,%rax,1)
L398:
  xor    %eax,%eax
  call   <abort@plt>
  movss  (%r14,%r15,1),%xmm0
  ucomiss D51(%rip),%xmm0
  jnp    L656
  nopw   0x0(%rax,%rax,1)
L544:
  xor    %eax,%eax
  add    $0x4,%r15
  call   <abort@plt>
  cmp    %rbx,%r15
  jne    L551
L164:
  mov    0x10(%rsp),%rdi
  call   <free@plt>
  mov    0x20(%rsp),%rdi
  call   <free@plt>
  mov    0x28(%rsp),%rdi
  call   <free@plt>
  mov    0x18(%rsp),%rdi
  call   <free@plt>
  mov    0x30(%rsp),%rdi
  call   <free@plt>
  add    $0x78,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopw   0x0(%rax,%rax,1)
L523:
  movss  (%rax),%xmm1
  add    $0x4,%rax
  movaps %xmm1,%xmm0
  mulss  %xmm1,%xmm0
  mulss  %xmm1,%xmm0
  divss  %xmm1,%xmm0
  movss  %xmm0,-0x4(%rax,%r12,1)
  cmp    %rbx,%rax
  jne    L523
  jmp    L583
  nopl   0x0(%rax,%rax,1)
L443:
  movss  (%rax),%xmm1
  add    $0x4,%rax
  movaps %xmm1,%xmm0
  addss  %xmm1,%xmm0
  addss  %xmm1,%xmm0
  addss  %xmm1,%xmm0
  divss  %xmm1,%xmm0
  movss  %xmm0,-0x4(%rax,%rbp,1)
  cmp    %rbx,%rax
  jne    L443
  jmp    L179
  nopl   0x0(%rax,%rax,1)
L647:
  movss  (%rax),%xmm1
  add    $0x4,%rax
  movaps %xmm1,%xmm0
  mulss  %xmm1,%xmm0
  addss  %xmm1,%xmm0
  divss  %xmm1,%xmm0
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x4(%rax,%r13,1)
  cmp    %rbx,%rax
  jne    L647
  jmp    L463
L760:
  mov    0x10(%rsp),%rdi
  mov    0x20(%rsp),%rdx
  movss  D247(%rip),%xmm0
  mov    %rdi,%rax
  lea    0x200(%rdi),%rbx
  sub    %rdi,%rdx
  nopl   0x0(%rax,%rax,1)
L628:
  movss  %xmm0,(%rax)
  movl   $0x0,(%rdx,%rax,1)
  add    $0x4,%rax
  cmp    %rbx,%rax
  jne    L628
  mov    0x10(%rsp),%rdi
  mov    0x20(%rsp),%rdx
  mov    %rdi,%rax
  sub    %rdi,%rdx
  nopl   0x0(%rax)
L284:
  movss  (%rax),%xmm0
  movss  %xmm0,(%rdx,%rax,1)
  add    $0x4,%rax
  cmp    %rbx,%rax
  jne    L284
  jmp    L519
L198:
  mov    0x10(%rsp),%rdi
  mov    0x30(%rsp),%rdx
  mov    %rdi,%rax
  sub    %rdi,%rdx
  nop
L721:
  movss  (%rax,%r12,1),%xmm0
  addss  (%rax),%xmm0
  addss  (%rax,%rbp,1),%xmm0
  addss  0x0(%r13,%rax,1),%xmm0
  movss  %xmm0,(%rdx,%rax,1)
  add    $0x4,%rax
  cmp    %rbx,%rax
  jne    L721
  jmp    L501
L373:
  mov    0x10(%rsp),%rsi
  mov    0x30(%rsp),%r10
  movss  D233(%rip),%xmm0
  mov    %rsi,%rax
  sub    %rsi,%r10
  nopl   0x0(%rax)
L611:
  movss  %xmm0,(%rax)
  movl   $0x0,(%rax,%r12,1)
  movl   $0x0,(%rax,%rbp,1)
  movl   $0x0,(%rax,%r13,1)
  movl   $0x0,(%r10,%rax,1)
  add    $0x4,%rax
  cmp    %rbx,%rax
  jne    L611
  jmp    L31
L860:
  mov    0x10(%rsp),%rdi
  mov    0x28(%rsp),%rsi
  mov    0x18(%rsp),%rdx
  movss  D247(%rip),%xmm0
  mov    %rdi,%rax
  sub    %rdi,%rsi
  sub    %rdi,%rdx
  nopl   0x0(%rax)
L795:
  movss  %xmm0,(%rax)
  movl   $0x0,(%rax,%r12,1)
  movl   $0x0,(%rsi,%rax,1)
  movl   $0x0,(%rdx,%rax,1)
  add    $0x4,%rax
  cmp    %rbx,%rax
  jne    L795
  jmp    L696
L68:
  movss  D233(%rip),%xmm0
L636:
  movss  %xmm0,(%rax)
  add    $0x4,%rax
  movl   $0x0,-0x4(%rax,%r12,1)
  cmp    %rbx,%rax
  jne    L636
  mov    0x10(%rsp),%rax
  nopl   0x0(%rax,%rax,1)
L64:
  movss  (%rax),%xmm0
  add    $0x4,%rax
  movss  %xmm0,-0x4(%rax,%r12,1)
  cmp    %rbx,%rax
  jne    L64
  jmp    L176
```

tool_calls: name: extract_symbolic_data
arguments: label: D247
type_infered: f32[4]
name: extract_symbolic_data
arguments: label: D233
type_infered: f32[4]
name: extract_symbolic_data
arguments: label: D31
type_infered: f32
name: extract_symbolic_data
arguments: label: D204
type_infered: f32
name: extract_symbolic_data
arguments: label: D161
type_infered: f32
name: extract_symbolic_data
arguments: label: D51
type_infered: f32

tool: {"D247": [3.0,3.0,3.0,3.0]}

tool: {"D233": [2.0,2.0,2.0,2.0]}

tool: D31: 9

tool: D204: 4

tool: D161: 1

tool: D51: 11

assistant: ```c
int main(int argc, char **argv) {
  int N = 128;
  float *a, *b, *c, *d, *e;
  int i;
  int nbytes;
  nbytes = N * sizeof(float);
  a = (float *)malloc(nbytes);
  b = (float *)malloc(nbytes);
  c = (float *)malloc(nbytes);
  d = (float *)malloc(nbytes);
  e = (float *)malloc(nbytes);
  for (i = 0; i < N; i++) {
    a[i] = 3.0;
    b[i] = 0.0;
  }
#pragma acc enter data copyin(a [0:N]) copyin(b [0:N]) copyin(N) async
#pragma acc parallel present(a [0:N], b [0:N]) async wait
#pragma acc loop
  for (i = 0; i < N; i++)
    b[i] = a[i];
#pragma acc update host(a [0:N], b [0:N]) async wait
#pragma acc wait
  for (i = 0; i < N; i++) {
    if (a[i] != 3.0)
      abort();
    if (b[i] != 3.0)
      abort();
  }
  for (i = 0; i < N; i++) {
    a[i] = 2.0;
    b[i] = 0.0;
  }
#pragma acc update device(a [0:N], b [0:N]) async(1)
#pragma acc parallel present(a [0:N], b [0:N]) async(1)
#pragma acc loop
  for (i = 0; i < N; i++)
    b[i] = a[i];
#pragma acc update host(a [0:N], b [0:N]) async(1) wait(1)
#pragma acc wait(1)
  for (i = 0; i < N; i++) {
    if (a[i] != 2.0)
      abort();
    if (b[i] != 2.0)
      abort();
  }
  for (i = 0; i < N; i++) {
    a[i] = 3.0;
    b[i] = 0.0;
    c[i] = 0.0;
    d[i] = 0.0;
  }
#pragma acc update device(a [0:N]) async(1)
#pragma acc update device(b [0:N]) async(2)
#pragma acc enter data copyin(c [0:N], d [0:N]) async(3)
#pragma acc parallel present(a [0:N], b [0:N]) async(1) wait(1, 2)
#pragma acc loop
  for (i = 0; i < N; i++)
    b[i] = (a[i] * a[i] * a[i]) / a[i];
#pragma acc parallel present(a [0:N], c [0:N]) async(2) wait(1, 3)
#pragma acc loop
  for (i = 0; i < N; i++)
    c[i] = (a[i] + a[i] + a[i] + a[i]) / a[i];
#pragma acc parallel present(a [0:N], d [0:N]) async(3) wait(1, 3)
#pragma acc loop
  for (i = 0; i < N; i++)
    d[i] = ((a[i] * a[i] + a[i]) / a[i]) - a[i];
#pragma acc update host(a [0:N], b [0:N], c [0:N], d [0:N]) async(1) wait(1, 2, 3)
#pragma acc wait(1)
  for (i = 0; i < N; i++) {
    if (a[i] != 3.0)
      abort();
    if (b[i] != 9.0)
      abort();
    if (c[i] != 4.0)
      abort();
    if (d[i] != 1.0)
      abort();
  }
  for (i = 0; i < N; i++) {
    a[i] = 2.0;
    b[i] = 0.0;
    c[i] = 0.0;
    d[i] = 0.0;
    e[i] = 0.0;
  }
#pragma acc update device(a [0:N], b [0:N], c [0:N], d [0:N]) async(1)
#pragma acc enter data copyin(e [0:N]) async(5)
#pragma acc parallel present(a [0:N], b [0:N]) async(1) wait(1)
  for (int ii = 0; ii < N; ii++)
    b[ii] = (a[ii] * a[ii] * a[ii]) / a[ii];
#pragma acc parallel present(a [0:N], c [0:N]) async(2) wait(1)
  for (int ii = 0; ii < N; ii++)
    c[ii] = (a[ii] + a[ii] + a[ii] + a[ii]) / a[ii];
#pragma acc parallel present(a [0:N], d [0:N]) async(3) wait(1)
  for (int ii = 0; ii < N; ii++)
    d[ii] = ((a[ii] * a[ii] + a[ii]) / a[ii]) - a[ii];
#pragma acc parallel present(a [0:N], b [0:N], c [0:N], d [0:N], e [0:N]) wait(1, 5) async(4)
  for (int ii = 0; ii < N; ii++)
    e[ii] = a[ii] + b[ii] + c[ii] + d[ii];
#pragma acc exit data copyout(a [0:N]) copyout(b [0:N]) copyout(c [0:N]) copyout(d [0:N]) copyout(e [0:N]) wait(1, 2, 3, 4) async(1)
#pragma acc exit data delete (N)
#pragma acc wait(1)
  for (i = 0; i < N; i++) {
    if (a[i] != 2.0)
      abort();
    if (b[i] != 4.0)
      abort();
    if (c[i] != 4.0)
      abort();
    if (d[i] != 1.0)
      abort();
    if (e[i] != 11.0)
      abort();
  }
  free(a);
  free(b);
  free(c);
  free(d);
  free(e);
  return 0;
}
```