user: 请将以下的汇编代码转换成C语言代码:

```asm
<md5>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x280,%rsp
  mov    %rdi,-0x278(%rbp)
  mov    %rsi,-0x280(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movq   $0x0,-0x230(%rbp)
  movl   $0x7,-0x210(%rbp)
  movl   $0xc,-0x20c(%rbp)
  movl   $0x11,-0x208(%rbp)
  movl   $0x16,-0x204(%rbp)
  movl   $0x7,-0x200(%rbp)
  movl   $0xc,-0x1fc(%rbp)
  movl   $0x11,-0x1f8(%rbp)
  movl   $0x16,-0x1f4(%rbp)
  movl   $0x7,-0x1f0(%rbp)
  movl   $0xc,-0x1ec(%rbp)
  movl   $0x11,-0x1e8(%rbp)
  movl   $0x16,-0x1e4(%rbp)
  movl   $0x7,-0x1e0(%rbp)
  movl   $0xc,-0x1dc(%rbp)
  movl   $0x11,-0x1d8(%rbp)
  movl   $0x16,-0x1d4(%rbp)
  movl   $0x5,-0x1d0(%rbp)
  movl   $0x9,-0x1cc(%rbp)
  movl   $0xe,-0x1c8(%rbp)
  movl   $0x14,-0x1c4(%rbp)
  movl   $0x5,-0x1c0(%rbp)
  movl   $0x9,-0x1bc(%rbp)
  movl   $0xe,-0x1b8(%rbp)
  movl   $0x14,-0x1b4(%rbp)
  movl   $0x5,-0x1b0(%rbp)
  movl   $0x9,-0x1ac(%rbp)
  movl   $0xe,-0x1a8(%rbp)
  movl   $0x14,-0x1a4(%rbp)
  movl   $0x5,-0x1a0(%rbp)
  movl   $0x9,-0x19c(%rbp)
  movl   $0xe,-0x198(%rbp)
  movl   $0x14,-0x194(%rbp)
  movl   $0x4,-0x190(%rbp)
  movl   $0xb,-0x18c(%rbp)
  movl   $0x10,-0x188(%rbp)
  movl   $0x17,-0x184(%rbp)
  movl   $0x4,-0x180(%rbp)
  movl   $0xb,-0x17c(%rbp)
  movl   $0x10,-0x178(%rbp)
  movl   $0x17,-0x174(%rbp)
  movl   $0x4,-0x170(%rbp)
  movl   $0xb,-0x16c(%rbp)
  movl   $0x10,-0x168(%rbp)
  movl   $0x17,-0x164(%rbp)
  movl   $0x4,-0x160(%rbp)
  movl   $0xb,-0x15c(%rbp)
  movl   $0x10,-0x158(%rbp)
  movl   $0x17,-0x154(%rbp)
  movl   $0x6,-0x150(%rbp)
  movl   $0xa,-0x14c(%rbp)
  movl   $0xf,-0x148(%rbp)
  movl   $0x15,-0x144(%rbp)
  movl   $0x6,-0x140(%rbp)
  movl   $0xa,-0x13c(%rbp)
  movl   $0xf,-0x138(%rbp)
  movl   $0x15,-0x134(%rbp)
  movl   $0x6,-0x130(%rbp)
  movl   $0xa,-0x12c(%rbp)
  movl   $0xf,-0x128(%rbp)
  movl   $0x15,-0x124(%rbp)
  movl   $0x6,-0x120(%rbp)
  movl   $0xa,-0x11c(%rbp)
  movl   $0xf,-0x118(%rbp)
  movl   $0x15,-0x114(%rbp)
  movl   $0xd76aa478,-0x110(%rbp)
  movl   $0xe8c7b756,-0x10c(%rbp)
  movl   $0x242070db,-0x108(%rbp)
  movl   $0xc1bdceee,-0x104(%rbp)
  movl   $0xf57c0faf,-0x100(%rbp)
  movl   $0x4787c62a,-0xfc(%rbp)
  movl   $0xa8304613,-0xf8(%rbp)
  movl   $0xfd469501,-0xf4(%rbp)
  movl   $0x698098d8,-0xf0(%rbp)
  movl   $0x8b44f7af,-0xec(%rbp)
  movl   $0xffff5bb1,-0xe8(%rbp)
  movl   $0x895cd7be,-0xe4(%rbp)
  movl   $0x6b901122,-0xe0(%rbp)
  movl   $0xfd987193,-0xdc(%rbp)
  movl   $0xa679438e,-0xd8(%rbp)
  movl   $0x49b40821,-0xd4(%rbp)
  movl   $0xf61e2562,-0xd0(%rbp)
  movl   $0xc040b340,-0xcc(%rbp)
  movl   $0x265e5a51,-0xc8(%rbp)
  movl   $0xe9b6c7aa,-0xc4(%rbp)
  movl   $0xd62f105d,-0xc0(%rbp)
  movl   $0x2441453,-0xbc(%rbp)
  movl   $0xd8a1e681,-0xb8(%rbp)
  movl   $0xe7d3fbc8,-0xb4(%rbp)
  movl   $0x21e1cde6,-0xb0(%rbp)
  movl   $0xc33707d6,-0xac(%rbp)
  movl   $0xf4d50d87,-0xa8(%rbp)
  movl   $0x455a14ed,-0xa4(%rbp)
  movl   $0xa9e3e905,-0xa0(%rbp)
  movl   $0xfcefa3f8,-0x9c(%rbp)
  movl   $0x676f02d9,-0x98(%rbp)
  movl   $0x8d2a4c8a,-0x94(%rbp)
  movl   $0xfffa3942,-0x90(%rbp)
  movl   $0x8771f681,-0x8c(%rbp)
  movl   $0x6d9d6122,-0x88(%rbp)
  movl   $0xfde5380c,-0x84(%rbp)
  movl   $0xa4beea44,-0x80(%rbp)
  movl   $0x4bdecfa9,-0x7c(%rbp)
  movl   $0xf6bb4b60,-0x78(%rbp)
  movl   $0xbebfbc70,-0x74(%rbp)
  movl   $0x289b7ec6,-0x70(%rbp)
  movl   $0xeaa127fa,-0x6c(%rbp)
  movl   $0xd4ef3085,-0x68(%rbp)
  movl   $0x4881d05,-0x64(%rbp)
  movl   $0xd9d4d039,-0x60(%rbp)
  movl   $0xe6db99e5,-0x5c(%rbp)
  movl   $0x1fa27cf8,-0x58(%rbp)
  movl   $0xc4ac5665,-0x54(%rbp)
  movl   $0xf4292244,-0x50(%rbp)
  movl   $0x432aff97,-0x4c(%rbp)
  movl   $0xab9423a7,-0x48(%rbp)
  movl   $0xfc93a039,-0x44(%rbp)
  movl   $0x655b59c3,-0x40(%rbp)
  movl   $0x8f0ccc92,-0x3c(%rbp)
  movl   $0xffeff47d,-0x38(%rbp)
  movl   $0x85845dd1,-0x34(%rbp)
  movl   $0x6fa87e4f,-0x30(%rbp)
  movl   $0xfe2ce6e0,-0x2c(%rbp)
  movl   $0xa3014314,-0x28(%rbp)
  movl   $0x4e0811a1,-0x24(%rbp)
  movl   $0xf7537e82,-0x20(%rbp)
  movl   $0xbd3af235,-0x1c(%rbp)
  movl   $0x2ad7d2bb,-0x18(%rbp)
  movl   $0xeb86d391,-0x14(%rbp)
  movl   $0x67452301,-0x26c(%rbp)
  movl   $0xefcdab89,-0x268(%rbp)
  movl   $0x98badcfe,-0x264(%rbp)
  movl   $0x10325476,-0x260(%rbp)
  mov    -0x280(%rbp),%rax
  shl    $0x3,%eax
  add    $0x1,%eax
  mov    %eax,-0x258(%rbp)
  jmp    L49
L9:
  addl   $0x1,-0x258(%rbp)
L49:
  mov    -0x258(%rbp),%eax
  cltd
  shr    $0x17,%edx
  add    %edx,%eax
  and    $0x1ff,%eax
  sub    %edx,%eax
  cmp    $0x1c0,%eax
  jne    L9
  mov    -0x258(%rbp),%eax
  lea    0x7(%rax),%edx
  test   %eax,%eax
  cmovs  %edx,%eax
  sar    $0x3,%eax
  mov    %eax,-0x258(%rbp)
  mov    -0x258(%rbp),%eax
  add    $0x40,%eax
  mov    $0x1,%esi
  mov    %eax,%edi
  call   <calloc@plt>
  mov    %rax,-0x230(%rbp)
  mov    -0x280(%rbp),%rdx
  mov    -0x278(%rbp),%rcx
  mov    -0x230(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <memcpy@plt>
  mov    -0x280(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x230(%rbp),%rax
  add    %rdx,%rax
  movl   $0x80,(%rax)
  mov    -0x280(%rbp),%rax
  shl    $0x3,%eax
  mov    %eax,-0x25c(%rbp)
  mov    -0x258(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x230(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  lea    -0x25c(%rbp),%rax
  mov    $0x4,%edx
  mov    %rax,%rsi
  mov    %rcx,%rdi
  mov    $0x0,%eax
  call   <memcpy@plt>
  movl   $0x0,-0x254(%rbp)
  jmp    L54
L106:
  mov    -0x254(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x230(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x218(%rbp)
  mov    -0x26c(%rbp),%eax
  mov    %eax,-0x250(%rbp)
  mov    -0x268(%rbp),%eax
  mov    %eax,-0x24c(%rbp)
  mov    -0x264(%rbp),%eax
  mov    %eax,-0x248(%rbp)
  mov    -0x260(%rbp),%eax
  mov    %eax,-0x244(%rbp)
  movl   $0x0,-0x240(%rbp)
  jmp    L67
L123:
  cmpl   $0xf,-0x240(%rbp)
  jg     L73
  mov    -0x24c(%rbp),%eax
  and    -0x248(%rbp),%eax
  mov    %eax,%edx
  mov    -0x24c(%rbp),%eax
  not    %eax
  and    -0x244(%rbp),%eax
  or     %edx,%eax
  mov    %eax,-0x23c(%rbp)
  mov    -0x240(%rbp),%eax
  mov    %eax,-0x238(%rbp)
  jmp    L52
L73:
  cmpl   $0x1f,-0x240(%rbp)
  jg     L28
  mov    -0x244(%rbp),%eax
  and    -0x24c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x244(%rbp),%eax
  not    %eax
  and    -0x248(%rbp),%eax
  or     %edx,%eax
  mov    %eax,-0x23c(%rbp)
  mov    -0x240(%rbp),%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  add    $0x1,%eax
  cltd
  shr    $0x1c,%edx
  add    %edx,%eax
  and    $0xf,%eax
  sub    %edx,%eax
  mov    %eax,-0x238(%rbp)
  jmp    L52
L28:
  cmpl   $0x2f,-0x240(%rbp)
  jg     L113
  mov    -0x24c(%rbp),%eax
  xor    -0x248(%rbp),%eax
  xor    -0x244(%rbp),%eax
  mov    %eax,-0x23c(%rbp)
  mov    -0x240(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  add    $0x5,%eax
  cltd
  shr    $0x1c,%edx
  add    %edx,%eax
  and    $0xf,%eax
  sub    %edx,%eax
  mov    %eax,-0x238(%rbp)
  jmp    L52
L113:
  mov    -0x244(%rbp),%eax
  not    %eax
  or     -0x24c(%rbp),%eax
  xor    -0x248(%rbp),%eax
  mov    %eax,-0x23c(%rbp)
  mov    -0x240(%rbp),%edx
  mov    %edx,%eax
  shl    $0x3,%eax
  sub    %edx,%eax
  cltd
  shr    $0x1c,%edx
  add    %edx,%eax
  and    $0xf,%eax
  sub    %edx,%eax
  mov    %eax,-0x238(%rbp)
L52:
  mov    -0x244(%rbp),%eax
  mov    %eax,-0x234(%rbp)
  mov    -0x248(%rbp),%eax
  mov    %eax,-0x244(%rbp)
  mov    -0x24c(%rbp),%eax
  mov    %eax,-0x248(%rbp)
  mov    -0x250(%rbp),%edx
  mov    -0x23c(%rbp),%eax
  add    %eax,%edx
  mov    -0x240(%rbp),%eax
  cltq
  mov    -0x110(%rbp,%rax,4),%eax
  add    %eax,%edx
  mov    -0x238(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0x218(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%eax
  add    %eax,%edx
  mov    -0x240(%rbp),%eax
  cltq
  mov    -0x210(%rbp,%rax,4),%eax
  mov    %edx,%esi
  mov    %eax,%ecx
  shl    %cl,%esi
  mov    -0x250(%rbp),%edx
  mov    -0x23c(%rbp),%eax
  add    %eax,%edx
  mov    -0x240(%rbp),%eax
  cltq
  mov    -0x110(%rbp,%rax,4),%eax
  add    %eax,%edx
  mov    -0x238(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0x218(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%eax
  add    %eax,%edx
  mov    -0x240(%rbp),%eax
  cltq
  mov    -0x210(%rbp,%rax,4),%ecx
  mov    $0x20,%eax
  sub    %ecx,%eax
  mov    %eax,%ecx
  sar    %cl,%edx
  mov    %edx,%eax
  or     %esi,%eax
  add    %eax,-0x24c(%rbp)
  mov    -0x234(%rbp),%eax
  mov    %eax,-0x250(%rbp)
  addl   $0x1,-0x240(%rbp)
L67:
  cmpl   $0x3f,-0x240(%rbp)
  jle    L123
  mov    -0x26c(%rbp),%edx
  mov    -0x250(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x26c(%rbp)
  mov    -0x268(%rbp),%edx
  mov    -0x24c(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x268(%rbp)
  mov    -0x264(%rbp),%edx
  mov    -0x248(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x264(%rbp)
  mov    -0x260(%rbp),%edx
  mov    -0x244(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x260(%rbp)
  addl   $0x40,-0x254(%rbp)
L54:
  mov    -0x254(%rbp),%eax
  cmp    -0x258(%rbp),%eax
  jl     L106
  mov    -0x230(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    $0x1,%esi
  mov    $0x21,%edi
  call   <calloc@plt>
  mov    %rax,-0x228(%rbp)
  lea    -0x26c(%rbp),%rax
  mov    %rax,-0x220(%rbp)
  mov    -0x220(%rbp),%rax
  add    $0xc,%rax
  mov    (%rax),%edi
  mov    -0x220(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%esi
  mov    -0x220(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%ecx
  mov    -0x220(%rbp),%rax
  mov    (%rax),%edx
  mov    -0x228(%rbp),%rax
  mov    %edi,%r9d
  mov    %esi,%r8d
  lea    D31(%rip),%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  lea    -0x268(%rbp),%rax
  mov    %rax,-0x220(%rbp)
  mov    -0x220(%rbp),%rax
  add    $0xc,%rax
  mov    (%rax),%r8d
  mov    -0x220(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%esi
  mov    -0x220(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%edx
  mov    -0x220(%rbp),%rax
  mov    (%rax),%eax
  mov    -0x228(%rbp),%rcx
  lea    0x8(%rcx),%rdi
  mov    %r8d,%r9d
  mov    %esi,%r8d
  mov    %edx,%ecx
  mov    %eax,%edx
  lea    D31(%rip),%rax
  mov    %rax,%rsi
  call   <sprintf@plt>
  lea    -0x264(%rbp),%rax
  mov    %rax,-0x220(%rbp)
  mov    -0x220(%rbp),%rax
  add    $0xc,%rax
  mov    (%rax),%r8d
  mov    -0x220(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%esi
  mov    -0x220(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%edx
  mov    -0x220(%rbp),%rax
  mov    (%rax),%eax
  mov    -0x228(%rbp),%rcx
  lea    0x10(%rcx),%rdi
  mov    %r8d,%r9d
  mov    %esi,%r8d
  mov    %edx,%ecx
  mov    %eax,%edx
  lea    D31(%rip),%rax
  mov    %rax,%rsi
  call   <sprintf@plt>
  lea    -0x260(%rbp),%rax
  mov    %rax,-0x220(%rbp)
  mov    -0x220(%rbp),%rax
  add    $0xc,%rax
  mov    (%rax),%r8d
  mov    -0x220(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%esi
  mov    -0x220(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%edx
  mov    -0x220(%rbp),%rax
  mov    (%rax),%eax
  mov    -0x228(%rbp),%rcx
  lea    0x18(%rcx),%rdi
  mov    %r8d,%r9d
  mov    %esi,%r8d
  mov    %edx,%ecx
  mov    %eax,%edx
  lea    D31(%rip),%rax
  mov    %rax,%rsi
  call   <sprintf@plt>
  mov    -0x228(%rbp),%rax
  add    $0x20,%rax
  movb   $0x0,(%rax)
  mov    -0x228(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L102
  call   <__stack_chk_fail@plt>
L102:
  leave
  ret
```

