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

```asm
<get_attrib>:
  endbr64
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  mov    %rdx,%rbp
  push   %rbx
  movzbl (%rdi),%edx
  cmp    $0x3e,%dl
  je     L32
  mov    %rdi,%rax
  mov    %rsi,%r14
  xor    %ecx,%ecx
  xor    %r12d,%r12d
  cs nopw 0x0(%rax,%rax,1)
L189:
  cmp    $0x20,%dl
  je     L326
  cmp    $0x9,%dl
  je     L326
  test   %r12d,%r12d
  jne    L159
  cmp    $0x1,%ecx
  je     L35
  cmp    $0x2,%ecx
  jne    L16
L544:
  lea    0x1(%rax),%r13
  cmp    $0x22,%dl
  je     L444
  movzbl 0x1(%rax),%edx
  cmp    $0x3e,%dl
  je     L32
  cmp    $0x20,%dl
  je     L397
  cmp    $0x9,%dl
  je     L397
L56:
  mov    %r14,%rdi
  lea    0x1(%r13),%rbx
  call   <strlen@plt>
  mov    %r14,%rsi
  mov    %r13,%rdi
  mov    %eax,%edx
  call   <strncasecmp@plt>
  test   %eax,%eax
  je     L417
  movzbl 0x1(%r13),%eax
  cmp    $0x3e,%al
  je     L32
  cmp    $0x20,%al
  je     L292
  cmp    $0x9,%al
  je     L292
  mov    %rbx,%r13
  jmp    L56
  nopl   0x0(%rax,%rax,1)
L417:
  mov    %r14,%rdi
  call   <strlen@plt>
  movzbl 0x1(%r13),%edx
  lea    -0x1(%rax),%ecx
  cmp    $0x3e,%dl
  je     L32
  cmp    $0x20,%dl
  je     L285
  cmp    $0x9,%dl
  je     L285
  test   %ecx,%ecx
  je     L510
  movzbl 0x2(%r13),%edx
  lea    -0x2(%rax),%ecx
  lea    0x2(%r13),%rax
  cmp    $0x3e,%dl
  je     L32
  cmp    $0x20,%dl
  je     L91
  cmp    $0x9,%dl
  jne    L9
L91:
  mov    %ecx,%r12d
  mov    $0x1,%ecx
  nopw   0x0(%rax,%rax,1)
L326:
  mov    %rax,%rbx
  test   %r12d,%r12d
  jne    L159
L566:
  movzbl 0x1(%rbx),%edx
  lea    0x1(%rbx),%rax
  cmp    $0x3e,%dl
  jne    L189
L32:
  mov    $0xffffffff,%r12d
L138:
  pop    %rbx
  mov    %r12d,%eax
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
L317:
  mov    %ecx,%r12d
  mov    %rbx,%rax
  mov    $0x1,%ecx
  xchg   %ax,%ax
L159:
  sub    $0x1,%r12d
  mov    %rax,%rbx
  jmp    L566
L510:
  mov    %rbx,%rax
  nopl   0x0(%rax)
L35:
  movzbl 0x1(%rax),%ecx
  lea    0x1(%rax),%r13
  cmp    $0x3d,%dl
  je     L309
  cmp    $0x3e,%cl
  je     L32
  cmp    $0x20,%cl
  je     L181
  cmp    $0x9,%cl
  jne    L56
L181:
  lea    0x2(%rax),%r13
  movzbl 0x2(%rax),%eax
  cmp    $0x3e,%al
  je     L32
  cmp    $0x9,%al
  je     L51
  cmp    $0x20,%al
  jne    L56
L51:
  xor    %ecx,%ecx
  mov    %r13,%rbx
  jmp    L566
  nopw   0x0(%rax,%rax,1)
L397:
  lea    0x2(%rax),%r13
  movzbl 0x2(%rax),%eax
  cmp    $0x3e,%al
  je     L32
  cmp    $0x20,%al
  je     L51
  cmp    $0x9,%al
  jne    L56
  xor    %ecx,%ecx
  mov    %r13,%rbx
  jmp    L566
  xchg   %ax,%ax
L292:
  xor    %ecx,%ecx
  jmp    L566
  nopw   0x0(%rax,%rax,1)
L309:
  cmp    $0x3e,%cl
  je     L32
  cmp    $0x20,%cl
  je     L200
  cmp    $0x9,%cl
  je     L200
  mov    %r13,%rax
  mov    %ecx,%edx
  jmp    L544
L200:
  movzbl 0x2(%rax),%edx
  lea    0x2(%rax),%rbx
  cmp    $0x3e,%dl
  je     L32
  cmp    $0x9,%dl
  je     L221
  mov    %rbx,%rax
  cmp    $0x20,%dl
  jne    L544
L221:
  mov    $0x2,%ecx
  jmp    L566
L285:
  test   %ecx,%ecx
  jne    L317
  movzbl 0x2(%r13),%edx
  lea    0x2(%r13),%rbx
  cmp    $0x3e,%dl
  je     L32
  cmp    $0x20,%dl
  je     L265
  mov    %rbx,%rax
  cmp    $0x9,%dl
  jne    L35
L265:
  mov    $0x1,%ecx
  jmp    L566
L444:
  mov    %r13,0x0(%rbp)
  cmpb   $0x22,0x1(%rax)
  lea    0x2(%rax),%rdx
  je     L138
  mov    $0x1,%eax
  sub    %edx,%eax
  nopw   0x0(%rax,%rax,1)
L232:
  lea    (%rax,%rdx,1),%r12d
  add    $0x1,%rdx
  cmpb   $0x22,-0x1(%rdx)
  jne    L232
  jmp    L138
L9:
  test   %ecx,%ecx
  je     L35
  mov    %ecx,%r12d
  mov    $0x1,%ecx
  jmp    L159
L16:
  mov    %rax,%r13
  jmp    L56
```

assistant: ```c
int get_attrib(char *input, char *name, char **data) {
  int skip = 0;
  int len = 0;
  int state = 0;
  while (*input != '>') {
    if (((*input != ' ') && (*input != '\t')) && (skip == 0)) {
      switch (state) {
      case 0:
        if (strncasecmp(input, name, strlen(name)) == 0) {
          state = 1;
          skip = strlen(name) - 1;
        }
        break;
      case 1:
        if (*input == '=')
          state = 2;
        else
          state = 0;
        break;
      case 2:
        if (*input == '\"') {
          *data = ++input;
          while (*input++ != '\"')
            len++;
          return len;
        } else
          state = 0;
        break;
      }
    } else if (skip)
      skip--;
    input++;
  }
  return -1;
}
```