user: Translate the below assembly code into C programming language:

```asm
<epk_parse_config>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x238,%rsp
  mov    %rdi,-0x238(%rbp)
  mov    %rsi,-0x240(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x18(%rbp)
  xor    %eax,%eax
  jmp    L60
L121:
  lea    -0x220(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cmp    $0x1ff,%eax
  jne    L166
  movzbl -0x21(%rbp),%eax
  cmp    $0xa,%al
  je     L166
  lea    -0x220(%rbp),%rdx
  mov    -0x240(%rbp),%rax
  mov    %rax,%rsi
  lea    D3(%rip),%rax
  mov    %rax,%rdi
  call   <elg_warning@plt>
  jmp    L86
L166:
  lea    -0x220(%rbp),%rax
  mov    %rax,-0x230(%rbp)
  jmp    L21
L38:
  addq   $0x1,-0x230(%rbp)
L21:
  mov    -0x230(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L153
  mov    -0x230(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isspace@plt>
  test   %rax,%rax
  jne    L38
L153:
  mov    -0x230(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x23,%al
  jne    L28
  jmp    L60
L34:
  addq   $0x1,-0x230(%rbp)
L28:
  mov    -0x230(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L97
  mov    -0x230(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x3d,%al
  jne    L34
L97:
  mov    -0x230(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x3d,%al
  je     L71
  subq   $0x1,-0x230(%rbp)
  mov    -0x230(%rbp),%rax
  movb   $0x0,(%rax)
  mov    -0x240(%rbp),%rdx
  mov    -0x230(%rbp),%rcx
  lea    -0x220(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <epk_check_syntax@plt>
  jmp    L60
L71:
  mov    -0x230(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x230(%rbp)
  movb   $0x0,(%rax)
  mov    -0x230(%rbp),%rax
  mov    %rax,-0x228(%rbp)
  jmp    L69
L140:
  addq   $0x1,-0x230(%rbp)
L69:
  mov    -0x230(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L63
  mov    -0x230(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x23,%al
  jne    L140
L63:
  mov    -0x230(%rbp),%rax
  movb   $0x0,(%rax)
  mov    -0x228(%rbp),%rax
  mov    %rax,%rdi
  call   <epk_format@plt>
  mov    %eax,%ebx
  lea    -0x220(%rbp),%rax
  mov    %rax,%rdi
  call   <epk_format@plt>
  mov    %ebx,%esi
  mov    %eax,%edi
  call   <epk_conf_set@plt>
L60:
  mov    -0x238(%rbp),%rdx
  lea    -0x220(%rbp),%rax
  mov    $0x200,%esi
  mov    %rax,%rdi
  call   <fgets@plt>
  test   %rax,%rax
  jne    L121
L86:
  nop
  mov    -0x18(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L57
  call   <__stack_chk_fail@plt>
L57:
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: data_tag: D3
datatype: string

tool: D3: Syntax error in %s::%s (Skipped parsing at overlong line)


assistant: ```c
void epk_parse_config(FILE *cfgFile, char *fname) {
  char buf[512], *it, *val;
  while (fgets(buf, 512, cfgFile)) {
    if ((strlen(buf) == 512 - 1) && (buf[512 - 1] != '\n')) {
      elg_warning("Syntax error in %s::%s (Skipped parsing at overlong line)\n", fname, buf);
      break;
    } else {
      it = buf;
      while (*it && isspace(*it)) {
        it++;
      }
      if (*it == '#') {
        continue;
      }
      while (*it && *it != '=') {
        it++;
      }
      if (*it != '=') {
        *--it = 0;
        epk_check_syntax(buf, it, fname);
        continue;
      }
      *it++ = 0;
      val = it;
      while (*it && *it != '#') {
        it++;
      }
      *it = 0;
      epk_conf_set(epk_format(buf), epk_format(val));
    }
  }
}
```