user: Demonstrate the C code that generates the assembly output below:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xd0,%rsp
  mov    %edi,-0xc4(%rbp)
  mov    %rsi,-0xd0(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movss  D112(%rip),%xmm0
  movss  %xmm0,-0xb4(%rbp)
  cmpl   $0x5,-0xc4(%rbp)
  jne    L8
  mov    -0xd0(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  lea    D25(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fopen@plt>
  mov    %rax,-0x98(%rbp)
  mov    -0xd0(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rdx
  lea    -0x70(%rbp),%rax
  lea    D69(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  lea    -0x70(%rbp),%rax
  lea    D27(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fopen@plt>
  mov    %rax,-0x90(%rbp)
  mov    -0xd0(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rax
  lea    -0xb4(%rbp),%rdx
  lea    D81(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  mov    -0xd0(%rbp),%rax
  add    $0x18,%rax
  mov    (%rax),%rax
  lea    -0xb0(%rbp),%rdx
  lea    D81(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  mov    -0xd0(%rbp),%rax
  add    $0x20,%rax
  mov    (%rax),%rax
  lea    -0xac(%rbp),%rdx
  lea    D81(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  jmp    L32
L8:
  lea    D1(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0xffffffff,%eax
  jmp    L21
L27:
  lea    -0x70(%rbp),%rax
  mov    %rax,-0x88(%rbp)
  movl   $0x0,-0xa8(%rbp)
  lea    -0xa8(%rbp),%rcx
  lea    -0x7a(%rbp),%rdx
  mov    -0x88(%rbp),%rax
  lea    D55(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  mov    -0xa8(%rbp),%eax
  cltq
  add    %rax,-0x88(%rbp)
  lea    -0x7a(%rbp),%rax
  lea    D49(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L50
  lea    -0x9c(%rbp),%rsi
  lea    -0xa0(%rbp),%rcx
  lea    -0xa4(%rbp),%rdx
  mov    -0x88(%rbp),%rax
  mov    %rsi,%r8
  lea    D15(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  movss  -0xa4(%rbp),%xmm1
  movss  -0xb4(%rbp),%xmm0
  mulss  %xmm0,%xmm1
  movss  -0xb0(%rbp),%xmm0
  addss  %xmm1,%xmm0
  movss  %xmm0,-0xa4(%rbp)
  movss  -0xa0(%rbp),%xmm1
  movss  -0xb4(%rbp),%xmm0
  mulss  %xmm0,%xmm1
  movss  -0xac(%rbp),%xmm0
  addss  %xmm1,%xmm0
  movss  %xmm0,-0xa0(%rbp)
  movss  -0x9c(%rbp),%xmm1
  movss  -0xb4(%rbp),%xmm0
  mulss  %xmm1,%xmm0
  movss  %xmm0,-0x9c(%rbp)
  movss  -0x9c(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  movss  -0xa0(%rbp),%xmm0
  cvtss2sd %xmm0,%xmm0
  movss  -0xa4(%rbp),%xmm2
  pxor   %xmm3,%xmm3
  cvtss2sd %xmm2,%xmm3
  movq   %xmm3,%rdx
  mov    -0x90(%rbp),%rax
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rdx,%xmm0
  lea    D78(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x3,%eax
  call   <fprintf@plt>
  jmp    L32
L50:
  mov    -0x90(%rbp),%rdx
  lea    -0x70(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fputs@plt>
L32:
  mov    -0x98(%rbp),%rdx
  lea    -0x70(%rbp),%rax
  mov    $0x63,%esi
  mov    %rax,%rdi
  call   <fgets@plt>
  test   %rax,%rax
  jne    L27
  mov    $0x0,%eax
L21:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L2
  call   <__stack_chk_fail@plt>
L2:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: label: D112
type: f32
name: extract_symbolic_data
arguments: label: D25
type: string
name: extract_symbolic_data
arguments: label: D69
type: string
name: extract_symbolic_data
arguments: label: D27
type: string
name: extract_symbolic_data
arguments: label: D81
type: string
name: extract_symbolic_data
arguments: label: D1
type: string
name: extract_symbolic_data
arguments: label: D55
type: string
name: extract_symbolic_data
arguments: label: D49
type: string
name: extract_symbolic_data
arguments: label: D15
type: string
name: extract_symbolic_data
arguments: label: D78
type: string

tool: D112: 1

tool: D25: r

tool: D69: %s-re.obj

tool: D27: w

tool: D81: %f

tool: D1: usage: change_obj.exe filename times xmove ymove


tool: D55: %s%n

tool: D49: v

tool: D15: %f %f %f

tool: D78: v %f %f %f


assistant: ```c
int main(int argc, char **argv) {
  FILE *fp, *wp;
  char buf_orig[100];
  float times = 1;
  float xmove, ymove;
  if (argc == 5) {
    char output_file[100];
    fp = fopen(argv[1], "r");
    sprintf(output_file, "%s-re.obj", argv[1]);
    wp = fopen(output_file, "w");
    sscanf(argv[2], "%f", &times);
    sscanf(argv[3], "%f", &xmove);
    sscanf(argv[4], "%f", &ymove);
  } else {
    printf("usage: change_obj.exe filename times xmove ymove\n");
    return -1;
  }
  while (fgets(buf_orig, 99, fp)) {
    char *buf = buf_orig;
    int read_size = 0;
    char op[10];
    sscanf(buf, "%s%n", op, &read_size);
    buf += read_size;
    if (strcmp(op, "v") == 0) {
      float x, y, z;
      sscanf(buf, "%f %f %f", &x, &y, &z);
      x = x * times + xmove;
      y = y * times + ymove;
      z *= times;
      fprintf(wp, "v %f %f %f\n", x, y, z);
    } else {
      fprintf(wp, "%s", buf_orig);
    }
  }
  return 0;
}
```