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

```asm
<t_special>:
  endbr64
  cmp    %esi,%edi
  sete   %r9b
  cmp    %edx,%edi
  sete   %al
  or     %r9b,%al
  jne    L237
  cmp    %edx,%esi
  je     L361
  mov    %edi,%eax
  add    %esi,%eax
  jne    L276
  movzbl 0x7(%rcx),%eax
  cmp    $0x65,%al
  je     L238
  jle    L276
  cmp    $0x69,%al
  je     L303
L276:
  jmp    1050 <t1@plt>
  nopl   (%rax)
L237:
  movzbl 0x7(%rcx),%r8d
  cmp    $0x34,%r8b
  je     L320
  sub    $0x62,%r8d
  cmp    $0xa,%r8b
  ja     L276
  lea    D17(%rip),%r10
  movzbl %r8b,%r8d
  movslq (%r10,%r8,4),%r8
  add    %r10,%r8
  notrack jmp *%r8
  nopw   0x0(%rax,%rax,1)
L361:
  movzbl 0x7(%rcx),%eax
  cmp    $0x34,%al
  je     L276
  sub    $0x62,%eax
  cmp    $0xa,%al
  ja     L276
  lea    D5(%rip),%r8
  movzbl %al,%eax
  movslq (%r8,%rax,4),%rax
  add    %r8,%rax
  notrack jmp *%rax
  nopl   0x0(%rax,%rax,1)
L303:
  test   $0x1,%dl
  je     L276
L178:
  xor    %eax,%eax
  ret
  test   $0x1,%dl
  je     L276
  cmp    %esi,%edi
  jne    L381
  jmp    L178
  nopl   0x0(%rax,%rax,1)
L238:
  test   $0x1,%dl
  je     L276
L381:
  mov    %edi,%eax
  add    %esi,%eax
  jne    L276
  jmp    L178
  nopl   (%rax)
  test   %al,%al
  je     L64
  cmp    %esi,%edi
  jne    L309
  test   $0x1,%dl
  jne    L178
  cmp    %edx,%edi
  je     L309
L64:
  cmp    %edx,%esi
  jne    L276
  test   $0x1,%dil
  jne    L178
  jmp    L276
  nopl   0x0(%rax)
  lea    (%rdi,%rdi,1),%eax
  cmp    %esi,%edi
  jne    L332
  lea    (%rdx,%rax,1),%r8d
  mov    %edx,%r9d
  and    $0x3,%r8d
  and    $0x1,%r9d
  or     %r9d,%r8d
  jne    L178
  cmp    %edx,%edi
  je     L332
L216:
  cmp    %edx,%esi
  jne    L276
  nopw   0x0(%rax,%rax,1)
  lea    (%rdi,%rsi,2),%eax
  mov    %edi,%r8d
  and    $0x3,%eax
  and    $0x1,%r8d
  or     %r8d,%eax
  jne    L178
  jmp    L276
  nopl   0x0(%rax,%rax,1)
L320:
  lea    (%rdx,%rdi,2),%eax
  mov    %edx,%r8d
  and    $0x3,%eax
  and    $0x1,%r8d
  or     %r8d,%eax
  je     L276
  cmp    %esi,%edi
  je     L178
  jmp    L276
  nopl   0x0(%rax,%rax,1)
  test   $0x1,%dl
  je     L276
  test   %r9b,%r9b
  jne    L178
  jmp    L276
  nop
L309:
  test   $0x1,%sil
  je     L64
  jmp    L178
  nop
L332:
  add    %esi,%eax
  mov    %esi,%r8d
  and    $0x3,%eax
  and    $0x1,%r8d
  or     %r8d,%eax
  je     L216
  jmp    L178
```

assistant: ```c
int t_special(int h, int k, int l, char string[]) {
  if (h == k || h == l || k == l || h == -k) {
    switch (string[7]) {
    case 'l':
      if (l % 2 != 0 && h == k)
        return 0;
      break;
    case '4':
      if (((2 * h + l) % 4 != 0 || l % 2 != 0) && h == k)
        return 0;
      break;
    case 'i':
      if (l % 2 != 0 && h == -k)
        return 0;
      break;
    case 'e':
      if (l % 2 != 0 && (h == k || h == -k))
        return 0;
      break;
    case 'c':
      if (h == k || h == l || k == l) {
        if (h == k)
          if (l % 2 != 0)
            return 0;
        if (h == l)
          if (k % 2 != 0)
            return 0;
        if (k == l)
          if (h % 2 != 0)
            return 0;
      }
      break;
    case 'b':
      if (h == k || h == l || k == l) {
        if (h == k)
          if ((2 * h + l) % 4 != 0 || l % 2 != 0)
            return 0;
        if (h == l)
          if ((2 * h + k) % 4 != 0 || k % 2 != 0)
            return 0;
        if (k == l)
          if ((2 * k + h) % 4 != 0 || h % 2 != 0)
            return 0;
      }
      break;
    default:
      break;
    }
    return t1(h, k, l, string);
  } else
    return t1(h, k, l, string);
}
```