// File: ricbit[P]dlx/cover_original.cc
// Function: ExactCover::run()
long run() {
    long count = 0;
    int p, i;
  //d1:
    int l = 0;
  d2:
    if (header[0].rlink == 0) {
      count++;
      goto d8;
    }
  //d3:
    i = header[0].rlink;
  //d4:
    cover(i);
    solution[l] = nodes[i].dlink;
  d5:
    if (solution[l] == i) {
      goto d7;
    }
    p = solution[l] + 1;
    while (p != solution[l]) {
      int j = nodes[p].top;
      if (j <= 0) {
        p = nodes[p].ulink;
      } else {
        cover(j);
        p++;
      }
    }
    l++;
    goto d2;
  d6:
    p = solution[l] - 1;
    while (p != solution[l]) {
      int j = nodes[p].top;
      if (j <= 0) {
        p = nodes[p].dlink;
      } else {
        uncover(j);
        p--;
      }
    }
    i = nodes[solution[l]].top;
    solution[l] = nodes[solution[l]].dlink;
    goto d5;
  d7:
    uncover(i);
  d8:
    if (l == 0) {
      return count;
    }
    l--;
    if (nodes[solution[l]].top == 0) {
      goto d5;
    }
    goto d6;
  }

// Assembly:
subq $0x58, %rsp
movq %rdi, 0x50(%rsp)
movq 0x50(%rsp), %rax
movq %rax, 0x28(%rsp)
movq $0x0, 0x48(%rsp)
movl $0x0, 0x3c(%rsp)
movq 0x28(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x3cf0
cmpl $0x0, 0x24(%rax)
jne 0x2adb
movq 0x48(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x48(%rsp)
jmp 0x2d24
movq 0x28(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x3cf0
movq 0x28(%rsp), %rdi
movl 0x24(%rax), %eax
movl %eax, 0x40(%rsp)
movl 0x40(%rsp), %esi
callq 0x7d30
movq 0x28(%rsp), %rdi
addq $0x18, %rdi
movslq 0x40(%rsp), %rsi
callq 0x4840
movq 0x28(%rsp), %rdi
movl 0x8(%rax), %eax
movl %eax, 0x24(%rsp)
addq $0x30, %rdi
movslq 0x3c(%rsp), %rsi
callq 0x4860
movl 0x24(%rsp), %ecx
movl %ecx, (%rax)
movq 0x28(%rsp), %rdi
addq $0x30, %rdi
movslq 0x3c(%rsp), %rsi
callq 0x4860
movl (%rax), %eax
cmpl 0x40(%rsp), %eax
jne 0x2b51
jmp 0x2d16
movq 0x28(%rsp), %rdi
addq $0x30, %rdi
movslq 0x3c(%rsp), %rsi
callq 0x4860
movl (%rax), %eax
addl $0x1, %eax
movl %eax, 0x44(%rsp)
movq 0x28(%rsp), %rdi
movl 0x44(%rsp), %eax
movl %eax, 0x20(%rsp)
addq $0x30, %rdi
movslq 0x3c(%rsp), %rsi
callq 0x4860
movq %rax, %rcx
movl 0x20(%rsp), %eax
cmpl (%rcx), %eax
je 0x2bea
movq 0x28(%rsp), %rdi
addq $0x18, %rdi
movslq 0x44(%rsp), %rsi
callq 0x4840
movl (%rax), %eax
movl %eax, 0x38(%rsp)
cmpl $0x0, 0x38(%rsp)
jg 0x2bcf
movq 0x28(%rsp), %rdi
addq $0x18, %rdi
movslq 0x44(%rsp), %rsi
callq 0x4840
movl 0x4(%rax), %eax
movl %eax, 0x44(%rsp)
jmp 0x2be8
movq 0x28(%rsp), %rdi
movl 0x38(%rsp), %esi
callq 0x7d30
movl 0x44(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x44(%rsp)
jmp 0x2b6d
movl 0x3c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x3c(%rsp)
jmp 0x2ab4
movq 0x28(%rsp), %rdi
addq $0x30, %rdi
movslq 0x3c(%rsp), %rsi
callq 0x4860
movl (%rax), %eax
subl $0x1, %eax
movl %eax, 0x44(%rsp)
movq 0x28(%rsp), %rdi
movl 0x44(%rsp), %eax
movl %eax, 0x1c(%rsp)
addq $0x30, %rdi
movslq 0x3c(%rsp), %rsi
callq 0x4860
movq %rax, %rcx
movl 0x1c(%rsp), %eax
cmpl (%rcx), %eax
je 0x2c93
movq 0x28(%rsp), %rdi
addq $0x18, %rdi
movslq 0x44(%rsp), %rsi
callq 0x4840
movl (%rax), %eax
movl %eax, 0x34(%rsp)
cmpl $0x0, 0x34(%rsp)
jg 0x2c78
movq 0x28(%rsp), %rdi
addq $0x18, %rdi
movslq 0x44(%rsp), %rsi
callq 0x4840
movl 0x8(%rax), %eax
movl %eax, 0x44(%rsp)
jmp 0x2c91
movq 0x28(%rsp), %rdi
movl 0x34(%rsp), %esi
callq 0x7e00
movl 0x44(%rsp), %eax
addl $-0x1, %eax
movl %eax, 0x44(%rsp)
jmp 0x2c16
movq 0x28(%rsp), %rdi
movq %rdi, %rax
addq $0x18, %rax
movq %rax, 0x8(%rsp)
addq $0x30, %rdi
movslq 0x3c(%rsp), %rsi
callq 0x4860
movq 0x8(%rsp), %rdi
movslq (%rax), %rsi
callq 0x4840
movq 0x28(%rsp), %rdi
movl (%rax), %eax
movl %eax, 0x40(%rsp)
movq %rdi, %rax
addq $0x18, %rax
movq %rax, 0x10(%rsp)
addq $0x30, %rdi
movslq 0x3c(%rsp), %rsi
callq 0x4860
movq 0x10(%rsp), %rdi
movslq (%rax), %rsi
callq 0x4840
movq 0x28(%rsp), %rdi
movl 0x8(%rax), %eax
movl %eax, 0x18(%rsp)
addq $0x30, %rdi
movslq 0x3c(%rsp), %rsi
callq 0x4860
movl 0x18(%rsp), %ecx
movl %ecx, (%rax)
jmp 0x2b31
movq 0x28(%rsp), %rdi
movl 0x40(%rsp), %esi
callq 0x7e00
cmpl $0x0, 0x3c(%rsp)
jne 0x2d35
movq 0x48(%rsp), %rax
addq $0x58, %rsp
retq
movq 0x28(%rsp), %rdi
movl 0x3c(%rsp), %eax
addl $-0x1, %eax
movl %eax, 0x3c(%rsp)
movq %rdi, %rax
addq $0x18, %rax
movq %rax, (%rsp)
addq $0x30, %rdi
movslq 0x3c(%rsp), %rsi
callq 0x4860
movq (%rsp), %rdi
movslq (%rax), %rsi
callq 0x4840
cmpl $0x0, (%rax)
jne 0x2d74
jmp 0x2b31
jmp 0x2bfa
nopl (%rax)