user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<str_escape_traverse_dec>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x70,%rsp
  mov    %rdi,-0x58(%rbp)
  mov    %rsi,-0x60(%rbp)
  mov    %rdx,-0x68(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    D10(%rip),%rax
  mov    %rax,-0x18(%rbp)
  movl   $0x0,-0x40(%rbp)
  movl   $0x0,-0x3c(%rbp)
  movq   $0x0,-0x28(%rbp)
  movq   $0x0,-0x20(%rbp)
  movq   $0x0,-0x10(%rbp)
  movl   $0x0,-0x44(%rbp)
  mov    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,-0x38(%rbp)
  lea    D6(%rip),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,-0x34(%rbp)
  lea    D27(%rip),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,-0x30(%rbp)
  mov    -0x68(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x40(%rbp)
  mov    -0x58(%rbp),%rax
  mov    %rax,-0x28(%rbp)
  mov    -0x28(%rbp),%rax
  mov    %rax,-0x20(%rbp)
  mov    -0x60(%rbp),%rax
  mov    %rax,-0x10(%rbp)
  jmp    L72
L76:
  mov    -0x18(%rbp),%rdx
  mov    -0x20(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strstr@plt>
  mov    %rax,-0x28(%rbp)
  cmpq   $0x0,-0x28(%rbp)
  jne    L53
  mov    -0x3c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x10(%rbp),%rax
  add    %rax,%rdx
  mov    -0x20(%rbp),%rax
  mov    %rax,%rsi
  mov    %rdx,%rdi
  call   <strcpy@plt>
  mov    -0x20(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,-0x2c(%rbp)
  cmpl   $0x0,-0x2c(%rbp)
  je     L83
  mov    -0x2c(%rbp),%eax
  jmp    L47
L83:
  mov    $0x1,%eax
L47:
  mov    %eax,-0x2c(%rbp)
  mov    -0x2c(%rbp),%eax
  add    %eax,-0x3c(%rbp)
  mov    -0x2c(%rbp),%eax
  sub    %eax,-0x40(%rbp)
  mov    -0x2c(%rbp),%eax
  cltq
  add    %rax,-0x20(%rbp)
  jmp    L72
L53:
  mov    -0x28(%rbp),%rax
  sub    -0x20(%rbp),%rax
  mov    %eax,%edx
  mov    -0x3c(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x10(%rbp),%rax
  add    %rax,%rcx
  mov    -0x20(%rbp),%rax
  mov    %rax,%rsi
  mov    %rcx,%rdi
  call   <strncpy@plt>
  mov    -0x28(%rbp),%rax
  sub    -0x20(%rbp),%rax
  mov    %eax,%edx
  mov    -0x3c(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x3c(%rbp)
  mov    -0x40(%rbp),%edx
  mov    -0x28(%rbp),%rax
  sub    -0x20(%rbp),%rax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  mov    %eax,-0x40(%rbp)
  mov    -0x38(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rax,%rdx
  mov    -0x34(%rbp),%eax
  mov    %eax,%esi
  mov    %rdx,%rdi
  call   <str_escape_isDec@plt>
  test   %rax,%rax
  js     L11
  lea    -0x44(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  lea    D32(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sscanf@plt>
  mov    -0x3c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x10(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  lea    -0x44(%rbp),%rax
  mov    $0x1,%edx
  mov    %rax,%rsi
  mov    %rcx,%rdi
  call   <memcpy@plt>
  mov    -0x3c(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x3c(%rbp)
  mov    -0x30(%rbp),%eax
  sub    %eax,-0x40(%rbp)
  mov    -0x30(%rbp),%eax
  cltq
  add    %rax,-0x28(%rbp)
  jmp    L32
L11:
  mov    -0x3c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x10(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x38(%rbp),%edx
  mov    -0x28(%rbp),%rax
  mov    %rax,%rsi
  mov    %rcx,%rdi
  call   <strncpy@plt>
  mov    -0x38(%rbp),%eax
  add    %eax,-0x3c(%rbp)
  mov    -0x38(%rbp),%eax
  sub    %eax,-0x40(%rbp)
  mov    -0x38(%rbp),%eax
  cltq
  add    %rax,-0x28(%rbp)
L32:
  mov    -0x28(%rbp),%rax
  mov    %rax,-0x20(%rbp)
L72:
  cmpl   $0x0,-0x40(%rbp)
  jg     L76
  mov    -0x68(%rbp),%rax
  mov    -0x3c(%rbp),%edx
  mov    %edx,(%rax)
  mov    -0x3c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L58
  call   <__stack_chk_fail@plt>
L58:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D10
datatype: string
name: extract_symbolic_data
arguments: data_tag: D6
datatype: string
name: extract_symbolic_data
arguments: data_tag: D27
datatype: string
name: extract_symbolic_data
arguments: data_tag: D32
datatype: string

tool: D10: \x

tool: D6: EE

tool: D27: \xEE

tool: D32: \x%02x

assistant: ```c
int str_escape_traverse_dec(char *src, char *dst, int *srcLen) {
  const char *substr = "\\x";
  int sublen, declen, totalLen;
  int stringlen = 0, tmpLen, dstLen = 0;
  char *curPointer = NULL, *prePointer = NULL;
  char *dstPointer = NULL;
  unsigned int c = 0;
  sublen = strlen(substr);
  declen = strlen("EE");
  totalLen = strlen("\\xEE");
  stringlen = *srcLen;
  prePointer = curPointer = src;
  dstPointer = dst;
  while (stringlen > 0) {
    if ((curPointer = strstr(prePointer, substr)) == NULL) {
      strcpy(dstPointer + dstLen, prePointer);
      tmpLen = strlen(prePointer);
      tmpLen = tmpLen == 0 ? 1 : tmpLen;
      dstLen += tmpLen;
      stringlen -= tmpLen;
      prePointer += tmpLen;
    } else {
      strncpy(dstPointer + dstLen, prePointer, curPointer - prePointer);
      dstLen += (curPointer - prePointer);
      stringlen -= (curPointer - prePointer);
      if (str_escape_isDec(curPointer + sublen, declen) >= 0) {
        sscanf(curPointer, "\\x%02x", &c);
        memcpy(dstPointer + dstLen, &c, sizeof(char));
        dstLen += sizeof(char);
        stringlen -= totalLen;
        curPointer += totalLen;
      } else {
        strncpy(dstPointer + dstLen, curPointer, sublen);
        dstLen += sublen;
        stringlen -= sublen;
        curPointer += sublen;
      }
      prePointer = curPointer;
    }
  }
  *srcLen = dstLen;
  *(dstPointer + dstLen) = '\0';
  return 0;
}
```