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

```asm
<scancode_to_mycode>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    %edi,%edx
  mov    %esi,%eax
  mov    %dl,-0x4(%rbp)
  mov    %al,-0x8(%rbp)
  movsbl -0x4(%rbp),%eax
  sub    $0x15,%eax
  cmp    $0x4c,%eax
  ja     L661
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  lea    D3(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D3(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  mov    $0x0,%eax
  jmp    L272
  mov    $0x1,%eax
  jmp    L272
  mov    $0x2,%eax
  jmp    L272
  mov    $0x3,%eax
  jmp    L272
  mov    $0x4,%eax
  jmp    L272
  mov    $0x5,%eax
  jmp    L272
  mov    $0x6,%eax
  jmp    L272
  mov    $0x7,%eax
  jmp    L272
  mov    $0x8,%eax
  jmp    L272
  mov    $0x9,%eax
  jmp    L272
  mov    $0xa,%eax
  jmp    L272
  mov    $0xb,%eax
  jmp    L272
  mov    $0xc,%eax
  jmp    L272
  mov    $0xd,%eax
  jmp    L272
  mov    $0xe,%eax
  jmp    L272
  mov    $0xf,%eax
  jmp    L272
  mov    $0x10,%eax
  jmp    L272
  mov    $0x11,%eax
  jmp    L272
  mov    $0x12,%eax
  jmp    L272
  mov    $0x13,%eax
  jmp    L272
  mov    $0x14,%eax
  jmp    L272
  mov    $0x15,%eax
  jmp    L272
  mov    $0x16,%eax
  jmp    L272
  mov    $0x17,%eax
  jmp    L272
  mov    $0x18,%eax
  jmp    L272
  mov    $0x19,%eax
  jmp    L272
  mov    $0x1a,%eax
  jmp    L272
  mov    $0x1b,%eax
  jmp    L272
  movsbl -0x8(%rbp),%eax
  and    $0x20,%eax
  test   %eax,%eax
  je     L31
  mov    $0x1c,%eax
  jmp    L272
L31:
  movsbl -0x8(%rbp),%eax
  and    $0x3,%eax
  test   %eax,%eax
  je     L198
  mov    $0x1d,%eax
  jmp    L272
L198:
  mov    $0x1e,%eax
  jmp    L272
  movsbl -0x8(%rbp),%eax
  and    $0x20,%eax
  test   %eax,%eax
  je     L507
  mov    $0x1f,%eax
  jmp    L272
L507:
  movsbl -0x8(%rbp),%eax
  and    $0x3,%eax
  test   %eax,%eax
  je     L454
  mov    $0x20,%eax
  jmp    L272
L454:
  mov    $0x21,%eax
  jmp    L272
  movsbl -0x8(%rbp),%eax
  and    $0x3,%eax
  test   %eax,%eax
  je     L100
  mov    $0x22,%eax
  jmp    L272
L100:
  mov    $0x23,%eax
  jmp    L272
  movsbl -0x8(%rbp),%eax
  and    $0x3,%eax
  test   %eax,%eax
  je     L509
  mov    $0x24,%eax
  jmp    L272
L509:
  mov    $0x25,%eax
  jmp    L272
  movsbl -0x8(%rbp),%eax
  and    $0x3,%eax
  test   %eax,%eax
  je     L348
  mov    $0x26,%eax
  jmp    L272
L348:
  mov    $0x27,%eax
  jmp    L272
  movsbl -0x8(%rbp),%eax
  and    $0x3,%eax
  test   %eax,%eax
  je     L185
  mov    $0x2a,%eax
  jmp    L272
L185:
  mov    $0x2b,%eax
  jmp    L272
  movsbl -0x8(%rbp),%eax
  and    $0x3,%eax
  test   %eax,%eax
  je     L269
  mov    $0x2c,%eax
  jmp    L272
L269:
  mov    $0x2d,%eax
  jmp    L272
  movsbl -0x8(%rbp),%eax
  and    $0x3,%eax
  test   %eax,%eax
  je     L626
  mov    $0x2e,%eax
  jmp    L272
L626:
  mov    $0x2f,%eax
  jmp    L272
  movsbl -0x8(%rbp),%eax
  and    $0x3,%eax
  test   %eax,%eax
  je     L201
  mov    $0x30,%eax
  jmp    L272
L201:
  mov    $0x31,%eax
  jmp    L272
  mov    $0x32,%eax
  jmp    L272
  movsbl -0x8(%rbp),%eax
  and    $0x3,%eax
  test   %eax,%eax
  je     L261
  mov    $0x39,%eax
  jmp    L272
L261:
  mov    $0x33,%eax
  jmp    L272
  movsbl -0x8(%rbp),%eax
  and    $0x3,%eax
  test   %eax,%eax
  je     L651
  mov    $0x34,%eax
  jmp    L272
L651:
  mov    $0x35,%eax
  jmp    L272
  movsbl -0x8(%rbp),%eax
  and    $0x3,%eax
  test   %eax,%eax
  je     L230
  mov    $0x36,%eax
  jmp    L272
L230:
  mov    $0x37,%eax
  jmp    L272
  mov    $0x38,%eax
  jmp    L272
  movsbl -0x8(%rbp),%eax
  and    $0x3,%eax
  test   %eax,%eax
  je     L113
  mov    $0x3a,%eax
  jmp    L272
L113:
  mov    $0x3b,%eax
  jmp    L272
  mov    $0x3c,%eax
  jmp    L272
L661:
  mov    $0x0,%eax
  call   <linefeed@plt>
  lea    D26(%rip),%rax
  mov    %rax,%rdi
  call   <print@plt>
  movsbl -0x4(%rbp),%eax
  mov    %eax,%edi
  call   <println_hex@plt>
  mov    $0x0,%eax
  call   <framebuffer_update_display@plt>
  mov    $0xffffffff,%eax
L272:
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: data_tag: D26
type_infered: string

tool: D26: unmapped: 

assistant: ```c
char scancode_to_mycode(char scancode, char modifiers) {
  switch (scancode) {
  case 0x5a:
    return 0;
  case 0x1c:
    return 1;
  case 0x32:
    return 2;
  case 0x21:
    return 3;
  case 0x23:
    return 4;
  case 0x24:
    return 5;
  case 0x2b:
    return 6;
  case 0x34:
    return 7;
  case 0x33:
    return 8;
  case 0x43:
    return 9;
  case 0x3b:
    return 10;
  case 0x42:
    return 11;
  case 0x4b:
    return 12;
  case 0x3a:
    return 13;
  case 0x31:
    return 14;
  case 0x44:
    return 15;
  case 0x4d:
    return 16;
  case 0x15:
    return 17;
  case 0x2d:
    return 18;
  case 0x1b:
    return 19;
  case 0x2c:
    return 20;
  case 0x3c:
    return 21;
  case 0x2a:
    return 22;
  case 0x1d:
    return 23;
  case 0x22:
    return 24;
  case 0x35:
    return 25;
  case 0x1a:
    return 26;
  case 0x29:
    return 27;
  case 0x3e:
    if ((modifiers & (1 << 5)) != 0) {
      return 28;
    } else if ((modifiers & ((1 << 0) | (1 << 1))) != 0) {
      return 29;
    }
    return 30;
  case 0x46:
    if ((modifiers & (1 << 5)) != 0) {
      return 31;
    } else if ((modifiers & ((1 << 0) | (1 << 1))) != 0) {
      return 32;
    }
    return 33;
  case 0x16:
    if ((modifiers & ((1 << 0) | (1 << 1))) != 0) {
      return 34;
    }
    return 35;
  case 0x1e:
    if ((modifiers & ((1 << 0) | (1 << 1))) != 0) {
      return 36;
    }
    return 37;
  case 0x5d:
    if ((modifiers & ((1 << 0) | (1 << 1))) != 0) {
      return 38;
    }
    return 39;
  case 0x2e:
    if ((modifiers & ((1 << 0) | (1 << 1))) != 0) {
      return 42;
    }
    return 43;
  case 0x36:
    if ((modifiers & ((1 << 0) | (1 << 1))) != 0) {
      return 44;
    }
    return 45;
  case 0x5b:
    if ((modifiers & ((1 << 0) | (1 << 1))) != 0) {
      return 46;
    }
    return 47;
  case 0x41:
    if ((modifiers & ((1 << 0) | (1 << 1))) != 0) {
      return 48;
    }
    return 49;
  case 0x4a:
    return 50;
  case 0x49:
    if ((modifiers & ((1 << 0) | (1 << 1))) != 0) {
      return 57;
    }
    return 51;
  case 0x3d:
    if ((modifiers & ((1 << 0) | (1 << 1))) != 0) {
      return 52;
    }
    return 53;
  case 0x45:
    if ((modifiers & ((1 << 0) | (1 << 1))) != 0) {
      return 54;
    }
    return 55;
  case 0x26:
    return 56;
  case 0x61:
    if ((modifiers & ((1 << 0) | (1 << 1))) != 0) {
      return 58;
    }
    return 59;
  case 0x4e:
    return 60;
  default:
    linefeed();
    print("unmapped: ");
    println_hex(scancode);
    framebuffer_update_display();
    return 0xff;
  }
}
```