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

```asm
<state_machine>:
  endbr64
  push   %rbp
  push   %rbx
  lea    0x1(%rdi),%rbx
  sub    $0x8,%rsp
  movzbl (%rdi),%eax
  cmp    %rbx,%rsi
  jbe    L299
  mov    %rsi,%rbp
L319:
  cmp    $0x2f,%al
  ja     L10
  movzbl (%rbx),%edx
  cmp    $0x27,%al
  je     L118
  ja     L497
  cmp    $0x22,%al
  je     L368
  cmp    $0x23,%al
  jne    L10
L302:
  mov    %rbx,%rdx
  add    $0x1,%rbx
  movzbl -0x1(%rbx),%eax
  cmp    %rbx,%rbp
  jbe    L299
  cmp    $0x9,%al
  je     L302
  cmp    $0x20,%al
  je     L302
  cmp    $0x69,%al
  jne    L319
  lea    0x2(%rdx),%rbx
  movzbl 0x1(%rdx),%eax
  cmp    %rbx,%rbp
  jbe    L299
  cmp    $0x6e,%al
  jne    L319
  lea    0x3(%rdx),%rbx
  movzbl 0x2(%rdx),%eax
  cmp    %rbx,%rbp
  jbe    L299
  cmp    $0x63,%al
  jne    L319
  lea    0x4(%rdx),%rbx
  movzbl 0x3(%rdx),%eax
  cmp    %rbx,%rbp
  jbe    L299
  cmp    $0x6c,%al
  jne    L319
  lea    0x5(%rdx),%rbx
  movzbl 0x4(%rdx),%eax
  cmp    %rbx,%rbp
  jbe    L299
  cmp    $0x75,%al
  jne    L319
  lea    0x6(%rdx),%rbx
  movzbl 0x5(%rdx),%eax
  cmp    %rbx,%rbp
  jbe    L299
  cmp    $0x64,%al
  jne    L319
  lea    0x7(%rdx),%rbx
  movzbl 0x6(%rdx),%eax
  cmp    %rbx,%rbp
  jbe    L299
  cmp    $0x65,%al
  jne    L319
  mov    %rbx,%rdi
L237:
  mov    %rdi,%rdx
  add    $0x1,%rdi
  movzbl -0x1(%rdi),%eax
  cmp    %rdi,%rbp
  je     L299
  cmp    $0x20,%al
  je     L237
  cmp    $0x9,%al
  je     L237
  mov    %rdi,%rbx
  cmp    $0x22,%al
  jne    L319
  jmp    L428
L166:
  cmp    $0xa,%al
  je     L10
  cmp    $0x22,%al
  je     L196
L428:
  mov    %rbx,%rsi
  add    $0x1,%rbx
  movzbl -0x1(%rbx),%eax
  cmp    %rbx,%rbp
  ja     L166
L299:
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  ret
  nopw   0x0(%rax,%rax,1)
L169:
  mov    %rax,%rbx
L118:
  lea    0x1(%rbx),%rax
  movzbl -0x1(%rax),%edx
  cmp    %rax,%rbp
  jbe    L299
  cmp    $0x27,%dl
  je     L402
  cmp    $0x5c,%dl
  jne    L169
  add    $0x2,%rbx
  cmp    %rbx,%rbp
  ja     L118
  jmp    L299
  nopl   (%rax)
L240:
  mov    %rax,%rbx
L368:
  lea    0x1(%rbx),%rax
  movzbl -0x1(%rax),%edx
  cmp    %rax,%rbp
  jbe    L299
  cmp    $0x22,%dl
  je     L402
  cmp    $0x5c,%dl
  jne    L240
  add    $0x2,%rbx
  cmp    %rbx,%rbp
  ja     L368
  jmp    L299
  nopl   (%rax)
L497:
  cmp    $0x2f,%al
  jne    L10
  lea    0x1(%rbx),%rcx
  cmp    %rcx,%rbp
  jbe    L299
  mov    %edx,%eax
  cmp    $0x2a,%dl
  je     L294
  mov    %rcx,%rbx
  jmp    L319
  nopl   0x0(%rax)
L402:
  mov    %rax,%rbx
L10:
  lea    0x1(%rbx),%rdx
  movzbl (%rbx),%eax
  cmp    %rbp,%rdx
  jae    L299
  mov    %rdx,%rbx
  jmp    L319
L294:
  lea    0x2(%rbx),%rax
  movzbl 0x1(%rbx),%edx
  cmp    %rax,%rbp
  ja     L164
  jmp    L299
  nopl   (%rax)
L381:
  cmp    %rax,%rbp
  jbe    L299
  cmp    $0x2f,%sil
  je     L402
L164:
  movzbl (%rax),%esi
  mov    %edx,%ecx
  add    $0x1,%rax
  mov    %esi,%edx
  cmp    $0x2a,%cl
  je     L381
  cmp    %rax,%rbp
  ja     L164
  jmp    L299
L196:
  sub    %rdx,%rsi
  sub    $0x1,%esi
  call   <handle_include@plt>
  jmp    L10
```

