// File: /workspace/github_c_makefile_star2_O0/jonof[P]jftekwar/jfbuild/src/engine.c
// Function: grouscan
static void grouscan(int dax1, int dax2, int sectnum, unsigned char dastat)
{
	int i, j, l, x, y, dx, dy, wx, wy, y1, y2, daz;
	int daslope, dasqr;
	int shoffs, shinc, m1, m2;
	intptr_t *mptr1, *mptr2, *nptr1, *nptr2;
	walltype *wal;
	sectortype *sec;

	sec = &sector[sectnum];

	if (dastat == 0)
	{
		if (globalposz <= getceilzofslope(sectnum,globalposx,globalposy))
			return;  //Back-face culling
		globalorientation = sec->ceilingstat;
		globalpicnum = sec->ceilingpicnum;
		globalshade = sec->ceilingshade;
		globalpal = sec->ceilingpal;
		daslope = sec->ceilingheinum;
		daz = sec->ceilingz;
	}
	else
	{
		if (globalposz >= getflorzofslope(sectnum,globalposx,globalposy))
			return;  //Back-face culling
		globalorientation = sec->floorstat;
		globalpicnum = sec->floorpicnum;
		globalshade = sec->floorshade;
		globalpal = sec->floorpal;
		daslope = sec->floorheinum;
		daz = sec->floorz;
	}

	if (palookup[globalpal] == 0) globalpal = 0;
	if ((picanm[globalpicnum]&192) != 0) globalpicnum += animateoffs(globalpicnum,sectnum);
	setgotpic(globalpicnum);
	if ((tilesizx[globalpicnum] <= 0) || (tilesizy[globalpicnum] <= 0)) return;
	if (waloff[globalpicnum] == 0) loadtile(globalpicnum);

	wal = &wall[sec->wallptr];
	wx = wall[wal->point2].x - wal->x;
	wy = wall[wal->point2].y - wal->y;
	dasqr = krecipasm(nsqrtasm(wx*wx+wy*wy));
	i = mulscale21(daslope,dasqr);
	wx *= i; wy *= i;

	globalx = -mulscale19(singlobalang,xdimenrecip);
	globaly = mulscale19(cosglobalang,xdimenrecip);
	globalx1 = (globalposx<<8);
	globaly1 = -(globalposy<<8);
	i = (dax1-halfxdimen)*xdimenrecip;
	globalx2 = mulscale16(cosglobalang<<4,viewingrangerecip) - mulscale27(singlobalang,i);
	globaly2 = mulscale16(singlobalang<<4,viewingrangerecip) + mulscale27(cosglobalang,i);
	globalzd = (xdimscale<<9);
	globalzx = -dmulscale17(wx,globaly2,-wy,globalx2) + mulscale10(1-globalhoriz,globalzd);
	globalz = -dmulscale25(wx,globaly,-wy,globalx);

	if (globalorientation&64)  //Relative alignment
	{
		dx = mulscale14(wall[wal->point2].x-wal->x,dasqr);
		dy = mulscale14(wall[wal->point2].y-wal->y,dasqr);

		i = nsqrtasm(daslope*daslope+16777216);

		x = globalx; y = globaly;
		globalx = dmulscale16(x,dx,y,dy);
		globaly = mulscale12(dmulscale16(-y,dx,x,dy),i);

		x = ((wal->x-globalposx)<<8); y = ((wal->y-globalposy)<<8);
		globalx1 = dmulscale16(-x,dx,-y,dy);
		globaly1 = mulscale12(dmulscale16(-y,dx,x,dy),i);

		x = globalx2; y = globaly2;
		globalx2 = dmulscale16(x,dx,y,dy);
		globaly2 = mulscale12(dmulscale16(-y,dx,x,dy),i);
	}
	if (globalorientation&0x4)
	{
		i = globalx; globalx = -globaly; globaly = -i;
		i = globalx1; globalx1 = globaly1; globaly1 = i;
		i = globalx2; globalx2 = -globaly2; globaly2 = -i;
	}
	if (globalorientation&0x10) { globalx1 = -globalx1, globalx2 = -globalx2, globalx = -globalx; }
	if (globalorientation&0x20) { globaly1 = -globaly1, globaly2 = -globaly2, globaly = -globaly; }

	daz = dmulscale9(wx,globalposy-wal->y,-wy,globalposx-wal->x) + ((daz-globalposz)<<8);
	globalx2 = mulscale20(globalx2,daz); globalx = mulscale28(globalx,daz);
	globaly2 = mulscale20(globaly2,-daz); globaly = mulscale28(globaly,-daz);

	i = 8-(picsiz[globalpicnum]&15); j = 8-(picsiz[globalpicnum]>>4);
	if (globalorientation&8) { i++; j++; }
	globalx1 <<= (i+12); globalx2 <<= i; globalx <<= i;
	globaly1 <<= (j+12); globaly2 <<= j; globaly <<= j;

	if (dastat == 0)
	{
		globalx1 += (((int)sec->ceilingxpanning)<<24);
		globaly1 += (((int)sec->ceilingypanning)<<24);
	}
	else
	{
		globalx1 += (((int)sec->floorxpanning)<<24);
		globaly1 += (((int)sec->floorypanning)<<24);
	}

	asm1 = -(globalzd>>(16-BITSOFPRECISION));

	globvis = globalvisibility;
	if (sec->visibility != 0) globvis = mulscale4(globvis,(int)((unsigned char)(sec->visibility+16)));
	globvis = mulscale13(globvis,daz);
	globvis = mulscale16(globvis,xdimscale);

	setupslopevlin(((int)(picsiz[globalpicnum]&15))+(((int)(picsiz[globalpicnum]>>4))<<8),(void *)waloff[globalpicnum],-ylookup[1]);

	l = (globalzd>>16);

	assert(SLOPALOOKUPSIZ - 4 - ydimen > 0);

	shinc = mulscale16(globalz,xdimenscale);
	if (shinc > 0) shoffs = (4<<15); else shoffs = ((SLOPALOOKUPSIZ-4-ydimen)<<15);
	if (dastat == 0) y1 = umost[dax1]; else y1 = max(umost[dax1],dplc[dax1]);
	m1 = mulscale16(y1,globalzd) + (globalzx>>6);
		//Avoid visibility overflow by crossing horizon
	if (globalzd > 0) m1 += (globalzd>>16); else m1 -= (globalzd>>16);
	m2 = m1+l;
	mptr1 = &slopalookup[y1+(shoffs>>15)]; mptr2 = mptr1+1;

	assert(y1+(shoffs>>15) >= 0);
	assert(y1+(shoffs>>15) <= SLOPALOOKUPSIZ-2);

	for(x=dax1;x<=dax2;x++)
	{
		if (dastat == 0) { y1 = umost[x]; y2 = min(dmost[x],uplc[x])-1; }
		else { y1 = max(umost[x],dplc[x]); y2 = dmost[x]-1; }
		if (y1 <= y2)
		{
			assert(y1+(shoffs>>15) >= 0);
			assert(y1+(shoffs>>15) <= SLOPALOOKUPSIZ-1);
			assert(y2+(shoffs>>15) >= 0);
			assert(y2+(shoffs>>15) <= SLOPALOOKUPSIZ-1);

			nptr1 = &slopalookup[y1+(shoffs>>15)];
			nptr2 = &slopalookup[y2+(shoffs>>15)];
			while (nptr1 <= mptr1)
			{
				*mptr1-- = (intptr_t)palookup[globalpal] + (getpalookup((int)mulscale24(krecipasm(m1),globvis),globalshade)<<8);
				m1 -= l;
			}
			while (nptr2 >= mptr2)
			{
				*mptr2++ = (intptr_t)palookup[globalpal] + (getpalookup((int)mulscale24(krecipasm(m2),globvis),globalshade)<<8);
				m2 += l;
			}

			globalx3 = (globalx2>>10);
			globaly3 = (globaly2>>10);
			asm3 = mulscale16(y2,globalzd) + (globalzx>>6);
			slopevlin((void *)(ylookup[y2]+x+frameoffset),krecipasm((int)asm3>>3),nptr2,y2-y1+1,globalx1,globaly1);

			if ((x&15) == 0) faketimerhandler();
		}
		globalx2 += globalx;
		globaly2 += globaly;
		globalzx += globalz;
		shoffs += shinc;
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xc0, %rsp
movb %cl, %al
movl %edi, -0x4(%rbp)
movl %esi, -0x8(%rbp)
movl %edx, -0xc(%rbp)
movb %al, -0xd(%rbp)
movslq -0xc(%rbp), %rcx
leaq 0x2256bc(%rip), %rax    # 0x2805c0
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0x88(%rbp)
movzbl -0xd(%rbp), %eax
cmpl $0x0, %eax
jne 0x5afb8
movl 0x24d69b(%rip), %eax    # 0x2a85c0
movl %eax, -0x8c(%rbp)
movl -0xc(%rbp), %eax
movl 0x21c67c(%rip), %esi    # 0x2775b0
movl 0x21c67a(%rip), %edx    # 0x2775b4
movswl %ax, %edi
callq 0x551d0
movl %eax, %ecx
movl -0x8c(%rbp), %eax
cmpl %ecx, %eax
jg 0x5af53
jmp 0x5bdaa
movq -0x88(%rbp), %rax
movswl 0xc(%rax), %eax
movl %eax, 0x3efdfc(%rip)    # 0x44ad60
movq -0x88(%rbp), %rax
movw 0x10(%rax), %ax
movw %ax, 0x3efdfa(%rip)     # 0x44ad70
movq -0x88(%rbp), %rax
movsbl 0x14(%rax), %eax
movl %eax, 0x3f4605(%rip)    # 0x44f58c
movq -0x88(%rbp), %rax
movzbl 0x15(%rax), %eax
movl %eax, 0x3efdcc(%rip)    # 0x44ad64
movq -0x88(%rbp), %rax
movswl 0x12(%rax), %eax
movl %eax, -0x44(%rbp)
movq -0x88(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0x40(%rbp)
jmp 0x5b04c
movl 0x24d602(%rip), %eax    # 0x2a85c0
movl %eax, -0x90(%rbp)
movl -0xc(%rbp), %eax
movl 0x21c5e3(%rip), %esi    # 0x2775b0
movl 0x21c5e1(%rip), %edx    # 0x2775b4
movswl %ax, %edi
callq 0x55060
movl %eax, %ecx
movl -0x90(%rbp), %eax
cmpl %ecx, %eax
jl 0x5afec
jmp 0x5bdaa
movq -0x88(%rbp), %rax
movswl 0xe(%rax), %eax
movl %eax, 0x3efd63(%rip)    # 0x44ad60
movq -0x88(%rbp), %rax
movw 0x18(%rax), %ax
movw %ax, 0x3efd61(%rip)     # 0x44ad70
movq -0x88(%rbp), %rax
movsbl 0x1c(%rax), %eax
movl %eax, 0x3f456c(%rip)    # 0x44f58c
movq -0x88(%rbp), %rax
movzbl 0x1d(%rax), %eax
movl %eax, 0x3efd33(%rip)    # 0x44ad64
movq -0x88(%rbp), %rax
movswl 0x1a(%rax), %eax
movl %eax, -0x44(%rbp)
movq -0x88(%rbp), %rax
movl 0x8(%rax), %eax
movl %eax, -0x40(%rbp)
movslq 0x3efd11(%rip), %rcx    # 0x44ad64
leaq 0x37a5e6(%rip), %rax    # 0x3d5640
cmpq $0x0, (%rax,%rcx,8)
jne 0x5b06b
movl $0x0, 0x3efcf9(%rip)    # 0x44ad64
movswq 0x3efcfd(%rip), %rcx    # 0x44ad70
leaq 0x21c546(%rip), %rax    # 0x2775c0
movl (%rax,%rcx,4), %eax
andl $0xc0, %eax
cmpl $0x0, %eax
je 0x5b0ae
movw 0x3efce2(%rip), %cx     # 0x44ad70
movl -0xc(%rbp), %eax
movswl %cx, %edi
movswl %ax, %esi
callq 0x361e0
movl %eax, %ecx
movswl 0x3efccb(%rip), %eax    # 0x44ad70
addl %ecx, %eax
movw %ax, 0x3efcc2(%rip)     # 0x44ad70
movswl 0x3efcbb(%rip), %edi    # 0x44ad70
callq 0x44d80
movswq 0x3efcae(%rip), %rcx    # 0x44ad70
leaq 0x3efcb7(%rip), %rax    # 0x44ad80
movswl (%rax,%rcx,2), %eax
cmpl $0x0, %eax
jle 0x5b0ea
movswq 0x3efc96(%rip), %rcx    # 0x44ad70
leaq 0x3e145f(%rip), %rax    # 0x43c540
movswl (%rax,%rcx,2), %eax
cmpl $0x0, %eax
jg 0x5b0ef
jmp 0x5bdaa
movswq 0x3efc79(%rip), %rcx    # 0x44ad70
leaq 0x37ad42(%rip), %rax    # 0x3d5e40
cmpq $0x0, (%rax,%rcx,8)
jne 0x5b111
movswl 0x3efc64(%rip), %edi    # 0x44ad70
callq 0x44df0
movq -0x88(%rbp), %rax
movswq (%rax), %rcx
leaq 0x19a48d(%rip), %rax    # 0x1f55b0
shlq $0x5, %rcx
addq %rcx, %rax
movq %rax, -0x80(%rbp)
movq -0x80(%rbp), %rax
movswq 0x8(%rax), %rcx
leaq 0x19a472(%rip), %rax    # 0x1f55b0
shlq $0x5, %rcx
addq %rcx, %rax
movl (%rax), %eax
movq -0x80(%rbp), %rcx
subl (%rcx), %eax
movl %eax, -0x30(%rbp)
movq -0x80(%rbp), %rax
movswq 0x8(%rax), %rcx
leaq 0x19a450(%rip), %rax    # 0x1f55b0
shlq $0x5, %rcx
addq %rcx, %rax
movl 0x4(%rax), %eax
movq -0x80(%rbp), %rcx
subl 0x4(%rcx), %eax
movl %eax, -0x34(%rbp)
movl -0x30(%rbp), %edi
imull -0x30(%rbp), %edi
movl -0x34(%rbp), %eax
imull -0x34(%rbp), %eax
addl %eax, %edi
callq 0x37570
movl %eax, %edi
callq 0x37520
movl %eax, -0x48(%rbp)
movl -0x44(%rbp), %edi
movl -0x48(%rbp), %esi
callq 0x5eb10
movl %eax, -0x14(%rbp)
movl -0x14(%rbp), %eax
imull -0x30(%rbp), %eax
movl %eax, -0x30(%rbp)
movl -0x14(%rbp), %eax
imull -0x34(%rbp), %eax
movl %eax, -0x34(%rbp)
movl 0x25141d(%rip), %edi    # 0x2ac5d8
movl 0x415c2b(%rip), %esi    # 0x470dec
callq 0x5eb30
movl %eax, %ecx
xorl %eax, %eax
subl %ecx, %eax
movl %eax, 0x42d78e(%rip)    # 0x488960
movl 0x2513f8(%rip), %edi    # 0x2ac5d0
movl 0x415c0e(%rip), %esi    # 0x470dec
callq 0x5eb30
movl %eax, 0x42d77b(%rip)    # 0x488964
movl 0x21c3c1(%rip), %eax    # 0x2775b0
shll $0x8, %eax
movl %eax, 0x3f43a0(%rip)    # 0x44f598
movl 0x21c3b6(%rip), %ecx    # 0x2775b4
shll $0x8, %ecx
xorl %eax, %eax
subl %ecx, %eax
movl %eax, 0x3f4391(%rip)    # 0x44f59c
movl -0x4(%rbp), %eax
subl 0x3f8490(%rip), %eax    # 0x4536a4
imull 0x415bd1(%rip), %eax    # 0x470dec
movl %eax, -0x14(%rbp)
movl 0x2513ac(%rip), %edi    # 0x2ac5d0
shll $0x4, %edi
movl 0x3b066b(%rip), %esi    # 0x40b898
callq 0x39010
movl %eax, -0x9c(%rbp)
movl 0x25139a(%rip), %edi    # 0x2ac5d8
movl -0x14(%rbp), %esi
callq 0x5eb50
movl %eax, %ecx
movl -0x9c(%rbp), %eax
subl %ecx, %eax
movl %eax, 0x3f434a(%rip)    # 0x44f5a0
movl 0x25137c(%rip), %edi    # 0x2ac5d8
shll $0x4, %edi
movl 0x3b0633(%rip), %esi    # 0x40b898
callq 0x39010
movl %eax, -0x98(%rbp)
movl 0x25135a(%rip), %edi    # 0x2ac5d0
movl -0x14(%rbp), %esi
callq 0x5eb50
movl %eax, %ecx
movl -0x98(%rbp), %eax
addl %ecx, %eax
movl %eax, 0x3f4316(%rip)    # 0x44f5a4
movl 0x3b0600(%rip), %eax    # 0x40b894
shll $0x9, %eax
movl %eax, 0x42d6af(%rip)    # 0x48894c
movl -0x30(%rbp), %edi
movl 0x3f42fe(%rip), %esi    # 0x44f5a4
xorl %edx, %edx
subl -0x34(%rbp), %edx
movl 0x3f42ef(%rip), %ecx    # 0x44f5a0
callq 0x5eb70
movl %eax, %ecx
xorl %eax, %eax
subl %ecx, %eax
movl %eax, -0x94(%rbp)
movl $0x1, %edi
subl 0x25d32f(%rip), %edi    # 0x2b85fc
movl 0x42d679(%rip), %esi    # 0x48894c
callq 0x45010
movl %eax, %ecx
movl -0x94(%rbp), %eax
addl %ecx, %eax
movl %eax, 0x42d674(%rip)    # 0x48895c
movl -0x30(%rbp), %edi
movl 0x42d673(%rip), %esi    # 0x488964
xorl %edx, %edx
subl -0x34(%rbp), %edx
movl 0x42d664(%rip), %ecx    # 0x488960
callq 0x5ebb0
movl %eax, %ecx
xorl %eax, %eax
subl %ecx, %eax
movl %eax, 0x42d65b(%rip)    # 0x488968
movl 0x3efa4d(%rip), %eax    # 0x44ad60
andl $0x40, %eax
cmpl $0x0, %eax
je 0x5b485
movq -0x80(%rbp), %rax
movswq 0x8(%rax), %rcx
leaq 0x19a281(%rip), %rax    # 0x1f55b0
shlq $0x5, %rcx
addq %rcx, %rax
movl (%rax), %edi
movq -0x80(%rbp), %rax
subl (%rax), %edi
movl -0x48(%rbp), %esi
callq 0x52680
movl %eax, -0x28(%rbp)
movq -0x80(%rbp), %rax
movswq 0x8(%rax), %rcx
leaq 0x19a257(%rip), %rax    # 0x1f55b0
shlq $0x5, %rcx
addq %rcx, %rax
movl 0x4(%rax), %edi
movq -0x80(%rbp), %rax
subl 0x4(%rax), %edi
movl -0x48(%rbp), %esi
callq 0x52680
movl %eax, -0x2c(%rbp)
movl -0x44(%rbp), %edi
imull -0x44(%rbp), %edi
addl $0x1000000, %edi        # imm = 0x1000000
callq 0x37570
movl %eax, -0x14(%rbp)
movl 0x42d5d0(%rip), %eax    # 0x488960
movl %eax, -0x20(%rbp)
movl 0x42d5cb(%rip), %eax    # 0x488964
movl %eax, -0x24(%rbp)
movl -0x20(%rbp), %edi
movl -0x28(%rbp), %esi
movl -0x24(%rbp), %edx
movl -0x2c(%rbp), %ecx
callq 0x43950
movl %eax, 0x42d5ad(%rip)    # 0x488960
xorl %edi, %edi
subl -0x24(%rbp), %edi
movl -0x28(%rbp), %esi
movl -0x20(%rbp), %edx
movl -0x2c(%rbp), %ecx
callq 0x43950
movl %eax, %edi
movl -0x14(%rbp), %esi
callq 0x450b0
movl %eax, 0x42d58e(%rip)    # 0x488964
movq -0x80(%rbp), %rax
movl (%rax), %eax
subl 0x21c1ce(%rip), %eax    # 0x2775b0
shll $0x8, %eax
movl %eax, -0x20(%rbp)
movq -0x80(%rbp), %rax
movl 0x4(%rax), %eax
subl 0x21c1bf(%rip), %eax    # 0x2775b4
shll $0x8, %eax
movl %eax, -0x24(%rbp)
xorl %edi, %edi
subl -0x20(%rbp), %edi
movl -0x28(%rbp), %esi
xorl %edx, %edx
subl -0x24(%rbp), %edx
movl -0x2c(%rbp), %ecx
callq 0x43950
movl %eax, 0x3f4182(%rip)    # 0x44f598
xorl %edi, %edi
subl -0x24(%rbp), %edi
movl -0x28(%rbp), %esi
movl -0x20(%rbp), %edx
movl -0x2c(%rbp), %ecx
callq 0x43950
movl %eax, %edi
movl -0x14(%rbp), %esi
callq 0x450b0
movl %eax, 0x3f4163(%rip)    # 0x44f59c
movl 0x3f4161(%rip), %eax    # 0x44f5a0
movl %eax, -0x20(%rbp)
movl 0x3f415c(%rip), %eax    # 0x44f5a4
movl %eax, -0x24(%rbp)
movl -0x20(%rbp), %edi
movl -0x28(%rbp), %esi
movl -0x24(%rbp), %edx
movl -0x2c(%rbp), %ecx
callq 0x43950
movl %eax, 0x3f413e(%rip)    # 0x44f5a0
xorl %edi, %edi
subl -0x24(%rbp), %edi
movl -0x28(%rbp), %esi
movl -0x20(%rbp), %edx
movl -0x2c(%rbp), %ecx
callq 0x43950
movl %eax, %edi
movl -0x14(%rbp), %esi
callq 0x450b0
movl %eax, 0x3f411f(%rip)    # 0x44f5a4
movl 0x3ef8d5(%rip), %eax    # 0x44ad60
andl $0x4, %eax
cmpl $0x0, %eax
je 0x5b4f5
movl 0x42d4c7(%rip), %eax    # 0x488960
movl %eax, -0x14(%rbp)
xorl %eax, %eax
subl 0x42d4c0(%rip), %eax    # 0x488964
movl %eax, 0x42d4b6(%rip)    # 0x488960
xorl %eax, %eax
subl -0x14(%rbp), %eax
movl %eax, 0x42d4af(%rip)    # 0x488964
movl 0x3f40dd(%rip), %eax    # 0x44f598
movl %eax, -0x14(%rbp)
movl 0x3f40d8(%rip), %eax    # 0x44f59c
movl %eax, 0x3f40ce(%rip)    # 0x44f598
movl -0x14(%rbp), %eax
movl %eax, 0x3f40c9(%rip)    # 0x44f59c
movl 0x3f40c7(%rip), %eax    # 0x44f5a0
movl %eax, -0x14(%rbp)
xorl %eax, %eax
subl 0x3f40c0(%rip), %eax    # 0x44f5a4
movl %eax, 0x3f40b6(%rip)    # 0x44f5a0
xorl %eax, %eax
subl -0x14(%rbp), %eax
movl %eax, 0x3f40af(%rip)    # 0x44f5a4
movl 0x3ef865(%rip), %eax    # 0x44ad60
andl $0x10, %eax
cmpl $0x0, %eax
je 0x5b52d
xorl %eax, %eax
subl 0x3f408d(%rip), %eax    # 0x44f598
movl %eax, 0x3f4087(%rip)    # 0x44f598
xorl %eax, %eax
subl 0x3f4087(%rip), %eax    # 0x44f5a0
movl %eax, 0x3f4081(%rip)    # 0x44f5a0
xorl %eax, %eax
subl 0x42d439(%rip), %eax    # 0x488960
movl %eax, 0x42d433(%rip)    # 0x488960
movl 0x3ef82d(%rip), %eax    # 0x44ad60
andl $0x20, %eax
cmpl $0x0, %eax
je 0x5b565
xorl %eax, %eax
subl 0x3f4059(%rip), %eax    # 0x44f59c
movl %eax, 0x3f4053(%rip)    # 0x44f59c
xorl %eax, %eax
subl 0x3f4053(%rip), %eax    # 0x44f5a4
movl %eax, 0x3f404d(%rip)    # 0x44f5a4
xorl %eax, %eax
subl 0x42d405(%rip), %eax    # 0x488964
movl %eax, 0x42d3ff(%rip)    # 0x488964
movl -0x30(%rbp), %edi
movl 0x21c046(%rip), %esi    # 0x2775b4
movq -0x80(%rbp), %rax
subl 0x4(%rax), %esi
xorl %edx, %edx
subl -0x34(%rbp), %edx
movl 0x21c030(%rip), %ecx    # 0x2775b0
movq -0x80(%rbp), %rax
subl (%rax), %ecx
callq 0x5ebf0
movl -0x40(%rbp), %ecx
subl 0x24d02c(%rip), %ecx    # 0x2a85c0
shll $0x8, %ecx
addl %ecx, %eax
movl %eax, -0x40(%rbp)
movl 0x3f3ffe(%rip), %edi    # 0x44f5a0
movl -0x40(%rbp), %esi
callq 0x376c0
movl %eax, 0x3f3ff0(%rip)    # 0x44f5a0
movl 0x42d3aa(%rip), %edi    # 0x488960
movl -0x40(%rbp), %esi
callq 0x5ec30
movl %eax, 0x42d39c(%rip)    # 0x488960
movl 0x3f3fda(%rip), %edi    # 0x44f5a4
xorl %esi, %esi
subl -0x40(%rbp), %esi
callq 0x376c0
movl %eax, 0x3f3fca(%rip)    # 0x44f5a4
movl 0x42d384(%rip), %edi    # 0x488964
xorl %esi, %esi
subl -0x40(%rbp), %esi
callq 0x5ec30
movl %eax, 0x42d374(%rip)    # 0x488964
movswq 0x3ef778(%rip), %rcx    # 0x44ad70
leaq 0x3f3fb1(%rip), %rax    # 0x44f5b0
movzbl (%rax,%rcx), %ecx
andl $0xf, %ecx
movl $0x8, %eax
subl %ecx, %eax
movl %eax, -0x14(%rbp)
movswq 0x3ef758(%rip), %rcx    # 0x44ad70
leaq 0x3f3f91(%rip), %rax    # 0x44f5b0
movzbl (%rax,%rcx), %ecx
sarl $0x4, %ecx
movl $0x8, %eax
subl %ecx, %eax
movl %eax, -0x18(%rbp)
movl 0x3ef72a(%rip), %eax    # 0x44ad60
andl $0x8, %eax
cmpl $0x0, %eax
je 0x5b650
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
movl -0x18(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x18(%rbp)
movl -0x14(%rbp), %ecx
addl $0xc, %ecx
movl 0x3f3f3c(%rip), %eax    # 0x44f598
shll %cl, %eax
movl %eax, 0x3f3f34(%rip)    # 0x44f598
movl -0x14(%rbp), %ecx
movl 0x3f3f33(%rip), %eax    # 0x44f5a0
shll %cl, %eax
movl %eax, 0x3f3f2b(%rip)    # 0x44f5a0
movl -0x14(%rbp), %ecx
movl 0x42d2e2(%rip), %eax    # 0x488960
shll %cl, %eax
movl %eax, 0x42d2da(%rip)    # 0x488960
movl -0x18(%rbp), %ecx
addl $0xc, %ecx
movl 0x3f3f0a(%rip), %eax    # 0x44f59c
shll %cl, %eax
movl %eax, 0x3f3f02(%rip)    # 0x44f59c
movl -0x18(%rbp), %ecx
movl 0x3f3f01(%rip), %eax    # 0x44f5a4
shll %cl, %eax
movl %eax, 0x3f3ef9(%rip)    # 0x44f5a4
movl -0x18(%rbp), %ecx
movl 0x42d2b0(%rip), %eax    # 0x488964
shll %cl, %eax
movl %eax, 0x42d2a8(%rip)    # 0x488964
movzbl -0xd(%rbp), %eax
cmpl $0x0, %eax
jne 0x5b6fb
movq -0x88(%rbp), %rax
movzbl 0x16(%rax), %eax
shll $0x18, %eax
addl 0x3f3ebf(%rip), %eax    # 0x44f598
movl %eax, 0x3f3eb9(%rip)    # 0x44f598
movq -0x88(%rbp), %rax
movzbl 0x17(%rax), %eax
shll $0x18, %eax
addl 0x3f3ea9(%rip), %eax    # 0x44f59c
movl %eax, 0x3f3ea3(%rip)    # 0x44f59c
jmp 0x5b72f
movq -0x88(%rbp), %rax
movzbl 0x1e(%rax), %eax
shll $0x18, %eax
addl 0x3f3e89(%rip), %eax    # 0x44f598
movl %eax, 0x3f3e83(%rip)    # 0x44f598
movq -0x88(%rbp), %rax
movzbl 0x1f(%rax), %eax
shll $0x18, %eax
addl 0x3f3e73(%rip), %eax    # 0x44f59c
movl %eax, 0x3f3e6d(%rip)    # 0x44f59c
movl 0x42d217(%rip), %ecx    # 0x48894c
sarl $0xd, %ecx
xorl %eax, %eax
subl %ecx, %eax
movl %eax, 0x3f6272(%rip)    # 0x4519b4
movl 0x3b0158(%rip), %eax    # 0x40b8a0
movl %eax, 0x3f3e42(%rip)    # 0x44f590
movq -0x88(%rbp), %rax
movzbl 0x20(%rax), %eax
cmpl $0x0, %eax
je 0x5b780
movl 0x3f3e2c(%rip), %edi    # 0x44f590
movq -0x88(%rbp), %rax
movzbl 0x20(%rax), %eax
addl $0x10, %eax
movzbl %al, %esi
callq 0x44ff0
movl %eax, 0x3f3e10(%rip)    # 0x44f590
movl 0x3f3e0a(%rip), %edi    # 0x44f590
movl -0x40(%rbp), %esi
callq 0x5ec50
movl %eax, 0x3f3dfc(%rip)    # 0x44f590
movl 0x3f3df6(%rip), %edi    # 0x44f590
movl 0x3b00f4(%rip), %esi    # 0x40b894
callq 0x39010
movl %eax, 0x3f3de5(%rip)    # 0x44f590
movswq 0x3ef5bd(%rip), %rcx    # 0x44ad70
leaq 0x3f3df6(%rip), %rax    # 0x44f5b0
movzbl (%rax,%rcx), %edi
andl $0xf, %edi
movswq 0x3ef5a7(%rip), %rcx    # 0x44ad70
leaq 0x3f3de0(%rip), %rax    # 0x44f5b0
movzbl (%rax,%rcx), %eax
sarl $0x4, %eax
shll $0x8, %eax
addl %eax, %edi
movswq 0x3ef58c(%rip), %rcx    # 0x44ad70
leaq 0x37a655(%rip), %rax    # 0x3d5e40
movq (%rax,%rcx,8), %rsi
xorl %edx, %edx
subl 0x3f628d(%rip), %edx    # 0x451a84
callq 0xa7710
movl 0x42d14a(%rip), %eax    # 0x48894c
sarl $0x10, %eax
movl %eax, -0x1c(%rbp)
movl $0x167c, %eax           # imm = 0x167C
subl 0x25cde1(%rip), %eax    # 0x2b85f4
cmpl $0x0, %eax
jle 0x5b81a
jmp 0x5b839
leaq 0x57cfd(%rip), %rdi     # 0xb351e
leaq 0x57718(%rip), %rsi     # 0xb2f40
movl $0x88e, %edx            # imm = 0x88E
leaq 0x57d0a(%rip), %rcx     # 0xb353e
callq 0x61a0
movl 0x42d129(%rip), %edi    # 0x488968
movl 0x25cdb3(%rip), %esi    # 0x2b85f8
callq 0x39010
movl %eax, -0x50(%rbp)
cmpl $0x0, -0x50(%rbp)
jle 0x5b85c
movl $0x20000, -0x4c(%rbp)   # imm = 0x20000
jmp 0x5b86d
movl $0x167c, %eax           # imm = 0x167C
subl 0x25cd8d(%rip), %eax    # 0x2b85f4
shll $0xf, %eax
movl %eax, -0x4c(%rbp)
movzbl -0xd(%rbp), %eax
cmpl $0x0, %eax
jne 0x5b88a
movslq -0x4(%rbp), %rcx
leaq 0x3b3f6f(%rip), %rax    # 0x40f7f0
movswl (%rax,%rcx,2), %eax
movl %eax, -0x38(%rbp)
jmp 0x5b8e1
movslq -0x4(%rbp), %rcx
leaq 0x3b3f5b(%rip), %rax    # 0x40f7f0
movswl (%rax,%rcx,2), %eax
movslq -0x4(%rbp), %rdx
leaq 0x42b9ac(%rip), %rcx    # 0x487250
movswl (%rcx,%rdx,2), %ecx
cmpl %ecx, %eax
jle 0x5b8c3
movslq -0x4(%rbp), %rcx
leaq 0x3b3f39(%rip), %rax    # 0x40f7f0
movswl (%rax,%rcx,2), %eax
movl %eax, -0xa0(%rbp)
jmp 0x5b8d8
movslq -0x4(%rbp), %rcx
leaq 0x42b982(%rip), %rax    # 0x487250
movswl (%rax,%rcx,2), %eax
movl %eax, -0xa0(%rbp)
movl -0xa0(%rbp), %eax
movl %eax, -0x38(%rbp)
movl -0x38(%rbp), %edi
movl 0x42d062(%rip), %esi    # 0x48894c
callq 0x39010
movl 0x42d067(%rip), %ecx    # 0x48895c
sarl $0x6, %ecx
addl %ecx, %eax
movl %eax, -0x54(%rbp)
cmpl $0x0, 0x42d048(%rip)    # 0x48894c
jle 0x5b917
movl 0x42d040(%rip), %eax    # 0x48894c
sarl $0x10, %eax
addl -0x54(%rbp), %eax
movl %eax, -0x54(%rbp)
jmp 0x5b928
movl 0x42d02f(%rip), %ecx    # 0x48894c
sarl $0x10, %ecx
movl -0x54(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x54(%rbp)
movl -0x54(%rbp), %eax
addl -0x1c(%rbp), %eax
movl %eax, -0x58(%rbp)
movl -0x38(%rbp), %eax
movl -0x4c(%rbp), %ecx
sarl $0xf, %ecx
addl %ecx, %eax
movslq %eax, %rcx
leaq 0x41ae7a(%rip), %rax    # 0x4767c0
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0x60(%rbp)
movq -0x60(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x68(%rbp)
movl -0x38(%rbp), %eax
movl -0x4c(%rbp), %ecx
sarl $0xf, %ecx
addl %ecx, %eax
cmpl $0x0, %eax
jl 0x5b96f
jmp 0x5b98e
leaq 0x57bf4(%rip), %rdi     # 0xb356a
leaq 0x575c3(%rip), %rsi     # 0xb2f40
movl $0x899, %edx            # imm = 0x899
leaq 0x57bb5(%rip), %rcx     # 0xb353e
callq 0x61a0
movl -0x38(%rbp), %eax
movl -0x4c(%rbp), %ecx
sarl $0xf, %ecx
addl %ecx, %eax
cmpl $0x167e, %eax           # imm = 0x167E
jg 0x5b9a2
jmp 0x5b9c1
leaq 0x57bd6(%rip), %rdi     # 0xb357f
leaq 0x57590(%rip), %rsi     # 0xb2f40
movl $0x89a, %edx            # imm = 0x89A
leaq 0x57b82(%rip), %rcx     # 0xb353e
callq 0x61a0
movl -0x4(%rbp), %eax
movl %eax, -0x20(%rbp)
movl -0x20(%rbp), %eax
cmpl -0x8(%rbp), %eax
jg 0x5bdaa
movzbl -0xd(%rbp), %eax
cmpl $0x0, %eax
jne 0x5ba4a
movslq -0x20(%rbp), %rcx
leaq 0x3b3e09(%rip), %rax    # 0x40f7f0
movswl (%rax,%rcx,2), %eax
movl %eax, -0x38(%rbp)
movslq -0x20(%rbp), %rcx
leaq 0x3b5477(%rip), %rax    # 0x410e70
movswl (%rax,%rcx,2), %eax
movslq -0x20(%rbp), %rdx
leaq 0x42a1c8(%rip), %rcx    # 0x485bd0
movswl (%rcx,%rdx,2), %ecx
cmpl %ecx, %eax
jge 0x5ba27
movslq -0x20(%rbp), %rcx
leaq 0x3b5455(%rip), %rax    # 0x410e70
movswl (%rax,%rcx,2), %eax
movl %eax, -0xa4(%rbp)
jmp 0x5ba3c
movslq -0x20(%rbp), %rcx
leaq 0x42a19e(%rip), %rax    # 0x485bd0
movswl (%rax,%rcx,2), %eax
movl %eax, -0xa4(%rbp)
movl -0xa4(%rbp), %eax
subl $0x1, %eax
movl %eax, -0x3c(%rbp)
jmp 0x5bab6
movslq -0x20(%rbp), %rcx
leaq 0x3b3d9b(%rip), %rax    # 0x40f7f0
movswl (%rax,%rcx,2), %eax
movslq -0x20(%rbp), %rdx
leaq 0x42b7ec(%rip), %rcx    # 0x487250
movswl (%rcx,%rdx,2), %ecx
cmpl %ecx, %eax
jle 0x5ba83
movslq -0x20(%rbp), %rcx
leaq 0x3b3d79(%rip), %rax    # 0x40f7f0
movswl (%rax,%rcx,2), %eax
movl %eax, -0xa8(%rbp)
jmp 0x5ba98
movslq -0x20(%rbp), %rcx
leaq 0x42b7c2(%rip), %rax    # 0x487250
movswl (%rax,%rcx,2), %eax
movl %eax, -0xa8(%rbp)
movl -0xa8(%rbp), %eax
movl %eax, -0x38(%rbp)
movslq -0x20(%rbp), %rcx
leaq 0x3b53c4(%rip), %rax    # 0x410e70
movswl (%rax,%rcx,2), %eax
subl $0x1, %eax
movl %eax, -0x3c(%rbp)
movl -0x38(%rbp), %eax
cmpl -0x3c(%rbp), %eax
jg 0x5bd5d
movl -0x38(%rbp), %eax
movl -0x4c(%rbp), %ecx
sarl $0xf, %ecx
addl %ecx, %eax
cmpl $0x0, %eax
jl 0x5bad4
jmp 0x5baf3
leaq 0x57a8f(%rip), %rdi     # 0xb356a
leaq 0x5745e(%rip), %rsi     # 0xb2f40
movl $0x8a2, %edx            # imm = 0x8A2
leaq 0x57a50(%rip), %rcx     # 0xb353e
callq 0x61a0
movl -0x38(%rbp), %eax
movl -0x4c(%rbp), %ecx
sarl $0xf, %ecx
addl %ecx, %eax
cmpl $0x167f, %eax           # imm = 0x167F
jg 0x5bb07
jmp 0x5bb26
leaq 0x57a95(%rip), %rdi     # 0xb35a3
leaq 0x5742b(%rip), %rsi     # 0xb2f40
movl $0x8a3, %edx            # imm = 0x8A3
leaq 0x57a1d(%rip), %rcx     # 0xb353e
callq 0x61a0
movl -0x3c(%rbp), %eax
movl -0x4c(%rbp), %ecx
sarl $0xf, %ecx
addl %ecx, %eax
cmpl $0x0, %eax
jl 0x5bb38
jmp 0x5bb57
leaq 0x57a88(%rip), %rdi     # 0xb35c7
leaq 0x573fa(%rip), %rsi     # 0xb2f40
movl $0x8a4, %edx            # imm = 0x8A4
leaq 0x579ec(%rip), %rcx     # 0xb353e
callq 0x61a0
movl -0x3c(%rbp), %eax
movl -0x4c(%rbp), %ecx
sarl $0xf, %ecx
addl %ecx, %eax
cmpl $0x167f, %eax           # imm = 0x167F
jg 0x5bb6b
jmp 0x5bb8a
leaq 0x57a6a(%rip), %rdi     # 0xb35dc
leaq 0x573c7(%rip), %rsi     # 0xb2f40
movl $0x8a5, %edx            # imm = 0x8A5
leaq 0x579b9(%rip), %rcx     # 0xb353e
callq 0x61a0
movl -0x38(%rbp), %eax
movl -0x4c(%rbp), %ecx
sarl $0xf, %ecx
addl %ecx, %eax
movslq %eax, %rcx
leaq 0x41ac21(%rip), %rax    # 0x4767c0
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0x70(%rbp)
movl -0x3c(%rbp), %eax
movl -0x4c(%rbp), %ecx
sarl $0xf, %ecx
addl %ecx, %eax
movslq %eax, %rcx
leaq 0x41ac01(%rip), %rax    # 0x4767c0
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0x78(%rbp)
movq -0x70(%rbp), %rax
cmpq -0x60(%rbp), %rax
ja 0x5bc3d
movslq 0x3ef189(%rip), %rcx    # 0x44ad64
leaq 0x379a5e(%rip), %rax    # 0x3d5640
movq (%rax,%rcx,8), %rax
movq %rax, -0xb0(%rbp)
movl -0x54(%rbp), %edi
callq 0x37520
movl %eax, %edi
movl 0x3f3993(%rip), %esi    # 0x44f590
callq 0x3c8b0
movl %eax, %edi
movl 0x3f3982(%rip), %esi    # 0x44f58c
callq 0x5ec70
movq -0xb0(%rbp), %rcx
shll $0x8, %eax
cltq
addq %rax, %rcx
movq -0x60(%rbp), %rax
movq %rax, %rdx
addq $-0x8, %rdx
movq %rdx, -0x60(%rbp)
movq %rcx, (%rax)
movl -0x1c(%rbp), %ecx
movl -0x54(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x54(%rbp)
jmp 0x5bbca
jmp 0x5bc3f
movq -0x78(%rbp), %rax
cmpq -0x68(%rbp), %rax
jb 0x5bcb0
movslq 0x3ef114(%rip), %rcx    # 0x44ad64
leaq 0x3799e9(%rip), %rax    # 0x3d5640
movq (%rax,%rcx,8), %rax
movq %rax, -0xb8(%rbp)
movl -0x58(%rbp), %edi
callq 0x37520
movl %eax, %edi
movl 0x3f391e(%rip), %esi    # 0x44f590
callq 0x3c8b0
movl %eax, %edi
movl 0x3f390d(%rip), %esi    # 0x44f58c
callq 0x5ec70
movq -0xb8(%rbp), %rcx
shll $0x8, %eax
cltq
addq %rax, %rcx
movq -0x68(%rbp), %rax
movq %rax, %rdx
addq $0x8, %rdx
movq %rdx, -0x68(%rbp)
movq %rcx, (%rax)
movl -0x1c(%rbp), %eax
addl -0x58(%rbp), %eax
movl %eax, -0x58(%rbp)
jmp 0x5bc3f
movl 0x3f38ea(%rip), %eax    # 0x44f5a0
sarl $0xa, %eax
movl %eax, 0x42cc95(%rip)    # 0x488954
movl 0x3f38df(%rip), %eax    # 0x44f5a4
sarl $0xa, %eax
movl %eax, 0x42cc8a(%rip)    # 0x488958
movl -0x3c(%rbp), %edi
movl 0x42cc75(%rip), %esi    # 0x48894c
callq 0x39010
movl 0x42cc7a(%rip), %ecx    # 0x48895c
sarl $0x6, %ecx
addl %ecx, %eax
cltq
movq %rax, 0x3f5cd0(%rip)    # 0x4519c0
movslq -0x3c(%rbp), %rcx
leaq 0x3f5d85(%rip), %rax    # 0x451a80
movl (%rax,%rcx,4), %eax
addl -0x20(%rbp), %eax
cltq
addq 0x3b67e6(%rip), %rax    # 0x4124f0
movq %rax, -0xc0(%rbp)
movq 0x3f5ca8(%rip), %rax    # 0x4519c0
movl %eax, %edi
sarl $0x3, %edi
callq 0x37520
movq -0xc0(%rbp), %rdi
movl %eax, %esi
movq -0x78(%rbp), %rdx
movl -0x3c(%rbp), %ecx
subl -0x38(%rbp), %ecx
addl $0x1, %ecx
movl 0x3f3859(%rip), %r8d    # 0x44f598
movl 0x3f3856(%rip), %r9d    # 0x44f59c
callq 0xa7750
movl -0x20(%rbp), %eax
andl $0xf, %eax
cmpl $0x0, %eax
jne 0x5bd5b
callq 0xc220
jmp 0x5bd5d
movl 0x42cbfd(%rip), %eax    # 0x488960
addl 0x3f3837(%rip), %eax    # 0x44f5a0
movl %eax, 0x3f3831(%rip)    # 0x44f5a0
movl 0x42cbef(%rip), %eax    # 0x488964
addl 0x3f3829(%rip), %eax    # 0x44f5a4
movl %eax, 0x3f3823(%rip)    # 0x44f5a4
movl 0x42cbe1(%rip), %eax    # 0x488968
addl 0x42cbcf(%rip), %eax    # 0x48895c
movl %eax, 0x42cbc9(%rip)    # 0x48895c
movl -0x50(%rbp), %eax
addl -0x4c(%rbp), %eax
movl %eax, -0x4c(%rbp)
movl -0x20(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x20(%rbp)
jmp 0x5b9c7
addq $0xc0, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)