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

```asm
<main>:
  endbr64
  push   %r13
  lea    D3(%rip),%rdi
  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
  lea    D45(%rip),%rdi
  call   <scanf@plt>
  mov    0x4(%rsp),%edx
  test   %edx,%edx
  js     L114
  movslq %edx,%rbp
  mov    %edx,%r12d
  mov    %edx,%r10d
  mov    %edx,%r11d
  imul   $0x51eb851f,%rbp,%rcx
  sar    $0x1f,%r12d
  mov    %edx,%r8d
  mov    %edx,%r9d
  imul   $0x66666667,%rbp,%rsi
  sar    $0x25,%rcx
  sub    %r12d,%ecx
  sar    $0x22,%rsi
  imul   $0x64,%ecx,%ecx
  sub    %r12d,%esi
  lea    (%rsi,%rsi,4),%eax
  mov    %edx,%esi
  add    %eax,%eax
  sub    %ecx,%r10d
  mov    $0xcccccccd,%ecx
  sub    %eax,%esi
  imul   %rcx,%r10
  imul   $0x10624dd3,%rbp,%rcx
  shr    $0x23,%r10
  sar    $0x26,%rcx
  sub    %r12d,%ecx
  imul   $0x3e8,%ecx,%ecx
  sub    %ecx,%r11d
  imul   $0x68db8bad,%rbp,%rcx
  imul   $0x51eb851f,%r11,%r11
  sar    $0x2c,%rcx
  sub    %r12d,%ecx
  shr    $0x25,%r11
  imul   $0x2710,%ecx,%ecx
  sub    %ecx,%r8d
  imul   $0x14f8b589,%rbp,%rcx
  imul   $0x10624dd3,%r8,%r8
  sar    $0x2d,%rcx
  sub    %r12d,%ecx
  shr    $0x26,%r8
  imul   $0x186a0,%ecx,%ecx
  sub    %ecx,%r9d
  mov    $0xd1b71759,%ecx
  imul   %rcx,%r9
  mov    %edx,%ecx
  imul   $0x431bde83,%rbp,%rdi
  imul   $0x6b5fca6b,%rbp,%rbx
  imul   $0x55e63b89,%rbp,%r13
  shr    $0x2d,%r9
  imul   $0x44b82fa1,%rbp,%rbp
  sar    $0x32,%rdi
  sub    %r12d,%edi
  sar    $0x36,%rbx
  imul   $0xf4240,%edi,%edi
  sub    %r12d,%ebx
  sar    $0x39,%r13
  sar    $0x3c,%rbp
  imul   $0x989680,%ebx,%ebx
  sub    %r12d,%r13d
  sub    %r12d,%ebp
  imul   $0x5f5e100,%r13d,%r13d
  imul   $0x3b9aca00,%ebp,%ebp
  sub    %edi,%ecx
  mov    %edx,%edi
  sub    %ebx,%edi
  mov    %edx,%ebx
  shr    $0x5,%ecx
  sub    %r13d,%ebx
  imul   $0xa7c5ac5,%rcx,%rcx
  sub    %ebp,%edx
  imul   $0x431bde83,%rdi,%rdi
  imul   $0x6b5fca6b,%rbx,%rbx
  imul   $0x55e63b89,%rdx,%rdx
  shr    $0x27,%rcx
  imul   $0xfffffff6,%r10d,%ebp
  shr    $0x32,%rdi
  shr    $0x36,%rbx
  shr    $0x39,%rdx
  add    %ebp,%eax
  imul   $0xffffff9c,%r11d,%ebp
  add    %ebp,%eax
  imul   $0xfffffc18,%r8d,%ebp
  add    %ebp,%eax
  imul   $0xffffd8f0,%r9d,%ebp
  add    %ebp,%eax
  imul   $0xfffe7960,%ecx,%ebp
  add    %ebp,%eax
  imul   $0xfff0bdc0,%edi,%ebp
  add    %ebp,%eax
  imul   $0xff676980,%ebx,%ebp
  add    %ebp,%eax
  imul   $0xfa0a1f00,%edx,%ebp
  add    %ebp,%eax
  movslq %eax,%rbp
  sar    $0x1f,%eax
  imul   $0x44b82fa1,%rbp,%rbp
  sar    $0x3c,%rbp
  sub    %eax,%ebp
  jne    L61
  test   %edx,%edx
  je     L61
  push   %rdx
  xor    %eax,%eax
  mov    %r10d,%edx
  push   %rbx
  push   %rdi
  lea    D54(%rip),%rdi
  push   %rcx
  mov    %r11d,%ecx
  call   <printf@plt>
  add    $0x20,%rsp
L101:
  lea    D115(%rip),%rdi
  call   <puts@plt>
  mov    0x8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L174
  add    $0x18,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
L61:
  or     %edx,%ebp
  jne    L101
  test   %ebx,%ebx
  jne    L128
  test   %edi,%edi
  jne    L212
  test   %ecx,%ecx
  jne    L32
  test   %r9d,%r9d
  jne    L129
  test   %r8d,%r8d
  jne    L5
  test   %r11d,%r11d
  jne    L64
  test   %r10d,%r10d
  jne    L218
  test   %esi,%esi
  jne    L178
  lea    D122(%rip),%rdi
  call   <puts@plt>
  jmp    L101
L114:
  lea    D33(%rip),%rdi
  call   <puts@plt>
  jmp    L101
L128:
  push   %rbp
  mov    %r10d,%edx
  xor    %eax,%eax
  push   %rbx
  push   %rdi
  lea    D16(%rip),%rdi
  push   %rcx
  mov    %r11d,%ecx
  call   <printf@plt>
  add    $0x20,%rsp
  jmp    L101
L212:
  push   %rdi
  mov    %r10d,%edx
  lea    D102(%rip),%rdi
  xor    %eax,%eax
  push   %rcx
  mov    %r11d,%ecx
  call   <printf@plt>
  pop    %rsi
  pop    %rdi
  jmp    L101
L32:
  push   %rax
  mov    %r10d,%edx
  lea    D21(%rip),%rdi
  xor    %eax,%eax
  push   %rcx
  mov    %r11d,%ecx
  call   <printf@plt>
  pop    %rdx
  pop    %rcx
  jmp    L101
L178:
  lea    D78(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L101
L129:
  mov    %r11d,%ecx
  mov    %r10d,%edx
  lea    D40(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L101
L5:
  mov    %r11d,%ecx
  mov    %r10d,%edx
  lea    D12(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L101
L64:
  mov    %r11d,%ecx
  mov    %r10d,%edx
  lea    D69(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L101
L218:
  mov    %r10d,%edx
  lea    D114(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L101
L174:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: read_data
arguments: tag: D3
type: string
name: read_data
arguments: tag: D45
type: string
name: read_data
arguments: tag: D54
type: string
name: read_data
arguments: tag: D115
type: string
name: read_data
arguments: tag: D122
type: string
name: read_data
arguments: tag: D33
type: string
name: read_data
arguments: tag: D16
type: string
name: read_data
arguments: tag: D102
type: string
name: read_data
arguments: tag: D21
type: string
name: read_data
arguments: tag: D78
type: string
name: read_data
arguments: tag: D40
type: string
name: read_data
arguments: tag: D12
type: string
name: read_data
arguments: tag: D69
type: string
name: read_data
arguments: tag: D114
type: string

tool: D3: Enter an integer > 

tool: D45: %d

tool: D54: 
%d
%d
%d
%d
%d
%d
%d
%d
%d


tool: D115: That's all, have a nice day!

tool: D122: 
0

tool: D33: 
-2147483648

tool: D16: 
%d
%d
%d
%d
%d
%d
%d
%d


tool: D102: 
%d
%d
%d
%d
%d
%d
%d


tool: D21: 
%d
%d
%d
%d
%d
%d


tool: D78: 
%d


tool: D40: 
%d
%d
%d
%d
%d


tool: D12: 
%d
%d
%d
%d


tool: D69: 
%d
%d
%d


tool: D114: 
%d
%d


assistant: ```c
int main(void) {
  int d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, num, absnum;
  printf("Enter an integer > ");
  scanf("%d", &num);
  absnum = (-num);
  if (num < 0 && num < -9999999999) {
    d1 = (absnum % 10);
    d2 = (absnum % 100) / 10;
    d3 = (absnum % 1000) / 100;
    d4 = (absnum % 10000) / 1000;
    d5 = (absnum % 100000) / 10000;
    d6 = (absnum % 1000000) / 100000;
    d7 = (absnum % 10000000) / 1000000;
    d8 = (absnum % 100000000) / 10000000;
    d9 = (absnum % 1000000000) / 100000000;
    d10 = (absnum - d1 - (d2 * 10) - (d3 * 100) - (d4 * 1000) - (d5 * 10000) - (d6 * 100000) - (d7 * 1000000) - (d8 * 10000000) - (d9 * 100000000)) / 1000000000;
    if (d10 == 0 && d9 != 0)
      printf("\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n-%d\n", d1, d2, d3, d4, d5, d6, d7, d8, d9);
    else if (d10 == 0 && d9 == 0 && d8 != 0)
      printf("\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n-%d\n", d1, d2, d3, d4, d5, d6, d7, d8);
    else if (d10 == 0 && d9 == 0 && d8 == 0 && d7 != 0)
      printf("\n%d\n%d\n%d\n%d\n%d\n%d\n-%d\n", d1, d2, d3, d4, d5, d6, d7);
    else if (d10 == 0 && d9 == 0 && d8 == 0 && d7 == 0 && d6 != 0)
      printf("\n%d\n%d\n%d\n%d\n%d\n-%d\n", d1, d2, d3, d4, d5, d6);
    else if (d10 == 0 && d9 == 0 && d8 == 0 && d7 == 0 && d6 == 0 && d5 != 0)
      printf("\n%d\n%d\n%d\n%d\n-%d\n", d1, d2, d3, d4, d5);
    else if (d10 == 0 && d9 == 0 && d8 == 0 && d7 == 0 && d6 == 0 && d5 == 0 && d4 != 0)
      printf("\n%d\n%d\n%d\n-%d\n", d1, d2, d3, d4);
    else if (d10 == 0 && d9 == 0 && d8 == 0 && d7 == 0 && d6 == 0 && d5 == 0 && d4 == 0 && d3 != 0)
      printf("\n%d\n%d\n-%d\n", d1, d2, d3);
    else if (d10 == 0 && d9 == 0 && d8 == 0 && d7 == 0 && d6 == 0 && d5 == 0 && d4 == 0 && d3 == 0 && d2 != 0)
      printf("\n%d\n-%d\n", d1, d2);
    else if (d10 == 0 && d9 == 0 && d8 == 0 && d7 == 0 && d6 == 0 && d5 == 0 && d4 == 0 && d3 == 0 && d2 == 0 && d1 != 0)
      printf("-%d\n", d1);
    else if (d10 != 0 && d9 != 0 && d8 != 0 && d7 != 0 && d6 != 0 && d5 != 0 && d4 != 0 && d3 != 0 && d2 != 0 && d1 != 0)
      printf("\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n", d1, d2, d3, d4, d5, d6, d7, d8, d9, d10);
  }
  if (num >= 0) {
    d1 = (num % 10);
    d2 = (num % 100) / 10;
    d3 = (num % 1000) / 100;
    d4 = (num % 10000) / 1000;
    d5 = (num % 100000) / 10000;
    d6 = (num % 1000000) / 100000;
    d7 = (num % 10000000) / 1000000;
    d8 = (num % 100000000) / 10000000;
    d9 = (num % 1000000000) / 100000000;
    d10 = ((num - d1 - (d2 * 10) - (d3 * 100) - (d4 * 1000) - (d5 * 10000) - (d6 * 100000) - (d7 * 1000000) - (d8 * 10000000) - (d9 * 100000000)) / 1000000000);
    if (d10 == 0 && d9 != 0)
      printf("\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n", d1, d2, d3, d4, d5, d6, d7, d8, d9);
    else if (d10 == 0 && d9 == 0 && d8 != 0)
      printf("\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n", d1, d2, d3, d4, d5, d6, d7, d8);
    else if (d10 == 0 && d9 == 0 && d8 == 0 && d7 != 0)
      printf("\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n", d1, d2, d3, d4, d5, d6, d7);
    else if (d10 == 0 && d9 == 0 && d8 == 0 && d7 == 0 && d6 != 0)
      printf("\n%d\n%d\n%d\n%d\n%d\n%d\n", d1, d2, d3, d4, d5, d6);
    else if (d10 == 0 && d9 == 0 && d8 == 0 && d7 == 0 && d6 == 0 && d5 != 0)
      printf("\n%d\n%d\n%d\n%d\n%d\n", d1, d2, d3, d4, d5);
    else if (d10 == 0 && d9 == 0 && d8 == 0 && d7 == 0 && d6 == 0 && d5 == 0 && d4 != 0)
      printf("\n%d\n%d\n%d\n%d\n", d1, d2, d3, d4);
    else if (d10 == 0 && d9 == 0 && d8 == 0 && d7 == 0 && d6 == 0 && d5 == 0 && d4 == 0 && d3 != 0)
      printf("\n%d\n%d\n%d\n", d1, d2, d3);
    else if (d10 == 0 && d9 == 0 && d8 == 0 && d7 == 0 && d6 == 0 && d5 == 0 && d4 == 0 && d3 == 0 && d2 != 0)
      printf("\n%d\n%d\n", d1, d2);
    else if (d10 == 0 && d9 == 0 && d8 == 0 && d7 == 0 && d6 == 0 && d5 == 0 && d4 == 0 && d3 == 0 && d2 == 0 && d1 != 0)
      printf("\n%d\n", d1);
    else if (d10 == 0 && d9 == 0 && d8 == 0 && d7 == 0 && d6 == 0 && d5 == 0 && d4 == 0 && d3 == 0 && d2 == 0 && d1 == 0)
      printf("\n0\n");
  } else
    printf("\n-2147483648\n");
  printf("That's all, have a nice day!\n");
  return (0);
}
```