user: Please show me the C implementation that matches the assembly code listed below:

```asm
<main>:
  endbr64
  push   %r15
  lea    D146(%rip),%r15
  push   %r14
  lea    D29(%rip),%r14
  push   %r13
  lea    D114(%rip),%r13
  push   %r12
  lea    D56(%rip),%r12
  push   %rbp
  lea    D45(%rip),%rbp
  push   %rbx
  sub    $0x98,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x88(%rsp)
  xor    %eax,%eax
  mov    %rsp,%rbx
  xchg   %ax,%ax
L27:
  mov    %rbx,%rsi
  mov    %r12,%rdi
  call   <scanf@plt>
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L108
  mov    %r13,%rdi
  call   <printf@plt>
  jmp    L27
  nopl   (%rax)
L108:
  mov    %r14,%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L73
  mov    %r15,%rdi
  call   <printf@plt>
  jmp    L27
  nopw   0x0(%rax,%rax,1)
L73:
  lea    D121(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L52
  lea    D106(%rip),%rdi
  call   <printf@plt>
  jmp    L27
  nopw   0x0(%rax,%rax,1)
L52:
  lea    D51(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L40
  lea    D69(%rip),%rdi
  call   <printf@plt>
  jmp    L27
  nopl   (%rax)
L40:
  lea    D61(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L67
  lea    D63(%rip),%rdi
  call   <printf@plt>
  jmp    L27
  nopl   (%rax)
L67:
  lea    D49(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L46
  lea    D120(%rip),%rdi
  call   <printf@plt>
  jmp    L27
  nopl   (%rax)
L46:
  lea    D119(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L149
  xor    %edi,%edi
  call   <exit@plt>
  jmp    L27
L149:
  lea    D112(%rip),%rdi
  call   <printf@plt>
  jmp    L27
```

tool_calls: name: extract_symbolic_data
arguments: tag: D146
type: string
name: extract_symbolic_data
arguments: tag: D29
type: string
name: extract_symbolic_data
arguments: tag: D114
type: string
name: extract_symbolic_data
arguments: tag: D56
type: string
name: extract_symbolic_data
arguments: tag: D45
type: string
name: extract_symbolic_data
arguments: tag: D121
type: string
name: extract_symbolic_data
arguments: tag: D106
type: string
name: extract_symbolic_data
arguments: tag: D51
type: string
name: extract_symbolic_data
arguments: tag: D69
type: string
name: extract_symbolic_data
arguments: tag: D61
type: string
name: extract_symbolic_data
arguments: tag: D63
type: string
name: extract_symbolic_data
arguments: tag: D49
type: string
name: extract_symbolic_data
arguments: tag: D120
type: string
name: extract_symbolic_data
arguments: tag: D119
type: string
name: extract_symbolic_data
arguments: tag: D112
type: string

tool: D146: This is others cmd!


tool: D29: others

tool: D114: This is help cmd!


tool: D56: %s

tool: D45: help

tool: D121: hello

tool: D106: This is hello cmd!


tool: D51: greet

tool: D69: This is greet cmd!


tool: D61: square

tool: D63: This is square cmd!


tool: D49: div

tool: D120: This is div cmd!


tool: D119: quit

tool: D112: wrong cmd!


assistant: ```c
int main() {
  char cmd[128];
  while (1) {
    scanf("%s", cmd);
    if (strcmp(cmd, "help") == 0) {
      printf("This is help cmd!\n");
    } else if (strcmp(cmd, "others") == 0) {
      printf("This is others cmd!\n");
    } else if (strcmp(cmd, "hello") == 0) {
      printf("This is hello cmd!\n");
    } else if (strcmp(cmd, "greet") == 0) {
      printf("This is greet cmd!\n");
    } else if (strcmp(cmd, "square") == 0) {
      printf("This is square cmd!\n");
    } else if (strcmp(cmd, "div") == 0) {
      printf("This is div cmd!\n");
    } else if (strcmp(cmd, "quit") == 0) {
      exit(0);
    } else {
      printf("wrong cmd!\n");
    }
  }
}
```