// File: /workspace/github_cpp_makefile_star2_O2/MatthewZMD[P]TetrisDual/concreteboard.cc
// Function: ConcreteBoard::genThis()
void ConcreteBoard::genThis(){
    std::vector<Cell*> cells;
    Coordinate btmLft{3, 0};
    switch (nextType){
        case CellType::I:
            cells.emplace_back(&(allCells.at(btmLft.row).at(btmLft.col)));
            cells.emplace_back(&(allCells.at(btmLft.row).at(btmLft.col + 1)));
            cells.emplace_back(&(allCells.at(btmLft.row).at(btmLft.col + 2)));
            cells.emplace_back(&(allCells.at(btmLft.row).at(btmLft.col + 3)));
            break;
        case CellType::J:
            cells.emplace_back(&(allCells.at(btmLft.row).at(btmLft.col)));
            cells.emplace_back(&(allCells.at(btmLft.row - 1).at(btmLft.col)));
            cells.emplace_back(&(allCells.at(btmLft.row).at(btmLft.col + 1)));
            cells.emplace_back(&(allCells.at(btmLft.row).at(btmLft.col + 2)));
            break;
        case CellType::L:
            cells.emplace_back(&(allCells.at(btmLft.row).at(btmLft.col)));
            cells.emplace_back(&(allCells.at(btmLft.row).at(btmLft.col + 1)));
            cells.emplace_back(&(allCells.at(btmLft.row).at(btmLft.col + 2)));
            cells.emplace_back(&(allCells.at(btmLft.row - 1).at(btmLft.col + 2)));
            break;
        case CellType::O:
            cells.emplace_back(&(allCells.at(btmLft.row).at(btmLft.col)));
            cells.emplace_back(&(allCells.at(btmLft.row - 1).at(btmLft.col)));
            cells.emplace_back(&(allCells.at(btmLft.row - 1).at(btmLft.col + 1)));
            cells.emplace_back(&(allCells.at(btmLft.row).at(btmLft.col + 1)));
            break;
        case CellType::S:
            cells.emplace_back(&(allCells.at(btmLft.row).at(btmLft.col)));
            cells.emplace_back(&(allCells.at(btmLft.row).at(btmLft.col + 1)));
            cells.emplace_back(&(allCells.at(btmLft.row - 1).at(btmLft.col + 1)));
            cells.emplace_back(&(allCells.at(btmLft.row - 1).at(btmLft.col + 2)));
            break;
        case CellType::Z:
            cells.emplace_back(&(allCells.at(btmLft.row).at(btmLft.col + 1)));
            cells.emplace_back(&(allCells.at(btmLft.row - 1).at(btmLft.col)));
            cells.emplace_back(&(allCells.at(btmLft.row - 1).at(btmLft.col + 1)));
            cells.emplace_back(&(allCells.at(btmLft.row).at(btmLft.col + 2)));
            break;
        case CellType::T:
            cells.emplace_back(&(allCells.at(btmLft.row).at(btmLft.col + 1)));
            cells.emplace_back(&(allCells.at(btmLft.row - 1).at(btmLft.col)));
            cells.emplace_back(&(allCells.at(btmLft.row - 1).at(btmLft.col + 1)));
            cells.emplace_back(&(allCells.at(btmLft.row - 1).at(btmLft.col + 2)));
            break;
        case CellType::Star:
            break;
        case CellType::E:
            break; // Do nothing
    }
    thisBlock = std::make_shared<Block>(nextType, level->getLevel(), cells);

    nextType = CellType::E;
    notifyObservers();
}

