user: What would the C source look like for the assembly code provided here:

```asm
<frd_to_hfocus>:
  endbr64
  push   %rbp
  mov    %rdi,%rbp
  mov    %rsi,%rdi
  push   %rbx
  mov    %rsi,%rbx
  sub    $0x8,%rsp
  call   <strlen@plt>
  cmp    $0xc,%eax
  jne    L96
  movzbl (%rbx),%edx
  lea    -0x30(%rdx),%eax
  cmp    $0x1,%al
  ja     L96
  movzbl 0x1(%rbx),%eax
  sub    $0x30,%eax
  cmp    $0x1,%al
  ja     L96
  movzbl 0x2(%rbx),%eax
  sub    $0x30,%eax
  cmp    $0x1,%al
  ja     L96
  movzbl 0x3(%rbx),%eax
  sub    $0x30,%eax
  cmp    $0x1,%al
  ja     L96
  movzbl 0x4(%rbx),%eax
  sub    $0x30,%eax
  cmp    $0x1,%al
  ja     L96
  movzbl 0x5(%rbx),%eax
  sub    $0x30,%eax
  cmp    $0x1,%al
  ja     L96
  movzbl 0x6(%rbx),%eax
  sub    $0x30,%eax
  cmp    $0x1,%al
  ja     L96
  movzbl 0x7(%rbx),%eax
  sub    $0x30,%eax
  cmp    $0x1,%al
  ja     L96
  movzbl 0x8(%rbx),%eax
  sub    $0x30,%eax
  cmp    $0x1,%al
  ja     L96
  movzbl 0x9(%rbx),%eax
  sub    $0x30,%eax
  cmp    $0x1,%al
  ja     L96
  movzbl 0xa(%rbx),%eax
  sub    $0x30,%eax
  cmp    $0x1,%al
  ja     L96
  movzbl 0xb(%rbx),%eax
  sub    $0x30,%eax
  cmp    $0x1,%al
  ja     L96
  cmp    $0x31,%dl
  mov    %rbp,%rdi
  lea    D12(%rip),%rsi
  sete   %dl
  movzbl %dl,%edx
  call   <mk2r_set_hfocus_value@plt>
  xor    %edx,%edx
  cmpb   $0x31,0x1(%rbx)
  mov    %rbp,%rdi
  sete   %dl
  lea    D68(%rip),%rsi
  call   <mk2r_set_hfocus_value@plt>
  xor    %edx,%edx
  cmpb   $0x31,0x2(%rbx)
  mov    %rbp,%rdi
  sete   %dl
  lea    D16(%rip),%rsi
  call   <mk2r_set_hfocus_value@plt>
  xor    %edx,%edx
  cmpb   $0x31,0x3(%rbx)
  mov    %rbp,%rdi
  sete   %dl
  lea    D39(%rip),%rsi
  call   <mk2r_set_hfocus_value@plt>
  xor    %edx,%edx
  cmpb   $0x31,0x4(%rbx)
  mov    %rbp,%rdi
  sete   %dl
  lea    D42(%rip),%rsi
  call   <mk2r_set_hfocus_value@plt>
  xor    %edx,%edx
  cmpb   $0x31,0x5(%rbx)
  mov    %rbp,%rdi
  sete   %dl
  lea    D50(%rip),%rsi
  call   <mk2r_set_hfocus_value@plt>
  xor    %edx,%edx
  cmpb   $0x31,0x6(%rbx)
  mov    %rbp,%rdi
  sete   %dl
  lea    D33(%rip),%rsi
  call   <mk2r_set_hfocus_value@plt>
  xor    %edx,%edx
  cmpb   $0x31,0x7(%rbx)
  mov    %rbp,%rdi
  sete   %dl
  lea    D91(%rip),%rsi
  call   <mk2r_set_hfocus_value@plt>
  xor    %edx,%edx
  cmpb   $0x31,0x8(%rbx)
  mov    %rbp,%rdi
  sete   %dl
  lea    D21(%rip),%rsi
  call   <mk2r_set_hfocus_value@plt>
  xor    %edx,%edx
  cmpb   $0x31,0x9(%rbx)
  mov    %rbp,%rdi
  sete   %dl
  lea    D102(%rip),%rsi
  call   <mk2r_set_hfocus_value@plt>
  xor    %edx,%edx
  cmpb   $0x31,0xa(%rbx)
  mov    %rbp,%rdi
  sete   %dl
  lea    D27(%rip),%rsi
  call   <mk2r_set_hfocus_value@plt>
  xor    %edx,%edx
  cmpb   $0x31,0xb(%rbx)
  mov    %rbp,%rdi
  sete   %dl
  lea    D76(%rip),%rsi
  call   <mk2r_set_hfocus_value@plt>
  mov    %rbp,%rdi
  mov    $0x1,%edx
  lea    D0(%rip),%rsi
  call   <mk2r_set_hfocus_value@plt>
  add    $0x8,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  ret
  nopl   0x0(%rax)
L96:
  add    $0x8,%rsp
  mov    $0xffffffff,%eax
  pop    %rbx
  pop    %rbp
  ret
```

