// File: toxaart[P]hierarchical_block_sparse_lib/test_source/test_matrix_alloc_problem.cc
// Function: int test_creation<hbsm::HierarchicalBlockSparseMatrix<double>>(int, int, double, int, int)
static int test_creation(int N, int blockSize, double nonzeroFraction, int nMat, int nRep) {
    typename MatrixType::Params param;
    param.blocksize = blockSize;
    MatrixType M1;

    M1.set_params(param);
    if(!M1.empty())
    throw std::runtime_error("Error: M.empty() gave wrong result.");
    M1.resize(3, 7);

    if(M1.empty())
    throw std::runtime_error("Error: M.empty() gave wrong result.");
    M1.clear();
    if(!M1.empty())
    throw std::runtime_error("Error: M.empty() gave wrong result.");
    M1.resize(3, 7);

    if(M1.get_frob_squared() != 0)
    throw std::runtime_error("Error: M.get_frob_squared() != 0 for newly created matrix.");

    double refValue1 = 7.7;
    double refValue2 = 1.1;

    int NN = N / blockSize;

    // Allocate nMat matrices and do some operations with them.
    std::vector<MatrixType*> M_vec_1(nMat);
    for(int i = 0; i < nMat; i++) {

        M_vec_1[i] = new MatrixType();
        M_vec_1[i]->set_params(param);
        M_vec_1[i]->resize(N, N);

        // Test assign_from_vectors()
        {
            int nValues = (int)((double)NN*NN*nonzeroFraction);
            std::vector<int> rows(nValues);
            std::vector<int> cols(nValues);
            std::vector<double> values(nValues);
            int count = 0;
            for(int ii = 0; ii < NN; ii++) {
                for(int jj = 0; jj < NN; jj++) {
                    rows[count] = ii*blockSize;
                    cols[count] = jj*blockSize;
                    values[count] = 1.1 + 0.001*ii;
                    count++;
                    if(count == nValues)
                    break;
                }

                if(count == nValues)
                break;
            }

            assert(count == nValues);

            M_vec_1[i]->assign_from_vectors(rows, cols, values);

            MatrixType C;

            C.copy(*M_vec_1[i]);
            verify_that_matrices_are_equal(C, *M_vec_1[i]);

        }
    }

    // Now delete odd-numbered matrices (trying to create a fragmented memory situation).
    for(int i = 1; i < nMat; i+=2)
        delete M_vec_1[i];

    int nMatHalf = nMat / 2;

    // Now repeatedly create nMatHalf matrices and do some operations on them.
    for(int i = 0; i < nRep; i++) {

        std::vector<MatrixType*> M_vec_2(nMatHalf);
        for(int i = 0; i < nMatHalf; i++) {

            M_vec_2[i] = new MatrixType();
            M_vec_2[i]->set_params(param);
            M_vec_2[i]->resize(N, N);

              // Test assign_from_vectors()
            {
                int nValues = (int)((double)NN*NN*nonzeroFraction);
                std::vector<int> rows(nValues);
                std::vector<int> cols(nValues);
                std::vector<double> values(nValues);
                int count = 0;
                for(int ii = 0; ii < NN; ii++) {
                  for(int jj = 0; jj < NN; jj++) {
                    rows[count] = ii*blockSize;
                    cols[count] = jj*blockSize;
                    values[count] = 1.1 + 0.001*ii;
                    count++;
                    if(count == nValues)
                      break;
                  }
                  if(count == nValues)
                    break;
                }
                assert(count == nValues);
                M_vec_2[i]->assign_from_vectors(rows, cols, values);
            }

            // Test copy()
            MatrixType C;
            C.copy(*M_vec_2[i]);
            verify_that_matrices_are_equal(C, *M_vec_2[i]);

        }

        for(int i = 0; i < nMatHalf; i++)
          delete M_vec_2[i];
    }

    // Now delete even-numbered-numbered matrices (trying to create a fragmented memory situation).
    for(int i = 0; i < nMat; i+=2)
        delete M_vec_1[i];

    std::cout << "Matrix test doing many allocations finished OK." << std::endl;

    return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x440, %rsp            # imm = 0x440
movl %edi, -0x4(%rbp)
movl %esi, -0x8(%rbp)
movsd %xmm0, -0x10(%rbp)
movl %edx, -0x14(%rbp)
movl %ecx, -0x18(%rbp)
movl -0x8(%rbp), %eax
movl %eax, -0x1c(%rbp)
leaq -0xa8(%rbp), %rdi
movq %rdi, -0x320(%rbp)
callq 0x37c0
movq -0x320(%rbp), %rdi
leaq -0x1c(%rbp), %rsi
callq 0x3860
jmp 0x2857
leaq -0xa8(%rbp), %rdi
callq 0x38f0
movb %al, -0x321(%rbp)
jmp 0x286b
movb -0x321(%rbp), %al
testb $0x1, %al
jne 0x28f9
jmp 0x287b
movl $0x10, %edi
callq 0x20a0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x330(%rbp)
leaq 0x98ce(%rip), %rsi      # 0xc167
callq 0x2070
jmp 0x28a0
movq -0x330(%rbp), %rdi
movq 0xf742(%rip), %rsi      # 0x11ff0
movq 0xf703(%rip), %rdx      # 0x11fb8
callq 0x22b0
jmp 0x37bd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
jmp 0x37a5
movq -0x330(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
callq 0x2110
jmp 0x37a5
xorl %eax, %eax
movl %eax, %ecx
leaq -0xa8(%rbp), %rdi
movl $0x3, %esi
movl $0x7, %edx
callq 0x3950
jmp 0x2915
leaq -0xa8(%rbp), %rdi
callq 0x38f0
movb %al, -0x331(%rbp)
jmp 0x2929
movb -0x331(%rbp), %al
testb $0x1, %al
jne 0x2935
jmp 0x299c
movl $0x10, %edi
callq 0x20a0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x340(%rbp)
leaq 0x9814(%rip), %rsi      # 0xc167
callq 0x2070
jmp 0x295a
movq -0x340(%rbp), %rdi
movq 0xf688(%rip), %rsi      # 0x11ff0
movq 0xf649(%rip), %rdx      # 0x11fb8
callq 0x22b0
jmp 0x37bd
movq -0x340(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
callq 0x2110
jmp 0x37a5
leaq -0xa8(%rbp), %rdi
callq 0x3aa0
jmp 0x29aa
leaq -0xa8(%rbp), %rdi
callq 0x38f0
movb %al, -0x341(%rbp)
jmp 0x29be
movb -0x341(%rbp), %al
testb $0x1, %al
jne 0x2a31
jmp 0x29ca
movl $0x10, %edi
callq 0x20a0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x350(%rbp)
leaq 0x977f(%rip), %rsi      # 0xc167
callq 0x2070
jmp 0x29ef
movq -0x350(%rbp), %rdi
movq 0xf5f3(%rip), %rsi      # 0x11ff0
movq 0xf5b4(%rip), %rdx      # 0x11fb8
callq 0x22b0
jmp 0x37bd
movq -0x350(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
callq 0x2110
jmp 0x37a5
xorl %eax, %eax
movl %eax, %ecx
leaq -0xa8(%rbp), %rdi
movl $0x3, %esi
movl $0x7, %edx
callq 0x3950
jmp 0x2a4d
leaq -0xa8(%rbp), %rdi
callq 0x3c10
movsd %xmm0, -0x358(%rbp)
jmp 0x2a63
movsd -0x358(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x2a78
jp 0x2a78
jmp 0x2adf
movl $0x10, %edi
callq 0x20a0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x360(%rbp)
leaq 0x96f5(%rip), %rsi      # 0xc18b
callq 0x2070
jmp 0x2a9d
movq -0x360(%rbp), %rdi
movq 0xf545(%rip), %rsi      # 0x11ff0
movq 0xf506(%rip), %rdx      # 0x11fb8
callq 0x22b0
jmp 0x37bd
movq -0x360(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
callq 0x2110
jmp 0x37a5
movabsq $0x401ecccccccccccd, %rax # imm = 0x401ECCCCCCCCCCCD
movq %rax, -0xc0(%rbp)
movabsq $0x3ff199999999999a, %rax # imm = 0x3FF199999999999A
movq %rax, -0xc8(%rbp)
movl -0x4(%rbp), %eax
movl -0x8(%rbp), %ecx
cltd
idivl %ecx
movl %eax, -0xcc(%rbp)
movslq -0x14(%rbp), %rax
movq %rax, -0x370(%rbp)
leaq -0xe9(%rbp), %rdi
movq %rdi, -0x368(%rbp)
callq 0x3db0
movq -0x370(%rbp), %rsi
movq -0x368(%rbp), %rdx
leaq -0xe8(%rbp), %rdi
callq 0x3dd0
jmp 0x2b4a
leaq -0xe9(%rbp), %rdi
callq 0x3e40
movl $0x0, -0xf0(%rbp)
movl -0xf0(%rbp), %eax
cmpl -0x14(%rbp), %eax
jge 0x305b
movl $0x88, %edi
callq 0x2180
movq %rax, -0x378(%rbp)
jmp 0x2b82
movq -0x378(%rbp), %rdi
callq 0x37c0
jmp 0x2b90
movslq -0xf0(%rbp), %rsi
leaq -0xe8(%rbp), %rdi
movq %rdi, -0x380(%rbp)
callq 0x3e60
movq -0x378(%rbp), %rcx
movq -0x380(%rbp), %rdi
movq %rcx, (%rax)
movslq -0xf0(%rbp), %rsi
callq 0x3e60
movq (%rax), %rdi
leaq -0x1c(%rbp), %rsi
callq 0x3860
jmp 0x2bd5
movslq -0xf0(%rbp), %rsi
leaq -0xe8(%rbp), %rdi
callq 0x3e60
movq (%rax), %rdi
movl -0x4(%rbp), %edx
xorl %eax, %eax
movl %eax, %ecx
movl %edx, %esi
callq 0x3950
jmp 0x2bfb
cvtsi2sdl -0xcc(%rbp), %xmm0
mulsd %xmm0, %xmm0
movsd -0x10(%rbp), %xmm1
mulsd %xmm1, %xmm0
cvttsd2si %xmm0, %eax
movl %eax, -0xf4(%rbp)
movslq -0xf4(%rbp), %rax
movq %rax, -0x390(%rbp)
leaq -0x111(%rbp), %rdi
movq %rdi, -0x388(%rbp)
callq 0x3e80
movq -0x390(%rbp), %rsi
movq -0x388(%rbp), %rdx
leaq -0x110(%rbp), %rdi
callq 0x3ea0
jmp 0x2c57
leaq -0x111(%rbp), %rdi
callq 0x3f10
movslq -0xf4(%rbp), %rax
movq %rax, -0x3a0(%rbp)
leaq -0x131(%rbp), %rdi
movq %rdi, -0x398(%rbp)
callq 0x3e80
movq -0x3a0(%rbp), %rsi
movq -0x398(%rbp), %rdx
leaq -0x130(%rbp), %rdi
callq 0x3ea0
jmp 0x2ca0
leaq -0x131(%rbp), %rdi
callq 0x3f10
movslq -0xf4(%rbp), %rax
movq %rax, -0x3b0(%rbp)
leaq -0x151(%rbp), %rdi
movq %rdi, -0x3a8(%rbp)
callq 0x3f30
movq -0x3b0(%rbp), %rsi
movq -0x3a8(%rbp), %rdx
leaq -0x150(%rbp), %rdi
callq 0x3f50
jmp 0x2ce9
leaq -0x151(%rbp), %rdi
callq 0x3fc0
movl $0x0, -0x158(%rbp)
movl $0x0, -0x15c(%rbp)
movl -0x15c(%rbp), %eax
cmpl -0xcc(%rbp), %eax
jge 0x2f01
movl $0x0, -0x160(%rbp)
movl -0x160(%rbp), %eax
cmpl -0xcc(%rbp), %eax
jge 0x2edb
movl -0x15c(%rbp), %eax
imull -0x8(%rbp), %eax
movl %eax, -0x3c0(%rbp)
movslq -0x158(%rbp), %rsi
leaq -0x110(%rbp), %rdi
callq 0x3fe0
movl -0x3c0(%rbp), %ecx
movl %ecx, (%rax)
movl -0x160(%rbp), %eax
imull -0x8(%rbp), %eax
movl %eax, -0x3bc(%rbp)
movslq -0x158(%rbp), %rsi
leaq -0x130(%rbp), %rdi
callq 0x3fe0
movl -0x3bc(%rbp), %ecx
movl %ecx, (%rax)
cvtsi2sdl -0x15c(%rbp), %xmm0
movsd 0x928b(%rip), %xmm1     # 0xc028
mulsd %xmm1, %xmm0
movsd 0x9287(%rip), %xmm1     # 0xc030
addsd %xmm1, %xmm0
movsd %xmm0, -0x3b8(%rbp)
movslq -0x158(%rbp), %rsi
leaq -0x150(%rbp), %rdi
callq 0x4000
movsd -0x3b8(%rbp), %xmm0
movsd %xmm0, (%rax)
movl -0x158(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x158(%rbp)
movl -0x158(%rbp), %eax
cmpl -0xf4(%rbp), %eax
jne 0x2ec5
jmp 0x2edb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0xe9(%rbp), %rdi
callq 0x3e40
jmp 0x37a5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
jmp 0x3799
movq -0x378(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
movl $0x88, %esi
callq 0x2190
jmp 0x3799
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x111(%rbp), %rdi
callq 0x3f10
jmp 0x3799
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x131(%rbp), %rdi
callq 0x3f10
jmp 0x304a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x151(%rbp), %rdi
callq 0x3fc0
jmp 0x303e
jmp 0x2ec7
movl -0x160(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x160(%rbp)
jmp 0x2d25
movl -0x158(%rbp), %eax
cmpl -0xf4(%rbp), %eax
jne 0x2eeb
jmp 0x2f01
jmp 0x2eed
movl -0x15c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x15c(%rbp)
jmp 0x2d09
movl -0x158(%rbp), %eax
cmpl -0xf4(%rbp), %eax
jne 0x2f11
jmp 0x2f30
leaq 0x92ae(%rip), %rdi      # 0xc1c6
leaq 0x92b8(%rip), %rsi      # 0xc1d7
movl $0x52, %edx
leaq 0x92c9(%rip), %rcx      # 0xc1f4
callq 0x20e0
movslq -0xf0(%rbp), %rsi
leaq -0xe8(%rbp), %rdi
callq 0x3e60
movq (%rax), %rdi
leaq -0x110(%rbp), %rsi
leaq -0x130(%rbp), %rdx
leaq -0x150(%rbp), %rcx
callq 0x4020
jmp 0x2f62
leaq -0x1e8(%rbp), %rdi
callq 0x37c0
jmp 0x2f70
movslq -0xf0(%rbp), %rsi
leaq -0xe8(%rbp), %rdi
callq 0x3e60
movq (%rax), %rsi
xorl %eax, %eax
movl %eax, %edx
leaq -0x1e8(%rbp), %rdi
callq 0x4060
jmp 0x2f98
movslq -0xf0(%rbp), %rsi
leaq -0xe8(%rbp), %rdi
callq 0x3e60
movq (%rax), %rsi
leaq -0x1e8(%rbp), %rdi
callq 0x42e0
jmp 0x2fbc
leaq -0x1e8(%rbp), %rdi
callq 0x4660
leaq -0x150(%rbp), %rdi
callq 0x46f0
leaq -0x130(%rbp), %rdi
callq 0x4750
leaq -0x110(%rbp), %rdi
callq 0x4750
movl -0xf0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xf0(%rbp)
jmp 0x2b60
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
jmp 0x3032
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x1e8(%rbp), %rdi
callq 0x4660
leaq -0x150(%rbp), %rdi
callq 0x46f0
leaq -0x130(%rbp), %rdi
callq 0x4750
leaq -0x110(%rbp), %rdi
callq 0x4750
jmp 0x3799
movl $0x1, -0x1ec(%rbp)
movl -0x1ec(%rbp), %eax
cmpl -0x14(%rbp), %eax
jge 0x30c3
movslq -0x1ec(%rbp), %rsi
leaq -0xe8(%rbp), %rdi
callq 0x3e60
movq (%rax), %rax
movq %rax, -0x3c8(%rbp)
cmpq $0x0, %rax
je 0x30b0
movq -0x3c8(%rbp), %rdi
callq 0x4660
movq -0x3c8(%rbp), %rdi
movl $0x88, %esi
callq 0x2190
jmp 0x30b2
movl -0x1ec(%rbp), %eax
addl $0x2, %eax
movl %eax, -0x1ec(%rbp)
jmp 0x3065
movl -0x14(%rbp), %eax
movl $0x2, %ecx
cltd
idivl %ecx
movl %eax, -0x1f0(%rbp)
movl $0x0, -0x1f4(%rbp)
movl -0x1f4(%rbp), %eax
cmpl -0x18(%rbp), %eax
jge 0x36dd
movslq -0x1f0(%rbp), %rax
movq %rax, -0x3d8(%rbp)
leaq -0x211(%rbp), %rdi
movq %rdi, -0x3d0(%rbp)
callq 0x3db0
movq -0x3d8(%rbp), %rsi
movq -0x3d0(%rbp), %rdx
leaq -0x210(%rbp), %rdi
callq 0x3dd0
jmp 0x312a
leaq -0x211(%rbp), %rdi
callq 0x3e40
movl $0x0, -0x218(%rbp)
movl -0x218(%rbp), %eax
cmpl -0x1f0(%rbp), %eax
jge 0x3641
movl $0x88, %edi
callq 0x2180
movq %rax, -0x3e0(%rbp)
jmp 0x3165
movq -0x3e0(%rbp), %rdi
callq 0x37c0
jmp 0x3173
movslq -0x218(%rbp), %rsi
leaq -0x210(%rbp), %rdi
movq %rdi, -0x3e8(%rbp)
callq 0x3e60
movq -0x3e0(%rbp), %rcx
movq -0x3e8(%rbp), %rdi
movq %rcx, (%rax)
movslq -0x218(%rbp), %rsi
callq 0x3e60
movq (%rax), %rdi
leaq -0x1c(%rbp), %rsi
callq 0x3860
jmp 0x31b8
movslq -0x218(%rbp), %rsi
leaq -0x210(%rbp), %rdi
callq 0x3e60
movq (%rax), %rdi
movl -0x4(%rbp), %edx
xorl %eax, %eax
movl %eax, %ecx
movl %edx, %esi
callq 0x3950
jmp 0x31de
cvtsi2sdl -0xcc(%rbp), %xmm0
mulsd %xmm0, %xmm0
movsd -0x10(%rbp), %xmm1
mulsd %xmm1, %xmm0
cvttsd2si %xmm0, %eax
movl %eax, -0x21c(%rbp)
movslq -0x21c(%rbp), %rax
movq %rax, -0x3f8(%rbp)
leaq -0x239(%rbp), %rdi
movq %rdi, -0x3f0(%rbp)
callq 0x3e80
movq -0x3f8(%rbp), %rsi
movq -0x3f0(%rbp), %rdx
leaq -0x238(%rbp), %rdi
callq 0x3ea0
jmp 0x323a
leaq -0x239(%rbp), %rdi
callq 0x3f10
movslq -0x21c(%rbp), %rax
movq %rax, -0x408(%rbp)
leaq -0x259(%rbp), %rdi
movq %rdi, -0x400(%rbp)
callq 0x3e80
movq -0x408(%rbp), %rsi
movq -0x400(%rbp), %rdx
leaq -0x258(%rbp), %rdi
callq 0x3ea0
jmp 0x3283
leaq -0x259(%rbp), %rdi
callq 0x3f10
movslq -0x21c(%rbp), %rax
movq %rax, -0x418(%rbp)
leaq -0x279(%rbp), %rdi
movq %rdi, -0x410(%rbp)
callq 0x3f30
movq -0x418(%rbp), %rsi
movq -0x410(%rbp), %rdx
leaq -0x278(%rbp), %rdi
callq 0x3f50
jmp 0x32cc
leaq -0x279(%rbp), %rdi
callq 0x3fc0
movl $0x0, -0x280(%rbp)
movl $0x0, -0x284(%rbp)
movl -0x284(%rbp), %eax
cmpl -0xcc(%rbp), %eax
jge 0x34e4
movl $0x0, -0x288(%rbp)
movl -0x288(%rbp), %eax
cmpl -0xcc(%rbp), %eax
jge 0x34be
movl -0x284(%rbp), %eax
imull -0x8(%rbp), %eax
movl %eax, -0x428(%rbp)
movslq -0x280(%rbp), %rsi
leaq -0x238(%rbp), %rdi
callq 0x3fe0
movl -0x428(%rbp), %ecx
movl %ecx, (%rax)
movl -0x288(%rbp), %eax
imull -0x8(%rbp), %eax
movl %eax, -0x424(%rbp)
movslq -0x280(%rbp), %rsi
leaq -0x258(%rbp), %rdi
callq 0x3fe0
movl -0x424(%rbp), %ecx
movl %ecx, (%rax)
cvtsi2sdl -0x284(%rbp), %xmm0
movsd 0x8ca8(%rip), %xmm1     # 0xc028
mulsd %xmm1, %xmm0
movsd 0x8ca4(%rip), %xmm1     # 0xc030
addsd %xmm1, %xmm0
movsd %xmm0, -0x420(%rbp)
movslq -0x280(%rbp), %rsi
leaq -0x278(%rbp), %rdi
callq 0x4000
movsd -0x420(%rbp), %xmm0
movsd %xmm0, (%rax)
movl -0x280(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x280(%rbp)
movl -0x280(%rbp), %eax
cmpl -0x21c(%rbp), %eax
jne 0x34a8
jmp 0x34be
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x211(%rbp), %rdi
callq 0x3e40
jmp 0x3799
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
jmp 0x36cc
movq -0x3e0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
movl $0x88, %esi
callq 0x2190
jmp 0x36cc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x239(%rbp), %rdi
callq 0x3f10
jmp 0x36cc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x259(%rbp), %rdi
callq 0x3f10
jmp 0x360d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x279(%rbp), %rdi
callq 0x3fc0
jmp 0x3601
jmp 0x34aa
movl -0x288(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x288(%rbp)
jmp 0x3308
movl -0x280(%rbp), %eax
cmpl -0x21c(%rbp), %eax
jne 0x34ce
jmp 0x34e4
jmp 0x34d0
movl -0x284(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x284(%rbp)
jmp 0x32ec
movl -0x280(%rbp), %eax
cmpl -0x21c(%rbp), %eax
jne 0x34f4
jmp 0x3513
leaq 0x8ccb(%rip), %rdi      # 0xc1c6
leaq 0x8cd5(%rip), %rsi      # 0xc1d7
movl $0x81, %edx
leaq 0x8ce6(%rip), %rcx      # 0xc1f4
callq 0x20e0
movslq -0x218(%rbp), %rsi
leaq -0x210(%rbp), %rdi
callq 0x3e60
movq (%rax), %rdi
leaq -0x238(%rbp), %rsi
leaq -0x258(%rbp), %rdx
leaq -0x278(%rbp), %rcx
callq 0x4020
jmp 0x3545
leaq -0x278(%rbp), %rdi
callq 0x46f0
leaq -0x258(%rbp), %rdi
callq 0x4750
leaq -0x238(%rbp), %rdi
callq 0x4750
leaq -0x310(%rbp), %rdi
callq 0x37c0
jmp 0x3577
movslq -0x218(%rbp), %rsi
leaq -0x210(%rbp), %rdi
callq 0x3e60
movq (%rax), %rsi
xorl %eax, %eax
movl %eax, %edx
leaq -0x310(%rbp), %rdi
callq 0x4060
jmp 0x359f
movslq -0x218(%rbp), %rsi
leaq -0x210(%rbp), %rdi
callq 0x3e60
movq (%rax), %rsi
leaq -0x310(%rbp), %rdi
callq 0x42e0
jmp 0x35c3
leaq -0x310(%rbp), %rdi
callq 0x4660
movl -0x218(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x218(%rbp)
jmp 0x3140
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x278(%rbp), %rdi
callq 0x46f0
leaq -0x258(%rbp), %rdi
callq 0x4750
leaq -0x238(%rbp), %rdi
callq 0x4750
jmp 0x36cc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x310(%rbp), %rdi
callq 0x4660
jmp 0x36cc
movl $0x0, -0x314(%rbp)
movl -0x314(%rbp), %eax
cmpl -0x1f0(%rbp), %eax
jge 0x36ac
movslq -0x314(%rbp), %rsi
leaq -0x210(%rbp), %rdi
callq 0x3e60
movq (%rax), %rax
movq %rax, -0x430(%rbp)
cmpq $0x0, %rax
je 0x3699
movq -0x430(%rbp), %rdi
callq 0x4660
movq -0x430(%rbp), %rdi
movl $0x88, %esi
callq 0x2190
jmp 0x369b
movl -0x314(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x314(%rbp)
jmp 0x364b
leaq -0x210(%rbp), %rdi
callq 0x47b0
movl -0x1f4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1f4(%rbp)
jmp 0x30de
leaq -0x210(%rbp), %rdi
callq 0x47b0
jmp 0x3799
movl $0x0, -0x318(%rbp)
movl -0x318(%rbp), %eax
cmpl -0x14(%rbp), %eax
jge 0x3745
movslq -0x318(%rbp), %rsi
leaq -0xe8(%rbp), %rdi
callq 0x3e60
movq (%rax), %rax
movq %rax, -0x438(%rbp)
cmpq $0x0, %rax
je 0x3732
movq -0x438(%rbp), %rdi
callq 0x4660
movq -0x438(%rbp), %rdi
movl $0x88, %esi
callq 0x2190
jmp 0x3734
movl -0x318(%rbp), %eax
addl $0x2, %eax
movl %eax, -0x318(%rbp)
jmp 0x36e7
movq 0xe87c(%rip), %rdi      # 0x11fc8
leaq 0x8b0a(%rip), %rsi      # 0xc25d
callq 0x2170
movq %rax, -0x440(%rbp)
jmp 0x3761
movq -0x440(%rbp), %rdi
movq 0xe839(%rip), %rsi      # 0x11fa8
callq 0x21a0
jmp 0x3776
leaq -0xe8(%rbp), %rdi
callq 0x47b0
leaq -0xa8(%rbp), %rdi
callq 0x4660
xorl %eax, %eax
addq $0x440, %rsp            # imm = 0x440
popq %rbp
retq
leaq -0xe8(%rbp), %rdi
callq 0x47b0
leaq -0xa8(%rbp), %rdi
callq 0x4660
movq -0xb0(%rbp), %rdi
callq 0x22d0
nopl (%rax)