// File: /workspace/github_cpp_makefile_star2_O1/Mirrvin[P]DragonsResurrectingInc/./specialists/TailSpecialist.cpp
// Function: TailSpecialist::handle(packet_t)
bool handle(packet_t packet) {
        bool success = true;
        switch(packet.status.MPI_TAG){
            case NEED_TAIL:
                success = this->handleNeedTail(packet); break;
            case NEED_TAIL_ACK:
                success = this->handleNeedTailAck(packet); break;
            case FINISH_NEED_TAIL:
                success = this->handleFinishNeedTail(packet); break;
            case AVENGERS_ASSEMBLED:
                success = this->handleAvengersAssembled(packet); break;
            case REQUEST_ORDER_PRIORITY:
                success = this->handleRequestOrderPriority(packet); break;
            case REPLY_ORDER_PRIORITY:
                success = this->handleReplyOrderPriority(packet); break;
            case FREE_ORDER_PRIORITY:
                success = this->handleFreeOrderPriority(packet); break;
            case NEW_ORDER:
                success = this->handleNewOrder(packet); break;
            case DONE_PAPERWORK:
                success = this->handleDonePaperwork(packet); break;
            case RESURRECTION_FINISHED:
                success = this->handleResurrectionFinished(packet); break;
            case NEED_TAIL_POSITIVE:
                success = this->handleNeedTailPositive(packet); break;
            case NEED_TAIL_NEGATIVE:
                success = this->handleNeedTailNegative(packet); break;
            case END:
                success = this->handleEnd(packet); break;
            default:
                printf("%u: No handler for tag %d in HeadSpecialist\n",Monitor::getLamport(), packet.status.MPI_TAG); break;
        }
        return success;
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
subq $0x30, %rsp
movl 0x24(%rbp), %r14d
leal -0x64(%r14), %ecx
cmpl $0x13, %ecx
ja 0x4743
movq %rdi, %rbx
leaq 0x10(%rbp), %rax
leaq 0x2a36(%rip), %rdx      # 0x7084
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
incl 0x24(%rbx)
cmpb $0x1, 0x29(%rbx)
je 0x47a3
jmp 0x47ab
movq %rbx, %rdi
addq $0x30, %rsp
popq %rbx
popq %r14
popq %rbp
jmp 0x524a
movq %rbx, %rdi
addq $0x30, %rsp
popq %rbx
popq %r14
popq %rbp
jmp 0x48ee
movq %rbx, %rdi
addq $0x30, %rsp
popq %rbx
popq %r14
popq %rbp
jmp 0x5352
movl 0x10(%rax), %eax
movl %eax, 0x1c(%rbx)
movl 0x8(%rbx), %ecx
leaq -0x40(%rbp), %rdi
movq %rbx, %rsi
movl $0x71, %edx
callq 0x5fa0
movl 0x18(%rbx), %ecx
leaq -0x40(%rbp), %rdi
movq %rbx, %rsi
movl $0x71, %edx
callq 0x5fa0
movb $0x0, 0x28(%rbx)
movb $0x1, 0x10(%rbx)
jmp 0x47ab
cmpb $0x1, 0x2a(%rbx)
jne 0x47ab
movl 0x8(%rbx), %ecx
leaq -0x40(%rbp), %rdi
movq %rbx, %rsi
movl $0x77, %edx
callq 0x5fa0
jmp 0x47ab
movq 0x20(%rax), %rcx
movq %rcx, -0x20(%rbp)
movups (%rax), %xmm0
movups 0x10(%rax), %xmm1
movaps %xmm1, -0x30(%rbp)
movaps %xmm0, -0x40(%rbp)
cmpb $0x0, 0x10(%rbx)
jne 0x47ab
movq 0x38(%rbx), %rsi
cmpq 0x40(%rbx), %rsi
je 0x47c6
movups (%rax), %xmm0
movups 0x10(%rax), %xmm1
movq 0x20(%rax), %rax
movq %rax, 0x20(%rsi)
movups %xmm1, 0x10(%rsi)
movups %xmm0, (%rsi)
addq $0x28, 0x38(%rbx)
jmp 0x47ab
callq 0x5b08
leaq 0x2a80(%rip), %rdi      # 0x71cf
movl %eax, %esi
movl %r14d, %edx
xorl %eax, %eax
callq 0x2030
jmp 0x47ab
movq %rbx, %rdi
addq $0x30, %rsp
popq %rbx
popq %r14
popq %rbp
jmp 0x47d8
movq %rbx, %rdi
addq $0x30, %rsp
popq %rbx
popq %r14
popq %rbp
jmp 0x6334
movl $0x0, 0x18(%rbx)
xorl %eax, %eax
movb %al, 0x28(%rbx)
movb %al, 0x10(%rbx)
jmp 0x47ab
movq %rbx, %rdi
addq $0x30, %rsp
popq %rbx
popq %r14
popq %rbp
jmp 0x5122
decl 0x20(%rbx)
jne 0x47ab
movq %rbx, %rdi
callq 0x54dc
movb $0x1, %al
addq $0x30, %rsp
popq %rbx
popq %r14
popq %rbp
retq
movq %rbx, %rdi
addq $0x30, %rsp
popq %rbx
popq %r14
popq %rbp
jmp 0x51e2
addq $0x30, %rbx
leaq -0x40(%rbp), %rdx
movq %rbx, %rdi
callq 0x390c
jmp 0x47ab