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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %r13
  push   %r12
  push   %rbx
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  sub    $0x78,%rsp
  mov    %edi,-0x1084(%rbp)
  mov    %rsi,-0x1090(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x28(%rbp)
  xor    %eax,%eax
  movl   $0x1,-0x107c(%rbp)
  jmp    L237
L70:
  mov    -0x107c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x1090(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,-0x1070(%rbp)
  mov    D16(%rip),%rax
  mov    (%rax),%edx
  mov    -0x1070(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <open@plt>
  mov    %eax,-0x1078(%rbp)
  cmpl   $0x0,-0x1078(%rbp)
  jns    L286
  mov    -0x1070(%rbp),%rax
  mov    %rax,%rdi
  call   <perror@plt>
  jmp    L308
L286:
  lea    -0x1058(%rbp),%rdx
  mov    -0x1078(%rbp),%eax
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <fstat@plt>
  test   %rax,%rax
  jns    L148
  mov    -0x1070(%rbp),%rax
  mov    %rax,%rdi
  call   <perror@plt>
  jmp    L308
L148:
  mov    D28(%rip),%rax
  mov    (%rax),%edx
  mov    -0x1070(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <open@plt>
  mov    %eax,-0x1074(%rbp)
  cmpl   $0x0,-0x1074(%rbp)
  jns    L104
  mov    -0x1070(%rbp),%rax
  mov    %rax,%rdi
  call   <perror@plt>
  mov    -0x1078(%rbp),%eax
  mov    %eax,%edi
  call   <close@plt>
  jmp    L308
L104:
  lea    -0x1030(%rbp),%rax
  add    $0x1000,%rax
  mov    %rax,-0x1068(%rbp)
  lea    -0x1030(%rbp),%rbx
L231:
  mov    -0x1068(%rbp),%rax
  sub    %rbx,%rax
  mov    %eax,%edx
  mov    -0x1078(%rbp),%eax
  mov    %rbx,%rsi
  mov    %eax,%edi
  call   <full_read@plt>
  mov    %eax,%r12d
  test   %r12d,%r12d
  jns    L186
  mov    -0x1070(%rbp),%rax
  mov    %rax,%rdi
  call   <perror@plt>
  mov    -0x1074(%rbp),%eax
  mov    %eax,%edi
  call   <close@plt>
  mov    -0x1078(%rbp),%eax
  mov    %eax,%edi
  call   <close@plt>
  jmp    L308
L186:
  test   %r12d,%r12d
  je     L52
  lea    -0x1030(%rbp),%rdx
  mov    %rbx,%rax
  sub    %rdx,%rax
  mov    %eax,%edx
  mov    %r12d,%eax
  add    %edx,%eax
  mov    %eax,%r12d
  lea    -0x1030(%rbp),%rbx
  mov    %rbx,%r13
L194:
  movzbl (%rbx),%eax
  cmp    $0xd,%al
  jne    L215
  cmp    $0x1,%r12d
  jle    L255
  lea    0x1(%rbx),%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  jne    L26
  mov    %r13,%rax
  lea    0x1(%rax),%r13
  movb   $0xa,(%rax)
  add    $0x2,%rbx
  sub    $0x2,%r12d
  jmp    L239
L26:
  mov    %rbx,%rdx
  lea    0x1(%rdx),%rbx
  mov    %r13,%rax
  lea    0x1(%rax),%r13
  movzbl (%rdx),%edx
  mov    %dl,(%rax)
  sub    $0x1,%r12d
  jmp    L239
L215:
  mov    %rbx,%rdx
  lea    0x1(%rdx),%rbx
  mov    %r13,%rax
  lea    0x1(%rax),%r13
  movzbl (%rdx),%edx
  mov    %dl,(%rax)
  sub    $0x1,%r12d
L239:
  test   %r12d,%r12d
  jg     L194
  jmp    L14
L255:
  nop
L14:
  lea    -0x1030(%rbp),%rdx
  mov    %r13,%rax
  sub    %rdx,%rax
  mov    %eax,%edx
  lea    -0x1030(%rbp),%rcx
  mov    -0x1074(%rbp),%eax
  mov    %rcx,%rsi
  mov    %eax,%edi
  call   <full_write@plt>
  test   %rax,%rax
  jns    L155
  mov    -0x1070(%rbp),%rax
  mov    %rax,%rdi
  call   <perror@plt>
  mov    -0x1074(%rbp),%eax
  mov    %eax,%edi
  call   <close@plt>
  mov    -0x1078(%rbp),%eax
  mov    %eax,%edi
  call   <close@plt>
  jmp    L308
L155:
  test   %r12d,%r12d
  jle    L241
  movzbl (%rbx),%eax
  mov    %al,-0x1030(%rbp)
  lea    -0x1030(%rbp),%rax
  lea    0x1(%rax),%rbx
  jmp    L231
L241:
  lea    -0x1030(%rbp),%rbx
  jmp    L231
L52:
  nop
  lea    -0x1030(%rbp),%rax
  cmp    %rax,%rbx
  je     L284
  lea    -0x1030(%rbp),%rdx
  mov    %rbx,%rax
  sub    %rdx,%rax
  mov    %eax,%edx
  lea    -0x1030(%rbp),%rcx
  mov    -0x1074(%rbp),%eax
  mov    %rcx,%rsi
  mov    %eax,%edi
  call   <full_write@plt>
  test   %rax,%rax
  jns    L284
  mov    -0x1070(%rbp),%rax
  mov    %rax,%rdi
  call   <perror@plt>
  mov    -0x1074(%rbp),%eax
  mov    %eax,%edi
  call   <close@plt>
  mov    -0x1078(%rbp),%eax
  mov    %eax,%edi
  call   <close@plt>
  jmp    L308
L284:
  mov    D20(%rip),%rax
  mov    (%rax),%edx
  mov    -0x1074(%rbp),%eax
  mov    $0x0,%esi
  mov    %eax,%edi
  call   <lseek@plt>
  mov    %rax,-0x1060(%rbp)
  cmpq   $0x0,-0x1060(%rbp)
  jns    L132
  mov    -0x1070(%rbp),%rax
  mov    %rax,%rdi
  call   <perror@plt>
  mov    -0x1074(%rbp),%eax
  mov    %eax,%edi
  call   <close@plt>
  mov    -0x1078(%rbp),%eax
  mov    %eax,%edi
  call   <close@plt>
  jmp    L308
L132:
  mov    -0x1060(%rbp),%rdx
  mov    -0x1074(%rbp),%eax
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <ftruncate@plt>
  test   %rax,%rax
  jns    L275
  mov    -0x1070(%rbp),%rax
  mov    %rax,%rdi
  call   <perror@plt>
  mov    -0x1074(%rbp),%eax
  mov    %eax,%edi
  call   <close@plt>
  mov    -0x1078(%rbp),%eax
  mov    %eax,%edi
  call   <close@plt>
  jmp    L308
L275:
  mov    -0x1074(%rbp),%eax
  mov    %eax,%edi
  call   <close@plt>
  mov    -0x1078(%rbp),%eax
  mov    %eax,%edi
  call   <close@plt>
  mov    -0x1054(%rbp),%eax
  mov    %eax,-0x1048(%rbp)
  movq   $0x0,-0x1050(%rbp)
  mov    -0x1058(%rbp),%eax
  mov    %eax,-0x1038(%rbp)
  movq   $0x0,-0x1040(%rbp)
  lea    -0x1050(%rbp),%rdx
  mov    -0x1070(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <utimes@plt>
  test   %rax,%rax
  jns    L308
  mov    -0x1070(%rbp),%rax
  mov    %rax,%rdi
  call   <perror@plt>
L308:
  addl   $0x1,-0x107c(%rbp)
L237:
  mov    -0x107c(%rbp),%eax
  cmp    -0x1084(%rbp),%eax
  jl     L70
  mov    $0x0,%edi
  call   <exit@plt>
  mov    $0x0,%eax
  mov    -0x28(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L279
  call   <__stack_chk_fail@plt>
L279:
  add    $0x1078,%rsp
  pop    %rbx
  pop    %r12
  pop    %r13
  pop    %rbp
  ret
```

assistant: ```c
int main(int argc, char *argv[]) {
  int i;
  for (i = 1; i < argc; i++) {
    char *filename = argv[i];
    int rfd = open(filename, O_RDONLY);
    if (rfd < 0) {
      perror(filename);
      goto next;
    }
    {
      struct stat statbuf;
      if (fstat(rfd, &statbuf) < 0) {
        perror(filename);
        goto next;
      }
      {
        int wfd = open(filename, O_RDWR);
        if (wfd < 0) {
          perror(filename);
          close(rfd);
          goto next;
        }
        {
          char buffer[4096];
          char *bufend = &buffer[4096];
          register char *srcptr = &buffer[0];
          register char *destptr;
          while (1) {
            register int count = full_read(rfd, srcptr, bufend - srcptr);
            if (count < 0) {
              perror(filename);
              close(wfd);
              close(rfd);
              goto next;
            }
            if (count == 0)
              break;
            count += (srcptr - &buffer[0]);
            destptr = srcptr = &buffer[0];
            do {
              if (*srcptr == 13) {
                if (count > 1) {
                  if (srcptr[1] == 10) {
                    *destptr++ = 10;
                    srcptr += 2;
                    count -= 2;
                  } else {
                    *destptr++ = *srcptr++;
                    count--;
                  }
                } else
                  break;
              } else {
                *destptr++ = *srcptr++;
                count--;
              }
            } while (count > 0);
            if (full_write(wfd, buffer, destptr - buffer) < 0) {
              perror(filename);
              close(wfd);
              close(rfd);
              goto next;
            }
            if (count > 0) {
              buffer[0] = *srcptr;
              srcptr = &buffer[1];
            } else {
              srcptr = &buffer[0];
            }
          }
          if (srcptr != buffer) {
            if (full_write(wfd, buffer, srcptr - buffer) < 0) {
              perror(filename);
              close(wfd);
              close(rfd);
              goto next;
            }
          }
        }
        {
          off_t length = lseek(wfd, 0, SEEK_CUR);
          if (length < 0) {
            perror(filename);
            close(wfd);
            close(rfd);
            goto next;
          }
          if (ftruncate(wfd, length) < 0) {
            perror(filename);
            close(wfd);
            close(rfd);
            goto next;
          }
        }
        close(wfd);
      }
      close(rfd);
      {
        struct timeval tv[2];
        tv[0].tv_sec = statbuf.st_atime;
        tv[0].tv_usec = 0;
        tv[1].tv_sec = statbuf.st_mtime;
        tv[1].tv_usec = 0;
        if (utimes(filename, tv) < 0) {
          perror(filename);
          goto next;
        }
      }
    }
  next:;
  }
  exit(0);
}
```