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

```asm
<decrypt>:
  endbr64
  push   %r15
  mov    %r9d,%r15d
  push   %r14
  mov    %rdx,%r14
  push   %r13
  mov    %ecx,%r13d
  push   %r12
  mov    %rdi,%r12
  mov    %ecx,%edi
  push   %rbp
  mov    %r8d,%ebp
  push   %rbx
  sub    $0x8,%rsp
  call   <KeySchedule@plt>
  cmp    $0x2eec0,%r13d
  je     L171
  jle    L134
  cmp    $0x3e8c0,%r13d
  je     L48
  jle    L42
  cmp    $0x3e900,%r13d
  jne    L73
L65:
  mov    $0xd,%ebx
  mov    $0xe,%ecx
  mov    $0x8,%ebp
L195:
  mov    %r14,%rsi
  mov    %r12,%rdi
  mov    %r13d,%edx
  call   <AddRoundKey@plt>
  mov    %ebp,%esi
  mov    %r12,%rdi
  call   <InversShiftRow_ByteSub@plt>
  nopw   0x0(%rax,%rax,1)
L59:
  mov    %ebx,%ecx
  mov    %r14,%rsi
  mov    %r12,%rdi
  mov    %ebp,%edx
  call   <AddRoundKey_InversMixColumn@plt>
  mov    %ebp,%esi
  mov    %r12,%rdi
  call   <InversShiftRow_ByteSub@plt>
  sub    $0x1,%ebx
  jne    L59
L51:
  mov    %r13d,%edx
  mov    %r14,%rsi
  mov    %r12,%rdi
  xor    %ecx,%ecx
  call   <AddRoundKey@plt>
  add    $0x8,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopw   0x0(%rax,%rax,1)
L127:
  cmp    $0x1f4c0,%r13d
  jne    L73
L171:
  mov    $0xb,%ebx
  mov    $0xc,%ecx
  mov    $0x6,%ebp
  jmp    L195
  nopl   0x0(%rax)
L42:
  cmp    $0x2ef00,%r13d
  je     L65
  cmp    $0x3e880,%r13d
  jne    L73
  mov    $0xd,%ebx
  mov    $0xe,%ecx
  mov    $0x4,%ebp
  jmp    L195
  cs nopw 0x0(%rax,%rax,1)
L134:
  cmp    $0x1f500,%r13d
  je     L65
  jle    L170
  cmp    $0x2ee80,%r13d
  jne    L73
  mov    $0xb,%ebx
  mov    $0xc,%ecx
  mov    $0x4,%ebp
  jmp    L195
  nopl   0x0(%rax)
L170:
  cmp    $0x1f480,%r13d
  jne    L127
  mov    $0xa,%ecx
  mov    $0x1f480,%edx
  mov    %r14,%rsi
  mov    %r12,%rdi
  call   <AddRoundKey@plt>
  mov    $0x4,%esi
  mov    %r12,%rdi
  mov    $0x4,%ebp
  call   <InversShiftRow_ByteSub@plt>
  mov    $0x9,%ebx
  jmp    L59
  xchg   %ax,%ax
L48:
  mov    $0xd,%ebx
  mov    $0xe,%ecx
  mov    $0x6,%ebp
  jmp    L195
  nopl   0x0(%rax)
L73:
  mov    %r14,%rsi
  mov    %r12,%rdi
  mov    %r15d,%ecx
  mov    %r13d,%edx
  call   <AddRoundKey@plt>
  lea    -0x1(%r15),%ebx
  mov    %ebp,%esi
  mov    %r12,%rdi
  call   <InversShiftRow_ByteSub@plt>
  test   %ebx,%ebx
  jle    L51
  jmp    L59
```

assistant: ```c
int decrypt(int statemt[32], int key[32], int word[4][120], int type, int nb, int round) {
  int i;
  KeySchedule(type, key, word);
  switch (type) {
  case 128128:
    round = 10;
    nb = 4;
    break;
  case 128192:
  case 192192:
    round = 12;
    nb = 6;
    break;
  case 192128:
    round = 12;
    nb = 4;
    break;
  case 128256:
  case 192256:
    round = 14;
    nb = 8;
    break;
  case 256128:
    round = 14;
    nb = 4;
    break;
  case 256192:
    round = 14;
    nb = 6;
    break;
  case 256256:
    round = 14;
    nb = 8;
    break;
  }
  AddRoundKey(statemt, word, type, round);
  InversShiftRow_ByteSub(statemt, nb);
#pragma unroll
  for (i = round - 1; i >= 1; --i) {
    AddRoundKey_InversMixColumn(statemt, word, nb, i);
    InversShiftRow_ByteSub(statemt, nb);
  }
  AddRoundKey(statemt, word, type, 0);
  return 0;
}
```