// File: chrischute[P]are-you-the-one/src/ayto.cpp
// Function: runAreYouTheOne(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, AreYouTheOneSettings const*)
void runAreYouTheOne(const Pm& answer, const AytoSettings* settings)
{
    TbSet* tbGuessesAlreadyMade = new TbSet(); // Queries submitted in truth booth.
    PmSet* pmGuessesAlreadyMade = new PmSet(); // Queries submitted in perfect matching.
    PmSet* possibleAnswers = new PmSet();      // Remaining possibilities for answer.
    possibleAnswers->populateAll();

    if (!settings->_isInteractiveMode) {
        if (settings->_isPrintNumbersMode) {
            cout << "Answer: " << getPrintableNumbers(answer) << endl;
        } else {
            cout << "Answer:" << endl
                 << getPrintableNames(answer, settings->_femaleNames, settings->_maleNames)
                 << endl;
        }
    }

    while (true) {
        // Submit a single Tb to the Truth Booth.
        cout << "End of Week " << (tbGuessesAlreadyMade->size() + 1) << endl;
        Tb nextTbGuess = getNextTruthBoothGuess(possibleAnswers, tbGuessesAlreadyMade);
        tbGuessesAlreadyMade->add(nextTbGuess);
        bool isPairCorrect;
        if (settings->_isInteractiveMode) {
            string userInput;
            do {
                if (settings->_isPrintNumbersMode) {
                    cout << "Question: Is there a '" << nextTbGuess.charAtIndex
                         << "' in position " << nextTbGuess.index
                         << " (indexed starting with 0)? [yes/no]" << endl;
                } else {
                    cout << "Question: Are " << settings->_femaleNames->at(nextTbGuess.index)
                         << " and " << settings->_maleNames->at(nextTbGuess.charAtIndex)
                         << " matched together? [yes/no]" << endl;
                }
                cin >> userInput;
                isPairCorrect = userInput[0] == 'y' || userInput[0] == 'Y';
            } while (userInput[0] != 'y' && userInput[0] != 'n' &&
                     userInput[0] != 'Y' && userInput[0] != 'N');
        } else {
            isPairCorrect = nextTbGuess.isContainedIn(answer);
        }
        possibleAnswers->filter(nextTbGuess, isPairCorrect);
        if (settings->_isVerboseMode) {
            cout << "  * Truth Booth: " << flush;
            if (settings->_isPrintNumbersMode) {
                cout << getPrintableNumbers(nextTbGuess.toString()) << endl;
            } else {
                cout << getPrintableNames(nextTbGuess,
                                          settings->_femaleNames,
                                          settings->_maleNames)
                     << endl;
            }
            cout << "  > Feedback: " << (isPairCorrect ? "Yes" : "No") << endl;
            cout << "    Now " << possibleAnswers->size() << " remaining." << endl;
        }

        // Submit a full PM as the Perfect Matching.
        Pm nextPmGuess = getNextPerfectMatchingGuess(possibleAnswers, pmGuessesAlreadyMade);
        pmGuessesAlreadyMade->add(nextPmGuess);
        int numCorrect;
        if (settings->_isInteractiveMode) {
            do {
                if (settings->_isPrintNumbersMode) {
                    cout << "Question: How many of the following "
                         << "are in the correct spot?" << endl;
                    cout << getPrintableNumbers(nextPmGuess) << endl;
                } else {
                    cout << "Question: How many of the following "
                         << "matches are correct?" << endl;
                    cout << getPrintableNames(nextPmGuess,
                                              settings->_femaleNames,
                                              settings->_maleNames)
                         << endl;
                }
                cin >> numCorrect;
            } while (numCorrect < 0 || numCorrect > PERM_LENGTH);
        } else {
            numCorrect = numInCommon(nextPmGuess, answer);
        }

        possibleAnswers->filter(nextPmGuess, numCorrect);
        if (settings->_isVerboseMode) {
            cout << "  * Perfect Matching: " << flush;
            if (settings->_isPrintNumbersMode) {
                cout << getPrintableNumbers(nextPmGuess) << endl;
            } else {
                cout << endl << getPrintableNames(nextPmGuess,
                                                  settings->_femaleNames,
                                                  settings->_maleNames)
                     << endl;
            }
            cout << "  > Feedback: " << numCorrect << " correct" << endl;
            cout << "    Now " << possibleAnswers->size() << " remaining." << endl;
        }
        if (numCorrect == PERM_LENGTH) {
            break;
        }
        if (settings->_isInteractiveMode && possibleAnswers->size() == 0) {
            cout << "Sorry, that's not a possible combination of responses."
                 << endl << "Please try again." << endl;
            break;
        }
    }

    // Print a summary of the game, the guesses made in each week.
    cout << "Results:" << endl;
    for (unsigned int i = 0; i < tbGuessesAlreadyMade->size(); ++i) {
        int intWidth = (tbGuessesAlreadyMade->size() < 10 ? 1 : 2);
        cout << "[Week " << setw(intWidth) << (i + 1) << "] ";
        if (settings->_isPrintNumbersMode) {
            cout << getPrintableNumbers(tbGuessesAlreadyMade->get(i).toString())
                 << ", "
                 << getPrintableNumbers(pmGuessesAlreadyMade->get(i))
                 << endl;
        } else {
            cout << getPrintableNames(tbGuessesAlreadyMade->get(i),
                                      settings->_femaleNames,
                                      settings->_maleNames)
                 << endl
                 << getPrintableNames(pmGuessesAlreadyMade->get(i),
                                      settings->_femaleNames,
                                      settings->_maleNames)
                 << endl;
        }
    }

    delete tbGuessesAlreadyMade;
    delete pmGuessesAlreadyMade;
    delete possibleAnswers;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x4b0, %rsp            # imm = 0x4B0
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movl $0x8, %edi
callq 0x32f0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x268(%rbp)
callq 0x11f40
jmp 0x4491
movq -0x268(%rbp), %rax
movq %rax, -0x18(%rbp)
movl $0x8, %edi
callq 0x32f0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x270(%rbp)
callq 0x10100
jmp 0x44ba
movq -0x270(%rbp), %rax
movq %rax, -0x30(%rbp)
movl $0x8, %edi
callq 0x32f0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x278(%rbp)
callq 0x10100
jmp 0x44e3
movq -0x278(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rdi
callq 0x105b0
movq -0x10(%rbp), %rax
testb $0x1, 0x21(%rax)
jne 0x46a1
movq -0x10(%rbp), %rax
testb $0x1, 0x22(%rax)
je 0x4600
movq 0x19aae(%rip), %rdi     # 0x1dfc8
leaq 0xfd27(%rip), %rsi      # 0x14248
callq 0x32e0
movq %rax, -0x290(%rbp)
movq -0x8(%rbp), %rsi
leaq -0x58(%rbp), %rdi
movq %rdi, -0x288(%rbp)
callq 0x6bc0
movq -0x290(%rbp), %rdi
movq -0x288(%rbp), %rsi
callq 0x3280
movq %rax, -0x280(%rbp)
jmp 0x455d
movq -0x280(%rbp), %rdi
movq 0x19a45(%rip), %rsi     # 0x1dfb0
callq 0x3320
jmp 0x4572
leaq -0x58(%rbp), %rdi
callq 0x3190
jmp 0x469f
movq -0x268(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
movl $0x8, %esi
callq 0x3300
jmp 0x55ed
movq -0x270(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
movl $0x8, %esi
callq 0x3300
jmp 0x55ed
movq -0x278(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
movl $0x8, %esi
callq 0x3300
jmp 0x55ed
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x3190
jmp 0x55ed
movq 0x199c1(%rip), %rdi     # 0x1dfc8
leaq 0xfc43(%rip), %rsi      # 0x14251
callq 0x32e0
movq %rax, %rdi
movq 0x19993(%rip), %rsi     # 0x1dfb0
callq 0x3320
movq %rax, -0x2a8(%rbp)
movq -0x8(%rbp), %rsi
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rdx
movq 0x30(%rax), %rcx
leaq -0x78(%rbp), %rdi
movq %rdi, -0x2a0(%rbp)
callq 0x6850
movq -0x2a8(%rbp), %rdi
movq -0x2a0(%rbp), %rsi
callq 0x3280
movq %rax, -0x298(%rbp)
jmp 0x4665
movq -0x298(%rbp), %rdi
movq 0x1993d(%rip), %rsi     # 0x1dfb0
callq 0x3320
jmp 0x467a
leaq -0x78(%rbp), %rdi
callq 0x3190
jmp 0x469f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x78(%rbp), %rdi
callq 0x3190
jmp 0x55ed
jmp 0x46a1
jmp 0x46a3
movq 0x1991e(%rip), %rdi     # 0x1dfc8
leaq 0xfba8(%rip), %rsi      # 0x14259
callq 0x32e0
movq %rax, -0x2b0(%rbp)
movq -0x18(%rbp), %rdi
callq 0x120b0
movq -0x2b0(%rbp), %rdi
movq %rax, %rsi
incq %rsi
callq 0x3090
movq %rax, %rdi
movq 0x198ce(%rip), %rsi     # 0x1dfb0
callq 0x3320
movq -0x38(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x60a0
movl %eax, %ecx
movl %ecx, -0x80(%rbp)
shrq $0x20, %rax
movb %al, -0x7c(%rbp)
movq -0x18(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0x11fd0
movq -0x10(%rbp), %rax
testb $0x1, 0x21(%rax)
je 0x4a29
leaq -0xa8(%rbp), %rdi
callq 0x3420
movq -0x10(%rbp), %rax
testb $0x1, 0x22(%rax)
je 0x47f1
movq 0x1988c(%rip), %rdi     # 0x1dfc8
leaq 0xfb23(%rip), %rsi      # 0x14266
callq 0x32e0
movq %rax, -0x2b8(%rbp)
jmp 0x4751
movq -0x2b8(%rbp), %rdi
movsbl -0x7c(%rbp), %esi
callq 0x33b0
movq %rax, -0x2c0(%rbp)
jmp 0x476a
movq -0x2c0(%rbp), %rdi
leaq 0xfb05(%rip), %rsi      # 0x1427d
callq 0x32e0
movq %rax, -0x2c8(%rbp)
jmp 0x4786
movq -0x2c8(%rbp), %rdi
movl -0x80(%rbp), %esi
callq 0x34c0
movq %rax, -0x2d0(%rbp)
jmp 0x479e
movq -0x2d0(%rbp), %rdi
leaq 0xfae0(%rip), %rsi      # 0x1428c
callq 0x32e0
movq %rax, -0x2d8(%rbp)
jmp 0x47ba
movq -0x2d8(%rbp), %rdi
movq 0x197e8(%rip), %rsi     # 0x1dfb0
callq 0x3320
jmp 0x47cf
jmp 0x48c8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0xa8(%rbp), %rdi
callq 0x3190
jmp 0x55ed
movq 0x197d0(%rip), %rdi     # 0x1dfc8
leaq 0xfab2(%rip), %rsi      # 0x142b1
callq 0x32e0
movq %rax, -0x2e0(%rbp)
jmp 0x480d
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rdi
leaq -0x80(%rbp), %rsi
callq 0x86f0
movq %rax, -0x2e8(%rbp)
jmp 0x4827
movq -0x2e8(%rbp), %rsi
movq -0x2e0(%rbp), %rdi
callq 0x3280
movq %rax, -0x2f0(%rbp)
jmp 0x4843
movq -0x2f0(%rbp), %rdi
leaq 0xfa6f(%rip), %rsi      # 0x142c0
callq 0x32e0
movq %rax, -0x2f8(%rbp)
jmp 0x485f
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rdi
leaq -0x7c(%rbp), %rsi
callq 0x8790
movq %rax, -0x300(%rbp)
jmp 0x4879
movq -0x300(%rbp), %rsi
movq -0x2f8(%rbp), %rdi
callq 0x3280
movq %rax, -0x308(%rbp)
jmp 0x4895
movq -0x308(%rbp), %rdi
leaq 0xfa23(%rip), %rsi      # 0x142c6
callq 0x32e0
movq %rax, -0x310(%rbp)
jmp 0x48b1
movq -0x310(%rbp), %rdi
movq 0x196f1(%rip), %rsi     # 0x1dfb0
callq 0x3320
jmp 0x48c6
jmp 0x48c8
movq 0x19711(%rip), %rdi     # 0x1dfe0
leaq -0xa8(%rbp), %rsi
callq 0x33e0
jmp 0x48dd
xorl %eax, %eax
movl %eax, %esi
leaq -0xa8(%rbp), %rdi
callq 0x3520
movq %rax, -0x318(%rbp)
jmp 0x48f6
movq -0x318(%rbp), %rax
movsbl (%rax), %ecx
movb $0x1, %al
cmpl $0x79, %ecx
movb %al, -0x319(%rbp)
je 0x493c
xorl %eax, %eax
movl %eax, %esi
leaq -0xa8(%rbp), %rdi
callq 0x3520
movq %rax, -0x328(%rbp)
jmp 0x4926
movq -0x328(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x59, %eax
sete %al
movb %al, -0x319(%rbp)
movb -0x319(%rbp), %al
andb $0x1, %al
movb %al, -0x81(%rbp)
xorl %eax, %eax
movl %eax, %esi
leaq -0xa8(%rbp), %rdi
callq 0x3520
movq %rax, -0x330(%rbp)
jmp 0x4963
movq -0x330(%rbp), %rax
movsbl (%rax), %ecx
xorl %eax, %eax
cmpl $0x79, %ecx
movb %al, -0x331(%rbp)
je 0x4a0d
xorl %eax, %eax
movl %eax, %esi
leaq -0xa8(%rbp), %rdi
callq 0x3520
movq %rax, -0x340(%rbp)
jmp 0x4997
movq -0x340(%rbp), %rax
movsbl (%rax), %ecx
xorl %eax, %eax
cmpl $0x6e, %ecx
movb %al, -0x331(%rbp)
je 0x4a0d
xorl %eax, %eax
movl %eax, %esi
leaq -0xa8(%rbp), %rdi
callq 0x3520
movq %rax, -0x348(%rbp)
jmp 0x49c7
movq -0x348(%rbp), %rax
movsbl (%rax), %ecx
xorl %eax, %eax
cmpl $0x59, %ecx
movb %al, -0x331(%rbp)
je 0x4a0d
xorl %eax, %eax
movl %eax, %esi
leaq -0xa8(%rbp), %rdi
callq 0x3520
movq %rax, -0x350(%rbp)
jmp 0x49f7
movq -0x350(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x4e, %eax
setne %al
movb %al, -0x331(%rbp)
movb -0x331(%rbp), %al
testb $0x1, %al
jne 0x4727
leaq -0xa8(%rbp), %rdi
callq 0x3190
jmp 0x4a3e
movq -0x8(%rbp), %rsi
leaq -0x80(%rbp), %rdi
callq 0x8830
andb $0x1, %al
movb %al, -0x81(%rbp)
movq -0x38(%rbp), %rdi
movb -0x81(%rbp), %al
leaq -0x80(%rbp), %rsi
andb $0x1, %al
movzbl %al, %edx
callq 0x10450
movq -0x10(%rbp), %rax
testb $0x1, 0x24(%rax)
je 0x4c59
movq 0x1955d(%rip), %rdi     # 0x1dfc8
leaq 0xf870(%rip), %rsi      # 0x142e2
callq 0x32e0
movq %rax, %rdi
movq 0x1954f(%rip), %rsi     # 0x1dfd0
callq 0x3320
movq -0x10(%rbp), %rax
testb $0x1, 0x22(%rax)
je 0x4b45
leaq -0xe8(%rbp), %rdi
movq %rdi, -0x358(%rbp)
leaq -0x80(%rbp), %rsi
callq 0x8870
movq -0x358(%rbp), %rsi
leaq -0xc8(%rbp), %rdi
callq 0x6bc0
jmp 0x4ac0
movq 0x19501(%rip), %rdi     # 0x1dfc8
leaq -0xc8(%rbp), %rsi
callq 0x3280
movq %rax, -0x360(%rbp)
jmp 0x4adc
movq -0x360(%rbp), %rdi
movq 0x194c6(%rip), %rsi     # 0x1dfb0
callq 0x3320
jmp 0x4af1
leaq -0xc8(%rbp), %rdi
callq 0x3190
leaq -0xe8(%rbp), %rdi
callq 0x3190
jmp 0x4bc4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0x4b34
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0xc8(%rbp), %rdi
callq 0x3190
leaq -0xe8(%rbp), %rdi
callq 0x3190
jmp 0x55ed
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rdx
movq 0x30(%rax), %rcx
leaq -0x108(%rbp), %rdi
movq %rdi, -0x370(%rbp)
leaq -0x80(%rbp), %rsi
callq 0x6a70
movq -0x370(%rbp), %rsi
movq 0x19452(%rip), %rdi     # 0x1dfc8
callq 0x3280
movq %rax, -0x368(%rbp)
jmp 0x4b84
movq -0x368(%rbp), %rdi
movq 0x1941e(%rip), %rsi     # 0x1dfb0
callq 0x3320
jmp 0x4b99
leaq -0x108(%rbp), %rdi
callq 0x3190
jmp 0x4bc4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x108(%rbp), %rdi
callq 0x3190
jmp 0x55ed
movq 0x193fd(%rip), %rdi     # 0x1dfc8
leaq 0xf722(%rip), %rsi      # 0x142f4
callq 0x32e0
movq %rax, %rdi
movb -0x81(%rbp), %cl
leaq 0xf720(%rip), %rsi      # 0x14307
leaq 0xf715(%rip), %rax      # 0x14303
testb $0x1, %cl
cmovneq %rax, %rsi
callq 0x32e0
movq %rax, %rdi
movq 0x193ac(%rip), %rsi     # 0x1dfb0
callq 0x3320
movq 0x193b8(%rip), %rdi     # 0x1dfc8
leaq 0xf6f3(%rip), %rsi      # 0x1430a
callq 0x32e0
movq %rax, -0x378(%rbp)
movq -0x38(%rbp), %rdi
callq 0x107a0
movq -0x378(%rbp), %rdi
movq %rax, %rsi
callq 0x3090
movq %rax, %rdi
leaq 0xf6ce(%rip), %rsi      # 0x14313
callq 0x32e0
movq %rax, %rdi
movq 0x1935c(%rip), %rsi     # 0x1dfb0
callq 0x3320
movq -0x38(%rbp), %rsi
movq -0x30(%rbp), %rdx
leaq -0x128(%rbp), %rdi
movq %rdi, -0x380(%rbp)
callq 0x5750
movq -0x380(%rbp), %rsi
movq -0x30(%rbp), %rdi
callq 0x10250
jmp 0x4c86
movq -0x10(%rbp), %rax
testb $0x1, 0x21(%rax)
je 0x4e88
jmp 0x4c96
movq -0x10(%rbp), %rax
testb $0x1, 0x22(%rax)
je 0x4d76
movq 0x1931d(%rip), %rdi     # 0x1dfc8
leaq 0xf66d(%rip), %rsi      # 0x1431f
callq 0x32e0
movq %rax, -0x388(%rbp)
jmp 0x4cc0
movq -0x388(%rbp), %rdi
leaq 0xf676(%rip), %rsi      # 0x14344
callq 0x32e0
movq %rax, -0x390(%rbp)
jmp 0x4cdc
movq -0x390(%rbp), %rdi
movq 0x192c6(%rip), %rsi     # 0x1dfb0
callq 0x3320
jmp 0x4cf1
leaq -0x150(%rbp), %rdi
leaq -0x128(%rbp), %rsi
callq 0x6bc0
jmp 0x4d06
movq 0x192bb(%rip), %rdi     # 0x1dfc8
leaq -0x150(%rbp), %rsi
callq 0x3280
movq %rax, -0x398(%rbp)
jmp 0x4d22
movq -0x398(%rbp), %rdi
movq 0x19280(%rip), %rsi     # 0x1dfb0
callq 0x3320
jmp 0x4d37
leaq -0x150(%rbp), %rdi
callq 0x3190
jmp 0x4e40
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0x51e2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x150(%rbp), %rdi
callq 0x3190
jmp 0x51e2
movq 0x1924b(%rip), %rdi     # 0x1dfc8
leaq 0xf59b(%rip), %rsi      # 0x1431f
callq 0x32e0
movq %rax, -0x3a0(%rbp)
jmp 0x4d92
movq -0x3a0(%rbp), %rdi
leaq 0xf5bd(%rip), %rsi      # 0x1435d
callq 0x32e0
movq %rax, -0x3a8(%rbp)
jmp 0x4dae
movq -0x3a8(%rbp), %rdi
movq 0x191f4(%rip), %rsi     # 0x1dfb0
callq 0x3320
jmp 0x4dc3
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rdx
movq 0x30(%rax), %rcx
leaq -0x170(%rbp), %rdi
leaq -0x128(%rbp), %rsi
callq 0x6850
jmp 0x4de4
movq 0x191dd(%rip), %rdi     # 0x1dfc8
leaq -0x170(%rbp), %rsi
callq 0x3280
movq %rax, -0x3b0(%rbp)
jmp 0x4e00
movq -0x3b0(%rbp), %rdi
movq 0x191a2(%rip), %rsi     # 0x1dfb0
callq 0x3320
jmp 0x4e15
leaq -0x170(%rbp), %rdi
callq 0x3190
jmp 0x4e40
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x170(%rbp), %rdi
callq 0x3190
jmp 0x51e2
movq 0x19199(%rip), %rdi     # 0x1dfe0
leaq -0x12c(%rbp), %rsi
callq 0x3180
jmp 0x4e55
jmp 0x4e57
movb $0x1, %al
cmpl $0x0, -0x12c(%rbp)
movb %al, -0x3b1(%rbp)
jl 0x4e78
cmpl $0xa, -0x12c(%rbp)
setg %al
movb %al, -0x3b1(%rbp)
movb -0x3b1(%rbp), %al
testb $0x1, %al
jne 0x4c96
jmp 0x4eac
movq -0x8(%rbp), %rsi
leaq -0x128(%rbp), %rdi
callq 0x10040
movl %eax, -0x3b8(%rbp)
jmp 0x4ea0
movl -0x3b8(%rbp), %eax
movl %eax, -0x12c(%rbp)
movq -0x38(%rbp), %rdi
movl -0x12c(%rbp), %edx
leaq -0x128(%rbp), %rsi
callq 0x10350
jmp 0x4ec4
movq -0x10(%rbp), %rax
testb $0x1, 0x24(%rax)
je 0x50ff
movq 0x190ef(%rip), %rdi     # 0x1dfc8
leaq 0xf492(%rip), %rsi      # 0x14372
callq 0x32e0
movq %rax, -0x3c0(%rbp)
jmp 0x4eee
movq -0x3c0(%rbp), %rdi
movq 0x190d4(%rip), %rsi     # 0x1dfd0
callq 0x3320
jmp 0x4f03
movq -0x10(%rbp), %rax
testb $0x1, 0x22(%rax)
je 0x4f81
leaq -0x190(%rbp), %rdi
leaq -0x128(%rbp), %rsi
callq 0x6bc0
jmp 0x4f22
movq 0x1909f(%rip), %rdi     # 0x1dfc8
leaq -0x190(%rbp), %rsi
callq 0x3280
movq %rax, -0x3c8(%rbp)
jmp 0x4f3e
movq -0x3c8(%rbp), %rdi
movq 0x19064(%rip), %rsi     # 0x1dfb0
callq 0x3320
jmp 0x4f53
leaq -0x190(%rbp), %rdi
callq 0x3190
jmp 0x501a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x190(%rbp), %rdi
callq 0x3190
jmp 0x51e2
movq 0x19040(%rip), %rdi     # 0x1dfc8
movq 0x19021(%rip), %rsi     # 0x1dfb0
callq 0x3320
movq %rax, -0x3d0(%rbp)
jmp 0x4f9d
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rdx
movq 0x30(%rax), %rcx
leaq -0x1b0(%rbp), %rdi
leaq -0x128(%rbp), %rsi
callq 0x6850
jmp 0x4fbe
movq -0x3d0(%rbp), %rdi
leaq -0x1b0(%rbp), %rsi
callq 0x3280
movq %rax, -0x3d8(%rbp)
jmp 0x4fda
movq -0x3d8(%rbp), %rdi
movq 0x18fc8(%rip), %rsi     # 0x1dfb0
callq 0x3320
jmp 0x4fef
leaq -0x1b0(%rbp), %rdi
callq 0x3190
jmp 0x501a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x1b0(%rbp), %rdi
callq 0x3190
jmp 0x51e2
movq 0x18fa7(%rip), %rdi     # 0x1dfc8
leaq 0xf2cc(%rip), %rsi      # 0x142f4
callq 0x32e0
movq %rax, -0x3e0(%rbp)
jmp 0x5036
movq -0x3e0(%rbp), %rdi
movl -0x12c(%rbp), %esi
callq 0x34c0
movq %rax, -0x3e8(%rbp)
jmp 0x5051
movq -0x3e8(%rbp), %rdi
leaq 0xf32a(%rip), %rsi      # 0x14389
callq 0x32e0
movq %rax, -0x3f0(%rbp)
jmp 0x506d
movq -0x3f0(%rbp), %rdi
movq 0x18f35(%rip), %rsi     # 0x1dfb0
callq 0x3320
jmp 0x5082
movq 0x18f3f(%rip), %rdi     # 0x1dfc8
leaq 0xf27a(%rip), %rsi      # 0x1430a
callq 0x32e0
movq %rax, -0x3f8(%rbp)
jmp 0x509e
movq -0x38(%rbp), %rdi
callq 0x107a0
movq %rax, -0x400(%rbp)
jmp 0x50b0
movq -0x400(%rbp), %rsi
movq -0x3f8(%rbp), %rdi
callq 0x3090
movq %rax, -0x408(%rbp)
jmp 0x50cc
movq -0x408(%rbp), %rdi
leaq 0xf239(%rip), %rsi      # 0x14313
callq 0x32e0
movq %rax, -0x410(%rbp)
jmp 0x50e8
movq -0x410(%rbp), %rdi
movq 0x18eba(%rip), %rsi     # 0x1dfb0
callq 0x3320
jmp 0x50fd
jmp 0x50ff
cmpl $0xa, -0x12c(%rbp)
jne 0x5117
movl $0x3, -0x1b4(%rbp)
jmp 0x51c3
movq -0x10(%rbp), %rax
testb $0x1, 0x21(%rax)
je 0x51b9
movq -0x38(%rbp), %rdi
callq 0x107a0
movq %rax, -0x418(%rbp)
jmp 0x5137
movq -0x418(%rbp), %rax
cmpq $0x0, %rax
jne 0x51b9
movq 0x18e7d(%rip), %rdi     # 0x1dfc8
leaq 0xf240(%rip), %rsi      # 0x14392
callq 0x32e0
movq %rax, -0x420(%rbp)
jmp 0x5160
movq -0x420(%rbp), %rdi
movq 0x18e42(%rip), %rsi     # 0x1dfb0
callq 0x3320
movq %rax, -0x428(%rbp)
jmp 0x517c
movq -0x428(%rbp), %rdi
leaq 0xf23f(%rip), %rsi      # 0x143c9
callq 0x32e0
movq %rax, -0x430(%rbp)
jmp 0x5198
movq -0x430(%rbp), %rdi
movq 0x18e0a(%rip), %rsi     # 0x1dfb0
callq 0x3320
jmp 0x51ad
movl $0x3, -0x1b4(%rbp)
jmp 0x51c3
movl $0x0, -0x1b4(%rbp)
leaq -0x128(%rbp), %rdi
callq 0x3190
movl -0x1b4(%rbp), %eax
testl %eax, %eax
je 0x51dd
jmp 0x51db
jmp 0x51f3
jmp 0x46a3
leaq -0x128(%rbp), %rdi
callq 0x3190
jmp 0x55ed
movq 0x18dce(%rip), %rdi     # 0x1dfc8
leaq 0xf1da(%rip), %rsi      # 0x143db
callq 0x32e0
movq %rax, %rdi
movq 0x18da0(%rip), %rsi     # 0x1dfb0
callq 0x3320
movl $0x0, -0x1b8(%rbp)
movl -0x1b8(%rbp), %eax
movq %rax, -0x438(%rbp)
movq -0x18(%rbp), %rdi
callq 0x120b0
movq %rax, %rcx
movq -0x438(%rbp), %rax
cmpq %rcx, %rax
jae 0x555a
movq -0x18(%rbp), %rdi
callq 0x120b0
movq %rax, %rdx
movl $0x2, %eax
movl $0x1, %ecx
cmpq $0xa, %rdx
cmovbl %ecx, %eax
movl %eax, -0x1bc(%rbp)
movq 0x18d56(%rip), %rdi     # 0x1dfc8
leaq 0xf16b(%rip), %rsi      # 0x143e4
callq 0x32e0
movq %rax, -0x440(%rbp)
movl -0x1bc(%rbp), %edi
callq 0x8900
movq -0x440(%rbp), %rdi
movl %eax, -0x1c0(%rbp)
movl -0x1c0(%rbp), %esi
callq 0x3390
movq %rax, %rdi
movl -0x1b8(%rbp), %esi
addl $0x1, %esi
callq 0x3400
movq %rax, %rdi
leaq 0xf128(%rip), %rsi      # 0x143eb
callq 0x32e0
movq -0x10(%rbp), %rax
testb $0x1, 0x22(%rax)
je 0x5420
movq -0x18(%rbp), %rdi
movl -0x1b8(%rbp), %esi
callq 0x12080
movq %rax, %rsi
leaq -0x200(%rbp), %rdi
movq %rdi, -0x448(%rbp)
callq 0x8870
movq -0x448(%rbp), %rsi
leaq -0x1e0(%rbp), %rdi
callq 0x6bc0
jmp 0x5310
movq 0x18cb1(%rip), %rdi     # 0x1dfc8
leaq -0x1e0(%rbp), %rsi
callq 0x3280
movq %rax, -0x450(%rbp)
jmp 0x532c
movq -0x450(%rbp), %rdi
leaq 0xef0b(%rip), %rsi      # 0x14245
callq 0x32e0
movq %rax, -0x458(%rbp)
jmp 0x5348
movq -0x30(%rbp), %rdi
movl -0x1b8(%rbp), %esi
callq 0x10580
movq %rax, -0x460(%rbp)
jmp 0x5360
movq -0x460(%rbp), %rsi
leaq -0x220(%rbp), %rdi
callq 0x6bc0
jmp 0x5375
movq -0x458(%rbp), %rdi
leaq -0x220(%rbp), %rsi
callq 0x3280
movq %rax, -0x468(%rbp)
jmp 0x5391
movq -0x468(%rbp), %rdi
movq 0x18c11(%rip), %rsi     # 0x1dfb0
callq 0x3320
jmp 0x53a6
leaq -0x220(%rbp), %rdi
callq 0x3190
leaq -0x1e0(%rbp), %rdi
callq 0x3190
leaq -0x200(%rbp), %rdi
callq 0x3190
jmp 0x5544
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0x540f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0x5403
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x220(%rbp), %rdi
callq 0x3190
leaq -0x1e0(%rbp), %rdi
callq 0x3190
leaq -0x200(%rbp), %rdi
callq 0x3190
jmp 0x55ed
movq -0x18(%rbp), %rdi
movl -0x1b8(%rbp), %esi
callq 0x12080
movq %rax, %rsi
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rdx
movq 0x30(%rax), %rcx
leaq -0x240(%rbp), %rdi
movq %rdi, -0x478(%rbp)
callq 0x6a70
movq -0x478(%rbp), %rsi
movq 0x18b69(%rip), %rdi     # 0x1dfc8
callq 0x3280
movq %rax, -0x470(%rbp)
jmp 0x546d
movq -0x470(%rbp), %rdi
movq 0x18b35(%rip), %rsi     # 0x1dfb0
callq 0x3320
movq %rax, -0x480(%rbp)
jmp 0x5489
movq -0x30(%rbp), %rdi
movl -0x1b8(%rbp), %esi
callq 0x10580
movq %rax, -0x488(%rbp)
jmp 0x54a1
movq -0x488(%rbp), %rsi
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rdx
movq 0x30(%rax), %rcx
leaq -0x260(%rbp), %rdi
callq 0x6850
jmp 0x54c2
movq -0x480(%rbp), %rdi
leaq -0x260(%rbp), %rsi
callq 0x3280
movq %rax, -0x490(%rbp)
jmp 0x54de
movq -0x490(%rbp), %rdi
movq 0x18ac4(%rip), %rsi     # 0x1dfb0
callq 0x3320
jmp 0x54f3
leaq -0x260(%rbp), %rdi
callq 0x3190
leaq -0x240(%rbp), %rdi
callq 0x3190
jmp 0x5544
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0x5533
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x260(%rbp), %rdi
callq 0x3190
leaq -0x240(%rbp), %rdi
callq 0x3190
jmp 0x55ed
jmp 0x5546
movl -0x1b8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1b8(%rbp)
jmp 0x521f
movq -0x18(%rbp), %rax
movq %rax, -0x498(%rbp)
cmpq $0x0, %rax
je 0x5588
movq -0x498(%rbp), %rdi
callq 0x11f90
movq -0x498(%rbp), %rdi
movl $0x8, %esi
callq 0x3300
movq -0x30(%rbp), %rax
movq %rax, -0x4a0(%rbp)
cmpq $0x0, %rax
je 0x55b6
movq -0x4a0(%rbp), %rdi
callq 0x10210
movq -0x4a0(%rbp), %rdi
movl $0x8, %esi
callq 0x3300
movq -0x38(%rbp), %rax
movq %rax, -0x4a8(%rbp)
cmpq $0x0, %rax
je 0x55e4
movq -0x4a8(%rbp), %rdi
callq 0x10210
movq -0x4a8(%rbp), %rdi
movl $0x8, %esi
callq 0x3300
addq $0x4b0, %rsp            # imm = 0x4B0
popq %rbp
retq
movq -0x20(%rbp), %rdi
callq 0x34d0
nopw %cs:(%rax,%rax)