// File: drummyfish[P]flowchart/src/program.cpp
// Function: std::vector<block_directive, std::allocator<block_directive>> program::get_directive_function_blocks<block_directive>(image*)
vector<T> program::get_directive_function_blocks(image *img)
  {
    unsigned int i,j,x,y;
    vector<T> result;
    coord_2d c1, c2;

    bool directive = switch_value<T>::value == 0;  // whether directive or function blocks are being looked for

    for (j = 0; j < img->get_height(); j++)
      for (i = 0; i < img->get_width(); i++)
        {
          if (   // block corner
            !img->pixel_is_black(i - 1,j)     &&
            !img->pixel_is_black(i - 1,j - 1) &&
            !img->pixel_is_black(i,j - 1) &&
            img->pixel_is_black(i,j)     &&
            img->pixel_is_black(i + 1,j) &&
            img->pixel_is_black(i + 2,j) &&
            img->pixel_is_black(i,j + 1)     &&
            directive != img->pixel_is_black(i + 1,j + 1) &&
            directive != img->pixel_is_black(i + 2,j + 1) &&
            img->pixel_is_black(i,j + 2)     &&
            directive != img->pixel_is_black(i + 1,j + 2) &&
            img->pixel_is_black(i + 2,j + 2))
            {
              // try to follow the block border now:

              c1.x = i;
              c1.y = j;

              x = i + 2;
              y = j;

              while (   // upper horizontal border
                img->pixel_is_black(x + 1,y)     &&
                directive != img->pixel_is_black(x + 1,y + 1) &&    // the middle pixel differs for function and directive block
                img->pixel_is_black(x + 1,y + 2))
                {
                  x++;
                }

              i = x + 1;   // i can skip here now
              y += 2;

              if (directive)    // with directive blocks we have to checks corners
                {
                  if (!(
                    !img->pixel_is_black(x + 1,y - 1) &&
                    img->pixel_is_black(x + 2,y - 1) &&
                    img->pixel_is_black(x + 2,y - 2) &&
                    img->pixel_is_black(x + 1,y - 2)))
                    continue;    // corner not valid

                  x += 2;
                }

              if (x - c1.x < FONT_WIDTH + 6)       // the block must be at least one character wide + borders
                continue;

              while (   // right verticel border
                img->pixel_is_black(x,y + 1)     &&
                directive != img->pixel_is_black(x - 1,y + 1) &&
                img->pixel_is_black(x - 2,y + 1))
                {
                  y++;
                }

              if (c2.y - c1.y < FONT_HEIGHT + 6)   // the block must be at least one character high
                continue;

              if (directive)
                {
                  if (!(
                    img->pixel_is_black(x,y + 1) &&
                    img->pixel_is_black(x,y + 2) &&
                    !img->pixel_is_black(x - 1,y + 1) &&
                    img->pixel_is_black(x - 1,y + 2)))
                    continue;    // corner not valid
                  x -= 2;
                  y += 2;
                }

              c2.x = x;
              c2.y = y;

              if (directive)
                c2.x += 2;

              while (   // lower horizontal border
                img->pixel_is_black(x - 1,y)     &&
                directive != img->pixel_is_black(x - 1,y - 1) &&
                img->pixel_is_black(x - 1,y - 2))
                {
                  x--;
                }

              if (directive)
                {
                  if (!(
                    img->pixel_is_black(x - 1,y) &&
                    img->pixel_is_black(x - 2,y) &&
                    !img->pixel_is_black(x - 1,y - 1) &&
                    img->pixel_is_black(x - 2,y - 1)))
                    continue;    // corner not valid

                  x -= 2;
                }

              y -= 2;

              while (   // left vertical border
                img->pixel_is_black(x,y - 1)     &&
                directive != img->pixel_is_black(x + 1,y - 1) &&
                img->pixel_is_black(x + 2,y - 1))
                {
                  y--;
                }

              if (directive)
                y -= 2;

              if (x == c1.x && y == c1.y)          // block detected
                {
                  string block_string;
                  bool error;

                  block_string = this->string_from_image_area(img,make_coord(c1.x + 3,c1.y + 3),make_coord(c2.x - 3,c2.y - 3),error);

                  T b(block_string,c1,c2);

                  result.push_back(b);
                }
            }
        }

    return result;
  }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1b0, %rsp            # imm = 0x1B0
