user: 请从给定的汇编指令推导出C源代码：

```asm
<draw_start>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  mov    %rdi,%r14
  mov    %esi,0x8(%rsp)
  mov    %edx,0xc(%rsp)
  lea    D893(%rip),%rsi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %r14,%rcx
  mov    $0x1a,%edx
  mov    $0x1,%esi
  lea    D488(%rip),%rdi
  call   <fwrite@plt>
  lea    D599(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  lea    D1053(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  lea    D339(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  lea    D324(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %r14,%rcx
  mov    $0x18,%edx
  mov    $0x1,%esi
  lea    D986(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x18,%edx
  mov    $0x1,%esi
  lea    D902(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x22,%edx
  mov    $0x1,%esi
  lea    D315(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x22,%edx
  mov    $0x1,%esi
  lea    D561(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x18,%edx
  mov    $0x1,%esi
  lea    D551(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x18,%edx
  mov    $0x1,%esi
  lea    D604(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x1a,%edx
  mov    $0x1,%esi
  lea    D165(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x1a,%edx
  mov    $0x1,%esi
  lea    D1111(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x1a,%edx
  mov    $0x1,%esi
  lea    D147(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x1a,%edx
  mov    $0x1,%esi
  lea    D1150(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x1c,%edx
  mov    $0x1,%esi
  lea    D713(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x33,%edx
  mov    $0x1,%esi
  lea    D1040(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rsi
  mov    $0xa,%edi
  call   <fputc@plt>
  lea    D754(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %r14,%rcx
  mov    $0x1f,%edx
  mov    $0x1,%esi
  lea    D511(%rip),%rdi
  call   <fwrite@plt>
  lea    D498(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %r14,%rcx
  mov    $0x1e,%edx
  mov    $0x1,%esi
  lea    D1080(%rip),%rdi
  call   <fwrite@plt>
  lea    D979(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %r14,%rcx
  mov    $0x1a,%edx
  mov    $0x1,%esi
  lea    D450(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x2d,%edx
  mov    $0x1,%esi
  lea    D755(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0xd,%edx
  mov    $0x1,%esi
  lea    D280(%rip),%rdi
  call   <fwrite@plt>
  lea    D977(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %r14,%rcx
  mov    $0x1f,%edx
  mov    $0x1,%esi
  lea    D370(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x19,%edx
  mov    $0x1,%esi
  lea    D58(%rip),%rdi
  call   <fwrite@plt>
  lea    D866(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %r14,%rcx
  mov    $0x6,%edx
  mov    $0x1,%esi
  lea    D237(%rip),%r15
  mov    %r15,%rdi
  call   <fwrite@plt>
  mov    %r14,%rsi
  mov    $0xa,%edi
  call   <fputc@plt>
  lea    D138(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %r14,%rcx
  mov    $0x12,%edx
  mov    $0x1,%esi
  lea    D1113(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x12,%edx
  mov    $0x1,%esi
  lea    D826(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0xa,%edx
  mov    $0x1,%esi
  lea    D525(%rip),%rdi
  call   <fwrite@plt>
  lea    D973(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %r14,%rcx
  mov    $0x16,%edx
  mov    $0x1,%esi
  lea    D530(%rip),%rdi
  call   <fwrite@plt>
  lea    D630(%rip),%r12
  mov    %r12,%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  lea    D20(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  lea    D367(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  lea    D462(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  lea    D950(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  lea    D465(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %r14,%rcx
  mov    $0x13,%edx
  mov    $0x1,%esi
  lea    D1081(%rip),%rbp
  mov    %rbp,%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x13,%edx
  mov    $0x1,%esi
  lea    D251(%rip),%rbx
  mov    %rbx,%rdi
  call   <fwrite@plt>
  lea    D813(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  lea    D34(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  lea    D807(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %r14,%rcx
  mov    $0x13,%edx
  mov    $0x1,%esi
  mov    %rbp,%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x13,%edx
  mov    $0x1,%esi
  mov    %rbx,%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x9,%edx
  mov    $0x1,%esi
  lea    D49(%rip),%r13
  mov    %r13,%rdi
  call   <fwrite@plt>
  lea    D248(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %r14,%rcx
  mov    $0x16,%edx
  mov    $0x1,%esi
  lea    D703(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x12,%edx
  mov    $0x1,%esi
  lea    D1030(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x19,%edx
  mov    $0x1,%esi
  lea    D548(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x12,%edx
  mov    $0x1,%esi
  lea    D922(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x6,%edx
  mov    $0x1,%esi
  mov    %r15,%rdi
  call   <fwrite@plt>
  mov    %r14,%rsi
  mov    $0xa,%edi
  call   <fputc@plt>
  lea    D612(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  lea    D999(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  lea    D362(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  lea    D931(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  lea    D172(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  lea    D357(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %r14,%rcx
  mov    $0xa,%edx
  mov    $0x1,%esi
  lea    D525(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x13,%edx
  mov    $0x1,%esi
  mov    %rbp,%rdi
  call   <fwrite@plt>
  lea    D1123(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %r14,%rcx
  mov    $0x13,%edx
  mov    $0x1,%esi
  lea    D761(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x13,%edx
  mov    $0x1,%esi
  mov    %rbx,%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x9,%edx
  mov    $0x1,%esi
  mov    %r13,%rdi
  call   <fwrite@plt>
  lea    D734(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %r14,%rcx
  mov    $0xb,%edx
  mov    $0x1,%esi
  lea    D112(%rip),%rdi
  call   <fwrite@plt>
  lea    D1062(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  lea    D872(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %r14,%rcx
  mov    $0x14,%edx
  mov    $0x1,%esi
  lea    D1114(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x13,%edx
  mov    $0x1,%esi
  lea    D169(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x6,%edx
  mov    $0x1,%esi
  lea    D121(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x6,%edx
  mov    $0x1,%esi
  mov    %r15,%rdi
  call   <fwrite@plt>
  mov    %r14,%rsi
  mov    $0xa,%edi
  call   <fputc@plt>
  lea    D274(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %r12,%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  lea    D41(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  lea    D172(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  lea    D69(%rip),%r12
  mov    %r12,%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  lea    D460(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %r14,%rcx
  mov    $0xa,%edx
  mov    $0x1,%esi
  lea    D525(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x13,%edx
  mov    $0x1,%esi
  mov    %rbp,%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x13,%edx
  mov    $0x1,%esi
  mov    %rbx,%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x9,%edx
  mov    $0x1,%esi
  mov    %r13,%rdi
  call   <fwrite@plt>
  lea    D734(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %r14,%rcx
  mov    $0xb,%edx
  mov    $0x1,%esi
  lea    D112(%rip),%rdi
  call   <fwrite@plt>
  lea    D1062(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  lea    D872(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %r14,%rcx
  mov    $0x14,%edx
  mov    $0x1,%esi
  lea    D1114(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x13,%edx
  mov    $0x1,%esi
  lea    D169(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x6,%edx
  mov    $0x1,%esi
  lea    D121(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x6,%edx
  mov    $0x1,%esi
  mov    %r15,%rdi
  call   <fwrite@plt>
  mov    %r14,%rsi
  mov    $0xa,%edi
  call   <fputc@plt>
  lea    D118(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  lea    D813(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  lea    D41(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  lea    D172(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %r12,%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  lea    D810(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %r14,%rcx
  mov    $0xa,%edx
  mov    $0x1,%esi
  lea    D525(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x13,%edx
  mov    $0x1,%esi
  mov    %rbp,%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x13,%edx
  mov    $0x1,%esi
  mov    %rbx,%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x9,%edx
  mov    $0x1,%esi
  mov    %r13,%rdi
  call   <fwrite@plt>
  lea    D734(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %r14,%rcx
  mov    $0xb,%edx
  mov    $0x1,%esi
  lea    D112(%rip),%rdi
  call   <fwrite@plt>
  lea    D1062(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  lea    D872(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %r14,%rcx
  mov    $0x14,%edx
  mov    $0x1,%esi
  lea    D1114(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x13,%edx
  mov    $0x1,%esi
  lea    D169(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x6,%edx
  mov    $0x1,%esi
  lea    D121(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x6,%edx
  mov    $0x1,%esi
  mov    %r15,%rdi
  call   <fwrite@plt>
  mov    %r14,%rsi
  mov    $0xa,%edi
  call   <fputc@plt>
  lea    D299(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %r14,%rcx
  mov    $0x22,%edx
  mov    $0x1,%esi
  lea    D933(%rip),%r13
  mov    %r13,%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x17,%edx
  mov    $0x1,%esi
  lea    D256(%rip),%r12
  mov    %r12,%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x25,%edx
  mov    $0x1,%esi
  lea    D152(%rip),%rbp
  mov    %rbp,%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x1f,%edx
  mov    $0x1,%esi
  lea    D1162(%rip),%rbx
  mov    %rbx,%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x6,%edx
  mov    $0x1,%esi
  mov    %r15,%rdi
  call   <fwrite@plt>
  mov    %r14,%rsi
  mov    $0xa,%edi
  call   <fputc@plt>
  lea    D732(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %r14,%rcx
  mov    $0x22,%edx
  mov    $0x1,%esi
  mov    %r13,%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x17,%edx
  mov    $0x1,%esi
  mov    %r12,%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x25,%edx
  mov    $0x1,%esi
  mov    %rbp,%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x1f,%edx
  mov    $0x1,%esi
  mov    %rbx,%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x6,%edx
  mov    $0x1,%esi
  mov    %r15,%rdi
  call   <fwrite@plt>
  mov    %r14,%rsi
  mov    $0xa,%edi
  call   <fputc@plt>
  lea    D1018(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %r14,%rcx
  mov    $0x1c,%edx
  mov    $0x1,%esi
  lea    D804(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x17,%edx
  mov    $0x1,%esi
  mov    %r12,%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x25,%edx
  mov    $0x1,%esi
  mov    %rbp,%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x1f,%edx
  mov    $0x1,%esi
  mov    %rbx,%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x6,%edx
  mov    $0x1,%esi
  mov    %r15,%rdi
  call   <fwrite@plt>
  mov    %r14,%rsi
  mov    $0xa,%edi
  call   <fputc@plt>
  lea    D136(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %r14,%rcx
  mov    $0x12,%edx
  mov    $0x1,%esi
  lea    D860(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x12,%edx
  mov    $0x1,%esi
  lea    D951(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x29,%edx
  mov    $0x1,%esi
  lea    D608(%rip),%r13
  mov    %r13,%rdi
  call   <fwrite@plt>
  lea    D527(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %r14,%rcx
  mov    $0x19,%edx
  mov    $0x1,%esi
  lea    D650(%rip),%r12
  mov    %r12,%rdi
  call   <fwrite@plt>
  lea    D1147(%rip),%rbp
  mov    %rbp,%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %r14,%rcx
  mov    $0x13,%edx
  mov    $0x1,%esi
  lea    D621(%rip),%rbx
  mov    %rbx,%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x6,%edx
  mov    $0x1,%esi
  mov    %r15,%rdi
  call   <fwrite@plt>
  mov    %r14,%rsi
  mov    $0xa,%edi
  call   <fputc@plt>
  lea    D808(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %r14,%rcx
  mov    $0x12,%edx
  mov    $0x1,%esi
  lea    D860(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x12,%edx
  mov    $0x1,%esi
  lea    D951(%rip),%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x29,%edx
  mov    $0x1,%esi
  mov    %r13,%rdi
  call   <fwrite@plt>
  lea    D536(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %r14,%rcx
  mov    $0x19,%edx
  mov    $0x1,%esi
  mov    %r12,%rdi
  call   <fwrite@plt>
  mov    %rbp,%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %r14,%rcx
  mov    $0x13,%edx
  mov    $0x1,%esi
  mov    %rbx,%rdi
  call   <fwrite@plt>
  mov    %r14,%rcx
  mov    $0x6,%edx
  mov    $0x1,%esi
  mov    %r15,%rdi
  call   <fwrite@plt>
  mov    %r14,%rsi
  mov    $0xa,%edi
  call   <fputc@plt>
  mov    0xc(%rsp),%ecx
  mov    0x8(%rsp),%edx
  lea    D264(%rip),%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

tool_calls: name: read_data
arguments: label: D893
type_infered: string
name: read_data
arguments: label: D488
type_infered: string
name: read_data
arguments: label: D599
type_infered: string
name: read_data
arguments: label: D1053
type_infered: string
name: read_data
arguments: label: D339
type_infered: string
name: read_data
arguments: label: D324
type_infered: string
name: read_data
arguments: label: D986
type_infered: string
name: read_data
arguments: label: D902
type_infered: string
name: read_data
arguments: label: D315
type_infered: string
name: read_data
arguments: label: D561
type_infered: string
name: read_data
arguments: label: D551
type_infered: string
name: read_data
arguments: label: D604
type_infered: string
name: read_data
arguments: label: D165
type_infered: string
name: read_data
arguments: label: D1111
type_infered: string
name: read_data
arguments: label: D147
type_infered: string
name: read_data
arguments: label: D1150
type_infered: string
name: read_data
arguments: label: D713
type_infered: string
name: read_data
arguments: label: D1040
type_infered: string
name: read_data
arguments: label: D754
type_infered: string
name: read_data
arguments: label: D511
type_infered: string
name: read_data
arguments: label: D498
type_infered: string
name: read_data
arguments: label: D1080
type_infered: string
name: read_data
arguments: label: D979
type_infered: string
name: read_data
arguments: label: D450
type_infered: string
name: read_data
arguments: label: D755
type_infered: string
name: read_data
arguments: label: D280
type_infered: string
name: read_data
arguments: label: D977
type_infered: string
name: read_data
arguments: label: D370
type_infered: string
name: read_data
arguments: label: D58
type_infered: string
name: read_data
arguments: label: D866
type_infered: string
name: read_data
arguments: label: D237
type_infered: string
name: read_data
arguments: label: D138
type_infered: string
name: read_data
arguments: label: D1113
type_infered: string
name: read_data
arguments: label: D826
type_infered: string
name: read_data
arguments: label: D525
type_infered: string
name: read_data
arguments: label: D973
type_infered: string
name: read_data
arguments: label: D530
type_infered: string
name: read_data
arguments: label: D630
type_infered: string
name: read_data
arguments: label: D20
type_infered: string
name: read_data
arguments: label: D367
type_infered: string
name: read_data
arguments: label: D462
type_infered: string
name: read_data
arguments: label: D950
type_infered: string
name: read_data
arguments: label: D465
type_infered: string
name: read_data
arguments: label: D1081
type_infered: string
name: read_data
arguments: label: D251
type_infered: string
name: read_data
arguments: label: D813
type_infered: string
name: read_data
arguments: label: D34
type_infered: string
name: read_data
arguments: label: D807
type_infered: string
name: read_data
arguments: label: D49
type_infered: string
name: read_data
arguments: label: D248
type_infered: string
name: read_data
arguments: label: D703
type_infered: string
name: read_data
arguments: label: D1030
type_infered: string
name: read_data
arguments: label: D548
type_infered: string
name: read_data
arguments: label: D922
type_infered: string
name: read_data
arguments: label: D612
type_infered: string
name: read_data
arguments: label: D999
type_infered: string
name: read_data
arguments: label: D362
type_infered: string
name: read_data
arguments: label: D931
type_infered: string
name: read_data
arguments: label: D172
type_infered: string
name: read_data
arguments: label: D357
type_infered: string
name: read_data
arguments: label: D1123
type_infered: string
name: read_data
arguments: label: D761
type_infered: string
name: read_data
arguments: label: D734
type_infered: string
name: read_data
arguments: label: D112
type_infered: string
name: read_data
arguments: label: D1062
type_infered: string
name: read_data
arguments: label: D872
type_infered: string
name: read_data
arguments: label: D1114
type_infered: string
name: read_data
arguments: label: D169
type_infered: string
name: read_data
arguments: label: D121
type_infered: string
name: read_data
arguments: label: D274
type_infered: string
name: read_data
arguments: label: D41
type_infered: string
name: read_data
arguments: label: D69
type_infered: string
name: read_data
arguments: label: D460
type_infered: string
name: read_data
arguments: label: D118
type_infered: string
name: read_data
arguments: label: D810
type_infered: string
name: read_data
arguments: label: D299
type_infered: string
name: read_data
arguments: label: D933
type_infered: string
name: read_data
arguments: label: D256
type_infered: string
name: read_data
arguments: label: D152
type_infered: string
name: read_data
arguments: label: D1162
type_infered: string
name: read_data
arguments: label: D732
type_infered: string
name: read_data
arguments: label: D1018
type_infered: string
name: read_data
arguments: label: D804
type_infered: string
name: read_data
arguments: label: D136
type_infered: string
name: read_data
arguments: label: D860
type_infered: string
name: read_data
arguments: label: D951
type_infered: string
name: read_data
arguments: label: D608
type_infered: string
name: read_data
arguments: label: D527
type_infered: string
name: read_data
arguments: label: D650
type_infered: string
name: read_data
arguments: label: D1147
type_infered: string
name: read_data
arguments: label: D621
type_infered: string
name: read_data
arguments: label: D808
type_infered: string
name: read_data
arguments: label: D536
type_infered: string
name: read_data
arguments: label: D264
type_infered: string

tool: D893: %%!


tool: D488: /mm {72 mul 25.4 div} def


tool: D599: /PageWidth  210 mm def %% const


tool: D1053: /PageHeight 297 mm def %% const


tool: D339: /BorderWidth  7 mm def %% const


tool: D324: /FontHeight     10 def %% const


tool: D986: /setR {/R exch def} def


tool: D902: /setr {/r exch def} def


tool: D315: /setscaleX {/scaleX exch def} def


tool: D561: /setscaleY {/scaleY exch def} def


tool: D551: /setx {/x exch def} def


tool: D604: /sety {/y exch def} def


tool: D165: /setfx {/fx exch def} def


tool: D1111: /setfy {/fy exch def} def


tool: D147: /settx {/tx exch def} def


tool: D1150: /setty {/ty exch def} def


tool: D713: /settmp {/tmp exch def} def


tool: D1040: /Times-Roman findfont FontHeight scalefont setfont


tool: D754: /rescale {                     %% stack: max_pos, max_level


tool: D511:   PageHeight 2 BorderWidth mul


tool: D498:   sub exch 1 add div setscaleY %% scaleY = (PH-2BW)/(max_level+1)


tool: D1080:   PageWidth 2 BorderWidth mul


tool: D979:   sub exch div setscaleX       %% scaleX = (PH-2BW)/(max_pos)


tool: D450:   scaleX .33 mul dup setR


tool: D755:   0.25 scaleY mul gt {.2 scaleY mul setR} if


tool: D280:   .6 mm setr


tool: D977:   0 PageHeight translate       %% go to top of page


tool: D370:   BorderWidth scaleX 2 div add


tool: D58:   BorderWidth scaleY add


tool: D866:   neg translate                %% go to left top of drawing


tool: D237: } def


tool: D138: /node {                        %% stack: (id), x, y


tool: D1113:   scaleY mul sety


tool: D826:   scaleX mul setx


tool: D525:   newpath


tool: D973:   %% draw node


tool: D530:   x y neg R 0 360 arc


tool: D630:   %% draw then edge


tool: D20:   .5 sqrt R mul settmp         %% tmp = sqrt(2) * R


tool: D367:   x tmp sub setfx              %% fx = X(x) - tmp


tool: D462:   y tmp add setfy              %% fy = Y(y) - sqrt 2 * R


tool: D950:   x R sub settx                %% tx = X(x) - R


tool: D465:   y R add setty                %% ty = Y(y) + R


tool: D1081:   fx fy neg moveto


tool: D251:   tx ty neg lineto


tool: D813:   %% draw else edge


tool: D34:   x tmp add setfx              %% fx = X(x) + tmp


tool: D807:   x R add settx                %% tx = X(x) + R


tool: D49:   stroke


tool: D248:   %% draw string


tool: D703:   dup stringwidth pop


tool: D1030:   2 div neg x add


tool: D548:   y FontHeight 3 div add


tool: D922:   neg moveto show


tool: D612: /edge {                        %% stack: (polarity), fx, tx, ty


tool: D999:   %% draw initial edge


tool: D362:   scaleY mul R sub setty       %% ty = Y(y) - R


tool: D931:   0 setfy                      %% fy = Y(0)


tool: D172:   scaleX mul settx             %% tx = X(tx)


tool: D357:   scaleX mul setfx             %% fx = X(fx)


tool: D1123:   0.5 scaleY mul setfy         %% fy = Y(0.5)


tool: D761:   fx fy neg lineto


tool: D734:   %% draw negation if necessary


tool: D112:   (n) eq {


tool: D1062:     fx tx add 2 div            %% fx = (fx+tx)/2


tool: D872:     fy ty add 2 div            %% fy = (fy+ty)/2


tool: D1114:     neg r 0 360 arc


tool: D169:     0 setgray fill


tool: D121:   }if


tool: D274: /then { %%stack: (polarity), fx, fy, tx, ty


tool: D41:   scaleY mul R sub setty       %% ty = Y(ty) - R


tool: D69:   scaleY mul R add setfy       %% fy = Y(fy) + R


tool: D460:   scaleX mul R sub setfx       %% fx = X(fx) - R


tool: D118: /else { %%stack: (polarity), fx, fy, tx, ty


tool: D810:   scaleX mul R add setfx       %% fx = X(fx) + R


tool: D299: /const {                       %% stack: (const), x, y


tool: D933:   scaleY mul FontHeight 2 div add


tool: D256:   exch scaleX mul exch


tool: D152:   newpath neg moveto dup stringwidth


tool: D1162:   pop 2 div neg 0 rmoveto show


tool: D732: /void {                       %% stack: (void), x, y


tool: D1018: /name {                       %% stack: (name), x, y


tool: D804:   scaleY mul FontHeight sub


tool: D136: /then_const {                  %% stack: (const), x, y


tool: D860:   scaleY mul exch


tool: D951:   scaleX mul exch


tool: D608:   newpath neg moveto dup stringwidth pop


tool: D527:   2 div R add neg              %% x = X(x) - R - fw/2


tool: D650:   R 0.025 scaleY mul add


tool: D1147:   FontHeight add               %% y = Y(y) + R + 0.025*scaleY + FH


tool: D621:   neg rmoveto show


tool: D808: /else_const {                  %% stack: (const), x, y


tool: D536:   2 div neg R add              %% x = X(x) + R - fw/2


tool: D264: %d %d rescale


assistant: ```c
void draw_start(FILE *fp, int max_x, int max_y) {
  fprintf(fp, "%%!\n");
  fprintf(fp, "/mm {72 mul 25.4 div} def\n");
  fprintf(fp, "/PageWidth  210 mm def %% const\n");
  fprintf(fp, "/PageHeight 297 mm def %% const\n");
  fprintf(fp, "/BorderWidth  7 mm def %% const\n");
  fprintf(fp, "/FontHeight     10 def %% const\n");
  fprintf(fp, "/setR {/R exch def} def\n");
  fprintf(fp, "/setr {/r exch def} def\n");
  fprintf(fp, "/setscaleX {/scaleX exch def} def\n");
  fprintf(fp, "/setscaleY {/scaleY exch def} def\n");
  fprintf(fp, "/setx {/x exch def} def\n");
  fprintf(fp, "/sety {/y exch def} def\n");
  fprintf(fp, "/setfx {/fx exch def} def\n");
  fprintf(fp, "/setfy {/fy exch def} def\n");
  fprintf(fp, "/settx {/tx exch def} def\n");
  fprintf(fp, "/setty {/ty exch def} def\n");
  fprintf(fp, "/settmp {/tmp exch def} def\n");
  fprintf(fp, "/Times-Roman findfont FontHeight scalefont setfont\n");
  fprintf(fp, "\n");
  fprintf(fp, "/rescale {                     %% stack: max_pos, max_level\n");
  fprintf(fp, "  PageHeight 2 BorderWidth mul\n");
  fprintf(fp, "  sub exch 1 add div setscaleY %% scaleY = (PH-2BW)/(max_level+1)\n");
  fprintf(fp, "  PageWidth 2 BorderWidth mul\n");
  fprintf(fp, "  sub exch div setscaleX       %% scaleX = (PH-2BW)/(max_pos)\n");
  fprintf(fp, "  scaleX .33 mul dup setR\n");
  fprintf(fp, "  0.25 scaleY mul gt {.2 scaleY mul setR} if\n");
  fprintf(fp, "  .6 mm setr\n");
  fprintf(fp, "  0 PageHeight translate       %% go to top of page\n");
  fprintf(fp, "  BorderWidth scaleX 2 div add\n");
  fprintf(fp, "  BorderWidth scaleY add\n");
  fprintf(fp, "  neg translate                %% go to left top of drawing\n");
  fprintf(fp, "} def\n");
  fprintf(fp, "\n");
  fprintf(fp, "/node {                        %% stack: (id), x, y\n");
  fprintf(fp, "  scaleY mul sety\n");
  fprintf(fp, "  scaleX mul setx\n");
  fprintf(fp, "  newpath\n");
  fprintf(fp, "  %% draw node\n");
  fprintf(fp, "  x y neg R 0 360 arc\n");
  fprintf(fp, "  %% draw then edge\n");
  fprintf(fp, "  .5 sqrt R mul settmp         %% tmp = sqrt(2) * R\n");
  fprintf(fp, "  x tmp sub setfx              %% fx = X(x) - tmp\n");
  fprintf(fp, "  y tmp add setfy              %% fy = Y(y) - sqrt 2 * R\n");
  fprintf(fp, "  x R sub settx                %% tx = X(x) - R\n");
  fprintf(fp, "  y R add setty                %% ty = Y(y) + R\n");
  fprintf(fp, "  fx fy neg moveto\n");
  fprintf(fp, "  tx ty neg lineto\n");
  fprintf(fp, "  %% draw else edge\n");
  fprintf(fp, "  x tmp add setfx              %% fx = X(x) + tmp\n");
  fprintf(fp, "  x R add settx                %% tx = X(x) + R\n");
  fprintf(fp, "  fx fy neg moveto\n");
  fprintf(fp, "  tx ty neg lineto\n");
  fprintf(fp, "  stroke\n");
  fprintf(fp, "  %% draw string\n");
  fprintf(fp, "  dup stringwidth pop\n");
  fprintf(fp, "  2 div neg x add\n");
  fprintf(fp, "  y FontHeight 3 div add\n");
  fprintf(fp, "  neg moveto show\n");
  fprintf(fp, "} def\n");
  fprintf(fp, "\n");
  fprintf(fp, "/edge {                        %% stack: (polarity), fx, tx, ty\n");
  fprintf(fp, "  %% draw initial edge\n");
  fprintf(fp, "  scaleY mul R sub setty       %% ty = Y(y) - R\n");
  fprintf(fp, "  0 setfy                      %% fy = Y(0)\n");
  fprintf(fp, "  scaleX mul settx             %% tx = X(tx)\n");
  fprintf(fp, "  scaleX mul setfx             %% fx = X(fx)\n");
  fprintf(fp, "  newpath\n");
  fprintf(fp, "  fx fy neg moveto\n");
  fprintf(fp, "  0.5 scaleY mul setfy         %% fy = Y(0.5)\n");
  fprintf(fp, "  fx fy neg lineto\n");
  fprintf(fp, "  tx ty neg lineto\n");
  fprintf(fp, "  stroke\n");
  fprintf(fp, "  %% draw negation if necessary\n");
  fprintf(fp, "  (n) eq {\n");
  fprintf(fp, "    fx tx add 2 div            %% fx = (fx+tx)/2\n");
  fprintf(fp, "    fy ty add 2 div            %% fy = (fy+ty)/2\n");
  fprintf(fp, "    neg r 0 360 arc\n");
  fprintf(fp, "    0 setgray fill\n");
  fprintf(fp, "  }if\n");
  fprintf(fp, "} def\n");
  fprintf(fp, "\n");
  fprintf(fp, "/then { %%stack: (polarity), fx, fy, tx, ty\n");
  fprintf(fp, "  %% draw then edge\n");
  fprintf(fp, "  scaleY mul R sub setty       %% ty = Y(ty) - R\n");
  fprintf(fp, "  scaleX mul settx             %% tx = X(tx)\n");
  fprintf(fp, "  scaleY mul R add setfy       %% fy = Y(fy) + R\n");
  fprintf(fp, "  scaleX mul R sub setfx       %% fx = X(fx) - R\n");
  fprintf(fp, "  newpath\n");
  fprintf(fp, "  fx fy neg moveto\n");
  fprintf(fp, "  tx ty neg lineto\n");
  fprintf(fp, "  stroke\n");
  fprintf(fp, "  %% draw negation if necessary\n");
  fprintf(fp, "  (n) eq {\n");
  fprintf(fp, "    fx tx add 2 div            %% fx = (fx+tx)/2\n");
  fprintf(fp, "    fy ty add 2 div            %% fy = (fy+ty)/2\n");
  fprintf(fp, "    neg r 0 360 arc\n");
  fprintf(fp, "    0 setgray fill\n");
  fprintf(fp, "  }if\n");
  fprintf(fp, "} def\n");
  fprintf(fp, "\n");
  fprintf(fp, "/else { %%stack: (polarity), fx, fy, tx, ty\n");
  fprintf(fp, "  %% draw else edge\n");
  fprintf(fp, "  scaleY mul R sub setty       %% ty = Y(ty) - R\n");
  fprintf(fp, "  scaleX mul settx             %% tx = X(tx)\n");
  fprintf(fp, "  scaleY mul R add setfy       %% fy = Y(fy) + R\n");
  fprintf(fp, "  scaleX mul R add setfx       %% fx = X(fx) + R\n");
  fprintf(fp, "  newpath\n");
  fprintf(fp, "  fx fy neg moveto\n");
  fprintf(fp, "  tx ty neg lineto\n");
  fprintf(fp, "  stroke\n");
  fprintf(fp, "  %% draw negation if necessary\n");
  fprintf(fp, "  (n) eq {\n");
  fprintf(fp, "    fx tx add 2 div            %% fx = (fx+tx)/2\n");
  fprintf(fp, "    fy ty add 2 div            %% fy = (fy+ty)/2\n");
  fprintf(fp, "    neg r 0 360 arc\n");
  fprintf(fp, "    0 setgray fill\n");
  fprintf(fp, "  }if\n");
  fprintf(fp, "} def\n");
  fprintf(fp, "\n");
  fprintf(fp, "/const {                       %% stack: (const), x, y\n");
  fprintf(fp, "  scaleY mul FontHeight 2 div add\n");
  fprintf(fp, "  exch scaleX mul exch\n");
  fprintf(fp, "  newpath neg moveto dup stringwidth\n");
  fprintf(fp, "  pop 2 div neg 0 rmoveto show\n");
  fprintf(fp, "} def\n");
  fprintf(fp, "\n");
  fprintf(fp, "/void {                       %% stack: (void), x, y\n");
  fprintf(fp, "  scaleY mul FontHeight 2 div add\n");
  fprintf(fp, "  exch scaleX mul exch\n");
  fprintf(fp, "  newpath neg moveto dup stringwidth\n");
  fprintf(fp, "  pop 2 div neg 0 rmoveto show\n");
  fprintf(fp, "} def\n");
  fprintf(fp, "\n");
  fprintf(fp, "/name {                       %% stack: (name), x, y\n");
  fprintf(fp, "  scaleY mul FontHeight sub\n");
  fprintf(fp, "  exch scaleX mul exch\n");
  fprintf(fp, "  newpath neg moveto dup stringwidth\n");
  fprintf(fp, "  pop 2 div neg 0 rmoveto show\n");
  fprintf(fp, "} def\n");
  fprintf(fp, "\n");
  fprintf(fp, "/then_const {                  %% stack: (const), x, y\n");
  fprintf(fp, "  scaleY mul exch\n");
  fprintf(fp, "  scaleX mul exch\n");
  fprintf(fp, "  newpath neg moveto dup stringwidth pop\n");
  fprintf(fp, "  2 div R add neg              %% x = X(x) - R - fw/2\n");
  fprintf(fp, "  R 0.025 scaleY mul add\n");
  fprintf(fp, "  FontHeight add               %% y = Y(y) + R + 0.025*scaleY + FH\n");
  fprintf(fp, "  neg rmoveto show\n");
  fprintf(fp, "} def\n");
  fprintf(fp, "\n");
  fprintf(fp, "/else_const {                  %% stack: (const), x, y\n");
  fprintf(fp, "  scaleY mul exch\n");
  fprintf(fp, "  scaleX mul exch\n");
  fprintf(fp, "  newpath neg moveto dup stringwidth pop\n");
  fprintf(fp, "  2 div neg R add              %% x = X(x) + R - fw/2\n");
  fprintf(fp, "  R 0.025 scaleY mul add\n");
  fprintf(fp, "  FontHeight add               %% y = Y(y) + R + 0.025*scaleY + FH\n");
  fprintf(fp, "  neg rmoveto show\n");
  fprintf(fp, "} def\n");
  fprintf(fp, "\n");
  fprintf(fp, "%d %d rescale\n", max_x, max_y);
}
```