user: Translate the below assembly code into C programming language:

```asm
<main>:
  endbr64
  push   %r15
  mov    $0x20,%edi
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x38,%rsp
  call   <malloc@plt>
  mov    $0x20,%edi
  mov    %rax,%rbp
  call   <malloc@plt>
  mov    $0x20,%edi
  mov    %rbp,%r14
  lea    0x20(%rbp),%r15
  mov    %rax,%r13
  call   <malloc@plt>
  mov    %r13,%r12
  mov    %rax,0x18(%rsp)
  sub    %rbp,%r12
  mov    %rbp,%rax
  nopl   0x0(%rax,%rax,1)
L2409:
  movl   $0x40400000,(%rax)
  add    $0x4,%rax
  movl   $0x0,-0x4(%rax,%r12,1)
  mov    %r13,0x10(%rsp)
  cmp    %r15,%rax
  jne    L2409
  mov    %rbp,%rax
L313:
  movss  (%rax),%xmm0
  add    $0x4,%rax
  movss  %xmm0,-0x4(%rax,%r12,1)
  cmp    %r15,%rax
  jne    L313
  lea    0x20(%r13),%rax
  mov    %r13,%rbx
  mov    %rax,0x8(%rsp)
  jmp    L2352
  nopw   0x0(%rax,%rax,1)
L217:
  add    $0x4,%rbx
  cmp    0x8(%rsp),%rbx
  je     L464
L2352:
  movss  (%rbx),%xmm0
  ucomiss D75(%rip),%xmm0
  jp     L1349
  je     L217
L1349:
  xor    %eax,%eax
  add    $0x4,%rbx
  call   <abort@plt>
  cmp    0x8(%rsp),%rbx
  jne    L2352
L464:
  mov    $0x20,%esi
  mov    %rbp,%rdi
  call   <acc_is_present@plt>
  test   %rax,%rax
  jne    L1930
L777:
  mov    $0x20,%esi
  mov    %r13,%rdi
  call   <acc_is_present@plt>
  test   %rax,%rax
  jne    L81
L1071:
  mov    %rbp,%rax
  nopl   0x0(%rax,%rax,1)
L961:
  movl   $0x40a00000,(%rax)
  add    $0x4,%rax
  movl   $0x3f800000,-0x4(%rax,%r12,1)
  cmp    %r15,%rax
  jne    L961
  mov    %rbp,%rax
  nopl   0x0(%rax,%rax,1)
L831:
  movss  (%rax),%xmm0
  add    $0x4,%rax
  movss  %xmm0,-0x4(%rax,%r12,1)
  cmp    %r15,%rax
  jne    L831
  mov    %r13,%rbx
  jmp    L2124
  nopl   0x0(%rax)
L2145:
  add    $0x4,%rbx
  cmp    0x8(%rsp),%rbx
  je     L2177
L2124:
  movss  (%rbx),%xmm0
  ucomiss D297(%rip),%xmm0
  jp     L221
  je     L2145
L221:
  xor    %eax,%eax
  add    $0x4,%rbx
  call   <abort@plt>
  cmp    0x8(%rsp),%rbx
  jne    L2124
L2177:
  mov    $0x20,%esi
  mov    %rbp,%rdi
  call   <acc_is_present@plt>
  test   %rax,%rax
  jne    L981
L2146:
  mov    $0x20,%esi
  mov    %r13,%rdi
  call   <acc_is_present@plt>
  test   %rax,%rax
  jne    L223
L1428:
  mov    %rbp,%rax
  nopl   0x0(%rax,%rax,1)
L1269:
  movl   $0x40c00000,(%rax)
  add    $0x4,%rax
  movl   $0x0,-0x4(%rax,%r12,1)
  cmp    %r15,%rax
  jne    L1269
  mov    $0x20,%esi
  mov    %rbp,%rdi
  call   <acc_copyin@plt>
  mov    %rax,0x20(%rsp)
  mov    %rbp,%rax
  nopl   (%rax)
L2385:
  movl   $0x41100000,(%rax)
  add    $0x4,%rax
  cmp    %r15,%rax
  jne    L2385
  mov    %rbp,%rax
  nopw   0x0(%rax,%rax,1)
L1252:
  movss  (%rax),%xmm0
  add    $0x4,%rax
  movss  %xmm0,-0x4(%rax,%r12,1)
  cmp    %r15,%rax
  jne    L1252
  mov    %r13,%rbx
  jmp    L1958
  nopl   0x0(%rax)
L934:
  add    $0x4,%rbx
  cmp    0x8(%rsp),%rbx
  je     L2063
L1958:
  movss  (%rbx),%xmm0
  ucomiss D25(%rip),%xmm0
  jp     L357
  je     L934
L357:
  xor    %eax,%eax
  add    $0x4,%rbx
  call   <abort@plt>
  cmp    0x8(%rsp),%rbx
  jne    L1958
L2063:
  mov    $0x20,%esi
  mov    %rbp,%rdi
  call   <acc_is_present@plt>
  test   %rax,%rax
  je     L2417
L1339:
  mov    $0x20,%esi
  mov    %r13,%rdi
  call   <acc_is_present@plt>
  test   %rax,%rax
  jne    L532
L1626:
  mov    0x20(%rsp),%rdi
  call   <acc_free@plt>
  mov    %rbp,%rax
  nopl   (%rax)
L1846:
  movl   $0x40c00000,(%rax)
  add    $0x4,%rax
  movl   $0x0,-0x4(%rax,%r12,1)
  cmp    %r15,%rax
  jne    L1846
  mov    %rbp,%rax
  nopl   0x0(%rax,%rax,1)
L1136:
  movss  (%rax),%xmm0
  add    $0x4,%rax
  movss  %xmm0,-0x4(%rax,%r12,1)
  cmp    %r15,%rax
  jne    L1136
  mov    %r13,%rbx
  jmp    L1589
  nopl   0x0(%rax)
L2172:
  add    $0x4,%rbx
  cmp    0x8(%rsp),%rbx
  je     L1093
L1589:
  movss  (%rbx),%xmm0
  ucomiss D25(%rip),%xmm0
  jp     L1695
  je     L2172
L1695:
  xor    %eax,%eax
  add    $0x4,%rbx
  call   <abort@plt>
  cmp    0x8(%rsp),%rbx
  jne    L1589
L1093:
  mov    $0x20,%esi
  mov    %rbp,%rdi
  call   <acc_is_present@plt>
  test   %rax,%rax
  jne    L2112
L983:
  mov    $0x20,%esi
  mov    %r13,%rdi
  call   <acc_is_present@plt>
  test   %rax,%rax
  jne    L1149
L1808:
  mov    %rbp,%rax
  nopl   0x0(%rax,%rax,1)
L13:
  movl   $0x40a00000,(%rax)
  add    $0x4,%rax
  movl   $0x40000000,-0x4(%rax,%r12,1)
  cmp    %r15,%rax
  jne    L13
  mov    $0x20,%esi
  mov    %r13,%rdi
  call   <acc_copyin@plt>
  mov    %rax,0x20(%rsp)
  mov    %rbp,%rax
  nopl   (%rax)
L3:
  movss  (%rax),%xmm0
  add    $0x4,%rax
  movss  %xmm0,-0x4(%rax,%r12,1)
  cmp    %r15,%rax
  jne    L3
  mov    %rbp,%rbx
  jmp    L42
  nopl   0x0(%rax)
L679:
  movss  (%rbx,%r12,1),%xmm0
  ucomiss D73(%rip),%xmm0
  jp     L747
  jne    L747
  add    $0x4,%rbx
  cmp    %r15,%rbx
  je     L1375
L42:
  movss  (%rbx),%xmm0
  ucomiss D297(%rip),%xmm0
  jp     L1218
  je     L679
L1218:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L679
  nopw   0x0(%rax,%rax,1)
L747:
  xor    %eax,%eax
  add    $0x4,%rbx
  call   <abort@plt>
  cmp    %r15,%rbx
  jne    L42
L1375:
  mov    $0x20,%esi
  mov    %rbp,%rdi
  call   <acc_is_present@plt>
  test   %rax,%rax
  jne    L1361
L116:
  mov    $0x20,%esi
  mov    %r13,%rdi
  call   <acc_is_present@plt>
  test   %rax,%rax
  je     L329
L1246:
  mov    0x20(%rsp),%rdi
  call   <acc_free@plt>
  mov    $0x20,%esi
  mov    %r13,%rdi
  call   <acc_is_present@plt>
  test   %rax,%rax
  jne    L319
L1677:
  mov    %rbp,%rax
  nop
L1251:
  movl   $0x40400000,(%rax)
  add    $0x4,%rax
  movl   $0x40800000,-0x4(%rax,%r12,1)
  cmp    %r15,%rax
  jne    L1251
  mov    %rbp,%rax
  nopl   0x0(%rax,%rax,1)
L23:
  movss  D273(%rip),%xmm0
  addss  (%rax),%xmm0
  add    $0x4,%rax
  movss  %xmm0,-0x4(%rax)
  addss  D73(%rip),%xmm0
  movss  %xmm0,-0x4(%rax,%r12,1)
  cmp    %r15,%rax
  jne    L23
  mov    %rbp,%rbx
  jmp    L2159
  xchg   %ax,%ax
L58:
  movss  (%rbx,%r12,1),%xmm0
  ucomiss D25(%rip),%xmm0
  jp     L2033
  jne    L2033
  add    $0x4,%rbx
  cmp    %r15,%rbx
  je     L2350
L2159:
  movss  (%rbx),%xmm0
  ucomiss D69(%rip),%xmm0
  jp     L592
  je     L58
L592:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L58
  nopw   0x0(%rax,%rax,1)
L2033:
  xor    %eax,%eax
  add    $0x4,%rbx
  call   <abort@plt>
  cmp    %r15,%rbx
  jne    L2159
L2350:
  mov    $0x20,%esi
  mov    %rbp,%rdi
  call   <acc_is_present@plt>
  test   %rax,%rax
  jne    L406
L1120:
  mov    $0x20,%esi
  mov    %r13,%rdi
  call   <acc_is_present@plt>
  test   %rax,%rax
  jne    L1551
L763:
  mov    %rbp,%rax
  nopw   0x0(%rax,%rax,1)
L1772:
  movl   $0x40800000,(%rax)
  add    $0x4,%rax
  movl   $0x40e00000,-0x4(%rax,%r12,1)
  cmp    %r15,%rax
  jne    L1772
  mov    %rbp,%rax
  nopl   0x0(%rax,%rax,1)
L2170:
  movss  D273(%rip),%xmm0
  addss  (%rax),%xmm0
  lea    (%rax,%r12,1),%rdx
  add    $0x4,%rax
  movss  %xmm0,-0x4(%rax)
  movss  D73(%rip),%xmm0
  addss  (%rdx),%xmm0
  movss  %xmm0,(%rdx)
  cmp    %r15,%rax
  jne    L2170
  mov    %rbp,%rbx
  jmp    L656
  nopl   0x0(%rax,%rax,1)
L846:
  movss  (%rbx,%r12,1),%xmm0
  ucomiss D179(%rip),%xmm0
  jp     L1166
  jne    L1166
  add    $0x4,%rbx
  cmp    %r15,%rbx
  je     L782
L656:
  movss  (%rbx),%xmm0
  ucomiss D297(%rip),%xmm0
  jp     L231
  je     L846
L231:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L846
  nopw   0x0(%rax,%rax,1)
L1166:
  xor    %eax,%eax
  add    $0x4,%rbx
  call   <abort@plt>
  cmp    %r15,%rbx
  jne    L656
L782:
  mov    $0x20,%esi
  mov    %rbp,%rdi
  call   <acc_is_present@plt>
  test   %rax,%rax
  jne    L1105
L27:
  mov    $0x20,%esi
  mov    %r13,%rdi
  call   <acc_is_present@plt>
  test   %rax,%rax
  jne    L1832
L1591:
  mov    %rbp,%rax
  nop
L1628:
  movl   $0x40400000,(%rax)
  add    $0x4,%rax
  movl   $0x40e00000,-0x4(%rax,%r12,1)
  cmp    %r15,%rax
  jne    L1628
  mov    $0x20,%esi
  mov    %rbp,%rdi
  call   <acc_copyin@plt>
  mov    $0x20,%esi
  mov    %r13,%rdi
  call   <acc_copyin@plt>
  mov    %rbp,%rax
  nopl   (%rax)
L315:
  movss  D273(%rip),%xmm0
  addss  (%rax),%xmm0
  lea    (%rax,%r12,1),%rdx
  add    $0x4,%rax
  movss  %xmm0,-0x4(%rax)
  movss  D73(%rip),%xmm0
  addss  (%rdx),%xmm0
  movss  %xmm0,(%rdx)
  cmp    %r15,%rax
  jne    L315
  mov    %rbp,%rbx
  jmp    L2357
  nopl   0x0(%rax,%rax,1)
L1022:
  movss  (%rbx,%r12,1),%xmm0
  ucomiss D108(%rip),%xmm0
  jp     L185
  jne    L185
  add    $0x4,%rbx
  cmp    %r15,%rbx
  je     L1709
L2357:
  movss  (%rbx),%xmm0
  ucomiss D75(%rip),%xmm0
  jp     L471
  je     L1022
L471:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L1022
  nopw   0x0(%rax,%rax,1)
L185:
  xor    %eax,%eax
  add    $0x4,%rbx
  call   <abort@plt>
  cmp    %r15,%rbx
  jne    L2357
L1709:
  mov    $0x20,%esi
  mov    %rbp,%rdi
  call   <acc_is_present@plt>
  test   %rax,%rax
  je     L2299
L1971:
  mov    $0x20,%esi
  mov    %r13,%rdi
  call   <acc_is_present@plt>
  test   %rax,%rax
  je     L953
L1420:
  mov    %rbp,%rdi
  call   <acc_deviceptr@plt>
  mov    %rbp,%rdi
  mov    %rax,%rbx
  call   <acc_unmap_data@plt>
  mov    %rbx,%rdi
  call   <acc_free@plt>
  mov    %r13,%rdi
  call   <acc_deviceptr@plt>
  mov    %r13,%rdi
  mov    %rax,%rbx
  call   <acc_unmap_data@plt>
  mov    %rbx,%rdi
  call   <acc_free@plt>
  mov    %rbp,%rax
  nopl   (%rax)
L393:
  movl   $0x40400000,(%rax)
  add    $0x4,%rax
  movl   $0x40e00000,-0x4(%rax,%r12,1)
  cmp    %r15,%rax
  jne    L393
  mov    0x18(%rsp),%rbx
  mov    %rbp,%rax
  sub    %rbp,%rbx
  nopl   0x0(%rax,%rax,1)
L2239:
  movss  (%rax),%xmm0
  add    $0x4,%rax
  movss  %xmm0,-0x4(%rax,%rbx,1)
  movss  %xmm0,-0x4(%rax,%r12,1)
  cmp    %r15,%rax
  jne    L2239
  mov    %rbp,%rdx
  jmp    L986
  nopw   0x0(%rax,%rax,1)
L778:
  movss  (%rdx,%r12,1),%xmm0
  ucomiss D75(%rip),%xmm0
  jp     L730
  jne    L730
  add    $0x4,%rdx
  cmp    %r15,%rdx
  je     L1586
L986:
  movss  (%rdx),%xmm0
  ucomiss D75(%rip),%xmm0
  jp     L2001
  je     L778
L2001:
  xor    %eax,%eax
  mov    %rdx,0x20(%rsp)
  call   <abort@plt>
  mov    0x20(%rsp),%rdx
  jmp    L778
  nopl   0x0(%rax)
L730:
  xor    %eax,%eax
  mov    %rdx,0x20(%rsp)
  call   <abort@plt>
  mov    0x20(%rsp),%rdx
  add    $0x4,%rdx
  cmp    %r15,%rdx
  jne    L986
L1586:
  mov    $0x20,%esi
  mov    %rbp,%rdi
  call   <acc_is_present@plt>
  test   %rax,%rax
  jne    L1133
L502:
  mov    $0x20,%esi
  mov    %r13,%rdi
  call   <acc_is_present@plt>
  test   %rax,%rax
  jne    L1075
L1810:
  mov    0x18(%rsp),%rdi
  mov    $0x20,%esi
  call   <acc_is_present@plt>
  test   %rax,%rax
  jne    L1009
L1877:
  mov    %rbp,%rax
  nopl   0x0(%rax)
L1313:
  movl   $0x40800000,(%rax)
  add    $0x4,%rax
  movl   $0x41000000,-0x4(%rax,%r12,1)
  cmp    %r15,%rax
  jne    L1313
  mov    %rbp,%rax
  nopl   0x0(%rax,%rax,1)
L211:
  movss  (%rax),%xmm0
  add    $0x4,%rax
  movss  %xmm0,-0x4(%rax,%rbx,1)
  movss  %xmm0,-0x4(%rax,%r12,1)
  cmp    %r15,%rax
  jne    L211
  mov    %rbp,%rdx
  jmp    L2175
  nopw   0x0(%rax,%rax,1)
L338:
  movss  (%rdx,%r12,1),%xmm0
  ucomiss D69(%rip),%xmm0
  jp     L1536
  jne    L1536
  add    $0x4,%rdx
  cmp    %r15,%rdx
  je     L1690
L2175:
  movss  (%rdx),%xmm0
  ucomiss D69(%rip),%xmm0
  jp     L388
  je     L338
L388:
  xor    %eax,%eax
  mov    %rdx,0x20(%rsp)
  call   <abort@plt>
  mov    0x20(%rsp),%rdx
  jmp    L338
  nopl   0x0(%rax)
L1536:
  xor    %eax,%eax
  mov    %rdx,0x20(%rsp)
  call   <abort@plt>
  mov    0x20(%rsp),%rdx
  add    $0x4,%rdx
  cmp    %r15,%rdx
  jne    L2175
L1690:
  mov    $0x20,%esi
  mov    %rbp,%rdi
  call   <acc_is_present@plt>
  test   %rax,%rax
  jne    L608
L1363:
  mov    $0x20,%esi
  mov    %r13,%rdi
  call   <acc_is_present@plt>
  test   %rax,%rax
  jne    L216
L1461:
  mov    0x18(%rsp),%rdi
  mov    $0x20,%esi
  call   <acc_is_present@plt>
  test   %rax,%rax
  jne    L495
L642:
  mov    %rbp,%rax
  nopl   0x0(%rax)
L90:
  movl   $0x40000000,(%rax)
  add    $0x4,%rax
  movl   $0x40a00000,-0x4(%rax,%r12,1)
  cmp    %r15,%rax
  jne    L90
  mov    $0x20,%edi
  call   <acc_malloc@plt>
  mov    0x18(%rsp),%rdi
  mov    $0x20,%edx
  mov    %rax,%rsi
  call   <acc_map_data@plt>
  mov    %rbp,%rax
  nop
L1090:
  movss  (%rax),%xmm0
  add    $0x4,%rax
  movss  %xmm0,-0x4(%rax,%rbx,1)
  movss  %xmm0,-0x4(%rax,%r12,1)
  cmp    %r15,%rax
  jne    L1090
  mov    %rbp,%rdx
  jmp    L1333
  nop
L2235:
  movss  (%rdx,%r12,1),%xmm0
  ucomiss D73(%rip),%xmm0
  jp     L2028
  jne    L2028
  add    $0x4,%rdx
  cmp    %r15,%rdx
  je     L450
L1333:
  movss  (%rdx),%xmm0
  ucomiss D73(%rip),%xmm0
  jp     L138
  je     L2235
L138:
  xor    %eax,%eax
  mov    %rdx,0x20(%rsp)
  call   <abort@plt>
  mov    0x20(%rsp),%rdx
  jmp    L2235
  nopl   0x0(%rax)
L2028:
  xor    %eax,%eax
  mov    %rdx,0x20(%rsp)
  call   <abort@plt>
  mov    0x20(%rsp),%rdx
  add    $0x4,%rdx
  cmp    %r15,%rdx
  jne    L1333
L450:
  mov    $0x20,%esi
  mov    %rbp,%rdi
  call   <acc_is_present@plt>
  test   %rax,%rax
  jne    L2307
L2055:
  mov    $0x20,%esi
  mov    %r13,%rdi
  call   <acc_is_present@plt>
  test   %rax,%rax
  jne    L2330
L37:
  mov    0x18(%rsp),%rdi
  mov    $0x20,%esi
  call   <acc_is_present@plt>
  test   %rax,%rax
  je     L916
L1791:
  mov    0x18(%rsp),%rdi
  call   <acc_deviceptr@plt>
  mov    0x18(%rsp),%rdi
  mov    %rax,0x20(%rsp)
  call   <acc_unmap_data@plt>
  mov    0x20(%rsp),%rdi
  call   <acc_free@plt>
  mov    %rbp,%rax
  nopl   0x0(%rax)
L1801:
  movl   $0x40800000,(%rax)
  add    $0x4,%rax
  movl   $0x41000000,-0x4(%rax,%r12,1)
  cmp    %r15,%rax
  jne    L1801
  mov    $0x20,%edi
  call   <acc_malloc@plt>
  mov    0x18(%rsp),%rdi
  mov    $0x20,%edx
  mov    %rax,%rsi
  mov    %rax,0x28(%rsp)
  call   <acc_map_data@plt>
  mov    %rbp,%rax
  nopl   0x0(%rax)
L2301:
  movss  (%rax),%xmm0
  add    $0x4,%rax
  movss  %xmm0,-0x4(%rax,%rbx,1)
  movss  %xmm0,-0x4(%rax,%r12,1)
  cmp    %r15,%rax
  jne    L2301
  mov    %rbp,%rdx
  jmp    L1258
  nopw   0x0(%rax,%rax,1)
L1039:
  movss  (%rdx,%r12,1),%xmm0
  ucomiss D69(%rip),%xmm0
  jp     L941
  jne    L941
  add    $0x4,%rdx
  cmp    %r15,%rdx
  je     L2378
L1258:
  movss  (%rdx),%xmm0
  ucomiss D69(%rip),%xmm0
  jp     L1230
  je     L1039
L1230:
  xor    %eax,%eax
  mov    %rdx,0x20(%rsp)
  call   <abort@plt>
  mov    0x20(%rsp),%rdx
  jmp    L1039
  nopl   0x0(%rax)
L941:
  xor    %eax,%eax
  mov    %rdx,0x20(%rsp)
  call   <abort@plt>
  mov    0x20(%rsp),%rdx
  add    $0x4,%rdx
  cmp    %r15,%rdx
  jne    L1258
L2378:
  mov    $0x20,%esi
  mov    %rbp,%rdi
  call   <acc_is_present@plt>
  test   %rax,%rax
  jne    L766
L1839:
  mov    $0x20,%esi
  mov    %r13,%rdi
  call   <acc_is_present@plt>
  test   %rax,%rax
  jne    L1754
L1432:
  mov    0x18(%rsp),%rdi
  mov    $0x20,%esi
  call   <acc_is_present@plt>
  test   %rax,%rax
  je     L2153
L1429:
  mov    0x18(%rsp),%rdi
  call   <acc_unmap_data@plt>
  mov    0x18(%rsp),%rdi
  mov    $0x20,%esi
  call   <acc_is_present@plt>
  test   %rax,%rax
  jne    L723
L2121:
  mov    0x28(%rsp),%rdi
  call   <acc_free@plt>
  mov    $0x20,%edi
  call   <acc_malloc@plt>
  mov    0x18(%rsp),%rdi
  mov    $0x20,%edx
  mov    %rax,%rsi
  call   <acc_map_data@plt>
  mov    0x18(%rsp),%rdi
  mov    $0x20,%esi
  call   <acc_is_present@plt>
  test   %rax,%rax
  je     L1627
L860:
  mov    $0x20,%edi
  call   <acc_malloc@plt>
  mov    %r13,%rdi
  mov    $0x20,%edx
  mov    %rax,%rsi
  call   <acc_map_data@plt>
  mov    $0x20,%esi
  mov    %r13,%rdi
  call   <acc_is_present@plt>
  test   %rax,%rax
  je     L572
L2162:
  mov    $0x20,%edi
  call   <acc_malloc@plt>
  mov    %rbp,%rdi
  mov    $0x20,%edx
  mov    %rax,%rsi
  call   <acc_map_data@plt>
  mov    $0x20,%esi
  mov    %rbp,%rdi
  call   <acc_is_present@plt>
  test   %rax,%rax
  je     L2000
L616:
  mov    %rbp,%rax
  nopl   0x0(%rax)
L1366:
  movl   $0x3f800000,(%rax)
  add    $0x4,%rax
  movl   $0x40000000,-0x4(%rax,%rbx,1)
  movl   $0x40800000,-0x4(%rax,%r12,1)
  cmp    %r15,%rax
  jne    L1366
  mov    $0x20,%esi
  mov    %rbp,%rdi
  call   <acc_is_present@plt>
  test   %rax,%rax
  je     L909
L385:
  mov    $0x20,%esi
  mov    %r13,%rdi
  call   <acc_is_present@plt>
  test   %rax,%rax
  je     L2053
L1294:
  mov    0x18(%rsp),%rdi
  mov    $0x20,%esi
  call   <acc_is_present@plt>
  test   %rax,%rax
  je     L964
L467:
  mov    $0x20,%esi
  mov    %r13,%rdi
  call   <acc_copyout@plt>
  mov    %rbp,%rdx
  jmp    L1438
  xchg   %ax,%ax
L898:
  movss  (%rdx,%r12,1),%xmm0
  ucomiss D69(%rip),%xmm0
  jp     L1622
  jne    L1622
  add    $0x4,%rdx
  cmp    %r15,%rdx
  je     L2190
L1438:
  movss  (%rdx),%xmm0
  ucomiss D69(%rip),%xmm0
  jp     L1950
  je     L898
L1950:
  xor    %eax,%eax
  mov    %rdx,0x20(%rsp)
  call   <abort@plt>
  mov    0x20(%rsp),%rdx
  jmp    L898
  nopl   0x0(%rax)
L1622:
  xor    %eax,%eax
  mov    %rdx,0x20(%rsp)
  call   <abort@plt>
  mov    0x20(%rsp),%rdx
  add    $0x4,%rdx
  cmp    %r15,%rdx
  jne    L1438
L2190:
  mov    %rbp,%rdi
  call   <acc_deviceptr@plt>
  mov    %rbp,%rdi
  mov    %rax,0x20(%rsp)
  call   <acc_unmap_data@plt>
  mov    0x20(%rsp),%rdi
  call   <acc_free@plt>
  mov    0x18(%rsp),%rdi
  call   <acc_deviceptr@plt>
  mov    0x18(%rsp),%rdi
  mov    %rax,0x20(%rsp)
  call   <acc_unmap_data@plt>
  mov    0x20(%rsp),%rdi
  call   <acc_free@plt>
  mov    %rbp,%rax
  nop
L1012:
  movl   $0x40400000,(%rax)
  add    $0x4,%rax
  movl   $0x40c00000,-0x4(%rax,%r12,1)
  cmp    %r15,%rax
  jne    L1012
  mov    $0x20,%edi
  call   <acc_malloc@plt>
  mov    %rax,%rdx
  mov    %rax,0x28(%rsp)
  mov    %rbp,%rax
  sub    %rbp,%rdx
L681:
  movss  (%rax),%xmm0
  movss  %xmm0,(%rdx,%rax,1)
  add    $0x4,%rax
  movss  %xmm0,-0x4(%rax,%r12,1)
  cmp    %r15,%rax
  jne    L681
  mov    %rbp,%rdx
  jmp    L1017
  xchg   %ax,%ax
L345:
  movss  (%rdx,%r12,1),%xmm0
  ucomiss D75(%rip),%xmm0
  jp     L1892
  jne    L1892
  add    $0x4,%rdx
  cmp    %r15,%rdx
  je     L2182
L1017:
  movss  (%rdx),%xmm0
  ucomiss D75(%rip),%xmm0
  jp     L658
  je     L345
L658:
  xor    %eax,%eax
  mov    %rdx,0x20(%rsp)
  call   <abort@plt>
  mov    0x20(%rsp),%rdx
  jmp    L345
  nopl   0x0(%rax)
L1892:
  xor    %eax,%eax
  mov    %rdx,0x20(%rsp)
  call   <abort@plt>
  mov    0x20(%rsp),%rdx
  add    $0x4,%rdx
  cmp    %r15,%rdx
  jne    L1017
L2182:
  mov    $0x20,%esi
  mov    %rbp,%rdi
  call   <acc_is_present@plt>
  test   %rax,%rax
  jne    L525
L552:
  mov    $0x20,%esi
  mov    %r13,%rdi
  call   <acc_is_present@plt>
  test   %rax,%rax
  jne    L702
L283:
  mov    0x28(%rsp),%rdi
  call   <acc_free@plt>
  mov    %rbp,%rax
  nopl   0x0(%rax,%rax,1)
L1295:
  movl   $0x40c00000,(%rax)
  add    $0x4,%rax
  movl   $0x0,-0x4(%rax,%r12,1)
  cmp    %r15,%rax
  jne    L1295
  mov    $0x20,%esi
  mov    %rbp,%rdi
  call   <acc_copyin@plt>
  mov    %rax,0x28(%rsp)
  mov    %rbp,%rax
  nopl   (%rax)
L1350:
  movl   $0x41100000,(%rax)
  add    $0x4,%rax
  cmp    %r15,%rax
  jne    L1350
  mov    %rbp,%rax
  nopw   0x0(%rax,%rax,1)
L2178:
  movss  (%rax),%xmm0
  add    $0x4,%rax
  movss  %xmm0,-0x4(%rax,%r12,1)
  cmp    %r15,%rax
  jne    L2178
  mov    %r13,%rdx
  jmp    L161
  nopl   0x0(%rax)
L2221:
  add    $0x4,%rdx
  cmp    0x8(%rsp),%rdx
  je     L2356
L161:
  movss  (%rdx),%xmm0
  ucomiss D25(%rip),%xmm0
  jp     L645
  je     L2221
L645:
  xor    %eax,%eax
  mov    %rdx,0x20(%rsp)
  call   <abort@plt>
  mov    0x20(%rsp),%rdx
  add    $0x4,%rdx
  cmp    0x8(%rsp),%rdx
  jne    L161
L2356:
  mov    $0x20,%esi
  mov    %rbp,%rdi
  call   <acc_is_present@plt>
  test   %rax,%rax
  je     L1167
L2359:
  mov    $0x20,%esi
  mov    %r13,%rdi
  call   <acc_is_present@plt>
  test   %rax,%rax
  jne    L2382
L2365:
  mov    0x28(%rsp),%rdi
  call   <acc_free@plt>
  mov    %rbp,%rax
  nop
L1459:
  movl   $0x40c00000,(%rax)
  add    $0x4,%rax
  movl   $0x0,-0x4(%rax,%r12,1)
  cmp    %r15,%rax
  jne    L1459
  mov    %rbp,%rax
  nopl   0x0(%rax,%rax,1)
L622:
  movss  (%rax),%xmm0
  add    $0x4,%rax
  movss  %xmm0,-0x4(%rax,%r12,1)
  cmp    %r15,%rax
  jne    L622
  jmp    L546
  cs nopw 0x0(%rax,%rax,1)
L2034:
  xor    %eax,%eax
  call   <abort@plt>
L1509:
  addq   $0x4,0x10(%rsp)
  mov    0x10(%rsp),%rax
  cmp    0x8(%rsp),%rax
  je     L212
L546:
  mov    0x10(%rsp),%rax
  movss  (%rax),%xmm0
  ucomiss D25(%rip),%xmm0
  jp     L2034
  je     L1509
  jmp    L2034
  nop
L212:
  mov    $0x20,%esi
  mov    %rbp,%rdi
  call   <acc_is_present@plt>
  test   %rax,%rax
  jne    L488
L1684:
  mov    $0x20,%esi
  mov    %r13,%rdi
  call   <acc_is_present@plt>
  test   %rax,%rax
  jne    L2
L71:
  mov    %rbp,%rax
  nop
L73:
  movl   $0x40a00000,(%rax)
  add    $0x4,%rax
  movl   $0x40e00000,-0x4(%rax,%r12,1)
  cmp    %r15,%rax
  jne    L73
  mov    %rbp,%rax
  nopl   0x0(%rax,%rax,1)
L1706:
  movss  (%rax),%xmm0
  add    $0x4,%rax
  movss  %xmm0,-0x4(%rax,%rbx,1)
  movss  %xmm0,-0x4(%rax,%r12,1)
  cmp    %r15,%rax
  jne    L1706
  jmp    L1303
L757:
  xor    %eax,%eax
  call   <abort@plt>
  nopl   0x0(%rax,%rax,1)
L1065:
  movss  (%r14,%r12,1),%xmm0
  ucomiss D297(%rip),%xmm0
  jp     L918
  jne    L918
  add    $0x4,%r14
  cmp    %r15,%r14
  je     L167
L1303:
  movss  (%r14),%xmm0
  ucomiss D297(%rip),%xmm0
  jp     L757
  je     L1065
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L1065
  nopl   0x0(%rax,%rax,1)
L918:
  xor    %eax,%eax
  add    $0x4,%r14
  call   <abort@plt>
  cmp    %r15,%r14
  jne    L1303
L167:
  mov    $0x20,%esi
  mov    %rbp,%rdi
  call   <acc_is_present@plt>
  test   %rax,%rax
  jne    L182
L901:
  mov    $0x20,%esi
  mov    %r13,%rdi
  call   <acc_is_present@plt>
  test   %rax,%rax
  jne    L2151
L1848:
  mov    0x18(%rsp),%rdi
  mov    $0x20,%esi
  call   <acc_is_present@plt>
  test   %rax,%rax
  jne    L1163
L924:
  add    $0x38,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L1930:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L777
L1163:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L924
L2151:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L1848
L182:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L901
L2:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L71
L488:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L1684
L2382:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L2365
L1167:
  call   <abort@plt>
  jmp    L2359
L702:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L283
L525:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L552
L964:
  call   <abort@plt>
  jmp    L467
L2053:
  call   <abort@plt>
  jmp    L1294
L909:
  call   <abort@plt>
  jmp    L385
L2000:
  call   <abort@plt>
  jmp    L616
L572:
  call   <abort@plt>
  jmp    L2162
L1627:
  call   <abort@plt>
  jmp    L860
L723:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L2121
L2153:
  call   <abort@plt>
  jmp    L1429
L1754:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L1432
L766:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L1839
L916:
  call   <abort@plt>
  jmp    L1791
L2330:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L37
L2307:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L2055
L495:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L642
L216:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L1461
L608:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L1363
L1009:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L1877
L1075:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L1810
L1133:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L502
L953:
  call   <abort@plt>
  jmp    L1420
L2299:
  call   <abort@plt>
  jmp    L1971
L1832:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L1591
L1105:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L27
L1551:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L763
L406:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L1120
L319:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L1677
L329:
  call   <abort@plt>
  jmp    L1246
L1361:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L116
L1149:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L1808
L2112:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L983
L532:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L1626
L2417:
  call   <abort@plt>
  jmp    L1339
L223:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L1428
L981:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L2146
L81:
  xor    %eax,%eax
  call   <abort@plt>
  jmp    L1071
```

