LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: adamnovak[P]rlcsa/rlcsa_builder.cpp
// Function: CSA::RLCSABuilder::getRanks(unsigned char*, unsigned int, std::vector<unsigned int, std::allocator<unsigned int>>&)
usint*
RLCSABuilder::getRanks(uchar* sequence, usint length, std::vector<usint>& end_markers)
{
  double start = readTimer();

  usint sequences = 0;
  for(usint i = 0; i < length; i++)
  {
    if(sequence[i] == 0) { end_markers.push_back(i); sequences++; }
  }

  usint* ranks = new usint[length];
  #ifdef MULTITHREAD_SUPPORT
  usint chunk = std::max((usint)1, sequences / (8 * this->threads));
  #endif
  #pragma omp parallel for schedule(dynamic, chunk)
  for(usint i = 0; i < sequences; i++)
  {
    usint begin = (i > 0 ? end_markers[i - 1] + 1 : 0);
    this->index->reportPositions(sequence + begin, end_markers[i] - begin, ranks + begin);
  }

  this->index->strip();

  this->search_time += readTimer() - start;
  return ranks;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movl %edx, -0x14(%rbp)
movq %rcx, -0x20(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x48(%rbp)
callq 0x263b0
movsd %xmm0, -0x28(%rbp)
movl $0x0, -0x2c(%rbp)
movl $0x0, -0x30(%rbp)
movl -0x30(%rbp), %eax
cmpl -0x14(%rbp), %eax
jae 0x14892
movq -0x10(%rbp), %rax
movl -0x30(%rbp), %ecx
movzbl (%rax,%rcx), %eax
cmpl $0x0, %eax
jne 0x14885
movq -0x20(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0xef90
movl -0x2c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2c(%rbp)
jmp 0x14887
movl -0x30(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x30(%rbp)
jmp 0x14857
movl -0x14(%rbp), %eax
movl $0x4, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x3030
movq %rax, -0x38(%rbp)
movl $0x0, -0x3c(%rbp)
movl -0x3c(%rbp), %eax
cmpl -0x2c(%rbp), %eax
jae 0x14952
cmpl $0x0, -0x3c(%rbp)
jbe 0x148f0
movq -0x20(%rbp), %rdi
movl -0x3c(%rbp), %eax
subl $0x1, %eax
movl %eax, %eax
movl %eax, %esi
callq 0x14c50
movl (%rax), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x148f7
xorl %eax, %eax
movl %eax, -0x4c(%rbp)
jmp 0x148f7
movq -0x48(%rbp), %rax
movl -0x4c(%rbp), %ecx
movl %ecx, -0x40(%rbp)
movq (%rax), %rax
movq %rax, -0x60(%rbp)
movq -0x10(%rbp), %rax
movl -0x40(%rbp), %ecx
addq %rcx, %rax
movq %rax, -0x58(%rbp)
movq -0x20(%rbp), %rdi
movl -0x3c(%rbp), %eax
movl %eax, %esi
callq 0x14c50
movq -0x60(%rbp), %rdi
movq -0x58(%rbp), %rsi
movl (%rax), %edx
subl -0x40(%rbp), %edx
movq -0x38(%rbp), %rcx
movl -0x40(%rbp), %eax
shlq $0x2, %rax
addq %rax, %rcx
callq 0xa230
movl -0x3c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x3c(%rbp)
jmp 0x148c1
movq -0x48(%rbp), %rax
movq (%rax), %rdi
callq 0x9300
callq 0x263b0
movq -0x48(%rbp), %rax
subsd -0x28(%rbp), %xmm0
addsd 0x30(%rax), %xmm0
movsd %xmm0, 0x30(%rax)
movq -0x38(%rbp), %rax
addq $0x60, %rsp
popq %rbp
retq
// File: adamnovak[P]rlcsa/rlcsa_builder.cpp
// Function: CSA::RLCSABuilder::mergeRLCSA(CSA::RLCSA*, unsigned int*, unsigned int)
void
RLCSABuilder::mergeRLCSA(RLCSA* increment, usint* ranks, usint length)
{
  double mark = readTimer();

  RLCSA* merged = new RLCSA(*(this->index), *increment, ranks, this->block_size, this->threads);
  delete[] ranks;
  delete this->index;
  delete increment;
  this->index = merged;

  this->merge_time += readTimer() - mark;

  this->ok &= this->index->isOk();
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x70, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movl %ecx, -0x1c(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x50(%rbp)
callq 0x263b0
movsd %xmm0, -0x28(%rbp)
movl $0x830, %edi            # imm = 0x830
callq 0x32c0
movq %rax, %rdi
movq -0x50(%rbp), %rax
movq %rdi, %rcx
movq %rcx, -0x48(%rbp)
movq (%rax), %rsi
movq -0x10(%rbp), %rdx
movq -0x18(%rbp), %rcx
movl 0x8(%rax), %r8d
movl 0x14(%rax), %r9d
callq 0x8f00
jmp 0x149db
movq -0x48(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x58(%rbp)
cmpq $0x0, %rax
je 0x149fa
movq -0x58(%rbp), %rdi
callq 0x33d0
movq -0x50(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x60(%rbp)
cmpq $0x0, %rax
je 0x14a22
movq -0x60(%rbp), %rdi
callq 0x9870
movq -0x60(%rbp), %rdi
movl $0x830, %esi            # imm = 0x830
callq 0x32d0
movq -0x10(%rbp), %rax
movq %rax, -0x68(%rbp)
cmpq $0x0, %rax
je 0x14a47
movq -0x68(%rbp), %rdi
callq 0x9870
movq -0x68(%rbp), %rdi
movl $0x830, %esi            # imm = 0x830
callq 0x32d0
movq -0x50(%rbp), %rax
movq -0x30(%rbp), %rcx
movq %rcx, (%rax)
callq 0x263b0
movq -0x50(%rbp), %rax
subsd -0x28(%rbp), %xmm0
addsd 0x40(%rax), %xmm0
movsd %xmm0, 0x40(%rax)
movq (%rax), %rdi
callq 0x6410
movb %al, %cl
movq -0x50(%rbp), %rax
andb $0x1, %cl
movzbl %cl, %edx
movb 0x24(%rax), %cl
andb $0x1, %cl
movzbl %cl, %ecx
andl %edx, %ecx
cmpl $0x0, %ecx
setne %cl
andb $0x1, %cl
movb %cl, 0x24(%rax)
addq $0x70, %rsp
popq %rbp
retq
movq -0x48(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
movl $0x830, %esi            # imm = 0x830
callq 0x32d0
movq -0x38(%rbp), %rdi
callq 0x3520
nop
// File: adamnovak[P]rlcsa/rlcsa_builder.cpp
// Function: CSA::RLCSABuilder::getRLCSA()
RLCSA*
RLCSABuilder::getRLCSA()
{
  if(this->chars > 0) { this->flush(); }

  RLCSA* temp = this->index;
  this->reset();

  return temp;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x18(%rbp)
cmpl $0x0, 0x20(%rax)
jbe 0x14ae3
movq -0x18(%rbp), %rdi
callq 0x13d90
movq -0x18(%rbp), %rdi
movq (%rdi), %rax
movq %rax, -0x10(%rbp)
callq 0x13a00
movq -0x10(%rbp), %rax
addq $0x20, %rsp
popq %rbp
retq
nopl (%rax)
// File: adamnovak[P]rlcsa/rlcsa_builder.cpp
// Function: CSA::RLCSABuilder::getBWT(unsigned int&)
char*
RLCSABuilder::getBWT(usint& length)
{
  this->flush();

  if(this->index == 0 || !(this->ok))
  {
    length = 0;
    return 0;
  }

  length = this->index->getSize() + this->index->getNumberOfSequences();
  return (char*)(this->index->readBWT());
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x10(%rbp), %rdi
movq %rdi, -0x20(%rbp)
callq 0x13d90
movq -0x20(%rbp), %rax
cmpq $0x0, (%rax)
je 0x14b31
movq -0x20(%rbp), %rax
testb $0x1, 0x24(%rax)
jne 0x14b45
movq -0x18(%rbp), %rax
movl $0x0, (%rax)
movq $0x0, -0x8(%rbp)
jmp 0x14b7f
movq -0x20(%rbp), %rax
movq (%rax), %rdi
callq 0x6430
movl %eax, %ecx
movq -0x20(%rbp), %rax
movl %ecx, -0x24(%rbp)
movq (%rax), %rdi
callq 0x14c30
movl -0x24(%rbp), %edx
movl %eax, %ecx
movq -0x20(%rbp), %rax
addl %ecx, %edx
movq -0x18(%rbp), %rcx
movl %edx, (%rcx)
movq (%rax), %rdi
callq 0xbfa0
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x30, %rsp
popq %rbp
retq
nopl (%rax)
// File: ArthoPacini[P]blockchaincpp/./timestamp_as_string.hpp
// Function: getTimestampAsString[abi:cxx11](std::chrono::time_point<std::chrono::_V2::system_clock, std::chrono::duration<long, std::ratio<1l, 1000000000l>>>)
std::string getTimestampAsString(std::chrono::time_point<std::chrono::system_clock> chrono_inputTime)
{
    std::time_t inputTime = std::chrono::system_clock::to_time_t(chrono_inputTime);
    std::ostringstream os;
    os << std::put_time(std::localtime(&inputTime), "%c");
    return os.str();
}

// Assembly:
subq $0x1d8, %rsp            # imm = 0x1D8
movq %rdi, 0x8(%rsp)
movq %rdi, %rax
movq %rax, 0x10(%rsp)
movq %rdi, 0x1d0(%rsp)
movq %rsi, 0x1c8(%rsp)
leaq 0x1c8(%rsp), %rdi
callq 0x7360
movq %rax, 0x1c0(%rsp)
leaq 0x48(%rsp), %rdi
callq 0x5610
leaq 0x1c0(%rsp), %rdi
callq 0x53c0
movq %rax, %rdi
leaq 0x3684b(%rip), %rsi     # 0x3cb55
callq 0x7330
movq %rdx, 0x18(%rsp)
movq %rax, 0x20(%rsp)
jmp 0x631b
movq 0x18(%rsp), %rax
movq 0x20(%rsp), %rcx
movq %rcx, 0x38(%rsp)
movq %rax, 0x40(%rsp)
movq 0x38(%rsp), %rsi
movq 0x40(%rsp), %rdx
leaq 0x48(%rsp), %rdi
callq 0x6fc0
jmp 0x6345
movq 0x8(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x54e0
jmp 0x6356
leaq 0x48(%rsp), %rdi
callq 0x50f0
movq 0x10(%rsp), %rax
addq $0x1d8, %rsp            # imm = 0x1D8
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x30(%rsp)
movl %eax, 0x2c(%rsp)
leaq 0x48(%rsp), %rdi
callq 0x50f0
movq 0x30(%rsp), %rdi
callq 0x5790
nop
// File: ArthoPacini[P]blockchaincpp/./Blockchain.hpp
// Function: Blockchain::push_transaction(Transaction)
void push_transaction(Transaction transaction)
    {
        if(chain.back().push_transaction(transaction))    
            return;

        chain.back().mine(difficulty);
        chain.push_back({chain.size(), chain.back().calculateHash(), difficulty, maxTransactionsCount, transaction});
    }

// Assembly:
subq $0x208, %rsp            # imm = 0x208
movq %rsi, 0x28(%rsp)
movq %rdi, 0x200(%rsp)
movq %rsi, 0x1f8(%rsp)
movq 0x200(%rsp), %rdi
movq %rdi, 0x20(%rsp)
addq $0x8, %rdi
callq 0x8ed0
movq 0x28(%rsp), %rsi
movq %rax, 0x30(%rsp)
leaq 0x190(%rsp), %rdi
movq %rdi, 0x38(%rsp)
callq 0x9e60
movq 0x30(%rsp), %rdi
movq 0x38(%rsp), %rsi
callq 0xa820
movb %al, 0x47(%rsp)
jmp 0x7503
leaq 0x190(%rsp), %rdi
callq 0x7790
movb 0x47(%rsp), %al
testb $0x1, %al
jne 0x751a
jmp 0x7545
jmp 0x7615
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x188(%rsp)
movl %eax, 0x184(%rsp)
leaq 0x190(%rsp), %rdi
callq 0x7790
jmp 0x7681
movq 0x20(%rsp), %rdi
addq $0x8, %rdi
movq %rdi, 0x8(%rsp)
callq 0x8ed0
movq %rax, %rdi
movq 0x20(%rsp), %rax
movl (%rax), %esi
callq 0xa880
movq 0x8(%rsp), %rdi
callq 0x9380
movq 0x8(%rsp), %rdi
movq %rax, 0x10(%rsp)
callq 0x8ed0
movq %rax, %rsi
leaq 0xb0(%rsp), %rdi
callq 0xaa90
movq 0x20(%rsp), %rax
movq 0x28(%rsp), %rsi
movl (%rax), %ecx
movl %ecx, 0x18(%rsp)
movl 0x4(%rax), %eax
movl %eax, 0x1c(%rsp)
leaq 0x48(%rsp), %rdi
callq 0x9e60
jmp 0x75b3
movl 0x1c(%rsp), %r8d
movl 0x18(%rsp), %ecx
movq 0x10(%rsp), %rsi
leaq 0xd0(%rsp), %rdi
leaq 0xb0(%rsp), %rdx
leaq 0x48(%rsp), %r9
callq 0x97f0
jmp 0x75dd
movq 0x8(%rsp), %rdi
leaq 0xd0(%rsp), %rsi
callq 0x8830
jmp 0x75f1
leaq 0xd0(%rsp), %rdi
callq 0x8ae0
leaq 0x48(%rsp), %rdi
callq 0x7790
leaq 0xb0(%rsp), %rdi
callq 0x5320
addq $0x208, %rsp            # imm = 0x208
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x188(%rsp)
movl %eax, 0x184(%rsp)
jmp 0x7674
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x188(%rsp)
movl %eax, 0x184(%rsp)
jmp 0x766a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x188(%rsp)
movl %eax, 0x184(%rsp)
leaq 0xd0(%rsp), %rdi
callq 0x8ae0
leaq 0x48(%rsp), %rdi
callq 0x7790
leaq 0xb0(%rsp), %rdi
callq 0x5320
movq 0x188(%rsp), %rdi
callq 0x5790
nop
// File: ArthoPacini[P]blockchaincpp/./Block.hpp
// Function: Block::Block(unsigned long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, unsigned int, unsigned int, Transaction)
Block(std::uint64_t index, std::string previousBlockHash, std::uint32_t difficulty, std::uint32_t maxTransactionsCount, Transaction transaction)
    {
        this->index = index;
        this->previousBlockHash = previousBlockHash;
        this->difficulty = difficulty;
        this->maxTransactionsCount = maxTransactionsCount;
        transactions.push_back(transaction);
    }

// Assembly:
subq $0x98, %rsp
movq %rdx, 0x18(%rsp)
movq %r9, 0x20(%rsp)
movq %rdi, 0x90(%rsp)
movq %rsi, 0x88(%rsp)
movq %rdx, 0x80(%rsp)
movl %ecx, 0x7c(%rsp)
movl %r8d, 0x78(%rsp)
movq %r9, 0x70(%rsp)
movq 0x90(%rsp), %rdi
movq %rdi, 0x40(%rsp)
addq $0x8, %rdi
movq %rdi, 0x28(%rsp)
callq 0x5630
movq 0x40(%rsp), %rdi
addq $0x28, %rdi
movq %rdi, 0x30(%rsp)
callq 0x5630
movq 0x40(%rsp), %rdi
movq $0x0, 0x48(%rdi)
movl $0x3, 0x50(%rdi)
addq $0x58, %rdi
movq %rdi, 0x38(%rsp)
callq 0x99c0
movq 0x40(%rsp), %rax
addq $0x70, %rax
movq %rax, 0x48(%rsp)
leaq 0x6f(%rsp), %rdi
movq %rdi, 0x50(%rsp)
callq 0x57a0
movq 0x48(%rsp), %rdi
movq 0x50(%rsp), %rdx
leaq 0x35a98(%rip), %rsi     # 0x3f33d
callq 0x6f00
jmp 0x98ac
leaq 0x6f(%rsp), %rdi
callq 0x5520
movq 0x40(%rsp), %rax
addq $0x90, %rax
movq %rax, 0x8(%rsp)
leaq 0x5b(%rsp), %rdi
movq %rdi, 0x10(%rsp)
callq 0x57a0
movq 0x8(%rsp), %rdi
movq 0x10(%rsp), %rdx
leaq 0x332ce(%rip), %rsi     # 0x3cbb4
callq 0x6f00
jmp 0x98ed
leaq 0x5b(%rsp), %rdi
callq 0x5520
movq 0x40(%rsp), %rdi
movq 0x18(%rsp), %rsi
movq 0x88(%rsp), %rax
movq %rax, (%rdi)
addq $0x28, %rdi
callq 0x5050
jmp 0x9917
movq 0x20(%rsp), %rsi
movq 0x40(%rsp), %rdi
movl 0x7c(%rsp), %eax
movl %eax, 0x54(%rdi)
movl 0x78(%rsp), %eax
movl %eax, 0x50(%rdi)
addq $0x58, %rdi
callq 0x99d0
jmp 0x993a
addq $0x98, %rsp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x60(%rsp)
movl %eax, 0x5c(%rsp)
leaq 0x6f(%rsp), %rdi
callq 0x5520
jmp 0x9998
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x60(%rsp)
movl %eax, 0x5c(%rsp)
leaq 0x5b(%rsp), %rdi
callq 0x5520
jmp 0x998e
movq 0x8(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x60(%rsp)
movl %eax, 0x5c(%rsp)
callq 0x5320
movq 0x48(%rsp), %rdi
callq 0x5320
movq 0x38(%rsp), %rdi
callq 0x9a40
movq 0x30(%rsp), %rdi
callq 0x5320
movq 0x28(%rsp), %rdi
callq 0x5320
movq 0x60(%rsp), %rdi
callq 0x5790
// File: ArthoPacini[P]blockchaincpp/./Block.hpp
// Function: Block::push_transaction(Transaction)
bool push_transaction(Transaction transaction)
    {
        if(transactions.size() + 1 > maxTransactionsCount)
            return false;

        transactions.push_back(transaction);
        return true;
    }

// Assembly:
subq $0x28, %rsp
movq %rsi, (%rsp)
movq %rdi, 0x18(%rsp)
movq %rsi, 0x10(%rsp)
movq 0x18(%rsp), %rdi
movq %rdi, 0x8(%rsp)
addq $0x58, %rdi
callq 0xa200
movq 0x8(%rsp), %rcx
addq $0x1, %rax
movl 0x50(%rcx), %ecx
cmpq %rcx, %rax
jbe 0xa85d
movb $0x0, 0x27(%rsp)
jmp 0xa874
movq (%rsp), %rsi
movq 0x8(%rsp), %rdi
addq $0x58, %rdi
callq 0x99d0
movb $0x1, 0x27(%rsp)
movb 0x27(%rsp), %al
andb $0x1, %al
addq $0x28, %rsp
retq
nop
// File: ArthoPacini[P]blockchaincpp/./Block.hpp
// Function: Block::mine(unsigned int)
void mine(std::uint32_t difficulty = 1)
    {
        std::cout << "Starting mining of block " << index << '\n';
        const auto miningStartTime = std::chrono::system_clock::now();

        do
        {
            ++nounce;
            blockHash = calculateHash();
        } while (!std::all_of(blockHash.begin(), blockHash.begin() + difficulty, [](char & a){
                return a == '0';
            }));

        minedAt = getTimestampAsString(std::chrono::system_clock::now());
        std::cout << "Block "<< index << " mined, nounce " << nounce << ", hash: " << blockHash << '\n'; 
        std::cout << "Took " << std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now() - miningStartTime).count() << " milliseconds to mine block\n";
    }

// Assembly:
subq $0xa8, %rsp
movq %rdi, 0xa0(%rsp)
movl %esi, 0x9c(%rsp)
movq 0xa0(%rsp), %rax
movq %rax, 0x8(%rsp)
movq 0x4d726(%rip), %rdi     # 0x57fd0
leaq 0x32311(%rip), %rsi     # 0x3cbc2
callq 0x54a0
movq %rax, %rdi
movq 0x8(%rsp), %rax
movq (%rax), %rsi
callq 0x50d0
movq %rax, %rdi
movl $0xa, %esi
callq 0x55a0
callq 0x5070
movq %rax, 0x90(%rsp)
movq 0x8(%rsp), %rsi
movq 0x48(%rsi), %rax
addq $0x1, %rax
movq %rax, 0x48(%rsi)
leaq 0x70(%rsp), %rdi
callq 0xaa90
movq 0x8(%rsp), %rdi
addq $0x8, %rdi
leaq 0x70(%rsp), %rsi
callq 0x55b0
leaq 0x70(%rsp), %rdi
callq 0x5320
movq 0x8(%rsp), %rdi
addq $0x8, %rdi
callq 0x5450
movq 0x8(%rsp), %rdi
movq %rax, 0x68(%rsp)
addq $0x8, %rdi
callq 0x5450
movq %rax, 0x58(%rsp)
movl 0x9c(%rsp), %eax
movl %eax, %esi
leaq 0x58(%rsp), %rdi
callq 0xace0
movq %rax, 0x60(%rsp)
movq 0x68(%rsp), %rdi
movq 0x60(%rsp), %rsi
callq 0xac90
xorb $-0x1, %al
testb $0x1, %al
jne 0xa8e0
callq 0x5070
movq %rax, 0x28(%rsp)
movq 0x28(%rsp), %rsi
leaq 0x30(%rsp), %rdi
callq 0x62b0
movq 0x8(%rsp), %rdi
addq $0x90, %rdi
leaq 0x30(%rsp), %rsi
callq 0x55b0
leaq 0x30(%rsp), %rdi
callq 0x5320
movq 0x4d621(%rip), %rdi     # 0x57fd0
leaq 0x32226(%rip), %rsi     # 0x3cbdc
callq 0x54a0
movq %rax, %rdi
movq 0x8(%rsp), %rax
movq (%rax), %rsi
callq 0x50d0
movq %rax, %rdi
leaq 0x3220e(%rip), %rsi     # 0x3cbe3
callq 0x54a0
movq %rax, %rdi
movq 0x8(%rsp), %rax
movq 0x48(%rax), %rsi
callq 0x50d0
movq %rax, %rdi
leaq 0x321fe(%rip), %rsi     # 0x3cbf3
callq 0x54a0
movq 0x8(%rsp), %rsi
movq %rax, %rdi
addq $0x8, %rsi
callq 0x5480
movq %rax, %rdi
movl $0xa, %esi
callq 0x55a0
movq 0x4d5b1(%rip), %rdi     # 0x57fd0
leaq 0x321d6(%rip), %rsi     # 0x3cbfc
callq 0x54a0
movq %rax, (%rsp)
callq 0x5070
movq %rax, 0x10(%rsp)
leaq 0x10(%rsp), %rdi
leaq 0x90(%rsp), %rsi
callq 0xad50
movq %rax, 0x18(%rsp)
leaq 0x18(%rsp), %rdi
callq 0xad20
movq %rax, 0x20(%rsp)
leaq 0x20(%rsp), %rdi
callq 0xada0
movq (%rsp), %rdi
movq %rax, %rsi
callq 0x57d0
movq %rax, %rdi
leaq 0x32183(%rip), %rsi     # 0x3cc02
callq 0x54a0
addq $0xa8, %rsp
retq
nopl (%rax)
// File: ArthoPacini[P]blockchaincpp/./Block.hpp
// Function: Block::calculateHash[abi:cxx11]()
std::string calculateHash() 
    {
        transactionsHashesSum.clear();

        std::for_each(transactions.begin(), transactions.end(), [&](Transaction & transaction){
            transactionsHashesSum = sha256(transactionsHashesSum + transaction.getHash());
        });

        return sha256(transactionsHashesSum + previousBlockHash + std::to_string(index) + std::to_string(nounce));
    }

// Assembly:
subq $0x108, %rsp            # imm = 0x108
movq %rdi, (%rsp)
movq %rdi, %rax
movq %rax, 0x8(%rsp)
movq %rdi, 0x100(%rsp)
movq %rsi, 0xf8(%rsp)
movq 0xf8(%rsp), %rdi
movq %rdi, 0x20(%rsp)
addq $0x70, %rdi
movq %rdi, 0x18(%rsp)
callq 0x55f0
movq 0x20(%rsp), %rdi
addq $0x58, %rdi
movq %rdi, 0x10(%rsp)
callq 0xa060
movq 0x10(%rsp), %rdi
movq %rax, 0xf0(%rsp)
callq 0x9e00
movq %rax, %rcx
movq 0x20(%rsp), %rax
movq %rcx, 0xe8(%rsp)
movq %rax, 0xe0(%rsp)
movq 0xf0(%rsp), %rdi
movq 0xe8(%rsp), %rsi
movq 0xe0(%rsp), %rdx
callq 0xb300
movq 0x18(%rsp), %rsi
movq 0x20(%rsp), %rdx
movq %rax, 0xd8(%rsp)
addq $0x28, %rdx
leaq 0x78(%rsp), %rdi
callq 0xb450
movq 0x20(%rsp), %rax
movq (%rax), %rsi
leaq 0x58(%rsp), %rdi
callq 0xb4e0
jmp 0xab5c
leaq 0x98(%rsp), %rdi
leaq 0x78(%rsp), %rsi
leaq 0x58(%rsp), %rdx
callq 0xb360
jmp 0xab75
movq 0x20(%rsp), %rax
movq 0x48(%rax), %rsi
leaq 0x28(%rsp), %rdi
callq 0xb4e0
jmp 0xab8a
leaq 0xb8(%rsp), %rdi
leaq 0x98(%rsp), %rsi
leaq 0x28(%rsp), %rdx
callq 0xb360
jmp 0xaba6
movq (%rsp), %rdi
leaq 0xb8(%rsp), %rsi
callq 0x6090
jmp 0xabb9
leaq 0xb8(%rsp), %rdi
callq 0x5320
leaq 0x28(%rsp), %rdi
callq 0x5320
leaq 0x98(%rsp), %rdi
callq 0x5320
leaq 0x58(%rsp), %rdi
callq 0x5320
leaq 0x78(%rsp), %rdi
callq 0x5320
movq 0x8(%rsp), %rax
addq $0x108, %rsp            # imm = 0x108
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x50(%rsp)
movl %eax, 0x4c(%rsp)
jmp 0xac7a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x50(%rsp)
movl %eax, 0x4c(%rsp)
jmp 0xac70
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x50(%rsp)
movl %eax, 0x4c(%rsp)
jmp 0xac63
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x50(%rsp)
movl %eax, 0x4c(%rsp)
jmp 0xac59
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x50(%rsp)
movl %eax, 0x4c(%rsp)
leaq 0xb8(%rsp), %rdi
callq 0x5320
leaq 0x28(%rsp), %rdi
callq 0x5320
leaq 0x98(%rsp), %rdi
callq 0x5320
leaq 0x58(%rsp), %rdi
callq 0x5320
leaq 0x78(%rsp), %rdi
callq 0x5320
movq 0x50(%rsp), %rdi
callq 0x5790
nop
// File: ArthoPacini[P]blockchaincpp/./nlohmann/json.hpp
// Function: nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, bool, long, unsigned long, double, std::allocator, nlohmann::adl_serializer, std::vector<unsigned char, std::allocator<unsigned char>>>::push_back(nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, bool, long, unsigned long, double, std::allocator, nlohmann::adl_serializer, std::vector<unsigned char, std::allocator<unsigned char>>> const&)
void push_back(const basic_json& val)
    {
        // push_back only works for null objects or arrays
        if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_array())))
        {
            JSON_THROW(type_error::create(308, "cannot use push_back() with " + std::string(type_name())));
        }

        // transform null object into an array
        if (is_null())
        {
            m_type = value_t::array;
            m_value = value_t::array;
            assert_invariant();
        }

        // add element to array
        m_value.array->push_back(val);
    }

// Assembly:
subq $0x98, %rsp
movq %rdi, 0x90(%rsp)
movq %rsi, 0x88(%rsp)
movq 0x90(%rsp), %rdi
movq %rdi, 0x18(%rsp)
callq 0x1d1b0
movb %al, %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, 0x27(%rsp)
jne 0x199a4
movq 0x18(%rsp), %rdi
callq 0xfb40
movb %al, 0x27(%rsp)
movb 0x27(%rsp), %al
xorb $-0x1, %al
xorb $-0x1, %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x199b7
jmp 0x19aac
movb $0x1, 0x33(%rsp)
movl $0x20, %edi
callq 0x5280
movq 0x18(%rsp), %rdi
movq %rax, (%rsp)
callq 0xfe10
movq %rax, 0x8(%rsp)
leaq 0x47(%rsp), %rdi
movq %rdi, 0x10(%rsp)
callq 0x57a0
movq 0x8(%rsp), %rsi
movq 0x10(%rsp), %rdx
leaq 0x48(%rsp), %rdi
callq 0x6f00
jmp 0x199fe
leaq 0x255c6(%rip), %rsi     # 0x3efcb
leaq 0x68(%rsp), %rdi
leaq 0x48(%rsp), %rdx
callq 0xfdc0
jmp 0x19a16
movq (%rsp), %rdi
movl $0x134, %esi            # imm = 0x134
leaq 0x68(%rsp), %rdx
callq 0xf300
jmp 0x19a2b
movq (%rsp), %rdi
movb $0x0, 0x33(%rsp)
leaq 0x3e09d(%rip), %rsi     # 0x57ad8
leaq -0xa5e2(%rip), %rdx     # 0xf460
callq 0x5770
jmp 0x19b0e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x38(%rsp)
movl %eax, 0x34(%rsp)
jmp 0x19a8e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x38(%rsp)
movl %eax, 0x34(%rsp)
jmp 0x19a84
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x38(%rsp)
movl %eax, 0x34(%rsp)
leaq 0x68(%rsp), %rdi
callq 0x5320
leaq 0x48(%rsp), %rdi
callq 0x5320
leaq 0x47(%rsp), %rdi
callq 0x5520
testb $0x1, 0x33(%rsp)
jne 0x19aa1
jmp 0x19aaa
movq (%rsp), %rdi
callq 0x53b0
jmp 0x19b04
movq 0x18(%rsp), %rdi
callq 0x1d1b0
testb $0x1, %al
jne 0x19abc
jmp 0x19ae6
movq 0x18(%rsp), %rax
movb $0x2, (%rax)
leaq 0x28(%rsp), %rdi
movl $0x2, %esi
callq 0xf470
movq 0x18(%rsp), %rdi
movq 0x28(%rsp), %rax
movq %rax, 0x8(%rdi)
callq 0xd990
movq 0x18(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x88(%rsp), %rsi
callq 0x1e9c0
addq $0x98, %rsp
retq
movq 0x38(%rsp), %rdi
callq 0x5790
nop
// File: ArthoPacini[P]blockchaincpp/./nlohmann/json.hpp
// Function: nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, bool, long, unsigned long, double, std::allocator, nlohmann::adl_serializer, std::vector<unsigned char, std::allocator<unsigned char>>>::push_back(std::initializer_list<nlohmann::detail::json_ref<nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, bool, long, unsigned long, double, std::allocator, nlohmann::adl_serializer, std::vector<unsigned char, std::allocator<unsigned char>>>>>)
void push_back(initializer_list_t init)
    {
        if (is_object() && init.size() == 2 && (*init.begin())->is_string())
        {
            basic_json&& key = init.begin()->moved_or_copied();
            push_back(typename object_t::value_type(
                          std::move(key.get_ref<string_t&>()), (init.begin() + 1)->moved_or_copied()));
        }
        else
        {
            push_back(basic_json(init));
        }
    }

// Assembly:
subq $0xc8, %rsp
movq %rsi, 0xb8(%rsp)
movq %rdx, 0xc0(%rsp)
movq %rdi, 0xb0(%rsp)
movq 0xb0(%rsp), %rdi
movq %rdi, 0x18(%rsp)
callq 0x17690
testb $0x1, %al
jne 0x1cbfa
jmp 0x1cd38
leaq 0xb8(%rsp), %rdi
callq 0xfee0
cmpq $0x2, %rax
jne 0x1cd38
leaq 0xb8(%rsp), %rdi
callq 0xf2b0
movq %rax, %rdi
callq 0xfb30
movq %rax, %rdi
callq 0xfd40
testb $0x1, %al
jne 0x1cc37
jmp 0x1cd38
leaq 0xb8(%rsp), %rdi
callq 0xf2b0
movq %rax, %rsi
leaq 0x98(%rsp), %rdi
movq %rdi, 0x8(%rsp)
callq 0x126f0
movq 0x8(%rsp), %rax
movq %rax, 0xa8(%rsp)
movq 0xa8(%rsp), %rdi
callq 0x1cff0
movq %rax, 0x10(%rsp)
jmp 0x1cc7a
leaq 0xb8(%rsp), %rdi
callq 0xf2b0
movq %rax, %rsi
addq $0x20, %rsi
leaq 0x48(%rsp), %rdi
callq 0x126f0
jmp 0x1cc9a
movq 0x10(%rsp), %rsi
leaq 0x68(%rsp), %rdi
leaq 0x48(%rsp), %rdx
callq 0x16240
jmp 0x1ccb0
movq 0x18(%rsp), %rdi
leaq 0x68(%rsp), %rsi
callq 0x1ce30
jmp 0x1ccc1
leaq 0x68(%rsp), %rdi
callq 0x13920
leaq 0x48(%rsp), %rdi
callq 0xc450
leaq 0x98(%rsp), %rdi
callq 0xc450
jmp 0x1cd9e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x60(%rsp)
movl %eax, 0x5c(%rsp)
jmp 0x1cd29
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x60(%rsp)
movl %eax, 0x5c(%rsp)
jmp 0x1cd1f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x60(%rsp)
movl %eax, 0x5c(%rsp)
leaq 0x68(%rsp), %rdi
callq 0x13920
leaq 0x48(%rsp), %rdi
callq 0xc450
leaq 0x98(%rsp), %rdi
callq 0xc450
jmp 0x1cda6
movups 0xb8(%rsp), %xmm0
movaps %xmm0, 0x20(%rsp)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
leaq 0x38(%rsp), %rdi
movq %rdi, (%rsp)
movl $0x1, %ecx
movl $0x2, %r8d
callq 0xc1e0
movq 0x18(%rsp), %rdi
movq (%rsp), %rsi
callq 0x1d000
jmp 0x1cd78
leaq 0x38(%rsp), %rdi
callq 0xc450
jmp 0x1cd9e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x60(%rsp)
movl %eax, 0x5c(%rsp)
leaq 0x38(%rsp), %rdi
callq 0xc450
jmp 0x1cda6
addq $0xc8, %rsp
retq
movq 0x60(%rsp), %rdi
callq 0x5790
// File: ArthoPacini[P]blockchaincpp/./nlohmann/json.hpp
// Function: nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, bool, long, unsigned long, double, std::allocator, nlohmann::adl_serializer, std::vector<unsigned char, std::allocator<unsigned char>>>::push_back(nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, bool, long, unsigned long, double, std::allocator, nlohmann::adl_serializer, std::vector<unsigned char, std::allocator<unsigned char>>>&&)
void push_back(basic_json&& val)
    {
        // push_back only works for null objects or arrays
        if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_array())))
        {
            JSON_THROW(type_error::create(308, "cannot use push_back() with " + std::string(type_name())));
        }

        // transform null object into an array
        if (is_null())
        {
            m_type = value_t::array;
            m_value = value_t::array;
            assert_invariant();
        }

        // add element to array (move semantics)
        m_value.array->push_back(std::move(val));
        // if val is moved from, basic_json move constructor marks it null so we do not call the destructor
    }

// Assembly:
subq $0x98, %rsp
movq %rdi, 0x90(%rsp)
movq %rsi, 0x88(%rsp)
movq 0x90(%rsp), %rdi
movq %rdi, 0x18(%rsp)
callq 0x1d1b0
movb %al, %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, 0x27(%rsp)
jne 0x1d044
movq 0x18(%rsp), %rdi
callq 0xfb40
movb %al, 0x27(%rsp)
movb 0x27(%rsp), %al
xorb $-0x1, %al
xorb $-0x1, %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x1d057
jmp 0x1d14c
movb $0x1, 0x33(%rsp)
movl $0x20, %edi
callq 0x5280
movq 0x18(%rsp), %rdi
movq %rax, (%rsp)
callq 0xfe10
movq %rax, 0x8(%rsp)
leaq 0x47(%rsp), %rdi
movq %rdi, 0x10(%rsp)
callq 0x57a0
movq 0x8(%rsp), %rsi
movq 0x10(%rsp), %rdx
leaq 0x48(%rsp), %rdi
callq 0x6f00
jmp 0x1d09e
leaq 0x21f26(%rip), %rsi     # 0x3efcb
leaq 0x68(%rsp), %rdi
leaq 0x48(%rsp), %rdx
callq 0xfdc0
jmp 0x1d0b6
movq (%rsp), %rdi
movl $0x134, %esi            # imm = 0x134
leaq 0x68(%rsp), %rdx
callq 0xf300
jmp 0x1d0cb
movq (%rsp), %rdi
movb $0x0, 0x33(%rsp)
leaq 0x3a9fd(%rip), %rsi     # 0x57ad8
leaq -0xdc82(%rip), %rdx     # 0xf460
callq 0x5770
jmp 0x1d1ae
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x38(%rsp)
movl %eax, 0x34(%rsp)
jmp 0x1d12e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x38(%rsp)
movl %eax, 0x34(%rsp)
jmp 0x1d124
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x38(%rsp)
movl %eax, 0x34(%rsp)
leaq 0x68(%rsp), %rdi
callq 0x5320
leaq 0x48(%rsp), %rdi
callq 0x5320
leaq 0x47(%rsp), %rdi
callq 0x5520
testb $0x1, 0x33(%rsp)
jne 0x1d141
jmp 0x1d14a
movq (%rsp), %rdi
callq 0x53b0
jmp 0x1d1a4
movq 0x18(%rsp), %rdi
callq 0x1d1b0
testb $0x1, %al
jne 0x1d15c
jmp 0x1d186
movq 0x18(%rsp), %rax
movb $0x2, (%rax)
leaq 0x28(%rsp), %rdi
movl $0x2, %esi
callq 0xf470
movq 0x18(%rsp), %rdi
movq 0x28(%rsp), %rax
movq %rax, 0x8(%rdi)
callq 0xd990
movq 0x18(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x88(%rsp), %rsi
callq 0x17560
addq $0x98, %rsp
retq
movq 0x38(%rsp), %rdi
callq 0x5790
nop
// File: ArthoPacini[P]blockchaincpp/./nlohmann/json.hpp
// Function: nlohmann::detail::input_stream_adapter::~input_stream_adapter()
~input_stream_adapter()
    {
        // clear stream flags; we use underlying streambuf I/O, do not
        // maintain ifstream flags, except eof
        if (is != nullptr)
        {
            is->clear(is->rdstate() & std::ios::eofbit);
        }
    }

// Assembly:
subq $0x28, %rsp
movq %rdi, 0x20(%rsp)
movq 0x20(%rsp), %rax
movq %rax, 0x18(%rsp)
cmpq $0x0, (%rax)
je 0x27671
movq 0x18(%rsp), %rax
movq (%rax), %rdi
movq (%rdi), %rax
movq -0x18(%rax), %rax
addq %rax, %rdi
movq %rdi, 0x8(%rsp)
callq 0x5460
movl %eax, 0x14(%rsp)
jmp 0x2764b
movl 0x14(%rsp), %edi
movl $0x2, %esi
callq 0x39a60
movl %eax, 0x4(%rsp)
jmp 0x2765f
movl 0x4(%rsp), %esi
movq 0x8(%rsp), %rdi
callq 0x5750
jmp 0x2766f
jmp 0x27671
addq $0x28, %rsp
retq
movq %rax, %rdi
callq 0x8790
nop
// File: ArthoPacini[P]blockchaincpp/./nlohmann/json.hpp
// Function: nlohmann::detail::input_stream_adapter::get_character()
std::char_traits<char>::int_type get_character()
    {
        auto res = sb->sbumpc();
        // set eof manually, as we don't use the istream interface.
        if (JSON_HEDLEY_UNLIKELY(res == EOF))
        {
            is->clear(is->rdstate() | std::ios::eofbit);
        }
        return res;
    }

// Assembly:
subq $0x28, %rsp
movq %rdi, 0x20(%rsp)
movq 0x20(%rsp), %rax
movq %rax, 0x10(%rsp)
movq 0x8(%rax), %rdi
callq 0x52b0
movl %eax, 0x1c(%rsp)
cmpl $-0x1, 0x1c(%rsp)
sete %al
xorb $-0x1, %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x29592
jmp 0x295cd
movq 0x10(%rsp), %rax
movq (%rax), %rcx
movq (%rcx), %rdx
addq -0x18(%rdx), %rcx
movq %rcx, 0x8(%rsp)
movq (%rax), %rdi
movq (%rdi), %rax
addq -0x18(%rax), %rdi
callq 0x5460
movl %eax, %edi
movl $0x2, %esi
callq 0x29610
movq 0x8(%rsp), %rdi
movl %eax, %esi
callq 0x5750
movl 0x1c(%rsp), %eax
addq $0x28, %rsp
retq
nopw %cs:(%rax,%rax)
// File: ArthoPacini[P]blockchaincpp/./Transaction.hpp
// Function: Transaction::Transaction(nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, bool, long, unsigned long, double, std::allocator, nlohmann::adl_serializer, std::vector<unsigned char, std::allocator<unsigned char>>>)
Transaction(nlohmann::json transaction_json)
    {
        this->amount = transaction_json["amount"];
        this->senderKey = transaction_json["senderKey"];
        this->receiverKey = transaction_json["receiverKey"];
        this->timestamp = transaction_json["timestamp"];
    }

// Assembly:
subq $0xe8, %rsp
movq %rsi, 0x38(%rsp)
movq %rdi, 0xe0(%rsp)
movq %rsi, 0xd8(%rsp)
movq 0xe0(%rsp), %rdi
movq %rdi, 0x50(%rsp)
addq $0x8, %rdi
movq %rdi, 0x40(%rsp)
callq 0x5630
movq 0x50(%rsp), %rdi
addq $0x28, %rdi
movq %rdi, 0x48(%rsp)
callq 0x5630
movq 0x50(%rsp), %rax
addq $0x48, %rax
movq %rax, 0x58(%rsp)
callq 0x5070
movq 0x58(%rsp), %rdi
movq %rax, 0xd0(%rsp)
movq 0xd0(%rsp), %rsi
callq 0x62b0
jmp 0x3a5e9
movq 0x38(%rsp), %rdi
leaq 0x49af(%rip), %rsi      # 0x3efa4
callq 0x19700
movq %rax, 0x30(%rsp)
jmp 0x3a601
movq 0x30(%rsp), %rdi
callq 0x3af90
movsd %xmm0, 0x28(%rsp)
jmp 0x3a613
movq 0x38(%rsp), %rdi
movq 0x50(%rsp), %rax
movsd 0x28(%rsp), %xmm0
movsd %xmm0, (%rax)
leaq 0x497d(%rip), %rsi      # 0x3efab
callq 0x19700
movq %rax, 0x20(%rsp)
jmp 0x3a63a
movq 0x20(%rsp), %rsi
leaq 0xa0(%rsp), %rdi
callq 0x3a510
jmp 0x3a64e
movq 0x50(%rsp), %rdi
addq $0x8, %rdi
leaq 0xa0(%rsp), %rsi
movq %rsi, 0x10(%rsp)
callq 0x55b0
movq 0x10(%rsp), %rdi
callq 0x5320
movq 0x38(%rsp), %rdi
leaq 0x4936(%rip), %rsi      # 0x3efb5
callq 0x19700
movq %rax, 0x18(%rsp)
jmp 0x3a68b
movq 0x18(%rsp), %rsi
leaq 0x80(%rsp), %rdi
callq 0x3a510
jmp 0x3a69f
movq 0x50(%rsp), %rdi
addq $0x28, %rdi
leaq 0x80(%rsp), %rsi
movq %rsi, (%rsp)
callq 0x55b0
movq (%rsp), %rdi
callq 0x5320
movq 0x38(%rsp), %rdi
leaq 0x48f3(%rip), %rsi      # 0x3efc1
callq 0x19700
movq %rax, 0x8(%rsp)
jmp 0x3a6da
movq 0x8(%rsp), %rsi
leaq 0x60(%rsp), %rdi
callq 0x3a510
jmp 0x3a6eb
movq 0x50(%rsp), %rdi
addq $0x48, %rdi
leaq 0x60(%rsp), %rsi
callq 0x55b0
leaq 0x60(%rsp), %rdi
callq 0x5320
addq $0xe8, %rsp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xc8(%rsp)
movl %eax, 0xc4(%rsp)
jmp 0x3a744
movq 0x58(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xc8(%rsp)
movl %eax, 0xc4(%rsp)
callq 0x5320
movq 0x48(%rsp), %rdi
callq 0x5320
movq 0x40(%rsp), %rdi
callq 0x5320
movq 0xc8(%rsp), %rdi
callq 0x5790
nopw %cs:(%rax,%rax)
nop
// File: divinity76[P]pi_compression/compressor/compressor.cpp
// Function: file_get_contents(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)
static std::string file_get_contents(const std::string &$filename)
{
    std::ostringstream ss;
    std::ifstream ifs($filename,std::ifstream::binary);
    ifs.exceptions ( std::ifstream::failbit | std::ifstream::badbit );
    ss << ifs.rdbuf();
    return ss.str();
}

// Assembly:
subq $0x3c8, %rsp            # imm = 0x3C8
movq %rdi, 0x18(%rsp)
movq %rdi, %rax
movq %rax, 0x20(%rsp)
movq %rdi, 0x3c0(%rsp)
movq %rsi, 0x3b8(%rsp)
leaq 0x240(%rsp), %rdi
callq 0x2290
movq 0x3b8(%rsp), %rsi
leaq 0x38(%rsp), %rdi
movl $0x4, %edx
callq 0x22f0
jmp 0x2dfa
movq 0x38(%rsp), %rax
movq -0x18(%rax), %rax
leaq 0x38(%rsp,%rax), %rax
movq %rax, 0x8(%rsp)
movl $0x4, %edi
movl $0x1, %esi
callq 0x3130
movl %eax, 0x14(%rsp)
jmp 0x2e22
movl 0x14(%rsp), %esi
movq 0x8(%rsp), %rdi
callq 0x20c0
jmp 0x2e32
leaq 0x38(%rsp), %rdi
callq 0x22e0
movq %rax, (%rsp)
jmp 0x2e42
movq (%rsp), %rsi
leaq 0x240(%rsp), %rdi
callq 0x2040
jmp 0x2e55
movq 0x18(%rsp), %rdi
leaq 0x240(%rsp), %rsi
callq 0x21c0
jmp 0x2e69
leaq 0x38(%rsp), %rdi
callq 0x2080
leaq 0x240(%rsp), %rdi
callq 0x2070
movq 0x20(%rsp), %rax
addq $0x3c8, %rsp            # imm = 0x3C8
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x30(%rsp)
movl %eax, 0x2c(%rsp)
jmp 0x2eb5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x30(%rsp)
movl %eax, 0x2c(%rsp)
leaq 0x38(%rsp), %rdi
callq 0x2080
leaq 0x240(%rsp), %rdi
callq 0x2070
movq 0x30(%rsp), %rdi
callq 0x2320
nopl (%rax)
// File: DiplIngFrankGerlach[P]MST/./aes/aes.c
// Function: aes_encrypt_cbc
int aes_encrypt_cbc(const BYTE in[], size_t in_len, BYTE out[], const WORD key[], int keysize, const BYTE iv[])
{
	BYTE buf_in[AES_BLOCK_SIZE], buf_out[AES_BLOCK_SIZE], iv_buf[AES_BLOCK_SIZE];
	int blocks, idx;

	if (in_len % AES_BLOCK_SIZE != 0)
		return(FALSE);

	blocks = in_len / AES_BLOCK_SIZE;

	memcpy(iv_buf, iv, AES_BLOCK_SIZE);

	for (idx = 0; idx < blocks; idx++) {
		memcpy(buf_in, &in[idx * AES_BLOCK_SIZE], AES_BLOCK_SIZE);
		xor_buf(iv_buf, buf_in, AES_BLOCK_SIZE);
		aes_encrypt(buf_in, buf_out, key, keysize);
		memcpy(&out[idx * AES_BLOCK_SIZE], buf_out, AES_BLOCK_SIZE);
		memcpy(iv_buf, buf_out, AES_BLOCK_SIZE);
	}

	return(TRUE);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x80, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movl %r8d, -0x2c(%rbp)
movq %r9, -0x38(%rbp)
movq -0x18(%rbp), %rax
andq $0xf, %rax
cmpq $0x0, %rax
je 0x24fd
movl $0x0, -0x4(%rbp)
jmp 0x25b5
movq -0x18(%rbp), %rax
shrq $0x4, %rax
movl %eax, -0x74(%rbp)
movq -0x38(%rbp), %rax
movq (%rax), %rcx
movq %rcx, -0x70(%rbp)
movq 0x8(%rax), %rax
movq %rax, -0x68(%rbp)
movl $0x0, -0x78(%rbp)
movl -0x78(%rbp), %eax
cmpl -0x74(%rbp), %eax
jge 0x25ae
movq -0x10(%rbp), %rax
movl -0x78(%rbp), %ecx
shll $0x4, %ecx
movslq %ecx, %rcx
movq (%rax,%rcx), %rdx
movq %rdx, -0x50(%rbp)
movq 0x8(%rax,%rcx), %rax
movq %rax, -0x48(%rbp)
leaq -0x70(%rbp), %rdi
leaq -0x50(%rbp), %rsi
movl $0x10, %edx
callq 0x2470
leaq -0x50(%rbp), %rdi
leaq -0x60(%rbp), %rsi
movq -0x28(%rbp), %rdx
movl -0x2c(%rbp), %ecx
callq 0x25d0
movq -0x20(%rbp), %rax
movl -0x78(%rbp), %ecx
shll $0x4, %ecx
movslq %ecx, %rcx
movq -0x60(%rbp), %rdx
movq %rdx, (%rax,%rcx)
movq -0x58(%rbp), %rdx
movq %rdx, 0x8(%rax,%rcx)
movq -0x60(%rbp), %rax
movq %rax, -0x70(%rbp)
movq -0x58(%rbp), %rax
movq %rax, -0x68(%rbp)
movl -0x78(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x78(%rbp)
jmp 0x2522
movl $0x1, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x80, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: DiplIngFrankGerlach[P]MST/./aes/aes.c
// Function: aes_encrypt_cbc_mac
int aes_encrypt_cbc_mac(const BYTE in[], size_t in_len, BYTE out[], const WORD key[], int keysize, const BYTE iv[])
{
	BYTE buf_in[AES_BLOCK_SIZE], buf_out[AES_BLOCK_SIZE], iv_buf[AES_BLOCK_SIZE];
	int blocks, idx;

	if (in_len % AES_BLOCK_SIZE != 0)
		return(FALSE);

	blocks = in_len / AES_BLOCK_SIZE;

	memcpy(iv_buf, iv, AES_BLOCK_SIZE);

	for (idx = 0; idx < blocks; idx++) {
		memcpy(buf_in, &in[idx * AES_BLOCK_SIZE], AES_BLOCK_SIZE);
		xor_buf(iv_buf, buf_in, AES_BLOCK_SIZE);
		aes_encrypt(buf_in, buf_out, key, keysize);
		memcpy(iv_buf, buf_out, AES_BLOCK_SIZE);
		// Do not output all encrypted blocks.
	}

	memcpy(out, buf_out, AES_BLOCK_SIZE);   // Only output the last block.

	return(TRUE);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x80, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movl %r8d, -0x2c(%rbp)
movq %r9, -0x38(%rbp)
movq -0x18(%rbp), %rax
andq $0xf, %rax
cmpq $0x0, %rax
je 0x2a5d
movl $0x0, -0x4(%rbp)
jmp 0x2b03
movq -0x18(%rbp), %rax
shrq $0x4, %rax
movl %eax, -0x74(%rbp)
movq -0x38(%rbp), %rax
movq (%rax), %rcx
movq %rcx, -0x70(%rbp)
movq 0x8(%rax), %rax
movq %rax, -0x68(%rbp)
movl $0x0, -0x78(%rbp)
movl -0x78(%rbp), %eax
cmpl -0x74(%rbp), %eax
jge 0x2ae9
movq -0x10(%rbp), %rax
movl -0x78(%rbp), %ecx
shll $0x4, %ecx
movslq %ecx, %rcx
movq (%rax,%rcx), %rdx
movq %rdx, -0x50(%rbp)
movq 0x8(%rax,%rcx), %rax
movq %rax, -0x48(%rbp)
leaq -0x70(%rbp), %rdi
leaq -0x50(%rbp), %rsi
movl $0x10, %edx
callq 0x2470
leaq -0x50(%rbp), %rdi
leaq -0x60(%rbp), %rsi
movq -0x28(%rbp), %rdx
movl -0x2c(%rbp), %ecx
callq 0x25d0
movq -0x60(%rbp), %rax
movq %rax, -0x70(%rbp)
movq -0x58(%rbp), %rax
movq %rax, -0x68(%rbp)
movl -0x78(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x78(%rbp)
jmp 0x2a82
movq -0x20(%rbp), %rax
movq -0x60(%rbp), %rcx
movq %rcx, (%rax)
movq -0x58(%rbp), %rcx
movq %rcx, 0x8(%rax)
movl $0x1, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x80, %rsp
popq %rbp
retq
nop
// File: DiplIngFrankGerlach[P]MST/./aes/aes.c
// Function: aes_decrypt_cbc
int aes_decrypt_cbc(const BYTE in[], size_t in_len, BYTE out[], const WORD key[], int keysize, const BYTE iv[])
{
	BYTE buf_in[AES_BLOCK_SIZE], buf_out[AES_BLOCK_SIZE], iv_buf[AES_BLOCK_SIZE];
	int blocks, idx;

	if (in_len % AES_BLOCK_SIZE != 0)
		return(FALSE);

	blocks = in_len / AES_BLOCK_SIZE;

	memcpy(iv_buf, iv, AES_BLOCK_SIZE);

	for (idx = 0; idx < blocks; idx++) {
		memcpy(buf_in, &in[idx * AES_BLOCK_SIZE], AES_BLOCK_SIZE);
		aes_decrypt(buf_in, buf_out, key, keysize);
		xor_buf(iv_buf, buf_out, AES_BLOCK_SIZE);
		memcpy(&out[idx * AES_BLOCK_SIZE], buf_out, AES_BLOCK_SIZE);
		memcpy(iv_buf, buf_in, AES_BLOCK_SIZE);
	}

	return(TRUE);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x80, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movl %r8d, -0x2c(%rbp)
movq %r9, -0x38(%rbp)
movq -0x18(%rbp), %rax
andq $0xf, %rax
cmpq $0x0, %rax
je 0x2b4d
movl $0x0, -0x4(%rbp)
jmp 0x2c05
movq -0x18(%rbp), %rax
shrq $0x4, %rax
movl %eax, -0x74(%rbp)
movq -0x38(%rbp), %rax
movq (%rax), %rcx
movq %rcx, -0x70(%rbp)
movq 0x8(%rax), %rax
movq %rax, -0x68(%rbp)
movl $0x0, -0x78(%rbp)
movl -0x78(%rbp), %eax
cmpl -0x74(%rbp), %eax
jge 0x2bfe
movq -0x10(%rbp), %rax
movl -0x78(%rbp), %ecx
shll $0x4, %ecx
movslq %ecx, %rcx
movq (%rax,%rcx), %rdx
movq %rdx, -0x50(%rbp)
movq 0x8(%rax,%rcx), %rax
movq %rax, -0x48(%rbp)
leaq -0x50(%rbp), %rdi
leaq -0x60(%rbp), %rsi
movq -0x28(%rbp), %rdx
movl -0x2c(%rbp), %ecx
callq 0x2c20
leaq -0x70(%rbp), %rdi
leaq -0x60(%rbp), %rsi
movl $0x10, %edx
callq 0x2470
movq -0x20(%rbp), %rax
movl -0x78(%rbp), %ecx
shll $0x4, %ecx
movslq %ecx, %rcx
movq -0x60(%rbp), %rdx
movq %rdx, (%rax,%rcx)
movq -0x58(%rbp), %rdx
movq %rdx, 0x8(%rax,%rcx)
movq -0x50(%rbp), %rax
movq %rax, -0x70(%rbp)
movq -0x48(%rbp), %rax
movq %rax, -0x68(%rbp)
movl -0x78(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x78(%rbp)
jmp 0x2b72
movl $0x1, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x80, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: DiplIngFrankGerlach[P]MST/./aes/aes.c
// Function: increment_iv
void increment_iv(BYTE iv[], int counter_size)
{
	int idx;

	// Use counter_size bytes at the end of the IV as the big-endian integer to increment.
	for (idx = AES_BLOCK_SIZE - 1; idx >= AES_BLOCK_SIZE - counter_size; idx--) {
		iv[idx]++;
		if (iv[idx] != 0 || idx == AES_BLOCK_SIZE - counter_size)
			break;
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
movq %rdi, -0x8(%rbp)
movl %esi, -0xc(%rbp)
movl $0xf, -0x10(%rbp)
movl -0x10(%rbp), %eax
movl $0x10, %ecx
subl -0xc(%rbp), %ecx
cmpl %ecx, %eax
jl 0x30a1
movq -0x8(%rbp), %rax
movslq -0x10(%rbp), %rcx
movb (%rax,%rcx), %dl
addb $0x1, %dl
movb %dl, (%rax,%rcx)
movq -0x8(%rbp), %rax
movslq -0x10(%rbp), %rcx
movzbl (%rax,%rcx), %eax
cmpl $0x0, %eax
jne 0x3092
movl -0x10(%rbp), %eax
movl $0x10, %ecx
subl -0xc(%rbp), %ecx
cmpl %ecx, %eax
jne 0x3094
jmp 0x30a1
jmp 0x3096
movl -0x10(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x10(%rbp)
jmp 0x3052
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: DiplIngFrankGerlach[P]MST/./aes/aes.c
// Function: aes_encrypt_ctr
void aes_encrypt_ctr(const BYTE in[], size_t in_len, BYTE out[], const WORD key[], int keysize, const BYTE iv[])
{
	size_t idx = 0, last_block_length;
	BYTE iv_buf[AES_BLOCK_SIZE], out_buf[AES_BLOCK_SIZE];

	if (in != out)
		memcpy(out, in, in_len);

	memcpy(iv_buf, iv, AES_BLOCK_SIZE);
	last_block_length = in_len - AES_BLOCK_SIZE;

	if (in_len > AES_BLOCK_SIZE) {
		for (idx = 0; idx < last_block_length; idx += AES_BLOCK_SIZE) {
			aes_encrypt(iv_buf, out_buf, key, keysize);
			xor_buf(out_buf, &out[idx], AES_BLOCK_SIZE);
			increment_iv(iv_buf, AES_BLOCK_SIZE);
		}
	}

	aes_encrypt(iv_buf, out_buf, key, keysize);
	xor_buf(out_buf, &out[idx], in_len - idx);   // Use the Most Significant bytes.
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movl %r8d, -0x24(%rbp)
movq %r9, -0x30(%rbp)
movq $0x0, -0x38(%rbp)
movq -0x8(%rbp), %rax
cmpq -0x18(%rbp), %rax
je 0x30f3
movq -0x18(%rbp), %rdi
movq -0x8(%rbp), %rsi
movq -0x10(%rbp), %rdx
callq 0x2130
movq -0x30(%rbp), %rax
movq (%rax), %rcx
movq %rcx, -0x50(%rbp)
movq 0x8(%rax), %rax
movq %rax, -0x48(%rbp)
movq -0x10(%rbp), %rax
subq $0x10, %rax
movq %rax, -0x40(%rbp)
cmpq $0x10, -0x10(%rbp)
jbe 0x3173
movq $0x0, -0x38(%rbp)
movq -0x38(%rbp), %rax
cmpq -0x40(%rbp), %rax
jae 0x3171
leaq -0x50(%rbp), %rdi
leaq -0x60(%rbp), %rsi
movq -0x20(%rbp), %rdx
movl -0x24(%rbp), %ecx
callq 0x25d0
leaq -0x60(%rbp), %rdi
movq -0x18(%rbp), %rsi
addq -0x38(%rbp), %rsi
movl $0x10, %edx
callq 0x2470
leaq -0x50(%rbp), %rdi
movl $0x10, %esi
callq 0x3040
movq -0x38(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x38(%rbp)
jmp 0x3121
jmp 0x3173
leaq -0x50(%rbp), %rdi
leaq -0x60(%rbp), %rsi
movq -0x20(%rbp), %rdx
movl -0x24(%rbp), %ecx
callq 0x25d0
leaq -0x60(%rbp), %rdi
movq -0x18(%rbp), %rsi
addq -0x38(%rbp), %rsi
movq -0x10(%rbp), %rdx
subq -0x38(%rbp), %rdx
callq 0x2470
addq $0x60, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: DiplIngFrankGerlach[P]MST/./aes/aes.c
// Function: ccm_prepare_first_format_blk
void ccm_prepare_first_format_blk(BYTE buf[], int assoc_len, int payload_len, int payload_len_store_size, int mac_len, const BYTE nonce[], int nonce_len)
{
	// Set the flags for the first byte of the first block.
	buf[0] = ((((mac_len - 2) / 2) & 0x07) << 3) | ((payload_len_store_size - 1) & 0x07);
	if (assoc_len > 0)
		buf[0] += 0x40;
	// Format the rest of the first block, storing the nonce and the size of the payload.
	memcpy(&buf[1], nonce, nonce_len);
	memset(&buf[1 + nonce_len], 0, AES_BLOCK_SIZE - 1 - nonce_len);
	buf[15] = payload_len & 0x000000FF;
	buf[14] = (payload_len >> 8) & 0x000000FF;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movl 0x10(%rbp), %eax
movq %rdi, -0x8(%rbp)
movl %esi, -0xc(%rbp)
movl %edx, -0x10(%rbp)
movl %ecx, -0x14(%rbp)
movl %r8d, -0x18(%rbp)
movq %r9, -0x20(%rbp)
movl -0x18(%rbp), %eax
subl $0x2, %eax
movl $0x2, %ecx
cltd
idivl %ecx
andl $0x7, %eax
shll $0x3, %eax
movl -0x14(%rbp), %ecx
subl $0x1, %ecx
andl $0x7, %ecx
orl %ecx, %eax
movb %al, %cl
movq -0x8(%rbp), %rax
movb %cl, (%rax)
cmpl $0x0, -0xc(%rbp)
jle 0x3699
movq -0x8(%rbp), %rax
movzbl (%rax), %ecx
addl $0x40, %ecx
movb %cl, (%rax)
movq -0x8(%rbp), %rdi
addq $0x1, %rdi
movq -0x20(%rbp), %rsi
movslq 0x10(%rbp), %rdx
callq 0x2130
movq -0x8(%rbp), %rdi
movl 0x10(%rbp), %eax
addl $0x1, %eax
cltq
addq %rax, %rdi
movl $0xf, %eax
subl 0x10(%rbp), %eax
movslq %eax, %rdx
xorl %esi, %esi
callq 0x20c0
movl -0x10(%rbp), %eax
andl $0xff, %eax
movb %al, %cl
movq -0x8(%rbp), %rax
movb %cl, 0xf(%rax)
movl -0x10(%rbp), %eax
sarl $0x8, %eax
andl $0xff, %eax
movb %al, %cl
movq -0x8(%rbp), %rax
movb %cl, 0xe(%rax)
addq $0x20, %rsp
popq %rbp
retq
nopw (%rax,%rax)
// File: DiplIngFrankGerlach[P]MST/./aes/aes.c
// Function: ccm_format_assoc_data
void ccm_format_assoc_data(BYTE buf[], int *end_of_buf, const BYTE assoc[], int assoc_len)
{
	int pad;

	buf[*end_of_buf + 1] = assoc_len & 0x00FF;
	buf[*end_of_buf] = (assoc_len >> 8) & 0x00FF;
	*end_of_buf += 2;
	memcpy(&buf[*end_of_buf], assoc, assoc_len);
	*end_of_buf += assoc_len;
	pad = AES_BLOCK_SIZE - (*end_of_buf % AES_BLOCK_SIZE); /*BUG?*/
	memset(&buf[*end_of_buf], 0, pad);
	*end_of_buf += pad;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movl %ecx, -0x1c(%rbp)
movl -0x1c(%rbp), %eax
andl $0xff, %eax
movb %al, %dl
movq -0x8(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movb %dl, (%rax,%rcx)
movl -0x1c(%rbp), %eax
sarl $0x8, %eax
andl $0xff, %eax
movb %al, %dl
movq -0x8(%rbp), %rax
movq -0x10(%rbp), %rcx
movslq (%rcx), %rcx
movb %dl, (%rax,%rcx)
movq -0x10(%rbp), %rax
movl (%rax), %ecx
addl $0x2, %ecx
movl %ecx, (%rax)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movslq (%rax), %rax
addq %rax, %rdi
movq -0x18(%rbp), %rsi
movslq -0x1c(%rbp), %rdx
callq 0x2130
movl -0x1c(%rbp), %ecx
movq -0x10(%rbp), %rax
addl (%rax), %ecx
movl %ecx, (%rax)
movq -0x10(%rbp), %rax
movl (%rax), %eax
movl $0x10, %ecx
cltd
idivl %ecx
movl $0x10, %eax
subl %edx, %eax
movl %eax, -0x20(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movslq (%rax), %rax
addq %rax, %rdi
movslq -0x20(%rbp), %rdx
xorl %esi, %esi
callq 0x20c0
movl -0x20(%rbp), %ecx
movq -0x10(%rbp), %rax
addl (%rax), %ecx
movl %ecx, (%rax)
addq $0x20, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: DiplIngFrankGerlach[P]MST/./aes/aes.c
// Function: ccm_format_payload_data
void ccm_format_payload_data(BYTE buf[], int *end_of_buf, const BYTE payload[], int payload_len)
{
	int pad;

	memcpy(&buf[*end_of_buf], payload, payload_len);
	*end_of_buf += payload_len;
	pad = *end_of_buf % AES_BLOCK_SIZE;
	if (pad != 0)
		pad = AES_BLOCK_SIZE - pad;
	memset(&buf[*end_of_buf], 0, pad);
	*end_of_buf += pad;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movl %ecx, -0x1c(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movslq (%rax), %rax
addq %rax, %rdi
movq -0x18(%rbp), %rsi
movslq -0x1c(%rbp), %rdx
callq 0x2130
movl -0x1c(%rbp), %ecx
movq -0x10(%rbp), %rax
addl (%rax), %ecx
movl %ecx, (%rax)
movq -0x10(%rbp), %rax
movl (%rax), %eax
movl $0x10, %ecx
cltd
idivl %ecx
movl %edx, -0x20(%rbp)
cmpl $0x0, -0x20(%rbp)
je 0x382f
movl $0x10, %eax
subl -0x20(%rbp), %eax
movl %eax, -0x20(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movslq (%rax), %rax
addq %rax, %rdi
movslq -0x20(%rbp), %rdx
xorl %esi, %esi
callq 0x20c0
movl -0x20(%rbp), %ecx
movq -0x10(%rbp), %rax
addl (%rax), %ecx
movl %ecx, (%rax)
addq $0x20, %rsp
popq %rbp
retq
nopl (%rax)