// File: /workspace/github_c_makefile_star2_O0/snej[P]zdelta/inffast.c
// Function: inflate_fast
int inflate_fast(bl, bd, bzd, tl, td, tzd, s, z)
uInt bl, bd, bzd;
inflate_huft *tl;
inflate_huft *td;
inflate_huft *tzd; /* need separate declaration for Borland C++ */
inflate_blocks_statef *s;
zd_streamp z;
{
  inflate_huft *t;      /* temporary pointer */
  uInt e;               /* extra bits or operation */
  uLong b;              /* bit buffer */
  uInt k;               /* bits in bit buffer */
  Bytef *p;             /* input data pointer */
  uInt n;               /* bytes available there */
  Bytef *q;             /* output window write pointer */
  uInt m;               /* bytes to end of window or read pointer */
  uInt ml;              /* mask for literal/length tree */
  uInt md;              /* mask for distance tree */
  uInt mzd;             /* mask for zdelta code tree */
  uInt c;               /* bytes to copy */
  uInt d;               /* distance back to copy from */
  Bytef *r;             /* copy source pointer */

  /* zdelta local variables, needed to handle the reference window ptrs */
  uInt sign;
  uInt best_ptr;
  ulg ptr;
  ulg *rwptr = s->rwptr;         /* zdelta: reference window ptr */
  /* uInt zd_bcode; */                /* zdelta: byte code */
  /* load input, output, bit values */
  LOAD

  /* initialize masks */
  ml = inflate_mask[bl];
  md = inflate_mask[bd];
  mzd = inflate_mask[bzd];

  /* do until not enough input or output space for fast loop */
  do {                          /* assume called with m >= 258 && n >= 10 */
    /* get literal/distance code */
    GRABBITS(15) /* max bits for literal/distance code */
    if ((e = (t = td + ((uInt)b & md))->exop) == 0)
    {
      Assert(t->bits <= k, "dumping too many bits (literal)");
      DUMPBITS(t->bits)
      Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ?
                "inflate:        * literal '%c'\n" :
                "inflate:        * literal 0x%02x\n", t->base));
      /* output the literal here */
      *q++ = (Byte)t->base;
      TraceHuf( (stderr, "d:%u\n", t->base) );
      m--;
      continue;
    }
    do {
      Assert(t->bits <= k, "dumping too many bits (dist)");
      DUMPBITS(t->bits)
      if (e & 16)
      {
	e &= 15;
	GRABBITS(e) /* get extra bits for distance (up to 13) */
	d = t->base + ((uInt)b & inflate_mask[e]);
	Assert(e <= k, "dumping too many bits (dist extra)");
	DUMPBITS(e)
        Tracevv((stderr, "inflate:         * distance %u\n", c));

        /* decode length base of block to copy */
        GRABBITS(24);           /* max bits for length code and extra */
        e = (t = tl + ((uInt)b & ml))->exop;
        do {
	  Assert(t->bits <= k, "dumping too many bits (len)");
          DUMPBITS(t->bits)
          if (e & 16)
          {
            /* get extra bits to add to distance base */
            e &= 15;
            c = t->base + ((uInt)b & inflate_mask[e]);
	    Assert(e <= k, "dumping too many bits (len extra)");
            DUMPBITS(e)
            Tracevv((stderr, "inflate:         * length %u\n", d));

	    if( c & REFMATCH ) {             /* if reference copy          */
	      sign = (c >> 8) & ZD_MINUS;    /* get distance sign          */
	      c   &= (REFMATCH-1);
	      
	      GRABBITS(15)                  /* max bits for ZDELTA flag code */
	      e = (t = tzd + ((uInt)b & mzd))->exop;
	      do{
		Assert(t->bits <= k, "dumping too many bits (zdelta)");
		DUMPBITS(t->bits);
		if(e == 0){
		  best_ptr = (Byte)t->base;  /* get reference pointer      */

		  /* jump to the beginning of the copy */
                  if(ZD_PLUS == sign) {
                    ptr = rwptr[best_ptr] + d;
                  } else {
                    ptr = rwptr[best_ptr] - d;
                  }

		  /* do the copy */
		  memcpy(q,z->base[best_ptr/2]+ptr,c);
		  q += c;                    /* update pointers            */
		  m -= c;   /* update the number of available output bytes */

		  if(d > ZD_FAR){ 	     /* update reference pointers  */
		    if(s->stable[best_ptr])
		      s->stable[best_ptr] = 0;
		    else
		      rwptr[best_ptr] = ptr + c;
		  }
		  else{
		    s->stable[best_ptr] = 1;
		    rwptr[best_ptr] = ptr + c;
		  }
		  break;
		}
		if( (e & 64) == 0 ){
		  t += t->base;
		  e = (t += ((uInt)b & inflate_mask[e]))->exop;
		}
		else{
		  z->msg = (char*)"invalid zdelta code";
		  UNGRAB
		  UPDATE
		  return ZD_DATA_ERROR;
		}
	      } while(1); /* zdelta code */
	    }
	    else{
	      m -= c;    /* update the number of available output bytes     */
	      if ((uInt)(q - s->window) >= d)   /*    offset before dest    */
	      {                                 /*    just copy             */
		r = q - d;
		*q++ = *r++;  c--;              /* minimum count is three,  */
		*q++ = *r++;  c--;              /* so unroll loop a little  */
	      }
	      else                        /* else offset after destination  */
	      {
		e = d - (uInt)(q - s->window);  /* bytes from offset to end */
		r = s->end - e;                 /* pointer to offset        */
		if (c > e)                      /* if source crosses,       */
		{	
		  c -= e;                       /* copy to end of window    */
		  do {
		    *q++ = *r++;
		  } while (--e);
		  r = s->window;          /* copy rest from start of window */
		}
	      }
	      do {                              /* copy all or what's left  */
		*q++ = *r++;
	      } while (--c);
	    }
	    break;
          }
          else if ((e & 64) == 0)
	  {
	    t += t->base;
	    e = (t += ((uInt)b & inflate_mask[e]))->exop;
	  }
          else
	  {
	    z->msg = (char*)"invalid length code";
	    UNGRAB
	    UPDATE
	    return ZD_DATA_ERROR;
          }
        } while (1);                                        /* length code */
        break;
      }
      if ((e & 64) == 0)
      {
	t += t->base;
	if ((e = (t += ((uInt)b & inflate_mask[e]))->exop) == 0)
        {
	  DUMPBITS(t->bits)
	  Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ?
		   "inflate:         * literal '%c'\n" :
		   "inflate:         * literal 0x%02x\n", t->base));
	  *q++ = (Byte)t->base;
	  m--;
	  break;
	}
      }
      else if (e & 32)
      {
	Tracevv((stderr, "inflate:         * end of block\n"));
	UNGRAB
        UPDATE
	return ZD_STREAM_END;
      }
      else
      {
	z->msg = (char*)"invalid literal/distance code";
	UNGRAB
        UPDATE
	return ZD_DATA_ERROR;
      }
    } while (1);                                          /* distance code */
