user: 下面的汇编指令对应的C源代码是什么：

```asm
<icmpTypeCode2String>:
  endbr64
  sub    $0x138,%rsp
  mov    %edi,%ecx
  lea    D27(%rip),%rdi
  mov    %esi,%eax
  mov    %fs:0x28,%rsi
  mov    %rsi,0x128(%rsp)
  xor    %esi,%esi
  movq   %rdi,%xmm1
  lea    D139(%rip),%rsi
  lea    D299(%rip),%rdi
  movq   %rsi,%xmm2
  movq   %rdi,%xmm0
  lea    D107(%rip),%rsi
  punpcklqdq %xmm2,%xmm0
  lea    D328(%rip),%rdi
  movq   %rsi,%xmm3
  movaps %xmm0,0xb0(%rsp)
  movq   %rdi,%xmm0
  lea    D364(%rip),%rsi
  lea    D198(%rip),%rdi
  punpcklqdq %xmm3,%xmm0
  movq   %rsi,%xmm4
  lea    D287(%rip),%rsi
  movaps %xmm0,0xc0(%rsp)
  movq   %rdi,%xmm0
  lea    D8(%rip),%rdi
  movq   %rsi,%xmm5
  punpcklqdq %xmm4,%xmm0
  lea    D214(%rip),%rsi
  movaps %xmm0,0xd0(%rsp)
  movq   %rdi,%xmm0
  lea    D456(%rip),%rdi
  movq   %rsi,%xmm6
  punpcklqdq %xmm5,%xmm0
  lea    D437(%rip),%rsi
  movaps %xmm0,0xe0(%rsp)
  movq   %rdi,%xmm0
  lea    D18(%rip),%rdi
  movq   %rsi,%xmm7
  punpcklqdq %xmm6,%xmm0
  lea    D381(%rip),%rsi
  movaps %xmm0,0xf0(%rsp)
  movq   %rdi,%xmm0
  lea    D113(%rip),%rdi
  movq   %rsi,%xmm2
  punpcklqdq %xmm7,%xmm0
  lea    D314(%rip),%rsi
  movaps %xmm0,0x100(%rsp)
  movq   %rdi,%xmm0
  lea    D292(%rip),%rdi
  movq   %rsi,%xmm3
  punpcklqdq %xmm2,%xmm0
  lea    D410(%rip),%rsi
  movaps %xmm0,0x110(%rsp)
  movq   %rdi,%xmm0
  lea    D271(%rip),%rdi
  movq   %rsi,%xmm4
  punpcklqdq %xmm3,%xmm0
  lea    D10(%rip),%rsi
  movaps %xmm0,0x20(%rsp)
  movq   %rdi,%xmm0
  movq   %rsi,%xmm5
  lea    D204(%rip),%rdi
  punpcklqdq %xmm4,%xmm0
  lea    D398(%rip),%rsi
  movaps %xmm0,0x30(%rsp)
  movq   %rdi,%xmm0
  movq   %rsi,%xmm6
  lea    D342(%rip),%rdi
  punpcklqdq %xmm1,%xmm0
  lea    D340(%rip),%rsi
  movaps %xmm0,(%rsp)
  movq   %rdi,%xmm0
  lea    D315(%rip),%rdi
  movq   %rsi,%xmm7
  punpcklqdq %xmm5,%xmm0
  lea    D246(%rip),%rsi
  movaps %xmm0,0x70(%rsp)
  movq   %rdi,%xmm0
  lea    D306(%rip),%rdi
  punpcklqdq %xmm6,%xmm0
  movaps %xmm0,0x80(%rsp)
  movq   %rdi,%xmm0
  lea    D332(%rip),%rdi
  punpcklqdq %xmm7,%xmm0
  mov    %rdi,0xa0(%rsp)
  lea    D357(%rip),%rdi
  movaps %xmm0,0x90(%rsp)
  movq   %rsi,%xmm0
  lea    D9(%rip),%rsi
  punpcklqdq %xmm1,%xmm0
  movq   %rsi,%xmm1
  lea    D176(%rip),%rsi
  movaps %xmm0,0x10(%rsp)
  movq   %rdi,%xmm0
  movq   %rsi,%xmm2
  lea    D245(%rip),%rdi
  punpcklqdq %xmm1,%xmm0
  lea    D345(%rip),%rsi
  movaps %xmm0,0x40(%rsp)
  movq   %rdi,%xmm0
  punpcklqdq %xmm2,%xmm0
  mov    %rsi,0x60(%rsp)
  movaps %xmm0,0x50(%rsp)
  cmp    $0x4,%ecx
  je     L198
  lea    D224(%rip),%r8
  cmp    $0x6,%ecx
  je     L147
L152:
  mov    0x128(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L20
  mov    %r8,%rax
  add    $0x138,%rsp
  ret
  nopw   0x0(%rax,%rax,1)
L147:
  lea    D4(%rip),%r8
  cmp    $0x80,%eax
  je     L152
  jg     L225
  lea    D284(%rip),%r8
  cmp    $0x2,%eax
  je     L152
  lea    D224(%rip),%r8
  cmp    $0x3,%eax
  jne    L220
  cmp    $0x1,%edx
  jg     L152
  movslq %edx,%rdx
  mov    0x10(%rsp,%rdx,8),%r8
  jmp    L152
  nop
L225:
  lea    D160(%rip),%r8
  cmp    $0x81,%eax
  je     L152
  sub    $0x85,%eax
  lea    D224(%rip),%r8
  cmp    $0x4,%eax
  ja     L152
  cltq
  mov    0x40(%rsp,%rax,8),%r8
  jmp    L152
  nopl   0x0(%rax,%rax,1)
L220:
  cmp    $0x1,%eax
  jne    L152
  cmp    $0x6,%edx
  jg     L152
  movslq %edx,%rdx
  mov    0x70(%rsp,%rdx,8),%r8
  jmp    L152
  nop
L198:
  cmp    $0xb,%eax
  ja     L30
  lea    D227(%rip),%rcx
  movslq (%rcx,%rax,4),%rax
  add    %rcx,%rax
  notrack jmp *%rax
  cs nopw 0x0(%rax,%rax,1)
L30:
  lea    D224(%rip),%r8
  jmp    L152
  nopl   0x0(%rax)
  lea    D224(%rip),%r8
  cmp    $0x1,%edx
  jg     L152
  movslq %edx,%rdx
  mov    (%rsp,%rdx,8),%r8
  jmp    L152
  nopl   0x0(%rax)
  lea    D374(%rip),%r8
  jmp    L152
  nopl   0x0(%rax)
  lea    D224(%rip),%r8
  cmp    $0x3,%edx
  jg     L152
  movslq %edx,%rdx
  mov    0x20(%rsp,%rdx,8),%r8
  jmp    L152
  nopl   (%rax)
  lea    D224(%rip),%r8
  cmp    $0xd,%edx
  jg     L152
  movslq %edx,%rdx
  mov    0xb0(%rsp,%rdx,8),%r8
  jmp    L152
  lea    D187(%rip),%r8
  jmp    L152
L20:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: tag: D27
type_guessed: string
name: extract_symbolic_data
arguments: tag: D139
type_guessed: string
name: extract_symbolic_data
arguments: tag: D299
type_guessed: string
name: extract_symbolic_data
arguments: tag: D107
type_guessed: string
name: extract_symbolic_data
arguments: tag: D328
type_guessed: string
name: extract_symbolic_data
arguments: tag: D364
type_guessed: string
name: extract_symbolic_data
arguments: tag: D198
type_guessed: string
name: extract_symbolic_data
arguments: tag: D287
type_guessed: string
name: extract_symbolic_data
arguments: tag: D8
type_guessed: string
name: extract_symbolic_data
arguments: tag: D214
type_guessed: string
name: extract_symbolic_data
arguments: tag: D456
type_guessed: string
name: extract_symbolic_data
arguments: tag: D437
type_guessed: string
name: extract_symbolic_data
arguments: tag: D18
type_guessed: string
name: extract_symbolic_data
arguments: tag: D381
type_guessed: string
name: extract_symbolic_data
arguments: tag: D113
type_guessed: string
name: extract_symbolic_data
arguments: tag: D314
type_guessed: string
name: extract_symbolic_data
arguments: tag: D292
type_guessed: string
name: extract_symbolic_data
arguments: tag: D410
type_guessed: string
name: extract_symbolic_data
arguments: tag: D271
type_guessed: string
name: extract_symbolic_data
arguments: tag: D10
type_guessed: string
name: extract_symbolic_data
arguments: tag: D204
type_guessed: string
name: extract_symbolic_data
arguments: tag: D398
type_guessed: string
name: extract_symbolic_data
arguments: tag: D342
type_guessed: string
name: extract_symbolic_data
arguments: tag: D340
type_guessed: string
name: extract_symbolic_data
arguments: tag: D315
type_guessed: string
name: extract_symbolic_data
arguments: tag: D246
type_guessed: string
name: extract_symbolic_data
arguments: tag: D306
type_guessed: string
name: extract_symbolic_data
arguments: tag: D332
type_guessed: string
name: extract_symbolic_data
arguments: tag: D357
type_guessed: string
name: extract_symbolic_data
arguments: tag: D9
type_guessed: string
name: extract_symbolic_data
arguments: tag: D176
type_guessed: string
name: extract_symbolic_data
arguments: tag: D245
type_guessed: string
name: extract_symbolic_data
arguments: tag: D345
type_guessed: string
name: extract_symbolic_data
arguments: tag: D224
type_guessed: string
name: extract_symbolic_data
arguments: tag: D4
type_guessed: string
name: extract_symbolic_data
arguments: tag: D284
type_guessed: string
name: extract_symbolic_data
arguments: tag: D160
type_guessed: string
name: extract_symbolic_data
arguments: tag: D374
type_guessed: string
name: extract_symbolic_data
arguments: tag: D187
type_guessed: string

tool: D27: Fragment reassembly time exceeded

tool: D139: Destination host unreachable

tool: D299: Destination network unreachable

tool: D107: Destination port unreachable

tool: D328: Destination protocol unreachable

tool: D364: Source route failed

tool: D198: Fragmentation required, and DF flag set

tool: D287: Destination host unknown

tool: D8: Destination network unknown

tool: D214: Network administratively prohibited

tool: D456: Source host isolated

tool: D437: Network unreachable for TOS

tool: D18: Host administratively prohibited

tool: D381: Communication administratively prohibited

tool: D113: Host unreachable for TOS

tool: D314: Redirect Datagram for the Host

tool: D292: Redirect Datagram for the Network

tool: D410: Redirect Datagram for the TOS & host

tool: D271: Redirect Datagram for the TOS & network

tool: D10: Communication with destination administratively prohibited

tool: D204: TTL expired in transit

tool: D398: Address unreachable

tool: D342: No route to destination

tool: D340: Source address failed ingress/egress policy

tool: D315: Beyond scope of source address

tool: D246: Hop limit exceeded in transit

tool: D306: Port unreachable

tool: D332: Reject route to destination

tool: D357: ICMPv6 router solicitation

tool: D9: ICMPv6 router advertisement

tool: D176: ICMPv6 neighbor advertisement

tool: D245: ICMPv6 neighbor solicitation

tool: D345: ICMPv6 redirect

tool: 

tool: D4: ICMPv6 echo request

tool: D284: ICMPv6 packet too big

tool: D160: ICMPv6 echo reply

tool: D374: Echo

tool: D187: Echo reply

assistant: ```c
const char *icmpTypeCode2String(int ipv, u_int8_t type, u_int8_t code) {
  const char *DestUnreach[] = {"Destination network unreachable", "Destination host unreachable", "Destination protocol unreachable", "Destination port unreachable", "Fragmentation required, and DF flag set", "Source route failed", "Destination network unknown", "Destination host unknown", "Source host isolated", "Network administratively prohibited", "Host administratively prohibited", "Network unreachable for TOS", "Host unreachable for TOS", "Communication administratively prohibited"};
  const char *Redirect[] = {"Redirect Datagram for the Network", "Redirect Datagram for the Host", "Redirect Datagram for the TOS & network", "Redirect Datagram for the TOS & host"};
  const char *TimeExceed[] = {"TTL expired in transit", "Fragment reassembly time exceeded"};
  const char *Dest6Unreach[] = {"No route to destination", "Communication with destination administratively prohibited", "Beyond scope of source address", "Address unreachable", "Port unreachable", "Source address failed ingress/egress policy", "Reject route to destination"};
  const char *Time6Exceed[] = {"Hop limit exceeded in transit", "Fragment reassembly time exceeded"};
  const char *ND_messesg[] = {"ICMPv6 router solicitation", "ICMPv6 router advertisement", "ICMPv6 neighbor solicitation", "ICMPv6 neighbor advertisement", "ICMPv6 redirect"};
  const char *empty = "";
  if (ipv == 4) {
    switch (type) {
    case 0:
      return "Echo reply";
    case 8:
      return "Echo";
    case 3:
      if (code <= 13)
        return DestUnreach[code];
      break;
    case 5:
      if (code <= 3)
        return Redirect[code];
      break;
    case 11:
      if (code <= 1)
        return TimeExceed[code];
      break;
    default:
      break;
    }
  } else if (ipv == 6) {
    switch (type) {
    case 1:
      if (code <= 6)
        return Dest6Unreach[code];
      break;
    case 2:
      return "ICMPv6 packet too big";
    case 3:
      if (code <= 1)
        return Time6Exceed[code];
      break;
    case 128:
      return "ICMPv6 echo request";
    case 129:
      return "ICMPv6 echo reply";
    case 133:
    case 134:
    case 135:
    case 136:
    case 137:
      return ND_messesg[type - 133];
    default:
      break;
    }
  }
  return empty;
}
```