user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<test>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %edi,%ebx
  sub    $0x28,%rsp
  test   %esi,%esi
  setg   %al
  test   %edi,%edi
  mov    %esi,0xc(%rsp)
  setg   %bpl
  cmp    $0x1,%esi
  setg   0x1f(%rsp)
  test   %edi,%edi
  jns    L155
  test   %al,%al
  jne    L59
  test   %edi,%edi
  jns    L155
L223:
  test   %bpl,%bpl
  je     L261
  cmpb   $0x0,0x1f(%rsp)
  je     L261
  xor    %ebp,%ebp
L394:
  mov    $0x2,%edi
  xor    %eax,%eax
  call   <hash@plt>
  xor    %edi,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %ebp,%edi
  xor    %eax,%eax
  add    $0x1,%ebp
  call   <hash@plt>
  cmp    %ebp,%ebx
  jg     L394
  mov    $0x3,%edi
  xor    %eax,%eax
  xor    %ebp,%ebp
  call   <hash@plt>
  xor    %edi,%edi
  xor    %eax,%eax
  call   <hash@plt>
L524:
  mov    $0x4,%edi
  xor    %eax,%eax
  call   <hash@plt>
  xor    %edi,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %ebp,%edi
  xor    %eax,%eax
  add    $0x1,%ebp
  call   <hash@plt>
  cmp    %ebp,%ebx
  jg     L524
  mov    $0xa,%edi
  xor    %eax,%eax
  call   <hash@plt>
  xor    %edi,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    $0x1,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    $0x1,%edi
L407:
  xor    %eax,%eax
  call   <hash@plt>
  mov    $0x5,%edi
  xor    %eax,%eax
  call   <hash@plt>
  xor    %edi,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    0xc(%rsp),%esi
  lea    -0x1(%rsi),%eax
  cmp    %esi,%ebx
  mov    %eax,0x18(%rsp)
  cmovl  %ebx,%eax
  mov    %eax,0x14(%rsp)
  cmp    $0x1,%eax
  jg     L295
  mov    0x18(%rsp),%eax
  mov    %eax,0x10(%rsp)
  jmp    L577
  cs nopw 0x0(%rax,%rax,1)
L59:
  mov    $0x1,%edi
  xor    %eax,%eax
  call   <hash@plt>
  xor    %edi,%edi
  xor    %eax,%eax
  call   <hash@plt>
L261:
  test   %ebx,%ebx
  setle  %dl
  jg     L318
  cmpb   $0x0,0x1f(%rsp)
  je     L318
  mov    $0x3,%edi
  xor    %eax,%eax
  call   <hash@plt>
  xor    %edi,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    $0xa,%edi
  xor    %eax,%eax
  call   <hash@plt>
  xor    %edi,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    $0x1,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    $0x1,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    $0x5,%edi
  xor    %eax,%eax
  call   <hash@plt>
  xor    %edi,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    0xc(%rsp),%esi
  lea    -0x1(%rsi),%eax
  cmp    %esi,%ebx
  mov    %eax,0x18(%rsp)
  cmovl  %ebx,%eax
  mov    %eax,0x14(%rsp)
  cmp    $0x1,%eax
  jle    L544
L295:
  mov    $0x1,%r14d
  xor    %ebp,%ebp
  nopw   0x0(%rax,%rax,1)
L506:
  lea    0x2(%rbp),%eax
  mov    %r14d,%r13d
  mov    %eax,0x10(%rsp)
  cmp    %r14d,0xc(%rsp)
  jle    L474
  nopl   (%rax)
L65:
  mov    $0x6,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %ebp,%edi
  xor    %eax,%eax
  call   <hash@plt>
  xor    %eax,%eax
  mov    %r13d,%edi
  call   <hash@plt>
  cmp    %ebp,%ebx
  jle    L160
  mov    %ebp,%r15d
  nopw   0x0(%rax,%rax,1)