tool_calls: name: read_data
arguments: tag: D31
type_infered: string

tool: D31: %2.2x%2.2x%2.2x%2.2x

assistant: ```c
char *md5(char *initial_msg, size_t initial_len) {
  uint8_t *msg = NULL;
  uint32_t r[] = {7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21};
  uint32_t k[] = {0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee, 0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501, 0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be, 0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821, 0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa, 0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8, 0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed, 0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a, 0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c, 0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70, 0x289b7ec6, 0xeaa127fa, 0xd4ef3085, 0x04881d05, 0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665, 0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039, 0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1, 0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1, 0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391};
  uint32_t h0 = 0x67452301;
  uint32_t h1 = 0xefcdab89;
  uint32_t h2 = 0x98badcfe;
  uint32_t h3 = 0x10325476;
  int new_len;
  for (new_len = initial_len * 8 + 1; new_len % 512 != 448; new_len++)
    ;
  new_len /= 8;
  msg = calloc(new_len + 64, 1);
  memcpy(msg, initial_msg, initial_len);
  msg[initial_len] = 128;
  uint32_t bits_len = 8 * initial_len;
  memcpy(msg + new_len, &bits_len, 4);
  int offset;
  for (offset = 0; offset < new_len; offset += (512 / 8)) {
    uint32_t *w = (uint32_t *)(msg + offset);
    uint32_t a = h0;
    uint32_t b = h1;
    uint32_t c = h2;
    uint32_t d = h3;
    uint32_t i;
    for (i = 0; i < 64; i++) {
      uint32_t f, g;
      if (i < 16) {
        f = (b & c) | ((~b) & d);
        g = i;
      } else if (i < 32) {
        f = (d & b) | ((~d) & c);
        g = (5 * i + 1) % 16;
      } else if (i < 48) {
        f = b ^ c ^ d;
        g = (3 * i + 5) % 16;
      } else {
        f = c ^ (b | (~d));
        g = (7 * i) % 16;
      }
      uint32_t temp = d;
      d = c;
      c = b;
      b = b + ((((a + f + k[i] + w[g])) << (r[i])) | (((a + f + k[i] + w[g])) >> (32 - (r[i]))));
      a = temp;
    }
    h0 += a;
    h1 += b;
    h2 += c;
    h3 += d;
  }
  free(msg);
  char *output = calloc(33, 1);
  uint8_t *p = (uint8_t *)&h0;
  sprintf(output, "%2.2x%2.2x%2.2x%2.2x", p[0], p[1], p[2], p[3]);
  p = (uint8_t *)&h1;
  sprintf(&output[8], "%2.2x%2.2x%2.2x%2.2x", p[0], p[1], p[2], p[3]);
  p = (uint8_t *)&h2;
  sprintf(&output[16], "%2.2x%2.2x%2.2x%2.2x", p[0], p[1], p[2], p[3]);
  p = (uint8_t *)&h3;
  sprintf(&output[24], "%2.2x%2.2x%2.2x%2.2x", p[0], p[1], p[2], p[3]);
  output[32] = '\0';
  return output;
}
```