user: What would the C source look like for the assembly code provided here?

```asm
<mvp_itoh>:
  endbr64
  push   %rbp
  push   %rbx
  mov    %edi,%ebx
  sub    $0x8,%rsp
  cmp    $0xffff,%edi
  ja     L23
  cmp    $0x100,%edi
  sbb    %rdi,%rdi
  and    $0xfffffffffffffffe,%rdi
  add    $0x8,%rdi
  cmp    $0x100,%ebx
  sbb    %ebp,%ebp
  and    $0xfffffffe,%ebp
  add    $0x4,%ebp
L61:
  call   <malloc@plt>
  test   %rax,%rax
  je     L34
  mov    $0x7830,%edx
  lea    -0x4(,%rbp,4),%edi
  mov    %dx,(%rax)
  mov    $0xf,%edx
  mov    %edi,%ecx
  mov    %edx,%esi
  shl    %cl,%esi
  and    %ebx,%esi
  shr    %cl,%esi
  mov    %esi,%ecx
  and    $0xf,%ecx
  lea    0x57(%rcx),%r8d
  cmp    $0xa,%cl
  lea    0x30(%rcx),%esi
  mov    %r8d,%ecx
  cmovl  %esi,%ecx
  mov    %edx,%esi
  mov    %cl,0x2(%rax)
  lea    -0x4(%rdi),%ecx
  shl    %cl,%esi
  and    %ebx,%esi
  shr    %cl,%esi
  and    $0xf,%esi
  lea    0x57(%rsi),%r8d
  lea    0x30(%rsi),%ecx
  cmp    $0xa,%sil
  cmovge %r8d,%ecx
  mov    %cl,0x3(%rax)
  cmp    $0x2,%ebp
  je     L54
  lea    -0x8(%rdi),%ecx
  mov    %edx,%esi
  shl    %cl,%esi
  and    %ebx,%esi
  shr    %cl,%esi
  mov    %esi,%ecx
  and    $0xf,%ecx
  lea    0x57(%rcx),%r8d
  cmp    $0xa,%cl
  lea    0x30(%rcx),%esi
  mov    %r8d,%ecx
  cmovl  %esi,%ecx
  mov    %edx,%esi
  mov    %cl,0x4(%rax)
  lea    -0xc(%rdi),%ecx
  shl    %cl,%esi
  and    %ebx,%esi
  shr    %cl,%esi
  mov    %esi,%ecx
  and    $0xf,%ecx
  lea    0x57(%rcx),%r8d
  lea    0x30(%rcx),%esi
  cmp    $0xa,%cl
  mov    %r8d,%ecx
  cmovl  %esi,%ecx
  mov    %cl,0x5(%rax)
  cmp    $0x4,%ebp
  je     L54
  lea    -0x10(%rdi),%ecx
  mov    %edx,%esi
  shl    %cl,%esi
  and    %ebx,%esi
  shr    %cl,%esi
  mov    %esi,%ecx
  and    $0xf,%ecx
  lea    0x57(%rcx),%r8d
  cmp    $0xa,%cl
  lea    0x30(%rcx),%esi
  mov    %r8d,%ecx
  cmovl  %esi,%ecx
  mov    %edx,%esi
  mov    %cl,0x6(%rax)
  lea    -0x14(%rdi),%ecx
  shl    %cl,%esi
  and    %ebx,%esi
  shr    %cl,%esi
  mov    %esi,%ecx
  and    $0xf,%ecx
  lea    0x57(%rcx),%r8d
  lea    0x30(%rcx),%esi
  cmp    $0xa,%cl
  mov    %r8d,%ecx
  cmovl  %esi,%ecx
  mov    %cl,0x7(%rax)
  cmp    $0x6,%ebp
  je     L54
  lea    -0x18(%rdi),%ecx
  shl    %cl,%edx
  and    %ebx,%edx
  shr    %cl,%edx
  and    $0xf,%edx
  lea    0x57(%rdx),%esi
  lea    0x30(%rdx),%ecx
  cmp    $0xa,%dl
  mov    %esi,%edx
  cmovl  %ecx,%edx
  mov    %dl,0x8(%rax)
  cmp    $0x8,%ebp
  jne    L54
  and    $0xf,%ebx
  lea    -0x1c(%rdi),%ecx
  shr    %cl,%ebx
  lea    0x30(%rbx),%ecx
  lea    0x57(%rbx),%edx
  cmp    $0x9,%bl
  cmovle %ecx,%edx
  mov    %dl,0x9(%rax)
L54:
  movslq %ebp,%rbp
  movb   $0x0,0x2(%rax,%rbp,1)
L34:
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  ret
  cs nopw 0x0(%rax,%rax,1)
L23:
  mov    $0xc,%edi
  mov    $0x8,%ebp
  jmp    L61
```

assistant: ```c
char *mvp_itoh(int integer) {
  char *str_hex = ((void *)0);
  char *phex;
  unsigned int ui = (unsigned int)integer;
  char half_byte;
  int length;
  int pos;
  int i;
  if (ui <= 0xffffffff) {
    if (ui > 0xffff) {
      length = 8;
    } else if (ui > 0xff) {
      length = 4;
    } else {
      length = 2;
    }
    str_hex = (char *)malloc(length + 4);
    if (((void *)0) != str_hex) {
      phex = str_hex;
      *phex++ = '0';
      *phex++ = 'x';
      for (i = 0; i < length; i++) {
        pos = ((length - i) - 1) * 4;
        half_byte = ((ui & (0x0000000f << pos)) >> pos) & 0x0f;
        if ((half_byte >= 0) && (half_byte <= 9)) {
          *phex++ = '0' + half_byte;
        } else if (half_byte > 9) {
          *phex++ = 'a' + (half_byte - 10);
        }
      }
      *phex = 0;
    }
  }
  return str_hex;
}
```