tool_calls: name: retrieve_data
arguments: label: D12
type: string
name: retrieve_data
arguments: label: D68
type: string
name: retrieve_data
arguments: label: D16
type: string
name: retrieve_data
arguments: label: D39
type: string
name: retrieve_data
arguments: label: D42
type: string
name: retrieve_data
arguments: label: D50
type: string
name: retrieve_data
arguments: label: D33
type: string
name: retrieve_data
arguments: label: D91
type: string
name: retrieve_data
arguments: label: D21
type: string
name: retrieve_data
arguments: label: D102
type: string
name: retrieve_data
arguments: label: D27
type: string
name: retrieve_data
arguments: label: D76
type: string
name: retrieve_data
arguments: label: D0
type: string

tool: D12: ears.left.r1Main

tool: D68: ears.left.r1Sub

tool: D16: ears.left.scLeft

tool: D39: ears.left.scRight

tool: D42: ears.left.r2Main

tool: D50: ears.left.r2Sub

tool: D33: ears.right.r1Main

tool: D91: ears.right.r1Sub

tool: D21: ears.right.scLeft

tool: D102: ears.right.scRight

tool: D27: ears.right.r2Main

tool: D76: ears.right.r2Sub

tool: D0: directControl

assistant: ```c
int frd_to_hfocus(uint8_t hfocus[8], const char *frd_arg) {
  int i;
  if (strlen(frd_arg) != 12)
    return -1;
  for (i = 0; i < 12; i++)
    if (frd_arg[i] != '0' && frd_arg[i] != '1')
      return -1;
  i = 0;
  mk2r_set_hfocus_value(hfocus, "ears.left.r1Main", frd_arg[i++] == '1');
  mk2r_set_hfocus_value(hfocus, "ears.left.r1Sub", frd_arg[i++] == '1');
  mk2r_set_hfocus_value(hfocus, "ears.left.scLeft", frd_arg[i++] == '1');
  mk2r_set_hfocus_value(hfocus, "ears.left.scRight", frd_arg[i++] == '1');
  mk2r_set_hfocus_value(hfocus, "ears.left.r2Main", frd_arg[i++] == '1');
  mk2r_set_hfocus_value(hfocus, "ears.left.r2Sub", frd_arg[i++] == '1');
  mk2r_set_hfocus_value(hfocus, "ears.right.r1Main", frd_arg[i++] == '1');
  mk2r_set_hfocus_value(hfocus, "ears.right.r1Sub", frd_arg[i++] == '1');
  mk2r_set_hfocus_value(hfocus, "ears.right.scLeft", frd_arg[i++] == '1');
  mk2r_set_hfocus_value(hfocus, "ears.right.scRight", frd_arg[i++] == '1');
  mk2r_set_hfocus_value(hfocus, "ears.right.r2Main", frd_arg[i++] == '1');
  mk2r_set_hfocus_value(hfocus, "ears.right.r2Sub", frd_arg[i++] == '1');
  mk2r_set_hfocus_value(hfocus, "directControl", 1);
  return 0;
}
```