L306:
  mov    $0x7,%edi
  xor    %eax,%eax
  mov    %r15d,%r12d
  call   <hash@plt>
  mov    %ebp,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %r13d,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %r15d,%edi
  xor    %eax,%eax
  lea    0x1(%r15),%r15d
  call   <hash@plt>
  cmp    %r15d,%ebx
  jne    L306
  mov    $0x8,%edi
  xor    %eax,%eax
  mov    %ebp,%r15d
  call   <hash@plt>
  mov    %ebp,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %r13d,%edi
  xor    %eax,%eax
  call   <hash@plt>
  nop
L187:
  mov    $0x9,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %ebp,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %r13d,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %r15d,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %r15d,%eax
  add    $0x1,%r15d
  cmp    %r12d,%eax
  jne    L187
  add    $0x1,%r13d
  cmp    %r13d,0xc(%rsp)
  jne    L65
L474:
  mov    %r14d,%r13d
  cmp    %r14d,%ebx
  jle    L41
L389:
  mov    $0x2,%edi
  xor    %eax,%eax
  mov    %r13d,%r15d
  call   <hash@plt>
  mov    %r14d,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %r13d,%edi
  xor    %eax,%eax
  lea    0x1(%r13),%r13d
  call   <hash@plt>
  cmp    %r13d,%ebx
  jne    L389
  mov    $0x3,%edi
  xor    %eax,%eax
  mov    %r14d,%r13d
  call   <hash@plt>
  mov    %r14d,%edi
  xor    %eax,%eax
  call   <hash@plt>
  nopl   (%rax)
L530:
  mov    $0x4,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %r14d,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %r13d,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %r13d,%eax
  add    $0x1,%r13d
  cmp    %eax,%r15d
  jne    L530
L322:
  mov    $0xa,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %r14d,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    $0x1,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    0x10(%rsp),%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    $0x5,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %r14d,%edi
  xor    %eax,%eax
  add    $0x1,%r14d
  call   <hash@plt>
  lea    0x1(%rbp),%eax
  add    $0x3,%ebp
  cmp    0x14(%rsp),%ebp
  jg     L145
  mov    %eax,%ebp
  jmp    L506
L155:
  test   %al,%al
  je     L223
  mov    $0x1,%edi
  xor    %eax,%eax
  call   <hash@plt>
  xor    %edi,%edi
  xor    %eax,%eax
  call   <hash@plt>
  jmp    L223
  nopl   0x0(%rax)
L160:
  mov    $0x8,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %ebp,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %r13d,%edi
  xor    %eax,%eax
  add    $0x1,%r13d
  call   <hash@plt>
  cmp    %r13d,0xc(%rsp)
  jne    L65
  jmp    L474
L41:
  mov    $0x3,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %r14d,%edi
  xor    %eax,%eax
  call   <hash@plt>
  jmp    L322
L463:
  mov    0xc(%rsp),%edx
  lea    -0x1(%rdx),%eax
  cmp    %edx,%ebx
  mov    %eax,0x18(%rsp)
  cmovl  %ebx,%eax
  mov    %eax,0x14(%rsp)
  sub    $0x1,%eax
  jg     L295
L145:
  mov    0x18(%rsp),%eax
  mov    %eax,0x10(%rsp)
  test   %ebx,%ebx
  jle    L592
L577:
  cmp    0x18(%rsp),%ebx
  jge    L592
  lea    0x1(%rbx),%r14d
  lea    -0x1(%rbx),%r13d
  mov    %ebx,%ebp
  cmp    0xc(%rsp),%ebx
  jge    L606
L203:
  mov    $0x6,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %r13d,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %ebp,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    $0x7,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %r13d,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %ebp,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %r13d,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    $0x8,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %r13d,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %ebp,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    $0x9,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %r13d,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %ebp,%edi
  xor    %eax,%eax
  add    $0x1,%ebp
  call   <hash@plt>
  mov    %r13d,%edi
  xor    %eax,%eax
  call   <hash@plt>
  cmp    %ebp,0xc(%rsp)
  jne    L203
  mov    $0x3,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %ebx,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    $0xa,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %ebx,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    $0x1,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %r14d,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    $0x5,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %ebx,%edi
  xor    %eax,%eax
  call   <hash@plt>
  jmp    L42
