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

```asm
<ntlm_crypt>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xb0,%rsp
  mov    %rdi,-0xa8(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0xa8(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,-0x90(%rbp)
  movabs $0x3736353433323130,%rax
  movabs $0x6665646362613938,%rdx
  mov    %rax,-0x20(%rbp)
  mov    %rdx,-0x18(%rbp)
  lea    -0x60(%rbp),%rax
  mov    $0x40,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <memset@plt>
  movl   $0x0,-0x9c(%rbp)
  jmp    L4
L20:
  mov    -0x9c(%rbp),%eax
  add    %eax,%eax
  movslq %eax,%rdx
  mov    -0xa8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%edx
  mov    -0x9c(%rbp),%eax
  add    %eax,%eax
  cltq
  lea    0x1(%rax),%rcx
  mov    -0xa8(%rbp),%rax
  add    %rcx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  shl    $0x10,%eax
  or     %edx,%eax
  mov    %eax,%edx
  mov    -0x9c(%rbp),%eax
  cltq
  mov    %edx,-0x60(%rbp,%rax,4)
  addl   $0x1,-0x9c(%rbp)
L4:
  mov    -0x90(%rbp),%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  cmp    %eax,-0x9c(%rbp)
  jl     L20
  mov    -0x90(%rbp),%eax
  cltd
  shr    $0x1f,%edx
  add    %edx,%eax
  and    $0x1,%eax
  sub    %edx,%eax
  cmp    $0x1,%eax
  jne    L71
  mov    -0x90(%rbp),%eax
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0xa8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  or     $0x800000,%eax
  mov    %eax,%edx
  mov    -0x9c(%rbp),%eax
  cltq
  mov    %edx,-0x60(%rbp,%rax,4)
  jmp    L49
L71:
  mov    -0x9c(%rbp),%eax
  cltq
  movl   $0x80,-0x60(%rbp,%rax,4)
L49:
  mov    -0x90(%rbp),%eax
  shl    $0x4,%eax
  mov    %eax,-0x28(%rbp)
  movl   $0x67452301,-0x8c(%rbp)
  mov    -0x8c(%rbp),%eax
  mov    %eax,-0x70(%rbp)
  movl   $0xefcdab89,-0x88(%rbp)
  mov    -0x88(%rbp),%eax
  mov    %eax,-0x6c(%rbp)
  movl   $0x98badcfe,-0x84(%rbp)
  mov    -0x84(%rbp),%eax
  mov    %eax,-0x68(%rbp)
  movl   $0x10325476,-0x80(%rbp)
  mov    -0x80(%rbp),%eax
  mov    %eax,-0x64(%rbp)
  movl   $0x5a827999,-0x7c(%rbp)
  movl   $0x6ed9eba1,-0x78(%rbp)
  mov    -0x84(%rbp),%eax
  xor    -0x80(%rbp),%eax
  and    -0x88(%rbp),%eax
  xor    -0x80(%rbp),%eax
  mov    %eax,%edx
  mov    -0x60(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x8c(%rbp)
  roll   $0x3,-0x8c(%rbp)
  mov    -0x88(%rbp),%eax
  xor    -0x84(%rbp),%eax
  and    -0x8c(%rbp),%eax
  xor    -0x84(%rbp),%eax
  mov    %eax,%edx
  mov    -0x5c(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x80(%rbp)
  roll   $0x7,-0x80(%rbp)
  mov    -0x8c(%rbp),%eax
  xor    -0x88(%rbp),%eax
  and    -0x80(%rbp),%eax
  xor    -0x88(%rbp),%eax
  mov    %eax,%edx
  mov    -0x58(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x84(%rbp)
  roll   $0xb,-0x84(%rbp)
  mov    -0x80(%rbp),%eax
  xor    -0x8c(%rbp),%eax
  and    -0x84(%rbp),%eax
  xor    -0x8c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x54(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x88(%rbp)
  rorl   $0xd,-0x88(%rbp)
  mov    -0x84(%rbp),%eax
  xor    -0x80(%rbp),%eax
  and    -0x88(%rbp),%eax
  xor    -0x80(%rbp),%eax
  mov    %eax,%edx
  mov    -0x50(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x8c(%rbp)
  roll   $0x3,-0x8c(%rbp)
  mov    -0x88(%rbp),%eax
  xor    -0x84(%rbp),%eax
  and    -0x8c(%rbp),%eax
  xor    -0x84(%rbp),%eax
  mov    %eax,%edx
  mov    -0x4c(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x80(%rbp)
  roll   $0x7,-0x80(%rbp)
  mov    -0x8c(%rbp),%eax
  xor    -0x88(%rbp),%eax
  and    -0x80(%rbp),%eax
  xor    -0x88(%rbp),%eax
  mov    %eax,%edx
  mov    -0x48(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x84(%rbp)
  roll   $0xb,-0x84(%rbp)
  mov    -0x80(%rbp),%eax
  xor    -0x8c(%rbp),%eax
  and    -0x84(%rbp),%eax
  xor    -0x8c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x44(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x88(%rbp)
  rorl   $0xd,-0x88(%rbp)
  mov    -0x84(%rbp),%eax
  xor    -0x80(%rbp),%eax
  and    -0x88(%rbp),%eax
  xor    -0x80(%rbp),%eax
  mov    %eax,%edx
  mov    -0x40(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x8c(%rbp)
  roll   $0x3,-0x8c(%rbp)
  mov    -0x88(%rbp),%eax
  xor    -0x84(%rbp),%eax
  and    -0x8c(%rbp),%eax
  xor    -0x84(%rbp),%eax
  mov    %eax,%edx
  mov    -0x3c(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x80(%rbp)
  roll   $0x7,-0x80(%rbp)
  mov    -0x8c(%rbp),%eax
  xor    -0x88(%rbp),%eax
  and    -0x80(%rbp),%eax
  xor    -0x88(%rbp),%eax
  mov    %eax,%edx
  mov    -0x38(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x84(%rbp)
  roll   $0xb,-0x84(%rbp)
  mov    -0x80(%rbp),%eax
  xor    -0x8c(%rbp),%eax
  and    -0x84(%rbp),%eax
  xor    -0x8c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x34(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x88(%rbp)
  rorl   $0xd,-0x88(%rbp)
  mov    -0x84(%rbp),%eax
  xor    -0x80(%rbp),%eax
  and    -0x88(%rbp),%eax
  xor    -0x80(%rbp),%eax
  mov    %eax,%edx
  mov    -0x30(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x8c(%rbp)
  roll   $0x3,-0x8c(%rbp)
  mov    -0x88(%rbp),%eax
  xor    -0x84(%rbp),%eax
  and    -0x8c(%rbp),%eax
  xor    -0x84(%rbp),%eax
  mov    %eax,%edx
  mov    -0x2c(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x80(%rbp)
  roll   $0x7,-0x80(%rbp)
  mov    -0x8c(%rbp),%eax
  xor    -0x88(%rbp),%eax
  and    -0x80(%rbp),%eax
  xor    -0x88(%rbp),%eax
  mov    %eax,%edx
  mov    -0x28(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x84(%rbp)
  roll   $0xb,-0x84(%rbp)
  mov    -0x80(%rbp),%eax
  xor    -0x8c(%rbp),%eax
  and    -0x84(%rbp),%eax
  xor    -0x8c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x24(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x88(%rbp)
  rorl   $0xd,-0x88(%rbp)
  mov    -0x84(%rbp),%eax
  or     -0x80(%rbp),%eax
  and    -0x88(%rbp),%eax
  mov    %eax,%edx
  mov    -0x84(%rbp),%eax
  and    -0x80(%rbp),%eax
  or     %eax,%edx
  mov    -0x60(%rbp),%eax
  add    %eax,%edx
  mov    -0x7c(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x8c(%rbp)
  roll   $0x3,-0x8c(%rbp)
  mov    -0x88(%rbp),%eax
  or     -0x84(%rbp),%eax
  and    -0x8c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x88(%rbp),%eax
  and    -0x84(%rbp),%eax
  or     %eax,%edx
  mov    -0x50(%rbp),%eax
  add    %eax,%edx
  mov    -0x7c(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x80(%rbp)
  roll   $0x5,-0x80(%rbp)
  mov    -0x8c(%rbp),%eax
  or     -0x88(%rbp),%eax
  and    -0x80(%rbp),%eax
  mov    %eax,%edx
  mov    -0x8c(%rbp),%eax
  and    -0x88(%rbp),%eax
  or     %eax,%edx
  mov    -0x40(%rbp),%eax
  add    %eax,%edx
  mov    -0x7c(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x84(%rbp)
  roll   $0x9,-0x84(%rbp)
  mov    -0x80(%rbp),%eax
  or     -0x8c(%rbp),%eax
  and    -0x84(%rbp),%eax
  mov    %eax,%edx
  mov    -0x80(%rbp),%eax
  and    -0x8c(%rbp),%eax
  or     %eax,%edx
  mov    -0x30(%rbp),%eax
  add    %eax,%edx
  mov    -0x7c(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x88(%rbp)
  roll   $0xd,-0x88(%rbp)
  mov    -0x84(%rbp),%eax
  or     -0x80(%rbp),%eax
  and    -0x88(%rbp),%eax
  mov    %eax,%edx
  mov    -0x84(%rbp),%eax
  and    -0x80(%rbp),%eax
  or     %eax,%edx
  mov    -0x5c(%rbp),%eax
  add    %eax,%edx
  mov    -0x7c(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x8c(%rbp)
  roll   $0x3,-0x8c(%rbp)
  mov    -0x88(%rbp),%eax
  or     -0x84(%rbp),%eax
  and    -0x8c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x88(%rbp),%eax
  and    -0x84(%rbp),%eax
  or     %eax,%edx
  mov    -0x4c(%rbp),%eax
  add    %eax,%edx
  mov    -0x7c(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x80(%rbp)
  roll   $0x5,-0x80(%rbp)
  mov    -0x8c(%rbp),%eax
  or     -0x88(%rbp),%eax
  and    -0x80(%rbp),%eax
  mov    %eax,%edx
  mov    -0x8c(%rbp),%eax
  and    -0x88(%rbp),%eax
  or     %eax,%edx
  mov    -0x3c(%rbp),%eax
  add    %eax,%edx
  mov    -0x7c(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x84(%rbp)
  roll   $0x9,-0x84(%rbp)
  mov    -0x80(%rbp),%eax
  or     -0x8c(%rbp),%eax
  and    -0x84(%rbp),%eax
  mov    %eax,%edx
  mov    -0x80(%rbp),%eax
  and    -0x8c(%rbp),%eax
  or     %eax,%edx
  mov    -0x2c(%rbp),%eax
  add    %eax,%edx
  mov    -0x7c(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x88(%rbp)
  roll   $0xd,-0x88(%rbp)
  mov    -0x84(%rbp),%eax
  or     -0x80(%rbp),%eax
  and    -0x88(%rbp),%eax
  mov    %eax,%edx
  mov    -0x84(%rbp),%eax
  and    -0x80(%rbp),%eax
  or     %eax,%edx
  mov    -0x58(%rbp),%eax
  add    %eax,%edx
  mov    -0x7c(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x8c(%rbp)
  roll   $0x3,-0x8c(%rbp)
  mov    -0x88(%rbp),%eax
  or     -0x84(%rbp),%eax
  and    -0x8c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x88(%rbp),%eax
  and    -0x84(%rbp),%eax
  or     %eax,%edx
  mov    -0x48(%rbp),%eax
  add    %eax,%edx
  mov    -0x7c(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x80(%rbp)
  roll   $0x5,-0x80(%rbp)
  mov    -0x8c(%rbp),%eax
  or     -0x88(%rbp),%eax
  and    -0x80(%rbp),%eax
  mov    %eax,%edx
  mov    -0x8c(%rbp),%eax
  and    -0x88(%rbp),%eax
  or     %eax,%edx
  mov    -0x38(%rbp),%eax
  add    %eax,%edx
  mov    -0x7c(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x84(%rbp)
  roll   $0x9,-0x84(%rbp)
  mov    -0x80(%rbp),%eax
  or     -0x8c(%rbp),%eax
  and    -0x84(%rbp),%eax
  mov    %eax,%edx
  mov    -0x80(%rbp),%eax
  and    -0x8c(%rbp),%eax
  or     %eax,%edx
  mov    -0x28(%rbp),%eax
  add    %eax,%edx
  mov    -0x7c(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x88(%rbp)
  roll   $0xd,-0x88(%rbp)
  mov    -0x84(%rbp),%eax
  or     -0x80(%rbp),%eax
  and    -0x88(%rbp),%eax
  mov    %eax,%edx
  mov    -0x84(%rbp),%eax
  and    -0x80(%rbp),%eax
  or     %eax,%edx
  mov    -0x54(%rbp),%eax
  add    %eax,%edx
  mov    -0x7c(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x8c(%rbp)
  roll   $0x3,-0x8c(%rbp)
  mov    -0x88(%rbp),%eax
  or     -0x84(%rbp),%eax
  and    -0x8c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x88(%rbp),%eax
  and    -0x84(%rbp),%eax
  or     %eax,%edx
  mov    -0x44(%rbp),%eax
  add    %eax,%edx
  mov    -0x7c(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x80(%rbp)
  roll   $0x5,-0x80(%rbp)
  mov    -0x8c(%rbp),%eax
  or     -0x88(%rbp),%eax
  and    -0x80(%rbp),%eax
  mov    %eax,%edx
  mov    -0x8c(%rbp),%eax
  and    -0x88(%rbp),%eax
  or     %eax,%edx
  mov    -0x34(%rbp),%eax
  add    %eax,%edx
  mov    -0x7c(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x84(%rbp)
  roll   $0x9,-0x84(%rbp)
  mov    -0x80(%rbp),%eax
  or     -0x8c(%rbp),%eax
  and    -0x84(%rbp),%eax
  mov    %eax,%edx
  mov    -0x80(%rbp),%eax
  and    -0x8c(%rbp),%eax
  or     %eax,%edx
  mov    -0x24(%rbp),%eax
  add    %eax,%edx
  mov    -0x7c(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x88(%rbp)
  roll   $0xd,-0x88(%rbp)
  mov    -0x80(%rbp),%eax
  xor    -0x84(%rbp),%eax
  xor    -0x88(%rbp),%eax
  mov    %eax,%edx
  mov    -0x60(%rbp),%eax
  add    %eax,%edx
  mov    -0x78(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x8c(%rbp)
  roll   $0x3,-0x8c(%rbp)
  mov    -0x84(%rbp),%eax
  xor    -0x88(%rbp),%eax
  xor    -0x8c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x40(%rbp),%eax
  add    %eax,%edx
  mov    -0x78(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x80(%rbp)
  roll   $0x9,-0x80(%rbp)
  mov    -0x88(%rbp),%eax
  xor    -0x8c(%rbp),%eax
  xor    -0x80(%rbp),%eax
  mov    %eax,%edx
  mov    -0x50(%rbp),%eax
  add    %eax,%edx
  mov    -0x78(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x84(%rbp)
  roll   $0xb,-0x84(%rbp)
  mov    -0x8c(%rbp),%eax
  xor    -0x80(%rbp),%eax
  xor    -0x84(%rbp),%eax
  mov    %eax,%edx
  mov    -0x30(%rbp),%eax
  add    %eax,%edx
  mov    -0x78(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x88(%rbp)
  roll   $0xf,-0x88(%rbp)
  mov    -0x80(%rbp),%eax
  xor    -0x84(%rbp),%eax
  xor    -0x88(%rbp),%eax
  mov    %eax,%edx
  mov    -0x58(%rbp),%eax
  add    %eax,%edx
  mov    -0x78(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x8c(%rbp)
  roll   $0x3,-0x8c(%rbp)
  mov    -0x84(%rbp),%eax
  xor    -0x88(%rbp),%eax
  xor    -0x8c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x38(%rbp),%eax
  add    %eax,%edx
  mov    -0x78(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x80(%rbp)
  roll   $0x9,-0x80(%rbp)
  mov    -0x88(%rbp),%eax
  xor    -0x8c(%rbp),%eax
  xor    -0x80(%rbp),%eax
  mov    %eax,%edx
  mov    -0x48(%rbp),%eax
  add    %eax,%edx
  mov    -0x78(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x84(%rbp)
  roll   $0xb,-0x84(%rbp)
  mov    -0x8c(%rbp),%eax
  xor    -0x80(%rbp),%eax
  xor    -0x84(%rbp),%eax
  mov    %eax,%edx
  mov    -0x28(%rbp),%eax
  add    %eax,%edx
  mov    -0x78(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x88(%rbp)
  roll   $0xf,-0x88(%rbp)
  mov    -0x80(%rbp),%eax
  xor    -0x84(%rbp),%eax
  xor    -0x88(%rbp),%eax
  mov    %eax,%edx
  mov    -0x5c(%rbp),%eax
  add    %eax,%edx
  mov    -0x78(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x8c(%rbp)
  roll   $0x3,-0x8c(%rbp)
  mov    -0x84(%rbp),%eax
  xor    -0x88(%rbp),%eax
  xor    -0x8c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x3c(%rbp),%eax
  add    %eax,%edx
  mov    -0x78(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x80(%rbp)
  roll   $0x9,-0x80(%rbp)
  mov    -0x88(%rbp),%eax
  xor    -0x8c(%rbp),%eax
  xor    -0x80(%rbp),%eax
  mov    %eax,%edx
  mov    -0x4c(%rbp),%eax
  add    %eax,%edx
  mov    -0x78(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x84(%rbp)
  roll   $0xb,-0x84(%rbp)
  mov    -0x8c(%rbp),%eax
  xor    -0x80(%rbp),%eax
  xor    -0x84(%rbp),%eax
  mov    %eax,%edx
  mov    -0x2c(%rbp),%eax
  add    %eax,%edx
  mov    -0x78(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x88(%rbp)
  roll   $0xf,-0x88(%rbp)
  mov    -0x80(%rbp),%eax
  xor    -0x84(%rbp),%eax
  xor    -0x88(%rbp),%eax
  mov    %eax,%edx
  mov    -0x54(%rbp),%eax
  add    %eax,%edx
  mov    -0x78(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x8c(%rbp)
  roll   $0x3,-0x8c(%rbp)
  mov    -0x84(%rbp),%eax
  xor    -0x88(%rbp),%eax
  xor    -0x8c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x34(%rbp),%eax
  add    %eax,%edx
  mov    -0x78(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x80(%rbp)
  roll   $0x9,-0x80(%rbp)
  mov    -0x88(%rbp),%eax
  xor    -0x8c(%rbp),%eax
  xor    -0x80(%rbp),%eax
  mov    %eax,%edx
  mov    -0x44(%rbp),%eax
  add    %eax,%edx
  mov    -0x78(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x84(%rbp)
  roll   $0xb,-0x84(%rbp)
  mov    -0x8c(%rbp),%eax
  xor    -0x80(%rbp),%eax
  xor    -0x84(%rbp),%eax
  mov    %eax,%edx
  mov    -0x24(%rbp),%eax
  add    %eax,%edx
  mov    -0x78(%rbp),%eax
  add    %edx,%eax
  add    %eax,-0x88(%rbp)
  roll   $0xf,-0x88(%rbp)
  mov    -0x70(%rbp),%edx
  mov    -0x8c(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x70(%rbp)
  mov    -0x6c(%rbp),%edx
  mov    -0x88(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x6c(%rbp)
  mov    -0x68(%rbp),%edx
  mov    -0x84(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x68(%rbp)
  mov    -0x64(%rbp),%edx
  mov    -0x80(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x64(%rbp)
  movl   $0x0,-0x9c(%rbp)
  jmp    L29
L66:
  movl   $0x0,-0x98(%rbp)
  mov    -0x9c(%rbp),%eax
  cltq
  mov    -0x70(%rbp,%rax,4),%eax
  mov    %eax,-0x94(%rbp)
  jmp    L43
L68:
  mov    -0x94(%rbp),%eax
  movzbl %al,%eax
  mov    %eax,-0x74(%rbp)
  mov    -0x74(%rbp),%eax
  and    $0xf,%eax
  mov    %eax,%edx
  mov    -0x9c(%rbp),%eax
  lea    0x0(,%rax,4),%ecx
  mov    -0x98(%rbp),%eax
  add    %ecx,%eax
  add    %eax,%eax
  add    $0x1,%eax
  mov    %edx,%edx
  movzbl -0x20(%rbp,%rdx,1),%edx
  cltq
  lea    D24(%rip),%rcx
  mov    %dl,(%rax,%rcx,1)
  mov    -0x74(%rbp),%eax
  shr    $0x4,%eax
  mov    %eax,-0x74(%rbp)
  mov    -0x74(%rbp),%eax
  and    $0xf,%eax
  mov    %eax,%edx
  mov    -0x9c(%rbp),%eax
  lea    0x0(,%rax,4),%ecx
  mov    -0x98(%rbp),%eax
  add    %ecx,%eax
  add    %eax,%eax
  mov    %edx,%edx
  movzbl -0x20(%rbp,%rdx,1),%edx
  cltq
  lea    D24(%rip),%rcx
  mov    %dl,(%rax,%rcx,1)
  mov    -0x94(%rbp),%eax
  shr    $0x8,%eax
  mov    %eax,-0x94(%rbp)
  addl   $0x1,-0x98(%rbp)
L43:
  cmpl   $0x3,-0x98(%rbp)
  jle    L68
  addl   $0x1,-0x9c(%rbp)
L29:
  cmpl   $0x3,-0x9c(%rbp)
  jle    L66
  movb   $0x0,D8(%rip)
  lea    D24(%rip),%rax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L48
  call   <__stack_chk_fail@plt>
L48:
  leave
  ret
```

