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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x180,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    D38(%rip),%rax
  mov    %rax,-0x170(%rbp)
  lea    D81(%rip),%rax
  mov    %rax,-0x168(%rbp)
  lea    D109(%rip),%rax
  mov    %rax,-0x160(%rbp)
  lea    D84(%rip),%rax
  mov    %rax,-0x158(%rbp)
  lea    D164(%rip),%rax
  mov    %rax,-0x150(%rbp)
  lea    D31(%rip),%rax
  mov    %rax,-0x148(%rbp)
  lea    D98(%rip),%rax
  mov    %rax,-0x140(%rbp)
  lea    D146(%rip),%rax
  mov    %rax,-0x138(%rbp)
  lea    D96(%rip),%rax
  mov    %rax,-0x130(%rbp)
  lea    D94(%rip),%rax
  mov    %rax,-0x128(%rbp)
  lea    D99(%rip),%rax
  mov    %rax,-0x120(%rbp)
  lea    D4(%rip),%rax
  mov    %rax,-0x118(%rbp)
  lea    D37(%rip),%rax
  mov    %rax,-0x110(%rbp)
  lea    D92(%rip),%rax
  mov    %rax,-0x108(%rbp)
  lea    D43(%rip),%rax
  mov    %rax,-0x100(%rbp)
  lea    D3(%rip),%rax
  mov    %rax,-0xf8(%rbp)
  lea    D165(%rip),%rax
  mov    %rax,-0xf0(%rbp)
  lea    -0xe0(%rbp),%rdx
  mov    $0x0,%eax
  mov    $0x1a,%ecx
  mov    %rdx,%rdi
  rep stos %rax,%es:(%rdi)
  movl   $0x1,-0x174(%rbp)
  movl   $0x0,-0x17c(%rbp)
  jmp    L39
L7:
  movl   $0x0,-0x178(%rbp)
  jmp    L20
L48:
  mov    -0x178(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x17c(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  lea    (%rax,%rcx,1),%rdx
  mov    -0x174(%rbp),%eax
  mov    %eax,-0xe0(%rbp,%rdx,4)
  addl   $0x1,-0x174(%rbp)
  addl   $0x1,-0x178(%rbp)
L20:
  cmpl   $0xc,-0x178(%rbp)
  jle    L48
  addl   $0x1,-0x17c(%rbp)
L39:
  cmpl   $0x3,-0x17c(%rbp)
  jle    L7
  mov    $0x0,%edi
  call   <time@plt>
  mov    %eax,%edi
  call   <srand@plt>
  lea    -0xe0(%rbp),%rax
  mov    %rax,%rdi
  call   <shuffle@plt>
  lea    -0x170(%rbp),%rdx
  lea    -0x150(%rbp),%rcx
  lea    -0xe0(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <deal@plt>
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L1
  call   <__stack_chk_fail@plt>
L1:
  leave
  ret
```

tool_calls: name: read_data
arguments: tag: D38
datatype: string
name: read_data
arguments: tag: D81
datatype: string
name: read_data
arguments: tag: D109
datatype: string
name: read_data
arguments: tag: D84
datatype: string
name: read_data
arguments: tag: D164
datatype: string
name: read_data
arguments: tag: D31
datatype: string
name: read_data
arguments: tag: D98
datatype: string
name: read_data
arguments: tag: D146
datatype: string
name: read_data
arguments: tag: D96
datatype: string
name: read_data
arguments: tag: D94
datatype: string
name: read_data
arguments: tag: D99
datatype: string
name: read_data
arguments: tag: D4
datatype: string
name: read_data
arguments: tag: D37
datatype: string
name: read_data
arguments: tag: D92
datatype: string
name: read_data
arguments: tag: D43
datatype: string
name: read_data
arguments: tag: D3
datatype: string
name: read_data
arguments: tag: D165
datatype: string

tool: D38: Hearts

tool: D81: Diamonds

tool: D109: Clubs

tool: D84: Spades

tool: D164: Ace

tool: D31: Deuce

tool: D98: Three

tool: D146: Four

tool: D96: Five

tool: D94: Six

tool: D99: Seven

tool: D4: Eight

tool: D37: Nine

tool: D92: Ten

tool: D43: Jack

tool: D3: Queen

tool: D165: King

assistant: ```c
int main(void) {
  const char *suit[4] = {"Hearts", "Diamonds", "Clubs", "Spades"};
  const char *face[13] = {"Ace", "Deuce", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Jack", "Queen", "King"};
  int deck[4][13] = {0};
  int row, column, card = 1;
  for (row = 0; row < 4; row++) {
    for (column = 0; column < 13; column++) {
      deck[row][column] = card;
      card++;
    }
  }
  srand(time(0));
  shuffle(deck);
  deal(deck, face, suit);
  return 0;
}
```