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

```asm
<MDparseline>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x18(%rbp)
  mov    %rsi,-0x20(%rbp)
  mov    %rdx,-0x28(%rbp)
  mov    %rcx,-0x30(%rbp)
  mov    -0x28(%rbp),%rax
  movq   $0x0,(%rax)
  mov    -0x30(%rbp),%rax
  movq   $0x0,(%rax)
  mov    -0x18(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L155
L304:
  addq   $0x1,-0x8(%rbp)
L155:
  mov    -0x8(%rbp),%rax
  cmp    -0x20(%rbp),%rax
  jae    L54
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x20,%al
  je     L304
L54:
  mov    -0x8(%rbp),%rax
  cmp    -0x20(%rbp),%rax
  jb     L236
  mov    $0x0,%eax
  jmp    L219
L236:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  jne    L75
  addq   $0x1,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  jmp    L219
L75:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x23,%al
  jne    L402
  jmp    L186
L327:
  addq   $0x1,-0x8(%rbp)
L186:
  mov    -0x8(%rbp),%rax
  cmp    -0x20(%rbp),%rax
  jae    L296
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  jne    L327
L296:
  mov    -0x8(%rbp),%rax
  cmp    -0x20(%rbp),%rax
  jb     L267
  mov    $0x0,%eax
  jmp    L219
L267:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  jne    L402
  addq   $0x1,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  jmp    L219
L402:
  mov    -0x28(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  mov    %rdx,(%rax)
  jmp    L88
L160:
  addq   $0x1,-0x8(%rbp)
L88:
  mov    -0x8(%rbp),%rax
  cmp    -0x20(%rbp),%rax
  jae    L317
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x3a,%al
  je     L317
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  jne    L160
L317:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x3a,%al
  je     L440
  mov    $0x0,%eax
  jmp    L219
L440:
  addq   $0x1,-0x8(%rbp)
  jmp    L279
L361:
  addq   $0x1,-0x8(%rbp)
L279:
  mov    -0x8(%rbp),%rax
  cmp    -0x20(%rbp),%rax
  jae    L432
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x20,%al
  je     L361
  jmp    L432
L321:
  addq   $0x1,-0x8(%rbp)
L432:
  mov    -0x8(%rbp),%rax
  cmp    -0x20(%rbp),%rax
  jae    L436
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x23,%al
  je     L436
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  jne    L321
L436:
  mov    -0x8(%rbp),%rax
  cmp    -0x20(%rbp),%rax
  jb     L183
  mov    $0x0,%eax
  jmp    L219
L183:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  jne    L7
  addq   $0x1,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  jmp    L219
L7:
  addq   $0x1,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x3a,%al
  je     L196
  mov    $0x0,%eax
  jmp    L219
L196:
  addq   $0x1,-0x8(%rbp)
  jmp    L254
L198:
  addq   $0x1,-0x8(%rbp)
L254:
  mov    -0x8(%rbp),%rax
  cmp    -0x20(%rbp),%rax
  jae    L189
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x20,%al
  je     L198
L189:
  mov    -0x8(%rbp),%rax
  cmp    -0x20(%rbp),%rax
  jb     L23
  mov    $0x0,%eax
  jmp    L219
L23:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  jne    L399
  addq   $0x1,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  jmp    L219
L399:
  mov    -0x30(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  mov    %rdx,(%rax)
  jmp    L223
L427:
  addq   $0x1,-0x8(%rbp)
L223:
  mov    -0x8(%rbp),%rax
  cmp    -0x20(%rbp),%rax
  jae    L391
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  jne    L427
L391:
  mov    -0x8(%rbp),%rax
  cmp    -0x20(%rbp),%rax
  jb     L415
  mov    $0x0,%eax
  jmp    L219
L415:
  addq   $0x1,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
L219:
  pop    %rbp
  ret
```

assistant: ```c
char *MDparseline(char *line, char *limit, char **targ, char **tool) {
  char *next;
  *targ = 0;
  *tool = 0;
  next = line;
  while (next < limit && *next == ' ') {
    next++;
  };
  if ((next >= limit)) {
    return 0;
  }
  if ((*next == '\n')) {
    return ++next;
  }
  if (*next == '#') {
    while (next < limit && *next != '\n') {
      next++;
    };
    if ((next >= limit)) {
      return 0;
    }
    if ((*next == '\n')) {
      return ++next;
    }
  }
  *targ = next;
  while (next < limit && *next != ':' && *next != '\n') {
    next++;
  };
  if (*next != ':')
    return 0;
  next++;
  while (next < limit && *next == ' ') {
    next++;
  };
  while (next < limit && *next != '#' && *next != '\n') {
    next++;
  };
  if ((next >= limit)) {
    return 0;
  }
  if ((*next == '\n')) {
    return ++next;
  }
  if (*++next != ':')
    return 0;
  next++;
  while (next < limit && *next == ' ') {
    next++;
  };
  if ((next >= limit)) {
    return 0;
  }
  if ((*next == '\n')) {
    return ++next;
  }
  *tool = next;
  while (next < limit && *next != '\n') {
    next++;
  };
  if ((next >= limit)) {
    return 0;
  }
  return ++next;
}
```