user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<cvd_female_validation>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x38,%rsp
  mov    %esi,%r13d
  mov    %edx,%r15d
  mov    %ecx,%r14d
  mov    %r8d,0x10(%rsp)
  movsd  %xmm0,0x8(%rsp)
  mov    %r9d,0x14(%rsp)
  movsd  %xmm1,0x18(%rsp)
  movsd  %xmm2,0x20(%rsp)
  movsd  %xmm3,0x28(%rsp)
  mov    0x80(%rsp),%rbp
  mov    0x88(%rsp),%r12d
  movb   $0x0,0x0(%rbp)
  call   <is_boolean@plt>
  mov    $0x1,%ebx
  test   %eax,%eax
  je     L203
L82:
  mov    %r13d,%edi
  call   <is_boolean@plt>
  mov    %eax,%r13d
  test   %eax,%eax
  je     L117
L29:
  mov    %r15d,%edi
  call   <is_boolean@plt>
  mov    %eax,%r13d
  test   %eax,%eax
  je     L200
L217:
  mov    %r14d,%edi
  call   <is_boolean@plt>
  mov    %eax,%r13d
  test   %eax,%eax
  je     L147
L105:
  mov    0x10(%rsp),%edi
  call   <is_boolean@plt>
  mov    %eax,%r13d
  test   %eax,%eax
  je     L111
L3:
  mov    $0x28,%esi
  mov    $0x14,%edi
  movsd  0x8(%rsp),%xmm0
  call   <d_in_range@plt>
  mov    %eax,%r13d
  test   %eax,%eax
  je     L35
L0:
  mov    $0x9,%edx
  mov    $0x1,%esi
  mov    0x14(%rsp),%edi
  call   <i_in_range@plt>
  mov    %eax,%r13d
  test   %eax,%eax
  je     L118
L30:
  mov    0x70(%rsp),%edi
  call   <is_boolean@plt>
  mov    %eax,%r13d
  test   %eax,%eax
  je     L227
L67:
  mov    $0xc,%esi
  mov    $0x1,%edi
  movsd  0x18(%rsp),%xmm0
  call   <d_in_range@plt>
  mov    %eax,%r13d
  test   %eax,%eax
  je     L71
L146:
  mov    $0xd2,%esi
  mov    $0x46,%edi
  movsd  0x20(%rsp),%xmm0
  call   <d_in_range@plt>
  mov    %eax,%r13d
  test   %eax,%eax
  je     L96
L58:
  mov    $0x4,%edx
  mov    $0x0,%esi
  mov    0x78(%rsp),%edi
  call   <i_in_range@plt>
  mov    %eax,%r13d
  test   %eax,%eax
  je     L8
L47:
  mov    $0xb,%esi
  mov    $0xfffffff9,%edi
  movsd  0x28(%rsp),%xmm0
  call   <d_in_range@plt>
  mov    %eax,%r13d
  test   %eax,%eax
  je     L49
L202:
  mov    %ebx,%eax
  add    $0x38,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L203:
  mov    %eax,%ebx
  mov    %r12d,%edx
  lea    D36(%rip),%rsi
  mov    %rbp,%rdi
  call   <strlcat@plt>
  jmp    L82
L117:
  mov    %r12d,%edx
  lea    D53(%rip),%rsi
  mov    %rbp,%rdi
  call   <strlcat@plt>
  mov    %r13d,%ebx
  jmp    L29
L200:
  mov    %r12d,%edx
  lea    D88(%rip),%rsi
  mov    %rbp,%rdi
  call   <strlcat@plt>
  mov    %r13d,%ebx
  jmp    L217
L147:
  mov    %r12d,%edx
  lea    D119(%rip),%rsi
  mov    %rbp,%rdi
  call   <strlcat@plt>
  mov    %r13d,%ebx
  jmp    L105
L111:
  mov    %r12d,%edx
  lea    D35(%rip),%rsi
  mov    %rbp,%rdi
  call   <strlcat@plt>
  mov    %r13d,%ebx
  jmp    L3
L35:
  mov    %r12d,%edx
  lea    D57(%rip),%rsi
  mov    %rbp,%rdi
  call   <strlcat@plt>
  mov    %r13d,%ebx
  jmp    L0
L118:
  mov    %r12d,%edx
  lea    D70(%rip),%rsi
  mov    %rbp,%rdi
  call   <strlcat@plt>
  mov    %r13d,%ebx
  jmp    L30
L227:
  mov    %r12d,%edx
  lea    D116(%rip),%rsi
  mov    %rbp,%rdi
  call   <strlcat@plt>
  mov    %r13d,%ebx
  jmp    L67
L71:
  mov    %r12d,%edx
  lea    D100(%rip),%rsi
  mov    %rbp,%rdi
  call   <strlcat@plt>
  mov    %r13d,%ebx
  jmp    L146
