// File: xjrueda[P]fixprime/src/Protocol.cpp
// Function: fprime::Protocol::loadComponents()
void Protocol::loadComponents() {
        try {
            if (protocolSpec["Components"].empty()) {
                throw std::runtime_error("No components specified for current  protocol ");
            } else {

                vector<pair < fprime::Component::ComponentPtr, string>> componentDependencies;
                std::vector<string> names = protocolSpec["Components"].getMemberNames();
                // Process the components
                for (std::vector<string>::iterator itr = names.begin(); itr != names.end(); itr++) {
                    //gets the component json Value
                    Json::Value componentSpec = protocolSpec["Components"][*itr];

                    //gets the component's properties
                    string componentType = componentSpec["type"].asString();

                    string componentName = string(*itr);
                    // Creates the component pointer
                    fprime::Component::ComponentPtr component(new Component(componentName));

                    if (componentType == "BlockRepeating") {
                        try {
                            unsigned int controlfld = boost::lexical_cast<unsigned int>(componentSpec["controlField"].asString());
                            fprime::Field::FieldPtr fieldPtr = this->getField(controlfld);
                            component->setControlField(fieldPtr);
                            component->setType(componentType);
                        } catch (boost::bad_lexical_cast& e) {
                            throw runtime_error("Exception loading component " + string(*itr) + ", control field " + componentSpec["controlField"].asString() + " is not a valid field id.");
                        }

                    }

                    // Gets the current component's members array
                    Json::Value members = componentSpec["members"];
                    if (!members.isArray())
                        throw runtime_error("at Protocol.LoadComponents: component " + string(*itr) + " does not have a member array.");


                    // process the members
                    for (int i = 0; i < members.size(); i++) {

                        Json::Value fld = members[i];

                        if (fld.empty())
                            throw runtime_error("Empty member was specified for component " + string(*itr));

                        if (fld["memberId"].empty())
                            throw runtime_error("No memberId was specified in member list of component " + string(*itr));

                        string memberId = fld["memberId"].asString();

                        if (fld["isComponent"] == "Y") {
                            //Nested components
                            try {
                                fprime::Component::ComponentPtr nestedComponent = this->getComponent(memberId);
                                component->addNestedComponent(nestedComponent);
                            } catch (ComponentNotFound& e) {
                                pair<fprime::Component::ComponentPtr, string> depedency(component, memberId);
                                componentDependencies.push_back(depedency);
                            }
                        } else {
                            unsigned int field;

                            try {
                                field = boost::lexical_cast<unsigned int>(memberId);
                            } catch (boost::bad_lexical_cast& e) {
                                throw runtime_error("exception loading component " + string(*itr) + ", " + memberId + " is not a valid field id.");
                            }
                            //gets the field pointer from current protocol
                            fprime::Component::FieldT fieldt;
                            fieldt.field = this->getField(field);

                            if (fieldt.field->getDataType() == "NumInGroup") {
                                stringstream msg;
                                msg << "field " << fieldt.field->getId() << " " <<
                                        fieldt.field->getName() <<
                                        " is of type NumInGroup and cannot be assigned directly to components or messages. add the corresponding component.";
                                throw runtime_error(msg.str());

                            }
                            if (fld["isRequired"] == "Y")
                                fieldt.isRequired = true;
                            else
                                fieldt.isRequired = false;

                            // adds the field pointer to the current component
                            component->addField(fieldt);
                        }
                    }

                    this->addComponent(component);
                }
                std::vector<pair < fprime::Component::ComponentPtr, string>>::iterator depItr;
                // Stablishes all missing component dependencies
                for (depItr = componentDependencies.begin(); depItr != componentDependencies.end(); depItr++) {
                    fprime::Component::ComponentPtr dependent = depItr->first;
                    try {
                        dependent->addNestedComponent(this->getComponent(depItr->second));
                    } catch (ComponentNotFound& e) {
                        throw runtime_error("Component dependency " + depItr->second + " was not found.");
                    }
                }
            }
        } catch (exception& e) {
            throw std::runtime_error("at Protocol.LoadComponents: " + string(e.what()));
        }
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xa10, %rsp            # imm = 0xA10
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rdi
movq %rdi, -0x868(%rbp)
addq $0x28, %rdi
leaq 0x310c8(%rip), %rsi     # 0x1036bd
callq 0x99470
movq %rax, -0x860(%rbp)
jmp 0xd2603
movq -0x860(%rbp), %rdi
callq 0xa3a40
movb %al, -0x869(%rbp)
jmp 0xd2617
movb -0x869(%rbp), %al
testb $0x1, %al
jne 0xd2623
jmp 0xd2695
movl $0x10, %edi
callq 0x99e80
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x878(%rbp)
leaq 0x31087(%rip), %rsi     # 0x1036c8
callq 0x99380
jmp 0xd2648
movq -0x878(%rbp), %rdi
movq 0x60982(%rip), %rsi     # 0x132fd8
movq 0x60743(%rip), %rdx     # 0x132da0
callq 0xa2fe0
jmp 0xd3d93
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xd3c36
movq -0x878(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
callq 0x9b9c0
jmp 0xd3c36
leaq -0x30(%rbp), %rdi
callq 0x9aa60
movq -0x868(%rbp), %rdi
addq $0x28, %rdi
leaq 0x3100d(%rip), %rsi     # 0x1036bd
callq 0x99470
movq %rax, -0x880(%rbp)
jmp 0xd26be
movq -0x880(%rbp), %rsi
leaq -0x48(%rbp), %rdi
callq 0x9c0a0
jmp 0xd26d0
leaq -0x48(%rbp), %rdi
callq 0xa2870
movq %rax, -0x50(%rbp)
leaq -0x48(%rbp), %rdi
callq 0xa2b40
movq %rax, -0x58(%rbp)
leaq -0x50(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0xa0020
testb $0x1, %al
jne 0xd2700
jmp 0xd3981
movq -0x868(%rbp), %rdi
addq $0x28, %rdi
leaq 0x30fab(%rip), %rsi     # 0x1036bd
callq 0x99470
movq %rax, -0x888(%rbp)
jmp 0xd2720
leaq -0x50(%rbp), %rdi
callq 0xa4310
movq -0x888(%rbp), %rdi
movq %rax, %rsi
callq 0xa4480
movq %rax, -0x890(%rbp)
jmp 0xd2741
movq -0x890(%rbp), %rsi
leaq -0x80(%rbp), %rdi
callq 0xa2280
jmp 0xd2753
leaq 0x3158d(%rip), %rsi     # 0x103ce7
leaq -0x80(%rbp), %rdi
callq 0x99470
movq %rax, -0x898(%rbp)
jmp 0xd276c
movq -0x898(%rbp), %rsi
leaq -0xa0(%rbp), %rdi
callq 0xa3d30
jmp 0xd2781
leaq -0x50(%rbp), %rdi
callq 0xa4310
movq %rax, %rsi
leaq -0xc0(%rbp), %rdi
callq 0x998d0
jmp 0xd279b
movl $0x88, %edi
callq 0x9dc00
movq %rax, -0x8a0(%rbp)
jmp 0xd27ae
movb $0x1, -0xf1(%rbp)
leaq -0xf0(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0x998d0
jmp 0xd27ca
movq -0x8a0(%rbp), %rdi
leaq -0xf0(%rbp), %rsi
callq 0xa40e0
jmp 0xd27df
movq -0x8a0(%rbp), %rsi
movb $0x0, -0xf1(%rbp)
leaq -0xd0(%rbp), %rdi
callq 0x98e90
jmp 0xd27fb
leaq -0xf0(%rbp), %rdi
callq 0xa4f00
leaq 0x30dca(%rip), %rsi     # 0x1035d8
leaq -0xa0(%rbp), %rdi
callq 0xa4e10
movb %al, -0x8a1(%rbp)
jmp 0xd2822
movb -0x8a1(%rbp), %al
testb $0x1, %al
jne 0xd2831
jmp 0xd2c68
leaq 0x30ebf(%rip), %rsi     # 0x1036f7
leaq -0x80(%rbp), %rdi
callq 0x99470
movq %rax, -0x8b0(%rbp)
jmp 0xd284a
movq -0x8b0(%rbp), %rsi
leaq -0x118(%rbp), %rdi
callq 0xa3d30
jmp 0xd285f
leaq -0x118(%rbp), %rdi
callq 0x99560
movl %eax, -0x8b4(%rbp)
jmp 0xd2873
leaq -0x118(%rbp), %rdi
callq 0xa4f00
movl -0x8b4(%rbp), %eax
movq -0x868(%rbp), %rsi
movl %eax, -0xf8(%rbp)
movl -0xf8(%rbp), %edx
leaq -0x128(%rbp), %rdi
callq 0xa4220
jmp 0xd28a6
leaq -0xd0(%rbp), %rdi
callq 0x9e9a0
movq %rax, -0x8c8(%rbp)
leaq -0x138(%rbp), %rdi
movq %rdi, -0x8c0(%rbp)
leaq -0x128(%rbp), %rsi
callq 0xa06b0
movq -0x8c8(%rbp), %rdi
movq -0x8c0(%rbp), %rsi
callq 0xa38d0
jmp 0xd28e8
leaq -0x138(%rbp), %rdi
callq 0xa2ae0
leaq -0xd0(%rbp), %rdi
callq 0x9e9a0
movq %rax, -0x8d0(%rbp)
leaq -0x158(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
callq 0x998d0
jmp 0xd291c
movq -0x8d0(%rbp), %rdi
leaq -0x158(%rbp), %rsi
callq 0x98920
jmp 0xd2931
leaq -0x158(%rbp), %rdi
callq 0xa4f00
leaq -0x128(%rbp), %rdi
callq 0xa2ae0
jmp 0xd2c66
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xd3c2d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xd3c24
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xd3973
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xd3967
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xd395b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xd29c9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
leaq -0xf0(%rbp), %rdi
callq 0xa4f00
testb $0x1, -0xf1(%rbp)
jne 0xd29d4
jmp 0xd29e0
movq -0x8a0(%rbp), %rdi
callq 0x9d660
jmp 0xd395b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xd394f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xd2a6a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
leaq -0x118(%rbp), %rdi
callq 0xa4f00
jmp 0xd2a6a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
leaq -0x138(%rbp), %rdi
callq 0xa2ae0
jmp 0xd2a5e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xd2a5e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
leaq -0x158(%rbp), %rdi
callq 0xa4f00
leaq -0x128(%rbp), %rdi
callq 0xa2ae0
movl -0x14(%rbp), %eax
movl $0x3, %ecx
cmpl %ecx, %eax
jne 0xd394f
movq -0x10(%rbp), %rdi
callq 0x99540
movq %rax, -0x160(%rbp)
movb $0x1, -0x221(%rbp)
movl $0x10, %edi
callq 0x99e80
movq %rax, -0x8d8(%rbp)
leaq -0x50(%rbp), %rdi
callq 0xa4310
movq %rax, %rsi
leaq -0x200(%rbp), %rdi
callq 0x998d0
jmp 0xd2abc
leaq 0x30c41(%rip), %rsi     # 0x103704
leaq -0x1e0(%rbp), %rdi
leaq -0x200(%rbp), %rdx
callq 0xa2cb0
jmp 0xd2ad8
leaq 0x30c42(%rip), %rdx     # 0x103721
leaq -0x1c0(%rbp), %rdi
leaq -0x1e0(%rbp), %rsi
callq 0x98100
jmp 0xd2af4
leaq 0x30bfc(%rip), %rsi     # 0x1036f7
leaq -0x80(%rbp), %rdi
callq 0x99470
movq %rax, -0x8e0(%rbp)
jmp 0xd2b0d
movq -0x8e0(%rbp), %rsi
leaq -0x220(%rbp), %rdi
callq 0xa3d30
jmp 0xd2b22
leaq -0x1a0(%rbp), %rdi
leaq -0x1c0(%rbp), %rsi
leaq -0x220(%rbp), %rdx
callq 0x9ca70
jmp 0xd2b3e
leaq 0x30bed(%rip), %rdx     # 0x103732
leaq -0x180(%rbp), %rdi
leaq -0x1a0(%rbp), %rsi
callq 0x98100
jmp 0xd2b5a
movq -0x8d8(%rbp), %rdi
leaq -0x180(%rbp), %rsi
callq 0xa2430
jmp 0xd2b6f
movq -0x8d8(%rbp), %rdi
movb $0x0, -0x221(%rbp)
movq 0x60454(%rip), %rsi     # 0x132fd8
movq 0x60215(%rip), %rdx     # 0x132da0
callq 0xa2fe0
jmp 0xd3d93
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xd2c43
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xd2c37
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xd2c2b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xd2c1f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xd2c13
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xd2c07
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
leaq -0x180(%rbp), %rdi
callq 0xa4f00
leaq -0x1a0(%rbp), %rdi
callq 0xa4f00
leaq -0x220(%rbp), %rdi
callq 0xa4f00
leaq -0x1c0(%rbp), %rdi
callq 0xa4f00
leaq -0x1e0(%rbp), %rdi
callq 0xa4f00
leaq -0x200(%rbp), %rdi
callq 0xa4f00
testb $0x1, -0x221(%rbp)
jne 0xd2c4e
jmp 0xd2c5a
movq -0x8d8(%rbp), %rdi
callq 0x9b9c0
callq 0xa2520
jmp 0xd2c61
jmp 0xd394f
jmp 0xd2c68
leaq 0x30add(%rip), %rsi     # 0x10374c
leaq -0x80(%rbp), %rdi
callq 0x99470
movq %rax, -0x8e8(%rbp)
jmp 0xd2c81
movq -0x8e8(%rbp), %rsi
leaq -0x250(%rbp), %rdi
callq 0xa2280
jmp 0xd2c96
leaq -0x250(%rbp), %rdi
callq 0xa27c0
movb %al, -0x8e9(%rbp)
jmp 0xd2caa
movb -0x8e9(%rbp), %al
testb $0x1, %al
jne 0xd2de6
jmp 0xd2cba
movb $0x1, -0x2b1(%rbp)
movl $0x10, %edi
callq 0x99e80
movq %rax, -0x8f8(%rbp)
leaq -0x50(%rbp), %rdi
callq 0xa4310
movq %rax, %rsi
leaq -0x2b0(%rbp), %rdi
callq 0x998d0
jmp 0xd2cec
leaq 0x30a61(%rip), %rsi     # 0x103754
leaq -0x290(%rbp), %rdi
leaq -0x2b0(%rbp), %rdx
callq 0xa2cb0
jmp 0xd2d08
leaq 0x30a6c(%rip), %rdx     # 0x10377b
leaq -0x270(%rbp), %rdi
leaq -0x290(%rbp), %rsi
callq 0x98100
jmp 0xd2d24
movq -0x8f8(%rbp), %rdi
leaq -0x270(%rbp), %rsi
callq 0xa2430
jmp 0xd2d39
movq -0x8f8(%rbp), %rdi
movb $0x0, -0x2b1(%rbp)
movq 0x6028a(%rip), %rsi     # 0x132fd8
movq 0x6004b(%rip), %rdx     # 0x132da0
callq 0xa2fe0
jmp 0xd3d93
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xd3943
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xd2dca
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xd2dbe
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xd2db2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
leaq -0x270(%rbp), %rdi
callq 0xa4f00
leaq -0x290(%rbp), %rdi
callq 0xa4f00
leaq -0x2b0(%rbp), %rdi
callq 0xa4f00
testb $0x1, -0x2b1(%rbp)
jne 0xd2dd5
jmp 0xd2de1
movq -0x8f8(%rbp), %rdi
callq 0x9b9c0
jmp 0xd3943
movl $0x0, -0x2b8(%rbp)
movl -0x2b8(%rbp), %eax
movl %eax, -0x900(%rbp)
leaq -0x250(%rbp), %rdi
callq 0xa24d0
movl %eax, -0x8fc(%rbp)
jmp 0xd2e10
movl -0x900(%rbp), %eax
movl -0x8fc(%rbp), %ecx
cmpl %ecx, %eax
jae 0xd38a0
movl -0x2b8(%rbp), %esi
leaq -0x250(%rbp), %rdi
callq 0x9e400
movq %rax, -0x908(%rbp)
jmp 0xd2e3f
movq -0x908(%rbp), %rsi
leaq -0x2e0(%rbp), %rdi
callq 0xa2280
jmp 0xd2e54
leaq -0x2e0(%rbp), %rdi
callq 0xa3a40
movb %al, -0x909(%rbp)
jmp 0xd2e68
movb -0x909(%rbp), %al
testb $0x1, %al
jne 0xd2e77
jmp 0xd2f6d
movb $0x1, -0x321(%rbp)
movl $0x10, %edi
callq 0x99e80
movq %rax, -0x918(%rbp)
leaq -0x50(%rbp), %rdi
callq 0xa4310
movq %rax, %rsi
leaq -0x320(%rbp), %rdi
callq 0x998d0
jmp 0xd2ea9
leaq 0x308ea(%rip), %rsi     # 0x10379a
leaq -0x300(%rbp), %rdi
leaq -0x320(%rbp), %rdx
callq 0xa2cb0
jmp 0xd2ec5
movq -0x918(%rbp), %rdi
leaq -0x300(%rbp), %rsi
callq 0xa2430
jmp 0xd2eda
movq -0x918(%rbp), %rdi
movb $0x0, -0x321(%rbp)
movq 0x600e9(%rip), %rsi     # 0x132fd8
movq 0x5feaa(%rip), %rdx     # 0x132da0
callq 0xa2fe0
jmp 0xd3d93
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xd388f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xd2f51
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xd2f45
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
leaq -0x300(%rbp), %rdi
callq 0xa4f00
leaq -0x320(%rbp), %rdi
callq 0xa4f00
testb $0x1, -0x321(%rbp)
jne 0xd2f5c
jmp 0xd2f68
movq -0x918(%rbp), %rdi
callq 0x9b9c0
jmp 0xd388f
leaq 0x30850(%rip), %rsi     # 0x1037c4
leaq -0x2e0(%rbp), %rdi
callq 0x99470
movq %rax, -0x920(%rbp)
jmp 0xd2f89
movq -0x920(%rbp), %rdi
callq 0xa3a40
movb %al, -0x921(%rbp)
jmp 0xd2f9d
movb -0x921(%rbp), %al
testb $0x1, %al
jne 0xd2fac
jmp 0xd3091
movb $0x1, -0x369(%rbp)
movl $0x10, %edi
callq 0x99e80
movq %rax, -0x930(%rbp)
leaq -0x50(%rbp), %rdi
callq 0xa4310
movq %rax, %rsi
leaq -0x368(%rbp), %rdi
callq 0x998d0
jmp 0xd2fde
leaq 0x307e8(%rip), %rsi     # 0x1037cd
leaq -0x348(%rbp), %rdi
leaq -0x368(%rbp), %rdx
callq 0xa2cb0
jmp 0xd2ffa
movq -0x930(%rbp), %rdi
leaq -0x348(%rbp), %rsi
callq 0xa2430
jmp 0xd300f
movq -0x930(%rbp), %rdi
movb $0x0, -0x369(%rbp)
movq 0x5ffb4(%rip), %rsi     # 0x132fd8
movq 0x5fd75(%rip), %rdx     # 0x132da0
callq 0xa2fe0
jmp 0xd3d93
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xd3075
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xd3069
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
leaq -0x348(%rbp), %rdi
callq 0xa4f00
leaq -0x368(%rbp), %rdi
callq 0xa4f00
testb $0x1, -0x369(%rbp)
jne 0xd3080
jmp 0xd308c
movq -0x930(%rbp), %rdi
callq 0x9b9c0
jmp 0xd388f
leaq 0x3072c(%rip), %rsi     # 0x1037c4
leaq -0x2e0(%rbp), %rdi
callq 0x99470
movq %rax, -0x938(%rbp)
jmp 0xd30ad
movq -0x938(%rbp), %rsi
leaq -0x390(%rbp), %rdi
callq 0xa3d30
jmp 0xd30c2
leaq 0x3073b(%rip), %rsi     # 0x103804
leaq -0x2e0(%rbp), %rdi
callq 0x99470
movq %rax, -0x940(%rbp)
jmp 0xd30de
leaq 0x2fad7(%rip), %rsi     # 0x102bbc
leaq -0x3b8(%rbp), %rdi
callq 0xa2ce0
jmp 0xd30f3
movq -0x940(%rbp), %rdi
leaq -0x3b8(%rbp), %rsi
callq 0xa04c0
movb %al, -0x941(%rbp)
jmp 0xd310e
leaq -0x3b8(%rbp), %rdi
callq 0x9a180
movb -0x941(%rbp), %al
testb $0x1, %al
jne 0xd3129
jmp 0xd32d9
leaq -0x3e8(%rbp), %rdi
leaq -0x390(%rbp), %rsi
callq 0x998d0
jmp 0xd313e
movq -0x868(%rbp), %rsi
leaq -0x3c8(%rbp), %rdi
leaq -0x3e8(%rbp), %rdx
callq 0x982a0
jmp 0xd315a
leaq -0x3e8(%rbp), %rdi
callq 0xa4f00
leaq -0xd0(%rbp), %rdi
callq 0x9e9a0
movq %rax, -0x958(%rbp)
leaq -0x3f8(%rbp), %rdi
movq %rdi, -0x950(%rbp)
leaq -0x3c8(%rbp), %rsi
callq 0x9cbf0
movq -0x958(%rbp), %rdi
movq -0x950(%rbp), %rsi
callq 0x9ac70
jmp 0xd31a8
leaq -0x3f8(%rbp), %rdi
callq 0x9f150
leaq -0x3c8(%rbp), %rdi
callq 0x9f150
jmp 0xd32a2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xd3883
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
leaq -0x3b8(%rbp), %rdi
callq 0x9a180
jmp 0xd3883
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xd323f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
leaq -0x3e8(%rbp), %rdi
callq 0xa4f00
jmp 0xd323f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
leaq -0x3f8(%rbp), %rdi
callq 0x9f150
leaq -0x3c8(%rbp), %rdi
callq 0x9f150
movl -0x14(%rbp), %eax
movl $0x2, %ecx
cmpl %ecx, %eax
jne 0xd3883
movq -0x10(%rbp), %rdi
callq 0x99540
movq %rax, -0x400(%rbp)
leaq -0x430(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
leaq -0x390(%rbp), %rdx
callq 0xa4af0
jmp 0xd327b
leaq -0x30(%rbp), %rdi
leaq -0x430(%rbp), %rsi
callq 0x9c860
jmp 0xd328d
leaq -0x430(%rbp), %rdi
callq 0x98a90
callq 0xa2520
jmp 0xd32a0
jmp 0xd32a2
jmp 0xd3857
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xd32cd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
leaq -0x430(%rbp), %rdi
callq 0x98a90
callq 0xa2520
jmp 0xd32d4
jmp 0xd3883
leaq -0x390(%rbp), %rdi
callq 0x99560
movl %eax, -0x95c(%rbp)
jmp 0xd32ed
movl -0x95c(%rbp), %eax
movl %eax, -0x434(%rbp)
jmp 0xd34bb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
movl -0x14(%rbp), %eax
movl $0x3, %ecx
cmpl %ecx, %eax
jne 0xd3883
movq -0x10(%rbp), %rdi
callq 0x99540
movq %rax, -0x440(%rbp)
movb $0x1, -0x4e1(%rbp)
movl $0x10, %edi
callq 0x99e80
movq %rax, -0x968(%rbp)
leaq -0x50(%rbp), %rdi
callq 0xa4310
movq %rax, %rsi
leaq -0x4e0(%rbp), %rdi
callq 0x998d0
jmp 0xd335c
leaq 0x304ad(%rip), %rsi     # 0x103810
leaq -0x4c0(%rbp), %rdi
leaq -0x4e0(%rbp), %rdx
callq 0xa2cb0
jmp 0xd3378
leaq 0x304ae(%rip), %rdx     # 0x10382d
leaq -0x4a0(%rbp), %rdi
leaq -0x4c0(%rbp), %rsi
callq 0x98100
jmp 0xd3394
leaq -0x480(%rbp), %rdi
leaq -0x4a0(%rbp), %rsi
leaq -0x390(%rbp), %rdx
callq 0xa15c0
jmp 0xd33b0
leaq 0x3037b(%rip), %rdx     # 0x103732
leaq -0x460(%rbp), %rdi
leaq -0x480(%rbp), %rsi
callq 0x98100
jmp 0xd33cc
movq -0x968(%rbp), %rdi
leaq -0x460(%rbp), %rsi
callq 0xa2430
jmp 0xd33e1
movq -0x968(%rbp), %rdi
movb $0x0, -0x4e1(%rbp)
movq 0x5fbe2(%rip), %rsi     # 0x132fd8
movq 0x5f9a3(%rip), %rdx     # 0x132da0
callq 0xa2fe0
jmp 0xd3d93
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xd3498
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xd348c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xd3480
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xd3474
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xd3468
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
leaq -0x460(%rbp), %rdi
callq 0xa4f00
leaq -0x480(%rbp), %rdi
callq 0xa4f00
leaq -0x4a0(%rbp), %rdi
callq 0xa4f00
leaq -0x4c0(%rbp), %rdi
callq 0xa4f00
leaq -0x4e0(%rbp), %rdi
callq 0xa4f00
testb $0x1, -0x4e1(%rbp)
jne 0xd34a3
jmp 0xd34af
movq -0x968(%rbp), %rdi
callq 0x9b9c0
callq 0xa2520
jmp 0xd34b6
jmp 0xd3883
leaq -0x500(%rbp), %rdi
callq 0x9e150
movq -0x868(%rbp), %rsi
movl -0x434(%rbp), %edx
leaq -0x510(%rbp), %rdi
callq 0xa4220
jmp 0xd34e2
leaq -0x500(%rbp), %rdi
movq %rdi, -0x970(%rbp)
leaq -0x510(%rbp), %rsi
movq %rsi, -0x978(%rbp)
callq 0xa2b70
movq -0x978(%rbp), %rdi
callq 0xa2ae0
movq -0x970(%rbp), %rdi
callq 0x9d390
movq %rax, %rsi
leaq -0x530(%rbp), %rdi
callq 0x9f700
jmp 0xd352c
leaq 0x302fd(%rip), %rsi     # 0x103830
leaq -0x530(%rbp), %rdi
callq 0xa4e10
movb %al, -0x979(%rbp)
jmp 0xd3547
leaq -0x530(%rbp), %rdi
callq 0xa4f00
movb -0x979(%rbp), %al
testb $0x1, %al
jne 0xd3562
jmp 0xd3747
leaq -0x6b8(%rbp), %rdi
callq 0x9b940
jmp 0xd3570
leaq -0x6a8(%rbp), %rdi
leaq 0x30121(%rip), %rsi     # 0x10369f
callq 0x9dba0
movq %rax, -0x988(%rbp)
jmp 0xd358c
leaq -0x500(%rbp), %rdi
callq 0x9d390
movq %rax, %rdi
callq 0x9d720
movl %eax, -0x98c(%rbp)
jmp 0xd35a8
movl -0x98c(%rbp), %esi
movq -0x988(%rbp), %rdi
callq 0xa0150
movq %rax, -0x998(%rbp)
jmp 0xd35c3
movq -0x998(%rbp), %rdi
leaq 0x31512(%rip), %rsi     # 0x104ae3
callq 0x9dba0
movq %rax, -0x9a0(%rbp)
jmp 0xd35df
leaq -0x500(%rbp), %rdi
callq 0x9d390
movq %rax, %rsi
leaq -0x6d8(%rbp), %rdi
callq 0x9e500
jmp 0xd35fc
movq -0x9a0(%rbp), %rdi
leaq -0x6d8(%rbp), %rsi
callq 0x9cf40
movq %rax, -0x9a8(%rbp)
jmp 0xd3618
movq -0x9a8(%rbp), %rdi
leaq 0x30215(%rip), %rsi     # 0x10383b
callq 0x9dba0
jmp 0xd362d
leaq -0x6d8(%rbp), %rdi
callq 0xa4f00
movb $0x1, -0x6f9(%rbp)
movl $0x10, %edi
callq 0x99e80
movq %rax, -0x9b0(%rbp)
leaq -0x6f8(%rbp), %rdi
leaq -0x6b8(%rbp), %rsi
callq 0x9da80
jmp 0xd3666
movq -0x9b0(%rbp), %rdi
leaq -0x6f8(%rbp), %rsi
callq 0xa2430
jmp 0xd367b
movq -0x9b0(%rbp), %rdi
movb $0x0, -0x6f9(%rbp)
movq 0x5f948(%rip), %rsi     # 0x132fd8
movq 0x5f709(%rip), %rdx     # 0x132da0
callq 0xa2fe0
jmp 0xd3d93
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xd3849
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
leaq -0x530(%rbp), %rdi
callq 0xa4f00
jmp 0xd3849
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xd3736
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
leaq -0x6d8(%rbp), %rdi
callq 0xa4f00
jmp 0xd3736
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xd371d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
leaq -0x6f8(%rbp), %rdi
callq 0xa4f00
testb $0x1, -0x6f9(%rbp)
jne 0xd3728
jmp 0xd3734
movq -0x9b0(%rbp), %rdi
callq 0x9b9c0
jmp 0xd3736
leaq -0x6b8(%rbp), %rdi
callq 0x9bca0
jmp 0xd3849
leaq 0x30160(%rip), %rsi     # 0x1038ae
leaq -0x2e0(%rbp), %rdi
callq 0x99470
movq %rax, -0x9b8(%rbp)
jmp 0xd3763
leaq 0x2f452(%rip), %rsi     # 0x102bbc
leaq -0x728(%rbp), %rdi
callq 0xa2ce0
jmp 0xd3778
movq -0x9b8(%rbp), %rdi
leaq -0x728(%rbp), %rsi
callq 0xa04c0
movb %al, -0x9b9(%rbp)
jmp 0xd3793
leaq -0x728(%rbp), %rdi
callq 0x9a180
movb -0x9b9(%rbp), %al
testb $0x1, %al
jne 0xd37ab
jmp 0xd37ce
movb $0x1, -0x4f0(%rbp)
jmp 0xd37d5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
leaq -0x728(%rbp), %rdi
callq 0x9a180
jmp 0xd3849
movb $0x0, -0x4f0(%rbp)
leaq -0xd0(%rbp), %rdi
callq 0x9e9a0
movq %rax, -0x9d0(%rbp)
leaq -0x740(%rbp), %rdi
movq %rdi, -0x9c8(%rbp)
leaq -0x500(%rbp), %rsi
callq 0x9e970
movq -0x9d0(%rbp), %rdi
movq -0x9c8(%rbp), %rsi
callq 0xa03c0
jmp 0xd3817
leaq -0x740(%rbp), %rdi
callq 0xa4580
leaq -0x500(%rbp), %rdi
callq 0xa4580
jmp 0xd3857
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
leaq -0x740(%rbp), %rdi
callq 0xa4580
leaq -0x500(%rbp), %rdi
callq 0xa4580
jmp 0xd3883
leaq -0x390(%rbp), %rdi
callq 0xa4f00
leaq -0x2e0(%rbp), %rdi
callq 0x9a180
movl -0x2b8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2b8(%rbp)
jmp 0xd2df0
leaq -0x390(%rbp), %rdi
callq 0xa4f00
leaq -0x2e0(%rbp), %rdi
callq 0x9a180
jmp 0xd3943
leaq -0x750(%rbp), %rdi
movq %rdi, -0x9d8(%rbp)
leaq -0xd0(%rbp), %rsi
callq 0x9cbf0
movq -0x868(%rbp), %rdi
movq -0x9d8(%rbp), %rsi
callq 0x9bf20
jmp 0xd38cf
leaq -0x750(%rbp), %rdi
callq 0x9f150
leaq -0x250(%rbp), %rdi
callq 0x9a180
leaq -0xd0(%rbp), %rdi
callq 0x9f150
leaq -0xc0(%rbp), %rdi
callq 0xa4f00
leaq -0xa0(%rbp), %rdi
callq 0xa4f00
leaq -0x80(%rbp), %rdi
callq 0x9a180
leaq -0x50(%rbp), %rdi
xorl %esi, %esi
callq 0x99220
movq %rax, -0x758(%rbp)
jmp 0xd26dd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
leaq -0x750(%rbp), %rdi
callq 0x9f150
leaq -0x250(%rbp), %rdi
callq 0x9a180
leaq -0xd0(%rbp), %rdi
callq 0x9f150
leaq -0xc0(%rbp), %rdi
callq 0xa4f00
leaq -0xa0(%rbp), %rdi
callq 0xa4f00
leaq -0x80(%rbp), %rdi
callq 0x9a180
jmp 0xd3c24
leaq -0x760(%rbp), %rdi
callq 0x9f030
leaq -0x30(%rbp), %rdi
callq 0x99630
movq %rax, -0x768(%rbp)
movq -0x768(%rbp), %rax
movq %rax, -0x760(%rbp)
leaq -0x30(%rbp), %rdi
callq 0x9e220
movq %rax, -0x770(%rbp)
leaq -0x760(%rbp), %rdi
leaq -0x770(%rbp), %rsi
callq 0xa0720
testb $0x1, %al
jne 0xd39d7
jmp 0xd3c0d
leaq -0x760(%rbp), %rdi
movq %rdi, -0x9e8(%rbp)
callq 0xa1840
movq %rax, %rsi
leaq -0x780(%rbp), %rdi
movq %rdi, -0x9f0(%rbp)
callq 0x9cbf0
movq -0x9f0(%rbp), %rdi
callq 0x9e9a0
movq -0x9e8(%rbp), %rdi
movq %rax, -0x9e0(%rbp)
callq 0xa1840
movq %rax, %rsi
addq $0x10, %rsi
leaq -0x7b0(%rbp), %rdi
callq 0x998d0
jmp 0xd3a34
movq -0x868(%rbp), %rsi
leaq -0x790(%rbp), %rdi
leaq -0x7b0(%rbp), %rdx
callq 0x982a0
jmp 0xd3a50
movq -0x9e0(%rbp), %rdi
leaq -0x790(%rbp), %rsi
callq 0x9ac70
jmp 0xd3a65
leaq -0x790(%rbp), %rdi
callq 0x9f150
leaq -0x7b0(%rbp), %rdi
callq 0xa4f00
jmp 0xd3bd9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xd3ac2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xd3ab6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
leaq -0x790(%rbp), %rdi
callq 0x9f150
leaq -0x7b0(%rbp), %rdi
callq 0xa4f00
movl -0x14(%rbp), %eax
movl $0x2, %ecx
cmpl %ecx, %eax
jne 0xd3bff
movq -0x10(%rbp), %rdi
callq 0x99540
movq %rax, -0x7b8(%rbp)
movb $0x1, -0x7f9(%rbp)
movl $0x10, %edi
callq 0x99e80
movq %rax, -0x9f8(%rbp)
leaq -0x760(%rbp), %rdi
callq 0xa1840
movq %rax, %rdx
addq $0x10, %rdx
leaq 0x2fda5(%rip), %rsi     # 0x1038b9
leaq -0x7f8(%rbp), %rdi
callq 0x9cf50
jmp 0xd3b22
leaq 0x2fda6(%rip), %rdx     # 0x1038cf
leaq -0x7d8(%rbp), %rdi
leaq -0x7f8(%rbp), %rsi
callq 0x98100
jmp 0xd3b3e
movq -0x9f8(%rbp), %rdi
leaq -0x7d8(%rbp), %rsi
callq 0xa2430
jmp 0xd3b53
movq -0x9f8(%rbp), %rdi
movb $0x0, -0x7f9(%rbp)
movq 0x5f470(%rip), %rsi     # 0x132fd8
movq 0x5f231(%rip), %rdx     # 0x132da0
callq 0xa2fe0
jmp 0xd3d93
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xd3bb9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xd3bad
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
leaq -0x7d8(%rbp), %rdi
callq 0xa4f00
leaq -0x7f8(%rbp), %rdi
callq 0xa4f00
testb $0x1, -0x7f9(%rbp)
jne 0xd3bc4
jmp 0xd3bd0
movq -0x9f8(%rbp), %rdi
callq 0x9b9c0
callq 0xa2520
jmp 0xd3bd7
jmp 0xd3bff
leaq -0x780(%rbp), %rdi
callq 0x9f150
leaq -0x760(%rbp), %rdi
xorl %esi, %esi
callq 0x9bea0
movq %rax, -0x808(%rbp)
jmp 0xd39ab
leaq -0x780(%rbp), %rdi
callq 0x9f150
jmp 0xd3c24
leaq -0x48(%rbp), %rdi
callq 0x9ba40
leaq -0x30(%rbp), %rdi
callq 0x9ad60
jmp 0xd3d0b
leaq -0x48(%rbp), %rdi
callq 0x9ba40
leaq -0x30(%rbp), %rdi
callq 0x9ad60
movl -0x14(%rbp), %eax
movl $0x1, %ecx
cmpl %ecx, %eax
jne 0xd3d82
movq -0x10(%rbp), %rdi
callq 0x99540
movq %rax, -0x810(%rbp)
movb $0x1, -0x852(%rbp)
movl $0x10, %edi
callq 0x99e80
movq %rax, -0xa10(%rbp)
movq -0x810(%rbp), %rdi
movq (%rdi), %rax
movq 0x10(%rax), %rax
callq *%rax
movq %rax, -0xa08(%rbp)
leaq -0x851(%rbp), %rdi
movq %rdi, -0xa00(%rbp)
callq 0xa35e0
movq -0xa08(%rbp), %rsi
movq -0xa00(%rbp), %rdx
leaq -0x850(%rbp), %rdi
callq 0xa0510
jmp 0xd3cb4
leaq 0x2fc24(%rip), %rsi     # 0x1038df
leaq -0x830(%rbp), %rdi
leaq -0x850(%rbp), %rdx
callq 0xa2cb0
jmp 0xd3cd0
movq -0xa10(%rbp), %rdi
leaq -0x830(%rbp), %rsi
callq 0xa2430
jmp 0xd3ce5
movq -0xa10(%rbp), %rdi
movb $0x0, -0x852(%rbp)
movq 0x5f2de(%rip), %rsi     # 0x132fd8
movq 0x5f09f(%rip), %rdx     # 0x132da0
callq 0xa2fe0
jmp 0xd3d93
jmp 0xd3d79
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xd3d4d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xd3d41
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
leaq -0x830(%rbp), %rdi
callq 0xa4f00
leaq -0x850(%rbp), %rdi
callq 0xa4f00
leaq -0x851(%rbp), %rdi
callq 0x9e350
testb $0x1, -0x852(%rbp)
jne 0xd3d64
jmp 0xd3d70
movq -0xa10(%rbp), %rdi
callq 0x9b9c0
callq 0xa2520
jmp 0xd3d77
jmp 0xd3d82
addq $0xa10, %rsp            # imm = 0xA10
popq %rbp
retq
movq -0x10(%rbp), %rdi
callq 0xa3520
movq %rax, %rdi
callq 0xa6900
nopw %cs:(%rax,%rax)