user: Converte this assembly snippet into its equivalent C code:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    $0x0,%eax
  call   <hwloc_bitmap_alloc@plt>
  mov    %eax,-0x8(%rbp)
  mov    $0x0,%eax
  call   <hwloc_bitmap_alloc@plt>
  mov    %eax,-0x4(%rbp)
  mov    -0x8(%rbp),%eax
  mov    %eax,%edi
  call   <hwloc_bitmap_singlify@plt>
  mov    -0x8(%rbp),%eax
  mov    %eax,%edi
  call   <hwloc_bitmap_iszero@plt>
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%eax
  mov    %eax,%edi
  call   <hwloc_bitmap_fill@plt>
  mov    -0x8(%rbp),%eax
  mov    %eax,%edi
  call   <hwloc_bitmap_singlify@plt>
  mov    -0x4(%rbp),%eax
  mov    %eax,%edi
  call   <hwloc_bitmap_zero@plt>
  mov    -0x4(%rbp),%eax
  mov    $0x0,%esi
  mov    %eax,%edi
  call   <hwloc_bitmap_set@plt>
  mov    -0x4(%rbp),%edx
  mov    -0x8(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <hwloc_bitmap_isequal@plt>
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x4(%rbp),%edx
  mov    -0x8(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <hwloc_bitmap_compare@plt>
  test   %eax,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%eax
  mov    %eax,%edi
  call   <hwloc_bitmap_zero@plt>
  mov    -0x8(%rbp),%eax
  mov    $0x2d,%esi
  mov    %eax,%edi
  call   <hwloc_bitmap_set@plt>
  mov    -0x8(%rbp),%eax
  mov    $0x2e,%esi
  mov    %eax,%edi
  call   <hwloc_bitmap_set@plt>
  mov    -0x8(%rbp),%eax
  mov    $0x205,%esi
  mov    %eax,%edi
  call   <hwloc_bitmap_set@plt>
  mov    -0x8(%rbp),%eax
  mov    %eax,%edi
  call   <hwloc_bitmap_singlify@plt>
  mov    -0x4(%rbp),%eax
  mov    %eax,%edi
  call   <hwloc_bitmap_zero@plt>
  mov    -0x4(%rbp),%eax
  mov    $0x2d,%esi
  mov    %eax,%edi
  call   <hwloc_bitmap_set@plt>
  mov    -0x4(%rbp),%edx
  mov    -0x8(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <hwloc_bitmap_isequal@plt>
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x4(%rbp),%edx
  mov    -0x8(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <hwloc_bitmap_compare@plt>
  test   %eax,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%eax
  mov    %eax,%edi
  call   <hwloc_bitmap_free@plt>
  mov    -0x4(%rbp),%eax
  mov    %eax,%edi
  call   <hwloc_bitmap_free@plt>
  mov    $0x0,%eax
  leave
  ret
```

assistant: ```c
int main(void) {
  hwloc_bitmap_t orig, expected;
  orig = hwloc_bitmap_alloc();
  expected = hwloc_bitmap_alloc();
  hwloc_bitmap_singlify(orig);
  assert(hwloc_bitmap_iszero(orig));
  hwloc_bitmap_fill(orig);
  hwloc_bitmap_singlify(orig);
  hwloc_bitmap_zero(expected);
  hwloc_bitmap_set(expected, 0);
  assert(hwloc_bitmap_isequal(orig, expected));
  assert(!hwloc_bitmap_compare(orig, expected));
  hwloc_bitmap_zero(orig);
  hwloc_bitmap_set(orig, 45);
  hwloc_bitmap_set(orig, 46);
  hwloc_bitmap_set(orig, 517);
  hwloc_bitmap_singlify(orig);
  hwloc_bitmap_zero(expected);
  hwloc_bitmap_set(expected, 45);
  assert(hwloc_bitmap_isequal(orig, expected));
  assert(!hwloc_bitmap_compare(orig, expected));
  hwloc_bitmap_free(orig);
  hwloc_bitmap_free(expected);
  return 0;
}
```