user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<GenerateCrypt>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x338,%rsp
  mov    %rdi,(%rsp)
  mov    %rsi,%rbx
  mov    %rdx,%rdi
  mov    %rcx,0x10(%rsp)
  mov    %r8,%rbp
  mov    %r9,0x18(%rsp)
  mov    %fs:0x28,%rax
  mov    %rax,0x328(%rsp)
  xor    %eax,%eax
  lea    0x20(%rsp),%r12
  mov    $0x100,%edx
  mov    %r12,%rsi
  call   <lutil_b64_pton@plt>
  mov    %eax,%r13d
  mov    0x26(%rsp),%eax
  not    %rbp
  mov    %rbp,%rsi
  or     %rax,%rsi
  movabs $0x8888888888888889,%rdx
  mov    %rsi,%rax
  imul   %rdx
  add    %rsi,%rdx
  sar    $0x4,%rdx
  mov    %rsi,%rax
  sar    $0x3f,%rax
  sub    %rax,%rdx
  mov    %rdx,%rax
  shl    $0x4,%rax
  sub    %rdx,%rax
  add    %rax,%rax
  mov    %rsi,%rcx
  sub    %rax,%rcx
  sub    %esi,%eax
  mov    %eax,%edi
  and    $0x1f,%edi
  and    $0x1f,%ecx
  mov    %rsi,%rbp
  sar    %cl,%rbp
  mov    $0xffffffff,%edx
  mov    %eax,%ecx
  shl    %cl,%edx
  not    %edx
  and    %rdx,%rbp
  mov    %edi,%ecx
  shl    %cl,%rsi
  or     %rsi,%rbp
  mov    %rbx,%rdi
  call   <strlen@plt>
  mov    %rax,%rdx
  lea    0x120(%rsp),%r14
  mov    %r13d,%r8d
  mov    %r12,%rcx
  mov    %rbx,%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <KeyMD5Encode@plt>
  mov    %eax,0xc(%rsp)
  mov    %eax,%r15d
  movb   $0x0,0x120(%rsp,%r15,1)
  mov    (%rsp),%rdi
  call   <strlen@plt>
  mov    %rax,%r12
  movslq %eax,%rbx
  lea    0x220(%rsp),%r13
  mov    %rbx,%rdx
  mov    (%rsp),%rsi
  mov    %r13,%rdi
  call   <memcpy@plt>
  movb   $0x20,0x220(%rsp,%rbx,1)
  mov    %ebp,0x221(%rsp,%rbx,1)
  mov    0x10(%rsp),%ecx
  mov    %ecx,0x225(%rsp,%rbx,1)
  lea    0x9(%r13,%rbx,1),%rdi
  mov    %r15,%rdx
  mov    %r14,%rsi
  call   <memcpy@plt>
  mov    0xc(%rsp),%eax
  lea    0x9(%rax,%r12,1),%esi
  mov    $0x100,%ecx
  mov    0x18(%rsp),%rdx
  mov    %r13,%rdi
  mov    $0x0,%eax
  call   <lutil_b64_ntop@plt>
  mov    0x328(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L7
  add    $0x338,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L7:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
int GenerateCrypt(char *szUser, char *szPassword, char *szChallenge64, long clientinfo, long embkey, char *szResult) {
  unsigned char szDecoded[256];
  unsigned char szKey[256];
  unsigned char szAscii[256];
  unsigned int nDecodedLen;
  long challengetime = 0;
  int nMoveBits;
  long challengetime_new = 0;
  long a, b, c, d;
  unsigned int nKey;
  int nUser;
  unsigned int nEncoded;
  nDecodedLen = lutil_b64_pton(szChallenge64, szDecoded, 256);
  memcpy(&challengetime, szDecoded + 6, 4);
  challengetime |= ~embkey;
  nMoveBits = challengetime % 30;
  a = challengetime << ((32 - nMoveBits) % 32);
  b = challengetime >> (((unsigned int)nMoveBits) % 32);
  c = ~(0xffffffff << ((32 - nMoveBits) % 32));
  d = b & c;
  challengetime_new = a | d;
  nKey = KeyMD5Encode(szKey, (unsigned char *)szPassword, strlen((char *)szPassword), (unsigned char *)szDecoded, nDecodedLen);
  szKey[nKey] = 0;
  nUser = strlen((char *)szUser);
  memcpy(szAscii, szUser, nUser);
  szAscii[nUser] = ' ';
  memcpy(szAscii + nUser + 1, &challengetime_new, 4);
  memcpy(szAscii + nUser + 1 + 4, &clientinfo, 4);
  memcpy(szAscii + nUser + 1 + 4 + 4, szKey, nKey);
  nEncoded = lutil_b64_ntop((unsigned char *)szAscii, nUser + 1 + 4 + 4 + nKey, szResult, 256);
  return nEncoded;
}
```