user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<functionF>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x170,%rsp
  mov    %edi,-0x164(%rbp)
  mov    %esi,-0x168(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0xe,-0x110(%rbp)
  movl   $0x4,-0x10c(%rbp)
  movl   $0xd,-0x108(%rbp)
  movl   $0x1,-0x104(%rbp)
  movl   $0x2,-0x100(%rbp)
  movl   $0xf,-0xfc(%rbp)
  movl   $0xb,-0xf8(%rbp)
  movl   $0x8,-0xf4(%rbp)
  movl   $0x3,-0xf0(%rbp)
  movl   $0xa,-0xec(%rbp)
  movl   $0x6,-0xe8(%rbp)
  movl   $0xc,-0xe4(%rbp)
  movl   $0x5,-0xe0(%rbp)
  movl   $0x9,-0xdc(%rbp)
  movl   $0x0,-0xd8(%rbp)
  movl   $0x7,-0xd4(%rbp)
  movl   $0x0,-0xd0(%rbp)
  movl   $0xf,-0xcc(%rbp)
  movl   $0x7,-0xc8(%rbp)
  movl   $0x4,-0xc4(%rbp)
  movl   $0xe,-0xc0(%rbp)
  movl   $0x2,-0xbc(%rbp)
  movl   $0xd,-0xb8(%rbp)
  movl   $0x1,-0xb4(%rbp)
  movl   $0xa,-0xb0(%rbp)
  movl   $0x6,-0xac(%rbp)
  movl   $0xc,-0xa8(%rbp)
  movl   $0xb,-0xa4(%rbp)
  movl   $0x9,-0xa0(%rbp)
  movl   $0x5,-0x9c(%rbp)
  movl   $0x3,-0x98(%rbp)
  movl   $0x8,-0x94(%rbp)
  movl   $0x4,-0x90(%rbp)
  movl   $0x1,-0x8c(%rbp)
  movl   $0xe,-0x88(%rbp)
  movl   $0x8,-0x84(%rbp)
  movl   $0xd,-0x80(%rbp)
  movl   $0x6,-0x7c(%rbp)
  movl   $0x2,-0x78(%rbp)
  movl   $0xb,-0x74(%rbp)
  movl   $0xf,-0x70(%rbp)
  movl   $0xc,-0x6c(%rbp)
  movl   $0x9,-0x68(%rbp)
  movl   $0x7,-0x64(%rbp)
  movl   $0x3,-0x60(%rbp)
  movl   $0xa,-0x5c(%rbp)
  movl   $0x5,-0x58(%rbp)
  movl   $0x0,-0x54(%rbp)
  movl   $0xf,-0x50(%rbp)
  movl   $0xc,-0x4c(%rbp)
  movl   $0x8,-0x48(%rbp)
  movl   $0x2,-0x44(%rbp)
  movl   $0x4,-0x40(%rbp)
  movl   $0x9,-0x3c(%rbp)
  movl   $0x1,-0x38(%rbp)
  movl   $0x7,-0x34(%rbp)
  movl   $0x5,-0x30(%rbp)
  movl   $0xb,-0x2c(%rbp)
  movl   $0x3,-0x28(%rbp)
  movl   $0xe,-0x24(%rbp)
  movl   $0xa,-0x20(%rbp)
  movl   $0x0,-0x1c(%rbp)
  movl   $0x6,-0x18(%rbp)
  movl   $0xd,-0x14(%rbp)
  mov    -0x164(%rbp),%eax
  and    $0x1,%eax
  mov    %eax,-0x15c(%rbp)
  mov    -0x164(%rbp),%eax
  sar    %eax
  and    $0x1,%eax
  mov    %eax,-0x158(%rbp)
  mov    -0x164(%rbp),%eax
  sar    $0x2,%eax
  and    $0x1,%eax
  mov    %eax,-0x154(%rbp)
  mov    -0x164(%rbp),%eax
  sar    $0x3,%eax
  and    $0x1,%eax
  mov    %eax,-0x150(%rbp)
  mov    -0x150(%rbp),%eax
  shl    $0x5,%eax
  mov    %eax,%edx
  mov    -0x15c(%rbp),%eax
  shl    $0x4,%eax
  or     %eax,%edx
  mov    -0x158(%rbp),%eax
  shl    $0x3,%eax
  or     %eax,%edx
  mov    -0x154(%rbp),%eax
  shl    $0x2,%eax
  or     %eax,%edx
  mov    -0x150(%rbp),%eax
  add    %eax,%eax
  or     %edx,%eax
  or     -0x158(%rbp),%eax
  mov    %eax,-0x14c(%rbp)
  mov    -0x168(%rbp),%eax
  xor    %eax,-0x14c(%rbp)
  mov    -0x14c(%rbp),%eax
  and    $0x1,%eax
  mov    %eax,-0x148(%rbp)
  mov    -0x14c(%rbp),%eax
  shr    %eax
  and    $0x1,%eax
  mov    %eax,-0x144(%rbp)
  mov    -0x14c(%rbp),%eax
  shr    $0x2,%eax
  and    $0x1,%eax
  mov    %eax,-0x140(%rbp)
  mov    -0x14c(%rbp),%eax
  shr    $0x3,%eax
  and    $0x1,%eax
  mov    %eax,-0x13c(%rbp)
  mov    -0x14c(%rbp),%eax
  shr    $0x4,%eax
  and    $0x1,%eax
  mov    %eax,-0x138(%rbp)
  mov    -0x14c(%rbp),%eax
  shr    $0x5,%eax
  and    $0x1,%eax
  mov    %eax,-0x134(%rbp)
  mov    -0x138(%rbp),%eax
  lea    0x0(,%rax,8),%edx
  mov    -0x13c(%rbp),%eax
  shl    $0x2,%eax
  or     %eax,%edx
  mov    -0x140(%rbp),%eax
  add    %eax,%eax
  or     %edx,%eax
  or     -0x144(%rbp),%eax
  mov    %eax,-0x130(%rbp)
  mov    -0x148(%rbp),%eax
  add    %eax,%eax
  or     -0x134(%rbp),%eax
  mov    %eax,-0x12c(%rbp)
  mov    -0x130(%rbp),%edx
  mov    -0x12c(%rbp),%eax
  shl    $0x4,%rax
  add    %rdx,%rax
  mov    -0x110(%rbp,%rax,4),%eax
  mov    %eax,-0x128(%rbp)
  mov    -0x128(%rbp),%eax
  and    $0x1,%eax
  mov    %eax,-0x124(%rbp)
  mov    -0x128(%rbp),%eax
  shr    %eax
  and    $0x1,%eax
  mov    %eax,-0x120(%rbp)
  mov    -0x128(%rbp),%eax
  shr    $0x2,%eax
  and    $0x1,%eax
  mov    %eax,-0x11c(%rbp)
  mov    -0x128(%rbp),%eax
  shr    $0x3,%eax
  and    $0x1,%eax
  mov    %eax,-0x118(%rbp)
  mov    -0x11c(%rbp),%eax
  lea    0x0(,%rax,8),%edx
  mov    -0x120(%rbp),%eax
  shl    $0x2,%eax
  or     %eax,%edx
  mov    -0x124(%rbp),%eax
  add    %eax,%eax
  or     %edx,%eax
  or     -0x118(%rbp),%eax
  mov    %eax,-0x114(%rbp)
  mov    -0x114(%rbp),%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L9
  call   <__stack_chk_fail@plt>
L9:
  leave
  ret
```

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;
}
```