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

```asm
<ts_ip>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x110,%rsp
  mov    %edi,-0xf4(%rbp)
  mov    %rsi,-0x100(%rbp)
  mov    %edx,-0xf8(%rbp)
  mov    %rcx,-0x108(%rbp)
  mov    %r8,-0x110(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x100(%rbp),%rax
  mov    %rax,-0xc8(%rbp)
  movl   $0x0,-0xec(%rbp)
  movl   $0x0,-0xe8(%rbp)
  movl   $0x0,-0xe4(%rbp)
  addq   $0xc,-0xc8(%rbp)
  jmp    L672
L710:
  mov    -0xc8(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  lea    0x1(%rax),%rdx
  mov    -0xc8(%rbp),%rax
  add    %rax,%rdx
  mov    -0xf8(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x100(%rbp),%rax
  add    %rcx,%rax
  cmp    %rax,%rdx
  jbe    L437
  mov    $0x0,%eax
  jmp    L390
L437:
  mov    -0xc8(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  add    $0x1,%rax
  add    %rax,-0xc8(%rbp)
L672:
  mov    -0xc8(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L29
  mov    -0xc8(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  and    $0xc0,%eax
  test   %eax,%eax
  je     L710
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  test   %rax,%rax
  je     L710
L29:
  addq   $0x1,-0xc8(%rbp)
  mov    -0xc8(%rbp),%rax
  add    $0x2,%rax
  sub    -0x100(%rbp),%rax
  mov    %rax,%rdx
  mov    -0xf8(%rbp),%eax
  cltq
  cmp    %rax,%rdx
  jle    L649
  mov    $0x0,%eax
  jmp    L390
L649:
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  movzbl (%rax),%edx
  lea    -0xee(%rbp),%rax
  mov    %dl,(%rax)
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  movzbl (%rax),%edx
  lea    -0xee(%rbp),%rax
  add    $0x1,%rax
  mov    %dl,(%rax)
  movzwl -0xee(%rbp),%eax
  cmp    $0x1,%ax
  jne    L316
  movl   $0x1,-0xe4(%rbp)
L316:
  mov    -0xc8(%rbp),%rax
  add    $0x2,%rax
  sub    -0x100(%rbp),%rax
  mov    %rax,%rdx
  mov    -0xf8(%rbp),%eax
  cltq
  cmp    %rax,%rdx
  jle    L992
  mov    $0x0,%eax
  jmp    L390
L992:
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  movzbl (%rax),%edx
  lea    -0xee(%rbp),%rax
  mov    %dl,(%rax)
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  movzbl (%rax),%edx
  lea    -0xee(%rbp),%rax
  add    $0x1,%rax
  mov    %dl,(%rax)
  jmp    L812
L985:
  mov    -0xc8(%rbp),%rax
  mov    %rax,-0xd0(%rbp)
  jmp    L491
L944:
  mov    -0xc8(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  lea    0x1(%rax),%rdx
  mov    -0xc8(%rbp),%rax
  add    %rax,%rdx
  mov    -0xf8(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x100(%rbp),%rax
  add    %rcx,%rax
  cmp    %rax,%rdx
  jbe    L761
  mov    $0x0,%eax
  jmp    L390
L761:
  mov    -0xc8(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  add    $0x1,%rax
  add    %rax,-0xc8(%rbp)
L491:
  mov    -0xc8(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L720
  mov    -0xc8(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  and    $0xc0,%eax
  test   %eax,%eax
  je     L944
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  test   %rax,%rax
  je     L944
L720:
  addq   $0x1,-0xc8(%rbp)
  mov    -0xc8(%rbp),%rax
  add    $0x2,%rax
  sub    -0x100(%rbp),%rax
  mov    %rax,%rdx
  mov    -0xf8(%rbp),%eax
  cltq
  cmp    %rax,%rdx
  jle    L336
  mov    $0x0,%eax
  jmp    L390
L336:
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  movzbl (%rax),%edx
  lea    -0xee(%rbp),%rax
  mov    %dl,(%rax)
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  movzbl (%rax),%edx
  lea    -0xee(%rbp),%rax
  add    $0x1,%rax
  mov    %dl,(%rax)
  movzwl -0xee(%rbp),%eax
  cmp    $0x21,%ax
  jne    L346
  mov    -0xc8(%rbp),%rax
  add    $0x2,%rax
  sub    -0x100(%rbp),%rax
  mov    %rax,%rdx
  mov    -0xf8(%rbp),%eax
  cltq
  cmp    %rax,%rdx
  jle    L709
  mov    $0x0,%eax
  jmp    L390
L709:
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  movzbl (%rax),%edx
  lea    -0xee(%rbp),%rax
  mov    %dl,(%rax)
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  movzbl (%rax),%edx
  lea    -0xee(%rbp),%rax
  add    $0x1,%rax
  mov    %dl,(%rax)
  movzwl -0xee(%rbp),%eax
  cmp    $0x1,%ax
  jne    L219
  mov    -0xc8(%rbp),%rax
  add    $0x4,%rax
  sub    -0x100(%rbp),%rax
  mov    %rax,%rdx
  mov    -0xf8(%rbp),%eax
  cltq
  cmp    %rax,%rdx
  jle    L932
  mov    $0x0,%eax
  jmp    L390
L932:
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  movzbl (%rax),%edx
  lea    -0xd8(%rbp),%rax
  mov    %dl,(%rax)
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  movzbl (%rax),%edx
  lea    -0xd8(%rbp),%rax
  add    $0x1,%rax
  mov    %dl,(%rax)
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  movzbl (%rax),%edx
  lea    -0xd8(%rbp),%rax
  add    $0x2,%rax
  mov    %dl,(%rax)
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  movzbl (%rax),%edx
  lea    -0xd8(%rbp),%rax
  add    $0x3,%rax
  mov    %dl,(%rax)
  mov    -0xc8(%rbp),%rax
  add    $0x2,%rax
  sub    -0x100(%rbp),%rax
  mov    %rax,%rdx
  mov    -0xf8(%rbp),%eax
  cltq
  cmp    %rax,%rdx
  jle    L908
  mov    $0x0,%eax
  jmp    L390
L908:
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  movzbl (%rax),%edx
  lea    -0xee(%rbp),%rax
  mov    %dl,(%rax)
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  movzbl (%rax),%edx
  lea    -0xee(%rbp),%rax
  add    $0x1,%rax
  mov    %dl,(%rax)
  movzwl -0xee(%rbp),%eax
  movzwl %ax,%edx
  mov    -0xc8(%rbp),%rax
  add    %rdx,%rax
  sub    -0x100(%rbp),%rax
  mov    %rax,%rdx
  mov    -0xf8(%rbp),%eax
  cltq
  cmp    %rax,%rdx
  jle    L451
  mov    $0x0,%eax
  jmp    L390
L451:
  mov    -0xc8(%rbp),%rax
  add    $0x2,%rax
  sub    -0x100(%rbp),%rax
  mov    %rax,%rdx
  mov    -0xf8(%rbp),%eax
  cltq
  cmp    %rax,%rdx
  jle    L33
  mov    $0x0,%eax
  jmp    L390
L33:
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  movzbl (%rax),%edx
  lea    -0xee(%rbp),%rax
  mov    %dl,(%rax)
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  movzbl (%rax),%edx
  lea    -0xee(%rbp),%rax
  add    $0x1,%rax
  mov    %dl,(%rax)
  movzwl -0xee(%rbp),%eax
  mov    %eax,%edx
  mov    -0xe8(%rbp),%eax
  cltq
  mov    %dx,-0xa0(%rbp,%rax,2)
  mov    -0xc8(%rbp),%rax
  add    $0x2,%rax
  sub    -0x100(%rbp),%rax
  mov    %rax,%rdx
  mov    -0xf8(%rbp),%eax
  cltq
  cmp    %rax,%rdx
  jle    L154
  mov    $0x0,%eax
  jmp    L390
L154:
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  movzbl (%rax),%edx
  lea    -0xee(%rbp),%rax
  mov    %dl,(%rax)
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  movzbl (%rax),%edx
  lea    -0xee(%rbp),%rax
  add    $0x1,%rax
  mov    %dl,(%rax)
  movzwl -0xee(%rbp),%eax
  mov    %eax,%edx
  mov    -0xe8(%rbp),%eax
  cltq
  mov    %dx,-0x80(%rbp,%rax,2)
  mov    -0xc8(%rbp),%rax
  add    $0x2,%rax
  sub    -0x100(%rbp),%rax
  mov    %rax,%rdx
  mov    -0xf8(%rbp),%eax
  cltq
  cmp    %rax,%rdx
  jle    L794
  mov    $0x0,%eax
  jmp    L390
L794:
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  movzbl (%rax),%edx
  lea    -0xee(%rbp),%rax
  mov    %dl,(%rax)
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  movzbl (%rax),%edx
  lea    -0xee(%rbp),%rax
  add    $0x1,%rax
  mov    %dl,(%rax)
  movzwl -0xee(%rbp),%eax
  mov    %eax,%edx
  mov    -0xe8(%rbp),%eax
  cltq
  mov    %dx,-0xc0(%rbp,%rax,2)
  mov    -0xe8(%rbp),%eax
  cltq
  mov    -0xc8(%rbp),%rdx
  mov    %rdx,-0x60(%rbp,%rax,8)
  jmp    L367
L972:
  mov    -0xc8(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  lea    0x1(%rax),%rdx
  mov    -0xc8(%rbp),%rax
  add    %rax,%rdx
  mov    -0xf8(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x100(%rbp),%rax
  add    %rcx,%rax
  cmp    %rax,%rdx
  jbe    L399
  mov    $0x0,%eax
  jmp    L390
L399:
  mov    -0xc8(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  add    $0x1,%rax
  add    %rax,-0xc8(%rbp)
L367:
  mov    -0xc8(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L274
  mov    -0xc8(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  and    $0xc0,%eax
  test   %eax,%eax
  je     L972
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  test   %rax,%rax
  je     L972
L274:
  addq   $0x1,-0xc8(%rbp)
  addl   $0x1,-0xe8(%rbp)
  cmpl   $0xa,-0xe8(%rbp)
  je     L36
L812:
  mov    -0xf8(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x100(%rbp),%rax
  add    %rdx,%rax
  cmp    %rax,-0xc8(%rbp)
  jb     L985
  jmp    L28
L346:
  nop
  jmp    L28
L219:
  nop
  jmp    L28
L36:
  nop
L28:
  cmpl   $0x0,-0xe4(%rbp)
  jne    L588
  cmpl   $0x0,-0xe8(%rbp)
  je     L97
  mov    -0xf4(%rbp),%eax
  cmp    -0xe8(%rbp),%eax
  jl     L588
L97:
  mov    $0x0,%eax
  jmp    L390
L588:
  mov    -0xd0(%rbp),%rax
  mov    %rax,-0xc8(%rbp)
  jmp    L288
L792:
  movl   $0x0,-0xe0(%rbp)
  jmp    L707
L293:
  mov    -0xec(%rbp),%eax
  cltq
  movzwl -0xa0(%rbp,%rax,2),%edx
  mov    -0xe0(%rbp),%eax
  cltq
  movzwl -0xa0(%rbp,%rax,2),%eax
  cmp    %ax,%dx
  jg     L44
  mov    -0xec(%rbp),%eax
  cltq
  movzwl -0xa0(%rbp,%rax,2),%edx
  mov    -0xe0(%rbp),%eax
  cltq
  movzwl -0xa0(%rbp,%rax,2),%eax
  cmp    %ax,%dx
  jne    L276
  mov    -0xec(%rbp),%eax
  cltq
  movzwl -0x80(%rbp,%rax,2),%edx
  mov    -0xe0(%rbp),%eax
  cltq
  movzwl -0x80(%rbp,%rax,2),%eax
  cmp    %ax,%dx
  jg     L44
L276:
  mov    -0xe0(%rbp),%eax
  mov    %eax,-0xec(%rbp)
  jmp    L419
L44:
  nop
L419:
  addl   $0x1,-0xe0(%rbp)
L707:
  mov    -0xe0(%rbp),%eax
  cmp    -0xe8(%rbp),%eax
  jl     L293
  cmpl   $0x0,-0xf4(%rbp)
  je     L951
  mov    -0xec(%rbp),%eax
  cltq
  movw   $0xffff,-0x80(%rbp,%rax,2)
  mov    -0xec(%rbp),%eax
  cltq
  movzwl -0x80(%rbp,%rax,2),%edx
  mov    -0xec(%rbp),%eax
  cltq
  mov    %dx,-0xa0(%rbp,%rax,2)
  subl   $0x1,-0xf4(%rbp)
L288:
  cmpl   $0x1,-0xe8(%rbp)
  jg     L792
  jmp    L644
L951:
  nop
L644:
  cmpl   $0x0,-0xe4(%rbp)
  jne    L484
  mov    -0xec(%rbp),%eax
  cltq
  movzwl -0xc0(%rbp,%rax,2),%eax
  movswl %ax,%edx
  mov    -0x110(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L484
L581:
  movl   $0x0,-0xdc(%rbp)
  mov    -0xc8(%rbp),%rax
  mov    %rax,-0xd0(%rbp)
  jmp    L139
L329:
  mov    -0xc8(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  lea    0x1(%rax),%rdx
  mov    -0xc8(%rbp),%rax
  add    %rax,%rdx
  mov    -0xf8(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x100(%rbp),%rax
  add    %rcx,%rax
  cmp    %rax,%rdx
  jbe    L289
  mov    $0x0,%eax
  jmp    L390
L289:
  mov    -0xc8(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  add    $0x1,%rax
  add    %rax,-0xc8(%rbp)
L139:
  mov    -0xc8(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L623
  mov    -0xc8(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  and    $0xc0,%eax
  test   %eax,%eax
  je     L329
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  test   %rax,%rax
  je     L329
L623:
  addq   $0x1,-0xc8(%rbp)
  cmpl   $0x0,-0xe4(%rbp)
  je     L291
  mov    -0xf4(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    %edx,-0xf4(%rbp)
  test   %eax,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,-0xdc(%rbp)
  jmp    L603
L291:
  mov    -0xec(%rbp),%eax
  cltq
  mov    -0x60(%rbp,%rax,8),%rcx
  mov    -0xd0(%rbp),%rdx
  mov    -0x100(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <_ts_lmatch@plt>
  mov    %eax,-0xdc(%rbp)
L603:
  mov    -0xc8(%rbp),%rax
  add    $0x2,%rax
  sub    -0x100(%rbp),%rax
  mov    %rax,%rdx
  mov    -0xf8(%rbp),%eax
  cltq
  cmp    %rax,%rdx
  jle    L934
  mov    $0x0,%eax
  jmp    L390
L934:
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  movzbl (%rax),%edx
  lea    -0xee(%rbp),%rax
  mov    %dl,(%rax)
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  movzbl (%rax),%edx
  lea    -0xee(%rbp),%rax
  add    $0x1,%rax
  mov    %dl,(%rax)
  movzwl -0xee(%rbp),%eax
  cmp    $0x5,%ax
  jne    L300
  cmpl   $0x1,-0xdc(%rbp)
  jne    L300
  mov    -0xc8(%rbp),%rax
  add    $0x2,%rax
  sub    -0x100(%rbp),%rax
  mov    %rax,%rdx
  mov    -0xf8(%rbp),%eax
  cltq
  cmp    %rax,%rdx
  jle    L381
  mov    $0x0,%eax
  jmp    L390
L381:
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  movzbl (%rax),%edx
  lea    -0xee(%rbp),%rax
  mov    %dl,(%rax)
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  movzbl (%rax),%edx
  lea    -0xee(%rbp),%rax
  add    $0x1,%rax
  mov    %dl,(%rax)
  mov    -0xc8(%rbp),%rax
  add    $0x4,%rax
  sub    -0x100(%rbp),%rax
  mov    %rax,%rdx
  mov    -0xf8(%rbp),%eax
  cltq
  cmp    %rax,%rdx
  jle    L22
  mov    $0x0,%eax
  jmp    L390
L22:
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  movzbl (%rax),%edx
  lea    -0xd8(%rbp),%rax
  mov    %dl,(%rax)
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  movzbl (%rax),%edx
  lea    -0xd8(%rbp),%rax
  add    $0x1,%rax
  mov    %dl,(%rax)
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  movzbl (%rax),%edx
  lea    -0xd8(%rbp),%rax
  add    $0x2,%rax
  mov    %dl,(%rax)
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  movzbl (%rax),%edx
  lea    -0xd8(%rbp),%rax
  add    $0x3,%rax
  mov    %dl,(%rax)
  mov    -0xc8(%rbp),%rax
  add    $0x2,%rax
  sub    -0x100(%rbp),%rax
  mov    %rax,%rdx
  mov    -0xf8(%rbp),%eax
  cltq
  cmp    %rax,%rdx
  jle    L55
  mov    $0x0,%eax
  jmp    L390
L55:
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  movzbl (%rax),%edx
  lea    -0xee(%rbp),%rax
  mov    %dl,(%rax)
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  movzbl (%rax),%edx
  lea    -0xee(%rbp),%rax
  add    $0x1,%rax
  mov    %dl,(%rax)
  movzwl -0xee(%rbp),%eax
  movzwl %ax,%edx
  mov    -0xc8(%rbp),%rax
  add    %rdx,%rax
  sub    -0x100(%rbp),%rax
  mov    %rax,%rdx
  mov    -0xf8(%rbp),%eax
  cltq
  cmp    %rax,%rdx
  jle    L821
  mov    $0x0,%eax
  jmp    L390
L821:
  mov    -0x108(%rbp),%rdx
  mov    -0xc8(%rbp),%rcx
  mov    -0x100(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <_ts_lcopy@plt>
  mov    $0x0,%eax
  jmp    L390
L300:
  movzwl -0xee(%rbp),%eax
  cmp    $0x1,%ax
  je     L955
  movl   $0x0,-0xdc(%rbp)
L955:
  mov    -0xc8(%rbp),%rax
  add    $0x2,%rax
  sub    -0x100(%rbp),%rax
  mov    %rax,%rdx
  mov    -0xf8(%rbp),%eax
  cltq
  cmp    %rax,%rdx
  jle    L178
  mov    $0x0,%eax
  jmp    L390
L178:
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  movzbl (%rax),%edx
  lea    -0xee(%rbp),%rax
  mov    %dl,(%rax)
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  movzbl (%rax),%edx
  lea    -0xee(%rbp),%rax
  add    $0x1,%rax
  mov    %dl,(%rax)
  movzwl -0xee(%rbp),%eax
  cmp    $0x1,%ax
  je     L467
  movl   $0x0,-0xdc(%rbp)
L467:
  mov    -0xc8(%rbp),%rax
  add    $0x4,%rax
  sub    -0x100(%rbp),%rax
  mov    %rax,%rdx
  mov    -0xf8(%rbp),%eax
  cltq
  cmp    %rax,%rdx
  jle    L317
  mov    $0x0,%eax
  jmp    L390
L317:
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  movzbl (%rax),%edx
  lea    -0xd8(%rbp),%rax
  mov    %dl,(%rax)
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  movzbl (%rax),%edx
  lea    -0xd8(%rbp),%rax
  add    $0x1,%rax
  mov    %dl,(%rax)
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  movzbl (%rax),%edx
  lea    -0xd8(%rbp),%rax
  add    $0x2,%rax
  mov    %dl,(%rax)
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  movzbl (%rax),%edx
  lea    -0xd8(%rbp),%rax
  add    $0x3,%rax
  mov    %dl,(%rax)
  mov    -0xc8(%rbp),%rax
  add    $0x2,%rax
  sub    -0x100(%rbp),%rax
  mov    %rax,%rdx
  mov    -0xf8(%rbp),%eax
  cltq
  cmp    %rax,%rdx
  jle    L12
  mov    $0x0,%eax
  jmp    L390
L12:
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  movzbl (%rax),%edx
  lea    -0xee(%rbp),%rax
  mov    %dl,(%rax)
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  movzbl (%rax),%edx
  lea    -0xee(%rbp),%rax
  add    $0x1,%rax
  mov    %dl,(%rax)
  movzwl -0xee(%rbp),%eax
  movzwl %ax,%edx
  mov    -0xc8(%rbp),%rax
  add    %rdx,%rax
  sub    -0x100(%rbp),%rax
  mov    %rax,%rdx
  mov    -0xf8(%rbp),%eax
  cltq
  cmp    %rax,%rdx
  jle    L979
  mov    $0x0,%eax
  jmp    L390
L979:
  cmpl   $0x0,-0xdc(%rbp)
  je     L687
  mov    -0xc8(%rbp),%rax
  add    $0x4,%rax
  sub    -0x100(%rbp),%rax
  mov    %rax,%rdx
  mov    -0xf8(%rbp),%eax
  cltq
  cmp    %rax,%rdx
  jle    L42
  mov    $0x0,%eax
  jmp    L390
L42:
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  movzbl (%rax),%edx
  lea    -0xd8(%rbp),%rax
  mov    %dl,(%rax)
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  movzbl (%rax),%edx
  lea    -0xd8(%rbp),%rax
  add    $0x1,%rax
  mov    %dl,(%rax)
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  movzbl (%rax),%edx
  lea    -0xd8(%rbp),%rax
  add    $0x2,%rax
  mov    %dl,(%rax)
  mov    -0xc8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0xc8(%rbp)
  movzbl (%rax),%edx
  lea    -0xd8(%rbp),%rax
  add    $0x3,%rax
  mov    %dl,(%rax)
  mov    -0xd8(%rbp),%rax
  jmp    L390
L687:
  movzwl -0xee(%rbp),%eax
  movzwl %ax,%eax
  add    %rax,-0xc8(%rbp)
L484:
  mov    -0xf8(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x100(%rbp),%rax
  add    %rdx,%rax
  cmp    %rax,-0xc8(%rbp)
  jb     L581
  mov    -0xec(%rbp),%eax
  cltq
  mov    -0x60(%rbp,%rax,8),%rcx
  mov    -0x108(%rbp),%rdx
  mov    -0x100(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <_ts_lcopy@plt>
  mov    $0x0,%eax
L390:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L469
  call   <__stack_chk_fail@plt>
L469:
  leave
  ret
```

