user: 这段汇编代码用C语言表示是什么样的?

```asm
<xfrm_lifetime_cfg_parse>:
  endbr64
  push   %r14
  push   %r13
  mov    %rsi,%r13
  push   %r12
  mov    %rdx,%r12
  push   %rbp
  mov    %rdi,%rbp
  push   %rbx
  mov    (%rdx),%rbx
  mov    (%rsi),%r14d
  lea    D153(%rip),%rsi
  mov    (%rbx),%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L212
  call   <NEXT_ARG@plt>
  mov    (%rbx),%rsi
  xor    %edx,%edx
  lea    0x1c(%rbp),%rdi
  call   <get_u64@plt>
  test   %eax,%eax
  jne    L8
L28:
  mov    %r14d,0x0(%r13)
  xor    %eax,%eax
  mov    %rbx,(%r12)
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
  nopl   (%rax)
L212:
  mov    (%rbx),%rdi
  lea    D168(%rip),%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L36
  call   <NEXT_ARG@plt>
  mov    (%rbx),%rsi
  xor    %edx,%edx
  lea    0x18(%rbp),%rdi
  call   <get_u64@plt>
  test   %eax,%eax
  je     L28
  mov    (%rbx),%rsi
  lea    D160(%rip),%rdi
  call   <invarg@plt>
  jmp    L28
  nopl   0x0(%rax)
L36:
  mov    (%rbx),%rdi
  lea    D154(%rip),%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L6
  mov    (%rbx),%rdi
  lea    D14(%rip),%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L165
  call   <NEXT_ARG@plt>
  mov    (%rbx),%rsi
  xor    %edx,%edx
  lea    0x10(%rbp),%rdi
  call   <get_u64@plt>
  test   %eax,%eax
  je     L28
  mov    (%rbx),%rsi
  lea    D128(%rip),%rdi
  call   <invarg@plt>
  jmp    L28
  nopl   0x0(%rax,%rax,1)
L8:
  mov    (%rbx),%rsi
  lea    D118(%rip),%rdi
  call   <invarg@plt>
  jmp    L28
  nopl   0x0(%rax)
L6:
  call   <NEXT_ARG@plt>
  mov    (%rbx),%rsi
  xor    %edx,%edx
  lea    0x14(%rbp),%rdi
  call   <get_u64@plt>
  test   %eax,%eax
  je     L28
  mov    (%rbx),%rsi
  lea    D64(%rip),%rdi
  call   <invarg@plt>
  jmp    L28
  nopw   0x0(%rax,%rax,1)
L165:
  mov    (%rbx),%rdi
  lea    D138(%rip),%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L79
  mov    (%rbx),%rdi
  lea    D30(%rip),%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L220
  call   <NEXT_ARG@plt>
  mov    (%rbx),%rsi
  xor    %edx,%edx
  lea    0x8(%rbp),%rdi
  call   <get_u64@plt>
  test   %eax,%eax
  je     L28
  mov    (%rbx),%rsi
  lea    D135(%rip),%rdi
  call   <invarg@plt>
  jmp    L28
  nopw   0x0(%rax,%rax,1)
L79:
  call   <NEXT_ARG@plt>
  mov    (%rbx),%rsi
  xor    %edx,%edx
  lea    0xc(%rbp),%rdi
  call   <get_u64@plt>
  test   %eax,%eax
  je     L28
  mov    (%rbx),%rsi
  lea    D58(%rip),%rdi
  call   <invarg@plt>
  jmp    L28
  nop
L220:
  mov    (%rbx),%rdi
  lea    D53(%rip),%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L161
  call   <NEXT_ARG@plt>
  mov    (%rbx),%rsi
  xor    %edx,%edx
  lea    0x4(%rbp),%rdi
  call   <get_u64@plt>
  test   %eax,%eax
  je     L28
  mov    (%rbx),%rsi
  lea    D159(%rip),%rdi
  call   <invarg@plt>
  jmp    L28
L161:
  mov    (%rbx),%rdi
  lea    D52(%rip),%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L126
  call   <NEXT_ARG@plt>
  mov    (%rbx),%rsi
  xor    %edx,%edx
  mov    %rbp,%rdi
  call   <get_u64@plt>
  test   %eax,%eax
  je     L28
  mov    (%rbx),%rsi
  lea    D59(%rip),%rdi
  call   <invarg@plt>
  jmp    L28
L126:
  mov    (%rbx),%rsi
  lea    D25(%rip),%rdi
  call   <invarg@plt>
  jmp    L28
```

