user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<escape>:
  endbr64
  movzbl (%rdi),%eax
  test   %al,%al
  je     L216
  push   %r15
  lea    D26(%rip),%r15
  push   %r14
  lea    D33(%rip),%r14
  push   %r13
  mov    %rdi,%r13
  push   %r12
  mov    %rdi,%r12
  push   %rbp
  mov    %rdi,%rbp
  lea    D30(%rip),%rdi
  push   %rbx
  sub    $0x8,%rsp
  jmp    L126
  nopl   (%rax)
L281:
  mov    %rbx,%rax
  mov    %r12,%rbx
  mov    %rax,%r12
L100:
  movzbl 0x1(%rbx),%eax
  add    $0x1,%rbp
  mov    %al,0x0(%rbp)
  test   %al,%al
  je     L275
L126:
  lea    0x1(%r12),%rbx
  cmp    $0x5c,%al
  jne    L281
  movzbl 0x1(%r12),%edx
  lea    -0x30(%rdx),%eax
  cmp    $0x48,%al
  ja     L144
  movzbl %al,%eax
  movslq (%r14,%rax,4),%rax
  add    %r14,%rax
  notrack jmp *%rax
  nopl   0x0(%rax,%rax,1)
L275:
  add    $0x8,%rsp
  mov    %ebp,%eax
  pop    %rbx
  sub    %r13d,%eax
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  movb   $0x7,0x0(%rbp)
  add    $0x2,%r12
  jmp    L100
  xchg   %ax,%ax
L144:
  movb   $0x0,0x2(%r12)
  mov    %r12,%rsi
  xor    %r8d,%r8d
  xor    %ecx,%ecx
  xor    %edx,%edx
  add    $0x2,%r12
  call   <bad@plt>
  lea    D30(%rip),%rdi
  jmp    L100
  nopw   0x0(%rax,%rax,1)
  sub    $0x30,%edx
  lea    0x3(%r12),%rax
  mov    %rbx,%r8
  movsbl %dl,%ecx
L58:
  mov    %r8,%rbx
  add    $0x1,%r8
  mov    %r8,%r12
  jmp    L203
  nopw   0x0(%rax,%rax,1)
L75:
  movsbl 0x1(%rbx),%edx
  lea    -0x30(%rdx),%esi
  cmp    $0x7,%esi
  jbe    L39
  mov    %rbx,%rax
L203:
  cmp    %rax,%rbx
  jb     L75
  mov    %cl,0x0(%rbp)
  jmp    L100
  movb   $0x1b,0x0(%rbp)
  add    $0x2,%r12
  jmp    L100
  lea    0x2(%r12),%rsi
  xor    %edx,%edx
L20:
  movsbl 0x1(%rbx),%ecx
  lea    0x1(%rbx),%r12
  mov    %ecx,%eax
  sub    $0x30,%eax
  cmp    $0x4d,%al
  ja     L2
  movzbl %al,%eax
  movslq (%r15,%rax,4),%rax
  add    %r15,%rax
  notrack jmp *%rax
  cmp    %r12,%rsi
  je     L118
  nopl   0x0(%rax,%rax,1)
L2:
  mov    %dl,0x0(%rbp)
  jmp    L100
  shl    $0x4,%edx
  lea    -0x30(%rcx,%rdx,1),%edx
L140:
  mov    %r12,%rbx
  jmp    L20
  movb   $0x20,0x0(%rbp)
  add    $0x2,%r12
  jmp    L100
  movb   $0x8,0x0(%rbp)
  add    $0x2,%r12
  jmp    L100
  movzbl 0x2(%r12),%eax
  test   %al,%al
  jne    L208
  movb   $0x0,0x0(%rbp)
  add    $0x2,%r12
  jmp    L100
  movb   $0xc,0x0(%rbp)
  add    $0x2,%r12
  jmp    L100
  movb   $0xb,0x0(%rbp)
  add    $0x2,%r12
  jmp    L100
  movb   $0x9,0x0(%rbp)
  add    $0x2,%r12
  jmp    L100
  movb   $0xd,0x0(%rbp)
  add    $0x2,%r12
  jmp    L100
  movb   $0xa,0x0(%rbp)
  add    $0x2,%r12
  jmp    L100
  shl    $0x4,%edx
  lea    -0x37(%rcx,%rdx,1),%edx
  jmp    L140
  shl    $0x4,%edx
  lea    -0x57(%rcx,%rdx,1),%edx
  jmp    L140
  test   %rsi,%rsi
  jne    L2
  lea    0x2(%rbx),%rax
  mov    %r12,%rbx
  mov    %rax,%r12
  jmp    L2
  nopw   0x0(%rax,%rax,1)
L39:
  lea    -0x30(%rdx,%rcx,8),%ecx
  jmp    L58
  nopl   0x0(%rax)
L216:
  xor    %eax,%eax
  ret
  nopl   0x0(%rax,%rax,1)
L208:
  and    $0x1f,%eax
  lea    0x2(%r12),%rbx
  add    $0x3,%r12
  mov    %al,0x0(%rbp)
  jmp    L100
L118:
  xor    %esi,%esi
  jmp    L140
```

tool_calls: name: parse_data
arguments: label: D30
type_infered: string

tool: D30: invalid C \ escape


assistant: ```c
int escape(char *s) {
  char *b;
  char *t;
  char *q;
  char *e;
  int c;
  for (b = t = s; *t = *s; s++, t++)
    if (*s == '\\')
      switch (*++s) {
      case '\\':
        break;
      case 'a':
        *t = '\a';
        break;
      case 'b':
        *t = '\b';
        break;
      case 'c':
        if (*t = *++s)
          *t &= 037;
        else
          s--;
        break;
      case 'e':
      case 'E':
        *t = 033;
        break;
      case 'f':
        *t = '\f';
        break;
      case 'n':
        *t = '\n';
        break;
      case 'r':
        *t = '\r';
        break;
      case 's':
        *t = ' ';
        break;
      case 't':
        *t = '\t';
        break;
      case 'v':
        *t = '\v';
        break;
      case 'u':
      case 'x':
        c = 0;
        q = c == 'u' ? (s + 5) : (char *)0;
        e = s + 1;
        while (!e || !q || s < q) {
          switch (*++s) {
          case 'a':
          case 'b':
          case 'c':
          case 'd':
          case 'e':
          case 'f':
            c = (c << 4) + *s - 'a' + 10;
            continue;
          case 'A':
          case 'B':
          case 'C':
          case 'D':
          case 'E':
          case 'F':
            c = (c << 4) + *s - 'A' + 10;
            continue;
          case '0':
          case '1':
          case '2':
          case '3':
          case '4':
          case '5':
          case '6':
          case '7':
          case '8':
          case '9':
            c = (c << 4) + *s - '0';
            continue;
          case '{':
          case '[':
            if (s != e) {
              s--;
              break;
            }
            e = 0;
            continue;
          case '}':
          case ']':
            if (e)
              s--;
            break;
          default:
            s--;
            break;
          }
          break;
        }
        *t = c;
        break;
      case '0':
      case '1':
      case '2':
      case '3':
      case '4':
      case '5':
      case '6':
      case '7':
        c = *s - '0';
        q = s + 2;
        while (s < q) {
          switch (*++s) {
          case '0':
          case '1':
          case '2':
          case '3':
          case '4':
          case '5':
          case '6':
          case '7':
            c = (c << 3) + *s - '0';
            break;
          default:
            q = --s;
            break;
          }
        }
        *t = c;
        break;
      default:
        *(s + 1) = 0;
        bad("invalid C \\ escape\n", s - 1, 0, 0, 0);
      }
  return t - b;
}
```