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

```asm
<test_wmessage>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  lea    D49(%rip),%rsi
  call   <pbc_wmessage_new@plt>
  mov    %rax,%rbx
  mov    $0xffffffff,%ecx
  lea    D77(%rip),%rdx
  lea    D100(%rip),%rsi
  mov    %rax,%rdi
  call   <pbc_wmessage_string@plt>
  mov    $0x0,%ecx
  mov    $0x3039,%edx
  lea    D31(%rip),%rsi
  mov    %rbx,%rdi
  call   <pbc_wmessage_integer@plt>
  mov    $0xffffffff,%ecx
  lea    D21(%rip),%rdx
  lea    D83(%rip),%rsi
  mov    %rbx,%rdi
  call   <pbc_wmessage_string@plt>
  lea    D3(%rip),%rbp
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  call   <pbc_wmessage_message@plt>
  mov    %rax,%rdi
  mov    $0xffffffff,%ecx
  lea    D137(%rip),%rdx
  lea    D104(%rip),%r12
  mov    %r12,%rsi
  call   <pbc_wmessage_string@plt>
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  call   <pbc_wmessage_message@plt>
  mov    %rax,%rbp
  mov    $0xffffffff,%ecx
  lea    D5(%rip),%rdx
  mov    %r12,%rsi
  mov    %rax,%rdi
  call   <pbc_wmessage_string@plt>
  mov    $0xffffffff,%ecx
  lea    D131(%rip),%rdx
  lea    D129(%rip),%rsi
  mov    %rbp,%rdi
  call   <pbc_wmessage_string@plt>
  mov    $0x0,%ecx
  mov    $0xffffff85,%edx
  lea    D79(%rip),%rbp
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  call   <pbc_wmessage_integer@plt>
  mov    $0x0,%ecx
  mov    $0x3039,%edx
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  call   <pbc_wmessage_integer@plt>
  mov    $0x0,%ecx
  mov    $0x12d687,%edx
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  call   <pbc_wmessage_integer@plt>
  mov    $0x0,%ecx
  mov    $0xd431,%edx
  lea    D56(%rip),%rsi
  mov    %rbx,%rdi
  call   <pbc_wmessage_integer@plt>
  mov    %rbx,%rax
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
```

tool_calls: name: extract_symbolic_data
arguments: label: D49
data_type: string
name: extract_symbolic_data
arguments: label: D77
data_type: string
name: extract_symbolic_data
arguments: label: D100
data_type: string
name: extract_symbolic_data
arguments: label: D31
data_type: string
name: extract_symbolic_data
arguments: label: D21
data_type: string
name: extract_symbolic_data
arguments: label: D83
data_type: string
name: extract_symbolic_data
arguments: label: D3
data_type: string
name: extract_symbolic_data
arguments: label: D137
data_type: string
name: extract_symbolic_data
arguments: label: D104
data_type: string
name: extract_symbolic_data
arguments: label: D5
data_type: string
name: extract_symbolic_data
arguments: label: D131
data_type: string
name: extract_symbolic_data
arguments: label: D129
data_type: string
name: extract_symbolic_data
arguments: label: D79
data_type: string
name: extract_symbolic_data
arguments: label: D56
data_type: string

tool: D49: tutorial.Person

tool: D77: Alice

tool: D100: name

tool: D31: id

tool: D21: alice@unkown

tool: D83: email

tool: D3: phone

tool: D137: 87654321

tool: D104: number

tool: D5: 13901234567

tool: D131: MOBILE

tool: D129: type

tool: D79: test

tool: D56: tutorial.Ext.test

assistant: ```c
struct pbc_wmessage *test_wmessage(struct pbc_env *env) {
  struct pbc_wmessage *msg = pbc_wmessage_new(env, "tutorial.Person");
  pbc_wmessage_string(msg, "name", "Alice", -1);
  pbc_wmessage_integer(msg, "id", 12345, 0);
  pbc_wmessage_string(msg, "email", "alice@unkown", -1);
  struct pbc_wmessage *phone = pbc_wmessage_message(msg, "phone");
  pbc_wmessage_string(phone, "number", "87654321", -1);
  phone = pbc_wmessage_message(msg, "phone");
  pbc_wmessage_string(phone, "number", "13901234567", -1);
  pbc_wmessage_string(phone, "type", "MOBILE", -1);
  pbc_wmessage_integer(msg, "test", -123, 0);
  pbc_wmessage_integer(msg, "test", 12345, 0);
  pbc_wmessage_integer(msg, "test", 1234567, 0);
  pbc_wmessage_integer(msg, "tutorial.Ext.test", 54321, 0);
  return msg;
}
```