// File: /workspace/github_cpp_makefile_star2_O1/leonn[P]neuralNet/source/neural-net.cpp
// Function: main
int main(int argc, char *argv[]){
    srand(time(NULL));
    TrainingData trainData(argv[1]);

    // e.g., { 3, 2, 1 }
    vector<unsigned> topology;

    vector<vector<double>> inputValsA, targetValuesA;
    vector<double> inputVals, targetValues, resultValues;

    int trainingPass = 0;
    int epochs=0;
    bool test=false;
    bool testFile=false;
    long double minError=atof(argv[2]);
    int maxEpochs=atoi(argv[3]);

    ofstream trainingDataOutput;
    ofstream trainingDataGlobalOutput;
    ofstream testDataOutput;
    TrainingData *testDataInput;

    trainingDataOutput.open(argv[4]);
    trainingDataGlobalOutput.open(argv[5]);

    if(argc>6){
        if(!strcmp(argv[6],"-t")){
        testDataOutput.open(argv[7]);
        test=true;
        }
        else if(!strcmp(argv[6],"-tf")){
            testDataInput=new TrainingData(argv[7]);
            testDataOutput.open(argv[8]);
            testFile=true;
        }
    }

    long double eta,momentum;
    string transferFunction;

    trainData.getTopology(topology);
    trainData.getEta(eta);
    trainData.getMomentum(momentum);
    trainData.getTransferFunction(transferFunction);

    //Load trainning data from file
    while (!trainData.isEof()) {
        trainingPass++;

        // Get new input data and feed it forward:
        if (trainData.getNextInputs(inputVals) != topology[0])
            break;
        inputValsA.push_back(inputVals);

        // Train the net what the outputs should have been:
        trainData.getTargetOutputs(targetValues);
        assert(targetValues.size() == topology.back());
        targetValuesA.push_back(targetValues);
    }

    Net net(topology,transferFunction);
    long double recentAverageError;
    long double globalError;

    do {
        globalError=0.0;

        for (int i = 0; i < trainingPass; i++){
            // Get new input data and feed it forward:
            net.feedForward(inputValsA[i]);

            // Collect the net's actual output results:
            net.getResults(resultValues);

            // Train the net what the outputs should have been:
            net.backPropagation(targetValuesA[i],eta,momentum);

            // Report how well the training is working, average over recent samples:
            recentAverageError=net.getRecentAverageError();
            globalError+=recentAverageError;
            trainingDataOutput <<recentAverageError<<endl;
        }
        globalError/=trainingPass;
        trainingDataGlobalOutput <<globalError<<endl;
        epochs++;

    } while(round(globalError, minError) > minError && epochs < maxEpochs);

    trainingDataOutput.close();
    trainingDataGlobalOutput.close();

    if (test){
         for (int i = 0; i < trainingPass; i++){
            // Get new input data and feed it forward:][]
            net.feedForward(inputValsA[i]);
            showVectorValues("Input:", inputValsA[i], testDataOutput);

            showVectorValues("Target_Output:", targetValuesA[i], testDataOutput);

            // Collect the net's actual output results:
            net.getResults(resultValues);
            showTestVectorValues("Output:", resultValues, testDataOutput);
        }
    }

    if (testFile){
        trainingPass=0;
        //clear trainning data vectors
        inputValsA.clear();
        targetValuesA.clear();
        inputVals.clear();
        targetValues.clear();
        resultValues.clear();

        //Load trainning data from file
        while (!testDataInput->isEof()) {
            trainingPass++;

            // Get new input data and feed it forward:
            if (testDataInput->getNextInputs(inputVals) != topology[0])
                break;
            inputValsA.push_back(inputVals);

            // Train the net what the outputs should have been:
            testDataInput->getTargetOutputs(targetValues);
            assert(targetValues.size() == topology.back());
            targetValuesA.push_back(targetValues);
        }

        for (int i = 0; i < trainingPass; i++){
            // Get new input data and feed it forward:][]
            net.feedForward(inputValsA[i]);
            showVectorValues("Input:", inputValsA[i],testDataOutput);

            showVectorValues("Target_Output:", targetValuesA[i],testDataOutput);

            // Collect the net's actual output results:
            net.getResults(resultValues);
            showVectorValues("Output:", resultValues,testDataOutput);
        }
    }

    testDataOutput.close();
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xac8, %rsp            # imm = 0xAC8
movq %rsi, %r15
movl %edi, %ebx
xorl %edi, %edi
callq 0x21e0
movl %eax, %edi
callq 0x2200
movq 0x8(%r15), %rsi
leaq -0x2d0(%rbp), %rdi
leaq -0x6d0(%rbp), %rdx
callq 0x20c0
leaq -0xad8(%rbp), %rdi
leaq -0x2d0(%rbp), %rsi
callq 0x512e
leaq -0x2c0(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x35a3
callq 0x21f0
xorl %eax, %eax
movq %rax, -0xd0(%rbp)
xorpd %xmm0, %xmm0
movapd %xmm0, -0xe0(%rbp)
movq %rax, -0x50(%rbp)
movapd %xmm0, -0x60(%rbp)
movq %rax, -0x90(%rbp)
movapd %xmm0, -0xa0(%rbp)
movq %rax, -0xf0(%rbp)
movapd %xmm0, -0x100(%rbp)
movq %rax, -0x70(%rbp)
movapd %xmm0, -0x80(%rbp)
movq %rax, -0xb0(%rbp)
movapd %xmm0, -0xc0(%rbp)
movq 0x10(%r15), %rdi
callq 0x2260
movsd %xmm0, -0x140(%rbp)
movsd %xmm0, -0x158(%rbp)
fldl -0x158(%rbp)
fstpt -0x38(%rbp)
movq 0x18(%r15), %rdi
callq 0x22d0
movl %eax, -0xa4(%rbp)
leaq -0x6d0(%rbp), %rdi
callq 0x2320
leaq -0x8d0(%rbp), %rdi
callq 0x2320
leaq -0x4d0(%rbp), %rdi
callq 0x2320
movq 0x20(%r15), %rsi
leaq -0x6d0(%rbp), %rdi
movl $0x10, %edx
callq 0x2040
movq 0x28(%r15), %rsi
leaq -0x8d0(%rbp), %rdi
movl $0x10, %edx
callq 0x2040
cmpl $0x7, %ebx
jl 0x36a9
movq 0x30(%r15), %rbx
leaq 0x2a6c(%rip), %rsi      # 0x60f2
movq %rbx, %rdi
callq 0x2280
testl %eax, %eax
je 0x36b9
leaq 0x2a5c(%rip), %rsi      # 0x60f5
movq %rbx, %rdi
callq 0x2280
testl %eax, %eax
je 0x3ee6
movl $0x0, -0x3c(%rbp)
movl $0x0, -0x40(%rbp)
jmp 0x36da
movq 0x38(%r15), %rsi
leaq -0x4d0(%rbp), %rdi
movl $0x10, %edx
callq 0x2040
movb $0x1, %al
movl %eax, -0x40(%rbp)
movl $0x0, -0x3c(%rbp)
leaq -0x120(%rbp), %rax
movq %rax, -0x10(%rax)
movq $0x0, -0x8(%rax)
movb $0x0, (%rax)
leaq -0xad8(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
callq 0x4b82
leaq -0xad8(%rbp), %rdi
leaq -0x290(%rbp), %rsi
callq 0x4d38
leaq -0xad8(%rbp), %rdi
leaq -0x280(%rbp), %rsi
callq 0x4fdc
leaq -0xad8(%rbp), %rdi
leaq -0x130(%rbp), %rsi
callq 0x4e8a
movl $0x0, -0x2c(%rbp)
leaq -0xad8(%rbp), %rbx
leaq -0x100(%rbp), %r14
leaq -0x60(%rbp), %r15
leaq -0x80(%rbp), %r12
leaq -0xa0(%rbp), %r13
movq %rbx, %rdi
callq 0x4b6c
testb %al, %al
jne 0x37ca
movq %rbx, %rdi
movq %r14, %rsi
callq 0x5168
movq -0xe0(%rbp), %rcx
cmpl (%rcx), %eax
jne 0x37c7
movq %r15, %rdi
movq %r14, %rsi
callq 0x4164
movq %rbx, %rdi
movq %r12, %rsi
callq 0x532e
movq -0x78(%rbp), %rax
subq -0x80(%rbp), %rax
sarq $0x3, %rax
movq -0xd8(%rbp), %rcx
movl -0x4(%rcx), %ecx
cmpq %rcx, %rax
jne 0x3f56
incl -0x2c(%rbp)
movq %r13, %rdi
movq %r12, %rsi
callq 0x4164
jmp 0x3760
incl -0x2c(%rbp)
leaq -0x270(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
leaq -0x130(%rbp), %rdx
callq 0x264c
movl -0x2c(%rbp), %eax
movl %eax, -0xa8(%rbp)
fildl -0xa8(%rbp)
fstpt -0x224(%rbp)
fld1
fldt -0x38(%rbp)
fdivrp %st, %st(1)
fstpt -0x10c(%rbp)
movl %eax, %eax
movq %rax, -0x138(%rbp)
leaq (,%rax,8), %rax
leaq (%rax,%rax,2), %r13
xorl %eax, %eax
leaq -0x270(%rbp), %r15
leaq -0x6d0(%rbp), %r14
movq %rax, -0x148(%rbp)
fldz
fstpt -0x38(%rbp)
cmpl $0x0, -0x2c(%rbp)
jle 0x38f4
xorl %ebx, %ebx
fldz
fstpt -0x38(%rbp)
movq -0x60(%rbp), %rsi
addq %rbx, %rsi
movq %r15, %rdi
callq 0x27c2
fldz
fstp %st(0)
movq %r15, %rdi
leaq -0xc0(%rbp), %rsi
callq 0x2b94
fldz
fstp %st(0)
movq -0xa0(%rbp), %rsi
addq %rbx, %rsi
movq %r15, %rdi
leaq -0x290(%rbp), %rdx
leaq -0x280(%rbp), %rcx
callq 0x292c
fldz
fstp %st(0)
movq %r15, %rdi
callq 0x2c5e
fldt -0x38(%rbp)
fadd %st(1), %st
fstpt -0x38(%rbp)
fstpt (%rsp)
movq %r14, %rdi
callq 0x20f0
fldz
movq %rax, %r12
fstp %st(0)
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x2210
fldz
fstp %st(0)
movsbl %al, %esi
movq %r12, %rdi
callq 0x2030
fldz
fstp %st(0)
movq %rax, %rdi
callq 0x2160
fldz
fstp %st(0)
addq $0x18, %rbx
cmpq %rbx, %r13
jne 0x3848
fldt -0x224(%rbp)
fldt -0x38(%rbp)
fdivp %st, %st(1)
fld %st(0)
fstpt -0x38(%rbp)
fstpt (%rsp)
leaq -0x8d0(%rbp), %rdi
callq 0x20f0
movq %rax, %r12
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x2210
movsbl %al, %esi
movq %r12, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2160
fldt -0x10c(%rbp)
fldt -0x38(%rbp)
fmulp %st, %st(1)
fadds 0x26d2(%rip)            # 0x6020
fstpt (%rsp)
callq 0x2100
fldt -0x10c(%rbp)
fdivrp %st, %st(1)
fstpl -0x150(%rbp)
movsd -0x150(%rbp), %xmm0
ucomisd -0x140(%rbp), %xmm0
movq -0x148(%rbp), %rax
jbe 0x398b
incl %eax
cmpl -0xa4(%rbp), %eax
jl 0x382b
leaq -0x6d0(%rbp), %rdi
callq 0x2290
leaq -0x8d0(%rbp), %rdi
callq 0x2290
cmpl $0x0, -0x2c(%rbp)
setg %al
movl -0x40(%rbp), %ecx
andb %al, %cl
cmpb $0x1, %cl
jne 0x3b1b
movq -0x138(%rbp), %rax
shlq $0x3, %rax
leaq (%rax,%rax,2), %rax
movq %rax, -0x38(%rbp)
xorl %r14d, %r14d
leaq -0x1f8(%rbp), %r12
leaq -0xc0(%rbp), %r13
leaq -0x1d8(%rbp), %r15
movq -0x60(%rbp), %rsi
addq %r14, %rsi
leaq -0x270(%rbp), %rdi
callq 0x27c2
movq %r13, %rbx
movq %r12, %r13
leaq -0x208(%rbp), %rax
movq %rax, -0x218(%rbp)
leaq -0x218(%rbp), %r12
movq %r12, %rdi
leaq 0x2732(%rip), %rsi      # 0x614d
leaq 0x2731(%rip), %rdx      # 0x6153
callq 0x41ea
movq -0x60(%rbp), %rsi
addq %r14, %rsi
movq %r12, %rdi
leaq -0x4d0(%rbp), %rdx
callq 0x3364
movq -0x218(%rbp), %rdi
leaq -0x208(%rbp), %rax
cmpq %rax, %rdi
movq %r13, %r12
je 0x3a58
callq 0x21f0
leaq -0x1e8(%rbp), %rax
movq %rax, -0x1f8(%rbp)
movq %r12, %rdi
leaq 0x26e4(%rip), %rsi      # 0x6154
leaq 0x26eb(%rip), %rdx      # 0x6162
callq 0x41ea
movq %rbx, %r13
movq -0xa0(%rbp), %rsi
addq %r14, %rsi
movq %r12, %rdi
leaq -0x4d0(%rbp), %rdx
callq 0x3364
movq -0x1f8(%rbp), %rdi
leaq -0x1e8(%rbp), %rax
cmpq %rax, %rdi
je 0x3ab0
callq 0x21f0
leaq -0x270(%rbp), %rdi
movq %r13, %rsi
callq 0x2b94
leaq -0x1c8(%rbp), %rax
movq %rax, -0x1d8(%rbp)
movq %r15, %rdi
leaq 0x2684(%rip), %rsi      # 0x615b
leaq 0x2684(%rip), %rdx      # 0x6162
callq 0x41ea
movq %r15, %rdi
movq %r13, %rsi
leaq -0x4d0(%rbp), %rdx
callq 0x3415
movq -0x1d8(%rbp), %rdi
leaq -0x1c8(%rbp), %rax
cmpq %rax, %rdi
je 0x3b0d
callq 0x21f0
addq $0x18, %r14
cmpq %r14, -0x38(%rbp)
jne 0x39e3
cmpb $0x0, -0x3c(%rbp)
je 0x3dac
movq -0x60(%rbp), %rbx
movq -0x58(%rbp), %r14
cmpq %rbx, %r14
je 0x3b4f
movq %rbx, %r15
movq (%r15), %rdi
testq %rdi, %rdi
je 0x3b42
callq 0x21f0
addq $0x18, %r15
cmpq %r14, %r15
jne 0x3b35
movq %rbx, -0x58(%rbp)
movq -0xa0(%rbp), %rbx
movq -0x98(%rbp), %r14
cmpq %rbx, %r14
je 0x3b82
movq %rbx, %r15
movq (%r15), %rdi
testq %rdi, %rdi
je 0x3b72
callq 0x21f0
addq $0x18, %r15
cmpq %r14, %r15
jne 0x3b65
movq %rbx, -0x98(%rbp)
movq -0x100(%rbp), %rax
cmpq %rax, -0xf8(%rbp)
je 0x3b99
movq %rax, -0xf8(%rbp)
movq -0x80(%rbp), %rax
cmpq %rax, -0x78(%rbp)
je 0x3ba7
movq %rax, -0x78(%rbp)
movq -0xc0(%rbp), %rax
cmpq %rax, -0xb8(%rbp)
je 0x3bbe
movq %rax, -0xb8(%rbp)
xorl %r13d, %r13d
leaq -0x100(%rbp), %rbx
leaq -0x60(%rbp), %r14
leaq -0x80(%rbp), %r15
leaq -0xa0(%rbp), %r12
movq -0x48(%rbp), %rdi
callq 0x4b6c
testb %al, %al
jne 0x3c44
movq -0x48(%rbp), %rdi
movq %rbx, %rsi
callq 0x5168
movq -0xe0(%rbp), %rcx
cmpl (%rcx), %eax
jne 0x3c41
movq %r14, %rdi
movq %rbx, %rsi
callq 0x4164
movq -0x48(%rbp), %rdi
movq %r15, %rsi
callq 0x532e
movq -0x78(%rbp), %rax
subq -0x80(%rbp), %rax
sarq $0x3, %rax
movq -0xd8(%rbp), %rcx
movl -0x4(%rcx), %ecx
cmpq %rcx, %rax
jne 0x3f75
incl %r13d
movq %r12, %rdi
movq %r15, %rsi
callq 0x4164
jmp 0x3bd7
incl %r13d
testl %r13d, %r13d
jle 0x3dac
movl %r13d, %eax
shlq $0x3, %rax
leaq (%rax,%rax,2), %rax
movq %rax, -0x38(%rbp)
xorl %r15d, %r15d
leaq -0x198(%rbp), %r12
leaq -0xc0(%rbp), %r14
leaq -0x178(%rbp), %r13
movq -0x60(%rbp), %rsi
addq %r15, %rsi
leaq -0x270(%rbp), %rdi
callq 0x27c2
movq %r14, %rbx
movq %r12, %r14
leaq -0x1a8(%rbp), %rax
movq %rax, -0x1b8(%rbp)
leaq -0x1b8(%rbp), %r12
movq %r12, %rdi
leaq 0x24a1(%rip), %rsi      # 0x614d
leaq 0x24a0(%rip), %rdx      # 0x6153
callq 0x41ea
movq -0x60(%rbp), %rsi
addq %r15, %rsi
movq %r12, %rdi
leaq -0x4d0(%rbp), %rdx
callq 0x3364
movq -0x1b8(%rbp), %rdi
leaq -0x1a8(%rbp), %rax
cmpq %rax, %rdi
movq %r14, %r12
je 0x3ce9
callq 0x21f0
leaq -0x188(%rbp), %rax
movq %rax, -0x198(%rbp)
movq %r12, %rdi
leaq 0x2453(%rip), %rsi      # 0x6154
leaq 0x245a(%rip), %rdx      # 0x6162
callq 0x41ea
movq %rbx, %r14
movq -0xa0(%rbp), %rsi
addq %r15, %rsi
movq %r12, %rdi
leaq -0x4d0(%rbp), %rdx
callq 0x3364
movq -0x198(%rbp), %rdi
leaq -0x188(%rbp), %rax
cmpq %rax, %rdi
je 0x3d41
callq 0x21f0
leaq -0x270(%rbp), %rdi
movq %r14, %rsi
callq 0x2b94
leaq -0x168(%rbp), %rax
movq %rax, -0x178(%rbp)
movq %r13, %rdi
leaq 0x23f3(%rip), %rsi      # 0x615b
leaq 0x23f3(%rip), %rdx      # 0x6162
callq 0x41ea
movq %r13, %rdi
movq %r14, %rsi
leaq -0x4d0(%rbp), %rdx
callq 0x3364
movq -0x178(%rbp), %rdi
leaq -0x168(%rbp), %rax
cmpq %rax, %rdi
je 0x3d9e
callq 0x21f0
addq $0x18, %r15
cmpq %r15, -0x38(%rbp)
jne 0x3c74
leaq -0x4d0(%rbp), %rbx
movq %rbx, %rdi
callq 0x2290
leaq -0x250(%rbp), %rdi
callq 0x2cce
movq -0x130(%rbp), %rdi
leaq -0x120(%rbp), %rax
cmpq %rax, %rdi
je 0x3ddf
callq 0x21f0
movq 0x51f2(%rip), %rax      # 0x8fd8
movq (%rax), %r14
movq 0x18(%rax), %r15
leaq -0x4c8(%rbp), %rdi
movq %r14, -0x8(%rdi)
movq -0x18(%r14), %rax
movq %r15, -0x4d0(%rbp,%rax)
callq 0x21c0
movl $0xf8, %r12d
addq %r12, %rbx
movq %rbx, %rdi
callq 0x20a0
leaq -0x8c8(%rbp), %rdi
movq %r14, -0x8(%rdi)
movq -0x18(%r14), %rax
movq %r15, -0x8d0(%rbp,%rax)
callq 0x21c0
leaq -0x8d0(%rbp), %rdi
addq %r12, %rdi
callq 0x20a0
leaq -0x6c8(%rbp), %rdi
movq %r14, -0x8(%rdi)
movq -0x18(%r14), %rax
movq %r15, -0x6d0(%rbp,%rax)
callq 0x21c0
leaq -0x6d0(%rbp), %rdi
addq %r12, %rdi
callq 0x20a0
movq -0xc0(%rbp), %rdi
testq %rdi, %rdi
je 0x3e81
callq 0x21f0
movq -0x80(%rbp), %rdi
testq %rdi, %rdi
je 0x3e8f
callq 0x21f0
movq -0x100(%rbp), %rdi
testq %rdi, %rdi
je 0x3ea0
callq 0x21f0
leaq -0xa0(%rbp), %rdi
callq 0x41a0
leaq -0x60(%rbp), %rdi
callq 0x41a0
movq -0xe0(%rbp), %rdi
testq %rdi, %rdi
je 0x3ec6
callq 0x21f0
leaq -0xad8(%rbp), %rdi
callq 0x2060
xorl %eax, %eax
addq $0xac8, %rsp            # imm = 0xAC8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movl $0x208, %edi            # imm = 0x208
callq 0x2220
movq %rax, -0x48(%rbp)
movq 0x38(%r15), %rsi
leaq -0x2b0(%rbp), %rdi
leaq -0x270(%rbp), %rdx
callq 0x20c0
leaq -0x2b0(%rbp), %rsi
movq -0x48(%rbp), %rdi
callq 0x512e
leaq -0x2a0(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x3f30
callq 0x21f0
movq 0x40(%r15), %rsi
leaq -0x4d0(%rbp), %rdi
movl $0x10, %edx
callq 0x2040
movb $0x1, %al
movl %eax, -0x3c(%rbp)
movl $0x0, -0x40(%rbp)
jmp 0x36da
leaq 0x219c(%rip), %rdi      # 0x60f9
leaq 0x21bc(%rip), %rsi      # 0x6120
leaq 0x21cb(%rip), %rcx      # 0x6136
movl $0x52, %edx
callq 0x2150
leaq 0x217d(%rip), %rdi      # 0x60f9
leaq 0x219d(%rip), %rsi      # 0x6120
leaq 0x21ac(%rip), %rcx      # 0x6136
movl $0x97, %edx
callq 0x2150
movq %rax, %r14
leaq -0x2a0(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x3fb1
callq 0x21f0
jmp 0x3fb1
movq %rax, %r14
movq -0x48(%rbp), %rdi
jmp 0x40d1
jmp 0x40a6
movq %rax, %r14
jmp 0x40e2
movq %rax, %r14
jmp 0x40ee
movq %rax, %r14
jmp 0x40fa
movq %rax, %r14
leaq -0x2c0(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x415c
callq 0x21f0
jmp 0x415c
movq %rax, %r14
jmp 0x415c
movq %rax, %r14
jmp 0x40d6
jmp 0x40af
jmp 0x40a6
jmp 0x40af
movq %rax, %r14
movq -0x1b8(%rbp), %rdi
leaq -0x1a8(%rbp), %rax
jmp 0x4094
jmp 0x40af
movq %rax, %r14
movq -0x198(%rbp), %rdi
leaq -0x188(%rbp), %rax
jmp 0x4094
jmp 0x40af
movq %rax, %r14
movq -0x178(%rbp), %rdi
leaq -0x168(%rbp), %rax
jmp 0x4094
jmp 0x40af
movq %rax, %r14
movq -0x218(%rbp), %rdi
leaq -0x208(%rbp), %rax
jmp 0x4094
jmp 0x40af
movq %rax, %r14
movq -0x1f8(%rbp), %rdi
leaq -0x1e8(%rbp), %rax
jmp 0x4094
jmp 0x40af
movq %rax, %r14
movq -0x1d8(%rbp), %rdi
leaq -0x1c8(%rbp), %rax
cmpq %rax, %rdi
je 0x40b2
callq 0x21f0
jmp 0x40b2
jmp 0x40af
jmp 0x40af
jmp 0x40af
movq %rax, %r14
jmp 0x40be
jmp 0x40af
fstp %st(0)
movq %rax, %r14
leaq -0x250(%rbp), %rdi
callq 0x2cce
leaq -0x120(%rbp), %rax
movq -0x130(%rbp), %rdi
cmpq %rax, %rdi
je 0x40d6
callq 0x21f0
leaq -0x4d0(%rbp), %rdi
callq 0x22b0
leaq -0x8d0(%rbp), %rdi
callq 0x22b0
leaq -0x6d0(%rbp), %rdi
callq 0x22b0
movq -0xc0(%rbp), %rdi
testq %rdi, %rdi
je 0x410b
callq 0x21f0
movq -0x80(%rbp), %rdi
testq %rdi, %rdi
je 0x4119
callq 0x21f0
movq -0x100(%rbp), %rdi
testq %rdi, %rdi
je 0x412a
callq 0x21f0
leaq -0xa0(%rbp), %rdi
callq 0x41a0
leaq -0x60(%rbp), %rdi
callq 0x41a0
movq -0xe0(%rbp), %rdi
testq %rdi, %rdi
je 0x4150
callq 0x21f0
leaq -0xad8(%rbp), %rdi
callq 0x2060
movq %r14, %rdi
callq 0x2340