user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<main>:
  endbr64
  push   %rbx
  lea    D74(%rip),%rdi
  sub    $0xc0,%rsp
  movdqa D146(%rip),%xmm0
  movdqa D81(%rip),%xmm1
  mov    %fs:0x28,%rax
  mov    %rax,0xb8(%rsp)
  xor    %eax,%eax
  lea    0x40(%rsp),%rbx
  movaps %xmm0,0x10(%rsp)
  movdqa D107(%rip),%xmm0
  movaps %xmm1,0x20(%rsp)
  movaps %xmm0,0x30(%rsp)
  call   <system@plt>
  lea    D19(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcpy@plt>
  lea    0x4f(%rsp),%rdi
  lea    D156(%rip),%rsi
  call   <strcpy@plt>
  lea    0x5e(%rsp),%rdi
  lea    D131(%rip),%rsi
  call   <strcpy@plt>
  lea    0x6d(%rsp),%rdi
  lea    D150(%rip),%rsi
  call   <strcpy@plt>
  lea    0x7c(%rsp),%rdi
  lea    D11(%rip),%rsi
  call   <strcpy@plt>
  lea    0x8b(%rsp),%rdi
  lea    D121(%rip),%rsi
  call   <strcpy@plt>
  lea    D65(%rip),%rsi
  lea    0x9a(%rsp),%rdi
  call   <strcpy@plt>
  lea    D108(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    0xc(%rsp),%rcx
  lea    0x8(%rsp),%rdx
  lea    0x4(%rsp),%rsi
  lea    D62(%rip),%rdi
  call   <scanf@plt>
  movslq 0xc(%rsp),%rax
  movdqa D81(%rip),%xmm1
  mov    %rax,%rdx
  imul   $0x51eb851f,%rax,%rax
  mov    %edx,%edi
  mov    %edx,%esi
  sar    $0x1f,%edi
  mov    %rax,%rcx
  sar    $0x27,%rax
  sar    $0x25,%rcx
  sub    %edi,%eax
  sub    %edi,%ecx
  imul   $0x190,%eax,%eax
  imul   $0x64,%ecx,%ecx
  sub    %ecx,%esi
  mov    %edx,%ecx
  sub    %eax,%ecx
  mov    %esi,%eax
  or     %ecx,%eax
  mov    %edx,%ecx
  and    $0x3,%ecx
  or     %ecx,%eax
  jne    L41
  movl   $0x1d,0x14(%rsp)
L41:
  mov    0x8(%rsp),%eax
  lea    -0x1(%rax),%esi
  test   %esi,%esi
  jle    L87
  sub    $0x2,%eax
  cmp    $0x2,%eax
  jbe    L80
  mov    %esi,%eax
  movdqa 0x10(%rsp),%xmm0
  shr    $0x2,%eax
  cmp    $0x1,%eax
  je     L27
  paddd  %xmm0,%xmm1
  cmp    $0x2,%eax
  je     L54
  paddd  D40(%rip),%xmm0
L27:
  movdqa %xmm0,%xmm1
  mov    %esi,%ecx
  psrldq $0x8,%xmm1
  and    $0xfffffffc,%ecx
  paddd  %xmm1,%xmm0
  movdqa %xmm0,%xmm1
  psrldq $0x4,%xmm1
  paddd  %xmm1,%xmm0
  movd   %xmm0,%eax
  test   $0x3,%sil
  je     L109
L19:
  movslq %ecx,%rdi
  add    0x10(%rsp,%rdi,4),%eax
  lea    0x1(%rcx),%edi
  cmp    %esi,%edi
  jge    L109
  movslq %edi,%rdi
  add    $0x2,%ecx
  add    0x10(%rsp,%rdi,4),%eax
  cmp    %ecx,%esi
  jle    L109
  movslq %ecx,%rcx
  add    0x10(%rsp,%rcx,4),%eax
L109:
  mov    0x4(%rsp),%esi
  lea    0x3(%rdx),%ecx
  lea    D77(%rip),%rdi
  add    %edx,%esi
  test   %edx,%edx
  cmovs  %ecx,%edx
  sar    $0x2,%edx
  lea    -0x2(%rsi,%rdx,1),%edx
  add    %eax,%edx
  movslq %edx,%rax
  mov    %edx,%ecx
  imul   $0xffffffff92492493,%rax,%rax
  sar    $0x1f,%ecx
  shr    $0x20,%rax
  add    %edx,%eax
  sar    $0x2,%eax
  sub    %ecx,%eax
  lea    0x0(,%rax,8),%ecx
  sub    %eax,%ecx
  sub    %ecx,%edx
  movslq %edx,%rdx
  mov    %rdx,%rax
  shl    $0x4,%rax
  sub    %rdx,%rax
  lea    (%rbx,%rax,1),%rsi
  xor    %eax,%eax
  call   <printf@plt>
  mov    0xb8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L92
  add    $0xc0,%rsp
  xor    %eax,%eax
  pop    %rbx
  ret
L54:
  movdqa %xmm1,%xmm0
  jmp    L27
L87:
  xor    %eax,%eax
  jmp    L109
L80:
  xor    %eax,%eax
  xor    %ecx,%ecx
  jmp    L19
L92:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: label: D74
type: string
name: parse_data
arguments: label: D146
type: byte[16]
name: parse_data
arguments: label: D81
type: byte[16]
name: parse_data
arguments: label: D107
type: byte[16]
name: parse_data
arguments: label: D19
type: string
name: parse_data
arguments: label: D156
type: string
name: parse_data
arguments: label: D131
type: string
name: parse_data
arguments: label: D150
type: string
name: parse_data
arguments: label: D11
type: string
name: parse_data
arguments: label: D121
type: string
name: parse_data
arguments: label: D65
type: string
name: parse_data
arguments: label: D108
type: string
name: parse_data
arguments: label: D62
type: string
name: parse_data
arguments: label: D40
type: byte[16]
name: parse_data
arguments: label: D77
type: string

tool: D74: clear

tool: {"D146": [0x1f,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x1e,0x00,0x00,0x00]}

tool: {"D81": [0x1f,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x1f,0x00,0x00,0x00]}

tool: {"D107": [0x1e,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x1f,0x00,0x00,0x00]}

tool: D19: Sunday

tool: D156: Monday

tool: D131: Tuesday

tool: D150: Wednesday

tool: D11: Thursday

tool: D121: Friday

tool: D65: Saturday

tool: D108: Enter a valid date (dd/mm/yyyy) : 

tool: D62: %d / %d / %d

tool: {"D40": [0x3d,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00]}

tool: D77: 
The day is : %s

assistant: ```c
int main() {
  int month[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  char week[7][15];
  int date, mon, year, i, r, s = 0;
  system("clear");
  strcpy(week[0], "Sunday");
  strcpy(week[1], "Monday");
  strcpy(week[2], "Tuesday");
  strcpy(week[3], "Wednesday");
  strcpy(week[4], "Thursday");
  strcpy(week[5], "Friday");
  strcpy(week[6], "Saturday");
  printf("Enter a valid date (dd/mm/yyyy) : ");
  scanf("%d / %d / %d", &date, &mon, &year);
  if (year % 4 == 0) {
    if (year % 100 == 0) {
      if (year % 400 == 0) {
        month[1] = 29;
      }
    }
  }
  for (i = 0; i < mon - 1; i++)
    s = s + month[i];
  s = s + (date + year + (year / 4) - 2);
  s = s % 7;
  printf("\nThe day is : %s", week[s]);
}
```