// Assembly:
pushq %r14
pushq %rbx
subq $0x38, %rsp
movq %rdi, %rbx
andq $0x0, 0x20(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x10(%rsp)
movl 0x58(%rdi), %eax
cmpq $0x6, %rax
ja 0x94a0
leaq 0x838a(%rip), %rcx      # 0x113c8
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq 0x78(%rbx), %r14
pushq $0x3
popq %rsi
movq %r14, %rdi
callq 0x9a30
movq %rax, %rdi
xorl %esi, %esi
callq 0x9a4e
movq %rsp, %rsi
movq %rax, (%rsi)
leaq 0x10(%rsp), %rdi
callq 0x999a
pushq $0x3
popq %rsi
movq %r14, %rdi
callq 0x9a30
pushq $0x1
popq %rsi
movq %rax, %rdi
callq 0x9a4e
movq %rsp, %rsi
movq %rax, (%rsi)
leaq 0x10(%rsp), %rdi
callq 0x999a
pushq $0x3
popq %rsi
movq %r14, %rdi
callq 0x9a30
pushq $0x2
popq %rsi
movq %rax, %rdi
callq 0x9a4e
movq %rsp, %rsi
movq %rax, (%rsi)
leaq 0x10(%rsp), %rdi
callq 0x999a
pushq $0x3
popq %rsi
movq %r14, %rdi
callq 0x9a30
pushq $0x3
popq %rsi
movq %rax, %rdi
callq 0x9a4e
movq %rsp, %rsi
movq %rax, (%rsi)
leaq 0x10(%rsp), %rdi
callq 0x999a
jmp 0x94a0
leaq 0x78(%rbx), %r14
pushq $0x3
popq %rsi
movq %r14, %rdi
callq 0x9a30
movq %rax, %rdi
xorl %esi, %esi
callq 0x9a4e
movq %rsp, %rsi
movq %rax, (%rsi)
leaq 0x10(%rsp), %rdi
callq 0x999a
pushq $0x3
popq %rsi
movq %r14, %rdi
callq 0x9a30
pushq $0x1
popq %rsi
movq %rax, %rdi
callq 0x9a4e
movq %rsp, %rsi
movq %rax, (%rsi)
leaq 0x10(%rsp), %rdi
callq 0x999a
pushq $0x2
popq %rsi
movq %r14, %rdi
callq 0x9a30
pushq $0x1
popq %rsi
movq %rax, %rdi
callq 0x9a4e
movq %rsp, %rsi
movq %rax, (%rsi)
leaq 0x10(%rsp), %rdi
callq 0x999a
pushq $0x2
popq %rsi
movq %r14, %rdi
callq 0x9a30
pushq $0x2
popq %rsi
movq %rax, %rdi
callq 0x9a4e
movq %rsp, %rsi
movq %rax, (%rsi)
leaq 0x10(%rsp), %rdi
callq 0x999a
jmp 0x94a0
leaq 0x78(%rbx), %r14
pushq $0x3
popq %rsi
movq %r14, %rdi
callq 0x9a30
movq %rax, %rdi
xorl %esi, %esi
callq 0x9a4e
movq %rsp, %rsi
movq %rax, (%rsi)
leaq 0x10(%rsp), %rdi
callq 0x999a
pushq $0x3
popq %rsi
movq %r14, %rdi
callq 0x9a30
pushq $0x1
popq %rsi
movq %rax, %rdi
callq 0x9a4e
movq %rsp, %rsi
movq %rax, (%rsi)
leaq 0x10(%rsp), %rdi
callq 0x999a
pushq $0x3
popq %rsi
movq %r14, %rdi
callq 0x9a30
pushq $0x2
popq %rsi
movq %rax, %rdi
callq 0x9a4e
movq %rsp, %rsi
movq %rax, (%rsi)
leaq 0x10(%rsp), %rdi
callq 0x999a
pushq $0x2
popq %rsi
movq %r14, %rdi
callq 0x9a30
pushq $0x2
popq %rsi
movq %rax, %rdi
callq 0x9a4e
movq %rsp, %rsi
movq %rax, (%rsi)
leaq 0x10(%rsp), %rdi
callq 0x999a
jmp 0x94a0
leaq 0x78(%rbx), %r14
pushq $0x3
popq %rsi
movq %r14, %rdi
callq 0x9a30
movq %rax, %rdi
xorl %esi, %esi
callq 0x9a4e
movq %rsp, %rsi
movq %rax, (%rsi)
leaq 0x10(%rsp), %rdi
callq 0x999a
pushq $0x2
popq %rsi
movq %r14, %rdi
callq 0x9a30
movq %rax, %rdi
xorl %esi, %esi
callq 0x9a4e
movq %rsp, %rsi
movq %rax, (%rsi)
leaq 0x10(%rsp), %rdi
callq 0x999a
pushq $0x2
popq %rsi
movq %r14, %rdi
callq 0x9a30
pushq $0x1
popq %rsi
movq %rax, %rdi
callq 0x9a4e
movq %rsp, %rsi
movq %rax, (%rsi)
leaq 0x10(%rsp), %rdi
callq 0x999a
pushq $0x3
popq %rsi
movq %r14, %rdi
callq 0x9a30
pushq $0x1
popq %rsi
movq %rax, %rdi
callq 0x9a4e
movq %rsp, %rsi
movq %rax, (%rsi)
leaq 0x10(%rsp), %rdi
callq 0x999a
jmp 0x94a0
leaq 0x78(%rbx), %r14
pushq $0x3
popq %rsi
movq %r14, %rdi
callq 0x9a30
movq %rax, %rdi
xorl %esi, %esi
callq 0x9a4e
movq %rsp, %rsi
movq %rax, (%rsi)
leaq 0x10(%rsp), %rdi
callq 0x999a
pushq $0x2
popq %rsi
movq %r14, %rdi
callq 0x9a30
movq %rax, %rdi
xorl %esi, %esi
callq 0x9a4e
movq %rsp, %rsi
movq %rax, (%rsi)
leaq 0x10(%rsp), %rdi
callq 0x999a
pushq $0x3
popq %rsi
movq %r14, %rdi
callq 0x9a30
pushq $0x1
popq %rsi
movq %rax, %rdi
callq 0x9a4e
movq %rsp, %rsi
movq %rax, (%rsi)
leaq 0x10(%rsp), %rdi
callq 0x999a
pushq $0x3
popq %rsi
movq %r14, %rdi
callq 0x9a30
pushq $0x2
popq %rsi
movq %rax, %rdi
callq 0x9a4e
movq %rsp, %rsi
movq %rax, (%rsi)
leaq 0x10(%rsp), %rdi
callq 0x999a
jmp 0x94a0
leaq 0x78(%rbx), %r14
pushq $0x3
popq %rsi
movq %r14, %rdi
callq 0x9a30
pushq $0x1
popq %rsi
movq %rax, %rdi
callq 0x9a4e
movq %rsp, %rsi
movq %rax, (%rsi)
leaq 0x10(%rsp), %rdi
callq 0x999a
pushq $0x2
popq %rsi
movq %r14, %rdi
callq 0x9a30
movq %rax, %rdi
xorl %esi, %esi
callq 0x9a4e
movq %rsp, %rsi
movq %rax, (%rsi)
leaq 0x10(%rsp), %rdi
callq 0x999a
pushq $0x2
popq %rsi
movq %r14, %rdi
callq 0x9a30
pushq $0x1
popq %rsi
movq %rax, %rdi
callq 0x9a4e
movq %rsp, %rsi
movq %rax, (%rsi)
leaq 0x10(%rsp), %rdi
callq 0x999a
pushq $0x3
popq %rsi
movq %r14, %rdi
callq 0x9a30
pushq $0x2
popq %rsi
movq %rax, %rdi
callq 0x9a4e
movq %rsp, %rsi
movq %rax, (%rsi)
leaq 0x10(%rsp), %rdi
callq 0x999a
jmp 0x94a0
leaq 0x78(%rbx), %r14
pushq $0x3
popq %rsi
movq %r14, %rdi
callq 0x9a30
pushq $0x1
popq %rsi
movq %rax, %rdi
callq 0x9a4e
movq %rsp, %rsi
movq %rax, (%rsi)
leaq 0x10(%rsp), %rdi
callq 0x999a
pushq $0x2
popq %rsi
movq %r14, %rdi
callq 0x9a30
movq %rax, %rdi
xorl %esi, %esi
callq 0x9a4e
movq %rsp, %rsi
movq %rax, (%rsi)
leaq 0x10(%rsp), %rdi
callq 0x999a
pushq $0x2
popq %rsi
movq %r14, %rdi
callq 0x9a30
pushq $0x1
popq %rsi
movq %rax, %rdi
callq 0x9a4e
movq %rsp, %rsi
movq %rax, (%rsi)
leaq 0x10(%rsp), %rdi
callq 0x999a
pushq $0x2
popq %rsi
movq %r14, %rdi
callq 0x9a30
pushq $0x2
popq %rsi
movq %rax, %rdi
callq 0x9a4e
movq %rsp, %rsi
movq %rax, (%rsi)
leaq 0x10(%rsp), %rdi
callq 0x999a
movq 0x60(%rbx), %rdi
callq 0xd862
leaq 0x58(%rbx), %rsi
leaq 0x34(%rsp), %rdx
movl %eax, (%rdx)
movq %rsp, %rdi
leaq 0x10(%rsp), %rcx
callq 0x9a6f
leaq 0x48(%rbx), %rdi
movq %rsp, %rsi
callq 0xa8f4
leaq 0x8(%rsp), %rdi
callq 0x5c18
movl $0x7, 0x58(%rbx)
movq %rbx, %rdi
callq 0xda72
leaq 0x10(%rsp), %rdi
callq 0x75fe
addq $0x38, %rsp
popq %rbx
popq %r14
retq
jmp 0x9532
jmp 0x9532
jmp 0x9532
jmp 0x9532
jmp 0x9532
jmp 0x9532
jmp 0x9532
jmp 0x9532
jmp 0x9532
jmp 0x9532
jmp 0x9532
jmp 0x9532
jmp 0x9532
jmp 0x9532
jmp 0x9532
jmp 0x9532
jmp 0x9532
jmp 0x9532
jmp 0x9532
jmp 0x9532
jmp 0x9532
jmp 0x9532
jmp 0x9532
jmp 0x9532
jmp 0x9532
jmp 0x9532
jmp 0x9532
jmp 0x9532
jmp 0x9532
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0x75fe
movq %rbx, %rdi
callq 0x54b0
nop