user: What is the c source code of the assembly code below:

```asm
<bitstuff>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %r12
  mov    %rdi,%r12
  sub    $0x18,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x18(%rbp)
  xor    %eax,%eax
  call   <strlen@plt>
  mov    %rsp,%rcx
  mov    %eax,%edi
  cltq
  imul   $0x66666667,%rax,%rax
  mov    %edi,%edx
  sar    $0x1f,%edx
  sar    $0x21,%rax
  sub    %edx,%eax
  lea    (%rax,%rax,2),%eax
  lea    0x1(%rax,%rax,1),%eax
  cltq
  add    $0xf,%rax
  mov    %rax,%rdx
  and    $0xfffffffffffff000,%rax
  sub    %rax,%rcx
  and    $0xfffffffffffffff0,%rdx
  cmp    %rcx,%rsp
  je     L113
L21:
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  cmp    %rcx,%rsp
  jne    L21
L113:
  and    $0xfff,%edx
  sub    %rdx,%rsp
  test   %rdx,%rdx
  jne    L30
L135:
  mov    %rsp,%r9
  xor    %edx,%edx
  test   %edi,%edi
  jle    L110
  xor    %eax,%eax
  jmp    L104
  nopl   0x0(%rax,%rax,1)
L68:
  add    $0x1,%eax
  add    $0x1,%edx
  cmp    %eax,%edi
  jle    L110
L104:
  movslq %eax,%rsi
  movslq %edx,%r8
  movzbl (%r12,%rsi,1),%ecx
  mov    %cl,(%r9,%r8,1)
  cmp    $0x30,%cl
  jne    L68
  movsbl 0x1(%r12,%rsi,1),%ecx
  sub    $0x30,%ecx
  cmp    $0x1,%edi
  jle    L99
  movsbl 0x2(%r12,%rsi,1),%r8d
  lea    -0x30(%rcx,%r8,1),%ecx
  cmp    $0x2,%edi
  jle    L99
  movsbl 0x3(%r12,%rsi,1),%r8d
  lea    -0x30(%rcx,%r8,1),%ecx
  cmp    $0x3,%edi
  jle    L99
  movsbl 0x4(%r12,%rsi,1),%r8d
  lea    -0x30(%rcx,%r8,1),%ecx
  cmp    $0x4,%edi
  jle    L99
  movsbl 0x5(%r12,%rsi,1),%esi
  lea    -0x30(%rcx,%rsi,1),%ecx
L99:
  cmp    $0x5,%ecx
  jne    L68
  lea    0x1(%rdx),%ecx
  add    $0x5,%eax
  movslq %ecx,%rcx
  add    $0x1,%eax
  movb   $0x31,(%r9,%rcx,1)
  lea    0x2(%rdx),%ecx
  movslq %ecx,%rcx
  movb   $0x31,(%r9,%rcx,1)
  lea    0x3(%rdx),%ecx
  movslq %ecx,%rcx
  movb   $0x31,(%r9,%rcx,1)
  lea    0x4(%rdx),%ecx
  movslq %ecx,%rcx
  movb   $0x31,(%r9,%rcx,1)
  lea    0x5(%rdx),%ecx
  add    $0x6,%edx
  movslq %ecx,%rcx
  movb   $0x31,(%r9,%rcx,1)
  movslq %edx,%rcx
  add    $0x1,%edx
  movb   $0x30,(%r9,%rcx,1)
  cmp    %eax,%edi
  jg     L104
  nopw   0x0(%rax,%rax,1)
L110:
  movslq %edx,%rdx
  mov    %r9,%rsi
  mov    %r12,%rdi
  movb   $0x0,(%r9,%rdx,1)
  call   <strcpy@plt>
  mov    %r12,%rsi
  lea    D9(%rip),%rdi
  call   <printf@plt>
  mov    -0x18(%rbp),%rax
  sub    %fs:0x28,%rax
  jne    L134
  mov    -0x8(%rbp),%r12
  leave
  ret
  nop
L30:
  orq    $0x0,-0x8(%rsp,%rdx,1)
  jmp    L135
L134:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: tag: D9
datatype: string

tool: D9: 
Stuffed Data : %s


assistant: ```c
void bitstuff(char *data) {
  int len = strlen(data);
  char stuffedString[(len / 5) * 6 + 1];
  int i = 0, j, k = 0, sum;
  while (i < len) {
    stuffedString[k] = data[i];
    if (data[i] == '0') {
      j = 0;
      sum = 0;
      while (j < 5 && j < len) {
        sum += data[j + i + 1] - '0';
        j++;
      }
      if (sum == 5) {
        i += 5;
        k++;
        j = 0;
        while (j < 5) {
          stuffedString[k] = '1';
          k++;
          j++;
        }
        stuffedString[k] = '0';
      }
    }
    i++;
    k++;
  }
  stuffedString[k] = '\0';
  strcpy(data, stuffedString);
  printf("\nStuffed Data : %s\n", data);
}
```