L167:
  test   %dl,%dl
  je     L463
  test   %al,%al
  je     L463
  mov    $0x3,%edi
  xor    %eax,%eax
  call   <hash@plt>
  xor    %edi,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    $0xa,%edi
  xor    %eax,%eax
  call   <hash@plt>
  xor    %edi,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    $0x5,%edi
  xor    %eax,%eax
  call   <hash@plt>
  xor    %edi,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    0xc(%rsp),%eax
  sub    $0x1,%eax
  mov    %eax,0x10(%rsp)
L592:
  cmp    0xc(%rsp),%ebx
  jl     L277
  cmpb   $0x0,0x1f(%rsp)
  je     L277
L621:
  mov    0xc(%rsp),%eax
  mov    $0x6,%edi
  lea    -0x2(%rax),%r13d
  xor    %eax,%eax
  call   <hash@plt>
  mov    %r13d,%edi
  xor    %eax,%eax
  mov    %r13d,%ebp
  call   <hash@plt>
  mov    0x10(%rsp),%edi
  xor    %eax,%eax
  call   <hash@plt>
  cmp    %r13d,%ebx
  jle    L117
L284:
  mov    $0x7,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %r13d,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    0x10(%rsp),%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %ebp,%edi
  xor    %eax,%eax
  add    $0x1,%ebp
  call   <hash@plt>
  cmp    %ebp,%ebx
  jg     L284
  mov    $0x8,%edi
  xor    %eax,%eax
  mov    %r13d,%ebp
  call   <hash@plt>
  mov    %r13d,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    0x10(%rsp),%edi
  xor    %eax,%eax
  call   <hash@plt>
L441:
  mov    $0x9,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %r13d,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    0x10(%rsp),%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %ebp,%edi
  xor    %eax,%eax
  add    $0x1,%ebp
  call   <hash@plt>
  cmp    %ebp,%ebx
  jg     L441
L191:
  mov    0x10(%rsp),%eax
  cmp    %eax,%ebx
  jle    L379
  mov    %eax,%ebp
L401:
  mov    $0x2,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    0x10(%rsp),%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %ebp,%edi
  xor    %eax,%eax
  add    $0x1,%ebp
  call   <hash@plt>
  cmp    %ebp,%ebx
  jg     L401
  mov    $0x3,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    0x10(%rsp),%ebp
  xor    %eax,%eax
  mov    %ebp,%edi
  call   <hash@plt>
L200:
  mov    $0x4,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    0x10(%rsp),%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %ebp,%edi
  xor    %eax,%eax
  add    $0x1,%ebp
  call   <hash@plt>
  cmp    %ebp,%ebx
  jg     L200
L16:
  mov    $0xa,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    0x10(%rsp),%r14d
  xor    %eax,%eax
  mov    %r14d,%edi
  call   <hash@plt>
  mov    $0x5,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %r14d,%edi
  xor    %eax,%eax
  call   <hash@plt>
L277:
  cmp    0x10(%rsp),%ebx
  jne    L42
  cmpb   $0x0,0x1f(%rsp)
  jne    L335
L42:
  xor    %r14d,%r14d
  test   %ebx,%ebx
  cmovns %ebx,%r14d
  add    $0x2,%r14d
  cmp    %r14d,0xc(%rsp)
  jle    L576
  nopl   0x0(%rax)
L503:
  lea    -0x1(%r14),%r15d
  lea    -0x2(%r14),%r13d
  mov    %r15d,%ebp
  cmp    %r15d,0xc(%rsp)
  jle    L594
  nopw   0x0(%rax,%rax,1)
L327:
  mov    $0x6,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %r13d,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %ebp,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    $0x8,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %r13d,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %ebp,%edi
  xor    %eax,%eax
  add    $0x1,%ebp
  call   <hash@plt>
  cmp    %ebp,0xc(%rsp)
  jg     L327
L594:
  mov    $0x3,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %r15d,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    $0xa,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %r15d,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    $0x1,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %r14d,%edi
  xor    %eax,%eax
  add    $0x1,%r14d
  call   <hash@plt>
  mov    $0x5,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %r15d,%edi
  xor    %eax,%eax
  call   <hash@plt>
  cmp    %r14d,0xc(%rsp)
  jg     L503
