user: Please show me the C implementation that matches the assembly code listed below:

```asm
<kb_1>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x38,%rsp
  movq   %xmm0,%r14
  movq   %xmm1,%rbp
  movq   %xmm2,%r12
  movq   %xmm3,%rbx
  movsd  %xmm4,0x18(%rsp)
  movq   %xmm5,%r13
  movq   %xmm6,%r15
  movsd  D153(%rip),%xmm0
  subsd  %xmm4,%xmm0
  movsd  %xmm0,0x10(%rsp)
  ucomisd D175(%rip),%xmm4
  jp     L46
  cmove  D85(%rip),%r12
L46:
  movq   %r12,%xmm5
  mulsd  D63(%rip),%xmm5
  movsd  %xmm5,0x20(%rsp)
  movq   %r12,%xmm1
  mulsd  D252(%rip),%xmm1
  movq   %rbp,%xmm0
  subsd  %xmm1,%xmm0
  divsd  %xmm5,%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm0,%xmm1
  jae    L12
L49:
  movq   %rbx,%xmm0
  mulsd  D172(%rip),%xmm0
  call   <exp@plt>
  movapd %xmm0,%xmm1
  movsd  D117(%rip),%xmm0
  divsd  %xmm1,%xmm0
  movsd  D89(%rip),%xmm1
  subsd  %xmm0,%xmm1
  movsd  %xmm1,0x8(%rsp)
  movq   %r13,%xmm0
  divsd  D125(%rip),%xmm0
  movsd  D223(%rip),%xmm1
  call   <pow@plt>
  movapd %xmm0,%xmm1
  movsd  D225(%rip),%xmm0
  movq   %r15,%xmm3
  divsd  %xmm3,%xmm0
  mulsd  D246(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,0x28(%rsp)
  movq   %rbx,%xmm0
  mulsd  D120(%rip),%xmm0
  movsd  0x8(%rsp),%xmm7
  movapd %xmm7,%xmm1
  mulsd  %xmm7,%xmm1
  addsd  %xmm1,%xmm1
  divsd  %xmm1,%xmm0
  ucomisd D175(%rip),%xmm0
  jp     L52
  pxor   %xmm2,%xmm2
  jne    L52
L45:
  movsd  D167(%rip),%xmm0
  mulsd  0x8(%rsp),%xmm0
  movsd  0x20(%rsp),%xmm1
  movq   %r12,%xmm7
  divsd  %xmm7,%xmm1
  mulsd  %xmm0,%xmm1
  movsd  0x18(%rsp),%xmm0
  addsd  %xmm0,%xmm0
  mulsd  0x10(%rsp),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  %xmm2,%xmm0
  movsd  %xmm0,0x8(%rsp)
  movq   %rbp,%xmm7
  divsd  D85(%rip),%xmm7
  movapd %xmm7,%xmm0
  call   <log@plt>
  movapd %xmm0,%xmm1
  movsd  D167(%rip),%xmm2
  movq   %r14,%xmm7
  mulsd  %xmm7,%xmm2
  movapd %xmm2,%xmm0
  divsd  %xmm1,%xmm0
  mulsd  D85(%rip),%xmm0
  divsd  0x28(%rsp),%xmm0
  mulsd  D226(%rip),%xmm0
  movsd  D187(%rip),%xmm1
  call   <pow@plt>
  subsd  D248(%rip),%xmm0
  movsd  0x10(%rsp),%xmm6
  mulsd  %xmm6,%xmm0
  mulsd  %xmm6,%xmm0
  addsd  0x8(%rsp),%xmm0
  add    $0x38,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L12:
  call   <log@plt>
  jmp    L49
L52:
  xorpd  D229(%rip),%xmm0
  mulsd  D118(%rip),%xmm0
  call   <exp@plt>
  movapd %xmm0,%xmm3
  movsd  0x18(%rsp),%xmm5
  movapd %xmm5,%xmm2
  mulsd  %xmm5,%xmm2
  mulsd  D167(%rip),%xmm2
  movsd  D120(%rip),%xmm0
  mulsd  %xmm0,%xmm2
  mulsd  0x8(%rsp),%xmm0
  movsd  D153(%rip),%xmm1
  subsd  %xmm3,%xmm1
  mulsd  %xmm1,%xmm0
  divsd  %xmm0,%xmm2
  jmp    L45
```

