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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x70,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x1,-0x6c(%rbp)
  lea    D46(%rip),%rax
  mov    %rax,%rsi
  lea    D16(%rip),%rax
  mov    %rax,%rdi
  call   <fopen@plt>
  mov    %rax,-0x60(%rbp)
  lea    D18(%rip),%rax
  mov    %rax,%rsi
  lea    D17(%rip),%rax
  mov    %rax,%rdi
  call   <fopen@plt>
  mov    %rax,-0x58(%rbp)
  jmp    L24
L67:
  mov    -0x60(%rbp),%rdx
  lea    -0x50(%rbp),%rax
  mov    %rdx,%rcx
  mov    $0x40,%edx
  mov    $0x1,%esi
  mov    %rax,%rdi
  call   <fread@plt>
  mov    %eax,-0x68(%rbp)
  movl   $0x0,-0x70(%rbp)
  jmp    L25
L106:
  mov    -0x70(%rbp),%eax
  cltq
  movzbl -0x50(%rbp,%rax,1),%eax
  cmp    $0x60,%al
  jle    L30
  mov    -0x70(%rbp),%eax
  cltq
  movzbl -0x50(%rbp,%rax,1),%eax
  movsbl %al,%edx
  mov    $0x7a,%eax
  sub    -0x6c(%rbp),%eax
  cmp    %eax,%edx
  jg     L30
  mov    -0x70(%rbp),%eax
  cltq
  movzbl -0x50(%rbp,%rax,1),%eax
  mov    %eax,%edx
  mov    -0x6c(%rbp),%eax
  add    %edx,%eax
  mov    %eax,%edx
  mov    -0x70(%rbp),%eax
  cltq
  mov    %dl,-0x50(%rbp,%rax,1)
  jmp    L53
L30:
  mov    -0x70(%rbp),%eax
  cltq
  movzbl -0x50(%rbp,%rax,1),%eax
  movsbl %al,%edx
  mov    $0x7a,%eax
  sub    -0x6c(%rbp),%eax
  cmp    %eax,%edx
  jle    L53
  mov    -0x70(%rbp),%eax
  cltq
  movzbl -0x50(%rbp,%rax,1),%eax
  cmp    $0x7a,%al
  jg     L53
  mov    -0x70(%rbp),%eax
  cltq
  movzbl -0x50(%rbp,%rax,1),%eax
  mov    %eax,%edx
  mov    -0x6c(%rbp),%eax
  add    %edx,%eax
  sub    $0x1a,%eax
  mov    %eax,%edx
  mov    -0x70(%rbp),%eax
  cltq
  mov    %dl,-0x50(%rbp,%rax,1)
L53:
  addl   $0x1,-0x70(%rbp)
L25:
  cmpl   $0x3f,-0x70(%rbp)
  jle    L106
  mov    -0x58(%rbp),%rcx
  mov    -0x68(%rbp),%edx
  lea    -0x50(%rbp),%rax
  mov    $0x1,%esi
  mov    %rax,%rdi
  call   <fwrite@plt>
  mov    %eax,-0x64(%rbp)
  mov    -0x64(%rbp),%eax
  cmp    -0x68(%rbp),%eax
  je     L24
  lea    D43(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  mov    $0x1,%edi
  call   <exit@plt>
L24:
  mov    -0x60(%rbp),%rax
  mov    %rax,%rdi
  call   <feof@plt>
  test   %eax,%eax
  je     L67
  mov    -0x60(%rbp),%rax
  mov    %rax,%rdi
  call   <fclose@plt>
  mov    -0x58(%rbp),%rax
  mov    %rax,%rdi
  call   <fclose@plt>
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L101
  call   <__stack_chk_fail@plt>
L101:
  leave
  ret
```

tool_calls: name: read_data
arguments: tag: D46
type_infered: string
name: read_data
arguments: tag: D16
type_infered: string
name: read_data
arguments: tag: D18
type_infered: string
name: read_data
arguments: tag: D17
type_infered: string
name: read_data
arguments: tag: D43
type_infered: string

tool: D46: rt

tool: D16: text1.txt

tool: D18: wt

tool: D17: encrypted.txt

tool: D43: Error in write command!


assistant: ```c
int main() {
  int i, n = 1, nr, nw;
  char buf[64];
  FILE *fpR, *fpW;
  fpR = fopen("text1.txt", "rt");
  fpW = fopen("encrypted.txt", "wt");
  while (!feof(fpR)) {
    nr = fread(buf, 1, 64, fpR);
    for (i = 0; i < 64; i++) {
      if (buf[i] >= 'a' && buf[i] <= ('z' - n)) {
        buf[i] += n;
      } else if (buf[i] > ('z' - n) && buf[i] <= 'z') {
        buf[i] += (n - (26));
      }
    }
    nw = fwrite(buf, 1, nr, fpW);
    if (nw != nr) {
      printf("Error in write command!\n");
      getchar();
      exit(1);
    }
  }
  fclose(fpR);
  fclose(fpW);
  return 0;
}
```