// File: tomfunkhouser[P]gaps/pkgs/png/pngread.c
// Function: png_read_row
void PNGAPI
png_read_row(png_structp png_ptr, png_bytep row, png_bytep dsp_row)
{
   PNG_IDAT;
   PNG_CONST int png_pass_dsp_mask[7] = {0xff, 0x0f, 0xff, 0x33, 0xff, 0x55,
      0xff};
   PNG_CONST int png_pass_mask[7] = {0x80, 0x08, 0x88, 0x22, 0xaa, 0x55, 0xff};
   int ret;
 
   if (png_ptr == NULL)
      return;
 
   png_debug2(1, "in png_read_row (row %lu, pass %d)",
      (unsigned long) png_ptr->row_number, png_ptr->pass);

   if (!(png_ptr->flags & PNG_FLAG_ROW_INIT))
      png_read_start_row(png_ptr);
   if (png_ptr->row_number == 0 && png_ptr->pass == 0)
   {
   /* Check for transforms that have been set but were defined out */
#if defined(PNG_WRITE_INVERT_SUPPORTED) && !defined(PNG_READ_INVERT_SUPPORTED)
   if (png_ptr->transformations & PNG_INVERT_MONO)
      png_warning(png_ptr, "PNG_READ_INVERT_SUPPORTED is not defined");
#endif
#if defined(PNG_WRITE_FILLER_SUPPORTED) && !defined(PNG_READ_FILLER_SUPPORTED)
   if (png_ptr->transformations & PNG_FILLER)
      png_warning(png_ptr, "PNG_READ_FILLER_SUPPORTED is not defined");
#endif
#if defined(PNG_WRITE_PACKSWAP_SUPPORTED) && \
    !defined(PNG_READ_PACKSWAP_SUPPORTED)
   if (png_ptr->transformations & PNG_PACKSWAP)
      png_warning(png_ptr, "PNG_READ_PACKSWAP_SUPPORTED is not defined");
#endif
#if defined(PNG_WRITE_PACK_SUPPORTED) && !defined(PNG_READ_PACK_SUPPORTED)
   if (png_ptr->transformations & PNG_PACK)
      png_warning(png_ptr, "PNG_READ_PACK_SUPPORTED is not defined");
#endif
#if defined(PNG_WRITE_SHIFT_SUPPORTED) && !defined(PNG_READ_SHIFT_SUPPORTED)
   if (png_ptr->transformations & PNG_SHIFT)
      png_warning(png_ptr, "PNG_READ_SHIFT_SUPPORTED is not defined");
#endif
#if defined(PNG_WRITE_BGR_SUPPORTED) && !defined(PNG_READ_BGR_SUPPORTED)
   if (png_ptr->transformations & PNG_BGR)
      png_warning(png_ptr, "PNG_READ_BGR_SUPPORTED is not defined");
#endif
#if defined(PNG_WRITE_SWAP_SUPPORTED) && !defined(PNG_READ_SWAP_SUPPORTED)
   if (png_ptr->transformations & PNG_SWAP_BYTES)
      png_warning(png_ptr, "PNG_READ_SWAP_SUPPORTED is not defined");
#endif
   }

#ifdef PNG_READ_INTERLACING_SUPPORTED
   /* If interlaced and we do not need a new row, combine row and return */
   if (png_ptr->interlaced && (png_ptr->transformations & PNG_INTERLACE))
   {
      switch (png_ptr->pass)
      {
         case 0:
            if (png_ptr->row_number & 0x07)
            {
               if (dsp_row != NULL)
                  png_combine_row(png_ptr, dsp_row,
                     png_pass_dsp_mask[png_ptr->pass]);
               png_read_finish_row(png_ptr);
               return;
            }
            break;
         case 1:
            if ((png_ptr->row_number & 0x07) || png_ptr->width < 5)
            {
               if (dsp_row != NULL)
                  png_combine_row(png_ptr, dsp_row,
                     png_pass_dsp_mask[png_ptr->pass]);
               png_read_finish_row(png_ptr);
               return;
            }
            break;
         case 2:
            if ((png_ptr->row_number & 0x07) != 4)
            {
               if (dsp_row != NULL && (png_ptr->row_number & 4))
                  png_combine_row(png_ptr, dsp_row,
                     png_pass_dsp_mask[png_ptr->pass]);
               png_read_finish_row(png_ptr);
               return;
            }
            break;
         case 3:
            if ((png_ptr->row_number & 3) || png_ptr->width < 3)
            {
               if (dsp_row != NULL)
                  png_combine_row(png_ptr, dsp_row,
                     png_pass_dsp_mask[png_ptr->pass]);
               png_read_finish_row(png_ptr);
               return;
            }
            break;
         case 4:
            if ((png_ptr->row_number & 3) != 2)
            {
               if (dsp_row != NULL && (png_ptr->row_number & 2))
                  png_combine_row(png_ptr, dsp_row,
                     png_pass_dsp_mask[png_ptr->pass]);
               png_read_finish_row(png_ptr);
               return;
            }
            break;
         case 5:
            if ((png_ptr->row_number & 1) || png_ptr->width < 2)
            {
               if (dsp_row != NULL)
                  png_combine_row(png_ptr, dsp_row,
                     png_pass_dsp_mask[png_ptr->pass]);
               png_read_finish_row(png_ptr);
               return;
            }
            break;
         case 6:
            if (!(png_ptr->row_number & 1))
            {
               png_read_finish_row(png_ptr);
               return;
            }
            break;
      }
   }
#endif

   if (!(png_ptr->mode & PNG_HAVE_IDAT))
      png_error(png_ptr, "Invalid attempt to read row data");

   png_ptr->zstream.next_out = png_ptr->row_buf;
   png_ptr->zstream.avail_out =
       (uInt)(PNG_ROWBYTES(png_ptr->pixel_depth,
       png_ptr->iwidth) + 1);
   do
   {
      if (!(png_ptr->zstream.avail_in))
      {
         while (!png_ptr->idat_size)
         {
            png_crc_finish(png_ptr, 0);

            png_ptr->idat_size = png_read_chunk_header(png_ptr);
            if (png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
               png_error(png_ptr, "Not enough image data");
         }
         png_ptr->zstream.avail_in = (uInt)png_ptr->zbuf_size;
         png_ptr->zstream.next_in = png_ptr->zbuf;
         if (png_ptr->zbuf_size > png_ptr->idat_size)
            png_ptr->zstream.avail_in = (uInt)png_ptr->idat_size;
         png_crc_read(png_ptr, png_ptr->zbuf,
            (png_size_t)png_ptr->zstream.avail_in);
         png_ptr->idat_size -= png_ptr->zstream.avail_in;
      }
      ret = inflate(&png_ptr->zstream, Z_PARTIAL_FLUSH);
      if (ret == Z_STREAM_END)
      {
         if (png_ptr->zstream.avail_out || png_ptr->zstream.avail_in ||
            png_ptr->idat_size)
            png_benign_error(png_ptr, "Extra compressed data");
         png_ptr->mode |= PNG_AFTER_IDAT;
         png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED;
         break;
      }
      if (ret != Z_OK)
         png_error(png_ptr, png_ptr->zstream.msg ? png_ptr->zstream.msg :
                   "Decompression error");

   } while (png_ptr->zstream.avail_out);

   png_ptr->row_info.color_type = png_ptr->color_type;
   png_ptr->row_info.width = png_ptr->iwidth;
   png_ptr->row_info.channels = png_ptr->channels;
   png_ptr->row_info.bit_depth = png_ptr->bit_depth;
   png_ptr->row_info.pixel_depth = png_ptr->pixel_depth;
   png_ptr->row_info.rowbytes = PNG_ROWBYTES(png_ptr->row_info.pixel_depth,
       png_ptr->row_info.width);

   if (png_ptr->row_buf[0])
   png_read_filter_row(png_ptr, &(png_ptr->row_info),
      png_ptr->row_buf + 1, png_ptr->prev_row + 1,
      (int)(png_ptr->row_buf[0]));

   png_memcpy(png_ptr->prev_row, png_ptr->row_buf, png_ptr->rowbytes + 1);

#ifdef PNG_MNG_FEATURES_SUPPORTED
   if ((png_ptr->mng_features_permitted & PNG_FLAG_MNG_FILTER_64) &&
      (png_ptr->filter_type == PNG_INTRAPIXEL_DIFFERENCING))
   {
      /* Intrapixel differencing */
      png_do_read_intrapixel(&(png_ptr->row_info), png_ptr->row_buf + 1);
   }
#endif


   if (png_ptr->transformations || (png_ptr->flags&PNG_FLAG_STRIP_ALPHA))
      png_do_read_transformations(png_ptr);

#ifdef PNG_READ_INTERLACING_SUPPORTED
   /* Blow up interlaced rows to full size */
   if (png_ptr->interlaced &&
      (png_ptr->transformations & PNG_INTERLACE))
   {
      if (png_ptr->pass < 6)
         /* Old interface (pre-1.0.9):
          * png_do_read_interlace(&(png_ptr->row_info),
          *    png_ptr->row_buf + 1, png_ptr->pass, png_ptr->transformations);
          */
         png_do_read_interlace(png_ptr);

      if (dsp_row != NULL)
         png_combine_row(png_ptr, dsp_row,
            png_pass_dsp_mask[png_ptr->pass]);
      if (row != NULL)
         png_combine_row(png_ptr, row,
            png_pass_mask[png_ptr->pass]);
   }
   else
#endif
   {
      if (row != NULL)
         png_combine_row(png_ptr, row, 0xff);
      if (dsp_row != NULL)
         png_combine_row(png_ptr, dsp_row, 0xff);
   }
   png_read_finish_row(png_ptr);

   if (png_ptr->read_row_fn != NULL)
      (*(png_ptr->read_row_fn))(png_ptr, png_ptr->row_number, png_ptr->pass);
}

// Assembly:
subq $0x98, %rsp
movq %rdi, 0x90(%rsp)
movq %rsi, 0x88(%rsp)
movq %rdx, 0x80(%rsp)
movl 0x37b45(%rip), %eax     # 0x1391ea
movl %eax, 0x7b(%rsp)
movb 0x37b3f(%rip), %al      # 0x1391ee
movb %al, 0x7f(%rsp)
movq 0x379a6(%rip), %rax     # 0x139060
movq %rax, 0x50(%rsp)
movq 0x379a2(%rip), %rax     # 0x139068
movq %rax, 0x58(%rsp)
movq 0x3799e(%rip), %rax     # 0x139070
movq %rax, 0x60(%rsp)
movl 0x3799b(%rip), %eax     # 0x139078
movl %eax, 0x68(%rsp)
movq 0x37998(%rip), %rax     # 0x139080
movq %rax, 0x30(%rsp)
movq 0x37994(%rip), %rax     # 0x139088
movq %rax, 0x38(%rsp)
movq 0x37990(%rip), %rax     # 0x139090
movq %rax, 0x40(%rsp)
movl 0x3798d(%rip), %eax     # 0x139098
movl %eax, 0x48(%rsp)
cmpq $0x0, 0x90(%rsp)
jne 0x10171f
jmp 0x102161
movq 0x90(%rsp), %rax
movl 0x120(%rax), %eax
andl $0x40, %eax
cmpl $0x0, %eax
jne 0x101742
movq 0x90(%rsp), %rdi
callq 0x129680
movq 0x90(%rsp), %rax
cmpl $0x0, 0x1e4(%rax)
jne 0x101769
movq 0x90(%rsp), %rax
movzbl 0x24c(%rax), %eax
cmpl $0x0, %eax
jne 0x101769
jmp 0x101769
movq 0x90(%rsp), %rax
movzbl 0x24b(%rax), %eax
cmpl $0x0, %eax
je 0x101a96
movq 0x90(%rsp), %rax
movl 0x124(%rax), %eax
andl $0x2, %eax
cmpl $0x0, %eax
je 0x101a96
movq 0x90(%rsp), %rax
movzbl 0x24c(%rax), %eax
movq %rax, 0x20(%rsp)
subq $0x6, %rax
ja 0x101a94
movq 0x20(%rsp), %rax
leaq 0x37877(%rip), %rcx     # 0x13903c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x90(%rsp), %rax
movl 0x1e4(%rax), %eax
andl $0x7, %eax
cmpl $0x0, %eax
je 0x101829
cmpq $0x0, 0x80(%rsp)
je 0x101817
movq 0x90(%rsp), %rdi
movq 0x80(%rsp), %rsi
movq 0x90(%rsp), %rax
movzbl 0x24c(%rax), %eax
movl 0x50(%rsp,%rax,4), %edx
callq 0x1278f0
movq 0x90(%rsp), %rdi
callq 0x129000
jmp 0x102161
jmp 0x101a94
movq 0x90(%rsp), %rax
movl 0x1e4(%rax), %eax
andl $0x7, %eax
cmpl $0x0, %eax
jne 0x101855
movq 0x90(%rsp), %rax
cmpl $0x5, 0x1bc(%rax)
jae 0x10189a
cmpq $0x0, 0x80(%rsp)
je 0x101888
movq 0x90(%rsp), %rdi
movq 0x80(%rsp), %rsi
movq 0x90(%rsp), %rax
movzbl 0x24c(%rax), %eax
movl 0x50(%rsp,%rax,4), %edx
callq 0x1278f0
movq 0x90(%rsp), %rdi
callq 0x129000
jmp 0x102161
jmp 0x101a94
movq 0x90(%rsp), %rax
movl 0x1e4(%rax), %eax
andl $0x7, %eax
cmpl $0x4, %eax
je 0x101910
cmpq $0x0, 0x80(%rsp)
je 0x1018fe
movq 0x90(%rsp), %rax
movl 0x1e4(%rax), %eax
andl $0x4, %eax
cmpl $0x0, %eax
je 0x1018fe
movq 0x90(%rsp), %rdi
movq 0x80(%rsp), %rsi
movq 0x90(%rsp), %rax
movzbl 0x24c(%rax), %eax
movl 0x50(%rsp,%rax,4), %edx
callq 0x1278f0
movq 0x90(%rsp), %rdi
callq 0x129000
jmp 0x102161
jmp 0x101a94
movq 0x90(%rsp), %rax
movl 0x1e4(%rax), %eax
andl $0x3, %eax
cmpl $0x0, %eax
jne 0x10193c
movq 0x90(%rsp), %rax
cmpl $0x3, 0x1bc(%rax)
jae 0x101981
cmpq $0x0, 0x80(%rsp)
je 0x10196f
movq 0x90(%rsp), %rdi
movq 0x80(%rsp), %rsi
movq 0x90(%rsp), %rax
movzbl 0x24c(%rax), %eax
movl 0x50(%rsp,%rax,4), %edx
callq 0x1278f0
movq 0x90(%rsp), %rdi
callq 0x129000
jmp 0x102161
jmp 0x101a94
movq 0x90(%rsp), %rax
movl 0x1e4(%rax), %eax
andl $0x3, %eax
cmpl $0x2, %eax
je 0x1019f7
cmpq $0x0, 0x80(%rsp)
je 0x1019e5
movq 0x90(%rsp), %rax
movl 0x1e4(%rax), %eax
andl $0x2, %eax
cmpl $0x0, %eax
je 0x1019e5
movq 0x90(%rsp), %rdi
movq 0x80(%rsp), %rsi
movq 0x90(%rsp), %rax
movzbl 0x24c(%rax), %eax
movl 0x50(%rsp,%rax,4), %edx
callq 0x1278f0
movq 0x90(%rsp), %rdi
callq 0x129000
jmp 0x102161
jmp 0x101a94
movq 0x90(%rsp), %rax
movl 0x1e4(%rax), %eax
andl $0x1, %eax
cmpl $0x0, %eax
jne 0x101a23
movq 0x90(%rsp), %rax
cmpl $0x2, 0x1bc(%rax)
jae 0x101a68
cmpq $0x0, 0x80(%rsp)
je 0x101a56
movq 0x90(%rsp), %rdi
movq 0x80(%rsp), %rsi
movq 0x90(%rsp), %rax
movzbl 0x24c(%rax), %eax
movl 0x50(%rsp,%rax,4), %edx
callq 0x1278f0
movq 0x90(%rsp), %rdi
callq 0x129000
jmp 0x102161
jmp 0x101a94
movq 0x90(%rsp), %rax
movl 0x1e4(%rax), %eax
andl $0x1, %eax
cmpl $0x0, %eax
jne 0x101a92
movq 0x90(%rsp), %rdi
callq 0x129000
jmp 0x102161
jmp 0x101a94
jmp 0x101a96
movq 0x90(%rsp), %rax
movl 0x11c(%rax), %eax
andl $0x4, %eax
cmpl $0x0, %eax
jne 0x101ac0
movq 0x90(%rsp), %rdi
leaq 0x3777b(%rip), %rsi     # 0x139236
callq 0x113860
movq 0x90(%rsp), %rax
movq 0x1f0(%rax), %rcx
movq 0x90(%rsp), %rax
movq %rcx, 0x140(%rax)
movq 0x90(%rsp), %rax
movzbl 0x251(%rax), %eax
cmpl $0x8, %eax
jl 0x101b1e
movq 0x90(%rsp), %rax
movl 0x1e0(%rax), %eax
movq 0x90(%rsp), %rcx
movzbl 0x251(%rcx), %ecx
shrq $0x3, %rcx
imulq %rcx, %rax
movq %rax, 0x18(%rsp)
jmp 0x101b4c
movq 0x90(%rsp), %rax
movl 0x1e0(%rax), %eax
movq 0x90(%rsp), %rcx
movzbl 0x251(%rcx), %ecx
imulq %rcx, %rax
addq $0x7, %rax
shrq $0x3, %rax
movq %rax, 0x18(%rsp)
movq 0x18(%rsp), %rax
addq $0x1, %rax
movl %eax, %ecx
movq 0x90(%rsp), %rax
movl %ecx, 0x148(%rax)
movq 0x90(%rsp), %rax
cmpl $0x0, 0x130(%rax)
jne 0x101cc7
jmp 0x101b7c
movq 0x90(%rsp), %rax
cmpl $0x0, 0x230(%rax)
setne %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x101b96
jmp 0x101bfc
movq 0x90(%rsp), %rdi
xorl %esi, %esi
callq 0x122b90
movq 0x90(%rsp), %rdi
callq 0x122970
movl %eax, %ecx
movq 0x90(%rsp), %rax
movl %ecx, 0x230(%rax)
movq 0x90(%rsp), %rax
addq $0x244, %rax            # imm = 0x244
leaq 0x7b(%rsp), %rcx
movl (%rcx), %ecx
movl (%rax), %eax
subl %ecx, %eax
setne %al
movzbl %al, %eax
cmpl $0x0, %eax
je 0x101bfa
movq 0x90(%rsp), %rdi
leaq 0x37662(%rip), %rsi     # 0x139257
callq 0x113860
jmp 0x101b7c
movq 0x90(%rsp), %rax
movq 0x1a0(%rax), %rax
movl %eax, %ecx
movq 0x90(%rsp), %rax
movl %ecx, 0x130(%rax)
movq 0x90(%rsp), %rax
movq 0x198(%rax), %rcx
movq 0x90(%rsp), %rax
movq %rcx, 0x128(%rax)
movq 0x90(%rsp), %rax
movq 0x1a0(%rax), %rax
movq 0x90(%rsp), %rcx
movl 0x230(%rcx), %ecx
cmpq %rcx, %rax
jbe 0x101c77
movq 0x90(%rsp), %rax
movl 0x230(%rax), %ecx
movq 0x90(%rsp), %rax
movl %ecx, 0x130(%rax)
movq 0x90(%rsp), %rdi
movq 0x90(%rsp), %rax
movq 0x198(%rax), %rsi
movq 0x90(%rsp), %rax
movl 0x130(%rax), %eax
movl %eax, %edx
callq 0x122b40
movq 0x90(%rsp), %rax
movl 0x130(%rax), %edx
movq 0x90(%rsp), %rax
movl 0x230(%rax), %ecx
subl %edx, %ecx
movl %ecx, 0x230(%rax)
movq 0x90(%rsp), %rdi
addq $0x128, %rdi            # imm = 0x128
movl $0x1, %esi
callq 0x11a290
movl %eax, 0x2c(%rsp)
cmpl $0x1, 0x2c(%rsp)
jne 0x101d62
movq 0x90(%rsp), %rax
cmpl $0x0, 0x148(%rax)
jne 0x101d1e
movq 0x90(%rsp), %rax
cmpl $0x0, 0x130(%rax)
jne 0x101d1e
movq 0x90(%rsp), %rax
cmpl $0x0, 0x230(%rax)
je 0x101d32
movq 0x90(%rsp), %rdi
leaq 0x37540(%rip), %rsi     # 0x13926d
callq 0x113860
movq 0x90(%rsp), %rax
movl 0x11c(%rax), %ecx
orl $0x8, %ecx
movl %ecx, 0x11c(%rax)
movq 0x90(%rsp), %rax
movl 0x120(%rax), %ecx
orl $0x20, %ecx
movl %ecx, 0x120(%rax)
jmp 0x101dd2
cmpl $0x0, 0x2c(%rsp)
je 0x101dbb
movq 0x90(%rsp), %rax
movq %rax, 0x10(%rsp)
movq 0x90(%rsp), %rax
cmpq $0x0, 0x158(%rax)
je 0x101d9e
movq 0x90(%rsp), %rax
movq 0x158(%rax), %rax
movq %rax, 0x8(%rsp)
jmp 0x101dac
leaq 0x374de(%rip), %rax     # 0x139283
movq %rax, 0x8(%rsp)
jmp 0x101dac
movq 0x10(%rsp), %rdi
movq 0x8(%rsp), %rsi
callq 0x113860
jmp 0x101dbd
movq 0x90(%rsp), %rax
cmpl $0x0, 0x148(%rax)
jne 0x101b65
movq 0x90(%rsp), %rax
movb 0x24e(%rax), %cl
movq 0x90(%rsp), %rax
movb %cl, 0x228(%rax)
movq 0x90(%rsp), %rax
movl 0x1e0(%rax), %ecx
movq 0x90(%rsp), %rax
movl %ecx, 0x218(%rax)
movq 0x90(%rsp), %rax
movb 0x252(%rax), %cl
movq 0x90(%rsp), %rax
movb %cl, 0x22a(%rax)
movq 0x90(%rsp), %rax
movb 0x24f(%rax), %cl
movq 0x90(%rsp), %rax
movb %cl, 0x229(%rax)
movq 0x90(%rsp), %rax
movb 0x251(%rax), %cl
movq 0x90(%rsp), %rax
movb %cl, 0x22b(%rax)
movq 0x90(%rsp), %rax
movzbl 0x22b(%rax), %eax
cmpl $0x8, %eax
jl 0x101e9d
movq 0x90(%rsp), %rax
movl 0x218(%rax), %eax
movq 0x90(%rsp), %rcx
movzbl 0x22b(%rcx), %ecx
shrq $0x3, %rcx
imulq %rcx, %rax
movq %rax, (%rsp)
jmp 0x101eca
movq 0x90(%rsp), %rax
movl 0x218(%rax), %eax
movq 0x90(%rsp), %rcx
movzbl 0x22b(%rcx), %ecx
imulq %rcx, %rax
addq $0x7, %rax
shrq $0x3, %rax
movq %rax, (%rsp)
movq (%rsp), %rcx
movq 0x90(%rsp), %rax
movq %rcx, 0x220(%rax)
movq 0x90(%rsp), %rax
movq 0x1f0(%rax), %rax
cmpb $0x0, (%rax)
je 0x101f46
movq 0x90(%rsp), %rdi
movq 0x90(%rsp), %rsi
addq $0x218, %rsi            # imm = 0x218
movq 0x90(%rsp), %rax
movq 0x1f0(%rax), %rdx
addq $0x1, %rdx
movq 0x90(%rsp), %rax
movq 0x1e8(%rax), %rcx
addq $0x1, %rcx
movq 0x90(%rsp), %rax
movq 0x1f0(%rax), %rax
movzbl (%rax), %r8d
callq 0x128a20
movq 0x90(%rsp), %rax
movq 0x1e8(%rax), %rdi
movq 0x90(%rsp), %rax
movq 0x1f0(%rax), %rsi
movq 0x90(%rsp), %rax
movq 0x1d0(%rax), %rdx
addq $0x1, %rdx
callq 0xf3d0
movq 0x90(%rsp), %rax
movl 0x408(%rax), %eax
andl $0x4, %eax
cmpl $0x0, %eax
je 0x101fcd
movq 0x90(%rsp), %rax
movzbl 0x410(%rax), %eax
cmpl $0x40, %eax
jne 0x101fcd
movq 0x90(%rsp), %rdi
addq $0x218, %rdi            # imm = 0x218
movq 0x90(%rsp), %rax
movq 0x1f0(%rax), %rsi
addq $0x1, %rsi
callq 0x111ca0
movq 0x90(%rsp), %rax
cmpl $0x0, 0x124(%rax)
jne 0x101ff8
movq 0x90(%rsp), %rax
movl 0x120(%rax), %eax
andq $0x400000, %rax         # imm = 0x400000
cmpq $0x0, %rax
je 0x102005
movq 0x90(%rsp), %rdi
callq 0x10a6e0
movq 0x90(%rsp), %rax
movzbl 0x24b(%rax), %eax
cmpl $0x0, %eax
je 0x1020c0
movq 0x90(%rsp), %rax
movl 0x124(%rax), %eax
andl $0x2, %eax
cmpl $0x0, %eax
je 0x1020c0
movq 0x90(%rsp), %rax
movzbl 0x24c(%rax), %eax
cmpl $0x6, %eax
jge 0x102058
movq 0x90(%rsp), %rdi
callq 0x128050
cmpq $0x0, 0x80(%rsp)
je 0x10208b
movq 0x90(%rsp), %rdi
movq 0x80(%rsp), %rsi
movq 0x90(%rsp), %rax
movzbl 0x24c(%rax), %eax
movl 0x50(%rsp,%rax,4), %edx
callq 0x1278f0
cmpq $0x0, 0x88(%rsp)
je 0x1020be
movq 0x90(%rsp), %rdi
movq 0x88(%rsp), %rsi
movq 0x90(%rsp), %rax
movzbl 0x24c(%rax), %eax
movl 0x30(%rsp,%rax,4), %edx
callq 0x1278f0
jmp 0x10210c
cmpq $0x0, 0x88(%rsp)
je 0x1020e5
movq 0x90(%rsp), %rdi
movq 0x88(%rsp), %rsi
movl $0xff, %edx
callq 0x1278f0
cmpq $0x0, 0x80(%rsp)
je 0x10210a
movq 0x90(%rsp), %rdi
movq 0x80(%rsp), %rsi
movl $0xff, %edx
callq 0x1278f0
jmp 0x10210c
movq 0x90(%rsp), %rdi
callq 0x129000
movq 0x90(%rsp), %rax
cmpq $0x0, 0x2f0(%rax)
je 0x102161
movq 0x90(%rsp), %rax
movq 0x2f0(%rax), %rax
movq 0x90(%rsp), %rdi
movq 0x90(%rsp), %rcx
movl 0x1e4(%rcx), %esi
movq 0x90(%rsp), %rcx
movzbl 0x24c(%rcx), %edx
callq *%rax
addq $0x98, %rsp
retq
nopl (%rax)