user: 请将以下的汇编代码转换成C语言代码：

```asm
<send_oscam_config>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rdi,%rbp
  mov    %rsi,%r12
  mov    $0x2,%esi
  call   <setActiveMenu@plt>
  lea    D21(%rip),%rsi
  mov    %r12,%rdi
  call   <getParam@plt>
  mov    %rax,%rbx
  lea    D3(%rip),%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L81
  lea    D63(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L271
  lea    D17(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L58
  lea    D43(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L122
  lea    D136(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L247
  lea    D140(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L214
  lea    D33(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L167
  lea    D18(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L175
  lea    D14(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L127
  lea    D24(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L218
  lea    D121(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L225
  lea    D15(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L1
  lea    D36(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L15
  lea    D56(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L146
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <send_oscam_config_loadbalancer@plt>
  jmp    L169
L81:
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <send_oscam_config_webif@plt>
L169:
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
L271:
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <send_oscam_config_monitor@plt>
  jmp    L169
L58:
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <send_oscam_config_camd35@plt>
  jmp    L169
L122:
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <send_oscam_config_camd35tcp@plt>
  jmp    L169
L247:
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <send_oscam_config_cache@plt>
  jmp    L169
L214:
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <send_oscam_config_newcamd@plt>
  jmp    L169
L167:
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <send_oscam_config_radegast@plt>
  jmp    L169
L175:
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <send_oscam_config_scam@plt>
  jmp    L169
L127:
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <send_oscam_config_cccam@plt>
  jmp    L169
L218:
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <send_oscam_config_gbox@plt>
  jmp    L169
L225:
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <send_oscam_config_dvbapi@plt>
  jmp    L169
L1:
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <send_oscam_config_anticasc@plt>
  jmp    L169
L15:
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <send_oscam_config_serial@plt>
  jmp    L169
L146:
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <send_oscam_config_global@plt>
  jmp    L169
```

tool_calls: name: unpack_data
arguments: data_tag: D21
datatype: string
name: unpack_data
arguments: data_tag: D3
datatype: string
name: unpack_data
arguments: data_tag: D63
datatype: string
name: unpack_data
arguments: data_tag: D17
datatype: string
name: unpack_data
arguments: data_tag: D43
datatype: string
name: unpack_data
arguments: data_tag: D136
datatype: string
name: unpack_data
arguments: data_tag: D140
datatype: string
name: unpack_data
arguments: data_tag: D33
datatype: string
name: unpack_data
arguments: data_tag: D18
datatype: string
name: unpack_data
arguments: data_tag: D14
datatype: string
name: unpack_data
arguments: data_tag: D24
datatype: string
name: unpack_data
arguments: data_tag: D121
datatype: string
name: unpack_data
arguments: data_tag: D15
datatype: string
name: unpack_data
arguments: data_tag: D36
datatype: string
name: unpack_data
arguments: data_tag: D56
datatype: string

tool: D21: part

tool: D3: webif

tool: D63: monitor

tool: D17: camd35

tool: D43: camd35tcp

tool: D136: cache

tool: D140: newcamd

tool: D33: radegast

tool: D18: scam

tool: D14: cccam

tool: D24: gbox

tool: D121: dvbapi

tool: D15: anticasc

tool: D36: serial

tool: D56: loadbalancer

assistant: ```c
char *send_oscam_config(struct templatevars *vars, struct uriparams *params) {
  setActiveMenu(vars, 2);
  char *part = getParam(params, "part");
  if (!strcmp(part, "webif")) {
    return send_oscam_config_webif(vars, params);
  } else if (!strcmp(part, "monitor")) {
    return send_oscam_config_monitor(vars, params);
  } else if (!strcmp(part, "camd35")) {
    return send_oscam_config_camd35(vars, params);
  } else if (!strcmp(part, "camd35tcp")) {
    return send_oscam_config_camd35tcp(vars, params);
  } else if (!strcmp(part, "cache")) {
    return send_oscam_config_cache(vars, params);
  } else if (!strcmp(part, "newcamd")) {
    return send_oscam_config_newcamd(vars, params);
  } else if (!strcmp(part, "radegast")) {
    return send_oscam_config_radegast(vars, params);
  } else if (!strcmp(part, "scam")) {
    return send_oscam_config_scam(vars, params);
  } else if (!strcmp(part, "cccam")) {
    return send_oscam_config_cccam(vars, params);
  } else if (!strcmp(part, "gbox")) {
    return send_oscam_config_gbox(vars, params);
  } else if (!strcmp(part, "dvbapi")) {
    return send_oscam_config_dvbapi(vars, params);
  } else if (!strcmp(part, "anticasc")) {
    return send_oscam_config_anticasc(vars, params);
  } else if (!strcmp(part, "serial")) {
    return send_oscam_config_serial(vars, params);
  } else if (!strcmp(part, "loadbalancer")) {
    return send_oscam_config_loadbalancer(vars, params);
  } else {
    return send_oscam_config_global(vars, params);
  }
}
```