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

```asm
<test_find_song>:
  endbr64
  push   %rbx
  lea    D40(%rip),%rdi
  call   <printf@plt>
  lea    D158(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  call   <populate@plt>
  lea    D28(%rip),%rsi
  lea    D42(%rip),%rdi
  call   <find_song@plt>
  mov    %eax,%edi
  call   <print_node@plt>
  lea    D178(%rip),%rsi
  lea    D83(%rip),%rdi
  call   <find_song@plt>
  mov    %eax,%edi
  call   <print_node@plt>
  lea    D154(%rip),%rsi
  lea    D47(%rip),%rdi
  call   <find_song@plt>
  mov    %eax,%edi
  call   <print_node@plt>
  lea    D88(%rip),%rsi
  lea    D63(%rip),%rdi
  call   <find_song@plt>
  mov    %eax,%edi
  call   <print_node@plt>
  lea    D39(%rip),%rbx
  mov    %rbx,%rsi
  lea    D100(%rip),%rdi
  call   <find_song@plt>
  mov    %eax,%edi
  call   <print_node@plt>
  mov    %rbx,%rsi
  lea    D145(%rip),%rdi
  call   <find_song@plt>
  mov    %eax,%edi
  call   <print_node@plt>
  mov    %rbx,%rsi
  lea    D38(%rip),%rdi
  call   <find_song@plt>
  mov    %eax,%edi
  call   <print_node@plt>
  mov    %rbx,%rsi
  lea    D111(%rip),%rdi
  call   <find_song@plt>
  mov    %eax,%edi
  call   <print_node@plt>
  lea    D169(%rip),%rbx
  mov    %rbx,%rsi
  lea    D159(%rip),%rdi
  call   <find_song@plt>
  mov    %eax,%edi
  call   <print_node@plt>
  mov    %rbx,%rsi
  lea    D176(%rip),%rdi
  call   <find_song@plt>
  mov    %eax,%edi
  call   <print_node@plt>
  mov    $0x0,%eax
  call   <free_list@plt>
  pop    %rbx
  ret
```

tool_calls: name: parse_data
arguments: label: D40
data_type: string
name: parse_data
arguments: label: D158
data_type: string
name: parse_data
arguments: label: D28
data_type: string
name: parse_data
arguments: label: D42
data_type: string
name: parse_data
arguments: label: D178
data_type: string
name: parse_data
arguments: label: D83
data_type: string
name: parse_data
arguments: label: D154
data_type: string
name: parse_data
arguments: label: D47
data_type: string
name: parse_data
arguments: label: D88
data_type: string
name: parse_data
arguments: label: D63
data_type: string
name: parse_data
arguments: label: D39
data_type: string
name: parse_data
arguments: label: D100
data_type: string
name: parse_data
arguments: label: D145
data_type: string
name: parse_data
arguments: label: D38
data_type: string
name: parse_data
arguments: label: D111
data_type: string
name: parse_data
arguments: label: D169
data_type: string
name: parse_data
arguments: label: D159
data_type: string
name: parse_data
arguments: label: D176
data_type: string

tool: D40: ====================================================================


tool: D158: TESTING FIND SONG...


tool: D28: donny osmond

tool: D42: make a man out of you

tool: D178: sia

tool: D83: chandelier

tool: D154: lin manuel miranda

tool: D47: how far ill go

tool: D88: against the current

tool: D63: legends never die

tool: D39: taylor swift

tool: D100: look what you made me do

tool: D145: ours

tool: D38: theirs

tool: D111: you belong with me

tool: D169: t

tool: D159: test

tool: 

assistant: ```c
void test_find_song() {
  printf("====================================================================\n");
  printf("TESTING FIND SONG...\n");
  populate();
  print_node(find_song("make a man out of you", "donny osmond"));
  print_node(find_song("chandelier", "sia"));
  print_node(find_song("how far ill go", "lin manuel miranda"));
  print_node(find_song("legends never die", "against the current"));
  print_node(find_song("look what you made me do", "taylor swift"));
  print_node(find_song("ours", "taylor swift"));
  print_node(find_song("theirs", "taylor swift"));
  print_node(find_song("you belong with me", "taylor swift"));
  print_node(find_song("test", "t"));
  print_node(find_song("", "t"));
  free_list();
}
```