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

```asm
<Qt_setVisibilityMode>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x60,%rsp
  mov    %rdi,%r12
  mov    %rsi,%rbx
  mov    %fs:0x28,%rax
  mov    %rax,0x58(%rsp)
  xor    %eax,%eax
  lea    D84(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L28
  lea    D114(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L73
  lea    D146(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L86
  lea    D74(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    $0x0,%ebp
  test   %eax,%eax
  je     L35
L25:
  mov    0x58(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L21
  mov    %ebp,%eax
  add    $0x60,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
L28:
  mov    %eax,%ebp
  mov    %rsp,%rbx
  mov    %r12,%rdx
  lea    D44(%rip),%rsi
  mov    %rbx,%rdi
  call   <sprintf@plt>
  mov    %rbx,%rdx
  lea    D128(%rip),%rsi
  lea    D137(%rip),%rdi
  call   <Qt_handleString@plt>
  jmp    L25
L73:
  mov    %rsp,%rbx
  mov    %r12,%rdx
  lea    D54(%rip),%rsi
  mov    %rbx,%rdi
  call   <sprintf@plt>
  mov    %rbx,%rdx
  lea    D128(%rip),%rsi
  lea    D137(%rip),%rdi
  call   <Qt_handleString@plt>
  mov    $0x1,%ebp
  jmp    L25
L86:
  mov    %rsp,%rbx
  mov    %r12,%rdx
  lea    D49(%rip),%rsi
  mov    %rbx,%rdi
  call   <sprintf@plt>
  mov    %rbx,%rdx
  lea    D128(%rip),%rsi
  lea    D137(%rip),%rdi
  call   <Qt_handleString@plt>
  mov    $0x1,%ebp
  jmp    L25
L35:
  mov    %rsp,%rbx
  mov    %r12,%rdx
  lea    D8(%rip),%rsi
  mov    %rbx,%rdi
  call   <sprintf@plt>
  mov    %rbx,%rdx
  lea    D128(%rip),%rsi
  lea    D137(%rip),%rdi
  call   <Qt_handleString@plt>
  mov    $0x1,%ebp
  jmp    L25
L21:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: label: D84
type_infered: string
name: extract_symbolic_data
arguments: label: D114
type_infered: string
name: extract_symbolic_data
arguments: label: D146
type_infered: string
name: extract_symbolic_data
arguments: label: D74
type_infered: string
name: extract_symbolic_data
arguments: label: D44
type_infered: string
name: extract_symbolic_data
arguments: label: D128
type_infered: string
name: extract_symbolic_data
arguments: label: D137
type_infered: string
name: extract_symbolic_data
arguments: label: D54
type_infered: string
name: extract_symbolic_data
arguments: label: D49
type_infered: string
name: extract_symbolic_data
arguments: label: D8
type_infered: string

tool: D84: static

tool: D114: if not zero

tool: D146: if zero

tool: D74: calc

tool: D44: %s::StaticV

tool: D128: enum

tool: D137: visibility

tool: D54: %s::IfNotZero

tool: D49: %s::IfZero

tool: D8: %s::Calc

assistant: ```c
int Qt_setVisibilityMode(char *widget, char *token) {
  char asc[80];
  if (!strcmp(token, "static")) {
    sprintf(asc, "%s::StaticV", widget);
    Qt_handleString("visibility", "enum", asc);
    return 0;
  } else if (!strcmp(token, "if not zero")) {
    sprintf(asc, "%s::IfNotZero", widget);
    Qt_handleString("visibility", "enum", asc);
    return 1;
  } else if (!strcmp(token, "if zero")) {
    sprintf(asc, "%s::IfZero", widget);
    Qt_handleString("visibility", "enum", asc);
    return 1;
  } else if (!strcmp(token, "calc")) {
    sprintf(asc, "%s::Calc", widget);
    Qt_handleString("visibility", "enum", asc);
    return 1;
  }
  return 0;
}
```