user: What is the c source code of the assembly code below:

```asm
<eca_opt_print_option_xml>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x8(%rbp)
  mov    %rsi,-0x10(%rbp)
  mov    %rdx,-0x18(%rbp)
  mov    %rcx,-0x20(%rbp)
  mov    %r8,-0x28(%rbp)
  mov    %r9d,-0x2c(%rbp)
  mov    0x10(%rbp),%edi
  call   <PrintIndent@plt>
  lea    D111(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    -0x8(%rbp),%rax
  lea    D75(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L42
  mov    0x10(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,%edi
  call   <PrintIndent@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rsi
  lea    D1(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L42:
  mov    -0x10(%rbp),%rax
  lea    D128(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L27
  mov    0x10(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,%edi
  call   <PrintIndent@plt>
  mov    -0x10(%rbp),%rax
  mov    %rax,%rsi
  lea    D108(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L27:
  mov    -0x18(%rbp),%rax
  lea    D59(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L38
  mov    0x10(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,%edi
  call   <PrintIndent@plt>
  mov    -0x18(%rbp),%rax
  mov    %rax,%rsi
  lea    D103(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L38:
  mov    -0x20(%rbp),%rax
  lea    D59(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L47
  mov    0x10(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,%edi
  call   <PrintIndent@plt>
  mov    -0x20(%rbp),%rax
  mov    %rax,%rsi
  lea    D28(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L47:
  mov    -0x28(%rbp),%rax
  lea    D59(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L20
  mov    0x10(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,%edi
  call   <PrintIndent@plt>
  lea    D123(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    0x10(%rbp),%eax
  lea    0x2(%rax),%edx
  mov    -0x28(%rbp),%rax
  mov    $0x46,%esi
  mov    %rax,%rdi
  call   <print_spec_indented_and_max_length@plt>
  mov    0x10(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,%edi
  call   <PrintIndent@plt>
  lea    D23(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
L20:
  mov    0x10(%rbp),%edi
  call   <PrintIndent@plt>
  lea    D9(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  nop
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: label: D111
data_type: string
name: retrieve_data
arguments: label: D75
data_type: string
name: retrieve_data
arguments: label: D1
data_type: string
name: retrieve_data
arguments: label: D128
data_type: string
name: retrieve_data
arguments: label: D108
data_type: string
name: retrieve_data
arguments: label: D59
data_type: string
name: retrieve_data
arguments: label: D103
data_type: string
name: retrieve_data
arguments: label: D28
data_type: string
name: retrieve_data
arguments: label: D123
data_type: string
name: retrieve_data
arguments: label: D23
data_type: string
name: retrieve_data
arguments: label: D9
data_type: string

tool: D111: <option>

tool: D75: -

tool: D1: <single_dash_tag>%s</single_dash_tag>


tool: D128: --

tool: D108: <double_dash_tag>%s</double_dash_tag>


tool: 

tool: D103: <args>%s</args>


tool: D28: <short_help>%s</short_help>


tool: D123: <long_help>

tool: D23: </long_help>

tool: D9: </option>

assistant: ```c
void eca_opt_print_option_xml(const char *shortopt, const char *longopt, const char *args, const char *short_comment, const char *long_comment, int __END_OF_OPTS, int indent_level) {
  PrintIndent(indent_level);
  printf("<option>\n");
  if (strcmp(shortopt, "-") != 0) {
    PrintIndent(indent_level + 1);
    printf("<single_dash_tag>%s</single_dash_tag>\n", shortopt);
  }
  if (strcmp(longopt, "--") != 0) {
    PrintIndent(indent_level + 1);
    printf("<double_dash_tag>%s</double_dash_tag>\n", longopt);
  }
  if (strcmp(args, "") != 0) {
    PrintIndent(indent_level + 1);
    printf("<args>%s</args>\n", args);
  }
  if (strcmp(short_comment, "") != 0) {
    PrintIndent(indent_level + 1);
    printf("<short_help>%s</short_help>\n", short_comment);
  }
  if (strcmp(long_comment, "") != 0) {
    PrintIndent(indent_level + 1);
    printf("<long_help>\n");
    print_spec_indented_and_max_length(long_comment, 70, indent_level + 2);
    PrintIndent(indent_level + 1);
    printf("</long_help>\n");
  }
  PrintIndent(indent_level);
  printf("</option>\n");
}
```