L96:
  mov    %r12d,%edx
  lea    D106(%rip),%rsi
  mov    %rbp,%rdi
  call   <strlcat@plt>
  mov    %r13d,%ebx
  jmp    L58
L8:
  mov    %r12d,%edx
  lea    D45(%rip),%rsi
  mov    %rbp,%rdi
  call   <strlcat@plt>
  mov    %r13d,%ebx
  jmp    L47
L49:
  mov    %r12d,%edx
  lea    D18(%rip),%rsi
  mov    %rbp,%rdi
  call   <strlcat@plt>
  mov    %r13d,%ebx
  jmp    L202
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D36
datatype: string
name: extract_symbolic_data
arguments: data_label: D53
datatype: string
name: extract_symbolic_data
arguments: data_label: D88
datatype: string
name: extract_symbolic_data
arguments: data_label: D119
datatype: string
name: extract_symbolic_data
arguments: data_label: D35
datatype: string
name: extract_symbolic_data
arguments: data_label: D57
datatype: string
name: extract_symbolic_data
arguments: data_label: D70
datatype: string
name: extract_symbolic_data
arguments: data_label: D116
datatype: string
name: extract_symbolic_data
arguments: data_label: D100
datatype: string
name: extract_symbolic_data
arguments: data_label: D106
datatype: string
name: extract_symbolic_data
arguments: data_label: D45
datatype: string
name: extract_symbolic_data
arguments: data_label: D18
datatype: string

tool: D36: error: b_AF must be in range (0,1)


tool: D53: error: b_ra must be in range (0,1)


tool: D88: error: b_renal must be in range (0,1)


tool: D119: error: b_treatedhyp must be in range (0,1)


tool: D35: error: b_type2 must be in range (0,1)


tool: D57: error: bmi must be in range (20,40)


tool: D70: error: ethrisk must be in range (1,9)


tool: D116: error: fh_cvd must be in range (0,1)


tool: D100: error: rati must be in range (1,12)


tool: D106: error: sbp must be in range (70,210)


tool: D45: error: smoke_cat must be in range (0,4)


tool: D18: error: town must be in range (-7,11)


assistant: ```c
int cvd_female_validation(int b_AF, int b_ra, int b_renal, int b_treatedhyp, int b_type2, double bmi, int ethrisk, int fh_cvd, double rati, double sbp, int smoke_cat, double town, char *errorBuf, int errorBufSize) {
  int ok = 1;
  *errorBuf = 0;
  if (!is_boolean(b_AF)) {
    ok = 0;
    strlcat(errorBuf, "error: b_AF must be in range (0,1)\n", errorBufSize);
  }
  if (!is_boolean(b_ra)) {
    ok = 0;
    strlcat(errorBuf, "error: b_ra must be in range (0,1)\n", errorBufSize);
  }
  if (!is_boolean(b_renal)) {
    ok = 0;
    strlcat(errorBuf, "error: b_renal must be in range (0,1)\n", errorBufSize);
  }
  if (!is_boolean(b_treatedhyp)) {
    ok = 0;
    strlcat(errorBuf, "error: b_treatedhyp must be in range (0,1)\n", errorBufSize);
  }
  if (!is_boolean(b_type2)) {
    ok = 0;
    strlcat(errorBuf, "error: b_type2 must be in range (0,1)\n", errorBufSize);
  }
  if (!d_in_range(bmi, 20, 40)) {
    ok = 0;
    strlcat(errorBuf, "error: bmi must be in range (20,40)\n", errorBufSize);
  }
  if (!i_in_range(ethrisk, 1, 9)) {
    ok = 0;
    strlcat(errorBuf, "error: ethrisk must be in range (1,9)\n", errorBufSize);
  }
  if (!is_boolean(fh_cvd)) {
    ok = 0;
    strlcat(errorBuf, "error: fh_cvd must be in range (0,1)\n", errorBufSize);
  }
  if (!d_in_range(rati, 1, 12)) {
    ok = 0;
    strlcat(errorBuf, "error: rati must be in range (1,12)\n", errorBufSize);
  }
  if (!d_in_range(sbp, 70, 210)) {
    ok = 0;
    strlcat(errorBuf, "error: sbp must be in range (70,210)\n", errorBufSize);
  }
  if (!i_in_range(smoke_cat, 0, 4)) {
    ok = 0;
    strlcat(errorBuf, "error: smoke_cat must be in range (0,4)\n", errorBufSize);
  }
  if (!d_in_range(town, -7, 11)) {
    ok = 0;
    strlcat(errorBuf, "error: town must be in range (-7,11)\n", errorBufSize);
  }
  return ok;
}
```