user: Converte this assembly snippet into its equivalent C code:

```asm
<ckb_info>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  lea    D169(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D167(%rip),%rdi
  call   <printurl@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D204(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D489(%rip),%rdi
  call   <printurl@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D389(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D529(%rip),%rdi
  call   <printurl@plt>
  lea    D227(%rip),%rsi
  lea    D459(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D1(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D108(%rip),%rdi
  call   <printurl@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D316(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D517(%rip),%rdi
  call   <printurl@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D153(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D457(%rip),%rdi
  call   <printurl@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D29(%rip),%r12
  mov    %r12,%rdx
  mov    %r12,%rsi
  lea    D521(%rip),%rbx
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D416(%rip),%rdi
  call   <printurl@plt>
  mov    $0x20,%edi
  call   <putchar@plt>
  lea    D455(%rip),%rbp
  mov    %rbp,%rdi
  call   <printurl@plt>
  mov    $0x20,%edi
  call   <putchar@plt>
  mov    $0x5a,%esi
  lea    D343(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D26(%rip),%r14
  mov    %r14,%rdx
  lea    D181(%rip),%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D291(%rip),%rdi
  call   <printurl@plt>
  mov    $0x20,%edi
  call   <putchar@plt>
  mov    %rbp,%rdi
  call   <printurl@plt>
  mov    $0x20,%edi
  call   <putchar@plt>
  lea    D254(%rip),%rdi
  call   <printurl@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D126(%rip),%rdx
  lea    D440(%rip),%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D139(%rip),%rdi
  call   <printurl@plt>
  mov    $0x20,%edi
  call   <putchar@plt>
  lea    D509(%rip),%rdi
  call   <printurl@plt>
  mov    $0x20,%edi
  call   <putchar@plt>
  movsd  D112(%rip),%xmm0
  movapd %xmm0,%xmm2
  movsd  D325(%rip),%xmm1
  lea    D311(%rip),%rdi
  mov    $0x3,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D442(%rip),%rdx
  lea    D414(%rip),%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D373(%rip),%rdi
  call   <printurl@plt>
  mov    $0x20,%edi
  call   <putchar@plt>
  mov    %rbp,%rdi
  call   <printurl@plt>
  mov    $0x20,%edi
  call   <putchar@plt>
  mov    $0x30,%edi
  call   <putchar@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D58(%rip),%rsi
  lea    D262(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D290(%rip),%rbp
  mov    %rbp,%rsi
  lea    D77(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D8(%rip),%rsi
  lea    D346(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D149(%rip),%rsi
  lea    D44(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D349(%rip),%r15
  mov    %r15,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D75(%rip),%rdi
  call   <printurl@plt>
  mov    %rbp,%rsi
  lea    D51(%rip),%rbx
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D283(%rip),%r13
  mov    %r13,%rdi
  call   <printurl@plt>
  lea    D126(%rip),%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D425(%rip),%rdi
  call   <printurl@plt>
  lea    D442(%rip),%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D11(%rip),%rdi
  call   <printurl@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  mov    %r15,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D103(%rip),%rdi
  call   <printurl@plt>
  mov    %r14,%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D538(%rip),%rdi
  call   <printurl@plt>
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    %r13,%rdi
  call   <printurl@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  mov    %r15,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D433(%rip),%rdi
  call   <printurl@plt>
  mov    %r14,%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D538(%rip),%rdi
  call   <printurl@plt>
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    %r13,%rdi
  call   <printurl@plt>
  mov    %r12,%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D200(%rip),%rdi
  call   <printurl@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

tool_calls: name: disassemble_data
arguments: data_label: D169
data_type: string
name: disassemble_data
arguments: data_label: D167
data_type: string
name: disassemble_data
arguments: data_label: D204
data_type: string
name: disassemble_data
arguments: data_label: D489
data_type: string
name: disassemble_data
arguments: data_label: D389
data_type: string
name: disassemble_data
arguments: data_label: D529
data_type: string
name: disassemble_data
arguments: data_label: D227
data_type: string
name: disassemble_data
arguments: data_label: D459
data_type: string
name: disassemble_data
arguments: data_label: D1
data_type: string
name: disassemble_data
arguments: data_label: D108
data_type: string
name: disassemble_data
arguments: data_label: D316
data_type: string
name: disassemble_data
arguments: data_label: D517
data_type: string
name: disassemble_data
arguments: data_label: D153
data_type: string
name: disassemble_data
arguments: data_label: D457
data_type: string
name: disassemble_data
arguments: data_label: D29
data_type: string
name: disassemble_data
arguments: data_label: D521
data_type: string
name: disassemble_data
arguments: data_label: D416
data_type: string
name: disassemble_data
arguments: data_label: D455
data_type: string
name: disassemble_data
arguments: data_label: D343
data_type: string
name: disassemble_data
arguments: data_label: D26
data_type: string
name: disassemble_data
arguments: data_label: D181
data_type: string
name: disassemble_data
arguments: data_label: D291
data_type: string
name: disassemble_data
arguments: data_label: D254
data_type: string
name: disassemble_data
arguments: data_label: D126
data_type: string
name: disassemble_data
arguments: data_label: D440
data_type: string
name: disassemble_data
arguments: data_label: D139
data_type: string
name: disassemble_data
arguments: data_label: D509
data_type: string
name: disassemble_data
arguments: data_label: D112
data_type: f64
name: disassemble_data
arguments: data_label: D325
data_type: f64
name: disassemble_data
arguments: data_label: D311
data_type: string
name: disassemble_data
arguments: data_label: D442
data_type: string
name: disassemble_data
arguments: data_label: D414
data_type: string
name: disassemble_data
arguments: data_label: D373
data_type: string
name: disassemble_data
arguments: data_label: D58
data_type: string
name: disassemble_data
arguments: data_label: D262
data_type: string
name: disassemble_data
arguments: data_label: D290
data_type: string
name: disassemble_data
arguments: data_label: D77
data_type: string
name: disassemble_data
arguments: data_label: D8
data_type: string
name: disassemble_data
arguments: data_label: D346
data_type: string
name: disassemble_data
arguments: data_label: D149
data_type: string
name: disassemble_data
arguments: data_label: D44
data_type: string
name: disassemble_data
arguments: data_label: D349
data_type: string
name: disassemble_data
arguments: data_label: D75
data_type: string
name: disassemble_data
arguments: data_label: D51
data_type: string
name: disassemble_data
arguments: data_label: D283
data_type: string
name: disassemble_data
arguments: data_label: D425
data_type: string
name: disassemble_data
arguments: data_label: D11
data_type: string
name: disassemble_data
arguments: data_label: D103
data_type: string
name: disassemble_data
arguments: data_label: D538
data_type: string
name: disassemble_data
arguments: data_label: D433
data_type: string
name: disassemble_data
arguments: data_label: D200
data_type: string

tool: D169: name 

tool: D167: Wave

tool: D204: version 

tool: D489: 0.10

tool: D389: author 

tool: D529: MSC

tool: D227: 2014-2015

tool: D459: 
year %s


tool: D1: license 

tool: D108: GPLv2

tool: D316: guid 

tool: D517: {E0BBA19E-C328-4C0E-8E3C-A06D5722B4FC}

tool: D153: description 

tool: D457: A moving wave effect.

tool: D29: angle

tool: D521: param %s %s 

tool: D416: Angle:

tool: 

tool: D343: %ld

tool: D26: color

tool: D181: agradient

tool: D291: Wave color:

tool: D254: ffffffff

tool: D126: length

tool: D440: double

tool: D139: Wave length:

tool: D509: %

tool: D112: 100

tool: D325: 1

tool: D311: %lf %lf %lf

tool: D442: symmetric

tool: D414: bool

tool: D373: Symmetric

tool: D58: position

tool: D262: kpmode %s


tool: D290: duration

tool: D77: time %s


tool: D8: live

tool: D346: parammode %s


tool: D149: on

tool: D44: preempt %s


tool: D349: preset 

tool: D75: Shimmer

tool: D51:  %s=

tool: D283: 2.0

tool: D425: 50.0

tool: D11: 1

tool: D103: Rainbow

tool: D538: 0:ffff0000 17:ffffff00 33:ff00ff00 50:ff00ffff 67:ff0000ff 83:ffff00ff 100:ffff0000

tool: D433: Vertical rainbow

tool: D200: 180

assistant: ```c
void ckb_info() {
  do {
    printf("name ");
    printurl("Wave");
    printf("\n");
  } while (0);
  do {
    printf("version ");
    printurl("0.10");
    printf("\n");
  } while (0);
  do {
    printf("author ");
    printurl("MSC");
    printf("\nyear %s\n", "2014-2015");
  } while (0);
  do {
    printf("license ");
    printurl("GPLv2");
    printf("\n");
  } while (0);
  do {
    printf("guid ");
    printurl("{E0BBA19E-C328-4C0E-8E3C-A06D5722B4FC}");
    printf("\n");
  } while (0);
  do {
    printf("description ");
    printurl("A moving wave effect.");
    printf("\n");
  } while (0);
  do {
    printf("param %s %s ", "angle", "angle");
    printurl("Angle:");
    printf(" ");
    printurl("");
    printf(" ");
    printf("%ld", (long)(90));
    printf("\n");
  } while (0);
  do {
    printf("param %s %s ", "agradient", "color");
    printurl("Wave color:");
    printf(" ");
    printurl("");
    printf(" ");
    printurl("ffffffff");
    printf("\n");
  } while (0);
  do {
    printf("param %s %s ", "double", "length");
    printurl("Wave length:");
    printf(" ");
    printurl("%");
    printf(" ");
    printf("%lf %lf %lf", (double)(100), (double)(1.), (double)(100.));
    printf("\n");
  } while (0);
  do {
    printf("param %s %s ", "bool", "symmetric");
    printurl("Symmetric");
    printf(" ");
    printurl("");
    printf(" ");
    printf((0) ? "1" : "0");
    printf("\n");
  } while (0);
  do {
    printf("kpmode %s\n", "position");
  } while (0);
  do {
    printf("time %s\n", "duration");
  } while (0);
  do {
    printf("parammode %s\n", (1) ? "live" : "static");
  } while (0);
  do {
    printf("preempt %s\n", (1) ? "on" : "off");
  } while (0);
  do {
    printf("preset ");
    printurl("Shimmer");
  } while (0);
  do {
    printf(" %s=", "duration");
    printurl("2.0");
  } while (0);
  do {
    printf(" %s=", "length");
    printurl("50.0");
  } while (0);
  do {
    printf(" %s=", "symmetric");
    printurl("1");
  } while (0);
  do {
    printf("\n");
  } while (0);
  do {
    printf("preset ");
    printurl("Rainbow");
  } while (0);
  do {
    printf(" %s=", "color");
    printurl("0:ffff0000 17:ffffff00 33:ff00ff00 50:ff00ffff 67:ff0000ff 83:ffff00ff 100:ffff0000");
  } while (0);
  do {
    printf(" %s=", "duration");
    printurl("2.0");
  } while (0);
  do {
    printf("\n");
  } while (0);
  do {
    printf("preset ");
    printurl("Vertical rainbow");
  } while (0);
  do {
    printf(" %s=", "color");
    printurl("0:ffff0000 17:ffffff00 33:ff00ff00 50:ff00ffff 67:ff0000ff 83:ffff00ff 100:ffff0000");
  } while (0);
  do {
    printf(" %s=", "duration");
    printurl("2.0");
  } while (0);
  do {
    printf(" %s=", "angle");
    printurl("180");
  } while (0);
  do {
    printf("\n");
  } while (0);
}
```