user: 请将以下的汇编代码转换成C语言代码：

```asm
<decode_array>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x48,%rsp
  mov    %rdi,-0x38(%rbp)
  mov    %rsi,-0x40(%rbp)
  mov    %rdx,-0x48(%rbp)
  mov    %rcx,-0x50(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x18(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x28(%rbp)
  movl   $0x0,-0x24(%rbp)
  movl   $0x0,-0x20(%rbp)
  mov    -0x40(%rbp),%rax
  mov    %rax,%rdi
  call   <decoded_dest_size@plt>
  cmp    %rax,-0x50(%rbp)
  jae    L170
  mov    $0xffffffffffffffff,%rax
  jmp    L178
L108:
  addl   $0x1,-0x24(%rbp)
L185:
  mov    -0x24(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0xd,%al
  je     L181
  mov    -0x24(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  jne    L121
L181:
  mov    -0x24(%rbp),%eax
  cltq
  cmp    %rax,-0x40(%rbp)
  ja     L108
L121:
  mov    -0x24(%rbp),%eax
  cltq
  cmp    %rax,-0x40(%rbp)
  je     L86
  movl   $0x0,-0x20(%rbp)
  jmp    L130
L133:
  mov    -0x24(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x24(%rbp)
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%edx
  mov    -0x20(%rbp),%eax
  cltq
  mov    %dl,-0x1c(%rbp,%rax,1)
  mov    -0x20(%rbp),%eax
  cltq
  movzbl -0x1c(%rbp,%rax,1),%eax
  cmp    $0xd,%al
  je     L143
  mov    -0x20(%rbp),%eax
  cltq
  movzbl -0x1c(%rbp,%rax,1),%eax
  cmp    $0xa,%al
  jne    L4
L143:
  mov    -0x24(%rbp),%eax
  cltq
  cmp    %rax,-0x40(%rbp)
  ja     L133
L4:
  mov    -0x20(%rbp),%eax
  cltq
  movzbl -0x1c(%rbp,%rax,1),%eax
  cmp    $0xd,%al
  je     L175
  mov    -0x20(%rbp),%eax
  cltq
  movzbl -0x1c(%rbp,%rax,1),%eax
  cmp    $0xa,%al
  jne    L51
L175:
  mov    $0xffffffffffffffff,%rax
  jmp    L178
L51:
  addl   $0x1,-0x20(%rbp)
L130:
  cmpl   $0x3,-0x20(%rbp)
  jle    L133
  movzbl -0x1b(%rbp),%eax
  movsbl %al,%ecx
  movzbl -0x1c(%rbp),%eax
  movsbl %al,%edx
  mov    -0x28(%rbp),%eax
  lea    0x1(%rax),%esi
  mov    %esi,-0x28(%rbp)
  movslq %eax,%rsi
  mov    -0x48(%rbp),%rax
  lea    (%rsi,%rax,1),%rbx
  mov    %ecx,%esi
  mov    %edx,%edi
  call   <decode_base64_pair1@plt>
  mov    %al,(%rbx)
  movzbl -0x1a(%rbp),%eax
  cmp    $0x3d,%al
  je     L3
  movzbl -0x1a(%rbp),%eax
  movsbl %al,%ecx
  movzbl -0x1b(%rbp),%eax
  movsbl %al,%edx
  mov    -0x28(%rbp),%eax
  lea    0x1(%rax),%esi
  mov    %esi,-0x28(%rbp)
  movslq %eax,%rsi
  mov    -0x48(%rbp),%rax
  lea    (%rsi,%rax,1),%rbx
  mov    %ecx,%esi
  mov    %edx,%edi
  call   <decode_base64_pair2@plt>
  mov    %al,(%rbx)
L3:
  movzbl -0x19(%rbp),%eax
  cmp    $0x3d,%al
  je     L170
  movzbl -0x19(%rbp),%eax
  movsbl %al,%ecx
  movzbl -0x1a(%rbp),%eax
  movsbl %al,%edx
  mov    -0x28(%rbp),%eax
  lea    0x1(%rax),%esi
  mov    %esi,-0x28(%rbp)
  movslq %eax,%rsi
  mov    -0x48(%rbp),%rax
  lea    (%rsi,%rax,1),%rbx
  mov    %ecx,%esi
  mov    %edx,%edi
  call   <decode_base64_pair3@plt>
  mov    %al,(%rbx)
L170:
  mov    -0x24(%rbp),%eax
  cltq
  cmp    %rax,-0x40(%rbp)
  ja     L185
  jmp    L94
L86:
  nop
L94:
  mov    -0x28(%rbp),%eax
  cltq
L178:
  mov    -0x18(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L38
  call   <__stack_chk_fail@plt>
L38:
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

assistant: ```c
size_t decode_array(const char *src_array, const size_t src_len, char *dest_array, const size_t dest_size) {
  int cnt = 0;
  char ch[4];
  int i = 0;
  int j = 0;
  if (dest_size < decoded_dest_size(src_len))
    return -1;
  while (i < src_len) {
    while ((src_array[i] == '\r' || src_array[i] == '\n') && i < src_len) {
      ++i;
    }
    if (i == src_len)
      break;
    for (j = 0; j < 4; ++j) {
      do {
        ch[j] = src_array[i++];
      } while ((ch[j] == '\r' || ch[j] == '\n') && i < src_len);
      if (ch[j] == '\r' || ch[j] == '\n')
        return -1;
    }
    dest_array[cnt++] = decode_base64_pair1(ch[0], ch[1]);
    if (ch[2] != '=')
      dest_array[cnt++] = decode_base64_pair2(ch[1], ch[2]);
    if (ch[3] != '=')
      dest_array[cnt++] = decode_base64_pair3(ch[2], ch[3]);
  }
  return cnt;
}
```