user: Translate the below assembly code into C programming language:

```asm
<_scan_open_code_fence>:
  endbr64
  movzbl (%rdi),%eax
  mov    %rdi,%rdx
  xor    %r8d,%r8d
  cmp    $0x5f,%al
  jbe    L16
  cmp    $0x60,%al
  je     L157
  cmp    $0x7e,%al
  je     L85
L16:
  mov    %r8d,%eax
  ret
  nopl   (%rax)
L85:
  cmpb   $0x7e,0x1(%rdi)
  jne    L16
  movzbl 0x2(%rdi),%eax
  lea    D15(%rip),%rsi
  testb  $0x10,(%rsi,%rax,1)
  je     L16
  lea    0x2(%rdi),%rcx
  jmp    L195
  nopl   (%rax)
L52:
  test   %dil,%dil
  je     L181
  cmp    $0x7d,%dil
  jbe    L190
L195:
  movzbl 0x1(%rcx),%edi
  add    $0x1,%rcx
  testb  $0x20,(%rsi,%rdi,1)
  je     L52
  mov    %rcx,%rax
L126:
  movzbl 0x1(%rax),%r8d
  add    $0x1,%rax
  mov    %r8,%rdi
  testb  $0x20,(%rsi,%r8,1)
  jne    L126
  sub    $0x1,%edi
  xor    %r8d,%r8d
  cmp    $0x7c,%dil
  ja     L16
L190:
  mov    %ecx,%r8d
  sub    %edx,%r8d
  jmp    L16
  nopw   0x0(%rax,%rax,1)
L157:
  cmpb   $0x60,0x1(%rdi)
  jne    L16
  movzbl 0x2(%rdi),%eax
  lea    D15(%rip),%rsi
  testb  $0x40,(%rsi,%rax,1)
  je     L16
  lea    0x2(%rdi),%r8
  jmp    L200
  nopl   0x0(%rax)
L112:
  test   %cl,%cl
  je     L181
  cmp    $0x5f,%cl
  jbe    L78
L200:
  movzbl 0x1(%r8),%ecx
  add    $0x1,%r8
  cmpb   $0x0,(%rsi,%rcx,1)
  jns    L112
  mov    %r8,%rax
  nopl   0x0(%rax,%rax,1)
L192:
  movzbl 0x1(%rax),%edi
  add    $0x1,%rax
  cmpb   $0x0,(%rsi,%rdi,1)
  mov    %rdi,%rcx
  js     L192
  sub    $0x1,%ecx
  cmp    $0x5e,%cl
  jbe    L78
L181:
  xor    %r8d,%r8d
  jmp    L16
L78:
  sub    %edx,%r8d
  jmp    L16
```

tool_calls: name: unpack_data
arguments: data_label: D15
data_type: string

tool: 

assistant: ```c
extern int _scan_open_code_fence(const unsigned char *p) {
  const unsigned char *marker = NULL;
  const unsigned char *start = p;
  {
    unsigned char yych;
    static const unsigned char yybm[] = {
        0, 160, 160, 160, 160, 160, 160, 160, 160, 160, 0, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 96, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 144, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
    };
    yych = *p;
    if (yych <= '_') {
      if (yych != '\n')
        goto yy1253;
    } else {
      if (yych <= '`')
        goto yy1251;
      if (yych == '~')
        goto yy1252;
      goto yy1253;
    }
  yy1250 : { return 0; }
  yy1251:
    yych = *(marker = ++p);
    if (yych == '`')
      goto yy1262;
    goto yy1250;
  yy1252:
    yych = *(marker = ++p);
    if (yych == '~')
      goto yy1254;
    goto yy1250;
  yy1253:
    yych = *++p;
    goto yy1250;
  yy1254:
    yych = *++p;
    if (yybm[0 + yych] & 16) {
      goto yy1256;
    }
  yy1255:
    p = marker;
    goto yy1250;
  yy1256:
    marker = p + 1;
    ++p;
    yych = *p;
    if (yybm[0 + yych] & 32) {
      goto yy1258;
    }
    if (yych <= 0x00)
      goto yy1255;
    if (yych <= '}')
      goto yy1260;
    goto yy1256;
  yy1258:
    ++p;
    yych = *p;
    if (yybm[0 + yych] & 32) {
      goto yy1258;
    }
    if (yych <= 0x00)
      goto yy1255;
    if (yych >= '~')
      goto yy1255;
  yy1260:
    ++p;
    p = marker;
    { return (p - start); }
  yy1262:
    yych = *++p;
    if (yybm[0 + yych] & 64) {
      goto yy1263;
    }
    goto yy1255;
  yy1263:
    marker = p + 1;
    ++p;
    yych = *p;
    if (yybm[0 + yych] & 128) {
      goto yy1265;
    }
    if (yych <= 0x00)
      goto yy1255;
    if (yych <= '_')
      goto yy1267;
    goto yy1263;
  yy1265:
    ++p;
    yych = *p;
    if (yybm[0 + yych] & 128) {
      goto yy1265;
    }
    if (yych <= 0x00)
      goto yy1255;
    if (yych >= '`')
      goto yy1255;
  yy1267:
    ++p;
    p = marker;
    { return (p - start); }
  }
}
```