user: 请从给定的汇编指令推导出C源代码:

```asm
<state_machine>:
  endbr64
  push   %r15
  push   %r14
  mov    %rdi,%r14
  push   %r13
  lea    D8(%rip),%r13
  push   %r12
  push   %rbp
  mov    %rdi,%rbp
  push   %rbx
  xor    %ebx,%ebx
  sub    $0x18,%rsp
  nopl   0x0(%rax)
L504:
  shl    $0x8,%rbx
  test   $0x7,%bpl
  jne    L1266
  mov    0x0(%rbp),%rbx
  test   %rbx,%rbx
  je     L1763
L1266:
  mov    %rbx,%r12
  add    $0x1,%rbp
  shr    $0x38,%r12
  cmp    $0x43,%r12
  ja     L504
L1855:
  mov    %rbp,%rdx
  mov    %rbx,%r15
  sub    $0x22,%r12
  and    $0x7,%edx
  shl    $0x8,%r15
  cmp    $0x21,%r12
  ja     L504
  movslq 0x0(%r13,%r12,4),%rax
  add    %r13,%rax
  notrack jmp *%rax
  nopw   0x0(%rax,%rax,1)
L397:
  mov    %rbp,%rax
  shl    $0x8,%rbx
  test   $0x7,%al
  jne    L1115
  mov    (%rax),%rbx
  test   %rbx,%rbx
  je     L1763
L1115:
  mov    %rbx,%rdx
  lea    0x1(%rax),%rbp
  shr    $0x38,%rdx
  cmp    $0x22,%rdx
  je     L504
  cmp    $0x5c,%rdx
  jne    L397
  and    $0x7,%ebp
  jne    L554
  mov    0x1(%rax),%rbx
  test   %rbx,%rbx
  je     L1763
L1496:
  add    $0x2,%rax
  shl    $0x8,%rbx
  test   $0x7,%al
  jne    L1115
  mov    (%rax),%rbx
  test   %rbx,%rbx
  jne    L1115
L1763:
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopw   0x0(%rax,%rax,1)
L1758:
  mov    %rbp,%rax
  shl    $0x8,%rbx
  test   $0x7,%al
  jne    L733
L1096:
  mov    (%rax),%rbx
  test   %rbx,%rbx
  je     L1763
L733:
  mov    %rbx,%rdx
  lea    0x1(%rax),%rbp
  shr    $0x38,%rdx
  cmp    $0x27,%rdx
  je     L504
  cmp    $0x5c,%rdx
  jne    L1758
  and    $0x7,%ebp
  jne    L1539
  mov    0x1(%rax),%rbx
  test   %rbx,%rbx
  je     L1763
L923:
  add    $0x2,%rax
  shl    $0x8,%rbx
  test   $0x7,%al
  jne    L733
  jmp    L1096
  xchg   %ax,%ax
L1592:
  mov    %rbp,%rax
  shl    $0x8,%rbx
  test   $0x7,%bpl
  jne    L835
  mov    0x0(%rbp),%rbx
  test   %rbx,%rbx
  je     L1763
L835:
  mov    %rbx,%r12
  add    $0x1,%rbp
  shr    $0x38,%r12
  cmp    $0x9,%r12
  je     L1592
  cmp    $0x20,%r12
  je     L1592
  mov    %rbp,%rcx
  mov    %rbx,%rdx
  and    $0x7,%ecx
  shl    $0x8,%rdx
  cmp    $0x69,%r12
  je     L1441
  cmp    $0x64,%r12
  je     L134
  cmp    $0x75,%r12
  jne    L170
  mov    %rdx,%rbx
  test   %rcx,%rcx
  je     L1295
L1050:
  mov    %rbx,%r12
  lea    0x2(%rax),%rbp
  shr    $0x38,%r12
  cmp    $0x6e,%r12
  jne    L170
  and    $0x7,%ebp
  je     L695
  shl    $0x8,%rbx
L114:
  mov    %rbx,%r12
  lea    0x3(%rax),%rbp
  shr    $0x38,%r12
  cmp    $0x64,%r12
  jne    L170
  and    $0x7,%ebp
  je     L953
  shl    $0x8,%rbx
L439:
  mov    %rbx,%r12
  lea    0x4(%rax),%rbp
  shr    $0x38,%r12
  cmp    $0x65,%r12
  jne    L170
  and    $0x7,%ebp
  je     L1737
  shl    $0x8,%rbx
L721:
  mov    %rbx,%r12
  lea    0x5(%rax),%rbp
  shr    $0x38,%r12
  cmp    $0x66,%r12
  jne    L170
  jmp    L626
  nopl   0x0(%rax)
L995:
  mov    %rax,%rbp
L626:
  shl    $0x8,%rbx
  test   $0x7,%bpl
  jne    L1708
  mov    0x0(%rbp),%rbx
  test   %rbx,%rbx
  je     L1763
L1708:
  mov    %rbx,%r12
  lea    0x1(%rbp),%rax
  shr    $0x38,%r12
  cmp    $0x20,%r12
  je     L995
  cmp    $0x9,%r12
  je     L995
  cmp    $0x43,%r12
  jne    L950
  test   $0x7,%al
  je     L1411
  shl    $0x8,%rbx
L507:
  mov    %rbx,%r12
  lea    0x2(%rbp),%rax
  shr    $0x38,%r12
  cmp    $0x4f,%r12
  jne    L950
  test   $0x7,%al
  je     L348
  shl    $0x8,%rbx
L1027:
  mov    %rbx,%r12
  lea    0x3(%rbp),%rax
  shr    $0x38,%r12
  cmp    $0x4e,%r12
  jne    L950
  test   $0x7,%al
  je     L454
  shl    $0x8,%rbx
L1722:
  mov    %rbx,%r12
  lea    0x4(%rbp),%rax
  shr    $0x38,%r12
  cmp    $0x46,%r12
  jne    L950
  test   $0x7,%al
  je     L894
  shl    $0x8,%rbx
L1726:
  mov    %rbx,%r12
  lea    0x5(%rbp),%rax
  shr    $0x38,%r12
  cmp    $0x49,%r12
  jne    L950
  test   $0x7,%al
  je     L1846
  shl    $0x8,%rbx
L1768:
  mov    %rbx,%r12
  lea    0x6(%rbp),%rax
  shr    $0x38,%r12
  cmp    $0x47,%r12
  jne    L950
  test   $0x7,%al
  je     L1488
  shl    $0x8,%rbx
L352:
  mov    %rbx,%r12
  add    $0x7,%rbp
  shr    $0x38,%r12
  cmp    $0x5f,%r12
  jne    L170
  mov    %rbp,%r15
L790:
  test   $0x7,%r15b
  je     L365
  shl    $0x8,%rbx
L768:
  mov    %rbx,%r12
  add    $0x1,%r15
  shr    $0x38,%r12
  mov    %r12,%rdi
  call   <isalnum@plt>
  test   %eax,%eax
  jne    L790
  cmp    $0x5f,%r12
  je     L790
  mov    %r15,%rdx
  mov    %rbp,%rsi
  mov    $0x1,%edi
  sub    %rbp,%rdx
  mov    %r15,%rbp
  sub    $0x1,%rdx
  call   <define_config@plt>
  jmp    L170
  cs nopw 0x0(%rax,%rax,1)
  lea    0x2(%r14),%rax
  cmp    %rax,%rbp
  jb     L388
  movsbl -0x2(%rbp),%edi
  mov    %rdx,0x8(%rsp)
  mov    %edi,%r12d
  call   <isalnum@plt>
  cmp    $0x5f,%r12b
  je     L504
  test   %eax,%eax
  mov    0x8(%rsp),%rdx
  jne    L504
L388:
  test   %rdx,%rdx
  jne    L1581
  mov    0x0(%rbp),%r15
  test   %r15,%r15
  je     L1763
L1581:
  mov    %r15,%r12
  lea    0x1(%rbp),%rax
  shr    $0x38,%r12
  cmp    $0x4f,%r12
  je     L1507
  mov    %r15,%rbx
  mov    %rax,%rbp
  jmp    L170
  nopl   0x0(%rax)
  mov    %r15,%rbx
  test   %rdx,%rdx
  je     L1600
L1755:
  mov    %rbx,%r12
  add    $0x1,%rbp
  shr    $0x38,%r12
  cmp    $0x2a,%r12
  je     L55
L170:
  cmp    $0x43,%r12
  jbe    L1855
  jmp    L504
  nopl   0x0(%rax)
L554:
  shl    $0x8,%rbx
  jmp    L1496
  nopl   0x0(%rax)
L1539:
  shl    $0x8,%rbx
  jmp    L923
  nopl   0x0(%rax)
L1600:
  mov    0x0(%rbp),%rbx
  test   %rbx,%rbx
  jne    L1755
  jmp    L1763
  xchg   %ax,%ax
L1507:
  test   $0x7,%al
  je     L1883
  mov    %r15,%rbx
  shl    $0x8,%rbx
L885:
  mov    %rbx,%r12
  lea    0x2(%rbp),%rax
  shr    $0x38,%r12
  cmp    $0x4e,%r12
  jne    L950
  shl    $0x8,%rbx
  test   $0x7,%al
  jne    L118
  mov    0x2(%rbp),%rbx
  test   %rbx,%rbx
  je     L1763
L118:
  mov    %rbx,%r12
  lea    0x3(%rbp),%rax
  shr    $0x38,%r12
  cmp    $0x46,%r12
  jne    L950
  shl    $0x8,%rbx
  test   $0x7,%al
  je     L6
L1234:
  mov    %rbx,%r12
  lea    0x4(%rbp),%rax
  shr    $0x38,%r12
  cmp    $0x49,%r12
  jne    L950
  shl    $0x8,%rbx
  test   $0x7,%al
  jne    L816
  mov    0x4(%rbp),%rbx
  test   %rbx,%rbx
  je     L1763
L816:
  mov    %rbx,%r12
  lea    0x5(%rbp),%rax
  shr    $0x38,%r12
  cmp    $0x47,%r12
  jne    L950
  shl    $0x8,%rbx
  test   $0x7,%al
  jne    L329
  mov    0x5(%rbp),%rbx
  test   %rbx,%rbx
  je     L1763
L329:
  mov    %rbx,%r12
  add    $0x6,%rbp
  shr    $0x38,%r12
  cmp    $0x5f,%r12
  jne    L170
  mov    %rbp,%r15
L334:
  shl    $0x8,%rbx
  test   $0x7,%r15b
  jne    L205
  mov    (%r15),%rbx
  test   %rbx,%rbx
  je     L1763
L205:
  mov    %rbx,%r12
  add    $0x1,%r15
  shr    $0x38,%r12
  mov    %r12,%rdi
  call   <isalnum@plt>
  test   %eax,%eax
  jne    L334
  cmp    $0x5f,%r12
  je     L334
  mov    %r15,%rsi
  mov    %rbp,%rdi
  sub    %rbp,%rsi
  mov    %r15,%rbp
  sub    $0x1,%rsi
  call   <use_config@plt>
  jmp    L170
  nopl   0x0(%rax,%rax,1)
L1883:
  mov    0x1(%rbp),%rbx
  test   %rbx,%rbx
  jne    L885
  jmp    L1763
  nopw   0x0(%rax,%rax,1)
L950:
  mov    %rax,%rbp
  jmp    L170
L1441:
  test   %rcx,%rcx
  jne    L1212
  mov    0x1(%rax),%rdx
  test   %rdx,%rdx
  je     L1763
L1212:
  mov    %rdx,%r12
  lea    0x2(%rax),%rbp
  shr    $0x38,%r12
  cmp    $0x6e,%r12
  jne    L1492
  and    $0x7,%ebp
  je     L408
  mov    %rdx,%rbx
  shl    $0x8,%rbx
L1715:
  mov    %rbx,%r12
  lea    0x3(%rax),%rbp
  shr    $0x38,%r12
  cmp    $0x63,%r12
  jne    L170
  and    $0x7,%ebp
  je     L1480
  shl    $0x8,%rbx
L251:
  mov    %rbx,%r12
  lea    0x4(%rax),%rbp
  shr    $0x38,%r12
  cmp    $0x6c,%r12
  jne    L170
  and    $0x7,%ebp
  je     L212
  shl    $0x8,%rbx
L1714:
  mov    %rbx,%r12
  lea    0x5(%rax),%rbp
  shr    $0x38,%r12
  cmp    $0x75,%r12
  jne    L170
  and    $0x7,%ebp
  je     L1051
  shl    $0x8,%rbx
L751:
  mov    %rbx,%r12
  lea    0x6(%rax),%rbp
  shr    $0x38,%r12
  cmp    $0x64,%r12
  jne    L170
  and    $0x7,%ebp
  je     L444
  shl    $0x8,%rbx
L1179:
  mov    %rbx,%r12
  lea    0x7(%rax),%rbp
  shr    $0x38,%r12
  mov    %rbp,%rdx
  cmp    $0x65,%r12
  jne    L170
  jmp    L866
  nopl   0x0(%rax)
L1638:
  mov    %rsi,%rdx
L866:
  shl    $0x8,%rbx
  test   $0x7,%dl
  jne    L1635
  mov    (%rdx),%rbx
  test   %rbx,%rbx
  je     L1763
L1635:
  mov    %rbx,%r12
  lea    0x1(%rdx),%rsi
  shr    $0x38,%r12
  cmp    $0x9,%r12
  je     L1638
  cmp    $0x20,%r12
  je     L1638
  cmp    $0x22,%r12
  je     L1023
  cmp    $0x3c,%r12
  je     L481
  mov    %rsi,%rbp
  jmp    L170
  nopl   0x0(%rax,%rax,1)
L134:
  mov    %rdx,%rbx
  test   %rcx,%rcx
  je     L1686
L1246:
  mov    %rbx,%r12
  lea    0x2(%rax),%rbp
  shr    $0x38,%r12
  cmp    $0x65,%r12
  jne    L170
  and    $0x7,%ebp
  je     L1380
  shl    $0x8,%rbx
L364:
  mov    %rbx,%r12
  lea    0x3(%rax),%rbp
  shr    $0x38,%r12
  cmp    $0x66,%r12
  jne    L170
  and    $0x7,%ebp
  je     L389
  shl    $0x8,%rbx
L217:
  mov    %rbx,%r12
  lea    0x4(%rax),%rbp
  shr    $0x38,%r12
  cmp    $0x69,%r12
  jne    L170
  and    $0x7,%ebp
  je     L919
  shl    $0x8,%rbx
L278:
  mov    %rbx,%r12
  lea    0x5(%rax),%rbp
  shr    $0x38,%r12
  cmp    $0x6e,%r12
  jne    L170
  and    $0x7,%ebp
  je     L196
  shl    $0x8,%rbx
L390:
  mov    %rbx,%r12
  lea    0x6(%rax),%rbp
  shr    $0x38,%r12
  cmp    $0x65,%r12
  jne    L170
  jmp    L626
  cs nopw 0x0(%rax,%rax,1)
L1295:
  mov    0x1(%rax),%rbx
  test   %rbx,%rbx
  jne    L1050
  jmp    L1763
  nopw   0x0(%rax,%rax,1)
L1492:
  mov    %rdx,%rbx
  jmp    L170
L6:
  mov    0x3(%rbp),%rbx
  test   %rbx,%rbx
  jne    L1234
  jmp    L1763
  nopw   0x0(%rax,%rax,1)
L1686:
  mov    0x1(%rax),%rbx
  test   %rbx,%rbx
  jne    L1246
  jmp    L1763
  nopw   0x0(%rax,%rax,1)
L55:
  shl    $0x8,%rbx
  test   $0x7,%bpl
  jne    L1650
  mov    0x0(%rbp),%rbx
  test   %rbx,%rbx
  je     L1763
L1650:
  add    $0x1,%rbp
  jmp    L1634
  nopl   (%rax)
L1196:
  mov    %rbx,%rax
  add    $0x1,%rbp
  shr    $0x38,%rax
  cmp    $0x2f,%rax
  je     L504
L1634:
  mov    %rbx,%rax
  mov    %rbp,%rdx
  shr    $0x38,%rax
  and    $0x7,%edx
  cmp    $0x2a,%rax
  jne    L55
  shl    $0x8,%rbx
  test   %rdx,%rdx
  jne    L1196
  mov    0x0(%rbp),%rbx
  test   %rbx,%rbx
  jne    L1196
  jmp    L1763
L408:
  mov    0x2(%rax),%rbx
  test   %rbx,%rbx
  jne    L1715
  jmp    L1763
  nopl   0x0(%rax)
L695:
  mov    0x2(%rax),%rbx
  test   %rbx,%rbx
  jne    L114
  jmp    L1763
  nopw   0x0(%rax,%rax,1)
L1380:
  mov    0x2(%rax),%rbx
  test   %rbx,%rbx
  jne    L364
  jmp    L1763
  nopw   0x0(%rax,%rax,1)
L953:
  mov    0x3(%rax),%rbx
  test   %rbx,%rbx
  jne    L439
  jmp    L1763
  nopw   0x0(%rax,%rax,1)
L1480:
  mov    0x3(%rax),%rbx
  test   %rbx,%rbx
  jne    L251
  jmp    L1763
  nopw   0x0(%rax,%rax,1)
L389:
  mov    0x3(%rax),%rbx
  test   %rbx,%rbx
  jne    L217
  jmp    L1763
  nopw   0x0(%rax,%rax,1)
L1737:
  mov    0x4(%rax),%rbx
  test   %rbx,%rbx
  jne    L721
  jmp    L1763
  nopw   0x0(%rax,%rax,1)
L212:
  mov    0x4(%rax),%rbx
  test   %rbx,%rbx
  jne    L1714
  jmp    L1763
  nopw   0x0(%rax,%rax,1)
L919:
  mov    0x4(%rax),%rbx
  test   %rbx,%rbx
  jne    L278
  jmp    L1763
  nopw   0x0(%rax,%rax,1)
L1051:
  mov    0x5(%rax),%rbx
  test   %rbx,%rbx
  jne    L751
  jmp    L1763
  nopw   0x0(%rax,%rax,1)
L196:
  mov    0x5(%rax),%rbx
  test   %rbx,%rbx
  jne    L390
  jmp    L1763
  nopw   0x0(%rax,%rax,1)
L444:
  mov    0x6(%rax),%rbx
  test   %rbx,%rbx
  jne    L1179
  jmp    L1763
L365:
  mov    (%r15),%rbx
  test   %rbx,%rbx
  jne    L768
  jmp    L1763
L894:
  mov    0x4(%rbp),%rbx
  test   %rbx,%rbx
  jne    L1726
  jmp    L1763
L454:
  mov    0x3(%rbp),%rbx
  test   %rbx,%rbx
  jne    L1722
  jmp    L1763
L348:
  mov    0x2(%rbp),%rbx
  test   %rbx,%rbx
  jne    L1027
  jmp    L1763
L1411:
  mov    0x1(%rbp),%rbx
  test   %rbx,%rbx
  jne    L507
  jmp    L1763
L1488:
  mov    0x6(%rbp),%rbx
  test   %rbx,%rbx
  jne    L352
  jmp    L1763
L1846:
  mov    0x5(%rbp),%rbx
  test   %rbx,%rbx
  jne    L1768
  jmp    L1763
L481:
  mov    %rsi,%rax
  jmp    L723
L1889:
  shl    $0x8,%rbx
L1074:
  mov    %rbx,%rcx
  lea    0x1(%rax),%rbp
  shr    $0x38,%rcx
  cmp    $0xa,%rcx
  je     L504
  cmp    $0x3e,%rcx
  je     L1839
  mov    %rbp,%rax
L723:
  test   $0x7,%al
  jne    L1889
  mov    (%rax),%rbx
  test   %rbx,%rbx
  jne    L1074
  jmp    L1763
L1023:
  mov    %rsi,%rax
  jmp    L618
L480:
  shl    $0x8,%rbx
L374:
  mov    %rbx,%rcx
  lea    0x1(%rax),%rbp
  shr    $0x38,%rcx
  cmp    $0xa,%rcx
  je     L504
  cmp    $0x22,%rcx
  je     L633
  mov    %rbp,%rax
L618:
  test   $0x7,%al
  jne    L480
  mov    (%rax),%rbx
  test   %rbx,%rbx
  jne    L374
  jmp    L1763
L1839:
  sub    %rdx,%rax
  xor    %edi,%edi
  lea    -0x1(%rax),%rdx
  xor    %eax,%eax
  call   <handle_include@plt>
  jmp    L504
L633:
  sub    %rdx,%rax
  mov    $0x1,%edi
  lea    -0x1(%rax),%rdx
  xor    %eax,%eax
  call   <handle_include@plt>
  jmp    L504
```

