// File: Sooryakiran[P]dotV/src/verilog.cpp
// Function: CARRY_SAVE_ADDER::CARRY_SAVE_ADDER(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>, int)
CARRY_SAVE_ADDER::CARRY_SAVE_ADDER(string name, vector<wire> input_wires, vector<wire> output_wires, int n_bits){
    /*------------------------------------------------------------------------------------------
    A Carry Save Adder is constructed by stacking Full Adders together.
    ------------------------------------------------------------------------------------------*/
    this->name = name;
    this->inputs = input_wires;
    this->outputs = output_wires;
    this->n_bits = n_bits;

    this->declare("A", CHIP_INPUTS);
    this->declare("B", CHIP_INPUTS);
    this->declare("Cin", CHIP_INPUTS);
    this->declare("SUM", CHIP_OUTPUTS);
    this->declare("Cout", CHIP_OUTPUTS);
    this->declare("Overflow", CHIP_OUTPUTS, 1);

    this->verilog("assign Cout[0] = 0;");
    for(int n=0; n<n_bits; n++){
        string slice = "[" + to_string(n) + "]";
        if(n + 1 != n_bits){
            FULL_ADDER curr_full_adder("CSA_FA_" + to_string(n),
                                    {"A" + slice, "B" + slice, "Cin" + slice},
                                    {"SUM" + slice, "Cout[" + to_string(n+1) + "]"});
            this->add_submodule(curr_full_adder);
        }
        else{
            FULL_ADDER curr_full_adder("CSA_FA_" + to_string(n),
                                    {"A" + slice, "B" + slice, "Cin" + slice},
                                    {"SUM" + slice, "Overflow"});
            
            this->add_submodule(curr_full_adder);
        }
    }

    this->definition = this->auto_gen("module CARRY_SAVE_ADDER_" + to_string(n_bits) + "_BIT");
    this->generate = "CARRY_SAVE_ADDER_" + to_string(n_bits) + "_BIT " + this->name + "(" + this->inputs.at(0) + ", " + this->inputs.at(1) + ", " + this->inputs.at(2) + ", " + this->outputs.at(0) + ", " + this->outputs.at(1) + ", " + this->outputs.at(2) + ");";

}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xf60, %rsp            # imm = 0xF60
movq %rsi, -0xd98(%rbp)
movq %rdx, -0xdb0(%rbp)
movq %rcx, -0xda8(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movl %r8d, -0x24(%rbp)
movq -0x8(%rbp), %rdi
movq %rdi, -0xda0(%rbp)
callq 0x1c4e0
movq -0xda0(%rbp), %rdi
movq -0xd98(%rbp), %rsi
callq 0x1b0b0
jmp 0x320f9
movq -0xdb0(%rbp), %rsi
movq -0xda0(%rbp), %rdi
subq $-0x80, %rdi
callq 0x1c9a0
jmp 0x32112
movq -0xda8(%rbp), %rsi
movq -0xda0(%rbp), %rdi
addq $0x98, %rdi
callq 0x1c9a0
jmp 0x3212e
movq -0xda0(%rbp), %rax
movl -0x24(%rbp), %ecx
movl %ecx, 0x190(%rax)
leaq -0x59(%rbp), %rdi
movq %rdi, -0xdb8(%rbp)
callq 0x1da80
movq -0xdb8(%rbp), %rdx
leaq 0x15576(%rip), %rsi     # 0x476d2
leaq -0x58(%rbp), %rdi
callq 0x1d8a0
jmp 0x32167
movq -0xda0(%rbp), %rdi
leaq -0x58(%rbp), %rsi
xorl %edx, %edx
callq 0x1b740
jmp 0x3217b
leaq -0x58(%rbp), %rdi
callq 0x1bea0
leaq -0x59(%rbp), %rdi
callq 0x1ca40
leaq -0x81(%rbp), %rdi
movq %rdi, -0xdc0(%rbp)
callq 0x1da80
movq -0xdc0(%rbp), %rdx
leaq 0x152ea(%rip), %rsi     # 0x47498
leaq -0x80(%rbp), %rdi
callq 0x1d8a0
jmp 0x321b9
movq -0xda0(%rbp), %rdi
leaq -0x80(%rbp), %rsi
xorl %edx, %edx
callq 0x1b740
jmp 0x321cd
leaq -0x80(%rbp), %rdi
callq 0x1bea0
leaq -0x81(%rbp), %rdi
callq 0x1ca40
leaq -0xa9(%rbp), %rdi
movq %rdi, -0xdc8(%rbp)
callq 0x1da80
movq -0xdc8(%rbp), %rdx
leaq 0x15297(%rip), %rsi     # 0x4749a
leaq -0xa8(%rbp), %rdi
callq 0x1d8a0
jmp 0x32211
movq -0xda0(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
xorl %edx, %edx
callq 0x1b740
jmp 0x32228
leaq -0xa8(%rbp), %rdi
callq 0x1bea0
leaq -0xa9(%rbp), %rdi
callq 0x1ca40
leaq -0xd1(%rbp), %rdi
movq %rdi, -0xdd0(%rbp)
callq 0x1da80
movq -0xdd0(%rbp), %rdx
leaq 0x15560(%rip), %rsi     # 0x477c1
leaq -0xd0(%rbp), %rdi
callq 0x1d8a0
jmp 0x3226f
movq -0xda0(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
movl $0x1, %edx
callq 0x1b740
jmp 0x32289
leaq -0xd0(%rbp), %rdi
callq 0x1bea0
leaq -0xd1(%rbp), %rdi
callq 0x1ca40
leaq -0xf9(%rbp), %rdi
movq %rdi, -0xdd8(%rbp)
callq 0x1da80
movq -0xdd8(%rbp), %rdx
leaq 0x151de(%rip), %rsi     # 0x474a0
leaq -0xf8(%rbp), %rdi
callq 0x1d8a0
jmp 0x322d0
movq -0xda0(%rbp), %rdi
leaq -0xf8(%rbp), %rsi
movl $0x1, %edx
callq 0x1b740
jmp 0x322ea
leaq -0xf8(%rbp), %rdi
callq 0x1bea0
leaq -0xf9(%rbp), %rdi
callq 0x1ca40
leaq -0x121(%rbp), %rdi
movq %rdi, -0xde0(%rbp)
callq 0x1da80
movq -0xde0(%rbp), %rdx
leaq 0x154a2(%rip), %rsi     # 0x477c5
leaq -0x120(%rbp), %rdi
callq 0x1d8a0
jmp 0x32331
movq -0xda0(%rbp), %rdi
leaq -0x120(%rbp), %rsi
movl $0x1, %ecx
movl %ecx, %edx
callq 0x1df40
jmp 0x3234d
leaq -0x120(%rbp), %rdi
callq 0x1bea0
leaq -0x121(%rbp), %rdi
callq 0x1ca40
leaq -0x149(%rbp), %rdi
movq %rdi, -0xde8(%rbp)
callq 0x1da80
movq -0xde8(%rbp), %rdx
leaq 0x15448(%rip), %rsi     # 0x477ce
leaq -0x148(%rbp), %rdi
callq 0x1d8a0
jmp 0x32394
movq -0xda0(%rbp), %rdi
leaq -0x148(%rbp), %rsi
callq 0x1c260
jmp 0x323a9
leaq -0x148(%rbp), %rdi
callq 0x1bea0
leaq -0x149(%rbp), %rdi
callq 0x1ca40
movl $0x0, -0x150(%rbp)
movl -0x150(%rbp), %eax
cmpl -0x24(%rbp), %eax
jge 0x330fe
movl -0x150(%rbp), %esi
leaq -0x1b0(%rbp), %rdi
callq 0x1ced0
jmp 0x323ee
leaq 0x14d9e(%rip), %rsi     # 0x47193
leaq -0x190(%rbp), %rdi
leaq -0x1b0(%rbp), %rdx
callq 0x1d820
jmp 0x3240a
leaq 0x14df2(%rip), %rdx     # 0x47203
leaq -0x170(%rbp), %rdi
leaq -0x190(%rbp), %rsi
callq 0x1b430
jmp 0x32426
leaq -0x190(%rbp), %rdi
callq 0x1bea0
leaq -0x1b0(%rbp), %rdi
callq 0x1bea0
movl -0x150(%rbp), %eax
addl $0x1, %eax
cmpl -0x24(%rbp), %eax
je 0x32b9e
movl -0x150(%rbp), %esi
leaq -0x388(%rbp), %rdi
callq 0x1ced0
jmp 0x32464
leaq 0x15377(%rip), %rsi     # 0x477e2
leaq -0x368(%rbp), %rdi
leaq -0x388(%rbp), %rdx
callq 0x1d820
jmp 0x32480
leaq -0x410(%rbp), %rdi
movq %rdi, -0x418(%rbp)
leaq 0x1523d(%rip), %rsi     # 0x476d2
leaq -0x170(%rbp), %rdx
callq 0x1c5a0
jmp 0x324a3
leaq -0x3f0(%rbp), %rdi
movq %rdi, -0x418(%rbp)
leaq 0x14fe0(%rip), %rsi     # 0x47498
leaq -0x170(%rbp), %rdx
callq 0x1c5a0
jmp 0x324c6
leaq -0x3d0(%rbp), %rdi
movq %rdi, -0x418(%rbp)
leaq 0x14fbf(%rip), %rsi     # 0x4749a
leaq -0x170(%rbp), %rdx
callq 0x1c5a0
jmp 0x324e9
leaq -0x410(%rbp), %rax
movq %rax, -0x3b0(%rbp)
movq $0x3, -0x3a8(%rbp)
leaq -0x419(%rbp), %rdi
movq %rdi, -0xdf0(%rbp)
callq 0x1b490
movq -0xdf0(%rbp), %rcx
movq -0x3b0(%rbp), %rsi
movq -0x3a8(%rbp), %rdx
leaq -0x3a0(%rbp), %rdi
callq 0x1b4a0
jmp 0x32538
movb $0x1, -0x4d1(%rbp)
leaq -0x488(%rbp), %rdi
movq %rdi, -0x490(%rbp)
leaq 0x1526d(%rip), %rsi     # 0x477c1
leaq -0x170(%rbp), %rdx
callq 0x1c5a0
jmp 0x32562
leaq -0x468(%rbp), %rax
movq %rax, -0xdf8(%rbp)
movq %rax, -0x490(%rbp)
movl -0x150(%rbp), %esi
incl %esi
leaq -0x4d0(%rbp), %rdi
callq 0x1ced0
jmp 0x3258d
leaq 0x15256(%rip), %rsi     # 0x477ea
leaq -0x4b0(%rbp), %rdi
leaq -0x4d0(%rbp), %rdx
callq 0x1d820
jmp 0x325a9
movq -0xdf8(%rbp), %rdi
leaq 0x14c4c(%rip), %rdx     # 0x47203
leaq -0x4b0(%rbp), %rsi
callq 0x1b430
jmp 0x325c5
movb $0x0, -0x4d1(%rbp)
leaq -0x488(%rbp), %rax
movq %rax, -0x448(%rbp)
movq $0x2, -0x440(%rbp)
leaq -0x4d2(%rbp), %rdi
movq %rdi, -0xe00(%rbp)
callq 0x1b490
movq -0xe00(%rbp), %rcx
movq -0x448(%rbp), %rsi
movq -0x440(%rbp), %rdx
leaq -0x438(%rbp), %rdi
callq 0x1b4a0
jmp 0x3261b
leaq -0x348(%rbp), %rdi
leaq -0x368(%rbp), %rsi
leaq -0x3a0(%rbp), %rdx
leaq -0x438(%rbp), %rcx
callq 0x1bdf0
jmp 0x3263e
leaq -0x438(%rbp), %rdi
callq 0x1c100
leaq -0x4d2(%rbp), %rdi
callq 0x1b420
leaq -0x488(%rbp), %rax
movq %rax, -0xe10(%rbp)
addq $0x40, %rax
movq %rax, -0xe08(%rbp)
movq -0xe08(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0xe18(%rbp)
callq 0x1bea0
movq -0xe10(%rbp), %rcx
movq -0xe18(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0xe08(%rbp)
jne 0x3266f
leaq -0x4b0(%rbp), %rdi
callq 0x1bea0
leaq -0x4d0(%rbp), %rdi
callq 0x1bea0
leaq -0x3a0(%rbp), %rdi
callq 0x1c100
leaq -0x419(%rbp), %rdi
callq 0x1b420
leaq -0x410(%rbp), %rax
movq %rax, -0xe28(%rbp)
addq $0x60, %rax
movq %rax, -0xe20(%rbp)
movq -0xe20(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0xe30(%rbp)
callq 0x1bea0
movq -0xe28(%rbp), %rcx
movq -0xe30(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0xe20(%rbp)
jne 0x326e9
leaq -0x368(%rbp), %rdi
callq 0x1bea0
leaq -0x388(%rbp), %rdi
callq 0x1bea0
leaq -0x670(%rbp), %rdi
leaq -0x348(%rbp), %rsi
callq 0x1cb00
jmp 0x32747
movq -0xda0(%rbp), %rdi
leaq -0x670(%rbp), %rsi
callq 0x1c4c0
jmp 0x3275c
leaq -0x670(%rbp), %rdi
callq 0x1b6d0
leaq -0x348(%rbp), %rdi
callq 0x1d100
jmp 0x330cd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x33739
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x327ad
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x1bea0
leaq -0x59(%rbp), %rdi
callq 0x1ca40
jmp 0x33739
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x327de
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x80(%rbp), %rdi
callq 0x1bea0
leaq -0x81(%rbp), %rdi
callq 0x1ca40
jmp 0x33739
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x32815
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0xa8(%rbp), %rdi
callq 0x1bea0
leaq -0xa9(%rbp), %rdi
callq 0x1ca40
jmp 0x33739
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x3284c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0xd0(%rbp), %rdi
callq 0x1bea0
leaq -0xd1(%rbp), %rdi
callq 0x1ca40
jmp 0x33739
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x32883
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0xf8(%rbp), %rdi
callq 0x1bea0
leaq -0xf9(%rbp), %rdi
callq 0x1ca40
jmp 0x33739
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x328ba
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x120(%rbp), %rdi
callq 0x1bea0
leaq -0x121(%rbp), %rdi
callq 0x1ca40
jmp 0x33739
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x328f1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x148(%rbp), %rdi
callq 0x1bea0
leaq -0x149(%rbp), %rdi
callq 0x1ca40
jmp 0x33739
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x32928
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x190(%rbp), %rdi
callq 0x1bea0
leaq -0x1b0(%rbp), %rdi
callq 0x1bea0
jmp 0x33739
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x330ed
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x32b56
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
movq -0x418(%rbp), %rax
leaq -0x410(%rbp), %rcx
cmpq %rax, %rcx
movq %rax, -0xe38(%rbp)
je 0x329b2
movq -0xe38(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0xe40(%rbp)
callq 0x1bea0
movq -0xe40(%rbp), %rax
leaq -0x410(%rbp), %rcx
cmpq %rcx, %rax
movq %rax, -0xe38(%rbp)
jne 0x32981
jmp 0x32b4a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x32af2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x32a8e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x32a82
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x32a76
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x32a1e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x438(%rbp), %rdi
callq 0x1c100
leaq -0x4d2(%rbp), %rdi
callq 0x1b420
leaq -0x488(%rbp), %rax
movq %rax, -0xe50(%rbp)
addq $0x40, %rax
movq %rax, -0xe48(%rbp)
movq -0xe48(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0xe58(%rbp)
callq 0x1bea0
movq -0xe50(%rbp), %rcx
movq -0xe58(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0xe48(%rbp)
jne 0x32a43
jmp 0x32a76
leaq -0x4b0(%rbp), %rdi
callq 0x1bea0
leaq -0x4d0(%rbp), %rdi
callq 0x1bea0
testb $0x1, -0x4d1(%rbp)
jne 0x32a99
jmp 0x32ae6
movq -0x490(%rbp), %rax
leaq -0x488(%rbp), %rcx
cmpq %rax, %rcx
movq %rax, -0xe60(%rbp)
je 0x32ae4
movq -0xe60(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0xe68(%rbp)
callq 0x1bea0
movq -0xe68(%rbp), %rax
leaq -0x488(%rbp), %rcx
cmpq %rcx, %rax
movq %rax, -0xe60(%rbp)
jne 0x32ab3
jmp 0x32ae6
leaq -0x3a0(%rbp), %rdi
callq 0x1c100
leaq -0x419(%rbp), %rdi
callq 0x1b420
leaq -0x410(%rbp), %rax
movq %rax, -0xe78(%rbp)
addq $0x60, %rax
movq %rax, -0xe70(%rbp)
movq -0xe70(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0xe80(%rbp)
callq 0x1bea0
movq -0xe78(%rbp), %rcx
movq -0xe80(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0xe70(%rbp)
jne 0x32b17
jmp 0x32b4a
leaq -0x368(%rbp), %rdi
callq 0x1bea0
leaq -0x388(%rbp), %rdi
callq 0x1bea0
jmp 0x330ed
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x32b8d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x670(%rbp), %rdi
callq 0x1b6d0
leaq -0x348(%rbp), %rdi
callq 0x1d100
jmp 0x330ed
movl -0x150(%rbp), %esi
leaq -0x848(%rbp), %rdi
callq 0x1ced0
jmp 0x32bb2
leaq 0x14c29(%rip), %rsi     # 0x477e2
leaq -0x828(%rbp), %rdi
leaq -0x848(%rbp), %rdx
callq 0x1d820
jmp 0x32bce
leaq -0x8d0(%rbp), %rdi
movq %rdi, -0x8d8(%rbp)
leaq 0x14aef(%rip), %rsi     # 0x476d2
leaq -0x170(%rbp), %rdx
callq 0x1c5a0
jmp 0x32bf1
leaq -0x8b0(%rbp), %rdi
movq %rdi, -0x8d8(%rbp)
leaq 0x14892(%rip), %rsi     # 0x47498
leaq -0x170(%rbp), %rdx
callq 0x1c5a0
jmp 0x32c14
leaq -0x890(%rbp), %rdi
movq %rdi, -0x8d8(%rbp)
leaq 0x14871(%rip), %rsi     # 0x4749a
leaq -0x170(%rbp), %rdx
callq 0x1c5a0
jmp 0x32c37
leaq -0x8d0(%rbp), %rax
movq %rax, -0x870(%rbp)
movq $0x3, -0x868(%rbp)
leaq -0x8d9(%rbp), %rdi
movq %rdi, -0xe88(%rbp)
callq 0x1b490
movq -0xe88(%rbp), %rcx
movq -0x870(%rbp), %rsi
movq -0x868(%rbp), %rdx
leaq -0x860(%rbp), %rdi
callq 0x1b4a0
jmp 0x32c86
movb $0x1, -0x952(%rbp)
leaq -0x948(%rbp), %rdi
movq %rdi, -0x950(%rbp)
leaq 0x14b1f(%rip), %rsi     # 0x477c1
leaq -0x170(%rbp), %rdx
callq 0x1c5a0
jmp 0x32cb0
leaq -0x928(%rbp), %rax
movq %rax, -0xe98(%rbp)
movq %rax, -0x950(%rbp)
leaq -0x951(%rbp), %rdi
movq %rdi, -0xe90(%rbp)
callq 0x1da80
movq -0xe98(%rbp), %rdi
movq -0xe90(%rbp), %rdx
leaq 0x14ad8(%rip), %rsi     # 0x477c5
callq 0x1d8a0
jmp 0x32cf4
movb $0x0, -0x952(%rbp)
leaq -0x948(%rbp), %rax
movq %rax, -0x908(%rbp)
movq $0x2, -0x900(%rbp)
leaq -0x953(%rbp), %rdi
movq %rdi, -0xea0(%rbp)
callq 0x1b490
movq -0xea0(%rbp), %rcx
movq -0x908(%rbp), %rsi
movq -0x900(%rbp), %rdx
leaq -0x8f8(%rbp), %rdi
callq 0x1b4a0
jmp 0x32d4a
leaq -0x808(%rbp), %rdi
leaq -0x828(%rbp), %rsi
leaq -0x860(%rbp), %rdx
leaq -0x8f8(%rbp), %rcx
callq 0x1bdf0
jmp 0x32d6d
leaq -0x8f8(%rbp), %rdi
callq 0x1c100
leaq -0x953(%rbp), %rdi
callq 0x1b420
leaq -0x948(%rbp), %rax
movq %rax, -0xeb0(%rbp)
addq $0x40, %rax
movq %rax, -0xea8(%rbp)
movq -0xea8(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0xeb8(%rbp)
callq 0x1bea0
movq -0xeb0(%rbp), %rcx
movq -0xeb8(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0xea8(%rbp)
jne 0x32d9e
leaq -0x951(%rbp), %rdi
callq 0x1ca40
leaq -0x860(%rbp), %rdi
callq 0x1c100
leaq -0x8d9(%rbp), %rdi
callq 0x1b420
leaq -0x8d0(%rbp), %rax
movq %rax, -0xec8(%rbp)
addq $0x60, %rax
movq %rax, -0xec0(%rbp)
movq -0xec0(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0xed0(%rbp)
callq 0x1bea0
movq -0xec8(%rbp), %rcx
movq -0xed0(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0xec0(%rbp)
jne 0x32e0c
leaq -0x828(%rbp), %rdi
callq 0x1bea0
leaq -0x848(%rbp), %rdi
callq 0x1bea0
leaq -0xaf0(%rbp), %rdi
leaq -0x808(%rbp), %rsi
callq 0x1cb00
jmp 0x32e6a
movq -0xda0(%rbp), %rdi
leaq -0xaf0(%rbp), %rsi
callq 0x1c4c0
jmp 0x32e7f
leaq -0xaf0(%rbp), %rdi
callq 0x1b6d0
leaq -0x808(%rbp), %rdi
callq 0x1d100
jmp 0x330cd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x3308b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
movq -0x8d8(%rbp), %rax
leaq -0x8d0(%rbp), %rcx
cmpq %rax, %rcx
movq %rax, -0xed8(%rbp)
je 0x32f04
movq -0xed8(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0xee0(%rbp)
callq 0x1bea0
movq -0xee0(%rbp), %rax
leaq -0x8d0(%rbp), %rcx
cmpq %rcx, %rax
movq %rax, -0xed8(%rbp)
jne 0x32ed3
jmp 0x3307f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x33027
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x32fc3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x32fb7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x32f5f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x8f8(%rbp), %rdi
callq 0x1c100
leaq -0x953(%rbp), %rdi
callq 0x1b420
leaq -0x948(%rbp), %rax
movq %rax, -0xef0(%rbp)
addq $0x40, %rax
movq %rax, -0xee8(%rbp)
movq -0xee8(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0xef8(%rbp)
callq 0x1bea0
movq -0xef0(%rbp), %rcx
movq -0xef8(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0xee8(%rbp)
jne 0x32f84
jmp 0x32fb7
leaq -0x951(%rbp), %rdi
callq 0x1ca40
testb $0x1, -0x952(%rbp)
jne 0x32fce
jmp 0x3301b
movq -0x950(%rbp), %rax
leaq -0x948(%rbp), %rcx
cmpq %rax, %rcx
movq %rax, -0xf00(%rbp)
je 0x33019
movq -0xf00(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0xf08(%rbp)
callq 0x1bea0
movq -0xf08(%rbp), %rax
leaq -0x948(%rbp), %rcx
cmpq %rcx, %rax
movq %rax, -0xf00(%rbp)
jne 0x32fe8
jmp 0x3301b
leaq -0x860(%rbp), %rdi
callq 0x1c100
leaq -0x8d9(%rbp), %rdi
callq 0x1b420
leaq -0x8d0(%rbp), %rax
movq %rax, -0xf18(%rbp)
addq $0x60, %rax
movq %rax, -0xf10(%rbp)
movq -0xf10(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0xf20(%rbp)
callq 0x1bea0
movq -0xf18(%rbp), %rcx
movq -0xf20(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0xf10(%rbp)
jne 0x3304c
jmp 0x3307f
leaq -0x828(%rbp), %rdi
callq 0x1bea0
leaq -0x848(%rbp), %rdi
callq 0x1bea0
jmp 0x330ed
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x330bf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0xaf0(%rbp), %rdi
callq 0x1b6d0
leaq -0x808(%rbp), %rdi
callq 0x1d100
jmp 0x330ed
leaq -0x170(%rbp), %rdi
callq 0x1bea0
movl -0x150(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x150(%rbp)
jmp 0x323cb
leaq -0x170(%rbp), %rdi
callq 0x1bea0
jmp 0x33739
movl -0x24(%rbp), %esi
leaq -0xb70(%rbp), %rdi
callq 0x1ced0
jmp 0x3310f
leaq 0x146da(%rip), %rsi     # 0x477f0
leaq -0xb50(%rbp), %rdi
leaq -0xb70(%rbp), %rdx
callq 0x1d820
jmp 0x3312b
leaq 0x14440(%rip), %rdx     # 0x47572
leaq -0xb30(%rbp), %rdi
leaq -0xb50(%rbp), %rsi
callq 0x1b430
jmp 0x33147
movq -0xda0(%rbp), %rsi
leaq -0xb10(%rbp), %rdi
leaq -0xb30(%rbp), %rdx
callq 0x1bc40
jmp 0x33163
movq -0xda0(%rbp), %rdi
addq $0x20, %rdi
leaq -0xb10(%rbp), %rsi
movq %rsi, -0xf28(%rbp)
callq 0x1cd30
movq -0xf28(%rbp), %rdi
callq 0x1bea0
leaq -0xb30(%rbp), %rdi
callq 0x1bea0
leaq -0xb50(%rbp), %rdi
callq 0x1bea0
leaq -0xb70(%rbp), %rdi
callq 0x1bea0
movl -0x24(%rbp), %esi
leaq -0xd90(%rbp), %rdi
callq 0x1ced0
jmp 0x331c2
leaq 0x1462e(%rip), %rsi     # 0x477f7
leaq -0xd70(%rbp), %rdi
leaq -0xd90(%rbp), %rdx
callq 0x1d820
jmp 0x331de
leaq 0x13fc1(%rip), %rdx     # 0x471a6
leaq -0xd50(%rbp), %rdi
leaq -0xd70(%rbp), %rsi
callq 0x1b430
jmp 0x331fa
movq -0xda0(%rbp), %rdx
leaq -0xd30(%rbp), %rdi
leaq -0xd50(%rbp), %rsi
callq 0x1d3b0
jmp 0x33216
leaq 0x13e31(%rip), %rdx     # 0x4704e
leaq -0xd10(%rbp), %rdi
leaq -0xd30(%rbp), %rsi
callq 0x1b430
jmp 0x33232
movq -0xda0(%rbp), %rdi
subq $-0x80, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x1b640
movq %rax, -0xf30(%rbp)
jmp 0x3324f
movq -0xf30(%rbp), %rdx
leaq -0xcf0(%rbp), %rdi
leaq -0xd10(%rbp), %rsi
callq 0x1d3b0
jmp 0x3326b
leaq 0x13dde(%rip), %rdx     # 0x47050
leaq -0xcd0(%rbp), %rdi
leaq -0xcf0(%rbp), %rsi
callq 0x1b430
jmp 0x33287
movq -0xda0(%rbp), %rdi
subq $-0x80, %rdi
movl $0x1, %esi
callq 0x1b640
movq %rax, -0xf38(%rbp)
jmp 0x332a5
movq -0xf38(%rbp), %rdx
leaq -0xcb0(%rbp), %rdi
leaq -0xcd0(%rbp), %rsi
callq 0x1d3b0
jmp 0x332c1
leaq 0x13d88(%rip), %rdx     # 0x47050
leaq -0xc90(%rbp), %rdi
leaq -0xcb0(%rbp), %rsi
callq 0x1b430
jmp 0x332dd
movq -0xda0(%rbp), %rdi
subq $-0x80, %rdi
movl $0x2, %esi
callq 0x1b640
movq %rax, -0xf40(%rbp)
jmp 0x332fb
movq -0xf40(%rbp), %rdx
leaq -0xc70(%rbp), %rdi
leaq -0xc90(%rbp), %rsi
callq 0x1d3b0
jmp 0x33317
leaq 0x13d32(%rip), %rdx     # 0x47050
leaq -0xc50(%rbp), %rdi
leaq -0xc70(%rbp), %rsi
callq 0x1b430
jmp 0x33333
movq -0xda0(%rbp), %rdi
addq $0x98, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x1b640
movq %rax, -0xf48(%rbp)
jmp 0x33353
movq -0xf48(%rbp), %rdx
leaq -0xc30(%rbp), %rdi
leaq -0xc50(%rbp), %rsi
callq 0x1d3b0
jmp 0x3336f
leaq 0x13cda(%rip), %rdx     # 0x47050
leaq -0xc10(%rbp), %rdi
leaq -0xc30(%rbp), %rsi
callq 0x1b430
jmp 0x3338b
movq -0xda0(%rbp), %rdi
addq $0x98, %rdi
movl $0x1, %esi
callq 0x1b640
movq %rax, -0xf50(%rbp)
jmp 0x333ac
movq -0xf50(%rbp), %rdx
leaq -0xbf0(%rbp), %rdi
leaq -0xc10(%rbp), %rsi
callq 0x1d3b0
jmp 0x333c8
leaq 0x13c81(%rip), %rdx     # 0x47050
leaq -0xbd0(%rbp), %rdi
leaq -0xbf0(%rbp), %rsi
callq 0x1b430
jmp 0x333e4
movq -0xda0(%rbp), %rdi
addq $0x98, %rdi
movl $0x2, %esi
callq 0x1b640
movq %rax, -0xf58(%rbp)
jmp 0x33405
movq -0xf58(%rbp), %rdx
leaq -0xbb0(%rbp), %rdi
leaq -0xbd0(%rbp), %rsi
callq 0x1d3b0
jmp 0x33421
leaq 0x142c9(%rip), %rdx     # 0x476f1
leaq -0xb90(%rbp), %rdi
leaq -0xbb0(%rbp), %rsi
callq 0x1b430
jmp 0x3343d
movq -0xda0(%rbp), %rdi
addq $0x40, %rdi
leaq -0xb90(%rbp), %rsi
callq 0x1cd30
leaq -0xb90(%rbp), %rdi
callq 0x1bea0
leaq -0xbb0(%rbp), %rdi
callq 0x1bea0
leaq -0xbd0(%rbp), %rdi
callq 0x1bea0
leaq -0xbf0(%rbp), %rdi
callq 0x1bea0
leaq -0xc10(%rbp), %rdi
callq 0x1bea0
leaq -0xc30(%rbp), %rdi
callq 0x1bea0
leaq -0xc50(%rbp), %rdi
callq 0x1bea0
leaq -0xc70(%rbp), %rdi
callq 0x1bea0
leaq -0xc90(%rbp), %rdi
callq 0x1bea0
leaq -0xcb0(%rbp), %rdi
callq 0x1bea0
leaq -0xcd0(%rbp), %rdi
callq 0x1bea0
leaq -0xcf0(%rbp), %rdi
callq 0x1bea0
leaq -0xd10(%rbp), %rdi
callq 0x1bea0
leaq -0xd30(%rbp), %rdi
callq 0x1bea0
leaq -0xd50(%rbp), %rdi
callq 0x1bea0
leaq -0xd70(%rbp), %rdi
callq 0x1bea0
leaq -0xd90(%rbp), %rdi
callq 0x1bea0
addq $0xf60, %rsp            # imm = 0xF60
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x33569
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x3355d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0xb30(%rbp), %rdi
callq 0x1bea0
leaq -0xb50(%rbp), %rdi
callq 0x1bea0
leaq -0xb70(%rbp), %rdi
callq 0x1bea0
jmp 0x33739
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x3372d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x33721
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x33715
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x33709
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x336fd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x336f1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x336e5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x336d9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x336cd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x336c1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x336b5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x336a9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x3369d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x33691
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x33685
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0xbb0(%rbp), %rdi
callq 0x1bea0
leaq -0xbd0(%rbp), %rdi
callq 0x1bea0
leaq -0xbf0(%rbp), %rdi
callq 0x1bea0
leaq -0xc10(%rbp), %rdi
callq 0x1bea0
leaq -0xc30(%rbp), %rdi
callq 0x1bea0
leaq -0xc50(%rbp), %rdi
callq 0x1bea0
leaq -0xc70(%rbp), %rdi
callq 0x1bea0
leaq -0xc90(%rbp), %rdi
callq 0x1bea0
leaq -0xcb0(%rbp), %rdi
callq 0x1bea0
leaq -0xcd0(%rbp), %rdi
callq 0x1bea0
leaq -0xcf0(%rbp), %rdi
callq 0x1bea0
leaq -0xd10(%rbp), %rdi
callq 0x1bea0
leaq -0xd30(%rbp), %rdi
callq 0x1bea0
leaq -0xd50(%rbp), %rdi
callq 0x1bea0
leaq -0xd70(%rbp), %rdi
callq 0x1bea0
leaq -0xd90(%rbp), %rdi
callq 0x1bea0
movq -0xda0(%rbp), %rdi
callq 0x1b6d0
movq -0x30(%rbp), %rdi
callq 0x1da60
nop