user: 请从给定的汇编指令推导出C源代码：

```asm
<main>:
  endbr64
  push   %r13
  lea    D34(%rip),%rdi
  lea    D11(%rip),%r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x8(%rsp)
  xor    %eax,%eax
  call   <printf@plt>
  lea    0x4(%rsp),%rsi
  mov    %r13,%rdi
  call   <scanf@plt>
  mov    0x4(%rsp),%esi
  test   %esi,%esi
  js     L323
  mov    $0x1f,%ebx
  nop
L424:
  mov    %ebx,%edx
  sub    $0x1,%ebx
  mov    %esi,%eax
  mov    %ebx,%ecx
  sar    %cl,%eax
  mov    %eax,%ebp
  and    $0x1,%ebp
  je     L424
  test   %ebx,%ebx
  jle    L210
  xor    %esi,%eax
  test   $0x1,%al
  jne    L469
  lea    -0x2(%rdx),%r12d
  cmp    $0x1,%r12d
  jle    L149
  mov    %esi,%ebp
  mov    %esi,%eax
  mov    %r12d,%ecx
  sar    %ebp
  sar    %cl,%eax
  xor    %eax,%ebp
  and    $0x1,%ebp
  jne    L149
  lea    -0x3(%rdx),%r12d
  cmp    $0x2,%r12d
  jle    L259
L121:
  mov    %esi,%eax
  mov    %esi,%edx
  mov    %r12d,%ecx
  sar    $0x2,%eax
  sar    %cl,%edx
  xor    %edx,%eax
  test   $0x1,%al
  jne    L259
  lea    -0x1(%r12),%ecx
  cmp    $0x3,%ecx
  jle    L196
  mov    %esi,%eax
  mov    %esi,%edx
  sar    %cl,%eax
  sar    $0x3,%edx
  xor    %edx,%eax
  test   $0x1,%al
  jne    L196
  lea    -0x2(%r12),%ecx
  cmp    $0x4,%ecx
  jle    L477
  mov    %esi,%eax
  mov    %esi,%edx
  sar    %cl,%eax
  sar    $0x4,%edx
  xor    %edx,%eax
  test   $0x1,%al
  jne    L477
  lea    -0x3(%r12),%ecx
  cmp    $0x5,%ecx
  jle    L338
  mov    %esi,%eax
  mov    %esi,%edx
  sar    %cl,%eax
  sar    $0x5,%edx
  xor    %edx,%eax
  test   $0x1,%al
  jne    L338
  lea    -0x4(%r12),%ecx
  cmp    $0x6,%ecx
  jle    L541
  mov    %esi,%eax
  mov    %esi,%edx
  sar    %cl,%eax
  sar    $0x6,%edx
  xor    %edx,%eax
  test   $0x1,%al
  jne    L541
  lea    -0x5(%r12),%ecx
  cmp    $0x7,%ecx
  jle    L488
  mov    %esi,%eax
  mov    %esi,%edx
  sar    %cl,%eax
  sar    $0x7,%edx
  xor    %edx,%eax
  test   $0x1,%al
  jne    L488
  lea    -0x6(%r12),%ecx
  cmp    $0x8,%ecx
  jle    L566
  mov    %esi,%eax
  mov    %esi,%edx
  sar    %cl,%eax
  sar    $0x8,%edx
  xor    %edx,%eax
  test   $0x1,%al
  jne    L566
  lea    -0x7(%r12),%ecx
  cmp    $0x9,%ecx
  jle    L82
  mov    %esi,%eax
  mov    %esi,%edx
  sar    %cl,%eax
  sar    $0x9,%edx
  xor    %edx,%eax
  test   $0x1,%al
  jne    L82
  lea    -0x8(%r12),%ecx
  cmp    $0xa,%ecx
  jle    L78
  mov    %esi,%eax
  mov    %esi,%edx
  sar    %cl,%eax
  sar    $0xa,%edx
  xor    %edx,%eax
  test   $0x1,%al
  jne    L78
  lea    -0x9(%r12),%ecx
  cmp    $0xb,%ecx
  jle    L208
  mov    %esi,%eax
  mov    %esi,%edx
  sar    %cl,%eax
  sar    $0xb,%edx
  xor    %edx,%eax
  test   $0x1,%al
  jne    L208
  lea    -0xa(%r12),%ecx
  cmp    $0xc,%ecx
  jle    L347
  mov    %esi,%eax
  mov    %esi,%edx
  sar    %cl,%eax
  sar    $0xc,%edx
  xor    %edx,%eax
  test   $0x1,%al
  jne    L347
  lea    -0xb(%r12),%ecx
  cmp    $0xd,%ecx
  jle    L287
  mov    %esi,%eax
  mov    %esi,%edx
  sar    %cl,%eax
  sar    $0xd,%edx
  xor    %edx,%eax
  test   $0x1,%al
  jne    L287
  lea    -0xc(%r12),%ecx
  cmp    $0xe,%ecx
  jle    L126
  mov    %esi,%eax
  mov    %esi,%edx
  sar    %cl,%eax
  sar    $0xe,%edx
  xor    %edx,%eax
  test   $0x1,%al
  jne    L126
  sub    $0xd,%r12d
  cmp    $0x10,%r12d
  jne    L67
  mov    %esi,%eax
  mov    %esi,%edx
  sar    $0x10,%eax
  sar    $0xf,%edx
  xor    %edx,%eax
  and    $0x1,%eax
  mov    %eax,%ebp
  neg    %ebp
  add    $0x10,%ebp
  test   %eax,%eax
  mov    $0xf,%eax
  cmove  %eax,%r12d
  nopw   0x0(%rax,%rax,1)
L149:
  lea    0x0(%rbp,%r12,1),%ebx
  jmp    L279
  nopw   0x0(%rax,%rax,1)
L523:
  mov    0x4(%rsp),%esi
L279:
  mov    %ebx,%ecx
  xor    %eax,%eax
  mov    %r13,%rdi
  sar    %cl,%esi
  and    $0x1,%esi
  call   <printf@plt>
  sub    $0x1,%ebx
  jae    L523
  cmp    %ebp,%r12d
  jle    L238
  lea    D37(%rip),%rdi
  call   <puts@plt>
L343:
  mov    0x8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L301
  add    $0x18,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
L210:
  je     L112
L238:
  lea    D16(%rip),%rdi
  call   <puts@plt>
  jmp    L343
L541:
  mov    %ecx,%r12d
  mov    $0x6,%ebp
  jmp    L149
L323:
  mov    %esi,%eax
  sar    $0x1f,%eax
  xor    %esi,%eax
  test   $0x1,%al
  jne    L575
  mov    %esi,%ebp
  mov    %esi,%eax
  sar    $0x1e,%ebp
  sar    %eax
  xor    %eax,%ebp
  and    $0x1,%ebp
  jne    L117
  mov    $0x1d,%r12d
  jmp    L121
L259:
  mov    $0x2,%ebp
  jmp    L149
L196:
  mov    %ecx,%r12d
  mov    $0x3,%ebp
  jmp    L149
L477:
  mov    %ecx,%r12d
  mov    $0x4,%ebp
  jmp    L149
L338:
  mov    %ecx,%r12d
  mov    $0x5,%ebp
  jmp    L149
L488:
  mov    %ecx,%r12d
  mov    $0x7,%ebp
  jmp    L149
L126:
  mov    %ecx,%r12d
  mov    $0xe,%ebp
  jmp    L149
L566:
  mov    %ecx,%r12d
  mov    $0x8,%ebp
  jmp    L149
L82:
  mov    %ecx,%r12d
  mov    $0x9,%ebp
  jmp    L149
L78:
  mov    %ecx,%r12d
  mov    $0xa,%ebp
  jmp    L149
L208:
  mov    %ecx,%r12d
  mov    $0xb,%ebp
  jmp    L149
L347:
  mov    %ecx,%r12d
  mov    $0xc,%ebp
  jmp    L149
L287:
  mov    %ecx,%r12d
  mov    $0xd,%ebp
  jmp    L149
L67:
  mov    $0xf,%ebp
  jmp    L149
L117:
  mov    $0x1e,%r12d
  jmp    L149
L469:
  mov    %ebx,%r12d
  xor    %ebp,%ebp
  jmp    L279
L575:
  xor    %ebp,%ebp
  mov    $0x1f,%r12d
  mov    $0x1f,%ebx
  jmp    L279
L112:
  and    $0x1,%esi
  mov    %r13,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L238
L301:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: data_label: D34
datatype: string
name: unpack_data
arguments: data_label: D11
datatype: string
name: unpack_data
arguments: data_label: D37
datatype: string
name: unpack_data
arguments: data_label: D16
datatype: string

tool: D34: Enter a Number : 

tool: D11: %d

tool: D37:  - Not Palindrome

tool: D16:  - Palindrome

assistant: ```c
int main(void) {
  int n, i, j = 0, temp;
  printf("Enter a Number : ");
  scanf("%d", &n);
  for (i = sizeof(int) * 8 - 1; !(n >> i & 1); i--)
    ;
  for (; j < i; i--, j++)
    if ((n >> i & 1) != (n >> j & 1))
      break;
  temp = i;
  for (i += j; i >= 0; printf("%d", n >> i & 1), i--)
    ;
  if (temp <= j)
    printf(" - Palindrome\n");
  else
    printf(" - Not Palindrome\n");
  return 0;
}
```