assistant: ```c
char *ntlm_crypt(char *key) {
  int i, j;
  int length = strlen(key);
  unsigned int nt_buffer[16], a, b, c, d, sqrt2, sqrt3, n, output[4];
  static char hex_format[33];
  char itoa16[16] = "0123456789abcdef";
  memset(nt_buffer, 0, 16 * sizeof(unsigned int));
  for (i = 0; i < length / 2; i++)
    nt_buffer[i] = key[2 * i] | (key[2 * i + 1] << 16);
  if (length % 2 == 1)
    nt_buffer[i] = key[length - 1] | 0x800000;
  else
    nt_buffer[i] = 0x80;
  nt_buffer[14] = length << 4;
  output[0] = a = 0x67452301;
  output[1] = b = 0xefcdab89;
  output[2] = c = 0x98badcfe;
  output[3] = d = 0x10325476;
  sqrt2 = 0x5a827999;
  sqrt3 = 0x6ed9eba1;
  a += (d ^ (b & (c ^ d))) + nt_buffer[0];
  a = (a << 3) | (a >> 29);
  d += (c ^ (a & (b ^ c))) + nt_buffer[1];
  d = (d << 7) | (d >> 25);
  c += (b ^ (d & (a ^ b))) + nt_buffer[2];
  c = (c << 11) | (c >> 21);
  b += (a ^ (c & (d ^ a))) + nt_buffer[3];
  b = (b << 19) | (b >> 13);
  a += (d ^ (b & (c ^ d))) + nt_buffer[4];
  a = (a << 3) | (a >> 29);
  d += (c ^ (a & (b ^ c))) + nt_buffer[5];
  d = (d << 7) | (d >> 25);
  c += (b ^ (d & (a ^ b))) + nt_buffer[6];
  c = (c << 11) | (c >> 21);
  b += (a ^ (c & (d ^ a))) + nt_buffer[7];
  b = (b << 19) | (b >> 13);
  a += (d ^ (b & (c ^ d))) + nt_buffer[8];
  a = (a << 3) | (a >> 29);
  d += (c ^ (a & (b ^ c))) + nt_buffer[9];
  d = (d << 7) | (d >> 25);
  c += (b ^ (d & (a ^ b))) + nt_buffer[10];
  c = (c << 11) | (c >> 21);
  b += (a ^ (c & (d ^ a))) + nt_buffer[11];
  b = (b << 19) | (b >> 13);
  a += (d ^ (b & (c ^ d))) + nt_buffer[12];
  a = (a << 3) | (a >> 29);
  d += (c ^ (a & (b ^ c))) + nt_buffer[13];
  d = (d << 7) | (d >> 25);
  c += (b ^ (d & (a ^ b))) + nt_buffer[14];
  c = (c << 11) | (c >> 21);
  b += (a ^ (c & (d ^ a))) + nt_buffer[15];
  b = (b << 19) | (b >> 13);
  a += ((b & (c | d)) | (c & d)) + nt_buffer[0] + sqrt2;
  a = (a << 3) | (a >> 29);
  d += ((a & (b | c)) | (b & c)) + nt_buffer[4] + sqrt2;
  d = (d << 5) | (d >> 27);
  c += ((d & (a | b)) | (a & b)) + nt_buffer[8] + sqrt2;
  c = (c << 9) | (c >> 23);
  b += ((c & (d | a)) | (d & a)) + nt_buffer[12] + sqrt2;
  b = (b << 13) | (b >> 19);
  a += ((b & (c | d)) | (c & d)) + nt_buffer[1] + sqrt2;
  a = (a << 3) | (a >> 29);
  d += ((a & (b | c)) | (b & c)) + nt_buffer[5] + sqrt2;
  d = (d << 5) | (d >> 27);
  c += ((d & (a | b)) | (a & b)) + nt_buffer[9] + sqrt2;
  c = (c << 9) | (c >> 23);
  b += ((c & (d | a)) | (d & a)) + nt_buffer[13] + sqrt2;
  b = (b << 13) | (b >> 19);
  a += ((b & (c | d)) | (c & d)) + nt_buffer[2] + sqrt2;
  a = (a << 3) | (a >> 29);
  d += ((a & (b | c)) | (b & c)) + nt_buffer[6] + sqrt2;
  d = (d << 5) | (d >> 27);
  c += ((d & (a | b)) | (a & b)) + nt_buffer[10] + sqrt2;
  c = (c << 9) | (c >> 23);
  b += ((c & (d | a)) | (d & a)) + nt_buffer[14] + sqrt2;
  b = (b << 13) | (b >> 19);
  a += ((b & (c | d)) | (c & d)) + nt_buffer[3] + sqrt2;
  a = (a << 3) | (a >> 29);
  d += ((a & (b | c)) | (b & c)) + nt_buffer[7] + sqrt2;
  d = (d << 5) | (d >> 27);
  c += ((d & (a | b)) | (a & b)) + nt_buffer[11] + sqrt2;
  c = (c << 9) | (c >> 23);
  b += ((c & (d | a)) | (d & a)) + nt_buffer[15] + sqrt2;
  b = (b << 13) | (b >> 19);
  a += (d ^ c ^ b) + nt_buffer[0] + sqrt3;
  a = (a << 3) | (a >> 29);
  d += (c ^ b ^ a) + nt_buffer[8] + sqrt3;
  d = (d << 9) | (d >> 23);
  c += (b ^ a ^ d) + nt_buffer[4] + sqrt3;
  c = (c << 11) | (c >> 21);
  b += (a ^ d ^ c) + nt_buffer[12] + sqrt3;
  b = (b << 15) | (b >> 17);
  a += (d ^ c ^ b) + nt_buffer[2] + sqrt3;
  a = (a << 3) | (a >> 29);
  d += (c ^ b ^ a) + nt_buffer[10] + sqrt3;
  d = (d << 9) | (d >> 23);
  c += (b ^ a ^ d) + nt_buffer[6] + sqrt3;
  c = (c << 11) | (c >> 21);
  b += (a ^ d ^ c) + nt_buffer[14] + sqrt3;
  b = (b << 15) | (b >> 17);
  a += (d ^ c ^ b) + nt_buffer[1] + sqrt3;
  a = (a << 3) | (a >> 29);
  d += (c ^ b ^ a) + nt_buffer[9] + sqrt3;
  d = (d << 9) | (d >> 23);
  c += (b ^ a ^ d) + nt_buffer[5] + sqrt3;
  c = (c << 11) | (c >> 21);
  b += (a ^ d ^ c) + nt_buffer[13] + sqrt3;
  b = (b << 15) | (b >> 17);
  a += (d ^ c ^ b) + nt_buffer[3] + sqrt3;
  a = (a << 3) | (a >> 29);
  d += (c ^ b ^ a) + nt_buffer[11] + sqrt3;
  d = (d << 9) | (d >> 23);
  c += (b ^ a ^ d) + nt_buffer[7] + sqrt3;
  c = (c << 11) | (c >> 21);
  b += (a ^ d ^ c) + nt_buffer[15] + sqrt3;
  b = (b << 15) | (b >> 17);
  output[0] += a;
  output[1] += b;
  output[2] += c;
  output[3] += d;
  for (i = 0; i < 4; i++)
    for (j = 0, n = output[i]; j < 4; j++) {
      unsigned int convert = n % 256;
      hex_format[i * 8 + j * 2 + 1] = itoa16[convert % 16];
      convert = convert / 16;
      hex_format[i * 8 + j * 2 + 0] = itoa16[convert % 16];
      n = n / 256;
    }
  hex_format[33] = 0;
  return hex_format;
}
```