user: 请从给定的汇编指令推导出C源代码：

```asm
<dirReduc>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    %esi,-0x1c(%rbp)
  mov    %rdx,-0x28(%rbp)
  movl   $0x0,-0x4(%rbp)
  jmp    L55
L126:
  mov    -0x1c(%rbp),%eax
  cmp    $0x1,%eax
  je     L49
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  lea    D8(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L88
  mov    -0x4(%rbp),%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  lea    D66(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L106
L88:
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  lea    D66(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L89
  mov    -0x4(%rbp),%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  lea    D8(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L106
L89:
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  lea    D42(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L45
  mov    -0x4(%rbp),%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  lea    D39(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L106
L45:
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  lea    D39(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L22
  mov    -0x4(%rbp),%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  lea    D42(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L22
L106:
  mov    -0x4(%rbp),%edx
  lea    -0x1c(%rbp),%rcx
  mov    -0x18(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <deleteArrItem@plt>
  mov    -0x4(%rbp),%edx
  lea    -0x1c(%rbp),%rcx
  mov    -0x18(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <deleteArrItem@plt>
  movl   $0x0,-0x4(%rbp)
  jmp    L55
L22:
  addl   $0x1,-0x4(%rbp)
L55:
  mov    -0x1c(%rbp),%eax
  cmp    %eax,-0x4(%rbp)
  jne    L126
  jmp    L56
L49:
  nop
L56:
  mov    -0x1c(%rbp),%edx
  mov    -0x28(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x18(%rbp),%rax
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: data_tag: D8
type_guessed: string
name: retrieve_data
arguments: data_tag: D66
type_guessed: string
name: retrieve_data
arguments: data_tag: D42
type_guessed: string
name: retrieve_data
arguments: data_tag: D39
type_guessed: string

tool: D8: NORTH

tool: D66: SOUTH

tool: D42: WEST

tool: D39: EAST

assistant: ```c
char **dirReduc(char **arr, int sz, int *lg) {
  int i = 0;
  while (i != sz) {
    if (sz == 1)
      break;
    if ((strcmp(arr[i], "NORTH") == 0 && strcmp(arr[i + 1], "SOUTH") == 0) || (strcmp(arr[i], "SOUTH") == 0 && strcmp(arr[i + 1], "NORTH") == 0) || (strcmp(arr[i], "WEST") == 0 && strcmp(arr[i + 1], "EAST") == 0) || (strcmp(arr[i], "EAST") == 0 && strcmp(arr[i + 1], "WEST") == 0)) {
      deleteArrItem(arr, &sz, i);
      deleteArrItem(arr, &sz, i);
      i = 0;
      continue;
    }
    i++;
  }
  *lg = sz;
  return arr;
}
```