user: Demonstrate the C code that generates the assembly output below:

```asm
<unesc>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x28(%rbp)
  mov    -0x28(%rbp),%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x28(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L92
L52:
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x25,%al
  je     L180
  mov    -0x10(%rbp),%rdx
  lea    0x1(%rdx),%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x8(%rbp),%rax
  lea    0x1(%rax),%rcx
  mov    %rcx,-0x8(%rbp)
  movzbl (%rdx),%edx
  mov    %dl,(%rax)
  jmp    L92
L180:
  addq   $0x1,-0x10(%rbp)
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x25,%al
  jne    L158
  mov    -0x10(%rbp),%rdx
  lea    0x1(%rdx),%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x8(%rbp),%rax
  lea    0x1(%rax),%rcx
  mov    %rcx,-0x8(%rbp)
  movzbl (%rdx),%edx
  mov    %dl,(%rax)
  jmp    L92
L158:
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2f,%al
  jle    L81
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x39,%al
  jg     L81
  mov    -0x10(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x10(%rbp)
  movzbl (%rax),%eax
  sub    $0x30,%eax
  mov    %al,-0x11(%rbp)
  jmp    L23
L81:
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x60,%al
  jle    L116
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x66,%al
  jg     L116
  mov    -0x10(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x10(%rbp)
  movzbl (%rax),%eax
  sub    $0x57,%eax
  mov    %al,-0x11(%rbp)
  jmp    L23
L116:
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x40,%al
  jle    L78
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x46,%al
  jg     L78
  mov    -0x10(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x10(%rbp)
  movzbl (%rax),%eax
  sub    $0x37,%eax
  mov    %al,-0x11(%rbp)
L23:
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2f,%al
  jle    L133
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x39,%al
  jg     L133
  movzbl -0x11(%rbp),%eax
  shl    $0x4,%eax
  mov    %eax,%ecx
  mov    -0x10(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x10(%rbp)
  movzbl (%rax),%eax
  sub    $0x30,%eax
  or     %ecx,%eax
  mov    %al,-0x11(%rbp)
  jmp    L30
L133:
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x60,%al
  jle    L35
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x66,%al
  jg     L35
  movzbl -0x11(%rbp),%eax
  shl    $0x4,%eax
  mov    %eax,%ecx
  mov    -0x10(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x10(%rbp)
  movzbl (%rax),%eax
  sub    $0x57,%eax
  or     %ecx,%eax
  mov    %al,-0x11(%rbp)
  jmp    L30
L35:
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x40,%al
  jle    L78
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x46,%al
  jg     L78
  movzbl -0x11(%rbp),%eax
  shl    $0x4,%eax
  mov    %eax,%ecx
  mov    -0x10(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x10(%rbp)
  movzbl (%rax),%eax
  sub    $0x37,%eax
  or     %ecx,%eax
  mov    %al,-0x11(%rbp)
L30:
  mov    -0x8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x8(%rbp)
  movzbl -0x11(%rbp),%edx
  mov    %dl,(%rax)
L92:
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L52
L78:
  mov    -0x8(%rbp),%rax
  movb   $0x0,(%rax)
  mov    -0x28(%rbp),%rax
  pop    %rbp
  ret
```

assistant: ```c
char *unesc(s)
char *s;
{
  char *p;
  char *p2;
  unsigned char c;
  p = s;
  p2 = s;
  while (*p) {
    if (*p != '%') {
      *p2++ = *p++;
      continue;
    }
    p++;
    if (*p == '%') {
      *p2++ = *p++;
      continue;
    }
    if (*p >= '0' && *p <= '9')
      c = *p++ - '0';
    else if (*p >= 'a' && *p <= 'f')
      c = *p++ - 'a' + 10;
    else if (*p >= 'A' && *p <= 'F')
      c = *p++ - 'A' + 10;
    else
      break;
    if (*p >= '0' && *p <= '9')
      c = c << 4 | (*p++ - '0');
    else if (*p >= 'a' && *p <= 'f')
      c = c << 4 | (*p++ - 'a') + 10;
    else if (*p >= 'A' && *p <= 'F')
      c = c << 4 | (*p++ - 'A') + 10;
    else
      break;
    *p2++ = c;
  }
  *p2 = '\0';
  return (s);
}
```