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

```asm
<scramble_ata_string>:
  endbr64
  mov    %rdi,%rdx
  mov    %esi,%ecx
  test   %esi,%esi
  jle    L119
  lea    -0x1(%rsi),%eax
  mov    %eax,%edi
  shr    %edi
  add    $0x1,%edi
  cmp    $0x1d,%eax
  jbe    L106
  mov    %edi,%esi
  movdqa D9(%rip),%xmm3
  mov    %rdx,%rax
  shr    $0x4,%esi
  sub    $0x1,%esi
  shl    $0x5,%rsi
  lea    0x20(%rdx,%rsi,1),%rsi
L69:
  movdqu (%rax),%xmm1
  movdqu 0x10(%rax),%xmm0
  add    $0x20,%rax
  movdqu -0x10(%rax),%xmm2
  pand   %xmm3,%xmm0
  pand   %xmm3,%xmm1
  packuswb %xmm0,%xmm1
  movdqu -0x20(%rax),%xmm0
  psrlw  $0x8,%xmm2
  psrlw  $0x8,%xmm0
  packuswb %xmm2,%xmm0
  movdqa %xmm0,%xmm2
  punpckhbw %xmm1,%xmm0
  punpcklbw %xmm1,%xmm2
  movups %xmm0,-0x10(%rax)
  movups %xmm2,-0x20(%rax)
  cmp    %rax,%rsi
  jne    L69
  mov    %edi,%esi
  and    $0xfffffff0,%esi
  lea    (%rsi,%rsi,1),%eax
  cmp    %esi,%edi
  je     L150
L128:
  movslq %eax,%rsi
  lea    (%rdx,%rsi,1),%rdi
  lea    0x1(%rdx,%rsi,1),%rsi
  movzbl (%rsi),%r9d
  movzbl (%rdi),%r8d
  mov    %r9b,(%rdi)
  mov    %r8b,(%rsi)
  lea    0x2(%rax),%esi
  cmp    %esi,%ecx
  jle    L119
  movslq %esi,%rsi
  lea    (%rdx,%rsi,1),%rdi
  lea    0x1(%rdx,%rsi,1),%rsi
  movzbl (%rsi),%r9d
  movzbl (%rdi),%r8d
  mov    %r9b,(%rdi)
  mov    %r8b,(%rsi)
  lea    0x4(%rax),%esi
  cmp    %esi,%ecx
  jle    L119
  movslq %esi,%rsi
  lea    (%rdx,%rsi,1),%rdi
  lea    0x1(%rdx,%rsi,1),%rsi
  movzbl (%rsi),%r9d
  movzbl (%rdi),%r8d
  mov    %r9b,(%rdi)
  mov    %r8b,(%rsi)
  lea    0x6(%rax),%esi
  cmp    %esi,%ecx
  jle    L119
  movslq %esi,%rsi
  lea    (%rdx,%rsi,1),%rdi
  lea    0x1(%rdx,%rsi,1),%rsi
  movzbl (%rsi),%r9d
  movzbl (%rdi),%r8d
  mov    %r9b,(%rdi)
  mov    %r8b,(%rsi)
  lea    0x8(%rax),%esi
  cmp    %esi,%ecx
  jle    L119
  movslq %esi,%rsi
  lea    (%rdx,%rsi,1),%rdi
  lea    0x1(%rdx,%rsi,1),%rsi
  movzbl (%rsi),%r9d
  movzbl (%rdi),%r8d
  mov    %r9b,(%rdi)
  mov    %r8b,(%rsi)
  lea    0xa(%rax),%esi
  cmp    %esi,%ecx
  jle    L119
  movslq %esi,%rsi
  lea    (%rdx,%rsi,1),%rdi
  lea    0x1(%rdx,%rsi,1),%rsi
  movzbl (%rsi),%r9d
  movzbl (%rdi),%r8d
  mov    %r9b,(%rdi)
  mov    %r8b,(%rsi)
  lea    0xc(%rax),%esi
  cmp    %esi,%ecx
  jle    L119
  movslq %esi,%rsi
  lea    (%rdx,%rsi,1),%rdi
  lea    0x1(%rdx,%rsi,1),%rsi
  movzbl (%rsi),%r9d
  movzbl (%rdi),%r8d
  mov    %r9b,(%rdi)
  mov    %r8b,(%rsi)
  lea    0xe(%rax),%esi
  cmp    %esi,%ecx
  jle    L119
  movslq %esi,%rsi
  lea    (%rdx,%rsi,1),%rdi
  lea    0x1(%rdx,%rsi,1),%rsi
  movzbl (%rsi),%r9d
  movzbl (%rdi),%r8d
  mov    %r9b,(%rdi)
  mov    %r8b,(%rsi)
  lea    0x10(%rax),%esi
  cmp    %esi,%ecx
  jle    L119
  movslq %esi,%rsi
  lea    (%rdx,%rsi,1),%rdi
  lea    0x1(%rdx,%rsi,1),%rsi
  movzbl (%rsi),%r9d
  movzbl (%rdi),%r8d
  mov    %r9b,(%rdi)
  mov    %r8b,(%rsi)
  lea    0x12(%rax),%esi
  cmp    %esi,%ecx
  jle    L119
  movslq %esi,%rsi
  lea    (%rdx,%rsi,1),%rdi
  lea    0x1(%rdx,%rsi,1),%rsi
  movzbl (%rsi),%r9d
  movzbl (%rdi),%r8d
  mov    %r9b,(%rdi)
  mov    %r8b,(%rsi)
  lea    0x14(%rax),%esi
  cmp    %esi,%ecx
  jle    L119
  movslq %esi,%rsi
  lea    (%rdx,%rsi,1),%rdi
  lea    0x1(%rdx,%rsi,1),%rsi
  movzbl (%rsi),%r9d
  movzbl (%rdi),%r8d
  mov    %r9b,(%rdi)
  mov    %r8b,(%rsi)
  lea    0x16(%rax),%esi
  cmp    %esi,%ecx
  jle    L119
  movslq %esi,%rsi
  lea    (%rdx,%rsi,1),%rdi
  lea    0x1(%rdx,%rsi,1),%rsi
  movzbl (%rsi),%r9d
  movzbl (%rdi),%r8d
  mov    %r9b,(%rdi)
  mov    %r8b,(%rsi)
  lea    0x18(%rax),%esi
  cmp    %esi,%ecx
  jle    L119
  movslq %esi,%rsi
  lea    (%rdx,%rsi,1),%rdi
  lea    0x1(%rdx,%rsi,1),%rsi
  movzbl (%rsi),%r9d
  movzbl (%rdi),%r8d
  mov    %r9b,(%rdi)
  mov    %r8b,(%rsi)
  lea    0x1a(%rax),%esi
  cmp    %esi,%ecx
  jle    L119
  movslq %esi,%rsi
  add    $0x1c,%eax
  lea    (%rdx,%rsi,1),%rdi
  lea    0x1(%rdx,%rsi,1),%rsi
  movzbl (%rdi),%r8d
  movzbl (%rsi),%r9d
  mov    %r9b,(%rdi)
  mov    %r8b,(%rsi)
  cmp    %eax,%ecx
  jle    L119
  cltq
  lea    (%rdx,%rax,1),%rcx
  lea    0x1(%rdx,%rax,1),%rax
  movzbl (%rcx),%esi
  movzbl (%rax),%edx
  mov    %dl,(%rcx)
  mov    %sil,(%rax)
L119:
  ret
L106:
  xor    %eax,%eax
  jmp    L128
L150:
  ret
```

tool_calls: name: disassemble_data
arguments: label: D9
type: byte[16]

tool: {"D9": [0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00]}

assistant: ```c
void scramble_ata_string(char *str, int size) {
  int i;
  char tmp;
  for (i = 0; i < size; i += 2) {
    tmp = str[i];
    str[i] = str[i + 1];
    str[i + 1] = tmp;
  }
}
```