user: Converte this assembly snippet into its equivalent C code:

```asm
<functionF>:
  endbr64
  sub    $0x118,%rsp
  movabs $0xf00000002,%rcx
  movabs $0xa00000003,%rdx
  mov    %fs:0x28,%rax
  mov    %rax,0x108(%rsp)
  movabs $0x40000000e,%rax
  mov    %rcx,0x10(%rsp)
  movabs $0x80000000b,%rcx
  mov    %rcx,0x18(%rsp)
  movabs $0xc00000006,%rcx
  mov    %rcx,0x28(%rsp)
  movabs $0x900000005,%rcx
  mov    %rcx,0x30(%rsp)
  movabs $0x700000000,%rcx
  mov    %rcx,0x38(%rsp)
  movabs $0xf00000000,%rcx
  mov    %rcx,0x40(%rsp)
  movabs $0x400000007,%rcx
  mov    %rax,(%rsp)
  movabs $0x10000000d,%rax
  mov    %rax,0x8(%rsp)
  mov    %rax,0x58(%rsp)
  movabs $0x60000000a,%rax
  mov    %rax,0x60(%rsp)
  movabs $0xb0000000c,%rax
  mov    %rax,0x68(%rsp)
  movabs $0x500000009,%rax
  mov    %rax,0x70(%rsp)
  movabs $0x800000003,%rax
  mov    %rax,0x78(%rsp)
  movabs $0x100000004,%rax
  mov    %rax,0x80(%rsp)
  movabs $0x80000000e,%rax
  mov    %rax,0x88(%rsp)
  movabs $0x60000000d,%rax
  mov    %rax,0x90(%rsp)
  movabs $0xb00000002,%rax
  mov    %rax,0x98(%rsp)
  movabs $0xc0000000f,%rax
  mov    %rax,0xa0(%rsp)
  mov    %rax,0xc0(%rsp)
  movabs $0x200000008,%rax
  mov    %rax,0xc8(%rsp)
  movabs $0x900000004,%rax
  mov    %rax,0xd0(%rsp)
  movabs $0x700000001,%rax
  mov    %rcx,0x48(%rsp)
  movabs $0x20000000e,%rcx
  mov    %rax,0xd8(%rsp)
  movabs $0xb00000005,%rax
  mov    %rcx,0x50(%rsp)
  movabs $0x700000009,%rcx
  mov    %rax,0xe0(%rsp)
  movabs $0xe00000003,%rax
  mov    %rdx,0x20(%rsp)
  mov    %rcx,0xa8(%rsp)
  mov    %edi,%ecx
  mov    %rdx,0xb0(%rsp)
  sar    %ecx
  mov    %edi,%edx
  movq   $0x5,0xb8(%rsp)
  and    $0x1,%ecx
  sar    $0x3,%edx
  mov    %rax,0xe8(%rsp)
  and    $0x1,%edx
  movabs $0xd00000006,%rax
  mov    %rax,0xf8(%rsp)
  mov    %edi,%eax
  and    $0x4,%edi
  movq   $0xa,0xf0(%rsp)
  shl    $0x4,%eax
  and    $0x10,%eax
  or     %ecx,%eax
  shl    $0x3,%ecx
  or     %edi,%eax
  mov    %edx,%edi
  add    %edx,%edx
  shl    $0x5,%edi
  or     %edi,%eax
  or     %ecx,%eax
  or     %edx,%eax
  xor    %esi,%eax
  mov    %eax,%ecx
  mov    %eax,%edx
  shr    %ecx
  shr    %edx
  and    $0x4,%edx
  and    $0x8,%ecx
  or     %edx,%ecx
  mov    %eax,%edx
  shr    %edx
  and    $0x1,%edx
  or     %edx,%ecx
  mov    %eax,%edx
  shr    %edx
  and    $0x2,%edx
  or     %edx,%ecx
  lea    (%rax,%rax,1),%edx
  shr    $0x5,%eax
  and    $0x2,%edx
  and    $0x1,%eax
  or     %edx,%eax
  shl    $0x4,%rax
  add    %rcx,%rax
  mov    (%rsp,%rax,4),%edx
  mov    %edx,%ecx
  lea    (%rdx,%rdx,1),%eax
  shr    $0x3,%ecx
  and    $0x2,%eax
  and    $0x1,%ecx
  or     %ecx,%eax
  lea    (%rdx,%rdx,1),%ecx
  add    %edx,%edx
  and    $0x8,%ecx
  and    $0x4,%edx
  or     %ecx,%eax
  or     %edx,%eax
  mov    0x108(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L1
  add    $0x118,%rsp
  ret
L1:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
unsigned int functionF(int rightSidePlaintext, int key) {
  int a[4][16] = {{14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7}, {0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8}, {4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0}, {15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13}};
  int part0 = rightSidePlaintext & 0x1;
  int part1 = (rightSidePlaintext & 0x2) >> 1;
  int part2 = (rightSidePlaintext & 0x4) >> 2;
  int part3 = (rightSidePlaintext & 0x8) >> 3;
  unsigned int combined = (part3 << 5) | (part0 << 4) | (part1 << 3) | (part2 << 2) | (part3 << 1) | part1;
  combined = combined ^ key;
  int combinedPart0 = combined & 0x1;
  int combinedPart1 = (combined & 0x2) >> 1;
  int combinedPart2 = (combined & 0x4) >> 2;
  int combinedPart3 = (combined & 0x8) >> 3;
  int combinedPart4 = (combined & 0x16) >> 4;
  int combinedPart5 = (combined & 0x32) >> 5;
  unsigned int column = (combinedPart4 << 3) | (combinedPart3 << 2) | (combinedPart2 << 1) | combinedPart1;
  unsigned int row = (combinedPart0 << 1) | combinedPart5;
  unsigned int output = a[row][column];
  int outputPart0 = output & 0x1;
  int outputPart1 = (output & 0x2) >> 1;
  int outputPart2 = (output & 0x4) >> 2;
  int outputPart3 = (output & 0x8) >> 3;
  int final = (outputPart2 << 3) | (outputPart1 << 2) | (outputPart0 << 1) | outputPart3;
  return final;
}
```