// File: /workspace/github_c_makefile_star2_O2/Joy-Division[P]tools-mgs/lodepng/lodepng.c
// Function: lodepng_convert
unsigned lodepng_convert(unsigned char* out, const unsigned char* in,
                         const LodePNGColorMode* mode_out, const LodePNGColorMode* mode_in,
                         unsigned w, unsigned h)
{
  size_t i;
  ColorTree tree;
  size_t numpixels = w * h;
  unsigned error = 0;

  if(lodepng_color_mode_equal(mode_out, mode_in))
  {
    size_t numbytes = lodepng_get_raw_size(w, h, mode_in);
    for(i = 0; i != numbytes; ++i) out[i] = in[i];
    return 0;
  }

  if(mode_out->colortype == LCT_PALETTE)
  {
    size_t palettesize = mode_out->palettesize;
    const unsigned char* palette = mode_out->palette;
    size_t palsize = 1u << mode_out->bitdepth;
    /*if the user specified output palette but did not give the values, assume
    they want the values of the input color type (assuming that one is palette).
    Note that we never create a new palette ourselves.*/
    if(palettesize == 0)
    {
      palettesize = mode_in->palettesize;
      palette = mode_in->palette;
    }
    if(palettesize < palsize) palsize = palettesize;
    color_tree_init(&tree);
    for(i = 0; i != palsize; ++i)
    {
      const unsigned char* p = &palette[i * 4];
      color_tree_add(&tree, p[0], p[1], p[2], p[3], i);
    }
  }

  if(mode_in->bitdepth == 16 && mode_out->bitdepth == 16)
  {
    for(i = 0; i != numpixels; ++i)
    {
      unsigned short r = 0, g = 0, b = 0, a = 0;
      getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode_in);
      rgba16ToPixel(out, i, mode_out, r, g, b, a);
    }
  }
  else if(mode_out->bitdepth == 8 && mode_out->colortype == LCT_RGBA)
  {
    getPixelColorsRGBA8(out, numpixels, 1, in, mode_in);
  }
  else if(mode_out->bitdepth == 8 && mode_out->colortype == LCT_RGB)
  {
    getPixelColorsRGBA8(out, numpixels, 0, in, mode_in);
  }
  else
  {
    unsigned char r = 0, g = 0, b = 0, a = 0;
    for(i = 0; i != numpixels; ++i)
    {
      getPixelColorRGBA8(&r, &g, &b, &a, in, i, mode_in);
      error = rgba8ToPixel(out, i, mode_out, &tree, r, g, b, a);
      if (error) break;
    }
  }

  if(mode_out->colortype == LCT_PALETTE)
  {
    color_tree_cleanup(&tree);
  }

  return error;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xb8, %rsp
