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

```asm
<compute_root_count>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rdi,%rbx
  sub    $0xe0,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0xd8(%rsp)
  xor    %eax,%eax
  lea    0x10(%rsp),%rbp
  lea    0xc(%rsp),%r12
  call   <syscon_read_standard_system@plt>
  lea    D83(%rip),%rdi
  call   <puts@plt>
  xor    %eax,%eax
  call   <syscon_write_standard_system@plt>
  xor    %eax,%eax
  call   <supporting_set_structure@plt>
  lea    D45(%rip),%rdi
  call   <puts@plt>
  xor    %eax,%eax
  call   <write_set_structure@plt>
  mov    %rbp,%rsi
  mov    %r12,%rdi
  call   <set_structure_string@plt>
  mov    %rbp,%rsi
  lea    D12(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D42(%rip),%rdi
  call   <puts@plt>
  xor    %eax,%eax
  call   <clear_set_structure@plt>
  lea    D65(%rip),%rdi
  call   <puts@plt>
  mov    0xc(%rsp),%edi
  mov    %rbp,%rsi
  call   <parse_set_structure@plt>
  lea    D19(%rip),%rdi
  call   <puts@plt>
  xor    %eax,%eax
  call   <write_set_structure@plt>
  mov    %r12,%rdi
  movl   $0x1,0xc(%rsp)
  call   <is_set_structure_supporting@plt>
  cmpl   $0x1,0xc(%rsp)
  je     L8
  lea    D29(%rip),%rdi
  call   <puts@plt>
L6:
  mov    %rbx,%rdi
  call   <linear_product_root_count@plt>
  mov    (%rbx),%esi
  lea    D2(%rip),%rdi
  mov    %eax,%r12d
  xor    %eax,%eax
  call   <printf@plt>
  mov    0xd8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L27
  add    $0xe0,%rsp
  mov    %r12d,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
  nopl   0x0(%rax,%rax,1)
L8:
  lea    D35(%rip),%rdi
  call   <puts@plt>
  jmp    L6
L27:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: data_label: D83
type: string
name: unpack_data
arguments: data_label: D45
type: string
name: unpack_data
arguments: data_label: D12
type: string
name: unpack_data
arguments: data_label: D42
type: string
name: unpack_data
arguments: data_label: D65
type: string
name: unpack_data
arguments: data_label: D19
type: string
name: unpack_data
arguments: data_label: D29
type: string
name: unpack_data
arguments: data_label: D2
type: string
name: unpack_data
arguments: data_label: D35
type: string

tool: D83: 
The system in the container : 

tool: D45: 
A supporting set structure : 

tool: D12: 
the set structure string : 
%s


tool: D42: clearing the set structure ...

tool: D65: parsing the set structure string ...

tool: D19: after parsing the set structure string :

tool: D29: The set structure does not support the polynomial system.

tool: D2: 
The linear-product root count : %d


tool: D35: The set structure supports the polynomial system.

assistant: ```c
int compute_root_count(int *r) {
  int fail, inout;
  fail = syscon_read_standard_system();
  printf("\nThe system in the container : \n");
  fail = syscon_write_standard_system();
  fail = supporting_set_structure();
  printf("\nA supporting set structure : \n");
  fail = write_set_structure();
  {
    int nc;
    char ss[200];
    fail = set_structure_string(&nc, ss);
    printf("\nthe set structure string : \n%s\n", ss);
    printf("clearing the set structure ...\n");
    clear_set_structure();
    printf("parsing the set structure string ...\n");
    parse_set_structure(nc, ss);
    printf("after parsing the set structure string :\n");
    fail = write_set_structure();
  }
  inout = 1;
  fail = is_set_structure_supporting(&inout);
  if (inout == 1)
    printf("The set structure supports the polynomial system.\n");
  else
    printf("The set structure does not support the polynomial system.\n");
  fail = linear_product_root_count(r);
  printf("\nThe linear-product root count : %d\n", *r);
  return fail;
}
```