L576:
  cmp    0x10(%rsp),%ebx
  jge    L97
  cmpb   $0x0,0x1f(%rsp)
  jne    L507
L97:
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L318:
  cmpl   $0x1,0xc(%rsp)
  sete   %al
  jne    L167
  test   %bpl,%bpl
  je     L167
  xor    %ebp,%ebp
L629:
  mov    $0x2,%edi
  xor    %eax,%eax
  call   <hash@plt>
  xor    %edi,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %ebp,%edi
  xor    %eax,%eax
  add    $0x1,%ebp
  call   <hash@plt>
  cmp    %ebp,%ebx
  jg     L629
  mov    $0x3,%edi
  xor    %eax,%eax
  xor    %ebp,%ebp
  call   <hash@plt>
  xor    %edi,%edi
  xor    %eax,%eax
  call   <hash@plt>
L499:
  mov    $0x4,%edi
  xor    %eax,%eax
  call   <hash@plt>
  xor    %edi,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %ebp,%edi
  xor    %eax,%eax
  add    $0x1,%ebp
  call   <hash@plt>
  cmp    %ebp,%ebx
  jg     L499
  mov    $0xa,%edi
  xor    %eax,%eax
  call   <hash@plt>
  xor    %edi,%edi
  jmp    L407
L507:
  mov    0xc(%rsp),%r12d
  mov    $0x6,%edi
  xor    %eax,%eax
  call   <hash@plt>
  xor    %eax,%eax
  sub    $0x2,%r12d
  mov    %r12d,%edi
  call   <hash@plt>
  mov    0x10(%rsp),%ebx
  xor    %eax,%eax
  mov    %ebx,%edi
  call   <hash@plt>
  mov    $0x8,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %r12d,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %ebx,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    $0x3,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %ebx,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    $0xa,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %ebx,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    $0x5,%edi
  xor    %eax,%eax
  call   <hash@plt>
  add    $0x28,%rsp
  mov    %ebx,%edi
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    1050 <hash@plt>
L606:
  mov    $0x3,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %ebx,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    $0xa,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %ebx,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    $0x1,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %r14d,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    $0x5,%edi
  xor    %eax,%eax
  call   <hash@plt>
  xor    %eax,%eax
  mov    %ebx,%edi
  call   <hash@plt>
  cmpl   $0x1,0xc(%rsp)
  jg     L621
  jmp    L42
  nopl   0x0(%rax,%rax,1)
L335:
  mov    0xc(%rsp),%r12d
  xor    %r14d,%r14d
  test   %ebx,%ebx
  mov    $0x6,%edi
  cmovns %ebx,%r14d
  xor    %eax,%eax
  call   <hash@plt>
  lea    -0x2(%r12),%ebp
  xor    %eax,%eax
  mov    %ebp,%edi
  add    $0x2,%r14d
  call   <hash@plt>
  mov    0x10(%rsp),%r15d
  xor    %eax,%eax
  mov    %r15d,%edi
  call   <hash@plt>
  mov    $0x7,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %ebp,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %r15d,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %ebp,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    $0x8,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %ebp,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %r15d,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    $0x9,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %ebp,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %r15d,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %ebp,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    $0x3,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %r15d,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    $0xa,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %r15d,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    $0x5,%edi
  xor    %eax,%eax
  call   <hash@plt>
  xor    %eax,%eax
  mov    %r15d,%edi
  call   <hash@plt>
  cmp    %r12d,%r14d
  jl     L503
  jmp    L97
L379:
  mov    $0x3,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    0x10(%rsp),%edi
  xor    %eax,%eax
  call   <hash@plt>
  jmp    L16
L117:
  mov    $0x8,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    %r13d,%edi
  xor    %eax,%eax
  call   <hash@plt>
  mov    0x10(%rsp),%edi
  xor    %eax,%eax
  call   <hash@plt>
  jmp    L191
L544:
  mov    0x18(%rsp),%eax
  mov    %eax,0x10(%rsp)
  jmp    L592
