user: Translate the below assembly code into C programming language:

```asm
<print_mouse_stats>:
  endbr64
  push   %r15
  mov    %edx,%ecx
  mov    %rsi,%r15
  push   %r14
  mov    %edx,%r14d
  lea    D11(%rip),%rdx
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rdi,%rbx
  sub    $0x8,%rsp
  mov    (%rdi),%eax
  mov    0x4(%rdi),%edi
  lea    0x2(%rax),%esi
  xor    %eax,%eax
  call   <mvprintw@plt>
  mov    (%rbx),%eax
  lea    D4(%rip),%rdx
  lea    0x2(%rax),%esi
  mov    0x4(%rbx),%eax
  lea    0x2(%rax),%edi
  xor    %eax,%eax
  call   <mvprintw@plt>
  mov    (%rbx),%eax
  lea    D34(%rip),%rdx
  lea    0xf(%rax),%esi
  mov    0x4(%rbx),%eax
  lea    0x2(%rax),%edi
  xor    %eax,%eax
  call   <mvprintw@plt>
  mov    (%rbx),%eax
  lea    D49(%rip),%rdx
  lea    0x16(%rax),%esi
  mov    0x4(%rbx),%eax
  lea    0x2(%rax),%edi
  xor    %eax,%eax
  call   <mvprintw@plt>
  mov    (%rbx),%eax
  lea    D41(%rip),%rdx
  lea    0x1e(%rax),%esi
  mov    0x4(%rbx),%eax
  lea    0x2(%rax),%edi
  xor    %eax,%eax
  call   <mvprintw@plt>
  test   %r14d,%r14d
  jle    L18
  add    $0x10,%r15
  mov    $0x1,%r13d
  lea    D21(%rip),%r12
  nopl   0x0(%rax)
L4:
  mov    (%r15),%edi
  lea    0x3(%r13),%ebp
  add    $0x1,%r13d
  add    $0x10,%r15
  call   <commaprint@plt>
  mov    0x4(%rbx),%edi
  mov    %r12,%rdx
  mov    %eax,%ecx
  mov    (%rbx),%eax
  add    %ebp,%edi
  lea    0x2(%rax),%esi
  xor    %eax,%eax
  call   <mvprintw@plt>
  mov    -0xc(%r15),%edi
  call   <commaprint@plt>
  mov    0x4(%rbx),%edi
  mov    %r12,%rdx
  mov    %eax,%ecx
  mov    (%rbx),%eax
  add    %ebp,%edi
  lea    0xf(%rax),%esi
  xor    %eax,%eax
  call   <mvprintw@plt>
  mov    -0x8(%r15),%edi
  call   <commaprint@plt>
  mov    0x4(%rbx),%edi
  mov    %r12,%rdx
  mov    %eax,%ecx
  mov    (%rbx),%eax
  add    %ebp,%edi
  lea    0x16(%rax),%esi
  xor    %eax,%eax
  call   <mvprintw@plt>
  mov    -0x4(%r15),%edi
  call   <commaprint@plt>
  mov    0x4(%rbx),%edi
  mov    %r12,%rdx
  mov    %eax,%ecx
  mov    (%rbx),%eax
  add    %ebp,%edi
  lea    0x1e(%rax),%esi
  xor    %eax,%eax
  call   <mvprintw@plt>
  cmp    %r13d,%r14d
  jge    L4
L18:
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

tool_calls: name: extract_symbolic_data
arguments: tag: D11
data_type: string
name: extract_symbolic_data
arguments: tag: D4
data_type: string
name: extract_symbolic_data
arguments: tag: D34
data_type: string
name: extract_symbolic_data
arguments: tag: D49
data_type: string
name: extract_symbolic_data
arguments: tag: D41
data_type: string
name: extract_symbolic_data
arguments: tag: D21
data_type: string

tool: D11:  Stats - Last %d days 

tool: D4: Movement

tool: D34: Left

tool: D49: Center

tool: D41: Right

tool: D21: %s

assistant: ```c
void print_mouse_stats(int cords[], int stats_data[][4], int days) {
  int column[4] = {2, 15, 22, 30};
  mvprintw(cords[1], cords[0] + 2, " Stats - Last %d days ", days);
  mvprintw(cords[1] + 2, cords[0] + column[0], "Movement");
  mvprintw(cords[1] + 2, cords[0] + column[1], "Left");
  mvprintw(cords[1] + 2, cords[0] + column[2], "Center");
  mvprintw(cords[1] + 2, cords[0] + column[3], "Right");
  for (int i = 1; i <= days; i++) {
    mvprintw(cords[1] + (3 + i), cords[0] + column[0], "%s", commaprint(stats_data[i][0]));
    mvprintw(cords[1] + (3 + i), cords[0] + column[1], "%s", commaprint(stats_data[i][1]));
    mvprintw(cords[1] + (3 + i), cords[0] + column[2], "%s", commaprint(stats_data[i][2]));
    mvprintw(cords[1] + (3 + i), cords[0] + column[3], "%s", commaprint(stats_data[i][3]));
  }
}
```