movq %rdi, -0x120(%rbp)
movq %rdi, %rax
movq %rax, -0x118(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x110(%rbp)
movb $0x0, -0x29(%rbp)
callq 0x1b210
movb $0x1, -0x3d(%rbp)
movl $0x0, -0x20(%rbp)
movl -0x20(%rbp), %eax
movl %eax, -0x128(%rbp)
movq -0x18(%rbp), %rdi
callq 0x15f40
movl %eax, -0x124(%rbp)
jmp 0x18ba1
movl -0x128(%rbp), %eax
movl -0x124(%rbp), %ecx
cmpl %ecx, %eax
jae 0x19580
movl $0x0, -0x1c(%rbp)
movl -0x1c(%rbp), %eax
movl %eax, -0x130(%rbp)
movq -0x18(%rbp), %rdi
callq 0x15f00
movl %eax, -0x12c(%rbp)
jmp 0x18bd6
movl -0x130(%rbp), %eax
movl -0x12c(%rbp), %ecx
cmpl %ecx, %eax
jae 0x19570
movq -0x18(%rbp), %rdi
movl -0x1c(%rbp), %esi
decl %esi
movl -0x20(%rbp), %edx
callq 0x160c0
movb %al, -0x131(%rbp)
jmp 0x18c03
movb -0x131(%rbp), %al
testb $0x1, %al
jne 0x19560
jmp 0x18c13
movq -0x18(%rbp), %rdi
movl -0x1c(%rbp), %esi
decl %esi
movl -0x20(%rbp), %edx
decl %edx
callq 0x160c0
movb %al, -0x132(%rbp)
jmp 0x18c2e
movb -0x132(%rbp), %al
testb $0x1, %al
jne 0x19560
jmp 0x18c3e
movq -0x18(%rbp), %rdi
movl -0x1c(%rbp), %esi
movl -0x20(%rbp), %edx
decl %edx
callq 0x160c0
movb %al, -0x133(%rbp)
jmp 0x18c57
movb -0x133(%rbp), %al
testb $0x1, %al
jne 0x19560
jmp 0x18c67
movq -0x18(%rbp), %rdi
movl -0x1c(%rbp), %esi
movl -0x20(%rbp), %edx
callq 0x160c0
movb %al, -0x134(%rbp)
jmp 0x18c7e
movb -0x134(%rbp), %al
testb $0x1, %al
jne 0x18c8d
jmp 0x19560
movq -0x18(%rbp), %rdi
movl -0x1c(%rbp), %esi
incl %esi
movl -0x20(%rbp), %edx
callq 0x160c0
movb %al, -0x135(%rbp)
jmp 0x18ca6
movb -0x135(%rbp), %al
testb $0x1, %al
jne 0x18cb5
jmp 0x19560
movq -0x18(%rbp), %rdi
movl -0x1c(%rbp), %esi
addl $0x2, %esi
movl -0x20(%rbp), %edx
callq 0x160c0
movb %al, -0x136(%rbp)
jmp 0x18ccf
movb -0x136(%rbp), %al
testb $0x1, %al
jne 0x18cde
jmp 0x19560
movq -0x18(%rbp), %rdi
movl -0x1c(%rbp), %esi
movl -0x20(%rbp), %edx
incl %edx
callq 0x160c0
movb %al, -0x137(%rbp)
jmp 0x18cf7
movb -0x137(%rbp), %al
testb $0x1, %al
jne 0x18d06
jmp 0x19560
movzbl -0x3d(%rbp), %eax
andl $0x1, %eax
movl %eax, -0x13c(%rbp)
movq -0x18(%rbp), %rdi
movl -0x1c(%rbp), %esi
incl %esi
movl -0x20(%rbp), %edx
incl %edx
callq 0x160c0
movb %al, -0x138(%rbp)
jmp 0x18d2e
movl -0x13c(%rbp), %eax
movb -0x138(%rbp), %cl
andb $0x1, %cl
movzbl %cl, %ecx
cmpl %ecx, %eax
je 0x19560
movzbl -0x3d(%rbp), %eax
andl $0x1, %eax
movl %eax, -0x144(%rbp)
movq -0x18(%rbp), %rdi
movl -0x1c(%rbp), %esi
addl $0x2, %esi
movl -0x20(%rbp), %edx
incl %edx
callq 0x160c0
movb %al, -0x13d(%rbp)
jmp 0x18d71
movl -0x144(%rbp), %eax
movb -0x13d(%rbp), %cl
andb $0x1, %cl
movzbl %cl, %ecx
cmpl %ecx, %eax
je 0x19560
movq -0x18(%rbp), %rdi
movl -0x1c(%rbp), %esi
movl -0x20(%rbp), %edx
addl $0x2, %edx
callq 0x160c0
movb %al, -0x145(%rbp)
jmp 0x18da5
movb -0x145(%rbp), %al
testb $0x1, %al
jne 0x18db4
jmp 0x19560
movzbl -0x3d(%rbp), %eax
andl $0x1, %eax
movl %eax, -0x14c(%rbp)
movq -0x18(%rbp), %rdi
movl -0x1c(%rbp), %esi
incl %esi
movl -0x20(%rbp), %edx
addl $0x2, %edx
callq 0x160c0
movb %al, -0x146(%rbp)
jmp 0x18ddd
movl -0x14c(%rbp), %eax
movb -0x146(%rbp), %cl
andb $0x1, %cl
movzbl %cl, %ecx
cmpl %ecx, %eax
je 0x19560
movq -0x18(%rbp), %rdi
movl -0x1c(%rbp), %esi
addl $0x2, %esi
movl -0x20(%rbp), %edx
addl $0x2, %edx
callq 0x160c0
movb %al, -0x14d(%rbp)
jmp 0x18e14
movb -0x14d(%rbp), %al
testb $0x1, %al
jne 0x18e23
jmp 0x19560
movl -0x1c(%rbp), %eax
movl %eax, -0x34(%rbp)
movl -0x20(%rbp), %eax
movl %eax, -0x30(%rbp)
movl -0x1c(%rbp), %eax
addl $0x2, %eax
movl %eax, -0x24(%rbp)
movl -0x20(%rbp), %eax
movl %eax, -0x28(%rbp)
movq -0x18(%rbp), %rdi
movl -0x24(%rbp), %esi
incl %esi
movl -0x28(%rbp), %edx
callq 0x160c0
movb %al, -0x14e(%rbp)
jmp 0x18e57
movb -0x14e(%rbp), %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x14f(%rbp)
jne 0x18e6c
jmp 0x18edb
movzbl -0x3d(%rbp), %eax
andl $0x1, %eax
movl %eax, -0x154(%rbp)
movq -0x18(%rbp), %rdi
movl -0x24(%rbp), %esi
incl %esi
movl -0x28(%rbp), %edx
incl %edx
callq 0x160c0
movb %al, -0x150(%rbp)
jmp 0x18e94
movl -0x154(%rbp), %ecx
movb -0x150(%rbp), %al
andb $0x1, %al
movzbl %al, %edx
xorl %eax, %eax
cmpl %edx, %ecx
movb %al, -0x14f(%rbp)
je 0x18edb
movq -0x18(%rbp), %rdi
movl -0x24(%rbp), %esi
incl %esi
movl -0x28(%rbp), %edx
addl $0x2, %edx
callq 0x160c0
movb %al, -0x155(%rbp)
jmp 0x18ecd
movb -0x155(%rbp), %al
movb %al, -0x14f(%rbp)
jmp 0x18edb
movb -0x14f(%rbp), %al
testb $0x1, %al
jne 0x18ee7
jmp 0x18f06
movl -0x24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
jmp 0x18e3e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x195a6
movl -0x24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1c(%rbp)
movl -0x28(%rbp), %eax
addl $0x2, %eax
movl %eax, -0x28(%rbp)
testb $0x1, -0x3d(%rbp)
je 0x18fd0
movq -0x18(%rbp), %rdi
movl -0x24(%rbp), %esi
incl %esi
movl -0x28(%rbp), %edx
decl %edx
callq 0x160c0
movb %al, -0x156(%rbp)
jmp 0x18f3d
movb -0x156(%rbp), %al
testb $0x1, %al
jne 0x18fc2
jmp 0x18f49
movq -0x18(%rbp), %rdi
movl -0x24(%rbp), %esi
addl $0x2, %esi
movl -0x28(%rbp), %edx
decl %edx
callq 0x160c0
movb %al, -0x157(%rbp)
jmp 0x18f65
movb -0x157(%rbp), %al
testb $0x1, %al
jne 0x18f71
jmp 0x18fc2
movq -0x18(%rbp), %rdi
movl -0x24(%rbp), %esi
addl $0x2, %esi
movl -0x28(%rbp), %edx
addl $-0x2, %edx
callq 0x160c0
movb %al, -0x158(%rbp)
jmp 0x18f8e
movb -0x158(%rbp), %al
testb $0x1, %al
jne 0x18f9a
jmp 0x18fc2
movq -0x18(%rbp), %rdi
movl -0x24(%rbp), %esi
incl %esi
movl -0x28(%rbp), %edx
addl $-0x2, %edx
callq 0x160c0
movb %al, -0x159(%rbp)
jmp 0x18fb6
movb -0x159(%rbp), %al
testb $0x1, %al
jne 0x18fc7
jmp 0x18fc2
jmp 0x19562
movl -0x24(%rbp), %eax
addl $0x2, %eax
movl %eax, -0x24(%rbp)
movl -0x24(%rbp), %eax
subl -0x34(%rbp), %eax
cmpl $0xd, %eax
jae 0x18fe0
jmp 0x19562
jmp 0x18fe2
movq -0x18(%rbp), %rdi
movl -0x24(%rbp), %esi
movl -0x28(%rbp), %edx
incl %edx
callq 0x160c0
movb %al, -0x15a(%rbp)
jmp 0x18ffb
movb -0x15a(%rbp), %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x15b(%rbp)
jne 0x19010
jmp 0x1907f
movzbl -0x3d(%rbp), %eax
andl $0x1, %eax
movl %eax, -0x160(%rbp)
movq -0x18(%rbp), %rdi
movl -0x24(%rbp), %esi
decl %esi
movl -0x28(%rbp), %edx
incl %edx
callq 0x160c0
movb %al, -0x15c(%rbp)
jmp 0x19038
movl -0x160(%rbp), %ecx
movb -0x15c(%rbp), %al
andb $0x1, %al
movzbl %al, %edx
xorl %eax, %eax
cmpl %edx, %ecx
movb %al, -0x15b(%rbp)
je 0x1907f
movq -0x18(%rbp), %rdi
movl -0x24(%rbp), %esi
addl $-0x2, %esi
movl -0x28(%rbp), %edx
incl %edx
callq 0x160c0
movb %al, -0x161(%rbp)
jmp 0x19071
movb -0x161(%rbp), %al
movb %al, -0x15b(%rbp)
jmp 0x1907f
movb -0x15b(%rbp), %al
testb $0x1, %al
jne 0x1908b
jmp 0x19099
movl -0x28(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x28(%rbp)
jmp 0x18fe2
movl -0x38(%rbp), %eax
subl -0x30(%rbp), %eax
cmpl $0xe, %eax
jae 0x190a9
jmp 0x19562
testb $0x1, -0x3d(%rbp)
je 0x19164
movq -0x18(%rbp), %rdi
movl -0x24(%rbp), %esi
movl -0x28(%rbp), %edx
incl %edx
callq 0x160c0
movb %al, -0x162(%rbp)
jmp 0x190cc
movb -0x162(%rbp), %al
testb $0x1, %al
jne 0x190d8
jmp 0x1914d
movq -0x18(%rbp), %rdi
movl -0x24(%rbp), %esi
movl -0x28(%rbp), %edx
addl $0x2, %edx
callq 0x160c0
movb %al, -0x163(%rbp)
jmp 0x190f2
movb -0x163(%rbp), %al
testb $0x1, %al
jne 0x190fe
jmp 0x1914d
movq -0x18(%rbp), %rdi
movl -0x24(%rbp), %esi
decl %esi
movl -0x28(%rbp), %edx
incl %edx
callq 0x160c0
movb %al, -0x164(%rbp)
jmp 0x19119
movb -0x164(%rbp), %al
testb $0x1, %al
jne 0x1914d
jmp 0x19125
movq -0x18(%rbp), %rdi
movl -0x24(%rbp), %esi
decl %esi
movl -0x28(%rbp), %edx
addl $0x2, %edx
callq 0x160c0
movb %al, -0x165(%rbp)
jmp 0x19141
movb -0x165(%rbp), %al
testb $0x1, %al
jne 0x19152
jmp 0x1914d
jmp 0x19562
movl -0x24(%rbp), %eax
subl $0x2, %eax
movl %eax, -0x24(%rbp)
movl -0x28(%rbp), %eax
addl $0x2, %eax
movl %eax, -0x28(%rbp)
movl -0x24(%rbp), %eax
movl %eax, -0x3c(%rbp)
movl -0x28(%rbp), %eax
movl %eax, -0x38(%rbp)
testb $0x1, -0x3d(%rbp)
je 0x1917f
movl -0x3c(%rbp), %eax
addl $0x2, %eax
movl %eax, -0x3c(%rbp)
jmp 0x19181
movq -0x18(%rbp), %rdi
movl -0x24(%rbp), %esi
decl %esi
movl -0x28(%rbp), %edx
callq 0x160c0
movb %al, -0x166(%rbp)
jmp 0x1919a
movb -0x166(%rbp), %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x167(%rbp)
jne 0x191af
jmp 0x1921e
movzbl -0x3d(%rbp), %eax
andl $0x1, %eax
movl %eax, -0x16c(%rbp)
movq -0x18(%rbp), %rdi
movl -0x24(%rbp), %esi
decl %esi
movl -0x28(%rbp), %edx
decl %edx
callq 0x160c0
movb %al, -0x168(%rbp)
jmp 0x191d7
movl -0x16c(%rbp), %ecx
movb -0x168(%rbp), %al
andb $0x1, %al
movzbl %al, %edx
xorl %eax, %eax
cmpl %edx, %ecx
movb %al, -0x167(%rbp)
je 0x1921e
movq -0x18(%rbp), %rdi
movl -0x24(%rbp), %esi
decl %esi
movl -0x28(%rbp), %edx
addl $-0x2, %edx
callq 0x160c0
movb %al, -0x16d(%rbp)
jmp 0x19210
movb -0x16d(%rbp), %al
movb %al, -0x167(%rbp)
jmp 0x1921e
movb -0x167(%rbp), %al
testb $0x1, %al
jne 0x1922a
jmp 0x19238
movl -0x24(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x24(%rbp)
jmp 0x19181
testb $0x1, -0x3d(%rbp)
je 0x192ea
movq -0x18(%rbp), %rdi
movl -0x24(%rbp), %esi
decl %esi
movl -0x28(%rbp), %edx
callq 0x160c0
movb %al, -0x16e(%rbp)
jmp 0x1925b
movb -0x16e(%rbp), %al
testb $0x1, %al
jne 0x19267
jmp 0x192dc
movq -0x18(%rbp), %rdi
movl -0x24(%rbp), %esi
addl $-0x2, %esi
movl -0x28(%rbp), %edx
callq 0x160c0
movb %al, -0x16f(%rbp)
jmp 0x19281
movb -0x16f(%rbp), %al
testb $0x1, %al
jne 0x1928d
jmp 0x192dc
movq -0x18(%rbp), %rdi
movl -0x24(%rbp), %esi
decl %esi
movl -0x28(%rbp), %edx
decl %edx
callq 0x160c0
movb %al, -0x170(%rbp)
jmp 0x192a8
movb -0x170(%rbp), %al
testb $0x1, %al
jne 0x192dc
jmp 0x192b4
movq -0x18(%rbp), %rdi
movl -0x24(%rbp), %esi
addl $-0x2, %esi
movl -0x28(%rbp), %edx
decl %edx
callq 0x160c0
movb %al, -0x171(%rbp)
jmp 0x192d0
movb -0x171(%rbp), %al
testb $0x1, %al
jne 0x192e1
jmp 0x192dc
jmp 0x19562
movl -0x24(%rbp), %eax
subl $0x2, %eax
movl %eax, -0x24(%rbp)
movl -0x28(%rbp), %eax
subl $0x2, %eax
movl %eax, -0x28(%rbp)
movq -0x18(%rbp), %rdi
movl -0x24(%rbp), %esi
movl -0x28(%rbp), %edx
decl %edx
callq 0x160c0
movb %al, -0x172(%rbp)
jmp 0x1930c
movb -0x172(%rbp), %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x173(%rbp)
jne 0x19321
jmp 0x19390
movzbl -0x3d(%rbp), %eax
andl $0x1, %eax
movl %eax, -0x178(%rbp)
movq -0x18(%rbp), %rdi
movl -0x24(%rbp), %esi
incl %esi
movl -0x28(%rbp), %edx
decl %edx
callq 0x160c0
movb %al, -0x174(%rbp)
jmp 0x19349
movl -0x178(%rbp), %ecx
movb -0x174(%rbp), %al
andb $0x1, %al
movzbl %al, %edx
xorl %eax, %eax
cmpl %edx, %ecx
movb %al, -0x173(%rbp)
je 0x19390
movq -0x18(%rbp), %rdi
movl -0x24(%rbp), %esi
addl $0x2, %esi
movl -0x28(%rbp), %edx
decl %edx
callq 0x160c0
movb %al, -0x179(%rbp)
jmp 0x19382
movb -0x179(%rbp), %al
movb %al, -0x173(%rbp)
jmp 0x19390
movb -0x173(%rbp), %al
testb $0x1, %al
jne 0x1939c
jmp 0x193aa
movl -0x28(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x28(%rbp)
jmp 0x192f3
testb $0x1, -0x3d(%rbp)
je 0x193b9
movl -0x28(%rbp), %eax
subl $0x2, %eax
movl %eax, -0x28(%rbp)
movl -0x24(%rbp), %eax
cmpl -0x34(%rbp), %eax
jne 0x1955e
movl -0x28(%rbp), %eax
cmpl -0x30(%rbp), %eax
jne 0x1955e
leaq -0x70(%rbp), %rdi
callq 0x3380
movq -0x18(%rbp), %rax
movq %rax, -0x190(%rbp)
movl -0x34(%rbp), %edi
movl -0x30(%rbp), %esi
addl $0x3, %edi
addl $0x3, %esi
callq 0x1c860
movq %rax, -0x188(%rbp)
jmp 0x193ff
movq -0x188(%rbp), %rax
movq %rax, -0xa0(%rbp)
movl -0x3c(%rbp), %edi
movl -0x38(%rbp), %esi
addl $-0x3, %edi
addl $-0x3, %esi
callq 0x1c860
movq %rax, -0x198(%rbp)
jmp 0x19427
movq -0x190(%rbp), %rdx
movq -0x110(%rbp), %rsi
movq -0x198(%rbp), %rax
movq %rax, -0xa8(%rbp)
movq -0xa0(%rbp), %rcx
movq -0xa8(%rbp), %r8
leaq -0x98(%rbp), %rdi
leaq -0x71(%rbp), %r9
callq 0x18060
jmp 0x19463
leaq -0x70(%rbp), %rdi
movq %rdi, -0x1a0(%rbp)
leaq -0x98(%rbp), %rsi
movq %rsi, -0x1a8(%rbp)
callq 0x32f0
movq -0x1a8(%rbp), %rdi
callq 0x3160
movq -0x1a0(%rbp), %rsi
leaq -0xf8(%rbp), %rdi
callq 0x30f0
jmp 0x194a2
movq -0x34(%rbp), %rax
movq %rax, -0x100(%rbp)
movq -0x3c(%rbp), %rax
movq %rax, -0x108(%rbp)
movq -0x100(%rbp), %rdx
movq -0x108(%rbp), %rcx
leaq -0xd8(%rbp), %rdi
leaq -0xf8(%rbp), %rsi
callq 0x1d680
jmp 0x194db
leaq -0xf8(%rbp), %rdi
callq 0x3160
movq -0x120(%rbp), %rdi
leaq -0xd8(%rbp), %rsi
callq 0x1b230
jmp 0x194fc
leaq -0xd8(%rbp), %rdi
callq 0x1a590
leaq -0x70(%rbp), %rdi
callq 0x3160
jmp 0x1955e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x19553
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0xf8(%rbp), %rdi
callq 0x3160
jmp 0x19553
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0xd8(%rbp), %rdi
callq 0x1a590
leaq -0x70(%rbp), %rdi
callq 0x3160
jmp 0x195a6
jmp 0x19560
jmp 0x19562
movl -0x1c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1c(%rbp)
jmp 0x18bbc
jmp 0x19572
movl -0x20(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x20(%rbp)
jmp 0x18b87
movb $0x1, -0x29(%rbp)
testb $0x1, -0x29(%rbp)
jne 0x19596
movq -0x120(%rbp), %rdi
callq 0x189d0
movq -0x118(%rbp), %rax
addq $0x1b0, %rsp            # imm = 0x1B0
popq %rbp
retq
movq -0x120(%rbp), %rdi
callq 0x189d0
movq -0x48(%rbp), %rdi
callq 0x3460
nopl (%rax,%rax)