movl %r9d, %r13d
movl %r8d, %r12d
movq %rcx, %r15
movq %rdx, %rbp
movq %rsi, %r14
movq %rdi, %rbx
movq %rdx, %rdi
movq %rcx, %rsi
callq 0x4170
testl %eax, %eax
je 0x3d8b
movl %r12d, %edi
movl %r13d, %esi
movq %r15, %rdx
callq 0x3673
xorl %r15d, %r15d
xorl %ecx, %ecx
cmpq %rcx, %rax
je 0x3f6c
movb (%r14,%rcx), %dl
movb %dl, (%rbx,%rcx)
incq %rcx
jmp 0x3d76
movq %r15, 0x28(%rsp)
movq %rbx, 0x18(%rsp)
imull %r12d, %r13d
movq %r13, 0x20(%rsp)
cmpl $0x3, (%rbp)
jne 0x3e09
movb 0x4(%rbp), %cl
pushq $0x1
popq %rbx
shlq %cl, %rbx
movq 0x10(%rbp), %rax
movq %rbp, %rcx
testq %rax, %rax
jne 0x3dc2
movq 0x28(%rsp), %rcx
movq 0x10(%rcx), %rax
movq 0x8(%rcx), %r15
cmpq %rbx, %rax
cmovbq %rax, %rbx
leaq 0x30(%rsp), %r13
movq %r13, %rdi
callq 0x41dc
xorl %r12d, %r12d
cmpq %r12, %rbx
je 0x3e09
movzbl (%r15,%r12,4), %esi
movzbl 0x1(%r15,%r12,4), %edx
movzbl 0x2(%r15,%r12,4), %ecx
movzbl 0x3(%r15,%r12,4), %r8d
movq %r13, %rdi
movl %r12d, %r9d
callq 0x41f6
incq %r12
jmp 0x3ddd
movq 0x28(%rsp), %r8
movl 0x4(%r8), %ecx
xorl $0x10, %ecx
movl 0x4(%rbp), %eax
movl %eax, %edx
xorl $0x10, %edx
orl %ecx, %edx
jne 0x3f26
movq %rbp, %r12
pushq $0x5
popq %rdi
leaq 0x10(%rsp), %r13
leaq 0x7235(%rip), %r15      # 0xb06c
xorl %ebp, %ebp
cmpq %rbp, 0x20(%rsp)
je 0x3f56
andw $0x0, 0x16(%rsp)
andw $0x0, 0x14(%rsp)
andw $0x0, 0x12(%rsp)
andw $0x0, 0x10(%rsp)
movq 0x28(%rsp), %rax
movq %rax, (%rsp)
movq %rdi, %rbx
leaq 0x16(%rsp), %rdi
leaq 0x14(%rsp), %rsi
leaq 0x12(%rsp), %rdx
movq %r13, %rcx
movq %r14, %r8
movq %rbp, %r9
callq 0x4297
movq %rbx, %rdi
movl (%r12), %esi
cmpq $0x6, %rsi
ja 0x3f1a
movzwl 0x16(%rsp), %ebx
movzwl 0x14(%rsp), %edx
movzwl 0x12(%rsp), %eax
movzwl 0x10(%rsp), %ecx
movslq (%r15,%rsi,4), %rsi
addq %r15, %rsi
jmpq *%rsi
rolw $0x8, %bx
movq 0x18(%rsp), %rax
movw %bx, (%rax,%rbp,2)
jmp 0x3f1a
movq 0x18(%rsp), %rax
movb %bh, (%rax,%rbp,4)
movb %bl, 0x1(%rax,%rbp,4)
movb %ch, 0x2(%rax,%rbp,4)
movb %cl, 0x3(%rax,%rbp,4)
jmp 0x3f1a
movq 0x18(%rsp), %rcx
movb %bh, -0x5(%rcx,%rdi)
movb %bl, -0x4(%rcx,%rdi)
movb %dh, -0x3(%rcx,%rdi)
movb %dl, -0x2(%rcx,%rdi)
movb %ah, -0x1(%rcx,%rdi)
movb %al, (%rcx,%rdi)
jmp 0x3f1a
movq 0x18(%rsp), %rsi
movb %bh, (%rsi,%rbp,8)
movb %bl, 0x1(%rsi,%rbp,8)
movb %dh, 0x2(%rsi,%rbp,8)
movb %dl, 0x3(%rsi,%rbp,8)
movb %ah, 0x4(%rsi,%rbp,8)
movb %al, 0x5(%rsi,%rbp,8)
movb %ch, 0x6(%rsi,%rbp,8)
movb %cl, 0x7(%rsi,%rbp,8)
incq %rbp
addq $0x6, %rdi
jmp 0x3e39
cmpl $0x8, %eax
movq 0x18(%rsp), %rbx
jne 0x3f81
movl (%rbp), %eax
cmpl $0x2, %eax
je 0x414b
cmpl $0x6, %eax
jne 0x3f81
pushq $0x1
popq %rdx
movq %rbx, %rdi
movq 0x20(%rsp), %rsi
movq %r14, %rcx
callq 0x440f
jmp 0x3f59
movq %r12, %rbp
xorl %r15d, %r15d
cmpl $0x3, (%rbp)
jne 0x3f6c
leaq 0x30(%rsp), %rdi
callq 0x4abb
movl %r15d, %eax
addq $0xb8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
xorl %eax, %eax
leaq 0x16(%rsp), %rcx
movb %al, (%rcx)
leaq 0x14(%rsp), %rcx
movb %al, (%rcx)
leaq 0x12(%rsp), %rcx
movb %al, (%rcx)
leaq 0x10(%rsp), %rcx
movb %al, (%rcx)
pushq $0x2
popq %r12
pushq $0x5
popq %r15
xorl %r13d, %r13d
cmpq %r13, 0x20(%rsp)
je 0x3f59
movq 0x28(%rsp), %rax
movq %rax, (%rsp)
leaq 0x16(%rsp), %rdi
leaq 0x14(%rsp), %rsi
leaq 0x12(%rsp), %rdx
leaq 0x10(%rsp), %rcx
movq %r14, %r8
movq %r13, %r9
callq 0x47f8
movl (%rbp), %r8d
cmpq $0x6, %r8
ja 0x413b
movb 0x16(%rsp), %al
movzbl %al, %esi
movb 0x14(%rsp), %dl
movb 0x12(%rsp), %cl
movb 0x10(%rsp), %dil
leaq 0x704e(%rip), %r9       # 0xb050
movslq (%r9,%r8,4), %r8
addq %r9, %r8
jmpq *%r8
movl 0x4(%rbp), %edx
cmpl $0x10, %edx
je 0x40fd
cmpl $0x8, %edx
jne 0x411d
movb %al, (%rbx,%r13)
jmp 0x413b
movzbl %dl, %edx
movzbl %cl, %ecx
movzbl %dil, %r8d
leaq 0x30(%rsp), %rdi
callq 0x8ece
testl %eax, %eax
js 0x4165
movl 0x4(%rbp), %edx
cmpl $0x8, %edx
jne 0x412e
movb %al, (%rbx,%r13)
jmp 0x413b
cmpl $0x8, 0x4(%rbp)
jne 0x40b5
movb %al, -0x2(%rbx,%r12)
movb %dl, -0x1(%rbx,%r12)
movb %cl, (%rbx,%r12)
jmp 0x413b
movl 0x4(%rbp), %ecx
cmpl $0x10, %ecx
je 0x4108
cmpl $0x8, %ecx
jne 0x413b
movb %al, (%rbx,%r13,2)
movb %dil, 0x1(%rbx,%r13,2)
jmp 0x413b
cmpl $0x8, 0x4(%rbp)
jne 0x40d4
movb %al, (%rbx,%r13,4)
movb %dl, 0x1(%rbx,%r13,4)
movb %cl, 0x2(%rbx,%r13,4)
movb %dil, 0x3(%rbx,%r13,4)
jmp 0x413b
movb %al, -0x4(%rbx,%r15)
movb %al, -0x5(%rbx,%r15)
movb %dl, -0x2(%rbx,%r15)
movb %dl, -0x3(%rbx,%r15)
movb %cl, (%rbx,%r15)
movb %cl, -0x1(%rbx,%r15)
jmp 0x413b
movb %al, 0x1(%rbx,%r13,8)
movb %al, (%rbx,%r13,8)
movb %dl, 0x3(%rbx,%r13,8)
movb %dl, 0x2(%rbx,%r13,8)
movb %cl, 0x5(%rbx,%r13,8)
movb %cl, 0x4(%rbx,%r13,8)
movb %dil, 0x7(%rbx,%r13,8)
movb %dil, 0x6(%rbx,%r13,8)
jmp 0x413b
movb %al, 0x1(%rbx,%r13,2)
movb %al, (%rbx,%r13,2)
jmp 0x413b
movb %al, 0x1(%rbx,%r13,4)
movb %al, (%rbx,%r13,4)
movb %dil, 0x3(%rbx,%r13,4)
movb %dil, 0x2(%rbx,%r13,4)
jmp 0x413b
movb $0x8, %cl
subb %dl, %cl
shrl %cl, %esi
pushq $-0x1
popq %rax
movl %edx, %ecx
shll %cl, %eax
notl %eax
andl %esi, %eax
movq %rbx, %rdi
movq %r13, %rsi
movl %eax, %ecx
callq 0x8e7a
incq %r13
addq $0x3, %r12
addq $0x6, %r15
jmp 0x3faa
xorl %r15d, %r15d
movq %rbx, %rdi
movq 0x20(%rsp), %rsi
xorl %edx, %edx
movq %r14, %rcx
callq 0x440f
jmp 0x3f5c
pushq $0x52
popq %rax
movl %eax, %r15d
jmp 0x3f5c