// File: /workspace/github_cpp_makefile_star2_O3/dgboy2000[P]compress/compress.cpp
// Function: DATCompression::decompression(std::vector<int, std::allocator<int>>)
vector <int> DATCompression::decompression(vector<int> compressed)
{
  vector <int> decompressed = compressed;
  int i,n=30;
  
  // // Simple decompression stack
  // decompressed = huffman_decompress(decompressed);
  // decompressed = diff_decompress(decompressed);

  // bzip-inspired decompression stack (but simpler)
  decompressed = huffman_decompress(decompressed);
  decompressed = golomb_decompress(decompressed);
  decompressed = run_length_decode(decompressed);
  decompressed = burrows_wheeler_decode(decompressed);
  decompressed = run_length_decode(decompressed);
  decompressed = diff_decompress(decompressed);

  return decompressed;
}

// Assembly:
pushq %r14
pushq %rbx
subq $0xa8, %rsp
movq %rsi, %r14
movq %rdi, %rbx
movq %rdx, %rsi
callq 0x6284
leaq 0x90(%rsp), %rdi
movq %rbx, %rsi
callq 0x6284
movq %rsp, %rdi
leaq 0x90(%rsp), %rdx
callq 0x3b9a
movq (%rbx), %rdi
movq 0x10(%rbx), %rsi
movaps (%rsp), %xmm0
movups %xmm0, (%rbx)
movq 0x10(%rsp), %rax
movq %rax, 0x10(%rbx)
xorps %xmm0, %xmm0
movaps %xmm0, (%rsp)
movq $0x0, 0x10(%rsp)
testq %rdi, %rdi
je 0x384c
subq %rdi, %rsi
callq 0x21b0
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x384c
movq 0x10(%rsp), %rsi
subq %rdi, %rsi
callq 0x21b0
movq 0x90(%rsp), %rdi
testq %rdi, %rdi
je 0x3869
movq 0xa0(%rsp), %rsi
subq %rdi, %rsi
callq 0x21b0
leaq 0x78(%rsp), %rdi
movq %rbx, %rsi
callq 0x6284
movq %rsp, %rdi
leaq 0x78(%rsp), %rdx
movq %r14, %rsi
callq 0x3f02
movq (%rbx), %rdi
movq 0x10(%rbx), %rsi
movaps (%rsp), %xmm0
movups %xmm0, (%rbx)
movq 0x10(%rsp), %rax
movq %rax, 0x10(%rbx)
xorps %xmm0, %xmm0
movaps %xmm0, (%rsp)
movq $0x0, 0x10(%rsp)
testq %rdi, %rdi
je 0x38d0
subq %rdi, %rsi
callq 0x21b0
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x38d0
movq 0x10(%rsp), %rsi
subq %rdi, %rsi
callq 0x21b0
movq 0x78(%rsp), %rdi
testq %rdi, %rdi
je 0x38ea
movq 0x88(%rsp), %rsi
subq %rdi, %rsi
callq 0x21b0
leaq 0x60(%rsp), %rdi
movq %rbx, %rsi
callq 0x6284
movq %rsp, %rdi
leaq 0x60(%rsp), %rdx
callq 0x40a2
movq (%rbx), %rdi
movq 0x10(%rbx), %rsi
movaps (%rsp), %xmm0
movups %xmm0, (%rbx)
movq 0x10(%rsp), %rax
movq %rax, 0x10(%rbx)
xorps %xmm0, %xmm0
movaps %xmm0, (%rsp)
movq $0x0, 0x10(%rsp)
testq %rdi, %rdi
je 0x394e
subq %rdi, %rsi
callq 0x21b0
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x394e
movq 0x10(%rsp), %rsi
subq %rdi, %rsi
callq 0x21b0
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0x3965
movq 0x70(%rsp), %rsi
subq %rdi, %rsi
callq 0x21b0
leaq 0x48(%rsp), %rdi
movq %rbx, %rsi
callq 0x6284
movq %rsp, %rdi
leaq 0x48(%rsp), %rdx
callq 0x41ac
movq (%rbx), %rdi
movq 0x10(%rbx), %rsi
movaps (%rsp), %xmm0
movups %xmm0, (%rbx)
movq 0x10(%rsp), %rax
movq %rax, 0x10(%rbx)
xorps %xmm0, %xmm0
movaps %xmm0, (%rsp)
movq $0x0, 0x10(%rsp)
testq %rdi, %rdi
je 0x39c9
subq %rdi, %rsi
callq 0x21b0
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x39c9
movq 0x10(%rsp), %rsi
subq %rdi, %rsi
callq 0x21b0
movq 0x48(%rsp), %rdi
testq %rdi, %rdi
je 0x39e0
movq 0x58(%rsp), %rsi
subq %rdi, %rsi
callq 0x21b0
leaq 0x30(%rsp), %rdi
movq %rbx, %rsi
callq 0x6284
movq %rsp, %rdi
leaq 0x30(%rsp), %rdx
callq 0x40a2
movq (%rbx), %rdi
movq 0x10(%rbx), %rsi
movaps (%rsp), %xmm0
movups %xmm0, (%rbx)
movq 0x10(%rsp), %rax
movq %rax, 0x10(%rbx)
xorps %xmm0, %xmm0
movaps %xmm0, (%rsp)
movq $0x0, 0x10(%rsp)
testq %rdi, %rdi
je 0x3a44
subq %rdi, %rsi
callq 0x21b0
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x3a44
movq 0x10(%rsp), %rsi
subq %rdi, %rsi
callq 0x21b0
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0x3a5b
movq 0x40(%rsp), %rsi
subq %rdi, %rsi
callq 0x21b0
leaq 0x18(%rsp), %rdi
movq %rbx, %rsi
callq 0x6284
movq %rsp, %rdi
leaq 0x18(%rsp), %rdx
callq 0x43b2
movq (%rbx), %rdi
movq 0x10(%rbx), %rsi
movaps (%rsp), %xmm0
movups %xmm0, (%rbx)
movq 0x10(%rsp), %rax
movq %rax, 0x10(%rbx)
xorps %xmm0, %xmm0
movaps %xmm0, (%rsp)
movq $0x0, 0x10(%rsp)
testq %rdi, %rdi
je 0x3abf
subq %rdi, %rsi
callq 0x21b0
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x3abf
movq 0x10(%rsp), %rsi
subq %rdi, %rsi
callq 0x21b0
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0x3ad6
movq 0x28(%rsp), %rsi
subq %rdi, %rsi
callq 0x21b0
movq %rbx, %rax
addq $0xa8, %rsp
popq %rbx
popq %r14
retq
movq %rax, %r14
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0x3b7e
movq 0x28(%rsp), %rsi
jmp 0x3b71
jmp 0x3b7b
movq %rax, %r14
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0x3b7e
movq 0x40(%rsp), %rsi
jmp 0x3b71
jmp 0x3b7b
movq %rax, %r14
movq 0x48(%rsp), %rdi
testq %rdi, %rdi
je 0x3b7e
movq 0x58(%rsp), %rsi
jmp 0x3b71
jmp 0x3b7b
movq %rax, %r14
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0x3b7e
movq 0x70(%rsp), %rsi
jmp 0x3b71
jmp 0x3b7b
movq %rax, %r14
movq 0x78(%rsp), %rdi
testq %rdi, %rdi
je 0x3b7e
movq 0x88(%rsp), %rsi
jmp 0x3b71
jmp 0x3b7b
movq %rax, %r14
movq 0x90(%rsp), %rdi
testq %rdi, %rdi
je 0x3b7e
movq 0xa0(%rsp), %rsi
subq %rdi, %rsi
callq 0x21b0
jmp 0x3b7e
movq %rax, %r14
movq (%rbx), %rdi
testq %rdi, %rdi
je 0x3b92
movq 0x10(%rbx), %rsi
subq %rdi, %rsi
callq 0x21b0
movq %r14, %rdi
callq 0x22c0