assistant: ```c
unsigned long int ts_ip(int which, unsigned char *a, int len, char *host, int *port) {
  unsigned char *rr, *srv_target[10], *buf = a;
  unsigned short int i;
  unsigned long int l;
  int srv = 0, srvs = 0, aflag = 0;
  short int srv_port[10], srv_pri[10], srv_weight[10];
  buf += 12;
  for (; *buf != 0 && !(*buf & 0xc0 && buf++); buf += *buf + 1)
    if ((buf + *buf + 1) > (a + len))
      return 0;
  buf++;
  ;
  if ((buf + 2) - a > len)
    return 0;
  ;
  ((char *)&i)[0] = *buf++;
  ((char *)&i)[1] = *buf++;
  ;
  if (i == 1)
    aflag = 1;
  if ((buf + 2) - a > len)
    return 0;
  ;
  ((char *)&i)[0] = *buf++;
  ((char *)&i)[1] = *buf++;
  ;
  while (buf < (a + len)) {
    rr = buf;
    for (; *buf != 0 && !(*buf & 0xc0 && buf++); buf += *buf + 1)
      if ((buf + *buf + 1) > (a + len))
        return 0;
    buf++;
    ;
    if ((buf + 2) - a > len)
      return 0;
    ;
    ((char *)&i)[0] = *buf++;
    ((char *)&i)[1] = *buf++;
    ;
    if (i != 33)
      break;
    if ((buf + 2) - a > len)
      return 0;
    ;
    ((char *)&i)[0] = *buf++;
    ((char *)&i)[1] = *buf++;
    ;
    if (i != 1)
      break;
    if ((buf + 4) - a > len)
      return 0;
    ;
    ((char *)&l)[0] = *buf++;
    ((char *)&l)[1] = *buf++;
    ((char *)&l)[2] = *buf++;
    ((char *)&l)[3] = *buf++;
    ;
    if ((buf + 2) - a > len)
      return 0;
    ;
    ((char *)&i)[0] = *buf++;
    ((char *)&i)[1] = *buf++;
    ;
    if ((buf + i) - a > len)
      return 0;
    ;
    if ((buf + 2) - a > len)
      return 0;
    ;
    ((char *)&i)[0] = *buf++;
    ((char *)&i)[1] = *buf++;
    ;
    srv_pri[srvs] = i;
    if ((buf + 2) - a > len)
      return 0;
    ;
    ((char *)&i)[0] = *buf++;
    ((char *)&i)[1] = *buf++;
    ;
    srv_weight[srvs] = i;
    if ((buf + 2) - a > len)
      return 0;
    ;
    ((char *)&i)[0] = *buf++;
    ((char *)&i)[1] = *buf++;
    ;
    srv_port[srvs] = i;
    srv_target[srvs] = buf;
    for (; *buf != 0 && !(*buf & 0xc0 && buf++); buf += *buf + 1)
      if ((buf + *buf + 1) > (a + len))
        return 0;
    buf++;
    ;
    srvs++;
    if (srvs == 10)
      break;
  }
  if (!aflag && (srvs == 0 || which >= srvs))
    return 0;
  buf = rr;
  while (srvs > 1) {
    int cur;
    for (cur = 0; cur < srvs; cur++) {
      if (srv_pri[srv] > srv_pri[cur] || (srv_pri[srv] == srv_pri[cur] && srv_weight[srv] > srv_weight[cur]))
        continue;
      srv = cur;
    }
    if (which == 0)
      break;
    srv_pri[srv] = srv_weight[srv] = -1;
    which--;
  }
  if (!aflag)
    *port = srv_port[srv];
  while (buf < (a + len)) {
    int match = 0;
    rr = buf;
    for (; *buf != 0 && !(*buf & 0xc0 && buf++); buf += *buf + 1)
      if ((buf + *buf + 1) > (a + len))
        return 0;
    buf++;
    ;
    if (aflag)
      match = (which-- == 0) ? 1 : 0;
    else
      match = _ts_lmatch(a, srv_target[srv], rr);
    if ((buf + 2) - a > len)
      return 0;
    ;
    ((char *)&i)[0] = *buf++;
    ((char *)&i)[1] = *buf++;
    ;
    if (i == 5 && match == 1) {
      if ((buf + 2) - a > len)
        return 0;
      ;
      ((char *)&i)[0] = *buf++;
      ((char *)&i)[1] = *buf++;
      ;
      if ((buf + 4) - a > len)
        return 0;
      ;
      ((char *)&l)[0] = *buf++;
      ((char *)&l)[1] = *buf++;
      ((char *)&l)[2] = *buf++;
      ((char *)&l)[3] = *buf++;
      ;
      if ((buf + 2) - a > len)
        return 0;
      ;
      ((char *)&i)[0] = *buf++;
      ((char *)&i)[1] = *buf++;
      ;
      if ((buf + i) - a > len)
        return 0;
      ;
      _ts_lcopy(a, buf, host);
      return 0;
    }
    if (i != 1)
      match = 0;
    if ((buf + 2) - a > len)
      return 0;
    ;
    ((char *)&i)[0] = *buf++;
    ((char *)&i)[1] = *buf++;
    ;
    if (i != 1)
      match = 0;
    if ((buf + 4) - a > len)
      return 0;
    ;
    ((char *)&l)[0] = *buf++;
    ((char *)&l)[1] = *buf++;
    ((char *)&l)[2] = *buf++;
    ((char *)&l)[3] = *buf++;
    ;
    if ((buf + 2) - a > len)
      return 0;
    ;
    ((char *)&i)[0] = *buf++;
    ((char *)&i)[1] = *buf++;
    ;
    if ((buf + i) - a > len)
      return 0;
    ;
    if (match) {
      if ((buf + 4) - a > len)
        return 0;
      ;
      ((char *)&l)[0] = *buf++;
      ((char *)&l)[1] = *buf++;
      ((char *)&l)[2] = *buf++;
      ((char *)&l)[3] = *buf++;
      return l;
    }
    buf += i;
  }
  _ts_lcopy(a, srv_target[srv], host);
  return 0;
}
```