user: What would the C source look like for the assembly code provided here?

```asm
<glob_match>:
  endbr64
  push   %r14
  mov    %rdi,%rcx
  push   %r13
  push   %r12
  mov    %rsi,%r12
  push   %rbp
  lea    0x1(%rdi),%rbp
  push   %rbx
  movsbl (%rdi),%edi
  test   %dil,%dil
  je     L84
  mov    %edx,%r13d
  lea    0x1(%rsi),%rbx
L71:
  lea    -0x1(%rbx),%rsi
  cmp    $0x5b,%dil
  je     L287
  jg     L46
  cmp    $0x2a,%dil
  je     L135
  cmp    $0x3f,%dil
  jne    L17
  cmpb   $0x0,-0x1(%rbx)
  mov    %rbx,%r12
  je     L252
L306:
  mov    %rbp,%rcx
L169:
  movsbl (%rcx),%edi
  lea    0x1(%rcx),%rbp
  add    $0x1,%rbx
  test   %dil,%dil
  jne    L71
L84:
  xor    %eax,%eax
  cmpb   $0x0,(%r12)
  sete   %al
  jmp    L188
  nopl   0x0(%rax)
L46:
  cmp    $0x5c,%dil
  jne    L17
  movzbl -0x1(%rbx),%esi
  lea    0x2(%rcx),%rax
  mov    %rbx,%r12
  cmp    %sil,0x1(%rcx)
  jne    L252
  mov    %rax,%rcx
  jmp    L169
  nopl   0x0(%rax)
L287:
  movzbl -0x1(%rbx),%r8d
  mov    %rbx,%r12
  test   %r8b,%r8b
  je     L252
  movzbl 0x1(%rcx),%edx
  cmp    $0x21,%dl
  sete   %al
  cmp    $0x5e,%dl
  sete   %dl
  add    $0x2,%rcx
  or     %dl,%al
  cmovne %rcx,%rbp
  mov    %eax,%r9d
  lea    0x1(%rbp),%rcx
  movzbl 0x0(%rbp),%eax
  jmp    L280
  nopl   0x0(%rax,%rax,1)
L367:
  test   %al,%al
  je     L252
L322:
  mov    %eax,%edx
  mov    %rcx,%rsi
L128:
  movzbl (%rsi),%eax
  add    $0x1,%rcx
  cmp    $0x2d,%al
  je     L73
  mov    %edx,%edi
L364:
  cmp    %dl,%r8b
  jl     L314
  cmp    %r8b,%dil
  jge    L268
L314:
  cmp    $0x5d,%al
  je     L178
L280:
  cmp    $0x5c,%al
  jne    L367
  movzbl (%rcx),%eax
  add    $0x1,%rcx
  jmp    L322
L140:
  add    $0x2,%rcx
  nopl   0x0(%rax)
L208:
  test   %al,%al
  je     L252
  movzbl (%rcx),%eax
  lea    0x1(%rcx),%rdx
  test   %al,%al
  je     L252
  cmp    $0x5c,%al
  je     L140
  mov    %rdx,%rcx
L268:
  cmp    $0x5d,%al
  jne    L208
  test   %r9b,%r9b
  je     L169
  nopl   0x0(%rax,%rax,1)
L252:
  xor    %eax,%eax
L188:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
  nopl   0x0(%rax,%rax,1)
L73:
  movzbl 0x1(%rsi),%edi
  cmp    $0x5d,%dil
  je     L81
  lea    0x2(%rsi),%rax
  cmp    $0x5c,%dil
  jne    L356
  movzbl 0x2(%rsi),%edi
  lea    0x3(%rsi),%rax
L356:
  test   %dil,%dil
  je     L252
  lea    0x1(%rax),%rcx
  movzbl (%rax),%eax
  jmp    L364
  nopl   (%rax)
L81:
  cmp    %dl,%r8b
  je     L268
  mov    $0x2d,%edx
  mov    %rcx,%rsi
  jmp    L128
  nopw   0x0(%rax,%rax,1)
L17:
  test   %r13d,%r13d
  je     L362
  mov    %rbx,%r12
  cmp    %dil,-0x1(%rbx)
  je     L306
  jmp    L252
  nopl   0x0(%rax)
L135:
  pop    %rbx
  mov    %r13d,%edx
  mov    %rbp,%rdi
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  jmp    1060 <glob_match_after_star@plt>
  nopl   0x0(%rax,%rax,1)
L362:
  call   <tolower@plt>
  movsbl -0x1(%rbx),%edi
  mov    %rbx,%r12
  mov    %eax,%r14d
  call   <tolower@plt>
  cmp    %eax,%r14d
  je     L306
  jmp    L252
  nopw   0x0(%rax,%rax,1)
L178:
  test   %r9b,%r9b
  jne    L169
  jmp    L252
```

assistant: ```c
int glob_match(const char *pattern, const char *text, const int casecmp) {
  register const char *p = pattern, *t = text;
  register char c;
  while ((c = *p++) != '\0')
    switch (c) {
    case '?':
      if (*t == '\0')
        return 0;
      else
        ++t;
      break;
    case '\\':
      if (*p++ != *t++)
        return 0;
      break;
    case '*':
      return glob_match_after_star(p, t, casecmp);
    case '[': {
      register char c1 = *t++;
      int invert;
      if (!c1)
        return (0);
      invert = ((*p == '!') || (*p == '^'));
      if (invert)
        p++;
      c = *p++;
      while (1) {
        register char cstart = c, cend = c;
        if (c == '\\') {
          cstart = *p++;
          cend = cstart;
        }
        if (c == '\0')
          return 0;
        c = *p++;
        if (c == '-' && *p != ']') {
          cend = *p++;
          if (cend == '\\')
            cend = *p++;
          if (cend == '\0')
            return 0;
          c = *p++;
        }
        if (c1 >= cstart && c1 <= cend)
          goto match;
        if (c == ']')
          break;
      }
      if (!invert)
        return 0;
      break;
    match:
      while (c != ']') {
        if (c == '\0')
          return 0;
        c = *p++;
        if (c == '\0')
          return 0;
        else if (c == '\\')
          ++p;
      }
      if (invert)
        return 0;
      break;
    }
    default:
      if (casecmp) {
        if (c != *t++)
          return 0;
      } else {
        if (tolower(c) != tolower(*t))
          return 0;
        t++;
      }
    }
  return *t == '\0';
}
```