```

assistant: ```c
void test(int M, int N) {
  int c2, c4, c6;
  int i, j, k;
  if ((M <= -1) && (N >= 1)) {
    {
      hash(1);
      hash(0);
    };
  }
  if ((M >= 0) && (N >= 1)) {
    {
      hash(1);
      hash(0);
    };
  }
  if ((M >= 1) && (N >= 2)) {
    for (c4 = 0; c4 <= M - 1; c4++) {
      {
        hash(2);
        hash(0);
        hash(c4);
      };
    }
    {
      hash(3);
      hash(0);
    };
    for (c4 = 0; c4 <= M - 1; c4++) {
      {
        hash(4);
        hash(0);
        hash(c4);
      };
    }
    {
      hash(10);
      hash(0);
    };
    {
      hash(1);
      hash(1);
    };
    {
      hash(5);
      hash(0);
    };
  }
  if ((M <= 0) && (N >= 2)) {
    {
      hash(3);
      hash(0);
    };
    {
      hash(10);
      hash(0);
    };
    {
      hash(1);
      hash(1);
    };
    {
      hash(5);
      hash(0);
    };
  }
  if ((M >= 1) && (N == 1)) {
    for (c4 = 0; c4 <= M - 1; c4++) {
      {
        hash(2);
        hash(0);
        hash(c4);
      };
    }
    {
      hash(3);
      hash(0);
    };
    for (c4 = 0; c4 <= M - 1; c4++) {
      {
        hash(4);
        hash(0);
        hash(c4);
      };
    }
    {
      hash(10);
      hash(0);
    };
    {
      hash(5);
      hash(0);
    };
  }
  if ((M <= 0) && (N == 1)) {
    {
      hash(3);
      hash(0);
    };
    {
      hash(10);
      hash(0);
    };
    {
      hash(5);
      hash(0);
    };
  }
  for (c2 = 2; c2 <= ((N - 1) < (M) ? (N - 1) : (M)); c2++) {
    for (c4 = c2 - 1; c4 <= N - 1; c4++) {
      i = c2 - 2;
      {
        hash(6);
        hash(c2 - 2);
        hash(c4);
      };
      for (c6 = c2 - 2; c6 <= M - 1; c6++) {
        i = c2 - 2;
        {
          hash(7);
          hash(c2 - 2);
          hash(c4);
          hash(c6);
        };
      }
      i = c2 - 2;
      {
        hash(8);
        hash(c2 - 2);
        hash(c4);
      };
      for (c6 = c2 - 2; c6 <= M - 1; c6++) {
        i = c2 - 2;
        {
          hash(9);
          hash(c2 - 2);
          hash(c4);
          hash(c6);
        };
      }
    }
    for (c4 = c2 - 1; c4 <= M - 1; c4++) {
      i = c2 - 1;
      {
        hash(2);
        hash(c2 - 1);
        hash(c4);
      };
    }
    i = c2 - 1;
    {
      hash(3);
      hash(c2 - 1);
    };
    for (c4 = c2 - 1; c4 <= M - 1; c4++) {
      i = c2 - 1;
      {
        hash(4);
        hash(c2 - 1);
        hash(c4);
      };
    }
    i = c2 - 1;
    {
      hash(10);
      hash(c2 - 1);
    };
    {
      hash(1);
      hash(c2);
    };
    i = c2 - 1;
    {
      hash(5);
      hash(c2 - 1);
    };
  }
  if ((M >= 1) && (M <= N - 2)) {
    c2 = M + 1;
    for (c4 = M; c4 <= N - 1; c4++) {
      i = M - 1;
      {
        hash(6);
        hash(M - 1);
        hash(c4);
      };
      c6 = M - 1;
      i = M - 1;
      k = M - 1;
      {
        hash(7);
        hash(M - 1);
        hash(c4);
        hash(M - 1);
      };
      i = M - 1;
      {
        hash(8);
        hash(M - 1);
        hash(c4);
      };
      c6 = M - 1;
      i = M - 1;
      k = M - 1;
      {
        hash(9);
        hash(M - 1);
        hash(c4);
        hash(M - 1);
      };
    }
    {
      hash(3);
      hash(M);
    };
    {
      hash(10);
      hash(M);
    };
    i = M + 1;
    {
      hash(1);
      hash(M + 1);
    };
    {
      hash(5);
      hash(M);
    };
  }
  if ((M >= N) && (N >= 2)) {
    c4 = N - 1;
    i = N - 2;
    j = N - 1;
    {
      hash(6);
      hash(N - 2);
      hash(N - 1);
    };
    for (c6 = N - 2; c6 <= M - 1; c6++) {
      i = N - 2;
      j = N - 1;
      {
        hash(7);
        hash(N - 2);
        hash(N - 1);
        hash(c6);
      };
    }
    i = N - 2;
    j = N - 1;
    {
      hash(8);
      hash(N - 2);
      hash(N - 1);
    };
    for (c6 = N - 2; c6 <= M - 1; c6++) {
      i = N - 2;
      j = N - 1;
      {
        hash(9);
        hash(N - 2);
        hash(N - 1);
        hash(c6);
      };
    }
    for (c4 = N - 1; c4 <= M - 1; c4++) {
      i = N - 1;
      {
        hash(2);
        hash(N - 1);
        hash(c4);
      };
    }
    i = N - 1;
    {
      hash(3);
      hash(N - 1);
    };
    for (c4 = N - 1; c4 <= M - 1; c4++) {
      i = N - 1;
      {
        hash(4);
        hash(N - 1);
        hash(c4);
      };
    }
    i = N - 1;
    {
      hash(10);
      hash(N - 1);
    };
    i = N - 1;
    {
      hash(5);
      hash(N - 1);
    };
  }
  if ((M == N - 1) && (N >= 2)) {
    c4 = N - 1;
    i = N - 2;
    j = N - 1;
    {
      hash(6);
      hash(N - 2);
      hash(N - 1);
    };
    c6 = N - 2;
    i = N - 2;
    j = N - 1;
    k = N - 2;
    {
      hash(7);
      hash(N - 2);
      hash(N - 1);
      hash(N - 2);
    };
    i = N - 2;
    j = N - 1;
    {
      hash(8);
      hash(N - 2);
      hash(N - 1);
    };
    c6 = N - 2;
    i = N - 2;
    j = N - 1;
    k = N - 2;
    {
      hash(9);
      hash(N - 2);
      hash(N - 1);
      hash(N - 2);
    };
    i = N - 1;
    {
      hash(3);
      hash(N - 1);
    };
    i = N - 1;
    {
      hash(10);
      hash(N - 1);
    };
    i = N - 1;
    {
      hash(5);
      hash(N - 1);
    };
  }
  for (c2 = ((M + 2) > (2) ? (M + 2) : (2)); c2 <= N - 1; c2++) {
    for (c4 = c2 - 1; c4 <= N - 1; c4++) {
      i = c2 - 2;
      {
        hash(6);
        hash(c2 - 2);
        hash(c4);
      };
      i = c2 - 2;
      {
        hash(8);
        hash(c2 - 2);
        hash(c4);
      };
    }
    i = c2 - 1;
    {
      hash(3);
      hash(c2 - 1);
    };
    i = c2 - 1;
    {
      hash(10);
      hash(c2 - 1);
    };
    {
      hash(1);
      hash(c2);
    };
    i = c2 - 1;
    {
      hash(5);
      hash(c2 - 1);
    };
  }
  if ((M <= N - 2) && (N >= 2)) {
    c4 = N - 1;
    i = N - 2;
    j = N - 1;
    {
      hash(6);
      hash(N - 2);
      hash(N - 1);
    };
    i = N - 2;
    j = N - 1;
    {
      hash(8);
      hash(N - 2);
      hash(N - 1);
    };
    i = N - 1;
    {
      hash(3);
      hash(N - 1);
    };
    i = N - 1;
    {
      hash(10);
      hash(N - 1);
    };
    i = N - 1;
    {
      hash(5);
      hash(N - 1);
    };
  }
}
```