assistant: ```c
void state_machine(const char *map, const char *end) {
  register const char *next = map;
  register const char *map_dot;
  register unsigned char current;
  for (;;) {
  start : {
    current = *next++;
    if (next >= end)
      break;
  }
  __start:
    if (current > ((('/') > ((('\'') > ((('"') > ('#') ? ('"') : ('#'))) ? ('\'') : ((('"') > ('#') ? ('"') : ('#'))))) ? ('/') : ((('\'') > ((('"') > ('#') ? ('"') : ('#'))) ? ('\'') : ((('"') > ('#') ? ('"') : ('#'))))))))
      goto start;
    if (current < ((('/') < ((('\'') < ((('"') < ('#') ? ('"') : ('#'))) ? ('\'') : ((('"') < ('#') ? ('"') : ('#'))))) ? ('/') : ((('\'') < ((('"') < ('#') ? ('"') : ('#'))) ? ('\'') : ((('"') < ('#') ? ('"') : ('#'))))))))
      goto start;
    if (current == '/')
      goto slash;
    if (current == '\'')
      goto squote;
    if (current == '"')
      goto dquote;
    if (current == '#')
      goto pound;
    goto start;
  slash : {
    current = *next++;
    if (next >= end)
      break;
  }
    if (current != '*')
      goto __start;
  slash_star_dot_star : {
    current = *next++;
    if (next >= end)
      break;
  }
  __slash_star_dot_star:
    if (current != '*')
      goto slash_star_dot_star;
    {
      current = *next++;
      if (next >= end)
        break;
    }
    if (current != '/')
      goto __slash_star_dot_star;
    goto start;
  squote : {
    current = *next++;
    if (next >= end)
      break;
  }
    if (current == '\'')
      goto start;
    if (current != '\\')
      goto squote;
    {
      current = *next++;
      if (next >= end)
        break;
    }
    goto squote;
  dquote : {
    current = *next++;
    if (next >= end)
      break;
  }
    if (current == '"')
      goto start;
    if (current != '\\')
      goto dquote;
    {
      current = *next++;
      if (next >= end)
        break;
    }
    goto dquote;
  pound : {
    current = *next++;
    if (next >= end)
      break;
  }
    if (current == ' ')
      goto pound;
    if (current == '\t')
      goto pound;
    if (current == 'i')
      goto pound_i;
    goto __start;
  pound_i : {
    current = *next++;
    if (next >= end)
      break;
  }
    if (current != 'n')
      goto __start;
    {
      current = *next++;
      if (next >= end)
        break;
    }
    if (current != 'c')
      goto __start;
    {
      current = *next++;
      if (next >= end)
        break;
    }
    if (current != 'l')
      goto __start;
    {
      current = *next++;
      if (next >= end)
        break;
    }
    if (current != 'u')
      goto __start;
    {
      current = *next++;
      if (next >= end)
        break;
    }
    if (current != 'd')
      goto __start;
    {
      current = *next++;
      if (next >= end)
        break;
    }
    if (current != 'e')
      goto __start;
    goto pound_include;
  pound_include : {
    current = *next++;
    if (next >= end)
      break;
  }
    if (current == ' ')
      goto pound_include;
    if (current == '\t')
      goto pound_include;
    map_dot = next;
    if (current == '"')
      goto pound_include_dquote;
    goto __start;
  pound_include_dquote : {
    current = *next++;
    if (next >= end)
      break;
  }
    if (current == '\n')
      goto start;
    if (current != '"')
      goto pound_include_dquote;
    handle_include(map_dot, next - map_dot - 1);
    goto start;
  }
}
```