/* zdelta: maximum match length is 1026 
 * } while (m >= 258 && n >= 10); 
 */
  } while (m >= MAX_MATCH && n >= 10); 
  /* not enough input or output--restore pointers and return */
  UNGRAB
  UPDATE
  return ZD_OK;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xc0, %rsp
movq 0x18(%rbp), %rax
movq 0x10(%rbp), %rax
movl %edi, -0x8(%rbp)
movl %esi, -0xc(%rbp)
movl %edx, -0x10(%rbp)
movq %rcx, -0x18(%rbp)
movq %r8, -0x20(%rbp)
movq %r9, -0x28(%rbp)
movq 0x10(%rbp), %rax
addq $0x70, %rax
movq %rax, -0x98(%rbp)
movq 0x18(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x50(%rbp)
movq 0x18(%rbp), %rax
movl 0x8(%rax), %eax
movl %eax, -0x54(%rbp)
movq 0x10(%rbp), %rax
movq 0x30(%rax), %rax
movq %rax, -0x40(%rbp)
movq 0x10(%rbp), %rax
movl 0x2c(%rax), %eax
movl %eax, -0x44(%rbp)
movq 0x10(%rbp), %rax
movq 0x58(%rax), %rax
movq %rax, -0x60(%rbp)
movq -0x60(%rbp), %rax
movq 0x10(%rbp), %rcx
cmpq 0x50(%rcx), %rax
jae 0xe318
movq 0x10(%rbp), %rax
movq 0x50(%rax), %rax
movq -0x60(%rbp), %rcx
subq %rcx, %rax
subq $0x1, %rax
movq %rax, -0xa0(%rbp)
jmp 0xe32e
movq 0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq -0x60(%rbp), %rcx
subq %rcx, %rax
movq %rax, -0xa0(%rbp)
movq -0xa0(%rbp), %rax
movl %eax, -0x64(%rbp)
movl -0x8(%rbp), %eax
movl %eax, %ecx
leaq 0x7e6c(%rip), %rax      # 0x161b0
movl (%rax,%rcx,4), %eax
movl %eax, -0x68(%rbp)
movl -0xc(%rbp), %eax
movl %eax, %ecx
leaq 0x7e5a(%rip), %rax      # 0x161b0
movl (%rax,%rcx,4), %eax
movl %eax, -0x6c(%rbp)
movl -0x10(%rbp), %eax
movl %eax, %ecx
leaq 0x7e48(%rip), %rax      # 0x161b0
movl (%rax,%rcx,4), %eax
movl %eax, -0x70(%rbp)
jmp 0xe370
cmpl $0xf, -0x44(%rbp)
jae 0xe3aa
movl -0x54(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x54(%rbp)
movq -0x50(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x50(%rbp)
movzbl (%rax), %eax
movl -0x44(%rbp), %ecx
shlq %cl, %rax
orq -0x40(%rbp), %rax
movq %rax, -0x40(%rbp)
movl -0x44(%rbp), %eax
addl $0x8, %eax
movl %eax, -0x44(%rbp)
jmp 0xe370
movq -0x20(%rbp), %rax
movq -0x40(%rbp), %rcx
andl -0x6c(%rbp), %ecx
movl %ecx, %ecx
movq %rcx, %rsi
shlq $0x3, %rsi
movq %rax, %rdx
addq %rsi, %rdx
movq %rdx, -0x30(%rbp)
movzbl (%rax,%rcx,8), %eax
movl %eax, -0x34(%rbp)
cmpl $0x0, %eax
jne 0xe421
movq -0x30(%rbp), %rax
movzbl 0x1(%rax), %ecx
movq -0x40(%rbp), %rax
movl %ecx, %ecx
shrq %cl, %rax
movq %rax, -0x40(%rbp)
movq -0x30(%rbp), %rax
movzbl 0x1(%rax), %ecx
movl -0x44(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x44(%rbp)
movq -0x30(%rbp), %rax
movl 0x4(%rax), %eax
movb %al, %cl
movq -0x60(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x60(%rbp)
movb %cl, (%rax)
movl -0x64(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x64(%rbp)
jmp 0xedc1
jmp 0xe423
movq -0x30(%rbp), %rax
movzbl 0x1(%rax), %ecx
movq -0x40(%rbp), %rax
movl %ecx, %ecx
shrq %cl, %rax
movq %rax, -0x40(%rbp)
movq -0x30(%rbp), %rax
movzbl 0x1(%rax), %ecx
movl -0x44(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x44(%rbp)
movl -0x34(%rbp), %eax
andl $0x10, %eax
cmpl $0x0, %eax
je 0xeb5c
movl -0x34(%rbp), %eax
andl $0xf, %eax
movl %eax, -0x34(%rbp)
movl -0x44(%rbp), %eax
cmpl -0x34(%rbp), %eax
jae 0xe49c
movl -0x54(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x54(%rbp)
movq -0x50(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x50(%rbp)
movzbl (%rax), %eax
movl -0x44(%rbp), %ecx
shlq %cl, %rax
orq -0x40(%rbp), %rax
movq %rax, -0x40(%rbp)
movl -0x44(%rbp), %eax
addl $0x8, %eax
movl %eax, -0x44(%rbp)
jmp 0xe460
movq -0x30(%rbp), %rax
movl 0x4(%rax), %eax
movq -0x40(%rbp), %rcx
movl -0x34(%rbp), %edx
movl %edx, %esi
leaq 0x7cfd(%rip), %rdx      # 0x161b0
andl (%rdx,%rsi,4), %ecx
addl %ecx, %eax
movl %eax, -0x78(%rbp)
movl -0x34(%rbp), %ecx
movq -0x40(%rbp), %rax
movl %ecx, %ecx
shrq %cl, %rax
movq %rax, -0x40(%rbp)
movl -0x34(%rbp), %ecx
movl -0x44(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x44(%rbp)
cmpl $0x18, -0x44(%rbp)
jae 0xe510
movl -0x54(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x54(%rbp)
movq -0x50(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x50(%rbp)
movzbl (%rax), %eax
movl -0x44(%rbp), %ecx
shlq %cl, %rax
orq -0x40(%rbp), %rax
movq %rax, -0x40(%rbp)
movl -0x44(%rbp), %eax
addl $0x8, %eax
movl %eax, -0x44(%rbp)
jmp 0xe4d6
movq -0x18(%rbp), %rax
movq -0x40(%rbp), %rcx
andl -0x68(%rbp), %ecx
movl %ecx, %ecx
movq %rcx, %rsi
shlq $0x3, %rsi
movq %rax, %rdx
addq %rsi, %rdx
movq %rdx, -0x30(%rbp)
movzbl (%rax,%rcx,8), %eax
movl %eax, -0x34(%rbp)
movq -0x30(%rbp), %rax
movzbl 0x1(%rax), %ecx
movq -0x40(%rbp), %rax
movl %ecx, %ecx
shrq %cl, %rax
movq %rax, -0x40(%rbp)
movq -0x30(%rbp), %rax
movzbl 0x1(%rax), %ecx
movl -0x44(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x44(%rbp)
movl -0x34(%rbp), %eax
andl $0x10, %eax
cmpl $0x0, %eax
je 0xea1a
movl -0x34(%rbp), %eax
andl $0xf, %eax
movl %eax, -0x34(%rbp)
movq -0x30(%rbp), %rax
movl 0x4(%rax), %eax
movq -0x40(%rbp), %rcx
movl -0x34(%rbp), %edx
movl %edx, %esi
leaq 0x7c27(%rip), %rdx      # 0x161b0
andl (%rdx,%rsi,4), %ecx
addl %ecx, %eax
movl %eax, -0x74(%rbp)
movl -0x34(%rbp), %ecx
movq -0x40(%rbp), %rax
movl %ecx, %ecx
shrq %cl, %rax
movq %rax, -0x40(%rbp)
movl -0x34(%rbp), %ecx
movl -0x44(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x44(%rbp)
movl -0x74(%rbp), %eax
andl $0x4000, %eax           # imm = 0x4000
cmpl $0x0, %eax
je 0xe8d1
movl -0x74(%rbp), %eax
shrl $0x8, %eax
andl $0x80, %eax
movl %eax, -0x84(%rbp)
movl -0x74(%rbp), %eax
andl $0x3fff, %eax           # imm = 0x3FFF
movl %eax, -0x74(%rbp)
cmpl $0xf, -0x44(%rbp)
jae 0xe613
movl -0x54(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x54(%rbp)
movq -0x50(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x50(%rbp)
movzbl (%rax), %eax
movl -0x44(%rbp), %ecx
shlq %cl, %rax
orq -0x40(%rbp), %rax
movq %rax, -0x40(%rbp)
movl -0x44(%rbp), %eax
addl $0x8, %eax
movl %eax, -0x44(%rbp)
jmp 0xe5d9
movq -0x28(%rbp), %rax
movq -0x40(%rbp), %rcx
andl -0x70(%rbp), %ecx
movl %ecx, %ecx
movq %rcx, %rsi
shlq $0x3, %rsi
movq %rax, %rdx
addq %rsi, %rdx
movq %rdx, -0x30(%rbp)
movzbl (%rax,%rcx,8), %eax
movl %eax, -0x34(%rbp)
movq -0x30(%rbp), %rax
movzbl 0x1(%rax), %ecx
movq -0x40(%rbp), %rax
movl %ecx, %ecx
shrq %cl, %rax
movq %rax, -0x40(%rbp)
movq -0x30(%rbp), %rax
movzbl 0x1(%rax), %ecx
movl -0x44(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x44(%rbp)
cmpl $0x0, -0x34(%rbp)
jne 0xe791
movq -0x30(%rbp), %rax
movl 0x4(%rax), %eax
movzbl %al, %eax
movl %eax, -0x88(%rbp)
xorl %eax, %eax
cmpl -0x84(%rbp), %eax
jne 0xe6a1
movq -0x98(%rbp), %rax
movl -0x88(%rbp), %ecx
movq (%rax,%rcx,8), %rax
movl -0x78(%rbp), %ecx
addq %rcx, %rax
movq %rax, -0x90(%rbp)
jmp 0xe6bf
movq -0x98(%rbp), %rax
movl -0x88(%rbp), %ecx
movq (%rax,%rcx,8), %rax
movl -0x78(%rbp), %ecx
subq %rcx, %rax
movq %rax, -0x90(%rbp)
movq -0x60(%rbp), %rdi
movq 0x18(%rbp), %rax
movl -0x88(%rbp), %ecx
shrl %ecx
movl %ecx, %ecx
movq 0x30(%rax,%rcx,8), %rsi
addq -0x90(%rbp), %rsi
movl -0x74(%rbp), %eax
movl %eax, %edx
callq 0x10d0
movl -0x74(%rbp), %ecx
movq -0x60(%rbp), %rax
movl %ecx, %ecx
addq %rcx, %rax
movq %rax, -0x60(%rbp)
movl -0x74(%rbp), %ecx
movl -0x64(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x64(%rbp)
cmpl $0x100, -0x78(%rbp)     # imm = 0x100
jbe 0xe758
movq 0x10(%rbp), %rax
movl -0x88(%rbp), %ecx
cmpq $0x0, 0x80(%rax,%rcx,8)
je 0xe738
movq 0x10(%rbp), %rax
movl -0x88(%rbp), %ecx
movq $0x0, 0x80(%rax,%rcx,8)
jmp 0xe756
movq -0x90(%rbp), %rdx
movl -0x74(%rbp), %eax
addq %rax, %rdx
movq -0x98(%rbp), %rax
movl -0x88(%rbp), %ecx
movq %rdx, (%rax,%rcx,8)
jmp 0xe78c
movq 0x10(%rbp), %rax
movl -0x88(%rbp), %ecx
movq $0x1, 0x80(%rax,%rcx,8)
movq -0x90(%rbp), %rdx
movl -0x74(%rbp), %eax
addq %rax, %rdx
movq -0x98(%rbp), %rax
movl -0x88(%rbp), %ecx
movq %rdx, (%rax,%rcx,8)
jmp 0xe8cc
movl -0x34(%rbp), %eax
andl $0x40, %eax
cmpl $0x0, %eax
jne 0xe7ec
movq -0x30(%rbp), %rax
movl 0x4(%rax), %ecx
movq -0x30(%rbp), %rax
movl %ecx, %ecx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0x30(%rbp)
movq -0x40(%rbp), %rax
movl %eax, %ecx
movl -0x34(%rbp), %eax
movl %eax, %edx
leaq 0x79ea(%rip), %rax      # 0x161b0
andl (%rax,%rdx,4), %ecx
movq -0x30(%rbp), %rax
movl %ecx, %ecx
movq %rcx, %rsi
shlq $0x3, %rsi
movq %rax, %rdx
addq %rsi, %rdx
movq %rdx, -0x30(%rbp)
movzbl (%rax,%rcx,8), %eax
movl %eax, -0x34(%rbp)
jmp 0xe8be
movq 0x18(%rbp), %rax
leaq 0x290f(%rip), %rcx      # 0x11106
movq %rcx, 0x50(%rax)
movq 0x18(%rbp), %rax
movl 0x8(%rax), %eax
subl -0x54(%rbp), %eax
movl %eax, -0x74(%rbp)
movl -0x44(%rbp), %eax
shrl $0x3, %eax
cmpl -0x74(%rbp), %eax
jae 0xe821
movl -0x44(%rbp), %eax
shrl $0x3, %eax
movl %eax, -0xa4(%rbp)
jmp 0xe82a
movl -0x74(%rbp), %eax
movl %eax, -0xa4(%rbp)
movl -0xa4(%rbp), %eax
movl %eax, -0x74(%rbp)
movl -0x74(%rbp), %eax
addl -0x54(%rbp), %eax
movl %eax, -0x54(%rbp)
movl -0x74(%rbp), %ecx
movq -0x50(%rbp), %rax
movl %ecx, %ecx
movl %ecx, %edx
xorl %ecx, %ecx
subq %rdx, %rcx
addq %rcx, %rax
movq %rax, -0x50(%rbp)
movl -0x74(%rbp), %ecx
shll $0x3, %ecx
movl -0x44(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x44(%rbp)
movq -0x40(%rbp), %rcx
movq 0x10(%rbp), %rax
movq %rcx, 0x30(%rax)
movl -0x44(%rbp), %ecx
movq 0x10(%rbp), %rax
movl %ecx, 0x2c(%rax)
movl -0x54(%rbp), %ecx
movq 0x18(%rbp), %rax
movl %ecx, 0x8(%rax)
movq -0x50(%rbp), %rcx
movq 0x18(%rbp), %rax
movq (%rax), %rax
subq %rax, %rcx
movq 0x18(%rbp), %rax
addq 0x10(%rax), %rcx
movq %rcx, 0x10(%rax)
movq -0x50(%rbp), %rcx
movq 0x18(%rbp), %rax
movq %rcx, (%rax)
movq -0x60(%rbp), %rcx
movq 0x10(%rbp), %rax
movq %rcx, 0x58(%rax)
movl $0xfffffffd, -0x4(%rbp) # imm = 0xFFFFFFFD
jmp 0xeeab
jmp 0xe8c0
movb $0x1, %al
testb $0x1, %al
jne 0xe638
jmp 0xe8cc
jmp 0xea15
movl -0x74(%rbp), %ecx
movl -0x64(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x64(%rbp)
movq -0x60(%rbp), %rax
movq 0x10(%rbp), %rcx
movq 0x40(%rcx), %rcx
subq %rcx, %rax
cmpl -0x78(%rbp), %eax
jb 0xe960
movq -0x60(%rbp), %rax
movl -0x78(%rbp), %ecx
movl %ecx, %edx
xorl %ecx, %ecx
subq %rdx, %rcx
addq %rcx, %rax
movq %rax, -0x80(%rbp)
movq -0x80(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x80(%rbp)
movb (%rax), %cl
movq -0x60(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x60(%rbp)
movb %cl, (%rax)
movl -0x74(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x74(%rbp)
movq -0x80(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x80(%rbp)
movb (%rax), %cl
movq -0x60(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x60(%rbp)
movb %cl, (%rax)
movl -0x74(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x74(%rbp)
jmp 0xe9e1
movl -0x78(%rbp), %eax
movq -0x60(%rbp), %rcx
movq 0x10(%rbp), %rdx
movq 0x40(%rdx), %rdx
subq %rdx, %rcx
subl %ecx, %eax
movl %eax, -0x34(%rbp)
movq 0x10(%rbp), %rax
movq 0x48(%rax), %rax
movl -0x34(%rbp), %ecx
movl %ecx, %edx
xorl %ecx, %ecx
subq %rdx, %rcx
addq %rcx, %rax
movq %rax, -0x80(%rbp)
movl -0x74(%rbp), %eax
cmpl -0x34(%rbp), %eax
jbe 0xe9df
movl -0x34(%rbp), %ecx
movl -0x74(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x74(%rbp)
movq -0x80(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x80(%rbp)
movb (%rax), %cl
movq -0x60(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x60(%rbp)
movb %cl, (%rax)
movl -0x34(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x34(%rbp)
cmpl $0x0, %eax
jne 0xe9a3
movq 0x10(%rbp), %rax
movq 0x40(%rax), %rax
movq %rax, -0x80(%rbp)
jmp 0xe9e1
jmp 0xe9e3
movq -0x80(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x80(%rbp)
movb (%rax), %cl
movq -0x60(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x60(%rbp)
movb %cl, (%rax)
movl -0x74(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x74(%rbp)
cmpl $0x0, %eax
jne 0xe9e3
jmp 0xea15
jmp 0xeb57
movl -0x34(%rbp), %eax
andl $0x40, %eax
cmpl $0x0, %eax
jne 0xea75
movq -0x30(%rbp), %rax
movl 0x4(%rax), %ecx
movq -0x30(%rbp), %rax
movl %ecx, %ecx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0x30(%rbp)
movq -0x40(%rbp), %rax
movl %eax, %ecx
movl -0x34(%rbp), %eax
movl %eax, %edx
leaq 0x7761(%rip), %rax      # 0x161b0
andl (%rax,%rdx,4), %ecx
movq -0x30(%rbp), %rax
movl %ecx, %ecx
movq %rcx, %rsi
shlq $0x3, %rsi
movq %rax, %rdx
addq %rsi, %rdx
movq %rdx, -0x30(%rbp)
movzbl (%rax,%rcx,8), %eax
movl %eax, -0x34(%rbp)
jmp 0xeb47
movq 0x18(%rbp), %rax
leaq 0x269a(%rip), %rcx      # 0x1111a
movq %rcx, 0x50(%rax)
movq 0x18(%rbp), %rax
movl 0x8(%rax), %eax
subl -0x54(%rbp), %eax
movl %eax, -0x74(%rbp)
movl -0x44(%rbp), %eax
shrl $0x3, %eax
cmpl -0x74(%rbp), %eax
jae 0xeaaa
movl -0x44(%rbp), %eax
shrl $0x3, %eax
movl %eax, -0xa8(%rbp)
jmp 0xeab3
movl -0x74(%rbp), %eax
movl %eax, -0xa8(%rbp)
movl -0xa8(%rbp), %eax
movl %eax, -0x74(%rbp)
movl -0x74(%rbp), %eax
addl -0x54(%rbp), %eax
movl %eax, -0x54(%rbp)
movl -0x74(%rbp), %ecx
movq -0x50(%rbp), %rax
movl %ecx, %ecx
movl %ecx, %edx
xorl %ecx, %ecx
subq %rdx, %rcx
addq %rcx, %rax
movq %rax, -0x50(%rbp)
movl -0x74(%rbp), %ecx
shll $0x3, %ecx
movl -0x44(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x44(%rbp)
movq -0x40(%rbp), %rcx
movq 0x10(%rbp), %rax
movq %rcx, 0x30(%rax)
movl -0x44(%rbp), %ecx
movq 0x10(%rbp), %rax
movl %ecx, 0x2c(%rax)
movl -0x54(%rbp), %ecx
movq 0x18(%rbp), %rax
movl %ecx, 0x8(%rax)
movq -0x50(%rbp), %rcx
movq 0x18(%rbp), %rax
movq (%rax), %rax
subq %rax, %rcx
movq 0x18(%rbp), %rax
addq 0x10(%rax), %rcx
movq %rcx, 0x10(%rax)
movq -0x50(%rbp), %rcx
movq 0x18(%rbp), %rax
movq %rcx, (%rax)
movq -0x60(%rbp), %rcx
movq 0x10(%rbp), %rax
movq %rcx, 0x58(%rax)
movl $0xfffffffd, -0x4(%rbp) # imm = 0xFFFFFFFD
jmp 0xeeab
jmp 0xeb49
jmp 0xeb4b
movb $0x1, %al
testb $0x1, %al
jne 0xe535
jmp 0xeb57
jmp 0xedbf
movl -0x34(%rbp), %eax
andl $0x40, %eax
cmpl $0x0, %eax
jne 0xec0d
movq -0x30(%rbp), %rax
movl 0x4(%rax), %ecx
movq -0x30(%rbp), %rax
movl %ecx, %ecx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0x30(%rbp)
movq -0x40(%rbp), %rax
movl %eax, %ecx
movl -0x34(%rbp), %eax
movl %eax, %edx
leaq 0x761b(%rip), %rax      # 0x161b0
andl (%rax,%rdx,4), %ecx
movq -0x30(%rbp), %rax
movl %ecx, %ecx
movq %rcx, %rsi
shlq $0x3, %rsi
movq %rax, %rdx
addq %rsi, %rdx
movq %rdx, -0x30(%rbp)
movzbl (%rax,%rcx,8), %eax
movl %eax, -0x34(%rbp)
cmpl $0x0, %eax
jne 0xec08
movq -0x30(%rbp), %rax
movzbl 0x1(%rax), %ecx
movq -0x40(%rbp), %rax
movl %ecx, %ecx
shrq %cl, %rax
movq %rax, -0x40(%rbp)
movq -0x30(%rbp), %rax
movzbl 0x1(%rax), %ecx
movl -0x44(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x44(%rbp)
movq -0x30(%rbp), %rax
movl 0x4(%rax), %eax
movb %al, %cl
movq -0x60(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x60(%rbp)
movb %cl, (%rax)
movl -0x64(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x64(%rbp)
jmp 0xedbf
jmp 0xedb1
movl -0x34(%rbp), %eax
andl $0x20, %eax
cmpl $0x0, %eax
je 0xecdf
movq 0x18(%rbp), %rax
movl 0x8(%rax), %eax
subl -0x54(%rbp), %eax
movl %eax, -0x74(%rbp)
movl -0x44(%rbp), %eax
shrl $0x3, %eax
cmpl -0x74(%rbp), %eax
jae 0xec42
movl -0x44(%rbp), %eax
shrl $0x3, %eax
movl %eax, -0xac(%rbp)
jmp 0xec4b
movl -0x74(%rbp), %eax
movl %eax, -0xac(%rbp)
movl -0xac(%rbp), %eax
movl %eax, -0x74(%rbp)
movl -0x74(%rbp), %eax
addl -0x54(%rbp), %eax
movl %eax, -0x54(%rbp)
movl -0x74(%rbp), %ecx
movq -0x50(%rbp), %rax
movl %ecx, %ecx
movl %ecx, %edx
xorl %ecx, %ecx
subq %rdx, %rcx
addq %rcx, %rax
movq %rax, -0x50(%rbp)
movl -0x74(%rbp), %ecx
shll $0x3, %ecx
movl -0x44(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x44(%rbp)
movq -0x40(%rbp), %rcx
movq 0x10(%rbp), %rax
movq %rcx, 0x30(%rax)
movl -0x44(%rbp), %ecx
movq 0x10(%rbp), %rax
movl %ecx, 0x2c(%rax)
movl -0x54(%rbp), %ecx
movq 0x18(%rbp), %rax
movl %ecx, 0x8(%rax)
movq -0x50(%rbp), %rcx
movq 0x18(%rbp), %rax
movq (%rax), %rax
subq %rax, %rcx
movq 0x18(%rbp), %rax
addq 0x10(%rax), %rcx
movq %rcx, 0x10(%rax)
movq -0x50(%rbp), %rcx
movq 0x18(%rbp), %rax
movq %rcx, (%rax)
movq -0x60(%rbp), %rcx
movq 0x10(%rbp), %rax
movq %rcx, 0x58(%rax)
movl $0x1, -0x4(%rbp)
jmp 0xeeab
movq 0x18(%rbp), %rax
leaq 0x2444(%rip), %rcx      # 0x1112e
movq %rcx, 0x50(%rax)
movq 0x18(%rbp), %rax
movl 0x8(%rax), %eax
subl -0x54(%rbp), %eax
movl %eax, -0x74(%rbp)
movl -0x44(%rbp), %eax
shrl $0x3, %eax
cmpl -0x74(%rbp), %eax
jae 0xed14
movl -0x44(%rbp), %eax
shrl $0x3, %eax
movl %eax, -0xb0(%rbp)
jmp 0xed1d
movl -0x74(%rbp), %eax
movl %eax, -0xb0(%rbp)
movl -0xb0(%rbp), %eax
movl %eax, -0x74(%rbp)
movl -0x74(%rbp), %eax
addl -0x54(%rbp), %eax
movl %eax, -0x54(%rbp)
movl -0x74(%rbp), %ecx
movq -0x50(%rbp), %rax
movl %ecx, %ecx
movl %ecx, %edx
xorl %ecx, %ecx
subq %rdx, %rcx
addq %rcx, %rax
movq %rax, -0x50(%rbp)
movl -0x74(%rbp), %ecx
shll $0x3, %ecx
movl -0x44(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x44(%rbp)
movq -0x40(%rbp), %rcx
movq 0x10(%rbp), %rax
movq %rcx, 0x30(%rax)
movl -0x44(%rbp), %ecx
movq 0x10(%rbp), %rax
movl %ecx, 0x2c(%rax)
movl -0x54(%rbp), %ecx
movq 0x18(%rbp), %rax
movl %ecx, 0x8(%rax)
movq -0x50(%rbp), %rcx
movq 0x18(%rbp), %rax
movq (%rax), %rax
subq %rax, %rcx
movq 0x18(%rbp), %rax
addq 0x10(%rax), %rcx
movq %rcx, 0x10(%rax)
movq -0x50(%rbp), %rcx
movq 0x18(%rbp), %rax
movq %rcx, (%rax)
movq -0x60(%rbp), %rcx
movq 0x10(%rbp), %rax
movq %rcx, 0x58(%rax)
movl $0xfffffffd, -0x4(%rbp) # imm = 0xFFFFFFFD
jmp 0xeeab
jmp 0xedb3
movb $0x1, %al
testb $0x1, %al
jne 0xe423
jmp 0xedbf
jmp 0xedc1
xorl %eax, %eax
cmpl $0x1002, -0x64(%rbp)    # imm = 0x1002
movb %al, -0xb1(%rbp)
jb 0xeddf
cmpl $0xa, -0x54(%rbp)
setae %al
movb %al, -0xb1(%rbp)
movb -0xb1(%rbp), %al
testb $0x1, %al
jne 0xe36e
movq 0x18(%rbp), %rax
movl 0x8(%rax), %eax
subl -0x54(%rbp), %eax
movl %eax, -0x74(%rbp)
movl -0x44(%rbp), %eax
shrl $0x3, %eax
cmpl -0x74(%rbp), %eax
jae 0xee13
movl -0x44(%rbp), %eax
shrl $0x3, %eax
movl %eax, -0xb8(%rbp)
jmp 0xee1c
movl -0x74(%rbp), %eax
movl %eax, -0xb8(%rbp)
movl -0xb8(%rbp), %eax
movl %eax, -0x74(%rbp)
movl -0x74(%rbp), %eax
addl -0x54(%rbp), %eax
movl %eax, -0x54(%rbp)
movl -0x74(%rbp), %ecx
movq -0x50(%rbp), %rax
movl %ecx, %ecx
movl %ecx, %edx
xorl %ecx, %ecx
subq %rdx, %rcx
addq %rcx, %rax
movq %rax, -0x50(%rbp)
movl -0x74(%rbp), %ecx
shll $0x3, %ecx
movl -0x44(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x44(%rbp)
movq -0x40(%rbp), %rcx
movq 0x10(%rbp), %rax
movq %rcx, 0x30(%rax)
movl -0x44(%rbp), %ecx
movq 0x10(%rbp), %rax
movl %ecx, 0x2c(%rax)
movl -0x54(%rbp), %ecx
movq 0x18(%rbp), %rax
movl %ecx, 0x8(%rax)
movq -0x50(%rbp), %rcx
movq 0x18(%rbp), %rax
movq (%rax), %rax
subq %rax, %rcx
movq 0x18(%rbp), %rax
addq 0x10(%rax), %rcx
movq %rcx, 0x10(%rax)
movq -0x50(%rbp), %rcx
movq 0x18(%rbp), %rax
movq %rcx, (%rax)
movq -0x60(%rbp), %rcx
movq 0x10(%rbp), %rax
movq %rcx, 0x58(%rax)
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0xc0, %rsp
popq %rbp
retq
nopw (%rax,%rax)