// File: /workspace/github_cpp_makefile_star2_O2/mhe[P]raytracerframework_cpp/lodepng.cpp
// Function: LodePNG_encode(LodePNG_Encoder*, unsigned char**, unsigned long*, unsigned char const*, unsigned int, unsigned int)
void LodePNG_encode(LodePNG_Encoder* encoder, unsigned char** out, size_t* outsize, const unsigned char* image, unsigned w, unsigned h)
{
  LodePNG_InfoPng info;
  ucvector outv;
  unsigned char* data = 0; /*uncompressed version of the IDAT chunk data*/
  size_t datasize = 0;
  
  /*provide some proper output values if error will happen*/
  *out = 0;
  *outsize = 0;
  encoder->error = 0;
  
  info = encoder->infoPng; /*UNSAFE copy to avoid having to cleanup! but we will only change primitive parameters, and not invoke the cleanup function nor touch the palette's buffer so we use it safely*/
  info.width = w;
  info.height = h;
  
  if(encoder->settings.autoLeaveOutAlphaChannel && isFullyOpaque(image, w, h, &encoder->infoRaw.color))
  {
    /*go to a color type without alpha channel*/
    if(info.color.colorType == 6) info.color.colorType = 2;
    else if(info.color.colorType == 4) info.color.colorType = 0;
  }
  
  if(encoder->settings.zlibsettings.windowSize > 32768) { encoder->error = 60; return; } /*error: windowsize larger than allowed*/
  if(encoder->settings.zlibsettings.btype > 2) { encoder->error = 61; return; } /*error: unexisting btype*/
  if(encoder->infoPng.interlaceMethod > 1) { encoder->error = 71; return; } /*error: unexisting interlace mode*/
  if((encoder->error = checkColorValidity(info.color.colorType, info.color.bitDepth))) return; /*error: unexisting color type given*/
  if((encoder->error = checkColorValidity(encoder->infoRaw.color.colorType, encoder->infoRaw.color.bitDepth))) return; /*error: unexisting color type given*/
  
  if(!LodePNG_InfoColor_equal(&encoder->infoRaw.color, &info.color))
  {
    unsigned char* converted;
    size_t size = (w * h * LodePNG_InfoColor_getBpp(&info.color) + 7) / 8;
    
    if((info.color.colorType != 6 && info.color.colorType != 2) || (info.color.bitDepth != 8)) { encoder->error = 59; return; } /*for the output image, only these types are supported*/
    converted = (unsigned char*)malloc(size);
    if(!converted && size) encoder->error = 9955; /*error: malloc failed*/
    if(!encoder->error) encoder->error = LodePNG_convert(converted, image, &info.color, &encoder->infoRaw.color, w, h);
    if(!encoder->error) preProcessScanlines(&data, &datasize, converted, &info);/*filter(data.data, converted.data, w, h, LodePNG_InfoColor_getBpp(&info.color));*/
    free(converted);
  }
  else preProcessScanlines(&data, &datasize, image, &info);/*filter(data.data, image, w, h, LodePNG_InfoColor_getBpp(&info.color));*/
  
  ucvector_init(&outv);
  while(!encoder->error) /*not really a while loop, this is only used to break out if an error happens to avoid goto's to do the ucvector cleanup*/
  {
#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
    size_t i;
#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
    /*write signature and chunks*/
    writeSignature(&outv);
    /*IHDR*/
    addChunk_IHDR(&outv, w, h, info.color.bitDepth, info.color.colorType, info.interlaceMethod);
#ifdef LODEPNG_COMPILE_UNKNOWN_CHUNKS
    /*unknown chunks between IHDR and PLTE*/
    if(info.unknown_chunks.data[0]) { encoder->error = addUnknownChunks(&outv, info.unknown_chunks.data[0], info.unknown_chunks.datasize[0]); if(encoder->error) break; }
#endif /*LODEPNG_COMPILE_UNKNOWN_CHUNKS*/
    /*PLTE*/
    if(info.color.colorType == 3)
    {
      if(info.color.palettesize == 0 || info.color.palettesize > 256) { encoder->error = 68; break; }
      addChunk_PLTE(&outv, &info.color);
    }
    if(encoder->settings.force_palette && (info.color.colorType == 2 || info.color.colorType == 6))
    {
      if(info.color.palettesize == 0 || info.color.palettesize > 256) { encoder->error = 68; break; }
      addChunk_PLTE(&outv, &info.color);
    }
    /*tRNS*/
    if(info.color.colorType == 3 && !isPaletteFullyOpaque(info.color.palette, info.color.palettesize)) addChunk_tRNS(&outv, &info.color);
    if((info.color.colorType == 0 || info.color.colorType == 2) && info.color.key_defined) addChunk_tRNS(&outv, &info.color);
#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
    /*bKGD (must come between PLTE and the IDAt chunks*/
    if(info.background_defined) addChunk_bKGD(&outv, &info);
    /*pHYs (must come before the IDAT chunks)*/
    if(info.phys_defined) addChunk_pHYs(&outv, &info);
#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
#ifdef LODEPNG_COMPILE_UNKNOWN_CHUNKS
    /*unknown chunks between PLTE and IDAT*/
    if(info.unknown_chunks.data[1]) { encoder->error = addUnknownChunks(&outv, info.unknown_chunks.data[1], info.unknown_chunks.datasize[1]); if(encoder->error) break; }
#endif /*LODEPNG_COMPILE_UNKNOWN_CHUNKS*/
    /*IDAT (multiple IDAT chunks must be consecutive)*/
    encoder->error = addChunk_IDAT(&outv, data, datasize, &encoder->settings.zlibsettings);
    if(encoder->error) break;
#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
    /*tIME*/
    if(info.time_defined) addChunk_tIME(&outv, &info.time);
    /*tEXt and/or zTXt*/
    for(i = 0; i < info.text.num; i++)
    {
      if(strlen(info.text.keys[i]) > 79) { encoder->error = 66; break; }
      if(strlen(info.text.keys[i]) < 1) { encoder->error = 67; break; }
      if(encoder->settings.text_compression)
        addChunk_zTXt(&outv, info.text.keys[i], info.text.strings[i], &encoder->settings.zlibsettings);
      else
        addChunk_tEXt(&outv, info.text.keys[i], info.text.strings[i]);
    }
    /*LodePNG version id in text chunk*/
    if(encoder->settings.add_id)
    {
      unsigned alread_added_id_text = 0;
      for(i = 0; i < info.text.num; i++)
        if(!strcmp(info.text.keys[i], "LodePNG")) { alread_added_id_text = 1; break; }
      if(alread_added_id_text == 0)
        addChunk_tEXt(&outv, "LodePNG", VERSION_STRING); /*it's shorter as tEXt than as zTXt chunk*/
    }
    /*iTXt*/
    for(i = 0; i < info.itext.num; i++)
    {
      if(strlen(info.itext.keys[i]) > 79) { encoder->error = 66; break; }
      if(strlen(info.itext.keys[i]) < 1) { encoder->error = 67; break; }
      addChunk_iTXt(&outv, encoder->settings.text_compression,
                    info.itext.keys[i], info.itext.langtags[i], info.itext.transkeys[i], info.itext.strings[i], 
                    &encoder->settings.zlibsettings);
    }
#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
#ifdef LODEPNG_COMPILE_UNKNOWN_CHUNKS
    /*unknown chunks between IDAT and IEND*/
    if(info.unknown_chunks.data[2]) { encoder->error = addUnknownChunks(&outv, info.unknown_chunks.data[2], info.unknown_chunks.datasize[2]); if(encoder->error) break; }
#endif /*LODEPNG_COMPILE_UNKNOWN_CHUNKS*/
    /*IEND*/
    addChunk_IEND(&outv);
    
    break; /*this isn't really a while loop; no error happened so break out now!*/
  }
  
  free(data);
  /*instead of cleaning the vector up, give it to the output*/
  *out = outv.data;
  *outsize = outv.size;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x178, %rsp            # imm = 0x178
movl %r9d, %r12d
movl %r8d, %r13d
movq %rcx, %rbx
andq $0x0, -0x80(%rbp)
andq $0x0, -0xb0(%rbp)
movq %rsi, -0xb8(%rbp)
andq $0x0, (%rsi)
movq %rdi, %r15
movq %rdx, -0xc0(%rbp)
andq $0x0, (%rdx)
andl $0x0, 0x128(%rdi)
leaq 0x20(%rdi), %rsi
leaq -0x1a0(%rbp), %r14
movl $0xe0, %edx
movq %r14, %rdi
callq 0x4240
movl %r13d, (%r14)
movl %r12d, 0x4(%r14)
cmpl $0x0, 0xc(%r15)
je 0x1463a
movl 0x100(%r15), %ecx
cmpl $0x3, %ecx
je 0x145b8
movl %r12d, %eax
imull %r13d, %eax
movl %eax, %eax
cmpl $0x4, %ecx
je 0x14589
cmpl $0x6, %ecx
jne 0x1463a
cmpl $0x8, 0x104(%r15)
jne 0x1460a
leaq 0x4(,%rax,4), %rax
xorl %ecx, %ecx
leaq 0x4(%rcx), %rdx
cmpq %rdx, %rax
je 0x145cf
andl $-0x4, %ecx
cmpb $-0x1, 0x3(%rbx,%rcx)
movq %rdx, %rcx
je 0x1456e
jmp 0x1463a
cmpl $0x8, 0x104(%r15)
jne 0x145e3
leaq 0x2(,%rax,2), %rax
xorl %ecx, %ecx
leaq 0x2(%rcx), %rdx
cmpq %rdx, %rax
je 0x145cf
andl $-0x2, %ecx
cmpb $-0x1, 0x1(%rbx,%rcx)
movq %rdx, %rcx
je 0x1459d
jmp 0x1463a
movq 0x108(%r15), %rdi
movq 0x110(%r15), %rsi
callq 0x155e9
testl %eax, %eax
je 0x1463a
movl -0x188(%rbp), %eax
cmpl $0x6, %eax
je 0x14631
cmpl $0x4, %eax
jne 0x1463a
xorl %eax, %eax
jmp 0x14634
shlq $0x2, %rax
pushq $-0x4
popq %rcx
leaq 0x4(%rcx), %rdx
cmpq %rdx, %rax
je 0x145cf
leal 0x6(%rcx), %esi
cmpb $-0x1, (%rbx,%rsi)
jne 0x1463a
addl $0x7, %ecx
cmpb $-0x1, (%rbx,%rcx)
movq %rdx, %rcx
je 0x145ea
jmp 0x1463a
shlq $0x3, %rax
pushq $-0x8
popq %rcx
leaq 0x8(%rcx), %rdx
cmpq %rdx, %rax
je 0x145cf
leal 0xe(%rcx), %esi
cmpb $-0x1, (%rbx,%rsi)
jne 0x1463a
addl $0xf, %ecx
cmpb $-0x1, (%rbx,%rcx)
movq %rdx, %rcx
je 0x14611
jmp 0x1463a
pushq $0x2
popq %rax
movl %eax, -0x188(%rbp)
cmpl $0x8001, 0x8(%r15)      # imm = 0x8001
jb 0x14654
movl $0x3c, 0x128(%r15)
jmp 0x147fb
cmpl $0x3, (%r15)
jb 0x1466a
movl $0x3d, 0x128(%r15)
jmp 0x147fb
cmpl $0x2, 0x30(%r15)
jb 0x14681
movl $0x47, 0x128(%r15)
jmp 0x147fb
movl -0x188(%rbp), %r14d
movl -0x184(%rbp), %esi
movl %r14d, %edi
movl %esi, -0x30(%rbp)
callq 0x12efc
movl %eax, 0x128(%r15)
testl %eax, %eax
jne 0x147fb
movl 0x100(%r15), %edi
movl 0x104(%r15), %esi
movl %edi, -0x58(%rbp)
movl %esi, -0xa8(%rbp)
callq 0x12efc
movl %eax, 0x128(%r15)
testl %eax, %eax
jne 0x147fb
leaq -0x188(%rbp), %rax
movl -0x58(%rbp), %edx
xorl %r14d, %edx
movl -0x30(%rbp), %ecx
movl -0xa8(%rbp), %esi
xorl %ecx, %esi
orl %edx, %esi
jne 0x1470e
leaq -0x80(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
leaq -0x1a0(%rbp), %rcx
movq %rbx, %rdx
callq 0x14fe1
jmp 0x147c0
andl $-0x5, %r14d
xorl $0x2, %r14d
xorl $0x8, %ecx
orl %r14d, %ecx
jne 0x14761
movq %rax, %rdi
callq 0x11cfc
movl %r12d, %r14d
imull %r13d, %r14d
imull %eax, %r14d
addl $0x7, %r14d
movl %r14d, %edi
shrl $0x3, %edi
callq 0x43f0
movq %rax, %rdi
testq %rax, %rax
setne %al
cmpl $0x8, %r14d
setb %cl
orb %al, %cl
jne 0x14771
movl $0x26e3, 0x128(%r15) # imm = 0x26E3
jmp 0x147bb
movl $0x3b, 0x128(%r15)
jmp 0x147fb
leaq 0x100(%r15), %rcx
movq %rbx, %rsi
movq %rdi, %rbx
leaq -0x188(%rbp), %rdx
movl %r13d, %r8d
movl %r12d, %r9d
callq 0x12573
movq %rbx, %rdi
movl %eax, 0x128(%r15)
testl %eax, %eax
jne 0x147bb
leaq -0x80(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
leaq -0x1a0(%rbp), %rcx
movq %rbx, %rdx
callq 0x14fe1
movq %rbx, %rdi
callq 0x4350
andq $0x0, -0x60(%rbp)
xorps %xmm0, %xmm0
movaps %xmm0, -0x70(%rbp)
cmpl $0x0, 0x128(%r15)
je 0x1480d
movq -0x80(%rbp), %rdi
callq 0x4350
movq -0x70(%rbp), %rax
movq -0xb8(%rbp), %rcx
movq %rax, (%rcx)
movq -0x68(%rbp), %rax
movq -0xc0(%rbp), %rcx
movq %rax, (%rcx)
addq $0x178, %rsp            # imm = 0x178
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq -0x70(%rbp), %r14
movq %r14, %rdi
movl $0x89, %esi
callq 0x11607
pushq $0x50
popq %rsi
movq %r14, %rdi
callq 0x11607
pushq $0x4e
popq %rsi
movq %r14, %rdi
callq 0x11607
pushq $0x47
popq %rsi
movq %r14, %rdi
callq 0x11607
pushq $0xd
popq %rsi
movq %r14, %rdi
callq 0x11607
pushq $0xa
popq %rbx
movq %r14, %rdi
movl %ebx, %esi
callq 0x11607
pushq $0x1a
popq %rsi
movq %r14, %rdi
callq 0x11607
movq %r14, %rdi
movl %ebx, %esi
callq 0x11607
movzbl -0x184(%rbp), %r14d
movzbl -0x188(%rbp), %eax
movl %eax, -0x58(%rbp)
movzbl -0x190(%rbp), %eax
movl %eax, -0x30(%rbp)
leaq -0x50(%rbp), %rbx
xorps %xmm0, %xmm0
movaps %xmm0, (%rbx)
andq $0x0, 0x10(%rbx)
movq %rbx, %rdi
movl %r13d, %esi
callq 0x17ea8
movq %rbx, %rdi
movl %r12d, %esi
callq 0x17ea8
movq %rbx, %rdi
movl %r14d, %esi
callq 0x11607
movq %rbx, %rdi
movl -0x58(%rbp), %esi
callq 0x11607
movq %rbx, %rdi
xorl %esi, %esi
callq 0x11607
movq %rbx, %rdi
xorl %esi, %esi
callq 0x11607
movq %rbx, %rdi
movl -0x30(%rbp), %esi
callq 0x11607
movq (%rbx), %rdx
movq 0x8(%rbx), %rcx
leaq 0xe30d(%rip), %rsi      # 0x22bfd
leaq -0x70(%rbp), %rdi
callq 0x17ed3
movq %rbx, %rdi
callq 0x11873
movq -0xf0(%rbp), %rsi
testq %rsi, %rsi
je 0x1492c
movq -0xd8(%rbp), %rdx
leaq -0x70(%rbp), %rdi
callq 0x15505
movl %eax, 0x128(%r15)
testl %eax, %eax
jne 0x147d6
movl -0x188(%rbp), %eax
cmpl $0x3, %eax
jne 0x14963
movq $-0x101, %rax           # imm = 0xFEFF
movq -0x178(%rbp), %rcx
addq %rax, %rcx
cmpq %rax, %rcx
jbe 0x1498a
leaq -0x70(%rbp), %rdi
leaq -0x188(%rbp), %rsi
callq 0x15566
movl -0x188(%rbp), %eax
cmpl $0x0, 0x10(%r15)
je 0x149b0
movl %eax, %ecx
andl $-0x5, %ecx
cmpl $0x2, %ecx
jne 0x149b0
movq $-0x101, %rax           # imm = 0xFEFF
movq -0x178(%rbp), %rcx
addq %rax, %rcx
cmpq %rax, %rcx
ja 0x1499a
movl $0x44, 0x128(%r15)
jmp 0x147d6
leaq -0x70(%rbp), %rdi
leaq -0x188(%rbp), %rsi
callq 0x15566
movl -0x188(%rbp), %eax
cmpl $0x3, %eax
jne 0x149e7
movq -0x180(%rbp), %rdi
movq -0x178(%rbp), %rsi
callq 0x155e9
testl %eax, %eax
je 0x149d1
pushq $0x3
popq %rax
jmp 0x149e7
leaq -0x70(%rbp), %rdi
leaq -0x188(%rbp), %rsi
callq 0x15608
movl -0x188(%rbp), %eax
testl $0xfffffffd, %eax       # imm = 0xFFFFFFFD
jne 0x14a07
cmpl $0x0, -0x170(%rbp)
je 0x14a07
leaq -0x70(%rbp), %rdi
leaq -0x188(%rbp), %rsi
callq 0x15608
cmpl $0x0, -0x160(%rbp)
je 0x14ac8
xorps %xmm0, %xmm0
movaps %xmm0, -0x50(%rbp)
andq $0x0, -0x40(%rbp)
movl -0x188(%rbp), %eax
xorl %edx, %edx
xorl %ecx, %ecx
cmpq $0x6, %rax
ja 0x14aaf
leaq 0xde19(%rip), %rsi      # 0x22850
movslq (%rsi,%rax,4), %rax
addq %rsi, %rax
leaq -0x15c(%rbp), %r14
jmpq *%rax
movzbl -0x15b(%rbp), %esi
leaq -0x50(%rbp), %rdi
jmp 0x14a97
leaq -0x154(%rbp), %r14
movzbl -0x7(%r14), %esi
movq %rbx, %rdi
callq 0x11607
movzbl -0x8(%r14), %esi
movq %rbx, %rdi
callq 0x11607
movzbl -0x3(%r14), %esi
movq %rbx, %rdi
callq 0x11607
movzbl -0x4(%r14), %esi
movq %rbx, %rdi
callq 0x11607
movzbl 0x1(%r14), %esi
movq %rbx, %rdi
callq 0x11607
movzbl (%r14), %esi
movq %rbx, %rdi
callq 0x11607
movq (%rbx), %rdx
movq 0x8(%rbx), %rcx
leaq 0xe129(%rip), %rsi      # 0x22bdf
leaq -0x70(%rbp), %rdi
callq 0x17ed3
leaq -0x50(%rbp), %rdi
callq 0x11873
cmpl $0x0, -0x100(%rbp)
je 0x14b26
xorps %xmm0, %xmm0
movaps %xmm0, (%rbx)
andq $0x0, 0x10(%rbx)
movl -0xfc(%rbp), %esi
movq %rbx, %rdi
callq 0x17ea8
movl -0xf8(%rbp), %esi
movq %rbx, %rdi
callq 0x17ea8
movzbl -0xf4(%rbp), %esi
movq %rbx, %rdi
callq 0x11607
movq (%rbx), %rdx
movq 0x8(%rbx), %rcx
leaq 0xe0e3(%rip), %rsi      # 0x22bf8
leaq -0x70(%rbp), %rdi
callq 0x17ed3
movq %rbx, %rdi
callq 0x11873
movq -0xe8(%rbp), %rsi
testq %rsi, %rsi
je 0x14b51
movq -0xd0(%rbp), %rdx
leaq -0x70(%rbp), %rdi
callq 0x15505
movl %eax, 0x128(%r15)
testl %eax, %eax
jne 0x147d6
movq -0x80(%rbp), %rdx
movq -0xb0(%rbp), %rcx
xorps %xmm0, %xmm0
leaq -0x48(%rbp), %rsi
movaps %xmm0, -0x8(%rsi)
andq $0x0, 0x8(%rsi)
leaq -0x50(%rbp), %rdi
movq %r15, %r8
callq 0x11786
movl %eax, %ebx
testl %eax, %eax
jne 0x14b98
movq -0x50(%rbp), %rdx
movq -0x48(%rbp), %rcx
leaq 0xe03e(%rip), %rsi      # 0x22bcb
leaq -0x70(%rbp), %rdi
callq 0x17ed3
movl %eax, %ebx
leaq -0x50(%rbp), %rdi
callq 0x11873
movl %ebx, 0x128(%r15)
testl %ebx, %ebx
jne 0x147d6
cmpb $0x0, -0x110(%rbp)
je 0x14c22
pushq $0x7
popq %rdi
callq 0x43f0
testq %rax, %rax
je 0x14c22
movq %rax, %rbx
movzwl -0x10c(%rbp), %eax
rolw $0x8, %ax
movw %ax, (%rbx)
movb -0x108(%rbp), %al
movb %al, 0x2(%rbx)
movb -0x107(%rbp), %al
movb %al, 0x3(%rbx)
movb -0x106(%rbp), %al
movb %al, 0x4(%rbx)
movb -0x105(%rbp), %al
movb %al, 0x5(%rbx)
movb -0x104(%rbp), %al
movb %al, 0x6(%rbx)
leaq 0xdfe8(%rip), %rsi      # 0x22bf3
leaq -0x70(%rbp), %rdi
pushq $0x7
popq %rcx
movq %rbx, %rdx
callq 0x17ed3
movq %rbx, %rdi
callq 0x4350
leaq -0x98(%rbp), %r14
xorl %ecx, %ecx
leaq -0x50(%rbp), %r13
movq -0x150(%rbp), %r12
cmpq %r12, %rcx
jae 0x14d7d
movq -0x148(%rbp), %rax
movq %rcx, -0x30(%rbp)
movq (%rax,%rcx,8), %rbx
movq %rbx, %rdi
callq 0x4100
cmpq $0x4f, %rax
ja 0x14d6f
testq %rax, %rax
je 0x14d73
cmpl $0x0, 0x18(%r15)
movq -0x140(%rbp), %rax
movq -0x30(%rbp), %rcx
movq (%rax,%rcx,8), %r12
je 0x14d1c
movq %r12, %rdi
callq 0x4100
movq %rax, -0x58(%rbp)
xorps %xmm0, %xmm0
movaps %xmm0, -0x50(%rbp)
andq $0x0, -0x40(%rbp)
movaps %xmm0, -0xa0(%rbp)
andq $0x0, -0x90(%rbp)
movb (%rbx), %al
testb %al, %al
je 0x14cc0
movzbl %al, %esi
movq %r13, %rdi
callq 0x11607
incq %rbx
jmp 0x14caa
movq %r13, %rdi
xorl %esi, %esi
callq 0x11607
movq %r13, %rdi
xorl %esi, %esi
callq 0x11607
leaq -0xa0(%rbp), %rbx
movq %rbx, %rdi
movq %r14, %rsi
movq %r12, %rdx
movq -0x58(%rbp), %rcx
movq %r15, %r8
callq 0x11786
testl %eax, %eax
jne 0x14d53
movq -0xa0(%rbp), %rbx
movq -0x98(%rbp), %r12
xorl %r14d, %r14d
cmpq %r14, %r12
je 0x14d2d
movzbl (%rbx,%r14), %esi
movq %r13, %rdi
callq 0x11607
incq %r14
jmp 0x14d05
leaq -0x70(%rbp), %rdi
movq %rbx, %rsi
movq %r12, %rdx
callq 0x15701
jmp 0x14d63
movq -0x50(%rbp), %rdx
movq -0x48(%rbp), %rcx
leaq -0x70(%rbp), %rdi
leaq 0xdea9(%rip), %rsi      # 0x22be9
callq 0x17ed3
leaq -0x98(%rbp), %r14
leaq -0xa0(%rbp), %rbx
movq %rbx, %rdi
callq 0x11873
movq %r13, %rdi
callq 0x11873
movq -0x30(%rbp), %rcx
incq %rcx
jmp 0x14c2f
pushq $0x42
jmp 0x14d75
pushq $0x43
popq %rax
movl %eax, 0x128(%r15)
cmpl $0x0, 0x14(%r15)
je 0x14dc6
movq -0x148(%rbp), %r14
xorl %r13d, %r13d
leaq 0xde1f(%rip), %rbx      # 0x22bb4
cmpq %r13, %r12
je 0x14daf
movq (%r14,%r13,8), %rdi
movq %rbx, %rsi
callq 0x4420
incq %r13
testl %eax, %eax
jne 0x14d95
jmp 0x14dc6
leaq 0xddfe(%rip), %rsi      # 0x22bb4
leaq 0xddff(%rip), %rdx      # 0x22bbc
leaq -0x70(%rbp), %rdi
callq 0x15701
xorl %ebx, %ebx
pushq $0x42
popq %rax
movl %eax, -0x74(%rbp)
cmpq -0x138(%rbp), %rbx
jae 0x14f9d
movq -0x130(%rbp), %rax
movq (%rax,%rbx,8), %r13
movq %r13, %rdi
callq 0x4100
cmpq $0x4f, %rax
ja 0x14f93
testq %rax, %rax
je 0x14f8d
movl 0x18(%r15), %eax
movl %eax, -0x30(%rbp)
movq -0x128(%rbp), %rax
movq -0x120(%rbp), %rcx
movq (%rax,%rbx,8), %r12
movq (%rcx,%rbx,8), %r14
movq -0x118(%rbp), %rax
movq %rbx, -0x58(%rbp)
movq (%rax,%rbx,8), %rbx
movq %rbx, %rdi
callq 0x4100
movq %rax, -0xa8(%rbp)
xorps %xmm0, %xmm0
movaps %xmm0, -0x50(%rbp)
andq $0x0, -0x40(%rbp)
movb (%r13), %al
testb %al, %al
je 0x14e61
movzbl %al, %esi
leaq -0x50(%rbp), %rdi
callq 0x11607
incq %r13
jmp 0x14e48
leaq -0x50(%rbp), %r13
movq %r13, %rdi
xorl %esi, %esi
callq 0x11607
xorl %esi, %esi
cmpl $0x0, -0x30(%rbp)
setne %sil
movq %r13, %rdi
callq 0x11607
movq %r13, %rdi
xorl %esi, %esi
callq 0x11607
movb (%r12), %al
testb %al, %al
je 0x14ea3
movzbl %al, %esi
movq %r13, %rdi
callq 0x11607
incq %r12
jmp 0x14e8b
movq %r13, %rdi
xorl %esi, %esi
callq 0x11607
movb (%r14), %al
testb %al, %al
je 0x14ec4
movzbl %al, %esi
movq %r13, %rdi
callq 0x11607
incq %r14
jmp 0x14ead
movq %r13, %rdi
xorl %esi, %esi
callq 0x11607
cmpl $0x0, -0x30(%rbp)
je 0x14f41
xorps %xmm0, %xmm0
movaps %xmm0, -0xa0(%rbp)
andq $0x0, -0x90(%rbp)
leaq -0xa0(%rbp), %rdi
leaq -0x98(%rbp), %rsi
movq %rbx, %rdx
movq -0xa8(%rbp), %rcx
movq %r15, %r8
callq 0x11786
testl %eax, %eax
jne 0x14f5f
movq -0xa0(%rbp), %r14
movq -0x98(%rbp), %r12
xorl %r13d, %r13d
cmpq %r13, %r12
je 0x14f73
movzbl (%r14,%r13), %esi
leaq -0x50(%rbp), %rdi
callq 0x11607
incq %r13
jmp 0x14f1b
movzbl %al, %esi
movq %r13, %rdi
callq 0x11607
incq %rbx
movb (%rbx), %al
testb %al, %al
jne 0x14f33
movq -0x50(%rbp), %rdx
movq -0x48(%rbp), %rcx
leaq -0x70(%rbp), %rdi
leaq 0xdc94(%rip), %rsi      # 0x22bee
callq 0x17ed3
movq %r13, %rdi
callq 0x11873
movq -0x58(%rbp), %rbx
incq %rbx
jmp 0x14dce
leaq -0x50(%rbp), %r13
movb (%rbx), %al
testb %al, %al
je 0x14f47
movzbl %al, %esi
movq %r13, %rdi
callq 0x11607
incq %rbx
jmp 0x14f77
pushq $0x43
popq %rax
movl %eax, -0x74(%rbp)
movl -0x74(%rbp), %eax
movl %eax, 0x128(%r15)
movq -0xe0(%rbp), %rsi
testq %rsi, %rsi
je 0x14fc8
movq -0xc8(%rbp), %rdx
leaq -0x70(%rbp), %rdi
callq 0x15505
movl %eax, 0x128(%r15)
testl %eax, %eax
jne 0x147d6
leaq 0xdc01(%rip), %rsi      # 0x22bd0
leaq -0x70(%rbp), %rdi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x17ed3
jmp 0x147d6