tool_calls: name: retrieve_data
arguments: data_tag: D153
type_guessed: f64
name: retrieve_data
arguments: data_tag: D175
type_guessed: f64
name: retrieve_data
arguments: data_tag: D85
type_guessed: f64
name: retrieve_data
arguments: data_tag: D63
type_guessed: f64
name: retrieve_data
arguments: data_tag: D252
type_guessed: f64
name: retrieve_data
arguments: data_tag: D172
type_guessed: byte[8]
name: retrieve_data
arguments: data_tag: D117
type_guessed: f64
name: retrieve_data
arguments: data_tag: D89
type_guessed: f64
name: retrieve_data
arguments: data_tag: D125
type_guessed: f64
name: retrieve_data
arguments: data_tag: D223
type_guessed: f64
name: retrieve_data
arguments: data_tag: D225
type_guessed: f64
name: retrieve_data
arguments: data_tag: D246
type_guessed: byte[8]
name: retrieve_data
arguments: data_tag: D120
type_guessed: f64
name: retrieve_data
arguments: data_tag: D167
type_guessed: f64
name: retrieve_data
arguments: data_tag: D226
type_guessed: f64
name: retrieve_data
arguments: data_tag: D187
type_guessed: f64
name: retrieve_data
arguments: data_tag: D248
type_guessed: byte[8]
name: retrieve_data
arguments: data_tag: D229
type_guessed: byte[16]
name: retrieve_data
arguments: data_tag: D118
type_guessed: byte[8]

tool: D153: 1

tool: D175: 0

tool: D85: 0.009

tool: D63: 0.136

tool: D252: 0.667

tool: {"D172": [0x29,0x5c,0x8f,0xc2,0xf5,0x28,0x08,0x40]}

tool: D117: 0.264

tool: D89: 0.32

tool: D125: 273.15

tool: D223: 1.81

tool: D225: 101325

tool: {"D246": [0xb8,0x69,0x9e,0xe9,0x46,0xd4,0xeb,0x3e]}

tool: D120: 0.2

tool: D167: 0.4

tool: D226: 2.46

tool: D187: 0.25

tool: {"D248": [0x24,0x01,0x44,0xf2,0x07,0x03,0x00,0x40]}

tool: {"D229": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: {"D118": [0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x3f]}

assistant: ```c
double kb_1(double u_zref, double zref, double h, double lai, double fc, double tempka, double pa) {
  double c_d = 0.2;
  double c_t = 0.05;
  double k = 0.4;
  double Pr = 0.7;
  double hs = 0.009;
  double fs = 1.0 - fc;
  if (fc == 0.0)
    h = hs;
  double z0 = 0.136 * h;
  double u_h0 = u_zref * log(2.446) / log((zref - 0.667 * h) / z0);
  double ust2u_h = 0.32 - 0.264 / exp(15.1 * c_d * lai);
  double ustarh = ust2u_h * u_h0;
  double nu0 = 1.327 * pow(10, -5) * (101325.0 / pa) * pow((tempka / 273.15), 1.81);
  double nec = c_d * lai / (2.0 * pow(ust2u_h, 2));
  double re_star = hs * ustarh / nu0;
  double kb1;
  if (nec != 0.0)
    kb1 = (fc * fc) * k * c_d / (4.0 * c_t * ust2u_h * (1.0 - exp(-nec / 2.0)));
  else
    kb1 = 0.0;
  double c_t_star = pow(Pr, -2 / 3) * pow(re_star, -1 / 2);
  kb1 = kb1 + 2 * fc * fs * (k * ust2u_h * (z0 / h)) / c_t_star;
  re_star = hs * (u_zref * k / log(zref / hs)) / nu0;
  double kb1soil = pow(2.46 * (re_star), 0.25);
  kb1 = kb1 + (kb1soil - log(7.4)) * fs * fs;
  return (kb1);
}
```