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

```asm
<get_action_field>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  mov    %rdi,%r12
  push   %rbp
  mov    %rsi,%rbp
  sub    $0x70,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x68(%rsp)
  xor    %eax,%eax
  test   %rdi,%rdi
  je     L178
L25:
  movzbl 0x0(%rbp),%eax
  lea    -0x1(%rdx),%esi
  mov    %rbp,%rcx
  test   %edx,%edx
  jne    L299
  jmp    L57
L203:
  cmp    $0x26,%al
  je     L251
  movzbl 0x1(%rcx),%eax
  add    $0x1,%rcx
L299:
  test   %al,%al
  je     L111
  cmp    $0x2e,%al
  je     L213
  cmp    $0x3d,%al
  jne    L203
L251:
  sub    $0x1,%esi
  jae    L299
L57:
  cmp    $0x3d,%al
  jbe    L53
  lea    0x20(%rsp),%r13
  mov    %r13,%rdx
L64:
  movabs $0xdfffbfbffffffffe,%rsi
  nop
L28:
  add    $0x1,%rcx
  mov    %al,(%rdx)
  add    $0x1,%rdx
  movzbl (%rcx),%eax
  cmp    $0x3d,%al
  ja     L28
  bt     %rax,%rsi
  jb     L28
L50:
  movb   $0x0,(%rdx)
  movzbl 0x20(%rsp),%eax
  movl   $0xffffffff,0x18(%rsp)
  cmp    $0x30,%al
  je     L39
L282:
  movsbl %al,%edi
  call   <isdigit@plt>
  test   %rax,%rax
  je     L75
  lea    0x1c(%rsp),%rdx
  lea    D6(%rip),%rsi
  mov    %r13,%rdi
  call   <sscanf@plt>
  test   %eax,%eax
  je     L78
  mov    0x1c(%rsp),%esi
  mov    %r12,%rdi
  call   <ssds_get_field_id@plt>
  jmp    L247
  cs nopw 0x0(%rax,%rax,1)
L111:
  cmp    $0x2e,%al
  jne    L251
L213:
  movzbl 0x1(%rcx),%eax
  add    $0x1,%rcx
  sub    $0x1,%esi
  jb     L57
  jmp    L299
L53:
  movabs $0xdfffbfbffffffffe,%rdx
  lea    0x20(%rsp),%r13
  bt     %rax,%rdx
  mov    %r13,%rdx
  jb     L64
  jmp    L50
L178:
  mov    %rsi,%rdi
  mov    %edx,0xc(%rsp)
  call   <get_action_class@plt>
  mov    0xc(%rsp),%edx
  test   %rax,%rax
  mov    %rax,%r12
  jne    L25
L78:
  xor    %eax,%eax
L247:
  mov    0x68(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L225
  add    $0x70,%rsp
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L75:
  lea    0x40(%rsp),%r15
  mov    $0x20,%edx
  mov    %rbp,%rsi
  mov    %r15,%rdi
  call   <get_sv_ftype@plt>
  mov    %r15,%rdi
  mov    $0x20,%edx
  mov    %rbp,%rsi
  mov    %eax,%ecx
  mov    %eax,%r14d
  call   <get_sv_flen@plt>
  mov    %r13,%rdi
  mov    %eax,%r15d
  call   <strlen@plt>
  test   %eax,%eax
  jle    L78
  mov    %r15d,%ecx
  mov    %r14d,%edx
  mov    %r13,%rsi
  mov    %r12,%rdi
  call   <ssds_find_field@plt>
  jmp    L247
L39:
  mov    %r13,%rdi
  call   <strlen@plt>
  cmp    $0x1,%eax
  je     L161
  movzbl 0x20(%rsp),%eax
  cmp    $0x30,%al
  jne    L282
  movsbl 0x21(%rsp),%edi
  call   <isdigit@plt>
  test   %rax,%rax
  jne    L17
  movzbl 0x20(%rsp),%eax
  jmp    L282
L17:
  lea    0x18(%rsp),%rdx
  lea    D18(%rip),%rsi
  mov    %r13,%rdi
  call   <sscanf@plt>
  test   %eax,%eax
  je     L78
  mov    0x18(%rsp),%esi
  mov    %r12,%rdi
  call   <ssds_get_field_num@plt>
  jmp    L247
L161:
  xor    %esi,%esi
  mov    %r12,%rdi
  movl   $0x0,0x18(%rsp)
  call   <ssds_get_field_num@plt>
  jmp    L247
L225:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: label: D6
type: string
name: parse_data
arguments: label: D18
type: string

tool: D6: %d

tool: D18: 0%d

assistant: ```c
struct ssds_field *get_action_field(struct ssds_class *pclass, char *saction, int num) {
  int ret;
  int res;
  int id;
  struct ssds_field *pfield;
  char *sp;
  char *spn;
  char name[32];
  char f_type[32];
  int ftnum;
  int ftlen;
  pfield = NULL;
  if (!pclass) {
    pclass = get_action_class(saction);
  }
  if (pclass) {
    sp = saction;
    while (num--) {
      while (*sp && (*sp != '.') && (*sp != '=') && (*sp != '&'))
        sp++;
      if (*sp == '.')
        sp++;
    }
    spn = name;
    while (*sp && (*sp != '.') && (*sp != '=') && (*sp != '&')) {
      *spn++ = *sp++;
    }
    *spn = 0;
    sp = name;
    ret = -1;
    if ((*sp == '0') && (strlen(name) == 1)) {
      ret = 0;
      pfield = ssds_get_field_num(pclass, ret);
    } else if (*sp == '0' && (isdigit(*(sp + 1)))) {
      res = sscanf(sp, "0%d", &ret);
      if (res)
        pfield = ssds_get_field_num(pclass, ret);
    } else if (isdigit(*sp)) {
      res = sscanf(sp, "%d", &id);
      if (res)
        pfield = ssds_get_field_id(pclass, id);
    } else {
      ftnum = get_sv_ftype(f_type, saction, 32);
      ftlen = get_sv_flen(f_type, saction, 32, ftnum);
      if (strlen(name) > 0)
        pfield = ssds_find_field(pclass, name, ftnum, ftlen);
    }
  }
  return pfield;
}
```