// File: IDEmbedder[P]IDembedder/./IDdemo.cpp
// Function: main
int main(int argc, char *argv[]) {
    std::vector<Pair> vector_id;
    
    std::vector<double> vector_to_embed1 = {1.3, 1.4, -1.8};
    std::vector<double> vector_to_embed2 = {2.2, -1.4, 8.7};
    
    //dimensions
    std::vector<double> dim1 = {0, 2, 4, 6, 10};
    std::vector<double> dim2 = {-3, 0, 3};
    std::vector<double> dim3 = {-6.4, -1.3, 0.1, 13, 17.3};
    
    //discrete points of dimensions
    std::vector<std::vector<double> > discrete_points = {dim1, dim2, dim3};
    
    //grid wrapper for discrete points
    Grid grid(discrete_points);
    
    //groups indices - in the following example combinations of two dimensions
    std::vector<std::vector<size_t> > groups = {{0, 1}, {0, 2}, {1, 2}};
    
    //grids of groups makes grid for each group
    GridsOfGroups grids_of_groups(discrete_points, groups);
    
    //interpolated discretization
    ID id(grid);
    
    //embedder
    vector_id = id(vector_to_embed1);
    
    std::cout << "-----------------------ID-----------------------" << std::endl;
    for (const auto& pair : vector_id) {
        std::cout << pair << std::endl;
    }
    std::cout << "\n\n";
    
    
    //interpolated discretization of pairs
    IDpair id_pair(grid);
    
    //embedder
    vector_id = id_pair(vector_to_embed1, vector_to_embed2);
    
    std::cout << "--------------------ID  PAIR--------------------" << std::endl;
    for (const auto& pair : vector_id) {
        std::cout << pair << std::endl;
    }
    std::cout << "\n\n";
    
    
    //interpolated discretization for all ID groups
    IDgroups id_groups(grids_of_groups, groups);
    
    //embedder
    vector_id = id_groups(vector_to_embed1);
    
    std::cout << "-------------------ID  GROUPS-------------------" << std::endl;
    for (const auto& pair : vector_id) {
        std::cout << pair << std::endl;
    }
    
    
    //interpolated discretization for all IDpair groups
    IDgroupsPair id_groups_pair(grids_of_groups, groups);
    
    //embedder
    vector_id = id_groups_pair(vector_to_embed1, vector_to_embed2);
    
    std::cout << "-----------------ID GROUPS PAIR-----------------" << std::endl;
    for (const auto& pair : vector_id) {
        std::cout << pair << std::endl;
    }

    return 0;
}