tool_calls: name: unpack_data
arguments: tag: D153
type: string
name: unpack_data
arguments: tag: D168
type: string
name: unpack_data
arguments: tag: D160
type: string
name: unpack_data
arguments: tag: D154
type: string
name: unpack_data
arguments: tag: D14
type: string
name: unpack_data
arguments: tag: D128
type: string
name: unpack_data
arguments: tag: D118
type: string
name: unpack_data
arguments: tag: D64
type: string
name: unpack_data
arguments: tag: D138
type: string
name: unpack_data
arguments: tag: D30
type: string
name: unpack_data
arguments: tag: D135
type: string
name: unpack_data
arguments: tag: D58
type: string
name: unpack_data
arguments: tag: D53
type: string
name: unpack_data
arguments: tag: D159
type: string
name: unpack_data
arguments: tag: D52
type: string
name: unpack_data
arguments: tag: D59
type: string
name: unpack_data
arguments: tag: D25
type: string

tool: D153: time-soft

tool: D168: time-hard

tool: D160: "time-hard" value is invalid

tool: D154: time-use-soft

tool: D14: time-use-hard

tool: D128: "time-use-hard" value is invalid

tool: D118: "time-soft" value is invalid

tool: D64: "time-use-soft" value is invalid

tool: D138: byte-soft

tool: D30: byte-hard

tool: D135: "byte-hard" value is invalid

tool: D58: "byte-soft" value is invalid

tool: D53: packet-soft

tool: D159: "packet-soft" value is invalid

tool: D52: packet-hard

tool: D59: "packet-hard" value is invalid

tool: D25: "LIMIT" is invalid

assistant: ```c
int xfrm_lifetime_cfg_parse(struct xfrm_lifetime_cfg *lft, int *argcp, char ***argvp) {
  int argc = *argcp;
  char **argv = *argvp;
  int ret;
  if (strcmp(*argv, "time-soft") == 0) {
    NEXT_ARG();
    ret = get_u64(&lft->soft_add_expires_seconds, *argv, 0);
    if (ret)
      invarg("\"time-soft\" value is invalid", *argv);
  } else if (strcmp(*argv, "time-hard") == 0) {
    NEXT_ARG();
    ret = get_u64(&lft->hard_add_expires_seconds, *argv, 0);
    if (ret)
      invarg("\"time-hard\" value is invalid", *argv);
  } else if (strcmp(*argv, "time-use-soft") == 0) {
    NEXT_ARG();
    ret = get_u64(&lft->soft_use_expires_seconds, *argv, 0);
    if (ret)
      invarg("\"time-use-soft\" value is invalid", *argv);
  } else if (strcmp(*argv, "time-use-hard") == 0) {
    NEXT_ARG();
    ret = get_u64(&lft->hard_use_expires_seconds, *argv, 0);
    if (ret)
      invarg("\"time-use-hard\" value is invalid", *argv);
  } else if (strcmp(*argv, "byte-soft") == 0) {
    NEXT_ARG();
    ret = get_u64(&lft->soft_byte_limit, *argv, 0);
    if (ret)
      invarg("\"byte-soft\" value is invalid", *argv);
  } else if (strcmp(*argv, "byte-hard") == 0) {
    NEXT_ARG();
    ret = get_u64(&lft->hard_byte_limit, *argv, 0);
    if (ret)
      invarg("\"byte-hard\" value is invalid", *argv);
  } else if (strcmp(*argv, "packet-soft") == 0) {
    NEXT_ARG();
    ret = get_u64(&lft->soft_packet_limit, *argv, 0);
    if (ret)
      invarg("\"packet-soft\" value is invalid", *argv);
  } else if (strcmp(*argv, "packet-hard") == 0) {
    NEXT_ARG();
    ret = get_u64(&lft->hard_packet_limit, *argv, 0);
    if (ret)
      invarg("\"packet-hard\" value is invalid", *argv);
  } else
    invarg("\"LIMIT\" is invalid", *argv);
  *argcp = argc;
  *argvp = argv;
  return 0;
}
```