tool_calls: name: parse_data
arguments: label: D75
type: f32
name: parse_data
arguments: label: D297
type: f32
name: parse_data
arguments: label: D25
type: f32
name: parse_data
arguments: label: D73
type: f32
name: parse_data
arguments: label: D273
type: f32
name: parse_data
arguments: label: D69
type: f32
name: parse_data
arguments: label: D179
type: f32
name: parse_data
arguments: label: D108
type: f32

tool: D75: 3

tool: D297: 5

tool: D25: 6

tool: D73: 2

tool: D273: 1

tool: D69: 4

tool: D179: 9

tool: D108: 7

assistant: ```c
int main(int argc, char **argv) {
  int N = 8;
  float *a, *b, *c, *d;
  int i;
  a = (float *)malloc(N * sizeof(float));
  b = (float *)malloc(N * sizeof(float));
  c = (float *)malloc(N * sizeof(float));
  for (i = 0; i < N; i++) {
    a[i] = 3.0;
    b[i] = 0.0;
  }
#pragma acc data copyin(a [0:N]) copyout(b [0:N])
  {
#pragma acc parallel
    {
      int ii;
      for (ii = 0; ii < N; ii++)
        b[ii] = a[ii];
    }
  }
  for (i = 0; i < N; i++) {
    if (b[i] != 3.0)
      abort();
  }
  if (acc_is_present(&a[0], (N * sizeof(float))))
    abort();
  if (acc_is_present(&b[0], (N * sizeof(float))))
    abort();
  for (i = 0; i < N; i++) {
    a[i] = 5.0;
    b[i] = 1.0;
  }
#pragma acc data copyin(a [0:N]) copyout(b [0:N])
  {
#pragma acc parallel
    {
      int ii;
      for (ii = 0; ii < N; ii++)
        b[ii] = a[ii];
    }
  }
  for (i = 0; i < N; i++) {
    if (b[i] != 5.0)
      abort();
  }
  if (acc_is_present(&a[0], (N * sizeof(float))))
    abort();
  if (acc_is_present(&b[0], (N * sizeof(float))))
    abort();
  for (i = 0; i < N; i++) {
    a[i] = 6.0;
    b[i] = 0.0;
  }
  d = (float *)acc_copyin(&a[0], N * sizeof(float));
  for (i = 0; i < N; i++) {
    a[i] = 9.0;
  }
#pragma acc data present_or_copyin(a [0:N]) copyout(b [0:N])
  {
#pragma acc parallel
    {
      int ii;
      for (ii = 0; ii < N; ii++)
        b[ii] = a[ii];
    }
  }
  for (i = 0; i < N; i++) {
    if (b[i] != 6.0)
      abort();
  }
  if (!acc_is_present(&a[0], (N * sizeof(float))))
    abort();
  if (acc_is_present(&b[0], (N * sizeof(float))))
    abort();
  acc_free(d);
  for (i = 0; i < N; i++) {
    a[i] = 6.0;
    b[i] = 0.0;
  }
#pragma acc data copyin(a [0:N]) present_or_copyout(b [0:N])
  {
#pragma acc parallel
    {
      int ii;
      for (ii = 0; ii < N; ii++)
        b[ii] = a[ii];
    }
  }
  for (i = 0; i < N; i++) {
    if (b[i] != 6.0)
      abort();
  }
  if (acc_is_present(&a[0], (N * sizeof(float))))
    abort();
  if (acc_is_present(&b[0], (N * sizeof(float))))
    abort();
  for (i = 0; i < N; i++) {
    a[i] = 5.0;
    b[i] = 2.0;
  }
  d = (float *)acc_copyin(&b[0], N * sizeof(float));
#pragma acc data copyin(a [0:N]) present_or_copyout(b [0:N])
  {
#pragma acc parallel
    {
      int ii;
      for (ii = 0; ii < N; ii++)
        b[ii] = a[ii];
    }
  }
  for (i = 0; i < N; i++) {
    if (a[i] != 5.0)
      abort();
    if (b[i] != 2.0)
      abort();
  }
  if (acc_is_present(&a[0], (N * sizeof(float))))
    abort();
  if (!acc_is_present(&b[0], (N * sizeof(float))))
    abort();
  acc_free(d);
  if (acc_is_present(&b[0], (N * sizeof(float))))
    abort();
  for (i = 0; i < N; i++) {
    a[i] = 3.0;
    b[i] = 4.0;
  }
#pragma acc data copy(a [0:N]) copyout(b [0:N])
  {
#pragma acc parallel
    {
      int ii;
      for (ii = 0; ii < N; ii++) {
        a[ii] = a[ii] + 1;
        b[ii] = a[ii] + 2;
      }
    }
  }
  for (i = 0; i < N; i++) {
    if (a[i] != 4.0)
      abort();
    if (b[i] != 6.0)
      abort();
  }
  if (acc_is_present(&a[0], (N * sizeof(float))))
    abort();
  if (acc_is_present(&b[0], (N * sizeof(float))))
    abort();
  for (i = 0; i < N; i++) {
    a[i] = 4.0;
    b[i] = 7.0;
  }
#pragma acc data present_or_copy(a [0:N]) present_or_copy(b [0:N])
  {
#pragma acc parallel
    {
      int ii;
      for (ii = 0; ii < N; ii++) {
        a[ii] = a[ii] + 1;
        b[ii] = b[ii] + 2;
      }
    }
  }
  for (i = 0; i < N; i++) {
    if (a[i] != 5.0)
      abort();
    if (b[i] != 9.0)
      abort();
  }
  if (acc_is_present(&a[0], (N * sizeof(float))))
    abort();
  if (acc_is_present(&b[0], (N * sizeof(float))))
    abort();
  for (i = 0; i < N; i++) {
    a[i] = 3.0;
    b[i] = 7.0;
  }
  d = (float *)acc_copyin(&a[0], N * sizeof(float));
  d = (float *)acc_copyin(&b[0], N * sizeof(float));
#pragma acc data present_or_copy(a [0:N]) present_or_copy(b [0:N])
  {
#pragma acc parallel
    {
      int ii;
      for (ii = 0; ii < N; ii++) {
        a[ii] = a[ii] + 1;
        b[ii] = b[ii] + 2;
      }
    }
  }
  for (i = 0; i < N; i++) {
    if (a[i] != 3.0)
      abort();
    if (b[i] != 7.0)
      abort();
  }
  if (!acc_is_present(&a[0], (N * sizeof(float))))
    abort();
  if (!acc_is_present(&b[0], (N * sizeof(float))))
    abort();
  d = (float *)acc_deviceptr(&a[0]);
  acc_unmap_data(&a[0]);
  acc_free(d);
  d = (float *)acc_deviceptr(&b[0]);
  acc_unmap_data(&b[0]);
  acc_free(d);
  for (i = 0; i < N; i++) {
    a[i] = 3.0;
    b[i] = 7.0;
  }
#pragma acc data copyin(a [0:N]) create(c [0:N]) copyout(b [0:N])
  {
#pragma acc parallel
    {
      int ii;
      for (ii = 0; ii < N; ii++) {
        c[ii] = a[ii];
        b[ii] = c[ii];
      }
    }
  }
  for (i = 0; i < N; i++) {
    if (a[i] != 3.0)
      abort();
    if (b[i] != 3.0)
      abort();
  }
  if (acc_is_present(&a[0], (N * sizeof(float))))
    abort();
  if (acc_is_present(&b[0], (N * sizeof(float))))
    abort();
  if (acc_is_present(&c[0], (N * sizeof(float))))
    abort();
  for (i = 0; i < N; i++) {
    a[i] = 4.0;
    b[i] = 8.0;
  }
#pragma acc data copyin(a [0:N]) present_or_create(c [0:N]) copyout(b [0:N])
  {
#pragma acc parallel
    {
      int ii;
      for (ii = 0; ii < N; ii++) {
        c[ii] = a[ii];
        b[ii] = c[ii];
      }
    }
  }
  for (i = 0; i < N; i++) {
    if (a[i] != 4.0)
      abort();
    if (b[i] != 4.0)
      abort();
  }
  if (acc_is_present(&a[0], (N * sizeof(float))))
    abort();
  if (acc_is_present(&b[0], (N * sizeof(float))))
    abort();
  if (acc_is_present(&c[0], (N * sizeof(float))))
    abort();
  for (i = 0; i < N; i++) {
    a[i] = 2.0;
    b[i] = 5.0;
  }
  d = (float *)acc_malloc(N * sizeof(float));
  acc_map_data(c, d, N * sizeof(float));
#pragma acc data copyin(a [0:N]) present_or_create(c [0:N]) copyout(b [0:N])
  {
#pragma acc parallel
    {
      int ii;
      for (ii = 0; ii < N; ii++) {
        c[ii] = a[ii];
        b[ii] = c[ii];
      }
    }
  }
  for (i = 0; i < N; i++) {
    if (a[i] != 2.0)
      abort();
    if (b[i] != 2.0)
      abort();
  }
  if (acc_is_present(a, (N * sizeof(float))))
    abort();
  if (acc_is_present(b, (N * sizeof(float))))
    abort();
  if (!acc_is_present(c, (N * sizeof(float))))
    abort();
  d = (float *)acc_deviceptr(c);
  acc_unmap_data(c);
  acc_free(d);
  for (i = 0; i < N; i++) {
    a[i] = 4.0;
    b[i] = 8.0;
  }
  d = (float *)acc_malloc(N * sizeof(float));
  acc_map_data(c, d, N * sizeof(float));
#pragma acc data copyin(a [0:N]) present(c [0:N]) copyout(b [0:N])
  {
#pragma acc parallel
    {
      int ii;
      for (ii = 0; ii < N; ii++) {
        c[ii] = a[ii];
        b[ii] = c[ii];
      }
    }
  }
  for (i = 0; i < N; i++) {
    if (a[i] != 4.0)
      abort();
    if (b[i] != 4.0)
      abort();
  }
  if (acc_is_present(a, (N * sizeof(float))))
    abort();
  if (acc_is_present(b, (N * sizeof(float))))
    abort();
  if (!acc_is_present(c, (N * sizeof(float))))
    abort();
  acc_unmap_data(c);
  if (acc_is_present(c, (N * sizeof(float))))
    abort();
  acc_free(d);
  d = (float *)acc_malloc(N * sizeof(float));
  acc_map_data(c, d, N * sizeof(float));
  if (!acc_is_present(c, (N * sizeof(float))))
    abort();
  d = (float *)acc_malloc(N * sizeof(float));
  acc_map_data(b, d, N * sizeof(float));
  if (!acc_is_present(b, (N * sizeof(float))))
    abort();
  d = (float *)acc_malloc(N * sizeof(float));
  acc_map_data(a, d, N * sizeof(float));
  if (!acc_is_present(a, (N * sizeof(float))))
    abort();
#pragma acc data present(a [0:N]) present(c [0:N]) present(b [0:N])
  {
#pragma acc parallel
    {
      int ii;
      for (ii = 0; ii < N; ii++) {
        a[ii] = 1.0;
        c[ii] = 2.0;
        b[ii] = 4.0;
      }
    }
  }
  if (!acc_is_present(a, (N * sizeof(float))))
    abort();
  if (!acc_is_present(b, (N * sizeof(float))))
    abort();
  if (!acc_is_present(c, (N * sizeof(float))))
    abort();
  acc_copyout(b, N * sizeof(float));
  for (i = 0; i < N; i++) {
    if (a[i] != 4.0)
      abort();
    if (b[i] != 4.0)
      abort();
  }
  d = (float *)acc_deviceptr(a);
  acc_unmap_data(a);
  acc_free(d);
  d = (float *)acc_deviceptr(c);
  acc_unmap_data(c);
  acc_free(d);
  for (i = 0; i < N; i++) {
    a[i] = 3.0;
    b[i] = 6.0;
  }
  d = (float *)acc_malloc(N * sizeof(float));
#pragma acc parallel copyin(a [0:N]) deviceptr(d) copyout(b [0:N])
  {
    int ii;
    for (ii = 0; ii < N; ii++) {
      d[ii] = a[ii];
      b[ii] = d[ii];
    }
  }
  for (i = 0; i < N; i++) {
    if (a[i] != 3.0)
      abort();
    if (b[i] != 3.0)
      abort();
  }
  if (acc_is_present(a, (N * sizeof(float))))
    abort();
  if (acc_is_present(b, (N * sizeof(float))))
    abort();
  acc_free(d);
  for (i = 0; i < N; i++) {
    a[i] = 6.0;
    b[i] = 0.0;
  }
  d = (float *)acc_copyin(&a[0], N * sizeof(float));
  for (i = 0; i < N; i++) {
    a[i] = 9.0;
  }
#pragma acc data pcopyin(a [0:N]) copyout(b [0:N])
  {
#pragma acc parallel
    {
      int ii;
      for (ii = 0; ii < N; ii++)
        b[ii] = a[ii];
    }
  }
  for (i = 0; i < N; i++) {
    if (b[i] != 6.0)
      abort();
  }
  if (!acc_is_present(&a[0], (N * sizeof(float))))
    abort();
  if (acc_is_present(&b[0], (N * sizeof(float))))
    abort();
  acc_free(d);
  for (i = 0; i < N; i++) {
    a[i] = 6.0;
    b[i] = 0.0;
  }
#pragma acc data copyin(a [0:N]) pcopyout(b [0:N])
  {
#pragma acc parallel
    {
      int ii;
      for (ii = 0; ii < N; ii++)
        b[ii] = a[ii];
    }
  }
  for (i = 0; i < N; i++) {
    if (b[i] != 6.0)
      abort();
  }
  if (acc_is_present(&a[0], (N * sizeof(float))))
    abort();
  if (acc_is_present(&b[0], (N * sizeof(float))))
    abort();
  for (i = 0; i < N; i++) {
    a[i] = 5.0;
    b[i] = 7.0;
  }
#pragma acc data copyin(a [0:N]) pcreate(c [0:N]) copyout(b [0:N])
  {
#pragma acc parallel
    {
      int ii;
      for (ii = 0; ii < N; ii++) {
        c[ii] = a[ii];
        b[ii] = c[ii];
      }
    }
  }
  for (i = 0; i < N; i++) {
    if (a[i] != 5.0)
      abort();
    if (b[i] != 5.0)
      abort();
  }
  if (acc_is_present(&a[0], (N * sizeof(float))))
    abort();
  if (acc_is_present(&b[0], (N * sizeof(float))))
    abort();
  if (acc_is_present(&c[0], (N * sizeof(float))))
    abort();
  return 0;
}
```