assistant: ```c
void state_machine(const char *map) {
  const char *next = map;
  const char *map_dot;
  unsigned long __buf = 0;
  for (;;) {
  start : {
    (__buf <<= 8);
    if ((unsigned long)next % sizeof(unsigned long) == 0) {
      __buf = *(unsigned long *)next;
      if (!__buf)
        break;
    }
    next++;
  }
  __start:
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) > ((('/') > ((('\'') > ((('"') > ((('#') > ('C') ? ('#') : ('C'))) ? ('"') : ((('#') > ('C') ? ('#') : ('C'))))) ? ('\'') : ((('"') > ((('#') > ('C') ? ('#') : ('C'))) ? ('"') : ((('#') > ('C') ? ('#') : ('C'))))))) ? ('/') : ((('\'') > ((('"') > ((('#') > ('C') ? ('#') : ('C'))) ? ('"') : ((('#') > ('C') ? ('#') : ('C'))))) ? ('\'') : ((('"') > ((('#') > ('C') ? ('#') : ('C'))) ? ('"') : ((('#') > ('C') ? ('#') : ('C'))))))))))
      goto start;
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) < ((('/') < ((('\'') < ((('"') < ((('#') < ('C') ? ('#') : ('C'))) ? ('"') : ((('#') < ('C') ? ('#') : ('C'))))) ? ('\'') : ((('"') < ((('#') < ('C') ? ('#') : ('C'))) ? ('"') : ((('#') < ('C') ? ('#') : ('C'))))))) ? ('/') : ((('\'') < ((('"') < ((('#') < ('C') ? ('#') : ('C'))) ? ('"') : ((('#') < ('C') ? ('#') : ('C'))))) ? ('\'') : ((('"') < ((('#') < ('C') ? ('#') : ('C'))) ? ('"') : ((('#') < ('C') ? ('#') : ('C'))))))))))
      goto start;
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) == '/')
      goto slash;
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) == '\'')
      goto squote;
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) == '"')
      goto dquote;
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) == '#')
      goto pound;
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) == 'C')
      goto cee;
    goto start;
  slash : {
    (__buf <<= 8);
    if ((unsigned long)next % sizeof(unsigned long) == 0) {
      __buf = *(unsigned long *)next;
      if (!__buf)
        break;
    }
    next++;
  }
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) != '*')
      goto __start;
  slash_star_dot_star : {
    (__buf <<= 8);
    if ((unsigned long)next % sizeof(unsigned long) == 0) {
      __buf = *(unsigned long *)next;
      if (!__buf)
        break;
    }
    next++;
  }
  __slash_star_dot_star:
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) != '*')
      goto slash_star_dot_star;
    {
      (__buf <<= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        __buf = *(unsigned long *)next;
        if (!__buf)
          break;
      }
      next++;
    }
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) != '/')
      goto __slash_star_dot_star;
    goto start;
  squote : {
    (__buf <<= 8);
    if ((unsigned long)next % sizeof(unsigned long) == 0) {
      __buf = *(unsigned long *)next;
      if (!__buf)
        break;
    }
    next++;
  }
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) == '\'')
      goto start;
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) != '\\')
      goto squote;
    {
      (__buf <<= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        __buf = *(unsigned long *)next;
        if (!__buf)
          break;
      }
      next++;
    }
    goto squote;
  dquote : {
    (__buf <<= 8);
    if ((unsigned long)next % sizeof(unsigned long) == 0) {
      __buf = *(unsigned long *)next;
      if (!__buf)
        break;
    }
    next++;
  }
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) == '"')
      goto start;
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) != '\\')
      goto dquote;
    {
      (__buf <<= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        __buf = *(unsigned long *)next;
        if (!__buf)
          break;
      }
      next++;
    }
    goto dquote;
  pound : {
    (__buf <<= 8);
    if ((unsigned long)next % sizeof(unsigned long) == 0) {
      __buf = *(unsigned long *)next;
      if (!__buf)
        break;
    }
    next++;
  }
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) == ' ')
      goto pound;
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) == '\t')
      goto pound;
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) == 'i')
      goto pound_i;
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) == 'd')
      goto pound_d;
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) == 'u')
      goto pound_u;
    goto __start;
  pound_i : {
    (__buf <<= 8);
    if ((unsigned long)next % sizeof(unsigned long) == 0) {
      __buf = *(unsigned long *)next;
      if (!__buf)
        break;
    }
    next++;
  }
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) != 'n')
      goto __start;
    {
      (__buf <<= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        __buf = *(unsigned long *)next;
        if (!__buf)
          break;
      }
      next++;
    }
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) != 'c')
      goto __start;
    {
      (__buf <<= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        __buf = *(unsigned long *)next;
        if (!__buf)
          break;
      }
      next++;
    }
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) != 'l')
      goto __start;
    {
      (__buf <<= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        __buf = *(unsigned long *)next;
        if (!__buf)
          break;
      }
      next++;
    }
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) != 'u')
      goto __start;
    {
      (__buf <<= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        __buf = *(unsigned long *)next;
        if (!__buf)
          break;
      }
      next++;
    }
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) != 'd')
      goto __start;
    {
      (__buf <<= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        __buf = *(unsigned long *)next;
        if (!__buf)
          break;
      }
      next++;
    }
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) != 'e')
      goto __start;
    goto pound_include;
  pound_include : {
    (__buf <<= 8);
    if ((unsigned long)next % sizeof(unsigned long) == 0) {
      __buf = *(unsigned long *)next;
      if (!__buf)
        break;
    }
    next++;
  }
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) == ' ')
      goto pound_include;
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) == '\t')
      goto pound_include;
    map_dot = next;
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) == '"')
      goto pound_include_dquote;
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) == '<')
      goto pound_include_langle;
    goto __start;
  pound_include_dquote : {
    (__buf <<= 8);
    if ((unsigned long)next % sizeof(unsigned long) == 0) {
      __buf = *(unsigned long *)next;
      if (!__buf)
        break;
    }
    next++;
  }
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) == '\n')
      goto start;
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) != '"')
      goto pound_include_dquote;
    handle_include(1, map_dot, next - map_dot - 1);
    goto start;
  pound_include_langle : {
    (__buf <<= 8);
    if ((unsigned long)next % sizeof(unsigned long) == 0) {
      __buf = *(unsigned long *)next;
      if (!__buf)
        break;
    }
    next++;
  }
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) == '\n')
      goto start;
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) != '>')
      goto pound_include_langle;
    handle_include(0, map_dot, next - map_dot - 1);
    goto start;
  pound_d : {
    (__buf <<= 8);
    if ((unsigned long)next % sizeof(unsigned long) == 0) {
      __buf = *(unsigned long *)next;
      if (!__buf)
        break;
    }
    next++;
  }
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) != 'e')
      goto __start;
    {
      (__buf <<= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        __buf = *(unsigned long *)next;
        if (!__buf)
          break;
      }
      next++;
    }
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) != 'f')
      goto __start;
    {
      (__buf <<= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        __buf = *(unsigned long *)next;
        if (!__buf)
          break;
      }
      next++;
    }
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) != 'i')
      goto __start;
    {
      (__buf <<= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        __buf = *(unsigned long *)next;
        if (!__buf)
          break;
      }
      next++;
    }
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) != 'n')
      goto __start;
    {
      (__buf <<= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        __buf = *(unsigned long *)next;
        if (!__buf)
          break;
      }
      next++;
    }
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) != 'e')
      goto __start;
    goto pound_define_undef;
  pound_u : {
    (__buf <<= 8);
    if ((unsigned long)next % sizeof(unsigned long) == 0) {
      __buf = *(unsigned long *)next;
      if (!__buf)
        break;
    }
    next++;
  }
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) != 'n')
      goto __start;
    {
      (__buf <<= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        __buf = *(unsigned long *)next;
        if (!__buf)
          break;
      }
      next++;
    }
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) != 'd')
      goto __start;
    {
      (__buf <<= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        __buf = *(unsigned long *)next;
        if (!__buf)
          break;
      }
      next++;
    }
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) != 'e')
      goto __start;
    {
      (__buf <<= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        __buf = *(unsigned long *)next;
        if (!__buf)
          break;
      }
      next++;
    }
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) != 'f')
      goto __start;
    goto pound_define_undef;
  pound_define_undef : {
    (__buf <<= 8);
    if ((unsigned long)next % sizeof(unsigned long) == 0) {
      __buf = *(unsigned long *)next;
      if (!__buf)
        break;
    }
    next++;
  }
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) == ' ')
      goto pound_define_undef;
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) == '\t')
      goto pound_define_undef;
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) != 'C')
      goto __start;
    {
      (__buf <<= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        __buf = *(unsigned long *)next;
        if (!__buf)
          break;
      }
      next++;
    }
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) != 'O')
      goto __start;
    {
      (__buf <<= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        __buf = *(unsigned long *)next;
        if (!__buf)
          break;
      }
      next++;
    }
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) != 'N')
      goto __start;
    {
      (__buf <<= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        __buf = *(unsigned long *)next;
        if (!__buf)
          break;
      }
      next++;
    }
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) != 'F')
      goto __start;
    {
      (__buf <<= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        __buf = *(unsigned long *)next;
        if (!__buf)
          break;
      }
      next++;
    }
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) != 'I')
      goto __start;
    {
      (__buf <<= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        __buf = *(unsigned long *)next;
        if (!__buf)
          break;
      }
      next++;
    }
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) != 'G')
      goto __start;
    {
      (__buf <<= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        __buf = *(unsigned long *)next;
        if (!__buf)
          break;
      }
      next++;
    }
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) != '_')
      goto __start;
    map_dot = next;
  pound_define_undef_CONFIG_word : {
    (__buf <<= 8);
    if ((unsigned long)next % sizeof(unsigned long) == 0) {
      __buf = *(unsigned long *)next;
      if (!__buf)
        break;
    }
    next++;
  }
    if (isalnum((__buf >> 8 * (sizeof(unsigned long) - 1))) || (__buf >> 8 * (sizeof(unsigned long) - 1)) == '_')
      goto pound_define_undef_CONFIG_word;
    define_config(1, map_dot, next - map_dot - 1);
    goto __start;
  cee:
    if (next >= map + 2 && (isalnum(next[-2]) || next[-2] == '_'))
      goto start;
    {
      (__buf <<= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        __buf = *(unsigned long *)next;
        if (!__buf)
          break;
      }
      next++;
    }
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) != 'O')
      goto __start;
    {
      (__buf <<= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        __buf = *(unsigned long *)next;
        if (!__buf)
          break;
      }
      next++;
    }
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) != 'N')
      goto __start;
    {
      (__buf <<= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        __buf = *(unsigned long *)next;
        if (!__buf)
          break;
      }
      next++;
    }
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) != 'F')
      goto __start;
    {
      (__buf <<= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        __buf = *(unsigned long *)next;
        if (!__buf)
          break;
      }
      next++;
    }
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) != 'I')
      goto __start;
    {
      (__buf <<= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        __buf = *(unsigned long *)next;
        if (!__buf)
          break;
      }
      next++;
    }
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) != 'G')
      goto __start;
    {
      (__buf <<= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        __buf = *(unsigned long *)next;
        if (!__buf)
          break;
      }
      next++;
    }
    if ((__buf >> 8 * (sizeof(unsigned long) - 1)) != '_')
      goto __start;
    map_dot = next;
  cee_CONFIG_word : {
    (__buf <<= 8);
    if ((unsigned long)next % sizeof(unsigned long) == 0) {
      __buf = *(unsigned long *)next;
      if (!__buf)
        break;
    }
    next++;
  }
    if (isalnum((__buf >> 8 * (sizeof(unsigned long) - 1))) || (__buf >> 8 * (sizeof(unsigned long) - 1)) == '_')
      goto cee_CONFIG_word;
    use_config(map_dot, next - map_dot - 1);
    goto __start;
  }
}
```