// Assembly:
subq $0x6e8, %rsp            # imm = 0x6E8
movl $0x0, 0x6e4(%rsp)
movl %edi, 0x6e0(%rsp)
movq %rsi, 0x6d8(%rsp)
leaq 0x6c0(%rsp), %rdi
callq 0x2330
movabsq $-0x4003333333333333, %rax # imm = 0xBFFCCCCCCCCCCCCD
movq %rax, 0x690(%rsp)
movups 0x10d39(%rip), %xmm0    # 0x12010
movaps %xmm0, 0x680(%rsp)
leaq 0x680(%rsp), %rax
movq %rax, 0x698(%rsp)
movq $0x3, 0x6a0(%rsp)
leaq 0x67f(%rsp), %rdi
movq %rdi, 0x148(%rsp)
callq 0x2340
movq 0x148(%rsp), %rcx
movq 0x698(%rsp), %rsi
movq 0x6a0(%rsp), %rdx
leaq 0x6a8(%rsp), %rdi
callq 0x2350
jmp 0x1337
leaq 0x67f(%rsp), %rdi
callq 0x23e0
movabsq $0x4021666666666666, %rax # imm = 0x4021666666666666
movq %rax, 0x630(%rsp)
movups 0x10ccb(%rip), %xmm0    # 0x12028
movaps %xmm0, 0x620(%rsp)
leaq 0x620(%rsp), %rax
movq %rax, 0x640(%rsp)
movq $0x3, 0x648(%rsp)
leaq 0x61f(%rsp), %rdi
movq %rdi, 0x140(%rsp)
callq 0x2340
movq 0x140(%rsp), %rcx
movq 0x640(%rsp), %rsi
movq 0x648(%rsp), %rdx
leaq 0x650(%rsp), %rdi
callq 0x2350
jmp 0x13bd
leaq 0x61f(%rsp), %rdi
callq 0x23e0
movabsq $0x4024000000000000, %rax # imm = 0x4024000000000000
movq %rax, 0x5e0(%rsp)
movups 0x10c6d(%rip), %xmm0    # 0x12050
movaps %xmm0, 0x5d0(%rsp)
movups 0x10c4e(%rip), %xmm0    # 0x12040
movaps %xmm0, 0x5c0(%rsp)
leaq 0x5c0(%rsp), %rax
movq %rax, 0x5f0(%rsp)
movq $0x5, 0x5f8(%rsp)
leaq 0x5bf(%rsp), %rdi
movq %rdi, 0x138(%rsp)
callq 0x2340
movq 0x138(%rsp), %rcx
movq 0x5f0(%rsp), %rsi
movq 0x5f8(%rsp), %rdx
leaq 0x600(%rsp), %rdi
callq 0x2350
jmp 0x1452
leaq 0x5bf(%rsp), %rdi
callq 0x23e0
movabsq $0x4008000000000000, %rax # imm = 0x4008000000000000
movq %rax, 0x580(%rsp)
movups 0x10bf0(%rip), %xmm0    # 0x12068
movaps %xmm0, 0x570(%rsp)
leaq 0x570(%rsp), %rax
movq %rax, 0x590(%rsp)
movq $0x3, 0x598(%rsp)
leaq 0x56f(%rsp), %rdi
movq %rdi, 0x130(%rsp)
callq 0x2340
movq 0x130(%rsp), %rcx
movq 0x590(%rsp), %rsi
movq 0x598(%rsp), %rdx
leaq 0x5a0(%rsp), %rdi
callq 0x2350
jmp 0x14d8
leaq 0x56f(%rsp), %rdi
callq 0x23e0
movabsq $0x40314ccccccccccd, %rax # imm = 0x40314CCCCCCCCCCD
movq %rax, 0x530(%rsp)
movups 0x10b92(%rip), %xmm0    # 0x12090
movaps %xmm0, 0x520(%rsp)
movups 0x10b73(%rip), %xmm0    # 0x12080
movaps %xmm0, 0x510(%rsp)
leaq 0x510(%rsp), %rax
movq %rax, 0x540(%rsp)
movq $0x5, 0x548(%rsp)
leaq 0x50f(%rsp), %rdi
movq %rdi, 0x128(%rsp)
callq 0x2340
movq 0x128(%rsp), %rcx
movq 0x540(%rsp), %rsi
movq 0x548(%rsp), %rdx
leaq 0x550(%rsp), %rdi
callq 0x2350
jmp 0x156d
leaq 0x50f(%rsp), %rdi
callq 0x23e0
leaq 0x498(%rsp), %rdi
movq %rdi, 0x490(%rsp)
leaq 0x600(%rsp), %rsi
callq 0x23f0
jmp 0x1599
leaq 0x4b0(%rsp), %rdi
movq %rdi, 0x490(%rsp)
leaq 0x5a0(%rsp), %rsi
callq 0x23f0
jmp 0x15b8
leaq 0x4c8(%rsp), %rdi
movq %rdi, 0x490(%rsp)
leaq 0x550(%rsp), %rsi
callq 0x23f0
jmp 0x15d7
leaq 0x498(%rsp), %rax
movq %rax, 0x4e0(%rsp)
movq $0x3, 0x4e8(%rsp)
leaq 0x48f(%rsp), %rdi
movq %rdi, 0x120(%rsp)
callq 0x2550
movq 0x120(%rsp), %rcx
movq 0x4e0(%rsp), %rsi
movq 0x4e8(%rsp), %rdx
leaq 0x4f0(%rsp), %rdi
callq 0x2560
jmp 0x162f
leaq 0x48f(%rsp), %rdi
callq 0x25f0
leaq 0x498(%rsp), %rax
movq %rax, 0x110(%rsp)
addq $0x48, %rax
movq %rax, 0x118(%rsp)
movq 0x118(%rsp), %rdi
addq $-0x18, %rdi
movq %rdi, 0x108(%rsp)
callq 0x24f0
movq 0x110(%rsp), %rcx
movq 0x108(%rsp), %rax
cmpq %rcx, %rax
movq %rax, 0x118(%rsp)
jne 0x1658
leaq 0x450(%rsp), %rdi
leaq 0x4f0(%rsp), %rsi
callq 0x2600
jmp 0x16a5
movb $0x1, 0x366(%rsp)
leaq 0x3e0(%rsp), %rax
movq %rax, 0xf8(%rsp)
movq %rax, 0x3d8(%rsp)
movq $0x0, 0x3b8(%rsp)
movq $0x1, 0x3c0(%rsp)
leaq 0x3b8(%rsp), %rax
movq %rax, 0x3c8(%rsp)
movq $0x2, 0x3d0(%rsp)
leaq 0x3b7(%rsp), %rdi
movq %rdi, 0x100(%rsp)
callq 0x2720
movq 0xf8(%rsp), %rdi
movq 0x100(%rsp), %rcx
movq 0x3c8(%rsp), %rsi
movq 0x3d0(%rsp), %rdx
callq 0x2730
jmp 0x1735
leaq 0x3f8(%rsp), %rax
movq %rax, 0xe8(%rsp)
movq %rax, 0x3d8(%rsp)
movq $0x0, 0x390(%rsp)
movq $0x2, 0x398(%rsp)
leaq 0x390(%rsp), %rax
movq %rax, 0x3a0(%rsp)
movq $0x2, 0x3a8(%rsp)
leaq 0x38f(%rsp), %rdi
movq %rdi, 0xf0(%rsp)
callq 0x2720
movq 0xe8(%rsp), %rdi
movq 0xf0(%rsp), %rcx
movq 0x3a0(%rsp), %rsi
movq 0x3a8(%rsp), %rdx
callq 0x2730
jmp 0x17bd
leaq 0x410(%rsp), %rax
movq %rax, 0xd8(%rsp)
movq %rax, 0x3d8(%rsp)
movq $0x1, 0x368(%rsp)
movq $0x2, 0x370(%rsp)
leaq 0x368(%rsp), %rax
movq %rax, 0x378(%rsp)
movq $0x2, 0x380(%rsp)
leaq 0x367(%rsp), %rdi
movq %rdi, 0xe0(%rsp)
callq 0x2720
movq 0xd8(%rsp), %rdi
movq 0xe0(%rsp), %rcx
movq 0x378(%rsp), %rsi
movq 0x380(%rsp), %rdx
callq 0x2730
jmp 0x1845
movb $0x0, 0x366(%rsp)
leaq 0x3e0(%rsp), %rax
movq %rax, 0x428(%rsp)
movq $0x3, 0x430(%rsp)
leaq 0x365(%rsp), %rdi
movq %rdi, 0xd0(%rsp)
callq 0x27c0
movq 0xd0(%rsp), %rcx
movq 0x428(%rsp), %rsi
movq 0x430(%rsp), %rdx
leaq 0x438(%rsp), %rdi
callq 0x27d0
jmp 0x18a5
leaq 0x365(%rsp), %rdi
callq 0x2860
leaq 0x3e0(%rsp), %rax
movq %rax, 0xc0(%rsp)
addq $0x48, %rax
movq %rax, 0xc8(%rsp)
movq 0xc8(%rsp), %rdi
addq $-0x18, %rdi
movq %rdi, 0xb8(%rsp)
callq 0x2870
movq 0xc0(%rsp), %rcx
movq 0xb8(%rsp), %rax
cmpq %rcx, %rax
movq %rax, 0xc8(%rsp)
jne 0x18ce
leaq 0x367(%rsp), %rdi
callq 0x28d0
leaq 0x38f(%rsp), %rdi
callq 0x28d0
leaq 0x3b7(%rsp), %rdi
callq 0x28d0
leaq 0x340(%rsp), %rdi
leaq 0x4f0(%rsp), %rsi
leaq 0x438(%rsp), %rdx
callq 0x28e0
jmp 0x194a
leaq 0x2f0(%rsp), %rdi
leaq 0x450(%rsp), %rsi
callq 0x2b30
jmp 0x1961
leaq 0x2f0(%rsp), %rdi
leaq 0x6a8(%rsp), %rsi
callq 0x2bf0
movq %rax, 0xb0(%rsp)
jmp 0x1980
movq 0xb0(%rsp), %rsi
leaq 0x6c0(%rsp), %rdi
callq 0x2e20
jmp 0x1997
movq 0x1863a(%rip), %rdi     # 0x19fd8
leaq 0x10703(%rip), %rsi     # 0x120a8
callq 0x10b0
movq %rax, 0xa8(%rsp)
jmp 0x19b4
movq 0xa8(%rsp), %rdi
movq 0x18605(%rip), %rsi     # 0x19fc8
callq 0x10e0
jmp 0x19ca
leaq 0x6c0(%rsp), %rax
movq %rax, 0x2e8(%rsp)
movq 0x2e8(%rsp), %rdi
callq 0x30e0
movq %rax, 0x2e0(%rsp)
movq 0x2e8(%rsp), %rdi
callq 0x3110
movq %rax, 0x2d8(%rsp)
leaq 0x2e0(%rsp), %rdi
leaq 0x2d8(%rsp), %rsi
callq 0x3140
testb $0x1, %al
jne 0x1a22
jmp 0x1da2
leaq 0x2e0(%rsp), %rdi
callq 0x3180
movq %rax, 0x2d0(%rsp)
movq 0x2d0(%rsp), %rsi
movq 0x18592(%rip), %rdi     # 0x19fd8
callq 0x3190
movq %rax, 0xa0(%rsp)
jmp 0x1a55
movq 0xa0(%rsp), %rdi
movq 0x18564(%rip), %rsi     # 0x19fc8
callq 0x10e0
jmp 0x1a6b
jmp 0x1a6d
leaq 0x2e0(%rsp), %rdi
callq 0x3200
jmp 0x1a04
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x670(%rsp)
movl %eax, 0x66c(%rsp)
leaq 0x67f(%rsp), %rdi
callq 0x23e0
jmp 0x2307
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x670(%rsp)
movl %eax, 0x66c(%rsp)
leaq 0x61f(%rsp), %rdi
callq 0x23e0
jmp 0x22fa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x670(%rsp)
movl %eax, 0x66c(%rsp)
leaq 0x5bf(%rsp), %rdi
callq 0x23e0
jmp 0x22ed
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x670(%rsp)
movl %eax, 0x66c(%rsp)
leaq 0x56f(%rsp), %rdi
callq 0x23e0
jmp 0x22e0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x670(%rsp)
movl %eax, 0x66c(%rsp)
leaq 0x50f(%rsp), %rdi
callq 0x23e0
jmp 0x22d3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x670(%rsp)
movl %eax, 0x66c(%rsp)
movq 0x490(%rsp), %rax
leaq 0x498(%rsp), %rcx
cmpq %rax, %rcx
movq %rax, 0x98(%rsp)
je 0x1ba1
movq 0x98(%rsp), %rdi
addq $-0x18, %rdi
movq %rdi, 0x90(%rsp)
callq 0x24f0
movq 0x90(%rsp), %rax
leaq 0x498(%rsp), %rcx
cmpq %rcx, %rax
movq %rax, 0x98(%rsp)
jne 0x1b6b
jmp 0x22c6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x670(%rsp)
movl %eax, 0x66c(%rsp)
leaq 0x48f(%rsp), %rdi
callq 0x25f0
leaq 0x498(%rsp), %rax
movq %rax, 0x80(%rsp)
addq $0x48, %rax
movq %rax, 0x88(%rsp)
movq 0x88(%rsp), %rdi
addq $-0x18, %rdi
movq %rdi, 0x78(%rsp)
callq 0x24f0
movq 0x80(%rsp), %rcx
movq 0x78(%rsp), %rax
cmpq %rcx, %rax
movq %rax, 0x88(%rsp)
jne 0x1be3
jmp 0x22c6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x670(%rsp)
movl %eax, 0x66c(%rsp)
jmp 0x22b9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x670(%rsp)
movl %eax, 0x66c(%rsp)
jmp 0x1cf3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x670(%rsp)
movl %eax, 0x66c(%rsp)
jmp 0x1ce6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x670(%rsp)
movl %eax, 0x66c(%rsp)
jmp 0x1cd9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x670(%rsp)
movl %eax, 0x66c(%rsp)
leaq 0x365(%rsp), %rdi
callq 0x2860
leaq 0x3e0(%rsp), %rax
movq %rax, 0x68(%rsp)
addq $0x48, %rax
movq %rax, 0x70(%rsp)
movq 0x70(%rsp), %rdi
addq $-0x18, %rdi
movq %rdi, 0x60(%rsp)
callq 0x2870
movq 0x68(%rsp), %rcx
movq 0x60(%rsp), %rax
cmpq %rcx, %rax
movq %rax, 0x70(%rsp)
jne 0x1cb0
jmp 0x1cd9
leaq 0x367(%rsp), %rdi
callq 0x28d0
leaq 0x38f(%rsp), %rdi
callq 0x28d0
leaq 0x3b7(%rsp), %rdi
callq 0x28d0
testb $0x1, 0x366(%rsp)
jne 0x1d0c
jmp 0x1d52
movq 0x3d8(%rsp), %rax
leaq 0x3e0(%rsp), %rcx
cmpq %rax, %rcx
movq %rax, 0x58(%rsp)
je 0x1d50
movq 0x58(%rsp), %rdi
addq $-0x18, %rdi
movq %rdi, 0x50(%rsp)
callq 0x2870
movq 0x50(%rsp), %rax
leaq 0x3e0(%rsp), %rcx
cmpq %rcx, %rax
movq %rax, 0x58(%rsp)
jne 0x1d26
jmp 0x1d52
jmp 0x22ac
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x670(%rsp)
movl %eax, 0x66c(%rsp)
jmp 0x229f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x670(%rsp)
movl %eax, 0x66c(%rsp)
jmp 0x2292
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x670(%rsp)
movl %eax, 0x66c(%rsp)
jmp 0x2285
movq 0x1822f(%rip), %rdi     # 0x19fd8
leaq 0x10329(%rip), %rsi     # 0x120d9
callq 0x10b0
jmp 0x1db7
leaq 0x280(%rsp), %rdi
leaq 0x450(%rsp), %rsi
callq 0x3220
jmp 0x1dce
leaq 0x280(%rsp), %rdi
leaq 0x6a8(%rsp), %rsi
leaq 0x650(%rsp), %rdx
callq 0x32a0
movq %rax, 0x48(%rsp)
jmp 0x1df2
movq 0x48(%rsp), %rsi
leaq 0x6c0(%rsp), %rdi
callq 0x2e20
jmp 0x1e06
movq 0x181cb(%rip), %rdi     # 0x19fd8
leaq 0x102c8(%rip), %rsi     # 0x120dc
callq 0x10b0
movq %rax, 0x40(%rsp)
jmp 0x1e20
movq 0x40(%rsp), %rdi
movq 0x1819c(%rip), %rsi     # 0x19fc8
callq 0x10e0
jmp 0x1e33
leaq 0x6c0(%rsp), %rax
movq %rax, 0x278(%rsp)
movq 0x278(%rsp), %rdi
callq 0x30e0
movq %rax, 0x270(%rsp)
movq 0x278(%rsp), %rdi
callq 0x3110
movq %rax, 0x268(%rsp)
leaq 0x270(%rsp), %rdi
leaq 0x268(%rsp), %rsi
callq 0x3140
testb $0x1, %al
jne 0x1e88
jmp 0x1ef5
leaq 0x270(%rsp), %rdi
callq 0x3180
movq %rax, 0x260(%rsp)
movq 0x260(%rsp), %rsi
movq 0x1812c(%rip), %rdi     # 0x19fd8
callq 0x3190
movq %rax, 0x38(%rsp)
jmp 0x1eb8
movq 0x38(%rsp), %rdi
movq 0x18104(%rip), %rsi     # 0x19fc8
callq 0x10e0
jmp 0x1ecb
jmp 0x1ecd
leaq 0x270(%rsp), %rdi
callq 0x3200
jmp 0x1e6d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x670(%rsp)
movl %eax, 0x66c(%rsp)
jmp 0x2278
movq 0x180dc(%rip), %rdi     # 0x19fd8
leaq 0x101d6(%rip), %rsi     # 0x120d9
callq 0x10b0
jmp 0x1f0a
leaq 0x1f8(%rsp), %rdi
leaq 0x340(%rsp), %rsi
leaq 0x438(%rsp), %rdx
callq 0x3310
jmp 0x1f29
leaq 0x1f8(%rsp), %rdi
leaq 0x6a8(%rsp), %rsi
callq 0x3500
movq %rax, 0x30(%rsp)
jmp 0x1f45
movq 0x30(%rsp), %rsi
leaq 0x6c0(%rsp), %rdi
callq 0x2e20
jmp 0x1f59
movq 0x18078(%rip), %rdi     # 0x19fd8
leaq 0x101a6(%rip), %rsi     # 0x1210d
callq 0x10b0
movq %rax, 0x28(%rsp)
jmp 0x1f73
movq 0x28(%rsp), %rdi
movq 0x18049(%rip), %rsi     # 0x19fc8
callq 0x10e0
jmp 0x1f86
leaq 0x6c0(%rsp), %rax
movq %rax, 0x1f0(%rsp)
movq 0x1f0(%rsp), %rdi
callq 0x30e0
movq %rax, 0x1e8(%rsp)
movq 0x1f0(%rsp), %rdi
callq 0x3110
movq %rax, 0x1e0(%rsp)
leaq 0x1e8(%rsp), %rdi
leaq 0x1e0(%rsp), %rsi
callq 0x3140
testb $0x1, %al
jne 0x1fdb
jmp 0x2048
leaq 0x1e8(%rsp), %rdi
callq 0x3180
movq %rax, 0x1d8(%rsp)
movq 0x1d8(%rsp), %rsi
movq 0x17fd9(%rip), %rdi     # 0x19fd8
callq 0x3190
movq %rax, 0x20(%rsp)
jmp 0x200b
movq 0x20(%rsp), %rdi
movq 0x17fb1(%rip), %rsi     # 0x19fc8
callq 0x10e0
jmp 0x201e
jmp 0x2020
leaq 0x1e8(%rsp), %rdi
callq 0x3200
jmp 0x1fc0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x670(%rsp)
movl %eax, 0x66c(%rsp)
jmp 0x226b
leaq 0x170(%rsp), %rdi
leaq 0x340(%rsp), %rsi
leaq 0x438(%rsp), %rdx
callq 0x3640
jmp 0x2067
leaq 0x170(%rsp), %rdi
leaq 0x6a8(%rsp), %rsi
leaq 0x650(%rsp), %rdx
callq 0x3800
movq %rax, 0x18(%rsp)
jmp 0x208b
movq 0x18(%rsp), %rsi
leaq 0x6c0(%rsp), %rdi
callq 0x2e20
jmp 0x209f
movq 0x17f32(%rip), %rdi     # 0x19fd8
leaq 0x10091(%rip), %rsi     # 0x1213e
callq 0x10b0
movq %rax, 0x10(%rsp)
jmp 0x20b9
movq 0x10(%rsp), %rdi
movq 0x17f03(%rip), %rsi     # 0x19fc8
callq 0x10e0
jmp 0x20cc
leaq 0x6c0(%rsp), %rax
movq %rax, 0x168(%rsp)
movq 0x168(%rsp), %rdi
callq 0x30e0
movq %rax, 0x160(%rsp)
movq 0x168(%rsp), %rdi
callq 0x3110
movq %rax, 0x158(%rsp)
leaq 0x160(%rsp), %rdi
leaq 0x158(%rsp), %rsi
callq 0x3140
testb $0x1, %al
jne 0x2121
jmp 0x219b
leaq 0x160(%rsp), %rdi
callq 0x3180
movq %rax, 0x150(%rsp)
movq 0x150(%rsp), %rsi
movq 0x17e93(%rip), %rdi     # 0x19fd8
callq 0x3190
movq %rax, 0x8(%rsp)
jmp 0x2151
movq 0x8(%rsp), %rdi
movq 0x17e6b(%rip), %rsi     # 0x19fc8
callq 0x10e0
jmp 0x2164
jmp 0x2166
leaq 0x160(%rsp), %rdi
callq 0x3200
jmp 0x2106
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x670(%rsp)
movl %eax, 0x66c(%rsp)
leaq 0x170(%rsp), %rdi
callq 0x39a0
jmp 0x226b
movl $0x0, 0x6e4(%rsp)
leaq 0x170(%rsp), %rdi
callq 0x39a0
leaq 0x1f8(%rsp), %rdi
callq 0x39d0
leaq 0x280(%rsp), %rdi
callq 0x3a00
leaq 0x2f0(%rsp), %rdi
callq 0x3a10
leaq 0x340(%rsp), %rdi
callq 0x3a40
leaq 0x438(%rsp), %rdi
callq 0x3a50
leaq 0x450(%rsp), %rdi
callq 0x3ab0
leaq 0x4f0(%rsp), %rdi
callq 0x3ae0
leaq 0x550(%rsp), %rdi
callq 0x24f0
leaq 0x5a0(%rsp), %rdi
callq 0x24f0
leaq 0x600(%rsp), %rdi
callq 0x24f0
leaq 0x650(%rsp), %rdi
callq 0x24f0
leaq 0x6a8(%rsp), %rdi
callq 0x24f0
leaq 0x6c0(%rsp), %rdi
callq 0x3b40
movl 0x6e4(%rsp), %eax
addq $0x6e8, %rsp            # imm = 0x6E8
retq
leaq 0x1f8(%rsp), %rdi
callq 0x39d0
leaq 0x280(%rsp), %rdi
callq 0x3a00
leaq 0x2f0(%rsp), %rdi
callq 0x3a10
leaq 0x340(%rsp), %rdi
callq 0x3a40
leaq 0x438(%rsp), %rdi
callq 0x3a50
leaq 0x450(%rsp), %rdi
callq 0x3ab0
leaq 0x4f0(%rsp), %rdi
callq 0x3ae0
leaq 0x550(%rsp), %rdi
callq 0x24f0
leaq 0x5a0(%rsp), %rdi
callq 0x24f0
leaq 0x600(%rsp), %rdi
callq 0x24f0
leaq 0x650(%rsp), %rdi
callq 0x24f0
leaq 0x6a8(%rsp), %rdi
callq 0x24f0
leaq 0x6c0(%rsp), %rdi
callq 0x3b40
movq 0x670(%rsp), %rdi
callq 0x1130
nopw %cs:(%rax,%rax)
nopl (%rax,%rax)