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

```asm
<interval_string>:
  endbr64
  push   %r13
  push   %r12
  lea    D161(%rip),%r12
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  movb   $0x0,D81(%rip)
  test   %edi,%edi
  je     L6
  mov    %edi,%ebx
  lea    D81(%rip),%rbp
  cmp    $0x278cff,%edi
  jbe    L44
  mov    %edi,%edx
  mov    $0xcf2049a1,%eax
  mov    %rbp,%rdi
  imul   %rax,%rdx
  lea    D180(%rip),%rcx
  lea    D55(%rip),%rsi
  shr    $0x35,%rdx
  imul   $0x278d00,%edx,%eax
  sub    %eax,%ebx
  cmp    $0x1,%edx
  lea    D235(%rip),%rax
  cmove  %rax,%rcx
  xor    %eax,%eax
  call   <sprintf@plt>
L44:
  cmp    $0x93a7f,%ebx
  jbe    L35
  mov    %ebx,%ecx
  lea    D180(%rip),%r8
  lea    D99(%rip),%rdx
  imul   $0x6ef5de4d,%rcx,%rcx
  lea    D214(%rip),%r12
  lea    D31(%rip),%rsi
  mov    %r12,%rdi
  shr    $0x32,%rcx
  imul   $0x93a80,%ecx,%eax
  sub    %eax,%ebx
  lea    D235(%rip),%rax
  cmp    $0x1,%ecx
  cmove  %rax,%r8
  cmpb   $0x0,D81(%rip)
  cmove  %rax,%rdx
  xor    %eax,%eax
  call   <sprintf@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
L35:
  cmp    $0x1517f,%ebx
  jbe    L9
  mov    %ebx,%ecx
  mov    $0xc22e4507,%eax
  lea    D180(%rip),%r8
  imul   %rax,%rcx
  lea    D99(%rip),%rdx
  lea    D214(%rip),%r12
  lea    D98(%rip),%rsi
  mov    %r12,%rdi
  shr    $0x30,%rcx
  imul   $0x15180,%ecx,%eax
  sub    %eax,%ebx
  lea    D235(%rip),%rax
  cmp    $0x1,%ecx
  cmove  %rax,%r8
  cmpb   $0x0,D81(%rip)
  cmove  %rax,%rdx
  xor    %eax,%eax
  call   <sprintf@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
L9:
  lea    D81(%rip),%r12
  test   %ebx,%ebx
  je     L6
  mov    %ebx,%ecx
  mov    $0x91a2b3c5,%eax
  lea    D235(%rip),%rsi
  imul   %rax,%rcx
  lea    D99(%rip),%rdx
  lea    D214(%rip),%r13
  mov    %r13,%rdi
  shr    $0x2b,%rcx
  imul   $0xe10,%ecx,%eax
  sub    %eax,%ebx
  mov    $0x88888889,%eax
  mov    %ebx,%r8d
  mov    %r8,%r9
  imul   %rax,%r8
  shr    $0x25,%r8
  imul   $0x3c,%r8d,%eax
  cmpb   $0x0,D81(%rip)
  cmove  %rsi,%rdx
  lea    D51(%rip),%rsi
  sub    %eax,%r9d
  xor    %eax,%eax
  call   <sprintf@plt>
  mov    %r13,%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
L6:
  add    $0x8,%rsp
  mov    %r12,%rax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
```

tool_calls: name: unpack_data
arguments: label: D161
data_type: string
name: unpack_data
arguments: label: D180
data_type: string
name: unpack_data
arguments: label: D55
data_type: string
name: unpack_data
arguments: label: D235
data_type: string
name: unpack_data
arguments: label: D99
data_type: string
name: unpack_data
arguments: label: D31
data_type: string
name: unpack_data
arguments: label: D98
data_type: string
name: unpack_data
arguments: label: D51
data_type: string

tool: D161: <none>

tool: D180: s

tool: D55: %d month%s

tool: 

tool: D99: , 

tool: D31: %s%d week%s

tool: D98: %s%d day%s

tool: D51: %s%d:%02d:%02d

assistant: ```c
const char *interval_string(unsigned int secs) {
  static char buf[256], tmp[80];
  int hr, min, num;
  buf[0] = 0;
  if (secs == 0)
    return "<none>";
  if (secs >= (86400 * 30)) {
    num = secs / (86400 * 30);
    secs -= num * (86400 * 30);
    sprintf(buf, "%d month%s", num, (num > 1) ? "s" : "");
  }
  if (secs >= (86400 * 7)) {
    num = secs / (86400 * 7);
    secs -= num * (86400 * 7);
    sprintf(tmp, "%s%d week%s", buf[0] ? ", " : "", num, (num > 1) ? "s" : "");
    strcat(buf, tmp);
  }
  if (secs >= (86400)) {
    num = secs / (86400);
    secs -= num * (86400);
    sprintf(tmp, "%s%d day%s", buf[0] ? ", " : "", num, (num > 1) ? "s" : "");
    strcat(buf, tmp);
  }
  if (secs > 0) {
    hr = secs / (60 * 60);
    secs -= hr * (60 * 60);
    min = secs / (60);
    secs -= min * (60);
    sprintf(tmp, "%s%d:%02d:%02d", buf[0] ? ", " : "", hr, min, secs);
    strcat(buf, tmp);
  }
  return buf;
}
```