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

; File Name   :	u:\work\dd0c16ee19d8ae29ddc550ef5bc82e81_unpacked.exe
; Format      :	Portable executable for	80386 (PE)
; Imagebase   :	400000
; Section 1. (virtual address 00001000)
; Virtual size			: 00005BFE (  23550.)
; Section size in file		: 00005C00 (  23552.)
; Offset to raw	data for section: 00000400
; Flags	60000020: Text Executable Readable
; Alignment	: default

		.686p
		.mmx
		.model flat

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

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

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

; Attributes: bp-based frame

; int __stdcall	sub_401000(HWND	hWnd,UINT hDC,WPARAM wParam,LPARAM ho)

sub_401000	proc near		; DATA XREF: sub_403542+17Ao

Paint		= tagPAINTSTRUCT ptr -5Ch
rc		= tagRECT ptr -1Ch
plbrush		= LOGBRUSH ptr -0Ch
hWnd		= dword	ptr  8
hDC		= dword	ptr  0Ch
wParam		= dword	ptr  10h
ho		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		sub	esp, 5Ch
		cmp	[ebp+hDC], 0Fh
		jz	short loc_401037
		cmp	[ebp+hDC], 46h
		mov	eax, [ebp+ho]
		jnz	short loc_401022
		or	dword ptr [eax+18h], 10h
		mov	ecx, dword_42F424
		mov	[eax+4], ecx

loc_401022:				; CODE XREF: sub_401000+13j
		push	eax		; lParam
		push	[ebp+wParam]	; wParam
		push	[ebp+hDC]	; Msg
		push	[ebp+hWnd]	; hWnd
		call	ds:DefWindowProcA	; DefWindowProcA
		jmp	locret_401179
; ---------------------------------------------------------------------------

loc_401037:				; CODE XREF: sub_401000+Aj
		push	ebx
		push	esi
		mov	esi, dword_42F428
		lea	eax, [ebp+Paint]
		push	edi
		push	eax		; lpPaint
		push	[ebp+hWnd]	; hWnd
		call	ds:BeginPaint	; BeginPaint
		and	[ebp+plbrush.lbStyle], 0
		mov	[ebp+hDC], eax
		lea	eax, [ebp+rc]
		push	eax		; lpRect
		push	[ebp+hWnd]	; hWnd
		call	ds:GetClientRect	; GetClientRect
		mov	edi, [ebp+rc.bottom]
		and	[ebp+rc.bottom], 0
		mov	ebx, ds:DeleteObject
		jmp	loc_4010F3
; ---------------------------------------------------------------------------

loc_401073:				; CODE XREF: sub_401000+F6j
		movzx	eax, byte ptr [esi+52h]
		movzx	edx, byte ptr [esi+56h]
		imul	edx, [ebp+rc.top]
		mov	ecx, edi
		sub	ecx, [ebp+rc.top]
		imul	eax, ecx
		add	eax, edx
		mov	[ebp+wParam], ecx
		cdq
		idiv	edi
		xor	edx, edx
		mov	dh, al
		movzx	eax, byte ptr [esi+51h]
		imul	eax, ecx
		movzx	ecx, byte ptr [esi+55h]
		imul	ecx, [ebp+rc.top]
		add	eax, ecx
		mov	ecx, edx
		cdq
		idiv	edi
		movzx	edx, byte ptr [esi+54h]
		imul	edx, [ebp+rc.top]
		mov	cl, al
		movzx	eax, byte ptr [esi+50h]
		imul	eax, [ebp+wParam]
		add	eax, edx
		cdq
		idiv	edi
		shl	ecx, 8
		movzx	eax, al
		or	ecx, eax
		lea	eax, [ebp+plbrush]
		push	eax		; plbrush
		mov	[ebp+plbrush.lbColor], ecx
		call	ds:CreateBrushIndirect	; CreateBrushIndirect
		add	[ebp+rc.bottom], 4
		mov	[ebp+ho], eax
		push	eax		; hbr
		lea	eax, [ebp+rc]
		push	eax		; lprc
		push	[ebp+hDC]	; hDC
		call	ds:FillRect	; FillRect
		push	[ebp+ho]	; ho
		call	ebx ; DeleteObject
		add	[ebp+rc.top], 4

loc_4010F3:				; CODE XREF: sub_401000+6Ej
		cmp	[ebp+rc.top], edi
		jl	loc_401073
		cmp	dword ptr [esi+58h], 0FFFFFFFFh
		jz	short loc_401167
		push	dword ptr [esi+34h] ; lplf
		call	ds:CreateFontIndirectA	; CreateFontIndirectA
		test	eax, eax
		mov	[ebp+ho], eax
		jz	short loc_401167
		mov	edi, [ebp+hDC]
		push	1		; mode
		push	edi		; hdc
		mov	[ebp+rc.left], 10h
		mov	[ebp+rc.top], 8
		call	ds:SetBkMode	; SetBkMode
		push	dword ptr [esi+58h] ; color
		push	edi		; hdc
		call	ds:SetTextColor	; SetTextColor
		push	[ebp+ho]	; h
		mov	esi, ds:SelectObject
		push	edi		; hdc
		call	esi ; SelectObject
		mov	[ebp+hDC], eax
		lea	eax, [ebp+rc]
		push	820h		; format
		push	eax		; lprc
		push	0FFFFFFFFh	; cchText
		push	offset Caption	; lpchText
		push	edi		; hdc
		call	ds:DrawTextA	; DrawTextA
		push	[ebp+hDC]	; h
		push	edi		; hdc
		call	esi ; SelectObject
		push	[ebp+ho]	; ho
		call	ebx ; DeleteObject

loc_401167:				; CODE XREF: sub_401000+100j
					; sub_401000+110j
		lea	eax, [ebp+Paint]
		push	eax		; lpPaint
		push	[ebp+hWnd]	; hWnd
		call	ds:EndPaint	; EndPaint
		pop	edi
		pop	esi
		xor	eax, eax
		pop	ebx

locret_401179:				; CODE XREF: sub_401000+32j
		leave
		retn	10h
sub_401000	endp


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



sub_40117D	proc near		; CODE XREF: sub_401439+1464p
					; sub_4046C3+314p

arg_0		= dword	ptr  4

		mov	ecx, [esp+arg_0]
		mov	eax, dword_42F448
		mov	edx, ecx
		push	ebx
		imul	edx, 418h
		push	esi
		push	edi
		mov	edx, [edx+eax+8]
		test	dl, 2
		jz	short loc_4011E9
		lea	esi, [ecx+1]
		xor	edi, edi
		cmp	esi, dword_42F44C
		jnb	short loc_4011E9
		mov	ecx, esi
		imul	ecx, 418h
		lea	eax, [ecx+eax+8]

loc_4011B3:				; CODE XREF: sub_40117D+6Aj
		mov	ecx, [eax]
		test	cl, 2
		jz	short loc_4011BD
		inc	edi
		jmp	short loc_4011DB
; ---------------------------------------------------------------------------

loc_4011BD:				; CODE XREF: sub_40117D+3Bj
		test	cl, 4
		jz	short loc_4011CB
		mov	ecx, edi
		dec	edi
		test	ecx, ecx
		jz	short loc_4011E9
		jmp	short loc_4011DB
; ---------------------------------------------------------------------------

loc_4011CB:				; CODE XREF: sub_40117D+43j
		test	cl, 10h
		jnz	short loc_4011DB
		mov	ebx, ecx
		xor	ebx, edx
		and	ebx, 1
		xor	ebx, ecx
		mov	[eax], ebx

loc_4011DB:				; CODE XREF: sub_40117D+3Ej
					; sub_40117D+4Cj ...
		inc	esi
		add	eax, 418h
		cmp	esi, dword_42F44C
		jb	short loc_4011B3

loc_4011E9:				; CODE XREF: sub_40117D+1Bj
					; sub_40117D+28j ...
		pop	edi
		pop	esi
		pop	ebx
		retn	4
sub_40117D	endp


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

; Attributes: bp-based frame


sub_4011EF	proc near		; CODE XREF: sub_4011EF+56p
					; sub_401439+148Fp ...

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
		push	ecx
		push	ecx
		mov	edx, [ebp+arg_0]
		push	ebx
		push	esi
		mov	esi, edx
		imul	esi, 418h
		mov	ebx, dword_42F448
		xor	ecx, ecx
		add	esi, ebx
		push	edi
		mov	[ebp+var_4], ecx
		mov	[ebp+var_8], ecx
		mov	eax, [esi+8]
		test	al, 2
		jz	short loc_401224
		cmp	[ebp+arg_4], ecx
		jz	short loc_401224
		and	al, 0BEh
		inc	edx
		mov	[esi+8], eax

loc_401224:				; CODE XREF: sub_4011EF+28j
					; sub_4011EF+2Dj
		cmp	edx, dword_42F44C
		jnb	short loc_401270

loc_40122C:				; CODE XREF: sub_4011EF+7Fj
		mov	eax, edx
		imul	eax, 418h
		lea	edi, [eax+ebx+8]
		lea	eax, [edx+1]
		mov	ecx, [edi]
		test	cl, 2
		jz	short loc_40124C
		push	1
		push	edx
		call	sub_4011EF
		mov	ecx, [edi]

loc_40124C:				; CODE XREF: sub_4011EF+51j
		test	cl, 4
		jnz	short loc_401279
		test	cl, 40h
		jz	short loc_401259
		inc	[ebp+var_4]

loc_401259:				; CODE XREF: sub_4011EF+65j
		test	cl, 1
		jz	short loc_401263
		inc	[ebp+var_4]
		jmp	short loc_401266
; ---------------------------------------------------------------------------

loc_401263:				; CODE XREF: sub_4011EF+6Dj
		inc	[ebp+var_8]

loc_401266:				; CODE XREF: sub_4011EF+72j
		cmp	eax, dword_42F44C
		mov	edx, eax
		jb	short loc_40122C

loc_401270:				; CODE XREF: sub_4011EF+3Bj
		xor	eax, eax

loc_401272:				; CODE XREF: sub_4011EF+8Ej
					; sub_4011EF+9Aj ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	8
; ---------------------------------------------------------------------------

loc_401279:				; CODE XREF: sub_4011EF+60j
		cmp	[ebp+var_4], 0
		jz	short loc_401272
		cmp	[ebp+var_8], 0
		jz	short loc_40128B
		or	dword ptr [esi+8], 40h
		jmp	short loc_401272
; ---------------------------------------------------------------------------

loc_40128B:				; CODE XREF: sub_4011EF+94j
		mov	ecx, [esi+8]
		and	cl, 7Fh
		or	ecx, 1
		mov	[esi+8], ecx
		jmp	short loc_401272
sub_4011EF	endp


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



sub_401299	proc near		; CODE XREF: sub_401439+1488p
					; sub_4046C3+3E1p ...

arg_0		= dword	ptr  4

		mov	ecx, [esp+arg_0]
		mov	eax, dword_42F448
		push	esi
		xor	esi, esi
		cmp	ecx, 20h
		jnb	short loc_4012DE
		cmp	dword_42F44C, esi
		jbe	short loc_4012DE
		lea	edx, [eax+8]
		push	edi

loc_4012B6:				; CODE XREF: sub_401299+42j
		mov	eax, [edx]
		test	al, 6
		jnz	short loc_4012CE
		xor	edi, edi
		inc	edi
		shl	edi, cl
		test	[edx-4], edi
		jz	short loc_4012CA
		or	al, 1
		jmp	short loc_4012CC
; ---------------------------------------------------------------------------

loc_4012CA:				; CODE XREF: sub_401299+2Bj
		and	al, 0FEh

loc_4012CC:				; CODE XREF: sub_401299+2Fj
		mov	[edx], eax

loc_4012CE:				; CODE XREF: sub_401299+21j
		inc	esi
		add	edx, 418h
		cmp	esi, dword_42F44C
		jb	short loc_4012B6
		pop	edi

loc_4012DE:				; CODE XREF: sub_401299+Fj
					; sub_401299+17j
		pop	esi
		retn	4
sub_401299	endp


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

; Attributes: bp-based frame


sub_4012E2	proc near		; CODE XREF: sub_401439+1497p
					; sub_4046C3+47Ep

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

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		mov	eax, dword_42F428
		and	[ebp+var_4], 0
		push	ebx
		push	esi
		add	eax, 94h
		push	edi
		mov	edi, dword_42F44C
		mov	[ebp+var_8], eax

loc_401302:				; CODE XREF: sub_4012E2+7Fj
		mov	eax, [ebp+var_8]
		xor	ebx, ebx
		cmp	[eax], ebx
		jz	short loc_401356
		cmp	ebx, edi
		jnb	short loc_401354
		mov	esi, dword_42F448
		add	esi, 8

loc_401318:				; CODE XREF: sub_4012E2+6Ej
		mov	edx, [esi]
		test	dl, 6
		jnz	short loc_401347
		mov	eax, [ebp+arg_0]
		test	eax, eax
		jz	short loc_40132C
		cmp	dword ptr [eax+ebx*4], 0
		jz	short loc_401347

loc_40132C:				; CODE XREF: sub_4012E2+42j
		mov	ecx, [ebp+var_4]
		xor	eax, eax
		inc	eax
		and	edx, 1
		shl	eax, cl
		mov	ecx, [esi-4]
		and	ecx, eax
		mov	eax, ecx
		mov	ecx, [ebp+var_4]
		shl	edx, cl
		cmp	eax, edx
		jnz	short loc_401352

loc_401347:				; CODE XREF: sub_4012E2+3Bj
					; sub_4012E2+48j
		inc	ebx
		add	esi, 418h
		cmp	ebx, edi
		jb	short loc_401318

loc_401352:				; CODE XREF: sub_4012E2+63j
		cmp	ebx, edi

loc_401354:				; CODE XREF: sub_4012E2+2Bj
		jz	short loc_401363

loc_401356:				; CODE XREF: sub_4012E2+27j
		inc	[ebp+var_4]
		add	[ebp+var_8], 4
		cmp	[ebp+var_4], 20h
		jb	short loc_401302

loc_401363:				; CODE XREF: sub_4012E2:loc_401354j
		mov	eax, [ebp+var_4]
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_4012E2	endp


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


; int __stdcall	sub_40136D(int,HWND hWnd)

sub_40136D	proc near		; CODE XREF: sub_401410+10p
					; sub_401439+99p ...

arg_0		= dword	ptr  4
hWnd		= dword	ptr  8

		push	esi
		mov	esi, [esp+4+arg_0]
		jmp	loc_4013FB
; ---------------------------------------------------------------------------

loc_401377:				; CODE XREF: sub_40136D+90j
		mov	eax, esi
		mov	ecx, dword_42F450
		imul	eax, 1Ch
		add	eax, ecx
		cmp	dword ptr [eax], 1
		jz	short loc_401403
		push	eax		; FilePart
		call	sub_401439
		cmp	eax, 7FFFFFFFh
		jz	short loc_401409
		test	eax, eax
		jge	short loc_4013AD
		inc	eax
		mov	ecx, offset dword_430000
		shl	eax, 0Ah
		sub	ecx, eax
		push	ecx
		call	sub_405952
		test	eax, eax

loc_4013AD:				; CODE XREF: sub_40136D+2Bj
		jnz	short loc_4013B5
		xor	eax, eax
		inc	eax
		inc	esi
		jmp	short loc_4013BC
; ---------------------------------------------------------------------------

loc_4013B5:				; CODE XREF: sub_40136D:loc_4013ADj
		dec	eax
		mov	ecx, esi
		mov	esi, eax
		sub	eax, ecx

loc_4013BC:				; CODE XREF: sub_40136D+46j
		cmp	[esp+4+hWnd], 0
		jz	short loc_4013FB
		add	nNumber, eax
		mov	eax, dword_42EBF4
		xor	ecx, ecx
		push	0		; lParam
		test	eax, eax
		setz	cl
		add	ecx, eax
		push	ecx		; nDenominator
		push	7530h		; nNumerator
		push	nNumber		; nNumber
		call	ds:MulDiv	; MulDiv
		push	eax		; wParam
		push	402h		; Msg
		push	[esp+10h+hWnd]	; hWnd
		call	ds:SendMessageA	; SendMessageA

loc_4013FB:				; CODE XREF: sub_40136D+5j
					; sub_40136D+54j
		test	esi, esi
		jge	loc_401377

loc_401403:				; CODE XREF: sub_40136D+1Aj
		xor	eax, eax

loc_401405:				; CODE XREF: sub_40136D+A1j
		pop	esi
		retn	8
; ---------------------------------------------------------------------------

loc_401409:				; CODE XREF: sub_40136D+27j
		mov	eax, 7FFFFFFFh
		jmp	short loc_401405
sub_40136D	endp


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



sub_401410	proc near		; CODE XREF: start+39Ap
					; sub_403542+1ECp ...

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		mov	ecx, dword_42F428
		push	0		; hWnd
		push	dword ptr [ecx+eax*4+6Ch] ; int
		call	sub_40136D
		retn	4
sub_401410	endp


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



sub_401428	proc near		; CODE XREF: sub_401439+1FEp
					; sub_401439+A2Cp ...

arg_0		= dword	ptr  4

		push	offset String1	; lpString2
		push	[esp+4+arg_0]	; int
		call	sub_404D7E
		retn	4
sub_401428	endp


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

; Attributes: bp-based frame

; int __stdcall	sub_401439(LPCSTR FilePart)

sub_401439	proc near		; CODE XREF: sub_40136D+1Dp

FindFileData	= _WIN32_FIND_DATAA ptr	-1A4h
FileOp		= _SHFILEOPSTRUCTA ptr -64h
lpValueName	= dword	ptr -44h
ExitCode	= tagRECT ptr -40h
lpMultiByteStr	= dword	ptr -30h
nNumberOfBytesToWrite= dword ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
dwFileAttributes= dword	ptr -20h
nDenominator	= dword	ptr -1Ch
nShowCmd	= FILETIME ptr -18h
lpString2	= dword	ptr -10h
Buffer		= byte ptr -9
lpString	= dword	ptr -8
var_4		= dword	ptr -4
FilePart	= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 1A4h
		mov	eax, dword_42F424
		push	ebx
		push	esi
		mov	esi, [ebp+FilePart]
		push	edi
		push	7
		pop	ecx
		lea	edi, [ebp+var_28]
		mov	[ebp+lpString],	eax
		xor	ebx, ebx
		rep movsd
		mov	eax, [ebp+var_24]
		mov	edi, [ebp+dwFileAttributes]
		mov	esi, eax
		mov	ecx, offset dword_430000
		shl	esi, 0Ah
		shl	edi, 0Ah
		add	esi, ecx
		add	edi, ecx
		lea	ecx, [ebp+var_24]
		mov	[ebp+var_4], ebx
		mov	dword_40943C, ecx
		mov	ecx, [ebp+var_28]
		add	ecx, 0FFFFFFFEh	; switch 66 cases
		cmp	ecx, 41h
		ja	loc_40292F	; default
					; jumptable 0040148C cases 65,66
		jmp	ds:off_402941[ecx*4] ; switch jump

loc_401493:				; DATA XREF: .text:off_402941o
		push	ebx		; jumptable 0040148C case 3
		push	eax		; int

loc_401495:				; CODE XREF: sub_401439+471j
		call	sub_404D7E
		jmp	loc_402293
; ---------------------------------------------------------------------------

loc_40149F:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		inc	dword_42EBEC	; jumptable 0040148C case 4
		cmp	[ebp+lpString],	ebx
		jz	loc_402293
		push	ebx		; nExitCode
		call	ds:PostQuitMessage	; PostQuitMessage
		jmp	loc_402293
; ---------------------------------------------------------------------------

loc_4014BA:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		cmp	eax, ebx	; jumptable 0040148C case 5
		jge	short loc_4014CF
		inc	eax
		mov	ecx, offset dword_430000
		shl	eax, 0Ah
		sub	ecx, eax
		push	ecx
		call	sub_405952

loc_4014CF:				; CODE XREF: sub_401439+83j
		dec	eax
		push	ebx		; hWnd
		push	eax		; int
		call	sub_40136D
		jmp	loc_40293A	; jumptable 0040148C case 2
; ---------------------------------------------------------------------------

loc_4014DC:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		mov	ecx, [ebp+dwFileAttributes] ; jumptable	0040148C case 6
		cmp	ecx, ebx
		jz	short loc_40150C
		test	cl, 8
		jz	short loc_4014F7
		mov	eax, dword_40900C
		mov	dword_4092A0, eax
		jmp	loc_40292F	; default
					; jumptable 0040148C cases 65,66
; ---------------------------------------------------------------------------

loc_4014F7:				; CODE XREF: sub_401439+ADj
		mov	eax, dword_4092A0
		mov	dword_4092A0, ecx
		mov	dword_40900C, eax
		jmp	loc_40292F	; default
					; jumptable 0040148C cases 65,66
; ---------------------------------------------------------------------------

loc_40150C:				; CODE XREF: sub_401439+A8j
		push	ebx		; lpString2
		push	eax		; int
		call	sub_404D7E
		jmp	loc_40292F	; default
					; jumptable 0040148C cases 65,66
; ---------------------------------------------------------------------------

loc_401518:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		push	ebx		; jumptable 0040148C case 7
		call	sub_402A7D
		cmp	eax, 1
		jg	short loc_401526
		xor	eax, eax
		inc	eax

loc_401526:				; CODE XREF: sub_401439+E8j
		push	eax		; dwMilliseconds
		call	ds:Sleep	; Sleep
		jmp	loc_40292F	; default
					; jumptable 0040148C cases 65,66
; ---------------------------------------------------------------------------

loc_401532:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		push	[ebp+lpString]	; jumptable 0040148C case 8
		call	ds:SetForegroundWindow	; SetForegroundWindow
		jmp	loc_40292F	; default
					; jumptable 0040148C cases 65,66
; ---------------------------------------------------------------------------

loc_401540:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		push	1		; jumptable 0040148C case 13
		call	sub_402A7D
		mov	ecx, [ebp+var_24]
		mov	dword_42F4A0[ecx*4], eax
		jmp	loc_40292F	; default
					; jumptable 0040148C cases 65,66
; ---------------------------------------------------------------------------

loc_401556:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		mov	eax, [ebp+nDenominator]	; jumptable 0040148C case 14
		lea	esi, ds:42F4A0h[eax*4]
		xor	eax, eax
		mov	ecx, [esi]
		cmp	ecx, ebx
		setz	al
		and	ecx, [ebp+nShowCmd.dwLowDateTime]
		mov	eax, [ebp+eax*4+var_24]
		mov	[esi], ecx
		jmp	loc_40293A	; jumptable 0040148C case 2
; ---------------------------------------------------------------------------

loc_401577:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		mov	eax, [ebp+dwFileAttributes] ; jumptable	0040148C case 15
		push	dword_42F4A0[eax*4]

loc_401581:				; CODE XREF: sub_401439+712j
					; sub_401439+89Dj ...
		push	esi
		jmp	loc_4028D7
; ---------------------------------------------------------------------------

loc_401587:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		mov	ecx, hWnd	; jumptable 0040148C case 9
		mov	esi, ds:ShowWindow
		cmp	ecx, ebx
		jz	short loc_4015A0
		push	[ebp+dwFileAttributes] ; nCmdShow
		push	ecx		; hWnd
		call	esi ; ShowWindow
		mov	eax, [ebp+var_24]

loc_4015A0:				; CODE XREF: sub_401439+15Cj
		mov	ecx, dword_42EC04
		cmp	ecx, ebx
		jz	loc_40292F	; default
					; jumptable 0040148C cases 65,66
		push	eax		; nCmdShow
		push	ecx		; hWnd
		call	esi ; ShowWindow
		jmp	loc_40292F	; default
					; jumptable 0040148C cases 65,66
; ---------------------------------------------------------------------------

loc_4015B7:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		push	0FFFFFFF0h	; jumptable 0040148C case 10
		call	sub_402A9A
		push	[ebp+dwFileAttributes] ; dwFileAttributes
		push	eax		; lpFileName
		call	ds:SetFileAttributesA	; SetFileAttributesA

loc_4015C8:				; CODE XREF: sub_401439+35Fj
					; sub_401439+EACj ...
		test	eax, eax

loc_4015CA:				; CODE XREF: sub_401439+484j
					; sub_401439+120Bj
		jnz	loc_40292F	; default
					; jumptable 0040148C cases 65,66
		jmp	loc_4026DA
; ---------------------------------------------------------------------------

loc_4015D5:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		push	0FFFFFFF0h	; jumptable 0040148C case 11
		call	sub_402A9A
		mov	edi, eax
		push	edi		; lpsz
		call	sub_40557B
		cmp	[edi], bl
		mov	esi, eax
		jz	short loc_401630
		cmp	esi, ebx
		jz	short loc_401630

loc_4015EE:				; CODE XREF: sub_401439+1F5j
		push	5Ch		; char
		push	esi		; lpsz
		call	sub_405513
		mov	esi, eax
		push	ebx		; lpSecurityAttributes
		push	edi		; lpPathName
		mov	al, [esi]
		mov	[esi], bl
		mov	byte ptr [ebp+FilePart+3], al
		call	ds:CreateDirectoryA	; CreateDirectoryA
		test	eax, eax
		jnz	short loc_401626
		call	ds:GetLastError
		cmp	eax, 0B7h
		jnz	short loc_401623
		push	edi		; lpFileName
		call	ds:GetFileAttributesA	; GetFileAttributesA
		test	al, 10h
		jnz	short loc_401626

loc_401623:				; CODE XREF: sub_401439+1DDj
		inc	[ebp+var_4]

loc_401626:				; CODE XREF: sub_401439+1D0j
					; sub_401439+1E8j
		mov	al, byte ptr [ebp+FilePart+3]
		mov	[esi], al
		inc	esi
		cmp	al, bl
		jnz	short loc_4015EE

loc_401630:				; CODE XREF: sub_401439+1AFj
					; sub_401439+1B3j
		cmp	[ebp+dwFileAttributes],	ebx
		jz	short loc_401653
		push	0FFFFFFE6h
		call	sub_401428
		push	edi		; lpString2
		push	offset CurrentDirectory	; lpString1
		call	sub_4059DB
		push	edi		; lpPathName
		call	ds:SetCurrentDirectoryA	; SetCurrentDirectoryA
		jmp	loc_40292F	; default
					; jumptable 0040148C cases 65,66
; ---------------------------------------------------------------------------

loc_401653:				; CODE XREF: sub_401439+1FAj
		push	0FFFFFFF5h
		jmp	loc_4021E8
; ---------------------------------------------------------------------------

loc_40165A:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		push	ebx		; jumptable 0040148C case 12
		call	sub_402A9A
		push	eax		; lpFileName
		call	sub_405CB0
		jmp	loc_401CE8
; ---------------------------------------------------------------------------

loc_40166B:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		push	0FFFFFFD0h	; jumptable 0040148C case 16
		call	sub_402A9A
		push	0FFFFFFDFh
		mov	[ebp+FilePart],	eax
		call	sub_402A9A
		push	[ebp+FilePart]	; lpString2
		mov	esi, offset String1
		mov	[ebp+lpString],	eax
		push	esi		; lpString1
		call	sub_4059DB
		push	[ebp+lpString]	; lpString
		call	lstrlenA	; lstrlenA
		push	[ebp+FilePart]	; lpString
		mov	edi, eax
		call	lstrlenA	; lstrlenA
		add	edi, eax
		cmp	edi, 3FDh
		jge	short loc_4016BD
		push	offset String2	; "->"
		push	esi		; lpString1
		call	lstrcatA	; lstrcatA
		push	[ebp+lpString]	; lpString2
		push	esi		; lpString1
		call	lstrcatA	; lstrcatA

loc_4016BD:				; CODE XREF: sub_401439+26Ej
		push	[ebp+lpString]	; lpNewFileName
		push	[ebp+FilePart]	; lpExistingFileName
		call	ds:MoveFileA	; MoveFileA
		test	eax, eax
		jz	short loc_4016D4
		push	0FFFFFFE3h
		jmp	loc_4021E8
; ---------------------------------------------------------------------------

loc_4016D4:				; CODE XREF: sub_401439+292j
		cmp	[ebp+nDenominator], ebx
		jz	loc_4026DA
		push	[ebp+FilePart]	; lpFileName
		call	sub_405CB0
		test	eax, eax
		jz	loc_4026DA
		push	[ebp+lpString]	; NumberOfBytesRead
		push	[ebp+FilePart]	; int
		call	sub_405723
		push	0FFFFFFE4h
		jmp	loc_4021E8
; ---------------------------------------------------------------------------

loc_4016FF:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		push	ebx		; jumptable 0040148C case 17
		call	sub_402A9A
		mov	esi, eax
		lea	eax, [ebp+FilePart]
		push	eax		; lpFilePart
		push	edi		; lpBuffer
		push	400h		; nBufferLength
		push	esi		; lpFileName
		call	ds:GetFullPathNameA	; GetFullPathNameA
		test	eax, eax
		jz	short loc_40173F
		mov	eax, [ebp+FilePart]
		cmp	eax, esi
		jbe	short loc_401748
		cmp	[eax], bl
		jz	short loc_401748
		push	esi		; lpFileName
		call	sub_405CB0
		cmp	eax, ebx
		jz	short loc_40173F
		add	eax, 2Ch
		push	eax		; lpString2
		push	[ebp+FilePart]	; lpString1
		call	sub_4059DB
		jmp	short loc_401748
; ---------------------------------------------------------------------------

loc_40173F:				; CODE XREF: sub_401439+2E1j
					; sub_401439+2F6j
		mov	[ebp+var_4], 1
		mov	[edi], bl

loc_401748:				; CODE XREF: sub_401439+2E8j
					; sub_401439+2ECj ...
		cmp	[ebp+nDenominator], ebx
		jnz	loc_40292F	; default
					; jumptable 0040148C cases 65,66
		push	400h		; cchBuffer
		push	edi		; lpszShortPath
		push	edi		; lpszLongPath
		call	ds:GetShortPathNameA	; GetShortPathNameA
		jmp	loc_40292F	; default
					; jumptable 0040148C cases 65,66
; ---------------------------------------------------------------------------

loc_401763:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		push	0FFFFFFFFh	; jumptable 0040148C case 18
		call	sub_402A9A
		lea	ecx, [ebp+FilePart]
		push	ecx		; lpFilePart
		push	esi		; lpBuffer
		push	400h		; nBufferLength
		push	ebx		; lpExtension
		push	eax		; lpFileName
		push	ebx		; lpPath
		call	ds:SearchPathA	; SearchPathA
		test	eax, eax

loc_40177F:				; CODE XREF: sub_401439+EECj
		jnz	loc_40292F	; default
					; jumptable 0040148C cases 65,66
		jmp	loc_4026AE
; ---------------------------------------------------------------------------

loc_40178A:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		push	0FFFFFFEFh	; jumptable 0040148C case 19
		call	sub_402A9A
		push	eax		; lpPathName
		push	esi		; lpTempFileName
		call	sub_4056DB
		jmp	loc_4015C8
; ---------------------------------------------------------------------------

loc_40179D:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		push	31h		; jumptable 0040148C case 20
		call	sub_402A9A
		mov	esi, eax
		mov	eax, [ebp+var_24]
		and	eax, 7
		push	esi
		mov	[ebp+ExitCode.bottom], esi
		mov	[ebp+FilePart],	eax
		call	sub_405554
		push	esi		; lpString2
		mov	esi, offset FileName
		test	eax, eax
		jz	short loc_4017CA
		push	esi		; lpString1
		call	sub_4059DB
		jmp	short loc_4017E1
; ---------------------------------------------------------------------------

loc_4017CA:				; CODE XREF: sub_401439+387j
		push	offset CurrentDirectory	; lpString2
		push	esi		; lpString1
		call	sub_4059DB
		push	eax		; lpString1
		call	sub_4054E8
		push	eax		; lpString1
		call	lstrcatA	; lstrcatA

loc_4017E1:				; CODE XREF: sub_401439+38Fj
		push	esi		; lpszCurrent
		call	sub_405C17
		mov	edi, offset Data

loc_4017EC:				; CODE XREF: sub_401439+465j
		cmp	[ebp+FilePart],	3
		jl	short loc_401823
		push	esi		; lpFileName
		call	sub_405CB0
		xor	ecx, ecx
		cmp	eax, ebx
		jz	short loc_40180E
		lea	ecx, [ebp+nShowCmd]
		add	eax, 14h
		push	ecx		; lpFileTime2
		push	eax		; lpFileTime1
		call	ds:CompareFileTime	; CompareFileTime
		mov	ecx, eax

loc_40180E:				; CODE XREF: sub_401439+3C3j
		mov	eax, [ebp+FilePart]
		add	eax, 0FFFFFFFDh
		or	eax, 80000000h
		and	eax, ecx
		neg	eax
		sbb	eax, eax
		inc	eax
		mov	[ebp+FilePart],	eax

loc_401823:				; CODE XREF: sub_401439+3B7j
		cmp	[ebp+FilePart],	ebx
		jnz	short loc_401839
		push	esi		; lpFileName
		call	ds:GetFileAttributesA	; GetFileAttributesA
		and	al, 0FEh
		push	eax		; dwFileAttributes
		push	esi		; lpFileName
		call	ds:SetFileAttributesA	; SetFileAttributesA

loc_401839:				; CODE XREF: sub_401439+3EDj
		xor	eax, eax
		cmp	[ebp+FilePart],	1
		setnz	al
		inc	eax
		push	eax		; dwCreationDisposition
		push	40000000h	; dwDesiredAccess
		push	esi		; lpFileName
		call	sub_4056AC
		cmp	eax, 0FFFFFFFFh
		mov	[ebp+lpString],	eax
		jnz	short loc_4018CD
		cmp	[ebp+FilePart],	ebx
		jnz	short loc_4018AF
		push	offset dword_430000 ; lpString2
		push	edi		; lpString1
		call	sub_4059DB
		push	esi		; lpString2
		push	offset dword_430000 ; lpString1
		call	sub_4059DB
		push	[ebp+lpString2]	; lpString2
		push	offset String1	; lpString1
		call	sub_4059FD
		push	edi		; lpString2
		push	offset dword_430000 ; lpString1
		call	sub_4059DB
		mov	eax, [ebp+var_24]
		sar	eax, 3
		push	eax		; int
		push	offset String1	; lpText
		call	sub_4052DB
		sub	eax, 4
		jz	loc_4017EC
		dec	eax
		jz	short loc_4018C2
		push	esi
		push	0FFFFFFFAh
		jmp	loc_401495
; ---------------------------------------------------------------------------

loc_4018AF:				; CODE XREF: sub_401439+421j
		push	[ebp+ExitCode.bottom] ;	lpString2
		push	0FFFFFFE2h	; int
		call	sub_404D7E
		cmp	[ebp+FilePart],	2
		jmp	loc_4015CA
; ---------------------------------------------------------------------------

loc_4018C2:				; CODE XREF: sub_401439+46Cj
		inc	dword_42F4A8
		jmp	loc_402938
; ---------------------------------------------------------------------------

loc_4018CD:				; CODE XREF: sub_401439+41Cj
		push	[ebp+ExitCode.bottom] ;	lpString2
		push	0FFFFFFEAh	; int
		call	sub_404D7E
		inc	dword_4092A0
		push	ebx		; Buffer
		push	ebx		; int
		push	[ebp+lpString]	; hFile
		push	[ebp+nDenominator] ; nDenominator
		call	sub_402EBD
		dec	dword_4092A0
		cmp	[ebp+nShowCmd.dwLowDateTime], 0FFFFFFFFh
		mov	edi, eax
		jnz	short loc_4018FE
		cmp	[ebp+nShowCmd.dwHighDateTime], 0FFFFFFFFh
		jz	short loc_401910

loc_4018FE:				; CODE XREF: sub_401439+4BDj
		lea	eax, [ebp+nShowCmd]
		push	eax		; lpLastWriteTime
		lea	eax, [ebp+nShowCmd]
		push	ebx		; lpLastAccessTime
		push	eax		; lpCreationTime
		push	[ebp+lpString]	; hFile
		call	ds:SetFileTime	; SetFileTime

loc_401910:				; CODE XREF: sub_401439+4C3j
		push	[ebp+lpString]	; hObject
		call	ds:CloseHandle	; CloseHandle
		cmp	edi, ebx
		jge	loc_40292F	; default
					; jumptable 0040148C cases 65,66
		cmp	edi, 0FFFFFFFEh
		jnz	short loc_401939
		push	0FFFFFFE9h	; lpString2
		push	esi		; lpString1
		call	sub_4059FD
		push	[ebp+ExitCode.bottom] ;	lpString2
		push	esi		; lpString1
		call	lstrcatA	; lstrcatA
		jmp	short loc_401941
; ---------------------------------------------------------------------------

loc_401939:				; CODE XREF: sub_401439+4EBj
		push	0FFFFFFEEh	; lpString2
		push	esi		; lpString1
		call	sub_4059FD

loc_401941:				; CODE XREF: sub_401439+4FEj
		push	200010h
		push	esi
		jmp	loc_40228E
; ---------------------------------------------------------------------------

loc_40194C:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		push	ebx		; jumptable 0040148C case 21
		jmp	short loc_401983
; ---------------------------------------------------------------------------

loc_40194F:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		push	31h		; jumptable 0040148C case 22
		call	sub_402A9A
		push	[ebp+var_24]	; int
		push	eax		; lpText
		call	sub_4052DB
		cmp	eax, ebx
		jz	loc_4026DA
		cmp	eax, [ebp+nDenominator]
		jz	loc_401AB1
		cmp	eax, [ebp+nShowCmd.dwHighDateTime]
		jnz	loc_40292F	; default
					; jumptable 0040148C cases 65,66
		mov	eax, [ebp+lpString2]
		jmp	loc_40293A	; jumptable 0040148C case 2
; ---------------------------------------------------------------------------

loc_401981:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		push	0FFFFFFF0h	; jumptable 0040148C case 23

loc_401983:				; CODE XREF: sub_401439+514j
		call	sub_402A9A
		push	[ebp+dwFileAttributes] ; int
		push	eax		; lpString1
		call	sub_40531D
		jmp	loc_40292F	; default
					; jumptable 0040148C cases 65,66
; ---------------------------------------------------------------------------

loc_401996:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		push	1		; jumptable 0040148C case 24
		call	sub_402A9A
		push	eax		; lpString
		call	lstrlenA	; lstrlenA
		jmp	loc_402536
; ---------------------------------------------------------------------------

loc_4019A8:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		push	2		; jumptable 0040148C case 25
		call	sub_402A7D
		push	3
		mov	[ebp+FilePart],	eax
		call	sub_402A7D
		push	1
		mov	edi, eax
		call	sub_402A9A
		cmp	[ebp+nDenominator], ebx
		mov	[ebp+nNumberOfBytesToWrite], eax
		mov	[esi], bl
		jz	short loc_4019D5
		cmp	[ebp+FilePart],	ebx
		jz	loc_40292F	; default
					; jumptable 0040148C cases 65,66

loc_4019D5:				; CODE XREF: sub_401439+591j
		push	eax		; lpString
		call	lstrlenA	; lstrlenA
		cmp	edi, ebx
		jge	short loc_4019E7
		add	edi, eax
		js	loc_40292F	; default
					; jumptable 0040148C cases 65,66

loc_4019E7:				; CODE XREF: sub_401439+5A4j
		cmp	edi, eax
		jle	short loc_4019ED
		mov	edi, eax

loc_4019ED:				; CODE XREF: sub_401439+5B0j
		mov	eax, [ebp+nNumberOfBytesToWrite]
		add	eax, edi
		push	eax		; lpString2
		push	esi		; lpString1
		call	sub_4059DB
		mov	edi, [ebp+FilePart]
		cmp	edi, ebx
		jz	loc_40292F	; default
					; jumptable 0040148C cases 65,66
		jge	short loc_401A15
		push	esi		; lpString
		call	lstrlenA	; lstrlenA
		add	edi, eax
		jns	short loc_401A15
		mov	[ebp+FilePart],	ebx
		mov	edi, ebx

loc_401A15:				; CODE XREF: sub_401439+5CBj
					; sub_401439+5D5j
		cmp	edi, 400h
		jge	loc_40292F	; default
					; jumptable 0040148C cases 65,66
		mov	[edi+esi], bl
		jmp	loc_40292F	; default
					; jumptable 0040148C cases 65,66
; ---------------------------------------------------------------------------

loc_401A29:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		push	20h		; jumptable 0040148C case 26
		call	sub_402A9A
		push	31h
		mov	esi, eax
		call	sub_402A9A
		cmp	[ebp+nShowCmd.dwHighDateTime], ebx
		push	eax		; lpString2
		push	esi		; lpString1
		jnz	short loc_401A52
		call	ds:lstrcmpiA	; lstrcmpiA

loc_401A46:				; CODE XREF: sub_401439+61Fj
		test	eax, eax
		jnz	short loc_401AB1

loc_401A4A:				; CODE XREF: sub_401439+670j
					; sub_401439:loc_401AB9j ...
		mov	eax, [ebp+nDenominator]
		jmp	loc_40293A	; jumptable 0040148C case 2
; ---------------------------------------------------------------------------

loc_401A52:				; CODE XREF: sub_401439+605j
		call	ds:lstrcmpA	; lstrcmpA
		jmp	short loc_401A46
; ---------------------------------------------------------------------------

loc_401A5A:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		xor	edi, edi	; jumptable 0040148C case 27
		inc	edi
		push	edi
		call	sub_402A9A
		cmp	[ebp+nDenominator], ebx
		push	400h		; nSize
		push	esi		; lpBuffer
		push	eax		; lpName
		jz	short loc_401A77
		call	ds:GetEnvironmentVariableA	; GetEnvironmentVariableA
		jmp	short loc_401A7D
; ---------------------------------------------------------------------------

loc_401A77:				; CODE XREF: sub_401439+634j
		call	ds:ExpandEnvironmentStringsA	; ExpandEnvironmentStringsA

loc_401A7D:				; CODE XREF: sub_401439+63Cj
		test	eax, eax
		jnz	short loc_401A86
		mov	[ebp+var_4], edi
		mov	[esi], bl

loc_401A86:				; CODE XREF: sub_401439+646j
		mov	[esi+3FFh], bl
		jmp	loc_40292F	; default
					; jumptable 0040148C cases 65,66
; ---------------------------------------------------------------------------

loc_401A91:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		push	ebx		; jumptable 0040148C case 28
		call	sub_402A7D
		push	1
		mov	esi, eax
		call	sub_402A7D
		cmp	[ebp+lpString2], ebx
		jnz	short loc_401AAD
		cmp	esi, eax
		jl	short loc_401AB1
		jle	short loc_401A4A
		jmp	short loc_401ABB
; ---------------------------------------------------------------------------

loc_401AAD:				; CODE XREF: sub_401439+66Aj
		cmp	esi, eax
		jnb	short loc_401AB9

loc_401AB1:				; CODE XREF: sub_401439+531j
					; sub_401439+60Fj ...
		mov	eax, [ebp+nShowCmd.dwLowDateTime]
		jmp	loc_40293A	; jumptable 0040148C case 2
; ---------------------------------------------------------------------------

loc_401AB9:				; CODE XREF: sub_401439+676j
		jbe	short loc_401A4A

loc_401ABB:				; CODE XREF: sub_401439+672j
		mov	eax, [ebp+nShowCmd.dwHighDateTime]
		jmp	loc_40293A	; jumptable 0040148C case 2
; ---------------------------------------------------------------------------

loc_401AC3:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		push	1		; jumptable 0040148C case 29
		call	sub_402A7D
		push	2
		mov	edi, eax
		call	sub_402A7D
		mov	ecx, eax
		mov	eax, [ebp+nShowCmd.dwLowDateTime]
		cmp	eax, 0Ch	; switch 13 cases
		ja	short loc_401B4A ; default
		jmp	ds:off_402A49[eax*4] ; switch jump

loc_401AE4:				; DATA XREF: .text:off_402A49o
		add	edi, ecx	; jumptable 00401ADD case 0
		jmp	short loc_401B4A ; default
; ---------------------------------------------------------------------------

loc_401AE8:				; CODE XREF: sub_401439+6A4j
					; DATA XREF: .text:off_402A49o
		sub	edi, ecx	; jumptable 00401ADD case 1
		jmp	short loc_401B4A ; default
; ---------------------------------------------------------------------------

loc_401AEC:				; CODE XREF: sub_401439+6A4j
					; DATA XREF: .text:off_402A49o
		imul	ecx, edi	; jumptable 00401ADD case 2
		mov	edi, ecx
		jmp	short loc_401B4A ; default
; ---------------------------------------------------------------------------

loc_401AF3:				; CODE XREF: sub_401439+6A4j
					; DATA XREF: .text:off_402A49o
		cmp	ecx, ebx	; jumptable 00401ADD case 3
		jz	short loc_401B39
		mov	eax, edi
		cdq
		idiv	ecx

loc_401AFC:				; CODE XREF: sub_401439+6DAj
		mov	edi, eax
		jmp	short loc_401B4A ; default
; ---------------------------------------------------------------------------

loc_401B00:				; CODE XREF: sub_401439+6A4j
					; DATA XREF: .text:off_402A49o
		or	edi, ecx	; jumptable 00401ADD case 4
		jmp	short loc_401B4A ; default
; ---------------------------------------------------------------------------

loc_401B04:				; CODE XREF: sub_401439+6A4j
					; DATA XREF: .text:off_402A49o
		and	edi, ecx	; jumptable 00401ADD case 5
		jmp	short loc_401B4A ; default
; ---------------------------------------------------------------------------

loc_401B08:				; CODE XREF: sub_401439+6A4j
					; DATA XREF: .text:off_402A49o
		xor	edi, ecx	; jumptable 00401ADD case 6
		jmp	short loc_401B4A ; default
; ---------------------------------------------------------------------------

loc_401B0C:				; CODE XREF: sub_401439+6A4j
					; DATA XREF: .text:off_402A49o
		xor	eax, eax	; jumptable 00401ADD case 7
		cmp	edi, ebx
		setz	al
		jmp	short loc_401AFC
; ---------------------------------------------------------------------------

loc_401B15:				; CODE XREF: sub_401439+6A4j
					; DATA XREF: .text:off_402A49o
		cmp	edi, ebx	; jumptable 00401ADD case 8
		jnz	short loc_401B27
		jmp	short loc_401B23
; ---------------------------------------------------------------------------

loc_401B1B:				; CODE XREF: sub_401439+6E8j
					; sub_401439+6ECj
		xor	edi, edi
		jmp	short loc_401B4A ; default
; ---------------------------------------------------------------------------

loc_401B1F:				; CODE XREF: sub_401439+6A4j
					; DATA XREF: .text:off_402A49o
		cmp	edi, ebx	; jumptable 00401ADD case 9
		jz	short loc_401B1B

loc_401B23:				; CODE XREF: sub_401439+6E0j
		cmp	ecx, ebx
		jz	short loc_401B1B

loc_401B27:				; CODE XREF: sub_401439+6DEj
		xor	edi, edi
		inc	edi
		jmp	short loc_401B4A ; default
; ---------------------------------------------------------------------------

loc_401B2C:				; CODE XREF: sub_401439+6A4j
					; DATA XREF: .text:off_402A49o
		cmp	ecx, ebx	; jumptable 00401ADD case 10
		jz	short loc_401B39
		mov	eax, edi
		cdq
		idiv	ecx
		mov	edi, edx
		jmp	short loc_401B4A ; default
; ---------------------------------------------------------------------------

loc_401B39:				; CODE XREF: sub_401439+6BCj
					; sub_401439+6F5j
		xor	edi, edi
		mov	[ebp+var_4], 1
		jmp	short loc_401B4A ; default
; ---------------------------------------------------------------------------

loc_401B44:				; CODE XREF: sub_401439+6A4j
					; DATA XREF: .text:off_402A49o
		shl	edi, cl		; jumptable 00401ADD case 11
		jmp	short loc_401B4A ; default
; ---------------------------------------------------------------------------

loc_401B48:				; CODE XREF: sub_401439+6A4j
					; DATA XREF: .text:off_402A49o
		sar	edi, cl		; jumptable 00401ADD case 12

loc_401B4A:				; CODE XREF: sub_401439+6A2j
					; sub_401439+6ADj ...
		push	edi		; default
		jmp	loc_401581
; ---------------------------------------------------------------------------

loc_401B50:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		push	1		; jumptable 0040148C case 30
		call	sub_402A9A
		push	2
		mov	edi, eax
		call	sub_402A7D
		push	eax
		push	edi		; LPCSTR
		push	esi		; LPSTR
		call	ds:wsprintfA	; wsprintfA
		add	esp, 0Ch
		jmp	loc_40292F	; default
					; jumptable 0040148C cases 65,66
; ---------------------------------------------------------------------------

loc_401B71:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		mov	eax, [ebp+nDenominator]	; jumptable 0040148C case 31
		mov	edi, hMem
		cmp	eax, ebx
		jz	short loc_401BC2

loc_401B7E:				; CODE XREF: sub_401439+752j
		dec	eax
		cmp	edi, ebx
		jz	loc_402280
		mov	edi, [edi]
		cmp	eax, ebx
		jnz	short loc_401B7E
		cmp	edi, ebx
		jz	loc_402280
		add	edi, 4
		mov	esi, offset FileName
		push	edi		; lpString2
		push	esi		; lpString1
		call	sub_4059DB
		mov	eax, hMem
		add	eax, 4
		push	eax		; lpString2
		push	edi		; lpString1
		call	sub_4059DB
		mov	eax, hMem
		push	esi
		add	eax, 4
		push	eax
		jmp	loc_402855
; ---------------------------------------------------------------------------

loc_401BC2:				; CODE XREF: sub_401439+743j
		cmp	[ebp+dwFileAttributes],	ebx
		jz	short loc_401BEC
		cmp	edi, ebx
		jz	loc_4026DA
		lea	eax, [edi+4]
		push	eax		; lpString2
		push	esi		; lpString1
		call	sub_4059DB
		mov	eax, [edi]
		push	edi		; hMem
		mov	hMem, eax

loc_401BE1:				; CODE XREF: sub_401439+B9Ej
		call	ds:GlobalFree	; GlobalFree
		jmp	loc_40292F	; default
					; jumptable 0040148C cases 65,66
; ---------------------------------------------------------------------------

loc_401BEC:				; CODE XREF: sub_401439+78Cj
		push	404h		; dwBytes
		push	40h		; uFlags
		call	ds:GlobalAlloc	; GlobalAlloc
		push	[ebp+var_24]	; lpString2
		mov	esi, eax
		lea	eax, [esi+4]
		push	eax		; lpString1
		call	sub_4059FD
		mov	eax, hMem
		mov	[esi], eax
		mov	hMem, esi
		jmp	loc_40292F	; default
					; jumptable 0040148C cases 65,66
; ---------------------------------------------------------------------------

loc_401C19:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		push	33h		; jumptable 0040148C cases 32,33
		call	sub_402A9A
		push	44h
		mov	[ebp+lpString],	eax
		call	sub_402A9A
		test	byte ptr [ebp+lpString2], 1
		mov	[ebp+FilePart],	eax
		jnz	short loc_401C3E
		push	[ebp+lpString]
		call	sub_405952
		mov	[ebp+lpString],	eax

loc_401C3E:				; CODE XREF: sub_401439+7F8j
		test	byte ptr [ebp+lpString2], 2
		jnz	short loc_401C4F
		push	[ebp+FilePart]
		call	sub_405952
		mov	[ebp+FilePart],	eax

loc_401C4F:				; CODE XREF: sub_401439+809j
		cmp	[ebp+var_28], 21h
		push	1
		jnz	short loc_401C9B
		call	sub_402A7D
		push	2
		mov	edi, eax
		call	sub_402A7D
		mov	ecx, [ebp+lpString2]
		sar	ecx, 2
		jz	short loc_401C8B
		lea	edx, [ebp+ExitCode.bottom]
		push	edx		; lpdwResult
		push	ecx		; uTimeout
		push	ebx		; fuFlags
		push	[ebp+FilePart]	; lParam
		push	[ebp+lpString]	; wParam
		push	eax		; Msg
		push	edi		; hWnd
		call	ds:SendMessageTimeoutA	; SendMessageTimeoutA
		neg	eax
		sbb	eax, eax
		inc	eax
		mov	[ebp+var_4], eax
		jmp	short loc_401CCA
; ---------------------------------------------------------------------------

loc_401C8B:				; CODE XREF: sub_401439+832j
		push	[ebp+FilePart]	; lParam
		push	[ebp+lpString]	; wParam
		push	eax		; Msg
		push	edi		; hWnd
		call	ds:SendMessageA	; SendMessageA
		jmp	short loc_401CC7
; ---------------------------------------------------------------------------

loc_401C9B:				; CODE XREF: sub_401439+81Cj
		call	sub_402A9A
		push	12h
		mov	edi, eax
		call	sub_402A9A
		mov	cl, [eax]
		neg	cl
		sbb	ecx, ecx
		and	ecx, eax
		mov	al, [edi]
		neg	al
		sbb	eax, eax
		push	ecx		; lpszWindow
		and	eax, edi
		push	eax		; lpszClass
		push	[ebp+FilePart]	; hWndChildAfter
		push	[ebp+lpString]	; hWndParent
		call	ds:FindWindowExA	; FindWindowExA

loc_401CC7:				; CODE XREF: sub_401439+860j
		mov	[ebp+ExitCode.bottom], eax

loc_401CCA:				; CODE XREF: sub_401439+850j
		cmp	[ebp+var_24], ebx
		jl	loc_40292F	; default
					; jumptable 0040148C cases 65,66
		push	[ebp+ExitCode.bottom]
		jmp	loc_401581
; ---------------------------------------------------------------------------

loc_401CDB:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		push	ebx		; jumptable 0040148C case 34
		call	sub_402A7D
		push	eax		; hWnd
		call	ds:IsWindow	; IsWindow

loc_401CE8:				; CODE XREF: sub_401439+22Dj
		test	eax, eax
		jz	loc_401A4A
		mov	eax, [ebp+dwFileAttributes]
		jmp	loc_40293A	; jumptable 0040148C case 2
; ---------------------------------------------------------------------------

loc_401CF8:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		push	2		; jumptable 0040148C case 35
		call	sub_402A7D
		push	eax		; nIDDlgItem
		push	1
		call	sub_402A7D
		push	eax		; hDlg
		call	ds:GetDlgItem	; GetDlgItem
		jmp	loc_402536
; ---------------------------------------------------------------------------

loc_401D13:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		mov	eax, dword_42F468 ; jumptable 0040148C case 36
		mov	ecx, [ebp+dwFileAttributes]
		add	eax, ecx
		push	eax		; dwNewLong
		push	0FFFFFFEBh	; nIndex
		push	ebx
		call	sub_402A7D
		push	eax		; hWnd
		call	ds:SetWindowLongA	; SetWindowLongA
		jmp	loc_40292F	; default
					; jumptable 0040148C cases 65,66
; ---------------------------------------------------------------------------

loc_401D32:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		push	[ebp+dwFileAttributes] ; jumptable 0040148C case 37
		push	[ebp+lpString]	; hDlg
		call	ds:GetDlgItem	; GetDlgItem
		mov	esi, eax
		lea	eax, [ebp+ExitCode]
		push	eax		; lpRect
		push	esi		; hWnd
		call	ds:GetClientRect	; GetClientRect
		mov	eax, [ebp+ExitCode.bottom]
		push	10h		; fuLoad
		imul	eax, [ebp+nDenominator]
		push	eax		; cy
		mov	eax, [ebp+ExitCode.right]
		imul	eax, [ebp+nDenominator]
		push	eax		; cx
		push	ebx		; type
		push	ebx
		call	sub_402A9A
		push	eax		; name
		push	ebx		; hInst
		call	ds:LoadImageA	; LoadImageA
		push	eax		; lParam
		push	ebx		; wParam
		push	172h		; Msg
		push	esi		; hWnd
		call	ds:SendMessageA	; SendMessageA
		cmp	eax, ebx
		jz	loc_40292F	; default
					; jumptable 0040148C cases 65,66
		push	eax		; ho
		call	ds:DeleteObject	; DeleteObject
		jmp	loc_40292F	; default
					; jumptable 0040148C cases 65,66
; ---------------------------------------------------------------------------

loc_401D8E:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		push	48h		; jumptable 0040148C case 38
		push	5Ah		; index
		push	[ebp+lpString]	; hWnd
		call	ds:GetDC	; GetDC
		push	eax		; hdc
		call	ds:GetDeviceCaps	; GetDeviceCaps
		push	eax		; nNumerator
		push	2
		call	sub_402A7D
		push	eax		; nNumber
		call	ds:MulDiv	; MulDiv
		neg	eax
		push	3
		mov	lf.lfHeight, eax
		call	sub_402A7D
		mov	lf.lfWeight, eax
		mov	al, byte ptr [ebp+nShowCmd.dwHighDateTime]
		push	[ebp+dwFileAttributes] ; lpString2
		mov	cl, al
		and	cl, 1
		mov	lf.lfCharSet, 1
		mov	lf.lfItalic, cl
		mov	cl, al
		and	cl, 2
		and	al, 4
		push	offset lf.lfFaceName ; lpString1
		mov	lf.lfUnderline,	cl
		mov	lf.lfStrikeOut,	al
		call	sub_4059FD
		push	offset lf	; lplf
		call	ds:CreateFontIndirectA	; CreateFontIndirectA
		jmp	loc_402536
; ---------------------------------------------------------------------------

loc_401E08:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		push	ebx		; jumptable 0040148C case 39
		call	sub_402A7D
		push	1
		mov	esi, eax
		call	sub_402A7D
		cmp	[ebp+nShowCmd.dwLowDateTime], ebx
		push	eax		; nCmdShow
		push	esi		; hWnd
		jnz	short loc_401E29
		call	ds:ShowWindow	; ShowWindow
		jmp	loc_40292F	; default
					; jumptable 0040148C cases 65,66
; ---------------------------------------------------------------------------

loc_401E29:				; CODE XREF: sub_401439+9E3j
		call	ds:EnableWindow	; EnableWindow
		jmp	loc_40292F	; default
					; jumptable 0040148C cases 65,66
; ---------------------------------------------------------------------------

loc_401E34:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		push	ebx		; jumptable 0040148C case 40
		call	sub_402A9A
		push	31h
		mov	esi, eax
		call	sub_402A9A
		push	22h
		mov	ebx, eax
		call	sub_402A9A
		push	ebx
		push	esi
		push	offset aSS	; "%s %s"
		push	offset String1	; LPSTR
		mov	edi, eax
		call	ds:wsprintfA	; wsprintfA
		add	esp, 10h
		push	0FFFFFFECh
		call	sub_401428
		mov	al, [edi]
		push	[ebp+nShowCmd.dwLowDateTime] ; nShowCmd
		neg	al
		sbb	eax, eax
		push	offset CurrentDirectory	; lpDirectory
		and	eax, edi
		push	eax		; lpParameters
		mov	al, [esi]
		neg	al
		sbb	eax, eax
		push	ebx		; lpFile
		and	eax, esi
		push	eax		; lpOperation
		push	[ebp+lpString]	; hwnd
		call	ds:ShellExecuteA	; ShellExecuteA
		cmp	eax, 21h
		jge	loc_40292F	; default
					; jumptable 0040148C cases 65,66
		jmp	loc_4026DA
; ---------------------------------------------------------------------------

loc_401E9C:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		push	ebx		; jumptable 0040148C case 41
		call	sub_402A9A
		mov	esi, eax
		push	esi		; lpString2
		push	0FFFFFFEBh	; int
		call	sub_404D7E
		push	offset CurrentDirectory	; lpCurrentDirectory
		push	esi		; lpCommandLine
		call	sub_405263
		cmp	eax, ebx
		mov	[ebp+FilePart],	eax
		jz	loc_4026DA
		cmp	[ebp+nDenominator], ebx
		jz	short loc_401F0D
		mov	esi, ds:WaitForSingleObject
		jmp	short loc_401ED6
; ---------------------------------------------------------------------------

loc_401ECF:				; CODE XREF: sub_401439+AA9j
		push	0Fh		; wMsgFilterMax
		call	sub_405D18

loc_401ED6:				; CODE XREF: sub_401439+A94j
		push	64h		; dwMilliseconds
		push	[ebp+FilePart]	; hHandle
		call	esi ; WaitForSingleObject
		cmp	eax, 102h
		jz	short loc_401ECF
		lea	eax, [ebp+ExitCode.bottom]
		push	eax		; lpExitCode
		push	[ebp+FilePart]	; hProcess
		call	ds:GetExitCodeProcess	; GetExitCodeProcess
		cmp	[ebp+dwFileAttributes],	ebx
		jl	short loc_401F01
		push	[ebp+ExitCode.bottom] ;	int
		push	edi		; LPSTR
		call	sub_405939
		jmp	short loc_401F0D
; ---------------------------------------------------------------------------

loc_401F01:				; CODE XREF: sub_401439+ABBj
		cmp	[ebp+ExitCode.bottom], ebx
		jz	short loc_401F0D
		mov	[ebp+var_4], 1

loc_401F0D:				; CODE XREF: sub_401439+A8Cj
					; sub_401439+AC6j ...
		push	[ebp+FilePart]	; hObject

loc_401F10:				; CODE XREF: sub_401439+10DCj
		call	ds:CloseHandle	; CloseHandle
		jmp	loc_40292F	; default
					; jumptable 0040148C cases 65,66
; ---------------------------------------------------------------------------

loc_401F1B:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		push	2		; jumptable 0040148C case 42
		call	sub_402A9A
		push	eax		; lpFileName
		call	sub_405CB0
		cmp	eax, ebx
		mov	[ebp+FilePart],	eax
		jz	short loc_401F42
		mov	ebx, eax
		push	dword ptr [ebx+14h] ; int
		push	edi		; LPSTR
		call	sub_405939
		push	dword ptr [ebx+18h]
		jmp	loc_401581
; ---------------------------------------------------------------------------

loc_401F42:				; CODE XREF: sub_401439+AF4j
		mov	[esi], bl
		mov	[edi], bl
		jmp	loc_4026DA
; ---------------------------------------------------------------------------

loc_401F4B:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		lea	eax, [ebp+FileOp.pTo] ;	jumptable 0040148C case	43
		push	0FFFFFFEEh
		mov	[ebp+FilePart],	eax
		call	sub_402A9A
		lea	ecx, [ebp+lpMultiByteStr]
		mov	[ebp+nNumberOfBytesToWrite], eax
		push	ecx		; lpdwHandle
		push	eax		; lptstrFilename
		call	GetFileVersionInfoSizeA
		mov	[esi], bl
		cmp	eax, ebx
		mov	[ebp+lpString],	eax
		mov	[edi], bl
		mov	[ebp+var_4], 1
		jz	loc_40292F	; default
					; jumptable 0040148C cases 65,66
		push	eax		; dwBytes
		push	40h		; uFlags
		call	ds:GlobalAlloc	; GlobalAlloc
		cmp	eax, ebx
		mov	[ebp+ExitCode.bottom], eax
		jz	loc_40292F	; default
					; jumptable 0040148C cases 65,66
		push	eax		; lpData
		push	[ebp+lpString]	; dwLen
		push	ebx		; dwHandle
		push	[ebp+nNumberOfBytesToWrite] ; lptstrFilename
		call	GetFileVersionInfoA
		test	eax, eax
		jz	short loc_401FD4
		lea	eax, [ebp+lpValueName]
		push	eax		; puLen
		lea	eax, [ebp+FilePart]
		push	eax		; lplpBuffer
		push	offset SubBlock	; "\\"
		push	[ebp+ExitCode.bottom] ;	pBlock
		call	VerQueryValueA
		test	eax, eax
		jz	short loc_401FD4
		mov	eax, [ebp+FilePart]
		push	dword ptr [eax+8] ; int
		push	esi		; LPSTR
		call	sub_405939
		mov	eax, [ebp+FilePart]
		push	dword ptr [eax+0Ch] ; int
		push	edi		; LPSTR
		call	sub_405939
		mov	[ebp+var_4], ebx

loc_401FD4:				; CODE XREF: sub_401439+B65j
					; sub_401439+B7Ej
		push	[ebp+ExitCode.bottom]
		jmp	loc_401BE1
; ---------------------------------------------------------------------------

loc_401FDC:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		xor	edi, edi	; jumptable 0040148C case 44
		push	8001h		; uMode
		inc	edi
		mov	[ebp+var_4], edi
		call	ds:SetErrorMode	; SetErrorMode
		cmp	dword_42F4D0, ebx
		jl	loc_402093
		push	0FFFFFFF0h
		call	sub_402A9A
		push	edi
		mov	esi, eax
		call	sub_402A9A
		cmp	[ebp+nShowCmd.dwHighDateTime], ebx
		mov	[ebp+FilePart],	eax
		jz	short loc_40201D
		push	esi		; lpModuleName
		call	ds:GetModuleHandleA	; GetModuleHandleA
		mov	edi, eax
		cmp	edi, ebx
		jnz	short loc_40202A

loc_40201D:				; CODE XREF: sub_401439+BD5j
		push	esi		; lpLibFileName
		call	ds:LoadLibraryA	; LoadLibraryA
		mov	edi, eax
		cmp	edi, ebx
		jz	short loc_40208F

loc_40202A:				; CODE XREF: sub_401439+BE2j
		push	[ebp+FilePart]	; lpProcName
		push	edi		; hModule
		call	ds:GetProcAddress	; GetProcAddress
		mov	esi, eax
		cmp	esi, ebx
		jz	short loc_402077
		cmp	[ebp+nDenominator], ebx
		mov	[ebp+var_4], ebx
		jz	short loc_402059
		push	[ebp+nDenominator]
		call	sub_401428
		call	esi
		test	eax, eax
		jz	short loc_402081
		mov	[ebp+var_4], 1
		jmp	short loc_402081
; ---------------------------------------------------------------------------

loc_402059:				; CODE XREF: sub_401439+C07j
		push	offset off_409000
		push	offset hMem
		push	offset dword_430000
		push	400h
		push	[ebp+lpString]
		call	esi
		add	esp, 14h
		jmp	short loc_402081
; ---------------------------------------------------------------------------

loc_402077:				; CODE XREF: sub_401439+BFFj
		push	[ebp+FilePart]	; lpString2
		push	0FFFFFFF7h	; int
		call	sub_404D7E

loc_402081:				; CODE XREF: sub_401439+C15j
					; sub_401439+C1Ej ...
		cmp	[ebp+nShowCmd.dwLowDateTime], ebx
		jnz	short loc_40209A
		push	edi		; hLibModule
		call	ds:FreeLibrary	; FreeLibrary
		jmp	short loc_40209A
; ---------------------------------------------------------------------------

loc_40208F:				; CODE XREF: sub_401439+BEFj
		push	0FFFFFFF6h
		jmp	short loc_402095
; ---------------------------------------------------------------------------

loc_402093:				; CODE XREF: sub_401439+BBAj
		push	0FFFFFFE7h

loc_402095:				; CODE XREF: sub_401439+C58j
		call	sub_401428

loc_40209A:				; CODE XREF: sub_401439+C4Bj
					; sub_401439+C54j
		push	ebx		; uMode
		call	ds:SetErrorMode	; SetErrorMode
		jmp	loc_40292F	; default
					; jumptable 0040148C cases 65,66
; ---------------------------------------------------------------------------

loc_4020A6:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		push	0FFFFFFF0h	; jumptable 0040148C case 45
		call	sub_402A9A
		push	0FFFFFFDFh
		mov	[ebp+lpMultiByteStr], eax
		call	sub_402A9A
		push	2
		mov	esi, eax
		call	sub_402A9A
		push	0FFFFFFCDh
		mov	[ebp+nNumberOfBytesToWrite], eax
		call	sub_402A9A
		push	45h
		mov	[ebp+ExitCode.bottom], eax
		call	sub_402A9A
		push	esi
		mov	[ebp+lpValueName], eax
		call	sub_405554
		test	eax, eax
		jnz	short loc_4020E8
		push	21h
		call	sub_402A9A

loc_4020E8:				; CODE XREF: sub_401439+CA6j
		lea	eax, [ebp+FilePart]
		push	eax		; ppv
		push	offset riid	; riid
		push	1		; dwClsContext
		push	ebx		; pUnkOuter
		push	offset rclsid	; rclsid
		call	ds:CoCreateInstance
		cmp	eax, ebx
		jl	loc_4021DF
		mov	eax, [ebp+FilePart]
		lea	edx, [ebp+lpString]
		push	edx
		push	offset dword_407440
		mov	ecx, [eax]
		push	eax
		call	dword ptr [ecx]
		mov	edi, eax
		cmp	edi, ebx
		jl	loc_4021D2
		mov	eax, [ebp+FilePart]
		push	esi
		push	eax
		mov	ecx, [eax]
		call	dword ptr [ecx+50h]
		mov	edi, eax
		mov	eax, [ebp+FilePart]
		push	offset CurrentDirectory
		push	eax
		mov	ecx, [eax]
		call	dword ptr [ecx+24h]
		mov	ecx, [ebp+nShowCmd.dwHighDateTime]
		mov	esi, 0FFh
		mov	eax, ecx
		sar	eax, 8
		and	eax, esi
		jz	short loc_40215A
		mov	ecx, [ebp+FilePart]
		push	eax
		push	ecx
		mov	edx, [ecx]
		call	dword ptr [edx+3Ch]
		mov	ecx, [ebp+nShowCmd.dwHighDateTime]

loc_40215A:				; CODE XREF: sub_401439+D12j
		mov	eax, [ebp+FilePart]
		sar	ecx, 10h
		mov	edx, [eax]
		push	ecx
		push	eax
		call	dword ptr [edx+34h]
		mov	eax, [ebp+ExitCode.bottom]
		cmp	[eax], bl
		jz	short loc_402180
		mov	edx, [ebp+nShowCmd.dwHighDateTime]
		mov	eax, [ebp+FilePart]
		and	edx, esi
		mov	ecx, [eax]
		push	edx
		push	[ebp+ExitCode.bottom]
		push	eax
		call	dword ptr [ecx+44h]

loc_402180:				; CODE XREF: sub_401439+D33j
		mov	eax, [ebp+FilePart]
		push	[ebp+nNumberOfBytesToWrite]
		mov	ecx, [eax]
		push	eax
		call	dword ptr [ecx+2Ch]
		mov	eax, [ebp+FilePart]
		push	[ebp+lpValueName]
		mov	ecx, [eax]
		push	eax
		call	dword ptr [ecx+1Ch]
		cmp	edi, ebx
		jl	short loc_4021C9
		mov	esi, offset WideCharStr
		push	400h		; cchWideChar
		push	esi		; lpWideCharStr
		push	0FFFFFFFFh	; cbMultiByte
		push	[ebp+lpMultiByteStr] ; lpMultiByteStr
		mov	WideCharStr, bx
		push	ebx		; dwFlags
		push	ebx		; CodePage
		call	ds:MultiByteToWideChar	; MultiByteToWideChar
		mov	eax, [ebp+lpString]
		push	1
		push	esi
		push	eax
		mov	ecx, [eax]
		call	dword ptr [ecx+18h]
		mov	edi, eax

loc_4021C9:				; CODE XREF: sub_401439+D61j
		mov	eax, [ebp+lpString]
		push	eax
		mov	ecx, [eax]
		call	dword ptr [ecx+8]

loc_4021D2:				; CODE XREF: sub_401439+CE3j
		mov	eax, [ebp+FilePart]
		push	eax
		mov	ecx, [eax]
		call	dword ptr [ecx+8]
		cmp	edi, ebx
		jge	short loc_4021F2

loc_4021DF:				; CODE XREF: sub_401439+CC8j
		mov	[ebp+var_4], 1
		push	0FFFFFFF0h

loc_4021E8:				; CODE XREF: sub_401439+21Cj
					; sub_401439+296j ...
		call	sub_401428
		jmp	loc_40292F	; default
					; jumptable 0040148C cases 65,66
; ---------------------------------------------------------------------------

loc_4021F2:				; CODE XREF: sub_401439+DA4j
		push	0FFFFFFF4h
		jmp	short loc_4021E8
; ---------------------------------------------------------------------------

loc_4021F6:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		push	ebx		; jumptable 0040148C case 46
		call	sub_402A9A
		mov	edi, eax
		push	11h
		mov	[ebp+FilePart],	edi
		call	sub_402A9A
		mov	esi, eax
		mov	eax, [ebp+lpString]
		push	edi		; lpString
		mov	[ebp+FileOp.hwnd], eax
		mov	[ebp+FileOp.wFunc], 2
		call	lstrlenA	; lstrlenA
		push	esi		; lpString
		mov	[eax+edi+1], bl
		call	lstrlenA	; lstrlenA
		mov	edi, offset Data
		push	0FFFFFFF8h	; lpString2
		push	edi		; lpString1
		mov	[eax+esi+1], bl
		call	sub_4059FD
		push	esi		; lpString2
		push	edi		; lpString1
		call	lstrcatA	; lstrcatA
		mov	eax, [ebp+FilePart]
		push	edi		; lpString2
		mov	[ebp+FileOp.pFrom], eax
		mov	ax, word ptr [ebp+nDenominator]
		push	ebx		; int
		mov	[ebp+FileOp.pTo], esi
		mov	[ebp+FileOp.lpszProgressTitle],	edi
		mov	[ebp+FileOp.fFlags], ax
		call	sub_404D7E
		lea	eax, [ebp+FileOp]
		push	eax		; lpFileOp
		call	ds:SHFileOperationA	; SHFileOperationA
		test	eax, eax
		jz	loc_40292F	; default
					; jumptable 0040148C cases 65,66
		push	ebx		; lpString2
		push	0FFFFFFF9h	; int
		call	sub_404D7E
		jmp	loc_4026DA
; ---------------------------------------------------------------------------

loc_402279:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		cmp	eax, 0BADF00Dh	; jumptable 0040148C case 47
		jz	short loc_40229D

loc_402280:				; CODE XREF: sub_401439+748j
					; sub_401439+756j
		push	200010h		; int
		push	0FFFFFFE8h	; lpString2
		push	ebx		; lpString1
		call	sub_4059FD
		push	eax		; lpText

loc_40228E:				; CODE XREF: sub_401439+50Ej
		call	sub_4052DB

loc_402293:				; CODE XREF: sub_401439+61j
					; sub_401439+6Fj ...
		mov	eax, 7FFFFFFFh
		jmp	loc_40293A	; jumptable 0040148C case 2
; ---------------------------------------------------------------------------

loc_40229D:				; CODE XREF: sub_401439+E45j
		inc	dword_42F4B4
		jmp	loc_40292F	; default
					; jumptable 0040148C cases 65,66
; ---------------------------------------------------------------------------

loc_4022A8:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		xor	esi, esi	; jumptable 0040148C case 48
		xor	edi, edi
		cmp	eax, ebx
		jz	short loc_4022B8
		push	ebx
		call	sub_402A9A
		mov	esi, eax

loc_4022B8:				; CODE XREF: sub_401439+E75j
		cmp	[ebp+dwFileAttributes],	ebx
		jz	short loc_4022C6
		push	11h
		call	sub_402A9A
		mov	edi, eax

loc_4022C6:				; CODE XREF: sub_401439+E82j
		cmp	[ebp+nShowCmd.dwHighDateTime], ebx
		jz	short loc_4022D4
		push	22h
		call	sub_402A9A
		mov	ebx, eax

loc_4022D4:				; CODE XREF: sub_401439+E90j
		push	0FFFFFFCDh
		call	sub_402A9A
		push	eax		; lpFileName
		push	ebx		; lpString
		push	edi		; lpKeyName
		push	esi		; lpAppName
		call	ds:WritePrivateProfileStringA	; WritePrivateProfileStringA
		jmp	loc_4015C8
; ---------------------------------------------------------------------------

loc_4022EA:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		push	1		; jumptable 0040148C case 49
		mov	[ebp+FilePart],	7E4E21h
		call	sub_402A9A
		push	12h
		mov	edi, eax
		call	sub_402A9A
		push	0FFFFFFDDh
		mov	[ebp+lpMultiByteStr], eax
		call	sub_402A9A
		push	eax		; lpFileName
		push	3FFh		; nSize
		lea	eax, [ebp+FilePart]
		push	esi		; lpReturnedString
		push	eax		; lpDefault
		push	[ebp+lpMultiByteStr] ; lpKeyName
		push	edi		; lpAppName
		call	ds:GetPrivateProfileStringA	; GetPrivateProfileStringA
		mov	eax, [esi]
		cmp	eax, [ebp+FilePart]
		jmp	loc_40177F
; ---------------------------------------------------------------------------

loc_40232A:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		cmp	[ebp+nShowCmd.dwHighDateTime], ebx ; jumptable 0040148C	case 50
		jnz	short loc_40235A
		push	2		; phkResult
		call	sub_402B76
		mov	esi, eax
		cmp	esi, ebx
		jz	loc_4026DA
		push	33h
		call	sub_402A9A
		push	eax		; lpValueName
		push	esi		; hKey
		call	ds:RegDeleteValueA	; RegDeleteValueA
		push	esi		; hKey
		mov	edi, eax
		call	ds:RegCloseKey	; RegCloseKey
		jmp	short loc_402379
; ---------------------------------------------------------------------------

loc_40235A:				; CODE XREF: sub_401439+EF4j
		push	22h
		call	sub_402A9A
		mov	ecx, [ebp+nShowCmd.dwHighDateTime]
		and	ecx, 2
		push	ecx		; int
		push	eax		; lpSubKey
		push	[ebp+dwFileAttributes]
		call	sub_402B61
		push	eax		; hKey
		call	sub_402ADA
		mov	edi, eax

loc_402379:				; CODE XREF: sub_401439+F1Fj
		cmp	edi, ebx
		jz	loc_40292F	; default
					; jumptable 0040148C cases 65,66
		jmp	loc_4026DA
; ---------------------------------------------------------------------------

loc_402386:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		push	eax		; jumptable 0040148C case 51
		call	sub_402B61
		mov	esi, [ebp+nShowCmd.dwHighDateTime]
		mov	edi, eax
		mov	eax, [ebp+lpString2]
		push	2
		mov	[ebp+lpMultiByteStr], eax
		call	sub_402A9A
		push	11h
		mov	[ebp+lpValueName], eax
		call	sub_402A9A
		lea	ecx, [ebp+FilePart]
		push	ebx		; lpdwDisposition
		push	ecx		; phkResult
		push	ebx		; lpSecurityAttributes
		push	2		; samDesired
		push	ebx		; dwOptions
		push	ebx		; lpClass
		push	ebx		; Reserved
		push	eax		; lpSubKey
		push	edi		; hKey
		mov	[ebp+var_4], 1
		call	ds:RegCreateKeyExA	; RegCreateKeyExA
		test	eax, eax
		jnz	loc_40292F	; default
					; jumptable 0040148C cases 65,66
		cmp	esi, 1
		mov	edi, offset Data
		jnz	short loc_4023E2
		push	23h
		call	sub_402A9A
		push	edi		; lpString
		call	lstrlenA	; lstrlenA
		inc	eax

loc_4023E2:				; CODE XREF: sub_401439+F99j
		cmp	esi, 4
		jnz	short loc_4023F5
		push	3
		call	sub_402A7D
		push	esi
		mov	Data, eax
		pop	eax

loc_4023F5:				; CODE XREF: sub_401439+FACj
		cmp	esi, 3
		jnz	short loc_402409
		push	0C00h		; Buffer
		push	edi		; int
		push	ebx		; hFile
		push	[ebp+nShowCmd.dwLowDateTime] ; nDenominator
		call	sub_402EBD

loc_402409:				; CODE XREF: sub_401439+FBFj
		push	eax		; cbData
		push	edi		; lpData
		push	[ebp+lpMultiByteStr] ; dwType
		push	ebx		; Reserved
		push	[ebp+lpValueName] ; lpValueName
		push	[ebp+FilePart]	; hKey
		call	ds:RegSetValueExA	; RegSetValueExA
		test	eax, eax
		jnz	short loc_402422
		mov	[ebp+var_4], ebx

loc_402422:				; CODE XREF: sub_401439+FE4j
		push	[ebp+FilePart]
		jmp	loc_4024FB
; ---------------------------------------------------------------------------

loc_40242A:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		push	20019h		; jumptable 0040148C case 52
		call	sub_402B76
		push	33h
		mov	edi, eax
		call	sub_402A9A
		cmp	edi, ebx
		mov	[esi], bl
		jz	loc_4026DA
		lea	ecx, [ebp+ExitCode.bottom]
		mov	[ebp+ExitCode.bottom], 3FFh
		push	ecx		; lpcbData
		lea	ecx, [ebp+FilePart]
		push	esi		; lpData
		push	ecx		; lpType
		push	ebx		; lpReserved
		push	eax		; lpValueName
		push	edi		; hKey
		call	ds:RegQueryValueExA	; RegQueryValueExA
		xor	ecx, ecx
		inc	ecx
		test	eax, eax
		jnz	short loc_40249E
		cmp	[ebp+FilePart],	4
		jz	short loc_402488
		cmp	[ebp+FilePart],	ecx
		jz	short loc_402478
		cmp	[ebp+FilePart],	2
		jnz	short loc_40249E

loc_402478:				; CODE XREF: sub_401439+1037j
		cmp	[ebp+nShowCmd.dwHighDateTime], ebx
		jz	short loc_402480
		mov	[ebp+var_4], ecx

loc_402480:				; CODE XREF: sub_401439+1042j
		mov	eax, [ebp+ExitCode.bottom]
		mov	[eax+esi], bl
		jmp	short loc_4024FA
; ---------------------------------------------------------------------------

loc_402488:				; CODE XREF: sub_401439+1032j
		cmp	[ebp+nShowCmd.dwHighDateTime], ebx
		jnz	short loc_402494
		mov	[ebp+var_4], 1

loc_402494:				; CODE XREF: sub_401439+1052j
		push	dword ptr [esi]	; int
		push	esi		; LPSTR
		call	sub_405939
		jmp	short loc_4024FA
; ---------------------------------------------------------------------------

loc_40249E:				; CODE XREF: sub_401439+102Cj
					; sub_401439+103Dj
		mov	[esi], bl
		mov	[ebp+var_4], ecx
		jmp	short loc_4024FA
; ---------------------------------------------------------------------------

loc_4024A5:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		push	20019h		; jumptable 0040148C case 53
		call	sub_402B76
		push	3
		mov	edi, eax
		call	sub_402A7D
		cmp	edi, ebx
		mov	[esi], bl
		jz	loc_4026DA
		cmp	[ebp+nShowCmd.dwHighDateTime], ebx
		mov	ecx, 3FFh
		mov	[ebp+FilePart],	ecx
		jz	short loc_4024DB
		push	ecx		; cchName
		push	esi		; lpName
		push	eax		; dwIndex
		push	edi		; hKey
		call	ds:RegEnumKeyA	; RegEnumKeyA
		jmp	short loc_4024F4
; ---------------------------------------------------------------------------

loc_4024DB:				; CODE XREF: sub_401439+1094j
		push	ebx		; lpcbData
		push	ebx		; lpData
		push	ebx		; lpType
		lea	ecx, [ebp+FilePart]
		push	ebx		; lpReserved
		push	ecx		; lpcchValueName
		push	esi		; lpValueName
		push	eax		; dwIndex
		push	edi		; hKey
		call	ds:RegEnumValueA	; RegEnumValueA
		test	eax, eax
		jnz	loc_4026DA

loc_4024F4:				; CODE XREF: sub_401439+10A0j
		mov	[esi+3FFh], bl

loc_4024FA:				; CODE XREF: sub_401439+104Dj
					; sub_401439+1063j ...
		push	edi		; hKey

loc_4024FB:				; CODE XREF: sub_401439+FECj
		call	ds:RegCloseKey	; RegCloseKey
		jmp	loc_40292F	; default
					; jumptable 0040148C cases 65,66
; ---------------------------------------------------------------------------

loc_402506:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		cmp	[esi], bl	; jumptable 0040148C case 54
		jz	loc_40292F	; default
					; jumptable 0040148C cases 65,66
		push	esi
		call	sub_405952
		push	eax
		jmp	loc_401F10
; ---------------------------------------------------------------------------

loc_40251A:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		push	0FFFFFFEDh	; jumptable 0040148C case 55
		call	sub_402A9A
		push	[ebp+nDenominator] ; dwCreationDisposition
		push	[ebp+dwFileAttributes] ; dwDesiredAccess
		push	eax		; lpFileName
		call	sub_4056AC
		cmp	eax, 0FFFFFFFFh
		jz	loc_4026D8

loc_402536:				; CODE XREF: sub_401439+56Aj
					; sub_401439+8D5j ...
		push	eax
		jmp	loc_401581
; ---------------------------------------------------------------------------

loc_40253C:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		cmp	[ebp+nDenominator], ebx	; jumptable 0040148C case 56
		jz	short loc_402552
		push	1
		call	sub_402A7D
		mov	String1, al
		xor	eax, eax
		inc	eax
		jmp	short loc_40255F
; ---------------------------------------------------------------------------

loc_402552:				; CODE XREF: sub_401439+1106j
		push	11h
		call	sub_402A9A
		push	eax		; lpString
		call	lstrlenA	; lstrlenA

loc_40255F:				; CODE XREF: sub_401439+1117j
		cmp	[esi], bl
		jz	loc_4026DA
		lea	ecx, [ebp+FilePart]
		push	ebx		; lpOverlapped
		push	ecx		; lpNumberOfBytesWritten
		push	eax		; nNumberOfBytesToWrite
		push	offset String1	; lpBuffer
		push	esi
		call	sub_405952
		push	eax		; hFile
		call	ds:WriteFile	; WriteFile
		jmp	loc_4015C8
; ---------------------------------------------------------------------------

loc_402584:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		push	2		; jumptable 0040148C case 57
		mov	[ebp+nNumberOfBytesToWrite], ebx
		call	sub_402A7D
		cmp	eax, 1
		mov	[ebp+lpString],	eax
		jl	loc_40292F	; default
					; jumptable 0040148C cases 65,66
		mov	ecx, 3FFh
		cmp	eax, ecx
		jle	short loc_4025A6
		mov	[ebp+lpString],	ecx

loc_4025A6:				; CODE XREF: sub_401439+1168j
		cmp	[esi], bl
		jz	loc_40263C
		push	esi
		mov	byte ptr [ebp+FilePart+3], bl
		call	sub_405952
		cmp	[ebp+lpString],	ebx
		mov	[ebp+ExitCode.bottom], eax
		jle	short loc_40263C
		mov	esi, [ebp+nNumberOfBytesToWrite]

loc_4025C2:				; CODE XREF: sub_401439+11C9j
		lea	eax, [ebp+lpMultiByteStr]
		push	ebx		; lpOverlapped
		push	eax		; lpNumberOfBytesRead
		lea	eax, [ebp+Buffer]
		push	1		; nNumberOfBytesToRead
		push	eax		; lpBuffer
		push	[ebp+ExitCode.bottom] ;	hFile
		call	ds:ReadFile	; ReadFile
		test	eax, eax
		jz	short loc_40263F
		cmp	[ebp+lpMultiByteStr], 1
		jnz	short loc_40263F
		cmp	[ebp+nShowCmd.dwLowDateTime], ebx
		jnz	short loc_402606
		cmp	byte ptr [ebp+FilePart+3], 0Dh
		jz	short loc_402616
		cmp	byte ptr [ebp+FilePart+3], 0Ah
		jz	short loc_402616
		mov	al, [ebp+Buffer]
		mov	[esi+edi], al
		inc	esi
		cmp	al, bl
		mov	byte ptr [ebp+FilePart+3], al
		jz	short loc_40263F
		cmp	esi, [ebp+lpString]
		jl	short loc_4025C2
		jmp	short loc_40263F
; ---------------------------------------------------------------------------

loc_402606:				; CODE XREF: sub_401439+11AAj
		movzx	eax, [ebp+Buffer]
		push	eax		; int
		push	edi		; LPSTR
		call	sub_405939
		jmp	loc_402938
; ---------------------------------------------------------------------------

loc_402616:				; CODE XREF: sub_401439+11B0j
					; sub_401439+11B6j
		mov	al, [ebp+Buffer]
		cmp	byte ptr [ebp+FilePart+3], al
		jz	short loc_40262C
		cmp	al, 0Dh
		jz	short loc_402626
		cmp	al, 0Ah
		jnz	short loc_40262C

loc_402626:				; CODE XREF: sub_401439+11E7j
		mov	[esi+edi], al
		inc	esi
		jmp	short loc_40263F
; ---------------------------------------------------------------------------

loc_40262C:				; CODE XREF: sub_401439+11E3j
					; sub_401439+11EBj
		push	1		; dwMoveMethod
		push	ebx		; lpDistanceToMoveHigh
		push	0FFFFFFFFh	; lDistanceToMove
		push	[ebp+ExitCode.bottom] ;	hFile
		call	ds:SetFilePointer	; SetFilePointer
		jmp	short loc_40263F
; ---------------------------------------------------------------------------

loc_40263C:				; CODE XREF: sub_401439+116Fj
					; sub_401439+1184j
		mov	esi, [ebp+nNumberOfBytesToWrite]

loc_40263F:				; CODE XREF: sub_401439+119Fj
					; sub_401439+11A5j ...
		mov	[esi+edi], bl
		cmp	esi, ebx
		jmp	loc_4015CA
; ---------------------------------------------------------------------------

loc_402649:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		cmp	[esi], bl	; jumptable 0040148C case 58
		jz	loc_40292F	; default
					; jumptable 0040148C cases 65,66
		push	[ebp+nShowCmd.dwLowDateTime] ; dwMoveMethod
		push	ebx		; lpDistanceToMoveHigh
		push	2
		call	sub_402A7D
		push	eax		; lDistanceToMove
		push	esi
		call	sub_405952
		push	eax		; hFile
		call	ds:SetFilePointer	; SetFilePointer
		cmp	[ebp+dwFileAttributes],	ebx
		jl	loc_40292F	; default
					; jumptable 0040148C cases 65,66
		jmp	loc_4028D5
; ---------------------------------------------------------------------------

loc_402678:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		cmp	[esi], bl	; jumptable 0040148C case 59
		jz	loc_40292F	; default
					; jumptable 0040148C cases 65,66
		push	esi
		call	sub_405952
		push	eax		; hFindFile
		call	ds:FindClose	; FindClose
		jmp	loc_40292F	; default
					; jumptable 0040148C cases 65,66
; ---------------------------------------------------------------------------

loc_402692:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		cmp	[edi], bl	; jumptable 0040148C case 60
		jz	short loc_4026AE
		lea	eax, [ebp+FindFileData]
		push	eax		; lpFindFileData
		push	edi
		call	sub_405952
		push	eax		; hFindFile
		call	ds:FindNextFileA	; FindNextFileA
		test	eax, eax
		jnz	short loc_4026ED

loc_4026AE:				; CODE XREF: sub_401439+34Cj
					; sub_401439+125Bj
		mov	[ebp+var_4], 1
		mov	[esi], bl
		jmp	loc_40292F	; default
					; jumptable 0040148C cases 65,66
; ---------------------------------------------------------------------------

loc_4026BC:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		push	2		; jumptable 0040148C case 61
		call	sub_402A9A
		lea	ecx, [ebp+FindFileData]
		push	ecx		; lpFindFileData
		push	eax		; lpFileName
		call	ds:FindFirstFileA	; FindFirstFileA
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_4026E6
		mov	[edi], bl

loc_4026D8:				; CODE XREF: sub_401439+10F7j
		mov	[esi], bl

loc_4026DA:				; CODE XREF: sub_401439+197j
					; sub_401439+29Ej ...
		mov	[ebp+var_4], 1
		jmp	loc_40292F	; default
					; jumptable 0040148C cases 65,66
; ---------------------------------------------------------------------------

loc_4026E6:				; CODE XREF: sub_401439+129Bj
		push	eax		; int
		push	edi		; LPSTR
		call	sub_405939

loc_4026ED:				; CODE XREF: sub_401439+1273j
		lea	eax, [ebp+FindFileData.cFileName]
		push	eax
		push	esi
		jmp	loc_402855
; ---------------------------------------------------------------------------

loc_4026FA:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		push	ebx		; jumptable 0040148C case 62
		mov	[ebp+ExitCode.bottom], 0FFFFFD66h
		call	sub_402A9A
		mov	esi, eax
		push	esi
		call	sub_405554
		test	eax, eax
		push	esi		; lpString2
		jz	short loc_402721
		mov	esi, offset String1
		push	esi		; lpString1
		call	sub_4059DB
		jmp	short loc_402741
; ---------------------------------------------------------------------------

loc_402721:				; CODE XREF: sub_401439+12D9j
		push	offset byte_435400 ; lpString2
		push	offset String1	; lpString1
		call	sub_4059DB
		push	eax		; lpString1
		call	sub_4054E8
		push	eax		; lpString1
		call	lstrcatA	; lstrcatA
		mov	esi, offset String1

loc_402741:				; CODE XREF: sub_401439+12E6j
		push	esi		; lpszCurrent
		call	sub_405C17
		push	2		; dwCreationDisposition
		push	40000000h	; dwDesiredAccess
		push	esi		; lpFileName
		call	sub_4056AC
		cmp	eax, 0FFFFFFFFh
		mov	[ebp+FilePart],	eax
		jz	loc_402802
		mov	eax, dwBytes
		mov	esi, ds:GlobalAlloc
		push	eax		; dwBytes
		push	40h		; uFlags
		mov	[ebp+nNumberOfBytesToWrite], eax
		call	esi ; GlobalAlloc
		mov	edi, eax
		cmp	edi, ebx
		jz	short loc_4027F4
		push	ebx		; lDistanceToMove
		call	sub_40311B
		push	[ebp+nNumberOfBytesToWrite] ; NumberOfBytesRead
		push	edi		; lpBuffer
		call	sub_4030E9
		push	[ebp+nDenominator] ; dwBytes
		push	40h		; uFlags
		call	esi ; GlobalAlloc
		mov	esi, eax
		cmp	esi, ebx
		mov	[ebp+lpMultiByteStr], esi
		jz	short loc_4027CC
		push	[ebp+nDenominator] ; Buffer
		push	esi		; int
		push	ebx		; hFile
		push	[ebp+dwFileAttributes] ; nDenominator
		call	sub_402EBD
		jmp	short loc_4027BF
; ---------------------------------------------------------------------------

loc_4027A7:				; CODE XREF: sub_401439+1388j
		mov	ecx, [esi]
		mov	eax, [esi+4]
		add	esi, 8
		push	ecx
		add	eax, edi
		push	esi
		push	eax
		mov	[ebp+ExitCode.right], ecx
		call	sub_40568C
		add	esi, [ebp+ExitCode.right]

loc_4027BF:				; CODE XREF: sub_401439+136Cj
		cmp	[esi], bl
		jnz	short loc_4027A7
		push	[ebp+lpMultiByteStr] ; hMem
		call	ds:GlobalFree	; GlobalFree

loc_4027CC:				; CODE XREF: sub_401439+135Dj
		lea	eax, [ebp+lpValueName]
		push	ebx		; lpOverlapped
		push	eax		; lpNumberOfBytesWritten
		push	[ebp+nNumberOfBytesToWrite] ; nNumberOfBytesToWrite
		push	edi		; lpBuffer
		push	[ebp+FilePart]	; hFile
		call	ds:WriteFile	; WriteFile
		push	edi		; hMem
		call	ds:GlobalFree	; GlobalFree
		push	ebx		; Buffer
		push	ebx		; int
		push	[ebp+FilePart]	; hFile
		push	0FFFFFFFFh	; nDenominator
		call	sub_402EBD
		mov	[ebp+ExitCode.bottom], eax

loc_4027F4:				; CODE XREF: sub_401439+133Ej
		push	[ebp+FilePart]	; hObject
		call	ds:CloseHandle	; CloseHandle
		mov	esi, offset String1

loc_402802:				; CODE XREF: sub_401439+1321j
		cmp	[ebp+ExitCode.bottom], ebx
		push	0FFFFFFF3h
		pop	edi
		jge	short loc_40281B
		push	0FFFFFFEFh
		pop	edi
		push	esi		; lpFileName
		call	ds:DeleteFileA	; DeleteFileA
		mov	[ebp+var_4], 1

loc_40281B:				; CODE XREF: sub_401439+13CFj
		push	edi
		jmp	loc_4021E8
; ---------------------------------------------------------------------------

loc_402821:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		push	ebx		; jumptable 0040148C case 63
		call	sub_402A7D
		cmp	eax, dword_42F44C
		mov	[ebp+FilePart],	eax
		jnb	loc_4026DA
		mov	esi, eax
		mov	eax, [ebp+nDenominator]
		imul	esi, 418h
		add	esi, dword_42F448
		cmp	eax, ebx
		jl	short loc_402862
		mov	ecx, [esi+eax*4]
		jnz	short loc_40285F
		add	esi, 18h
		push	esi		; lpString2
		push	edi		; lpString1

loc_402855:				; CODE XREF: sub_401439+784j
					; sub_401439+12BCj
		call	sub_4059DB
		jmp	loc_40292F	; default
					; jumptable 0040148C cases 65,66
; ---------------------------------------------------------------------------

loc_40285F:				; CODE XREF: sub_401439+1415j
		push	ecx
		jmp	short loc_4028D6
; ---------------------------------------------------------------------------

loc_402862:				; CODE XREF: sub_401439+1410j
		or	ecx, 0FFFFFFFFh
		sub	ecx, eax
		mov	[ebp+nDenominator], ecx
		jz	short loc_402878
		push	1
		call	sub_402A7D
		mov	[ebp+dwFileAttributes],	eax
		jmp	short loc_402888
; ---------------------------------------------------------------------------

loc_402878:				; CODE XREF: sub_401439+1431j
		push	[ebp+nShowCmd.dwHighDateTime] ;	lpString2
		lea	eax, [esi+18h]
		push	eax		; lpString1
		call	sub_4059FD
		or	byte ptr [esi+9], 1

loc_402888:				; CODE XREF: sub_401439+143Dj
		mov	eax, [ebp+nDenominator]
		mov	ecx, [ebp+dwFileAttributes]
		mov	[esi+eax*4], ecx
		cmp	[ebp+nShowCmd.dwLowDateTime], ebx
		jz	loc_40292F	; default
					; jumptable 0040148C cases 65,66
		push	[ebp+FilePart]
		call	sub_40117D
		jmp	loc_40292F	; default
					; jumptable 0040148C cases 65,66
; ---------------------------------------------------------------------------

loc_4028A7:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		push	ebx		; jumptable 0040148C case 64
		call	sub_402A7D
		cmp	eax, 20h
		jnb	loc_4026DA
		cmp	[ebp+nShowCmd.dwLowDateTime], ebx
		jz	short loc_4028DE
		cmp	[ebp+nDenominator], ebx
		jz	short loc_4028CF
		push	eax
		call	sub_401299
		push	ebx
		push	ebx
		call	sub_4011EF
		jmp	short loc_40292F ; default
					; jumptable 0040148C cases 65,66
; ---------------------------------------------------------------------------

loc_4028CF:				; CODE XREF: sub_401439+1485j
		push	ebx
		call	sub_4012E2

loc_4028D5:				; CODE XREF: sub_401439+123Aj
		push	eax		; int

loc_4028D6:				; CODE XREF: sub_401439+1427j
		push	edi		; LPSTR

loc_4028D7:				; CODE XREF: sub_401439+149j
		call	sub_405939
		jmp	short loc_40292F ; default
					; jumptable 0040148C cases 65,66
; ---------------------------------------------------------------------------

loc_4028DE:				; CODE XREF: sub_401439+1480j
		cmp	[ebp+nDenominator], ebx
		jz	short loc_4028F5
		mov	edx, dword_42F428
		mov	ecx, [ebp+dwFileAttributes]
		mov	[edx+eax*4+94h], ecx
		jmp	short loc_40292F ; default
					; jumptable 0040148C cases 65,66
; ---------------------------------------------------------------------------

loc_4028F5:				; CODE XREF: sub_401439+14A8j
		mov	ecx, dword_42F428
		push	dword ptr [ecx+eax*4+94h] ; lpString2
		push	edi		; lpString1
		call	sub_4059FD
		jmp	short loc_40292F ; default
					; jumptable 0040148C cases 65,66
; ---------------------------------------------------------------------------

loc_40290A:				; CODE XREF: sub_401439+53j
					; DATA XREF: .text:off_402941o
		mov	ecx, dword_42B8A0 ; jumptable 0040148C case 67
		push	ebx		; lParam
		and	ecx, eax
		push	ecx		; wParam
		push	0Bh		; Msg
		push	[ebp+lpString]	; hWnd
		call	ds:SendMessageA	; SendMessageA
		cmp	[ebp+var_24], ebx
		jz	short loc_40292F ; default
					; jumptable 0040148C cases 65,66
		push	ebx		; bErase
		push	ebx		; lpRect
		push	[ebp+lpString]	; hWnd
		call	ds:InvalidateRect	; InvalidateRect

loc_40292F:				; CODE XREF: sub_401439+4Dj
					; sub_401439+53j ...
		mov	eax, [ebp+var_4] ; default
					; jumptable 0040148C cases 65,66
		add	dword_42F4A8, eax

loc_402938:				; CODE XREF: sub_401439+48Fj
					; sub_401439+11D8j
		xor	eax, eax

loc_40293A:				; CODE XREF: sub_401439+53j
					; sub_401439+9Ej ...
		pop	edi		; jumptable 0040148C case 2
		pop	esi
		pop	ebx
		leave
		retn	4
sub_401439	endp

; ---------------------------------------------------------------------------
off_402941	dd offset loc_40293A, offset loc_401493, offset	loc_40149F
					; DATA XREF: sub_401439+53r
		dd offset loc_4014BA, offset loc_4014DC, offset	loc_401518 ; jump table	for switch statement
		dd offset loc_401532, offset loc_401587, offset	loc_4015B7
		dd offset loc_4015D5, offset loc_40165A, offset	loc_401540
		dd offset loc_401556, offset loc_401577, offset	loc_40166B
		dd offset loc_4016FF, offset loc_401763, offset	loc_40178A
		dd offset loc_40179D, offset loc_40194C, offset	loc_40194F
		dd offset loc_401981, offset loc_401996, offset	loc_4019A8
		dd offset loc_401A29, offset loc_401A5A, offset	loc_401A91
		dd offset loc_401AC3, offset loc_401B50, offset	loc_401B71
		dd offset loc_401C19, offset loc_401C19, offset	loc_401CDB
		dd offset loc_401CF8, offset loc_401D13, offset	loc_401D32
		dd offset loc_401D8E, offset loc_401E08, offset	loc_401E34
		dd offset loc_401E9C, offset loc_401F1B, offset	loc_401F4B
		dd offset loc_401FDC, offset loc_4020A6, offset	loc_4021F6
		dd offset loc_402279, offset loc_4022A8, offset	loc_4022EA
		dd offset loc_40232A, offset loc_402386, offset	loc_40242A
		dd offset loc_4024A5, offset loc_402506, offset	loc_40251A
		dd offset loc_40253C, offset loc_402584, offset	loc_402649
		dd offset loc_402678, offset loc_402692, offset	loc_4026BC
		dd offset loc_4026FA, offset loc_402821, offset	loc_4028A7
		dd offset loc_40292F, offset loc_40292F, offset	loc_40290A
off_402A49	dd offset loc_401AE4	; DATA XREF: sub_401439+6A4r
		dd offset loc_401AE8	; jump table for switch	statement
		dd offset loc_401AEC
		dd offset loc_401AF3
		dd offset loc_401B00
		dd offset loc_401B04
		dd offset loc_401B08
		dd offset loc_401B0C
		dd offset loc_401B15
		dd offset loc_401B1F
		dd offset loc_401B2C
		dd offset loc_401B44
		dd offset loc_401B48

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



sub_402A7D	proc near		; CODE XREF: sub_401439+E0p
					; sub_401439+109p ...

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		mov	ecx, dword_40943C
		push	dword ptr [ecx+eax*4] ;	lpString2
		push	0		; lpString1
		call	sub_4059FD
		push	eax
		call	sub_405952
		retn	4
sub_402A7D	endp


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



sub_402A9A	proc near		; CODE XREF: sub_401439+180p
					; sub_401439+19Ep ...

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		test	esi, esi
		push	edi
		mov	eax, esi
		jge	short loc_402AA8
		neg	eax

loc_402AA8:				; CODE XREF: sub_402A9A+Aj
		mov	edx, dword_40943C
		mov	ecx, eax
		and	ecx, 0Fh
		sar	eax, 4
		push	dword ptr [edx+ecx*4] ;	lpString2
		shl	eax, 0Ah
		add	eax, offset FileName
		push	eax		; lpString1
		call	sub_4059FD
		test	esi, esi
		mov	edi, eax
		jge	short loc_402AD3
		push	edi		; lpszCurrent
		call	sub_405C17

loc_402AD3:				; CODE XREF: sub_402A9A+31j
		mov	eax, edi
		pop	edi
		pop	esi
		retn	4
sub_402A9A	endp


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

; Attributes: bp-based frame

; int __stdcall	sub_402ADA(HKEY	hKey,LPCSTR lpSubKey,int)

sub_402ADA	proc near		; CODE XREF: sub_401439+F39p
					; sub_402ADA+42p

SubKey		= byte ptr -10Ch
phkResult	= dword	ptr -4
hKey		= dword	ptr  8
lpSubKey	= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 10Ch
		push	ebx
		push	esi
		lea	eax, [ebp+phkResult]
		push	edi
		push	eax		; phkResult
		xor	ebx, ebx
		push	8		; samDesired
		push	ebx		; ulOptions
		push	[ebp+lpSubKey]	; lpSubKey
		push	[ebp+hKey]	; hKey
		call	ds:RegOpenKeyExA	; RegOpenKeyExA
		cmp	eax, ebx
		jnz	short loc_402B4C
		mov	esi, ds:RegEnumKeyA
		mov	edi, 105h
		jmp	short loc_402B25
; ---------------------------------------------------------------------------

loc_402B0C:				; CODE XREF: sub_402ADA+5Bj
		cmp	[ebp+arg_8], ebx
		jnz	short loc_402B53
		lea	eax, [ebp+SubKey]
		push	ebx		; int
		push	eax		; lpSubKey
		push	[ebp+phkResult]	; hKey
		call	sub_402ADA
		test	eax, eax
		jnz	short loc_402B37

loc_402B25:				; CODE XREF: sub_402ADA+30j
		lea	eax, [ebp+SubKey]
		push	edi		; cchName
		push	eax		; lpName
		push	ebx		; dwIndex
		push	[ebp+phkResult]	; hKey
		call	esi ; RegEnumKeyA
		test	eax, eax
		jz	short loc_402B0C

loc_402B37:				; CODE XREF: sub_402ADA+49j
		push	[ebp+phkResult]	; hKey
		call	ds:RegCloseKey	; RegCloseKey
		push	[ebp+lpSubKey]	; lpSubKey
		push	[ebp+hKey]	; hKey
		call	ds:RegDeleteKeyA	; RegDeleteKeyA

loc_402B4C:				; CODE XREF: sub_402ADA+23j
					; sub_402ADA+85j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	0Ch
; ---------------------------------------------------------------------------

loc_402B53:				; CODE XREF: sub_402ADA+35j
		push	[ebp+phkResult]	; hKey
		call	ds:RegCloseKey	; RegCloseKey
		xor	eax, eax
		inc	eax
		jmp	short loc_402B4C
sub_402ADA	endp


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



sub_402B61	proc near		; CODE XREF: sub_401439+F33p
					; sub_401439+F4Ep ...

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		test	eax, eax
		jnz	short locret_402B73
		mov	eax, dword_42F4A4
		add	eax, 80000001h

locret_402B73:				; CODE XREF: sub_402B61+6j
		retn	4
sub_402B61	endp


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

; Attributes: bp-based frame

; int __stdcall	sub_402B76(REGSAM phkResult)

sub_402B76	proc near		; CODE XREF: sub_401439+EF8p
					; sub_401439+FF6p ...

phkResult	= dword	ptr  8

		push	ebp
		mov	ebp, esp
		lea	eax, [ebp+phkResult]
		push	eax		; phkResult
		push	[ebp+phkResult]	; samDesired
		push	0		; ulOptions
		push	22h
		call	sub_402A9A
		push	eax		; lpSubKey
		mov	eax, dword_40943C
		push	dword ptr [eax+4]
		call	sub_402B61
		push	eax		; hKey
		call	ds:RegOpenKeyExA	; RegOpenKeyExA
		neg	eax
		sbb	eax, eax
		not	eax
		and	eax, [ebp+phkResult]
		pop	ebp
		retn	4
sub_402B76	endp


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

; Attributes: bp-based frame

; INT_PTR __stdcall DialogFunc(HWND,UINT,WPARAM,LPARAM)

DialogFunc	proc near		; DATA XREF: sub_402C37+157o

hWnd		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		cmp	[ebp+arg_4], 110h
		push	esi
		push	edi
		mov	edi, [ebp+hWnd]
		mov	esi, 113h
		jnz	short loc_402BDC
		push	0		; lpTimerFunc
		push	0FAh		; uElapse
		push	1		; nIDEvent
		push	edi		; hWnd
		call	ds:SetTimer	; SetTimer
		mov	eax, [ebp+arg_C]
		mov	[ebp+arg_4], esi
		mov	dword_40B048, eax

loc_402BDC:				; CODE XREF: DialogFunc+14j
		cmp	[ebp+arg_4], esi
		jnz	short loc_402C2F
		mov	ecx, lDistanceToMove
		mov	eax, nDenominator
		cmp	ecx, eax
		jl	short loc_402BF2
		mov	ecx, eax

loc_402BF2:				; CODE XREF: DialogFunc+43j
		push	eax		; nDenominator
		push	64h		; nNumerator
		push	ecx		; nNumber
		call	ds:MulDiv	; MulDiv
		push	eax
		mov	esi, offset String
		push	dword_40B048	; LPCSTR
		push	esi		; LPSTR
		call	ds:wsprintfA	; wsprintfA
		add	esp, 0Ch
		push	esi		; lpString
		push	edi		; hWnd
		call	ds:SetWindowTextA	; SetWindowTextA
		push	esi		; lpString
		push	406h		; nIDDlgItem
		push	edi		; hDlg
		call	SetDlgItemTextA	; SetDlgItemTextA
		push	5		; nCmdShow
		push	edi		; hWnd
		call	ds:ShowWindow	; ShowWindow

loc_402C2F:				; CODE XREF: DialogFunc+34j
		pop	edi
		xor	eax, eax
		pop	esi
		pop	ebp
		retn	10h
DialogFunc	endp


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

; Attributes: bp-based frame


sub_402C37	proc near		; CODE XREF: start+160p

var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
dwBytes		= dword	ptr -18h
var_14		= dword	ptr -14h
hFile		= dword	ptr -10h
var_C		= dword	ptr -0Ch
Buffer		= dword	ptr -8
hWnd		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 2Ch
		push	ebx
		push	esi
		xor	esi, esi
		push	edi
		mov	[ebp+hWnd], esi
		call	ds:GetTickCount	; GetTickCount
		mov	[ebp+var_C], esi
		mov	[ebp+Buffer], esi
		mov	esi, offset szStart
		push	400h		; nSize
		push	esi		; lpFilename
		mov	edi, eax
		push	hModule		; hModule
		add	edi, 3E8h
		call	ds:GetModuleFileNameA	; GetModuleFileNameA
		push	3		; dwCreationDisposition
		push	80000000h	; dwDesiredAccess
		push	esi		; lpFileName
		call	sub_4056AC
		mov	ebx, eax
		cmp	ebx, 0FFFFFFFFh
		mov	[ebp+hFile], ebx
		mov	hFile, ebx
		jnz	short loc_402C97
		mov	eax, offset aErrorLaunching ; "Error launching installer"
		jmp	loc_402EB6
; ---------------------------------------------------------------------------

loc_402C97:				; CODE XREF: sub_402C37+54j
		push	esi		; lpszStart
		call	sub_40552F
		push	0		; lpFileSizeHigh
		push	ebx		; hFile
		call	ds:GetFileSize	; GetFileSize
		test	eax, eax
		mov	nDenominator, eax
		mov	esi, eax
		jle	loc_402DDE

loc_402CB5:				; CODE XREF: sub_402C37+192j
		mov	eax, dwBytes
		mov	ebx, esi
		neg	eax
		sbb	eax, eax
		and	eax, 7E00h
		add	eax, 200h
		cmp	esi, eax
		jl	short loc_402CD0
		mov	ebx, eax

loc_402CD0:				; CODE XREF: sub_402C37+95j
		push	ebx		; NumberOfBytesRead
		push	offset dword_420C58 ; lpBuffer
		call	sub_4030E9
		test	eax, eax
		jz	loc_402E49
		xor	eax, eax
		cmp	dwBytes, eax
		jnz	short loc_402D6C
		push	1Ch
		lea	eax, [ebp+var_2C]
		push	offset dword_420C58
		push	eax
		call	sub_40568C
		mov	ecx, [ebp+var_2C]
		test	ecx, 0FFFFFFF0h
		jnz	loc_402DA6
		cmp	[ebp+var_28], 0DEADBEEFh
		jnz	loc_402DA6
		cmp	[ebp+var_1C], 74736E49h
		jnz	loc_402DA6
		cmp	[ebp+var_20], 74666F73h
		jnz	short loc_402DA6
		cmp	[ebp+var_24], 6C6C754Eh
		jnz	short loc_402DA6
		mov	eax, [ebp+var_14]
		cmp	eax, esi
		jg	loc_402E42
		or	[ebp+arg_0], ecx
		mov	edx, lDistanceToMove
		test	byte ptr [ebp+arg_0], 8
		mov	dwBytes, edx
		jnz	short loc_402D5E
		test	byte ptr [ebp+arg_0], 4
		jnz	short loc_402DCF

loc_402D5E:				; CODE XREF: sub_402C37+11Fj
		inc	[ebp+Buffer]
		lea	esi, [eax-4]
		cmp	ebx, esi
		jbe	short loc_402DA6
		mov	ebx, esi
		jmp	short loc_402DA6
; ---------------------------------------------------------------------------

loc_402D6C:				; CODE XREF: sub_402C37+B4j
		test	byte ptr [ebp+arg_0], 2
		jnz	short loc_402DA6
		cmp	[ebp+hWnd], eax
		jz	short loc_402D7F
		push	eax		; wMsgFilterMax
		call	sub_405D18
		jmp	short loc_402DA6
; ---------------------------------------------------------------------------

loc_402D7F:				; CODE XREF: sub_402C37+13Ej
		call	ds:GetTickCount	; GetTickCount
		cmp	eax, edi
		jbe	short loc_402DA6
		push	offset aVerifyingInsta ; "verifying installer: %d%%"
		push	offset DialogFunc ; lpDialogFunc
		push	0		; hWndParent
		push	6Fh		; lpTemplateName
		push	hModule		; hInstance
		call	ds:CreateDialogParamA	; CreateDialogParamA
		mov	[ebp+hWnd], eax

loc_402DA6:				; CODE XREF: sub_402C37+CFj
					; sub_402C37+DCj ...
		cmp	esi, nDenominator
		jge	short loc_402DBF
		push	ebx
		push	offset dword_420C58
		push	[ebp+var_C]
		call	sub_405D4B
		mov	[ebp+var_C], eax

loc_402DBF:				; CODE XREF: sub_402C37+175j
		add	lDistanceToMove, ebx
		sub	esi, ebx
		test	esi, esi
		jg	loc_402CB5

loc_402DCF:				; CODE XREF: sub_402C37+125j
		cmp	[ebp+hWnd], 0
		jz	short loc_402DDE
		push	[ebp+hWnd]	; hWnd
		call	ds:DestroyWindow	; DestroyWindow

loc_402DDE:				; CODE XREF: sub_402C37+78j
					; sub_402C37+19Cj
		xor	edi, edi
		cmp	dwBytes, edi
		jz	short loc_402E42
		cmp	[ebp+Buffer], edi
		jz	short loc_402E0F
		push	lDistanceToMove	; lDistanceToMove
		call	sub_40311B
		lea	eax, [ebp+Buffer]
		push	4		; NumberOfBytesRead
		push	eax		; lpBuffer
		call	sub_4030E9
		test	eax, eax
		jz	short loc_402E42
		mov	eax, [ebp+var_C]
		cmp	eax, [ebp+Buffer]
		jnz	short loc_402E42

loc_402E0F:				; CODE XREF: sub_402C37+1B4j
		push	[ebp+dwBytes]	; dwBytes
		push	40h		; uFlags
		call	ds:GlobalAlloc	; GlobalAlloc
		mov	esi, eax
		mov	eax, dwBytes
		add	eax, 1Ch
		push	eax		; lDistanceToMove
		call	sub_40311B
		push	[ebp+dwBytes]	; Buffer
		push	esi		; int
		push	edi		; hFile
		push	0FFFFFFFFh	; nDenominator
		call	sub_402EBD
		cmp	eax, [ebp+dwBytes]
		jz	short loc_402E5A
		push	esi		; hMem
		call	ds:GlobalFree	; GlobalFree

loc_402E42:				; CODE XREF: sub_402C37+106j
					; sub_402C37+1AFj ...
		mov	eax, offset aTheInstallerYo ; "The installer you are trying to use is "...
		jmp	short loc_402EB6
; ---------------------------------------------------------------------------

loc_402E49:				; CODE XREF: sub_402C37+A6j
		cmp	[ebp+hWnd], 0
		jz	short loc_402E42
		push	[ebp+hWnd]	; hWnd
		call	ds:DestroyWindow	; DestroyWindow
		jmp	short loc_402E42
; ---------------------------------------------------------------------------

loc_402E5A:				; CODE XREF: sub_402C37+202j
		test	byte ptr [ebp+arg_0], 2
		mov	dword_42F428, esi
		jz	short loc_402E69
		or	dword ptr [esi], 8

loc_402E69:				; CODE XREF: sub_402C37+22Dj
		mov	eax, [esi]
		and	eax, 18h
		test	byte ptr [ebp+var_2C], 1
		mov	dword_42F4C0, eax
		mov	eax, [esi]
		mov	dword_42F430, eax
		jz	short loc_402E86
		inc	dword_42F434

loc_402E86:				; CODE XREF: sub_402C37+247j
		push	8
		lea	eax, [esi+44h]
		pop	ecx

loc_402E8C:				; CODE XREF: sub_402C37+25Bj
		sub	eax, 8
		add	[eax], esi
		dec	ecx
		jnz	short loc_402E8C
		push	1		; dwMoveMethod
		push	edi		; lpDistanceToMoveHigh
		push	edi		; lDistanceToMove
		push	[ebp+hFile]	; hFile
		call	ds:SetFilePointer	; SetFilePointer
		mov	[esi+3Ch], eax
		add	esi, 4
		push	40h
		push	esi
		push	offset dword_42F440
		call	sub_40568C
		xor	eax, eax

loc_402EB6:				; CODE XREF: sub_402C37+5Bj
					; sub_402C37+210j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_402C37	endp


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

; Attributes: bp-based frame

; int __stdcall	sub_402EBD(int nDenominator,HANDLE hFile,int,int Buffer)

sub_402EBD	proc near		; CODE XREF: sub_401439+4ACp
					; sub_401439+FCBp ...

String2		= byte ptr -58h
var_18		= dword	ptr -18h
NumberOfBytesWritten= dword ptr	-14h
var_10		= dword	ptr -10h
lpBuffer	= dword	ptr -0Ch
NumberOfBytesRead= dword ptr -8
var_4		= dword	ptr -4
nDenominator	= dword	ptr  8
hFile		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
Buffer		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		sub	esp, 58h
		push	ebx
		push	esi
		mov	esi, [ebp+Buffer]
		push	edi
		mov	edi, [ebp+arg_8]
		mov	[ebp+NumberOfBytesRead], esi
		test	edi, edi
		jnz	short loc_402EDA
		mov	[ebp+NumberOfBytesRead], 8000h

loc_402EDA:				; CODE XREF: sub_402EBD+14j
		and	[ebp+var_4], 0
		mov	[ebp+lpBuffer],	edi
		test	edi, edi
		jnz	short loc_402EEC
		mov	[ebp+lpBuffer],	offset dword_418C58

loc_402EEC:				; CODE XREF: sub_402EBD+26j
		mov	eax, [ebp+nDenominator]
		test	eax, eax
		jl	short loc_402F01
		mov	ecx, dword_42F478
		add	ecx, eax
		push	ecx		; lDistanceToMove
		call	sub_40311B

loc_402F01:				; CODE XREF: sub_402EBD+34j
		lea	eax, [ebp+Buffer]
		push	4		; NumberOfBytesRead
		push	eax		; lpBuffer
		call	sub_4030E9
		test	eax, eax
		jz	loc_403094
		test	byte ptr [ebp+Buffer+3], 80h
		jz	loc_40307D
		mov	ebx, ds:GetTickCount
		call	ebx ; GetTickCount
		and	dword_40B57C, 0
		and	dword_40B578, 0
		and	[ebp+Buffer], 7FFFFFFFh
		mov	[ebp+var_10], eax
		mov	eax, offset dword_40CC00
		mov	dword_40B060, 8
		mov	dword_414C08, eax
		mov	dword_414C04, eax
		mov	eax, [ebp+Buffer]
		mov	dword_414C00, offset dword_414C00
		mov	[ebp+nDenominator], eax
		jle	loc_4030DF

loc_402F6D:				; CODE XREF: sub_402EBD+1B0j
		mov	esi, 4000h
		cmp	[ebp+Buffer], esi
		jge	short loc_402F7A
		mov	esi, [ebp+Buffer]

loc_402F7A:				; CODE XREF: sub_402EBD+B8j
		mov	edi, offset dword_414C58
		push	esi		; NumberOfBytesRead
		push	edi		; lpBuffer
		call	sub_4030E9
		test	eax, eax
		jz	loc_403094
		sub	[ebp+Buffer], esi
		mov	dword_40B050, edi
		mov	dword_40B054, esi

loc_402F9D:				; CODE XREF: sub_402EBD+1A5j
		mov	edi, [ebp+lpBuffer]
		mov	eax, [ebp+NumberOfBytesRead]
		push	offset dword_40B050
		mov	dword_40B058, edi
		mov	dword_40B05C, eax
		call	sub_405DB9
		test	eax, eax
		mov	[ebp+var_18], eax
		jl	loc_403075
		mov	esi, dword_40B058
		sub	esi, edi
		call	ebx ; GetTickCount
		test	byte ptr dword_4092A0, 1
		mov	edi, eax
		jz	short loc_40301B
		sub	eax, [ebp+var_10]
		cmp	eax, 0C8h
		ja	short loc_402FE8
		cmp	[ebp+Buffer], 0
		jnz	short loc_40301B

loc_402FE8:				; CODE XREF: sub_402EBD+123j
		mov	eax, [ebp+nDenominator]
		push	[ebp+nDenominator] ; nDenominator
		sub	eax, [ebp+Buffer]
		push	64h		; nNumerator
		push	eax		; nNumber
		call	ds:MulDiv	; MulDiv
		push	eax
		lea	eax, [ebp+String2]
		push	offset a___D	; "... %d%%"
		push	eax		; LPSTR
		call	ds:wsprintfA	; wsprintfA
		add	esp, 0Ch
		lea	eax, [ebp+String2]
		push	eax		; lpString2
		push	0		; int
		call	sub_404D7E
		mov	[ebp+var_10], edi

loc_40301B:				; CODE XREF: sub_402EBD+119j
					; sub_402EBD+129j
		xor	eax, eax
		cmp	esi, eax
		jz	short loc_40306A
		cmp	[ebp+arg_8], eax
		jnz	short loc_403046
		push	eax		; lpOverlapped
		lea	eax, [ebp+NumberOfBytesWritten]
		push	eax		; lpNumberOfBytesWritten
		push	esi		; nNumberOfBytesToWrite
		push	[ebp+lpBuffer]	; lpBuffer
		push	[ebp+hFile]	; hFile
		call	ds:WriteFile	; WriteFile
		test	eax, eax
		jz	short loc_403079
		cmp	[ebp+NumberOfBytesWritten], esi
		jnz	short loc_403079
		add	[ebp+var_4], esi
		jmp	short loc_40305E
; ---------------------------------------------------------------------------

loc_403046:				; CODE XREF: sub_402EBD+167j
		sub	[ebp+NumberOfBytesRead], esi
		add	[ebp+var_4], esi
		mov	eax, dword_40B058
		cmp	[ebp+NumberOfBytesRead], 1
		mov	[ebp+lpBuffer],	eax
		jl	loc_4030DF

loc_40305E:				; CODE XREF: sub_402EBD+187j
		cmp	[ebp+var_18], 1
		jnz	loc_402F9D
		jmp	short loc_4030DF
; ---------------------------------------------------------------------------

loc_40306A:				; CODE XREF: sub_402EBD+162j
		cmp	[ebp+Buffer], eax
		jg	loc_402F6D
		jmp	short loc_4030DF
; ---------------------------------------------------------------------------

loc_403075:				; CODE XREF: sub_402EBD+100j
		push	0FFFFFFFCh
		jmp	short loc_403096
; ---------------------------------------------------------------------------

loc_403079:				; CODE XREF: sub_402EBD+17Dj
					; sub_402EBD+182j ...
		push	0FFFFFFFEh
		jmp	short loc_403096
; ---------------------------------------------------------------------------

loc_40307D:				; CODE XREF: sub_402EBD+5Bj
		test	edi, edi
		jz	short loc_4030D4
		cmp	[ebp+Buffer], esi
		jge	short loc_403089
		mov	esi, [ebp+Buffer]

loc_403089:				; CODE XREF: sub_402EBD+1C7j
		push	esi		; NumberOfBytesRead
		push	edi		; lpBuffer
		call	sub_4030E9
		test	eax, eax
		jnz	short loc_4030DC

loc_403094:				; CODE XREF: sub_402EBD+51j
					; sub_402EBD+CBj ...
		push	0FFFFFFFDh

loc_403096:				; CODE XREF: sub_402EBD+1BAj
					; sub_402EBD+1BEj
		pop	eax
		jmp	short loc_4030E2
; ---------------------------------------------------------------------------

loc_403099:				; CODE XREF: sub_402EBD+21Bj
		mov	esi, [ebp+NumberOfBytesRead]
		cmp	[ebp+Buffer], esi
		jge	short loc_4030A4
		mov	esi, [ebp+Buffer]

loc_4030A4:				; CODE XREF: sub_402EBD+1E2j
		mov	edi, offset dword_414C58
		push	esi		; NumberOfBytesRead
		push	edi		; lpBuffer
		call	sub_4030E9
		test	eax, eax
		jz	short loc_403094
		lea	eax, [ebp+arg_8]
		push	0		; lpOverlapped
		push	eax		; lpNumberOfBytesWritten
		push	esi		; nNumberOfBytesToWrite
		push	edi		; lpBuffer
		push	[ebp+hFile]	; hFile
		call	ds:WriteFile	; WriteFile
		test	eax, eax
		jz	short loc_403079
		cmp	esi, [ebp+arg_8]
		jnz	short loc_403079
		add	[ebp+var_4], esi
		sub	[ebp+Buffer], esi

loc_4030D4:				; CODE XREF: sub_402EBD+1C2j
		cmp	[ebp+Buffer], 0
		jg	short loc_403099
		jmp	short loc_4030DF
; ---------------------------------------------------------------------------

loc_4030DC:				; CODE XREF: sub_402EBD+1D5j
		mov	[ebp+var_4], esi

loc_4030DF:				; CODE XREF: sub_402EBD+AAj
					; sub_402EBD+19Bj ...
		mov	eax, [ebp+var_4]

loc_4030E2:				; CODE XREF: sub_402EBD+1DAj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	10h
sub_402EBD	endp


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

; Attributes: bp-based frame

; int __stdcall	sub_4030E9(LPVOID lpBuffer,DWORD NumberOfBytesRead)

sub_4030E9	proc near		; CODE XREF: sub_401439+134Ap
					; sub_402C37+9Fp ...

lpBuffer	= dword	ptr  8
NumberOfBytesRead= dword ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	esi
		mov	esi, [ebp+NumberOfBytesRead]
		lea	eax, [ebp+NumberOfBytesRead]
		push	0		; lpOverlapped
		push	eax		; lpNumberOfBytesRead
		push	esi		; nNumberOfBytesToRead
		push	[ebp+lpBuffer]	; lpBuffer
		push	hFile		; hFile
		call	ds:ReadFile	; ReadFile
		test	eax, eax
		jz	short loc_403114
		cmp	[ebp+NumberOfBytesRead], esi
		jnz	short loc_403114
		xor	eax, eax
		inc	eax
		jmp	short loc_403116
; ---------------------------------------------------------------------------

loc_403114:				; CODE XREF: sub_4030E9+1Fj
					; sub_4030E9+24j
		xor	eax, eax

loc_403116:				; CODE XREF: sub_4030E9+29j
		pop	esi
		pop	ebp
		retn	8
sub_4030E9	endp


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


; int __stdcall	sub_40311B(LONG	lDistanceToMove)

sub_40311B	proc near		; CODE XREF: sub_401439+1341p
					; sub_402C37+1BCp ...

lDistanceToMove	= dword	ptr  4

		push	0		; dwMoveMethod
		push	0		; lpDistanceToMoveHigh
		push	[esp+8+lDistanceToMove]	; lDistanceToMove
		push	hFile		; hFile
		call	ds:SetFilePointer	; SetFilePointer
		retn	4
sub_40311B	endp


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



sub_403132	proc near		; CODE XREF: start+63p	start+83p
		push	esi
		mov	esi, offset PathName
		push	esi		; lpszCurrent
		call	sub_405C17
		push	esi
		call	sub_405554
		test	eax, eax
		jnz	short loc_40314A
		pop	esi
		retn
; ---------------------------------------------------------------------------

loc_40314A:				; CODE XREF: sub_403132+14j
		push	esi		; lpString1
		call	sub_4054E8
		push	0		; lpSecurityAttributes
		push	esi		; lpPathName
		call	ds:CreateDirectoryA	; CreateDirectoryA
		push	esi		; lpPathName
		push	offset byte_435000 ; lpTempFileName
		call	sub_4056DB
		pop	esi
		retn
sub_403132	endp


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

; Attributes: noreturn

		public start

start		proc near

var_17C		= byte ptr -17Ch
lpString2	= dword	ptr -178h
uExitCode	= dword	ptr -174h
var_170		= dword	ptr -170h
var_16C		= byte ptr -16Ch
var_164		= dword	ptr -164h
psfi		= SHFILEINFOA ptr -160h

		sub	esp, 17Ch
		push	ebx
		push	ebp
		push	esi
		xor	esi, esi
		push	edi
		mov	[esp+18Ch+uExitCode], esi
		mov	ebp, offset Text ; "Error writing temporary file. Make sure"...
		mov	[esp+18Ch+var_17C], 20h
		call	ds:InitCommonControls	; InitCommonControls
		push	esi		; pvReserved
		call	ds:OleInitialize
		mov	dword_42F4D0, eax
		push	esi		; uFlags
		lea	eax, [esp+190h+psfi]
		push	160h		; cbFileInfo
		push	eax		; psfi
		push	esi		; dwFileAttributes
		push	offset pszPath	; pszPath
		call	ds:SHGetFileInfoA	; SHGetFileInfoA
		push	offset aNsisError ; "NSIS Error"
		push	offset Caption	; lpString1
		call	sub_4059DB
		mov	ebx, offset PathName
		push	ebx		; lpBuffer
		push	400h		; nBufferLength
		call	ds:GetTempPathA	; GetTempPathA
		call	sub_403132
		test	eax, eax
		jnz	short loc_4031F6
		push	3FBh		; uSize
		push	ebx		; lpBuffer
		call	ds:GetWindowsDirectoryA	; GetWindowsDirectoryA
		push	offset aTemp	; "\\Temp"
		push	ebx		; lpString1
		call	lstrcatA	; lstrcatA
		call	sub_403132
		test	eax, eax
		jz	loc_403332

loc_4031F6:				; CODE XREF: start+6Aj
		mov	edi, offset byte_435000
		push	edi		; lpFileName
		call	ds:DeleteFileA	; DeleteFileA
		call	ds:GetCommandLineA	; GetCommandLineA
		push	eax		; lpString2
		push	edi		; lpString1
		call	sub_4059DB
		push	0		; lpModuleName
		call	ds:GetModuleHandleA	; GetModuleHandleA
		cmp	ds:byte_435000,	22h
		mov	hModule, eax
		mov	eax, edi
		jnz	short loc_403231
		mov	[esp+18Ch+var_17C], 22h
		mov	eax, offset byte_435001

loc_403231:				; CODE XREF: start+BFj
		push	dword ptr [esp+18Ch+var_17C] ; char
		push	eax		; lpsz
		call	sub_405513
		push	eax		; lpsz
		call	ds:CharNextA	; CharNextA
		mov	[esp+18Ch+lpString2], eax
		jmp	short loc_4032AB
; ---------------------------------------------------------------------------

loc_403248:				; CODE XREF: start+149j
		cmp	cl, 20h
		jnz	short loc_403253

loc_40324D:				; CODE XREF: start+EBj
		inc	eax
		cmp	byte ptr [eax],	20h
		jz	short loc_40324D

loc_403253:				; CODE XREF: start+E5j
		cmp	byte ptr [eax],	22h
		mov	[esp+18Ch+var_17C], 20h
		jnz	short loc_403263
		inc	eax
		mov	[esp+18Ch+var_17C], 22h

loc_403263:				; CODE XREF: start+F5j
		cmp	byte ptr [eax],	2Fh
		jnz	short loc_40329B
		inc	eax
		cmp	byte ptr [eax],	53h
		jnz	short loc_40327C
		mov	cl, [eax+1]
		or	cl, 20h
		cmp	cl, 20h
		jnz	short loc_40327C
		or	esi, 2

loc_40327C:				; CODE XREF: start+106j start+111j
		cmp	dword ptr [eax], 4352434Eh
		jnz	short loc_403292
		mov	cl, [eax+4]
		or	cl, 20h
		cmp	cl, 20h
		jnz	short loc_403292
		or	esi, 4

loc_403292:				; CODE XREF: start+11Cj start+127j
		cmp	dword ptr [eax-2], 3D442F20h
		jz	short loc_4032B3

loc_40329B:				; CODE XREF: start+100j
		push	dword ptr [esp+18Ch+var_17C] ; char
		push	eax		; lpsz
		call	sub_405513
		cmp	byte ptr [eax],	22h
		jnz	short loc_4032AB
		inc	eax

loc_4032AB:				; CODE XREF: start+E0j	start+142j
		mov	cl, [eax]
		test	cl, cl
		jnz	short loc_403248
		jmp	short loc_4032C5
; ---------------------------------------------------------------------------

loc_4032B3:				; CODE XREF: start+133j
		and	byte ptr [eax-2], 0
		add	eax, 2
		push	eax		; lpString2
		push	offset byte_435400 ; lpString1
		call	sub_4059DB

loc_4032C5:				; CODE XREF: start+14Bj
		push	esi
		call	sub_402C37
		mov	ebp, eax
		test	ebp, ebp
		jnz	short loc_403332
		cmp	dword_42F434, eax
		jz	short loc_403322
		push	eax		; char
		push	edi		; lpsz
		call	sub_405513
		mov	esi, eax
		jmp	short loc_4032ED
; ---------------------------------------------------------------------------

loc_4032E4:				; CODE XREF: start+189j
		cmp	dword ptr [esi], 3D3F5F20h
		jz	short loc_4032F1
		dec	esi

loc_4032ED:				; CODE XREF: start+17Cj
		cmp	esi, edi
		jnb	short loc_4032E4

loc_4032F1:				; CODE XREF: start+184j
		cmp	esi, edi
		mov	ebp, offset aErrorLaunching ; "Error launching installer"
		jb	short loc_403358
		and	byte ptr [esi],	0
		add	esi, 4
		push	esi		; lpString2
		call	sub_4055C8
		test	eax, eax
		jz	short loc_403332
		push	esi		; lpString2
		push	offset byte_435400 ; lpString1
		call	sub_4059DB
		push	esi		; lpString2
		push	offset CurrentDirectory	; lpString1
		call	sub_4059DB
		xor	ebp, ebp

loc_403322:				; CODE XREF: start+171j
		or	dword_42F4CC, 0FFFFFFFFh
		call	sub_403542
		mov	[esp+18Ch+uExitCode], eax

loc_403332:				; CODE XREF: start+8Aj	start+169j ...
		call	sub_40351D
		call	ds:OleUninitialize
		test	ebp, ebp
		jz	loc_40346A
		push	200010h		; int
		push	ebp		; lpText
		call	sub_4052DB
		push	2		; uExitCode
		call	ds:ExitProcess	; ExitProcess
; ---------------------------------------------------------------------------

loc_403358:				; CODE XREF: start+192j
		push	offset aNsu_tmp	; "~nsu.tmp\\"
		push	ebx		; lpString1
		call	lstrcatA	; lstrcatA
		push	0		; lpSecurityAttributes
		push	ebx		; lpPathName
		call	ds:CreateDirectoryA	; CreateDirectoryA
		and	dword ptr [esp+18Ch+var_17C], 0
		mov	esi, offset CommandLine
		mov	edi, offset ExistingFileName

loc_40337B:				; CODE XREF: start+2F9j
		push	ebx		; lpString2
		push	esi		; lpString1
		mov	CommandLine, 22h
		call	lstrcatA	; lstrcatA
		push	offset aAu__exe	; "Au_.exe"
		push	esi		; lpString1
		call	lstrcatA	; lstrcatA
		push	(offset	CommandLine+1) ; lpFileName
		call	ds:DeleteFileA	; DeleteFileA
		test	ebp, ebp
		jz	loc_403450
		push	400h		; nSize
		push	edi		; lpFilename
		push	hModule		; hModule
		call	ds:GetModuleFileNameA	; GetModuleFileNameA
		lea	eax, dword_42945A[eax]
		push	(offset	aAu__exe+1) ; lpString2
		push	eax		; lpString1
		call	ds:lstrcmpiA	; lstrcmpiA
		test	eax, eax
		jz	loc_403332
		push	0		; bFailIfExists
		push	(offset	CommandLine+1) ; lpNewFileName
		push	edi		; lpExistingFileName
		call	ds:CopyFileA	; CopyFileA
		test	eax, eax
		jz	short loc_403450
		push	0		; NumberOfBytesRead
		push	428C61h		; int
		call	sub_405723
		cmp	ds:byte_435400,	0
		jz	short loc_403409
		push	offset byte_435400 ; lpString2
		push	edi		; lpString1
		call	sub_4059DB
		jmp	short loc_40340F
; ---------------------------------------------------------------------------

loc_403409:				; CODE XREF: start+294j
		push	edi		; lpszStart
		call	sub_40552F

loc_40340F:				; CODE XREF: start+2A1j
		push	offset asc_409218 ; "\"	"
		push	esi		; lpString1
		call	lstrcatA	; lstrcatA
		push	[esp+18Ch+lpString2] ; lpString2
		push	esi		; lpString1
		call	lstrcatA	; lstrcatA
		push	offset a_?	; " _?="
		push	esi		; lpString1
		call	lstrcatA	; lstrcatA
		push	edi		; lpString2
		push	esi		; lpString1
		call	lstrcatA	; lstrcatA
		push	esi		; lpString1
		call	sub_4054E8
		push	ebx		; lpCurrentDirectory
		push	esi		; lpCommandLine
		call	sub_405263
		test	eax, eax
		jz	short loc_403450
		push	eax		; hObject
		call	ds:CloseHandle	; CloseHandle
		xor	ebp, ebp

loc_403450:				; CODE XREF: start+23Dj start+27Fj ...
		inc	byte ptr aAu__exe ; "Au_.exe"
		inc	dword ptr [esp+18Ch+var_17C]
		cmp	dword ptr [esp+18Ch+var_17C], 1Ah
		jl	loc_40337B
		jmp	loc_403332
; ---------------------------------------------------------------------------

loc_40346A:				; CODE XREF: start+1D9j
		cmp	dword_42F4B4, 0
		jz	loc_403505
		mov	esi, offset aAdvapi32_dll ; "ADVAPI32.dll"
		push	offset ProcName	; "OpenProcessToken"
		push	esi		; lpLibFileName
		call	sub_405CEE
		push	offset aLookupprivileg ; "LookupPrivilegeValueA"
		push	esi		; lpLibFileName
		mov	ebp, eax
		call	sub_405CEE
		push	offset aAdjusttokenpri ; "AdjustTokenPrivileges"
		push	esi		; lpLibFileName
		mov	edi, eax
		call	sub_405CEE
		xor	esi, esi
		mov	ebx, eax
		cmp	ebp, esi
		jz	short loc_4034F1
		cmp	edi, esi
		jz	short loc_4034F1
		cmp	ebx, esi
		jz	short loc_4034F1
		lea	eax, [esp+18Ch+lpString2]
		push	eax
		push	28h
		call	ds:GetCurrentProcess	; GetCurrentProcess
		push	eax
		call	ebp
		test	eax, eax
		jz	short loc_4034F1
		lea	eax, [esp+18Ch+var_16C]
		push	eax
		push	offset aSeshutdownpriv ; "SeShutdownPrivilege"
		push	esi
		call	edi
		push	esi
		push	esi
		lea	eax, [esp+194h+var_170]
		push	esi
		push	eax
		push	esi
		push	[esp+1A0h+lpString2]
		mov	[esp+1A4h+var_170], 1
		mov	[esp+1A4h+var_164], 2
		call	ebx

loc_4034F1:				; CODE XREF: start+341j start+345j ...
		push	esi		; dwReason
		push	2		; uFlags
		call	ds:ExitWindowsEx	; ExitWindowsEx
		test	eax, eax
		jnz	short loc_403505
		push	9
		call	sub_401410

loc_403505:				; CODE XREF: start+30Bj start+396j
		mov	eax, dword_42F4CC
		cmp	eax, 0FFFFFFFFh
		jz	short loc_403513
		mov	[esp+18Ch+uExitCode], eax

loc_403513:				; CODE XREF: start+3A7j
		push	[esp+18Ch+uExitCode] ; uExitCode
		call	ds:ExitProcess	; ExitProcess
start		endp


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



sub_40351D	proc near		; CODE XREF: start:loc_403332p
		mov	eax, hFile
		cmp	eax, 0FFFFFFFFh
		jz	short loc_403535
		push	eax		; hObject
		call	ds:CloseHandle	; CloseHandle
		or	hFile, 0FFFFFFFFh

loc_403535:				; CODE XREF: sub_40351D+8j
		push	7		; int
		push	offset dword_436800 ; lpString1
		call	sub_40531D
		retn
sub_40351D	endp


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



sub_403542	proc near		; CODE XREF: start+1C3p

ClassName	= byte ptr -14h
pvParam		= dword	ptr -10h
Y		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		sub	esp, 14h
		push	ebx
		push	ebp
		push	esi
		mov	esi, dword_42F428
		push	edi
		push	offset aGetuserdefault ; "GetUserDefaultUILanguage"
		push	offset aKernel32_dll ; "KERNEL32.dll"
		call	sub_405CEE
		xor	ebx, ebx
		cmp	eax, ebx
		jz	short loc_403576
		call	eax
		movzx	eax, ax
		push	eax		; int
		push	offset dword_436000 ; LPSTR
		call	sub_405939
		jmp	short loc_4035BE
; ---------------------------------------------------------------------------

loc_403576:				; CODE XREF: sub_403542+20j
		mov	edi, offset byte_42A8A0
		mov	ds:dword_436000, 7830h
		push	edi		; lpData
		push	ebx		; lpValueName
		push	offset phkResult ; "Control Panel\\Desktop\\ResourceLocale"
		push	80000001h	; cbData
		call	sub_4058CF
		cmp	byte_42A8A0, bl
		jnz	short loc_4035B3
		push	edi		; lpData
		push	offset ValueName ; "Locale"
		push	offset a_defaultContro ; ".DEFAULT\\Control Panel\\International"
		push	80000003h	; cbData
		call	sub_4058CF

loc_4035B3:				; CODE XREF: sub_403542+5Aj
		push	edi		; lpString2
		push	offset dword_436000 ; lpString1
		call	lstrcatA	; lstrcatA

loc_4035BE:				; CODE XREF: sub_403542+32j
		call	sub_40380E
		mov	eax, dword_42F430
		mov	ebp, offset byte_435400
		and	eax, 20h
		push	ebp		; lpString2
		mov	dword_42F4A0, eax
		call	sub_4055C8
		test	eax, eax
		jnz	loc_403663
		mov	ecx, [esi+48h]
		cmp	ecx, ebx
		jz	short loc_403663
		mov	edx, [esi+4Ch]
		mov	eax, dword_42F458
		mov	edi, offset byte_42E3C0
		add	edx, eax
		push	edi		; lpData
		add	ecx, eax
		push	edx		; lpValueName
		push	ecx		; phkResult
		push	dword ptr [esi+44h] ; cbData
		call	sub_4058CF
		mov	al, byte_42E3C0
		cmp	al, bl
		jz	short loc_403663
		cmp	al, 22h
		jnz	short loc_403622
		mov	edi, offset sz
		push	22h		; char
		push	edi		; lpsz
		call	sub_405513
		mov	[eax], bl

loc_403622:				; CODE XREF: sub_403542+CFj
		push	edi		; lpString
		call	lstrlenA	; lstrlenA
		lea	eax, [eax+edi-4]
		cmp	eax, edi
		jbe	short loc_403656
		push	offset a_exe	; ".exe"
		push	eax		; lpString1
		call	ds:lstrcmpiA	; lstrcmpiA
		test	eax, eax
		jnz	short loc_403656
		push	edi		; lpFileName
		call	ds:GetFileAttributesA	; GetFileAttributesA
		cmp	eax, 0FFFFFFFFh
		jz	short loc_403650
		test	al, 10h
		jnz	short loc_403656

loc_403650:				; CODE XREF: sub_403542+108j
		push	edi		; lpszStart
		call	sub_40552F

loc_403656:				; CODE XREF: sub_403542+ECj
					; sub_403542+FCj ...
		push	edi		; lpString1
		call	sub_4054E8
		push	eax		; lpString2
		push	ebp		; lpString1
		call	sub_4059DB

loc_403663:				; CODE XREF: sub_403542+9Bj
					; sub_403542+A6j ...
		push	ebp		; lpString2
		call	sub_4055C8
		test	eax, eax
		jnz	short loc_403679
		push	dword ptr [esi+118h] ; lpString2
		push	ebp		; lpString1
		call	sub_4059FD

loc_403679:				; CODE XREF: sub_403542+129j
		push	8040h		; fuLoad
		push	ebx		; cy
		push	ebx		; cx
		push	1		; type
		push	67h		; name
		push	hModule		; hInst
		call	ds:LoadImageA	; LoadImageA
		mov	dwNewLong, eax
		cmp	dword ptr [esi+50h], 0FFFFFFFFh
		mov	edi, offset WndClass
		jz	loc_40372D
		mov	ecx, hModule
		mov	WndClass.hIcon,	eax
		lea	eax, [esp+24h+ClassName]
		push	edi		; lpWndClass
		mov	dword ptr [esp+28h+ClassName], 624E5Fh
		mov	WndClass.lpfnWndProc, offset sub_401000
		mov	WndClass.hInstance, ecx
		mov	WndClass.lpszClassName,	eax
		call	ds:RegisterClassA	; RegisterClassA
		test	ax, ax
		jz	loc_403804
		lea	eax, [esp+24h+pvParam]
		push	ebx		; fWinIni
		push	eax		; pvParam
		push	ebx		; uiParam
		push	30h		; uiAction
		call	ds:SystemParametersInfoA	; SystemParametersInfoA
		push	ebx		; lpParam
		push	hModule		; hInstance
		mov	eax, [esp+2Ch+var_4]
		sub	eax, [esp+2Ch+Y]
		push	ebx		; hMenu
		push	ebx		; hWndParent
		push	eax		; nHeight
		mov	eax, [esp+38h+var_8]
		sub	eax, [esp+38h+pvParam]
		push	eax		; nWidth
		lea	eax, [esp+3Ch+ClassName]
		push	[esp+3Ch+Y]	; Y
		push	[esp+40h+pvParam] ; X
		push	80000000h	; dwStyle
		push	ebx		; lpWindowName
		push	eax		; lpClassName
		push	80h		; dwExStyle
		call	ds:CreateWindowExA	; CreateWindowExA
		mov	dword_42A880, eax

loc_40372D:				; CODE XREF: sub_403542+15Cj
		push	ebx
		call	sub_401410
		test	eax, eax
		jz	short loc_40373F

loc_403737:				; CODE XREF: sub_403542+2A9j
					; sub_403542+2B6j
		push	2
		pop	eax
		jmp	loc_403806
; ---------------------------------------------------------------------------

loc_40373F:				; CODE XREF: sub_403542+1F3j
		call	sub_40380E
		cmp	dword_42F4C0, ebx
		jnz	loc_4037DB
		push	5		; nCmdShow
		push	dword_42A880	; hWnd
		call	ds:ShowWindow	; ShowWindow
		mov	esi, ds:LoadLibraryA
		mov	ebp, offset LibFileName	; "RichEd20.dll"
		push	ebp		; lpLibFileName
		call	esi ; LoadLibraryA
		test	eax, eax
		jnz	short loc_40377C
		push	ebp		; lpLibFileName
		mov	word ptr LibFileName+6,	3233h
		call	esi ; LoadLibraryA

loc_40377C:				; CODE XREF: sub_403542+22Cj
		mov	ebp, ds:GetClassInfoA
		mov	esi, offset ClassName ;	"RichEdit20A"
		push	edi		; lpWndClass
		push	esi		; lpClassName
		push	ebx		; hInstance
		call	ebp ; GetClassInfoA
		test	eax, eax
		jnz	short loc_4037AF
		push	edi		; lpWndClass
		push	esi		; lpClassName
		push	ebx		; hInstance
		mov	byte ptr ClassName+8, bl
		call	ebp ; GetClassInfoA
		push	edi		; lpWndClass
		mov	WndClass.lpszClassName,	esi
		mov	byte ptr ClassName+8, 32h
		call	ds:RegisterClassA	; RegisterClassA

loc_4037AF:				; CODE XREF: sub_403542+24Cj
		mov	eax, dword_42EC00
		push	ebx		; dwInitParam
		add	eax, 69h
		push	offset sub_4038DB ; lpDialogFunc
		movzx	eax, ax
		push	ebx		; hWndParent
		push	eax		; lpTemplateName
		push	hModule		; hInstance
		call	ds:DialogBoxParamA	; DialogBoxParamA
		push	5
		mov	esi, eax
		call	sub_401410
		mov	eax, esi
		jmp	short loc_403806
; ---------------------------------------------------------------------------

loc_4037DB:				; CODE XREF: sub_403542+208j
		push	ebx		; LPVOID
		call	StartAddress
		test	eax, eax
		jz	short loc_4037FD
		cmp	dword_42EBEC, ebx
		jnz	loc_403737
		push	2
		call	sub_401410
		jmp	loc_403737
; ---------------------------------------------------------------------------

loc_4037FD:				; CODE XREF: sub_403542+2A1j
		push	1
		call	sub_401410

loc_403804:				; CODE XREF: sub_403542+198j
		xor	eax, eax

loc_403806:				; CODE XREF: sub_403542+1F8j
					; sub_403542+297j
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		add	esp, 14h
		retn
sub_403542	endp


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



sub_40380E	proc near		; CODE XREF: sub_403542:loc_4035BEp
					; sub_403542:loc_40373Fp
		push	ebx
		push	ebp
		push	esi
		push	edi
		mov	edi, offset dword_436000
		mov	ebx, 0FFFFh
		push	edi
		call	sub_405952

loc_403822:				; CODE XREF: sub_40380E+6Fj
					; sub_40380E+73j
		mov	esi, dword_42F464
		test	esi, esi
		jz	short loc_403871
		mov	ecx, dword_42F428
		mov	ecx, [ecx+64h]
		mov	edx, ecx
		imul	ecx, esi
		neg	edx
		add	ecx, dword_42F460

loc_403842:				; CODE XREF: sub_40380E+46j
		add	ecx, edx
		dec	esi
		mov	bp, [ecx]
		xor	bp, ax
		and	ebp, ebx
		test	bp, bp
		jz	short loc_403858
		test	esi, esi
		jnz	short loc_403842
		jmp	short loc_403871
; ---------------------------------------------------------------------------

loc_403858:				; CODE XREF: sub_40380E+42j
		mov	edx, [ecx+2]
		mov	dword_42EC00, edx
		mov	edx, [ecx+6]
		mov	dword_42F4C8, edx
		lea	edx, [ecx+0Ah]
		test	edx, edx
		jnz	short loc_403883

loc_403871:				; CODE XREF: sub_40380E+1Cj
					; sub_40380E+48j
		cmp	bx, 0FFFFh
		jnz	short loc_40387F
		mov	ebx, 3FFh
		jmp	short loc_403822
; ---------------------------------------------------------------------------

loc_40387F:				; CODE XREF: sub_40380E+68j
		xor	ebx, ebx
		jmp	short loc_403822
; ---------------------------------------------------------------------------

loc_403883:				; CODE XREF: sub_40380E+61j
		mov	dword_42EBFC, edx
		movzx	eax, word ptr [ecx]
		push	eax		; int
		push	edi		; LPSTR
		call	sub_405939
		push	0FFFFFFFEh	; lpString2
		push	offset Caption	; lpString1
		call	sub_4059FD
		push	eax		; lpString
		push	dword_42A880	; hWnd
		call	ds:SetWindowTextA	; SetWindowTextA
		mov	eax, dword_42F44C
		mov	esi, dword_42F448
		test	eax, eax
		jz	short loc_4038D6
		mov	edi, eax

loc_4038BD:				; CODE XREF: sub_40380E+C6j
		mov	eax, [esi]
		test	eax, eax
		jz	short loc_4038CD
		push	eax		; lpString2
		lea	eax, [esi+18h]
		push	eax		; lpString1
		call	sub_4059FD

loc_4038CD:				; CODE XREF: sub_40380E+B3j
		add	esi, 418h
		dec	edi
		jnz	short loc_4038BD

loc_4038D6:				; CODE XREF: sub_40380E+ABj
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		retn
sub_40380E	endp


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


; INT_PTR __stdcall sub_4038DB(HWND,UINT,WPARAM,LPARAM)

sub_4038DB	proc near		; DATA XREF: sub_403542+276o

Point		= tagRECT ptr -10h
hDlg		= dword	ptr  4
arg_4		= dword	ptr  8
hdc		= dword	ptr  0Ch
hWnd		= dword	ptr  10h

		sub	esp, 10h
		mov	ecx, 110h
		push	ebx
		push	ebp
		mov	ebp, [esp+18h+arg_4]
		push	esi
		cmp	ebp, ecx
		push	edi
		jz	loc_403A66
		cmp	ebp, 408h
		jz	loc_403A66
		mov	ebx, [esp+20h+hDlg]
		cmp	ebp, 47h
		jnz	short loc_40391D
		xor	eax, eax
		push	13h		; uFlags
		push	eax		; cy
		push	eax		; cx
		push	eax		; Y
		push	eax		; X
		push	ebx		; hWndInsertAfter
		push	dword_42A880	; hWnd
		call	ds:SetWindowPos	; SetWindowPos

loc_40391D:				; CODE XREF: sub_4038DB+2Bj
		cmp	ebp, 5
		jnz	short loc_40393A
		mov	eax, [esp+20h+hdc]
		dec	eax
		neg	eax
		sbb	eax, eax
		and	eax, ebp
		push	eax		; nCmdShow
		push	dword_42A880	; hWnd
		call	ds:ShowWindow	; ShowWindow

loc_40393A:				; CODE XREF: sub_4038DB+45j
		cmp	ebp, 40Dh
		jnz	short loc_40395C
		push	dword_42EBF8	; hWnd
		call	ds:DestroyWindow	; DestroyWindow
		mov	eax, [esp+20h+hdc]
		mov	dword_42EBF8, eax
		jmp	loc_403D6B
; ---------------------------------------------------------------------------

loc_40395C:				; CODE XREF: sub_4038DB+65j
		cmp	ebp, 11h
		jnz	short loc_403974
		push	0		; dwNewLong
		push	0		; nIndex
		push	ebx		; hWnd
		call	ds:SetWindowLongA	; SetWindowLongA
		xor	eax, eax
		inc	eax
		jmp	loc_403D92
; ---------------------------------------------------------------------------

loc_403974:				; CODE XREF: sub_4038DB+84j
		cmp	ebp, 10h
		jnz	short loc_4039AC
		mov	eax, dword_42F444
		dec	eax
		cmp	dword_409284, eax
		jnz	loc_403A53
		push	dword_429868	; hWnd
		call	ds:IsWindowEnabled	; IsWindowEnabled
		test	eax, eax
		jnz	loc_403A53
		mov	ebp, 111h
		mov	[esp+20h+hdc], 1

loc_4039AC:				; CODE XREF: sub_4038DB+9Cj
		cmp	ebp, 111h
		jnz	loc_403A53
		movzx	esi, word ptr [esp+20h+hdc]
		push	esi		; nIDDlgItem
		push	ebx		; hDlg
		call	ds:GetDlgItem	; GetDlgItem
		mov	ebx, ds:SendMessageA
		mov	edi, eax
		test	edi, edi
		jz	short loc_4039EC
		push	0		; lParam
		push	0		; wParam
		push	0F3h		; Msg
		push	edi		; hWnd
		call	ebx ; SendMessageA
		push	edi		; hWnd
		call	ds:IsWindowEnabled	; IsWindowEnabled
		test	eax, eax
		jz	loc_403D90

loc_4039EC:				; CODE XREF: sub_4038DB+F4j
		xor	edi, edi
		inc	edi
		cmp	esi, edi
		jnz	short loc_4039F6
		push	edi
		jmp	short loc_403A24
; ---------------------------------------------------------------------------

loc_4039F6:				; CODE XREF: sub_4038DB+116j
		cmp	esi, 3
		jnz	short loc_403A08
		cmp	dword_409284, 0
		jle	short loc_403A3E
		push	0FFFFFFFFh
		jmp	short loc_403A24
; ---------------------------------------------------------------------------

loc_403A08:				; CODE XREF: sub_4038DB+11Ej
		cmp	esi, 2
		jnz	short loc_403A3E
		cmp	dword_42F4AC, 0
		jz	short loc_403A2B
		push	esi
		call	sub_401410
		mov	nResult, esi

loc_403A22:				; CODE XREF: sub_4038DB+161j
		push	78h		; wParam

loc_403A24:				; CODE XREF: sub_4038DB+119j
					; sub_4038DB+12Bj
		call	sub_403D9C
		jmp	short loc_403A53
; ---------------------------------------------------------------------------

loc_403A2B:				; CODE XREF: sub_4038DB+139j
		push	3
		call	sub_401410
		test	eax, eax
		jnz	short loc_403A53
		mov	nResult, edi
		jmp	short loc_403A22
; ---------------------------------------------------------------------------

loc_403A3E:				; CODE XREF: sub_4038DB+127j
					; sub_4038DB+130j
		push	[esp+20h+hWnd]	; lParam
		push	[esp+24h+hdc]	; wParam
		push	111h		; Msg
		push	dword_42EBF8	; hWnd
		call	ebx ; SendMessageA

loc_403A53:				; CODE XREF: sub_4038DB+AAj
					; sub_4038DB+BEj ...
		push	[esp+20h+hWnd]	; hWnd
		push	[esp+24h+hdc]	; hdc
		push	ebp		; int
		call	sub_403E2A
		jmp	loc_403D92
; ---------------------------------------------------------------------------

loc_403A66:				; CODE XREF: sub_4038DB+12j
					; sub_4038DB+1Ej
		mov	eax, [esp+20h+hdc]
		mov	ebx, [esp+20h+hDlg]
		cmp	ebp, ecx
		mov	dword_42A88C, eax
		jnz	short loc_403AC4
		mov	esi, ds:GetDlgItem
		push	1		; nIDDlgItem
		push	ebx		; hDlg
		mov	dword_42F424, ebx
		call	esi ; GetDlgItem
		push	2		; nIDDlgItem
		push	ebx		; hDlg
		mov	dword_42A89C, eax
		call	esi ; GetDlgItem
		push	0FFFFFFFFh	; lpString2
		push	1Ch		; int
		push	ebx		; hDlg
		mov	dword_429868, eax
		call	sub_403DC3
		push	dwNewLong	; dwNewLong
		push	0FFFFFFF2h	; nIndex
		push	ebx		; hWnd
		call	ds:SetClassLongA	; SetClassLongA
		push	4
		call	sub_401410
		mov	dword_42EBEC, eax
		xor	eax, eax
		inc	eax
		mov	dword_42A88C, eax

loc_403AC4:				; CODE XREF: sub_4038DB+19Aj
		mov	ecx, dword_409284
		xor	edi, edi
		mov	esi, ecx
		shl	esi, 6
		add	esi, dword_42F440
		cmp	ecx, edi
		jl	short loc_403B19
		cmp	eax, 1
		jnz	short loc_403B11
		push	edi		; hWnd
		push	dword ptr [esi+10h] ; int
		call	sub_40136D
		test	eax, eax
		jz	short loc_403B11
		push	1		; lParam
		push	edi		; wParam
		push	40Fh		; Msg
		push	dword_42EBF8	; hWnd
		call	ds:SendMessageA	; SendMessageA
		xor	eax, eax
		cmp	dword_42EBEC, edi
		setz	al
		jmp	loc_403D92
; ---------------------------------------------------------------------------

loc_403B11:				; CODE XREF: sub_4038DB+203j
					; sub_4038DB+210j
		cmp	[esi], edi
		jz	loc_403D90

loc_403B19:				; CODE XREF: sub_4038DB+1FEj
		push	40Bh		; Msg
		call	sub_403E0F

loc_403B23:				; CODE XREF: sub_4038DB+384j
					; sub_4038DB+38Cj ...
		mov	eax, dword_42A88C
		add	dword_409284, eax
		shl	eax, 6
		add	esi, eax
		mov	eax, dword_409284
		cmp	eax, dword_42F444
		jnz	short loc_403B47
		push	1
		call	sub_401410

loc_403B47:				; CODE XREF: sub_4038DB+263j
		cmp	dword_42EBEC, 0
		jnz	loc_403D4B
		mov	eax, dword_42F444
		cmp	dword_409284, eax
		jnb	loc_403D4B
		push	dword ptr [esi+24h] ; lpString2
		mov	edi, [esi+14h]
		push	offset dword_437000 ; lpString1
		call	sub_4059FD
		push	dword ptr [esi+20h] ; lpString2
		push	0FFFFFC19h	; int
		push	ebx		; hDlg
		call	sub_403DC3
		push	dword ptr [esi+1Ch] ; lpString2
		push	0FFFFFC1Bh	; int
		push	ebx		; hDlg
		call	sub_403DC3
		push	dword ptr [esi+28h] ; lpString2
		push	0FFFFFC1Ah	; int
		push	ebx		; hDlg
		call	sub_403DC3
		push	3		; nIDDlgItem
		push	ebx		; hDlg
		call	ds:GetDlgItem	; GetDlgItem
		cmp	dword_42F4AC, 0
		mov	ebp, eax
		jz	short loc_403BBB
		and	di, 0FEFDh
		or	edi, 4

loc_403BBB:				; CODE XREF: sub_4038DB+2D6j
		mov	eax, edi
		and	eax, 8
		push	eax		; nCmdShow
		push	ebp		; hWnd
		call	ds:ShowWindow	; ShowWindow
		mov	eax, edi
		and	eax, 100h
		push	eax		; bEnable
		push	ebp		; hWnd
		call	ds:EnableWindow	; EnableWindow
		mov	eax, edi
		and	eax, 2
		push	eax		; bEnable
		call	sub_403DE5
		and	edi, 4
		push	edi		; bEnable
		push	dword_429868	; hWnd
		call	ds:EnableWindow	; EnableWindow
		xor	edi, edi
		push	1		; lParam
		push	edi		; wParam
		push	0F4h		; Msg
		push	ebp		; hWnd
		mov	ebp, ds:SendMessageA
		call	ebp ; SendMessageA
		cmp	dword_42F4AC, edi
		jz	short loc_403C20
		push	edi		; lParam
		push	2		; wParam
		push	401h		; Msg
		push	ebx		; hWnd
		call	ebp ; SendMessageA
		push	dword_429868
		jmp	short loc_403C26
; ---------------------------------------------------------------------------

loc_403C20:				; CODE XREF: sub_4038DB+330j
		push	dword_42A89C	; wParam

loc_403C26:				; CODE XREF: sub_4038DB+343j
		call	sub_403DF8
		mov	ebp, offset byte_42A8A0
		push	offset Caption	; lpString2
		push	ebp		; lpString1
		call	sub_4059DB
		push	dword ptr [esi+18h] ; lpString2
		push	ebp		; lpString
		call	lstrlenA	; lstrlenA
		add	eax, ebp
		push	eax		; lpString1
		call	sub_4059FD
		push	ebp		; lpString
		push	ebx		; hWnd
		call	ds:SetWindowTextA	; SetWindowTextA
		push	edi		; hWnd
		push	dword ptr [esi+8] ; int
		call	sub_40136D
		test	eax, eax
		jnz	loc_403B23
		cmp	[esi], eax
		jz	loc_403B23
		cmp	dword ptr [esi+4], 5
		jnz	short loc_403C90
		cmp	dword_42F4AC, eax
		jnz	loc_403D90
		cmp	dword_42F4A0, eax
		jnz	loc_403B23
		jmp	loc_403D90
; ---------------------------------------------------------------------------

loc_403C90:				; CODE XREF: sub_4038DB+396j
		push	dword_42EBF8	; hWnd
		call	ds:DestroyWindow	; DestroyWindow
		mov	dword_42A078, esi
		cmp	dword ptr [esi], 0
		jle	loc_403D6B
		mov	eax, [esi+4]
		push	esi		; dwInitParam
		push	lpDialogFunc[eax*4] ; lpDialogFunc
		mov	ax, [esi]
		add	ax, word ptr dword_42EC00
		push	ebx		; hWndParent
		movzx	eax, ax
		push	eax		; lpTemplateName
		push	hModule		; hInstance
		call	ds:CreateDialogParamA	; CreateDialogParamA
		test	eax, eax
		mov	dword_42EBF8, eax
		jz	loc_403D6B
		push	dword ptr [esi+2Ch] ; lpString2
		push	6		; int
		push	eax		; hDlg
		call	sub_403DC3
		lea	eax, [esp+20h+Point]
		push	eax		; lpRect
		push	3FAh		; nIDDlgItem
		push	ebx		; hDlg
		call	ds:GetDlgItem	; GetDlgItem
		push	eax		; hWnd
		call	ds:GetWindowRect	; GetWindowRect
		lea	eax, [esp+20h+Point]
		push	eax		; lpPoint
		push	ebx		; hWnd
		call	ds:ScreenToClient	; ScreenToClient
		xor	edi, edi
		push	15h		; uFlags
		push	edi		; cy
		push	edi		; cx
		push	[esp+2Ch+Point.top] ; Y
		push	[esp+30h+Point.left] ; X
		push	edi		; hWndInsertAfter
		push	dword_42EBF8	; hWnd
		call	ds:SetWindowPos	; SetWindowPos
		push	edi		; hWnd
		push	dword ptr [esi+0Ch] ; int
		call	sub_40136D
		push	8		; nCmdShow
		push	dword_42EBF8	; hWnd
		call	ds:ShowWindow	; ShowWindow
		push	405h		; Msg
		call	sub_403E0F
		jmp	short loc_403D6B
; ---------------------------------------------------------------------------

loc_403D4B:				; CODE XREF: sub_4038DB+273j
					; sub_4038DB+284j
		push	dword_42EBF8	; hWnd
		call	ds:DestroyWindow	; DestroyWindow
		push	nResult		; nResult
		and	dword_42F424, 0
		push	ebx		; hDlg
		call	ds:EndDialog	; EndDialog

loc_403D6B:				; CODE XREF: sub_4038DB+7Cj
					; sub_4038DB+3CAj ...
		cmp	dword_42B8A0, 0
		jnz	short loc_403D90
		cmp	dword_42EBF8, 0
		jz	short loc_403D90
		push	0Ah		; nCmdShow
		push	ebx		; hWnd
		call	ds:ShowWindow	; ShowWindow
		mov	dword_42B8A0, 1

loc_403D90:				; CODE XREF: sub_4038DB+10Bj
					; sub_4038DB+238j ...
		xor	eax, eax

loc_403D92:				; CODE XREF: sub_4038DB+94j
					; sub_4038DB+186j ...
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		add	esp, 10h
		retn	10h
sub_4038DB	endp


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


; int __stdcall	sub_403D9C(WPARAM wParam)

sub_403D9C	proc near		; CODE XREF: sub_4038DB:loc_403A24p
					; sub_404EBC+219p ...

wParam		= dword	ptr  4

		cmp	[esp+wParam], 78h
		jnz	short loc_403DA9
		inc	dword_42EBEC

loc_403DA9:				; CODE XREF: sub_403D9C+5j
		push	0		; lParam
		push	[esp+4+wParam]	; wParam
		push	408h		; Msg
		push	dword_42F424	; hWnd
		call	ds:SendMessageA	; SendMessageA
		retn	4
sub_403D9C	endp


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


; int __stdcall	sub_403DC3(HWND	hDlg,int,LPCSTR	lpString2)

sub_403DC3	proc near		; CODE XREF: sub_4038DB+1C1p
					; sub_4038DB+2A3p ...

hDlg		= dword	ptr  4
arg_4		= dword	ptr  8
lpString2	= dword	ptr  0Ch

		push	[esp+lpString2]	; lpString2
		push	0		; lpString1
		call	sub_4059FD
		push	eax		; lpString
		mov	eax, [esp+4+arg_4]
		add	eax, 3E8h
		push	eax		; nIDDlgItem
		push	[esp+8+hDlg]	; hDlg
		call	SetDlgItemTextA	; SetDlgItemTextA
		retn	0Ch
sub_403DC3	endp


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


; int __stdcall	sub_403DE5(BOOL	bEnable)

sub_403DE5	proc near		; CODE XREF: sub_4038DB+302p
					; sub_403F0B+92p ...

bEnable		= dword	ptr  4

		push	[esp+bEnable]	; bEnable
		push	dword_42A89C	; hWnd
		call	ds:EnableWindow	; EnableWindow
		retn	4
sub_403DE5	endp


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


; int __stdcall	sub_403DF8(WPARAM wParam)

sub_403DF8	proc near		; CODE XREF: sub_4038DB:loc_403C26p
					; sub_403F0B+A8p ...

wParam		= dword	ptr  4

		push	1		; lParam
		push	[esp+4+wParam]	; wParam
		push	28h		; Msg
		push	dword_42F424	; hWnd
		call	ds:SendMessageA	; SendMessageA
		retn	4
sub_403DF8	endp


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


; int __stdcall	sub_403E0F(UINT	Msg)

sub_403E0F	proc near		; CODE XREF: sub_4038DB+243p
					; sub_4038DB+469p ...

Msg		= dword	ptr  4

		mov	eax, dword_42EBF8
		test	eax, eax
		jz	short locret_403E27
		push	0		; lParam
		push	0		; wParam
		push	[esp+8+Msg]	; Msg
		push	eax		; hWnd
		call	ds:SendMessageA	; SendMessageA

locret_403E27:				; CODE XREF: sub_403E0F+7j
		retn	4
sub_403E0F	endp


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

; Attributes: bp-based frame

; int __stdcall	sub_403E2A(int,HDC hdc,HWND hWnd)

sub_403E2A	proc near		; CODE XREF: sub_4038DB+181p
					; sub_403F0B+27Fp ...

plbrush		= LOGBRUSH ptr -0Ch
arg_0		= dword	ptr  8
hdc		= dword	ptr  0Ch
hWnd		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		mov	eax, [ebp+arg_0]
		push	esi
		add	eax, 0FFFFFECDh
		cmp	eax, 5
		ja	loc_403ED0
		push	0FFFFFFEBh	; nIndex
		push	[ebp+hWnd]	; hWnd
		call	ds:GetWindowLongA	; GetWindowLongA
		mov	esi, eax
		test	esi, esi
		jz	short loc_403ED0
		test	byte ptr [esi+14h], 2
		mov	eax, [esi]
		push	edi
		mov	edi, ds:GetSysColor
		jz	short loc_403E65
		push	eax		; nIndex
		call	edi ; GetSysColor

loc_403E65:				; CODE XREF: sub_403E2A+36j
		test	byte ptr [esi+14h], 1
		jz	short loc_403E75
		push	eax		; color
		push	[ebp+hdc]	; hdc
		call	ds:SetTextColor	; SetTextColor

loc_403E75:				; CODE XREF: sub_403E2A+3Fj
		push	dword ptr [esi+10h] ; mode
		push	[ebp+hdc]	; hdc
		call	ds:SetBkMode	; SetBkMode
		mov	eax, [esi+4]
		test	byte ptr [esi+14h], 8
		mov	[ebp+plbrush.lbColor], eax
		jz	short loc_403E93
		push	eax		; nIndex
		call	edi ; GetSysColor
		mov	[ebp+plbrush.lbColor], eax

loc_403E93:				; CODE XREF: sub_403E2A+61j
		test	byte ptr [esi+14h], 4
		pop	edi
		jz	short loc_403EA4
		push	eax		; color
		push	[ebp+hdc]	; hdc
		call	ds:SetBkColor	; SetBkColor

loc_403EA4:				; CODE XREF: sub_403E2A+6Ej
		test	byte ptr [esi+14h], 10h
		jz	short loc_403ECB
		mov	eax, [esi+8]
		mov	[ebp+plbrush.lbStyle], eax
		mov	eax, [esi+0Ch]
		test	eax, eax
		jz	short loc_403EBE
		push	eax		; ho
		call	ds:DeleteObject	; DeleteObject

loc_403EBE:				; CODE XREF: sub_403E2A+8Bj
		lea	eax, [ebp+plbrush]
		push	eax		; plbrush
		call	ds:CreateBrushIndirect	; CreateBrushIndirect
		mov	[esi+0Ch], eax

loc_403ECB:				; CODE XREF: sub_403E2A+7Ej
		mov	eax, [esi+0Ch]
		jmp	short loc_403ED2
; ---------------------------------------------------------------------------

loc_403ED0:				; CODE XREF: sub_403E2A+12j
					; sub_403E2A+27j
		xor	eax, eax

loc_403ED2:				; CODE XREF: sub_403E2A+A4j
		pop	esi
		leave
		retn	0Ch
sub_403E2A	endp


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

; Attributes: bp-based frame

; int __stdcall	sub_403ED7(int,LPSTR lpString,int iMaxLength,int)

sub_403ED7	proc near		; DATA XREF: sub_403F0B+5Eo

arg_0		= dword	ptr  8
lpString	= dword	ptr  0Ch
iMaxLength	= dword	ptr  10h
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		mov	eax, [ebp+arg_0]
		mov	ecx, dword_42986C
		push	[ebp+iMaxLength] ; iMaxLength
		add	ecx, eax
		push	ecx		; lpString2
		push	[ebp+lpString]	; lpString1
		call	ds:lstrcpynA	; lstrcpynA
		push	[ebp+lpString]	; lpString
		call	lstrlenA	; lstrlenA
		mov	ecx, [ebp+arg_C]
		mov	[ecx], eax
		add	dword_42986C, eax
		xor	eax, eax
		pop	ebp
		retn	10h
sub_403ED7	endp


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

; Attributes: bp-based frame

; int __stdcall	sub_403F0B(HWND	hDlg,int,HDC hdc,WPARAM	hWnd)

sub_403F0B	proc near		; DATA XREF: .data:lpDialogFunco

lParam		= dword	ptr -0Ch
var_8		= dword	ptr -8
lpFile		= dword	ptr -4
hDlg		= dword	ptr  8
arg_4		= dword	ptr  0Ch
hdc		= dword	ptr  10h
hWnd		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		cmp	[ebp+arg_4], 110h
		push	ebx
		push	esi
		push	edi
		jnz	loc_40402E
		mov	ebx, [ebp+hWnd]
		mov	edi, [ebx+30h]
		test	edi, edi
		jge	short loc_403F3C
		mov	ecx, dword_42EBFC
		lea	eax, ds:4[edi*4]
		sub	ecx, eax
		mov	edi, [ecx]

loc_403F3C:				; CODE XREF: sub_403F0B+1Ej
		mov	eax, dword_42F458
		push	dword ptr [ebx+34h] ; lpString2
		add	edi, eax
		push	22h		; int
		movsx	eax, byte ptr [edi]
		mov	[ebp+hWnd], eax
		mov	eax, [ebx+14h]
		push	[ebp+hDlg]	; hDlg
		and	[ebp+var_8], 0
		mov	esi, eax
		inc	edi
		not	esi
		shr	esi, 5
		and	esi, 1
		and	eax, 1
		mov	[ebp+lParam], edi
		mov	[ebp+lpFile], offset sub_403ED7
		or	esi, eax
		call	sub_403DC3
		push	dword ptr [ebx+38h] ; lpString2
		push	23h		; int
		push	[ebp+hDlg]	; hDlg
		call	sub_403DC3
		xor	eax, eax
		push	1		; uCheck
		test	esi, esi
		setz	al
		add	eax, 40Ah
		push	eax		; nIDButton
		push	[ebp+hDlg]	; hDlg
		call	ds:CheckDlgButton	; CheckDlgButton
		push	esi		; bEnable
		call	sub_403DE5
		push	3E8h		; nIDDlgItem
		push	[ebp+hDlg]	; hDlg
		call	ds:GetDlgItem	; GetDlgItem
		mov	ebx, eax
		push	ebx		; wParam
		call	sub_403DF8
		mov	esi, ds:SendMessageA
		push	0		; lParam
		push	1		; wParam
		push	45Bh		; Msg
		push	ebx		; hWnd
		call	esi ; SendMessageA
		mov	eax, dword_42F428
		mov	eax, [eax+68h]
		test	eax, eax
		jge	short loc_403FDF
		neg	eax
		push	eax		; nIndex
		call	ds:GetSysColor	; GetSysColor

loc_403FDF:				; CODE XREF: sub_403F0B+C9j
		push	eax		; lParam
		push	0		; wParam
		push	443h		; Msg
		push	ebx		; hWnd
		call	esi ; SendMessageA
		push	4010000h	; lParam
		push	0		; wParam
		push	445h		; Msg
		push	ebx		; hWnd
		call	esi ; SendMessageA
		and	dword_42986C, 0
		push	edi		; lpString
		call	lstrlenA	; lstrlenA
		push	eax		; lParam
		push	0		; wParam
		push	435h		; Msg
		push	ebx		; hWnd
		call	esi ; SendMessageA
		lea	eax, [ebp+lParam]
		push	eax		; lParam
		push	[ebp+hWnd]	; wParam
		push	449h		; Msg
		push	ebx		; hWnd
		call	esi ; SendMessageA
		and	dword_42A888, 0
		xor	eax, eax
		jmp	loc_40418F
; ---------------------------------------------------------------------------

loc_40402E:				; CODE XREF: sub_403F0B+10j
		cmp	[ebp+arg_4], 111h
		mov	ebx, ds:GetDlgItem
		mov	esi, ds:SendMessageA
		jnz	short loc_40409D
		mov	eax, [ebp+hdc]
		shr	eax, 10h
		test	ax, ax
		jnz	loc_404180
		xor	eax, eax
		cmp	dword_42A888, eax
		jnz	loc_404180
		mov	ecx, dword_42A078
		lea	edi, [ecx+14h]
		test	byte ptr [edi],	20h
		jz	loc_404180
		push	eax		; lParam
		push	eax		; wParam
		push	0F0h		; Msg
		push	40Ah		; nIDDlgItem
		push	[ebp+hDlg]	; hDlg
		call	ebx ; GetDlgItem
		push	eax		; hWnd
		call	esi ; SendMessageA
		mov	ecx, [edi]
		and	eax, 1
		and	ecx, 0FFFFFFFEh
		push	eax		; bEnable
		or	ecx, eax
		mov	[edi], ecx
		call	sub_403DE5
		call	sub_404196

loc_40409D:				; CODE XREF: sub_403F0B+136j
		cmp	[ebp+arg_4], 4Eh
		jnz	loc_404171
		push	3E8h		; nIDDlgItem
		push	[ebp+hDlg]	; hDlg
		call	ebx ; GetDlgItem
		mov	edi, [ebp+hWnd]
		cmp	dword ptr [edi+8], 70Bh
		jnz	short loc_40412F
		cmp	dword ptr [edi+0Ch], 201h
		jnz	short loc_40412F
		mov	ecx, [edi+1Ch]
		mov	edx, [edi+18h]
		mov	[ebp+var_8], ecx
		sub	ecx, edx
		cmp	ecx, 800h
		mov	[ebp+lParam], edx
		mov	[ebp+lpFile], offset byte_42E3C0
		jnb	short loc_40412F
		lea	ecx, [ebp+lParam]
		push	ecx		; lParam
		push	0		; wParam
		push	44Bh		; Msg
		push	eax		; hWnd
		call	esi ; SendMessageA
		mov	edi, ds:LoadCursorA
		push	7F02h		; lpCursorName
		push	0		; hInstance
		call	edi ; LoadCursorA
		mov	ebx, ds:SetCursor
		push	eax		; hCursor
		call	ebx ; SetCursor
		push	1		; nShowCmd
		push	0		; lpDirectory
		push	0		; lpParameters
		push	[ebp+lpFile]	; lpFile
		push	offset Operation ; "open"
		push	[ebp+hDlg]	; hwnd
		call	ds:ShellExecuteA	; ShellExecuteA
		push	7F00h		; lpCursorName
		push	0		; hInstance
		call	edi ; LoadCursorA
		push	eax		; hCursor
		call	ebx ; SetCursor
		mov	edi, [ebp+hWnd]

loc_40412F:				; CODE XREF: sub_403F0B+1B0j
					; sub_403F0B+1B9j ...
		cmp	dword ptr [edi+8], 700h
		jnz	short loc_404183
		cmp	dword ptr [edi+0Ch], 100h
		jnz	short loc_404183
		cmp	dword ptr [edi+10h], 0Dh
		jnz	short loc_404158
		push	0		; lParam
		push	1		; wParam
		push	111h		; Msg
		push	dword_42F424	; hWnd
		call	esi ; SendMessageA

loc_404158:				; CODE XREF: sub_403F0B+23Aj
		cmp	dword ptr [edi+10h], 1Bh
		jnz	short loc_40416C
		push	0		; lParam
		push	0		; wParam
		push	10h		; Msg
		push	dword_42F424	; hWnd
		call	esi ; SendMessageA

loc_40416C:				; CODE XREF: sub_403F0B+251j
		xor	eax, eax
		inc	eax
		jmp	short loc_40418F
; ---------------------------------------------------------------------------

loc_404171:				; CODE XREF: sub_403F0B+196j
		cmp	[ebp+arg_4], 40Bh
		jnz	short loc_404180
		inc	dword_42A888

loc_404180:				; CODE XREF: sub_403F0B+141j
					; sub_403F0B+14Fj ...
		mov	edi, [ebp+hWnd]

loc_404183:				; CODE XREF: sub_403F0B+22Bj
					; sub_403F0B+234j
		push	edi		; hWnd
		push	[ebp+hdc]	; hdc
		push	[ebp+arg_4]	; int
		call	sub_403E2A

loc_40418F:				; CODE XREF: sub_403F0B+11Ej
					; sub_403F0B+264j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	10h
sub_403F0B	endp


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



sub_404196	proc near		; CODE XREF: sub_403F0B+18Dp
					; sub_404201+2DAp ...
		cmp	dword_42F4AC, 0
		mov	eax, dword_429868
		jnz	short loc_4041A9
		mov	eax, dword_42A89C

loc_4041A9:				; CODE XREF: sub_404196+Cj
		push	1		; lParam
		push	1		; wParam
		push	0F4h		; Msg
		push	eax		; hWnd
		call	ds:SendMessageA	; SendMessageA
		retn
sub_404196	endp


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

; Attributes: bp-based frame

; int __stdcall	sub_4041BA(HWND	hDlg,int,HDC hdc,HWND hWnd)

sub_4041BA	proc near		; DATA XREF: .data:00409298o

hDlg		= dword	ptr  8
arg_4		= dword	ptr  0Ch
hdc		= dword	ptr  10h
hWnd		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		cmp	[ebp+arg_4], 110h
		push	esi
		mov	esi, [ebp+hWnd]
		jnz	short loc_4041F0
		push	dword ptr [esi+30h] ; lpString2
		push	1Dh		; int
		push	[ebp+hDlg]	; hDlg
		call	sub_403DC3
		mov	eax, [esi+3Ch]
		shl	eax, 0Ah
		add	eax, offset dword_430000
		push	eax		; lpString
		push	3E8h		; nIDDlgItem
		push	[ebp+hDlg]	; hDlg
		call	SetDlgItemTextA	; SetDlgItemTextA

loc_4041F0:				; CODE XREF: sub_4041BA+Ej
		push	esi		; hWnd
		push	[ebp+hdc]	; hdc
		push	[ebp+arg_4]	; int
		call	sub_403E2A
		pop	esi
		pop	ebp
		retn	10h
sub_4041BA	endp


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

; Attributes: bp-based frame

; int __stdcall	sub_404201(HWND	hDlg,int,HDC hdc,HWND hWnd)

sub_404201	proc near		; DATA XREF: .data:00409290o

bi		= _browseinfoA ptr -48h
var_28		= dword	ptr -28h
TotalNumberOfClusters= dword ptr -24h
var_20		= dword	ptr -20h
var_1C		= byte ptr -1Ch
BytesPerSector	= dword	ptr -18h
var_14		= byte ptr -14h
SectorsPerCluster= dword ptr -10h
nNumerator	= dword	ptr -0Ch
lpString2	= dword	ptr -8
var_4		= dword	ptr -4
hDlg		= dword	ptr  8
arg_4		= dword	ptr  0Ch
hdc		= dword	ptr  10h
hWnd		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		sub	esp, 48h
		mov	eax, dword_42A078
		push	ebx
		push	esi
		mov	[ebp+var_20], eax
		mov	esi, [eax+3Ch]
		mov	eax, [eax+38h]
		shl	esi, 0Ah
		add	esi, offset dword_430000
		cmp	[ebp+arg_4], 40Bh
		push	edi
		mov	[ebp+lpString2], eax
		mov	ebx, 3FBh
		jnz	short loc_40423F
		push	esi		; lpString
		push	ebx		; nIDDlgItem
		call	sub_4052BF
		push	esi		; lpszCurrent
		call	sub_405C17

loc_40423F:				; CODE XREF: sub_404201+2Fj
		cmp	[ebp+arg_4], 110h
		jnz	short loc_4042C0
		push	ebx		; nIDDlgItem
		push	[ebp+hDlg]	; hDlg
		call	ds:GetDlgItem	; GetDlgItem
		push	esi
		mov	edi, eax
		call	sub_405554
		test	eax, eax
		jz	short loc_40426E
		push	esi		; lpsz
		call	sub_40557B
		test	eax, eax
		jnz	short loc_40426E
		push	esi		; lpString1
		call	sub_4054E8

loc_40426E:				; CODE XREF: sub_404201+5Bj
					; sub_404201+65j
		mov	eax, [ebp+hDlg]
		push	esi		; lpString
		push	edi		; hWnd
		mov	dword_42EBF8, eax
		call	ds:SetWindowTextA	; SetWindowTextA
		mov	eax, [ebp+hWnd]
		push	dword ptr [eax+34h] ; lpString2
		push	1		; int
		push	[ebp+hDlg]	; hDlg
		call	sub_403DC3
		mov	eax, [ebp+hWnd]
		push	dword ptr [eax+30h] ; lpString2
		push	14h		; int
		push	[ebp+hDlg]	; hDlg
		call	sub_403DC3
		push	edi		; wParam
		call	sub_403DF8
		push	offset aShautocomplete ; "SHAutoComplete"
		push	offset aShlwapi_dll ; "shlwapi.dll"
		call	sub_405CEE
		test	eax, eax
		jz	loc_4044E6
		push	1
		push	edi
		call	eax

loc_4042C0:				; CODE XREF: sub_404201+45j
		cmp	[ebp+arg_4], 111h
		jnz	loc_404393
		movzx	eax, word ptr [ebp+hdc]
		cmp	eax, ebx
		jnz	short loc_4042ED
		mov	ecx, [ebp+hdc]
		shr	ecx, 10h
		cmp	cx, 300h
		jnz	loc_4044E6
		mov	[ebp+arg_4], 40Fh

loc_4042ED:				; CODE XREF: sub_404201+D2j
		cmp	eax, 3E9h
		jnz	loc_404393
		push	7
		xor	eax, eax
		pop	ecx
		lea	edi, [ebp+bi.pidlRoot]
		push	[ebp+lpString2]	; lpString2
		rep stosd
		mov	eax, [ebp+hDlg]
		mov	edi, offset byte_42A8A0
		push	offset dword_429C78 ; lpString1
		mov	[ebp+bi.hwndOwner], eax
		mov	[ebp+bi.pszDisplayName], edi
		mov	[ebp+bi.lpfn], offset sub_4044FB
		mov	[ebp+bi.lParam], esi
		call	sub_4059FD
		mov	[ebp+bi.lpszTitle], eax
		lea	eax, [ebp+bi]
		push	eax		; lpbi
		mov	[ebp+bi.ulFlags], 41h
		call	ds:SHBrowseForFolderA	; SHBrowseForFolderA
		test	eax, eax
		jz	short loc_40438C
		push	eax
		call	sub_405238
		push	esi		; lpString1
		call	sub_4054E8
		mov	eax, dword_42F428
		mov	eax, [eax+11Ch]
		test	eax, eax
		jz	short loc_40437A
		push	eax		; lpString2
		push	0		; lpString1
		call	sub_4059FD
		push	edi		; lpString2
		mov	edi, offset byte_42E3C0
		push	edi		; lpString1
		call	ds:lstrcmpiA	; lstrcmpiA
		test	eax, eax
		jz	short loc_40437A
		push	edi		; lpString2
		push	esi		; lpString1
		call	lstrcatA	; lstrcatA

loc_40437A:				; CODE XREF: sub_404201+157j
					; sub_404201+170j
		inc	dword_42A890
		push	esi		; lpString
		push	ebx		; nIDDlgItem
		push	[ebp+hDlg]	; hDlg
		call	SetDlgItemTextA	; SetDlgItemTextA
		jmp	short loc_404393
; ---------------------------------------------------------------------------

loc_40438C:				; CODE XREF: sub_404201+13Cj
		mov	[ebp+arg_4], 40Fh

loc_404393:				; CODE XREF: sub_404201+C6j
					; sub_404201+F1j ...
		cmp	[ebp+arg_4], 40Fh
		jz	short loc_4043A9
		cmp	[ebp+arg_4], 405h
		jnz	loc_4044E6

loc_4043A9:				; CODE XREF: sub_404201+199j
		and	[ebp+var_4], 0
		and	[ebp+lpString2], 0
		push	esi		; lpString
		push	ebx		; nIDDlgItem
		or	edi, 0FFFFFFFFh
		call	sub_4052BF
		push	esi		; lpString2
		call	sub_4055C8
		test	eax, eax
		jnz	short loc_4043CC
		mov	[ebp+var_4], 1

loc_4043CC:				; CODE XREF: sub_404201+1C2j
		push	esi		; lpString2
		mov	esi, offset RootPathName
		push	esi		; lpString1
		call	sub_4059DB
		push	esi		; lpsz
		call	sub_40557B
		test	eax, eax
		jz	short loc_4043E5
		and	byte ptr [eax],	0

loc_4043E5:				; CODE XREF: sub_404201+1DFj
		push	offset aGetdiskfreespa ; "GetDiskFreeSpaceExA"
		push	offset aKernel32_dll ; "KERNEL32.dll"
		call	sub_405CEE
		test	eax, eax
		mov	ebx, 400h
		jz	short loc_40441F
		lea	ecx, [ebp+var_1C]
		push	ecx
		lea	ecx, [ebp+var_14]
		push	ecx
		lea	ecx, [ebp+var_28]
		push	ecx
		push	esi
		call	eax
		test	eax, eax
		jz	short loc_40441F
		mov	edi, [ebp+var_28]
		mov	eax, [ebp+TotalNumberOfClusters]
		shrd	edi, eax, 0Ah
		shr	eax, 0Ah
		jmp	short loc_40444E
; ---------------------------------------------------------------------------

loc_40441F:				; CODE XREF: sub_404201+1FAj
					; sub_404201+20Dj
		lea	eax, [ebp+TotalNumberOfClusters]
		push	eax		; lpTotalNumberOfClusters
		lea	eax, [ebp+nNumerator]
		push	eax		; lpNumberOfFreeClusters
		lea	eax, [ebp+BytesPerSector]
		push	eax		; lpBytesPerSector
		lea	eax, [ebp+SectorsPerCluster]
		push	eax		; lpSectorsPerCluster
		push	esi		; lpRootPathName
		call	ds:GetDiskFreeSpaceA	; GetDiskFreeSpaceA
		test	eax, eax
		jz	short loc_404455
		mov	eax, [ebp+SectorsPerCluster]
		push	ebx		; nDenominator
		imul	eax, [ebp+BytesPerSector]
		push	[ebp+nNumerator] ; nNumerator
		push	eax		; nNumber
		call	ds:MulDiv	; MulDiv
		mov	edi, eax

loc_40444E:				; CODE XREF: sub_404201+21Cj
		mov	[ebp+lpString2], 1

loc_404455:				; CODE XREF: sub_404201+237j
		push	5
		call	sub_404616
		cmp	edi, eax
		jnb	short loc_404467
		mov	[ebp+var_4], 2

loc_404467:				; CODE XREF: sub_404201+25Dj
		mov	ecx, dword_42EBFC
		xor	esi, esi
		cmp	[ecx+10h], esi
		jz	short loc_40449F
		push	eax		; int
		push	0FFFFFFFBh	; lpString2
		push	3FFh		; nIDDlgItem
		call	sub_404561
		cmp	[ebp+lpString2], esi
		jz	short loc_404491
		push	edi		; int
		push	0FFFFFFFCh	; lpString2
		push	ebx		; nIDDlgItem
		call	sub_404561
		jmp	short loc_40449F
; ---------------------------------------------------------------------------

loc_404491:				; CODE XREF: sub_404201+283j
		push	offset pszPath	; lpString
		push	ebx		; nIDDlgItem
		push	[ebp+hDlg]	; hDlg
		call	SetDlgItemTextA	; SetDlgItemTextA

loc_40449F:				; CODE XREF: sub_404201+271j
					; sub_404201+28Ej
		mov	eax, [ebp+var_4]
		cmp	eax, esi
		mov	dword_42F4C4, eax
		jnz	short loc_4044B5
		push	7
		call	sub_401410
		mov	[ebp+var_4], eax

loc_4044B5:				; CODE XREF: sub_404201+2A8j
		mov	eax, [ebp+var_20]
		test	[eax+14h], ebx
		jz	short loc_4044C0
		mov	[ebp+var_4], esi

loc_4044C0:				; CODE XREF: sub_404201+2BAj
		xor	eax, eax
		cmp	[ebp+var_4], esi
		setz	al
		push	eax		; bEnable
		call	sub_403DE5
		cmp	[ebp+var_4], esi
		jnz	short loc_4044E0
		cmp	dword_42A890, esi
		jnz	short loc_4044E0
		call	sub_404196

loc_4044E0:				; CODE XREF: sub_404201+2D0j
					; sub_404201+2D8j
		mov	dword_42A890, esi

loc_4044E6:				; CODE XREF: sub_404201+B4j
					; sub_404201+DFj ...
		push	[ebp+hWnd]	; hWnd
		push	[ebp+hdc]	; hdc
		push	[ebp+arg_4]	; int
		call	sub_403E2A
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	10h
sub_404201	endp


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

; Attributes: bp-based frame

; int __stdcall	sub_4044FB(HWND	hWnd,int,LPCITEMIDLIST pidl,LPARAM pszPath)

sub_4044FB	proc near		; DATA XREF: sub_404201+117o

hWnd		= dword	ptr  8
arg_4		= dword	ptr  0Ch
pidl		= dword	ptr  10h
pszPath		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		cmp	[ebp+arg_4], 1
		push	esi
		mov	esi, ds:SendMessageA
		jnz	short loc_404527
		push	[ebp+pszPath]	; lpString
		push	3FBh		; nIDDlgItem
		call	sub_4052BF
		push	[ebp+pszPath]	; lParam
		push	1		; wParam
		push	466h		; Msg
		push	[ebp+hWnd]	; hWnd
		call	esi ; SendMessageA

loc_404527:				; CODE XREF: sub_4044FB+Ej
		cmp	[ebp+arg_4], 2
		jnz	short loc_40455A
		push	[ebp+pszPath]	; pszPath
		push	[ebp+pidl]	; pidl
		call	ds:SHGetPathFromIDListA	; SHGetPathFromIDListA
		test	eax, eax
		jz	short loc_40454B
		push	7
		call	sub_401410
		test	eax, eax
		jnz	short loc_40454B
		inc	eax
		jmp	short loc_40454D
; ---------------------------------------------------------------------------

loc_40454B:				; CODE XREF: sub_4044FB+40j
					; sub_4044FB+4Bj
		xor	eax, eax

loc_40454D:				; CODE XREF: sub_4044FB+4Ej
		push	eax		; lParam
		push	0		; wParam
		push	465h		; Msg
		push	[ebp+hWnd]	; hWnd
		call	esi ; SendMessageA

loc_40455A:				; CODE XREF: sub_4044FB+30j
		xor	eax, eax
		pop	esi
		pop	ebp
		retn	10h
sub_4044FB	endp


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

; Attributes: bp-based frame

; int __stdcall	sub_404561(int nIDDlgItem,LPCSTR lpString2,int)

sub_404561	proc near		; CODE XREF: sub_404201+27Bp
					; sub_404201+289p ...

var_40		= byte ptr -40h
String1		= byte ptr -20h
nIDDlgItem	= dword	ptr  8
lpString2	= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 40h
		push	ebx
		push	esi
		mov	esi, [ebp+arg_8]
		push	edi
		push	14h
		cmp	esi, 100000h
		pop	edi
		push	0FFFFFFDCh
		pop	ebx
		jnb	short loc_404581
		push	0Ah
		pop	edi
		push	0FFFFFFDDh
		pop	ebx

loc_404581:				; CODE XREF: sub_404561+18j
		cmp	esi, 400h
		jnb	short loc_40458E
		push	0FFFFFFDEh
		xor	edi, edi
		pop	ebx

loc_40458E:				; CODE XREF: sub_404561+26j
		cmp	esi, 0FFFF3333h
		jnb	short loc_4045A5
		xor	eax, eax
		mov	ecx, edi
		inc	eax
		push	14h
		shl	eax, cl
		pop	ecx
		cdq
		idiv	ecx
		add	esi, eax

loc_4045A5:				; CODE XREF: sub_404561+33j
		lea	eax, [ebp+String1]
		push	0FFFFFFDFh	; lpString2
		push	eax		; lpString1
		call	sub_4059FD
		push	eax
		lea	eax, [ebp+var_40]
		push	ebx		; lpString2
		push	eax		; lpString1
		call	sub_4059FD
		push	eax
		mov	eax, esi
		and	eax, 0FFFFFFh
		mov	ecx, edi
		push	0Ah
		xor	edx, edx
		lea	eax, [eax+eax*4]
		add	eax, eax
		shr	eax, cl
		pop	ecx
		div	ecx
		mov	ecx, edi
		shr	esi, cl
		push	edx
		push	esi
		push	offset aU_USS	; "%u.%u%s%s"
		mov	esi, offset byte_42A8A0
		push	[ebp+lpString2]	; lpString2
		push	esi		; lpString1
		call	sub_4059FD
		push	esi		; lpString
		mov	edi, eax
		call	lstrlenA	; lstrlenA
		add	edi, eax
		push	edi		; LPSTR
		call	ds:wsprintfA	; wsprintfA
		add	esp, 18h
		push	esi		; lpString
		push	[ebp+nIDDlgItem] ; nIDDlgItem
		push	dword_42EBF8	; hDlg
		call	SetDlgItemTextA	; SetDlgItemTextA
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	0Ch
sub_404561	endp


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



sub_404616	proc near		; CODE XREF: sub_404201+256p
					; sub_4046C3+595p ...

arg_0		= dword	ptr  4

		mov	edx, dword_42F44C
		mov	ecx, dword_42F448
		xor	eax, eax
		test	edx, edx
		jz	short locret_404640
		push	esi

loc_404629:				; CODE XREF: sub_404616+27j
		test	byte ptr [ecx+8], 1
		jz	short loc_404636
		mov	esi, [esp+4+arg_0]
		add	eax, [ecx+esi*4]

loc_404636:				; CODE XREF: sub_404616+17j
		add	ecx, 418h
		dec	edx
		jnz	short loc_404629
		pop	esi

locret_404640:				; CODE XREF: sub_404616+10j
		retn	4
sub_404616	endp


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

; Attributes: bp-based frame

; int __stdcall	sub_404643(HWND	hWnd,int)

sub_404643	proc near		; CODE XREF: sub_4046C3+2D9p
					; sub_404CBD+56p

var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_14		= dword	ptr -14h
lParam		= tagPOINT ptr -10h
var_8		= byte ptr -8
var_4		= dword	ptr -4
hWnd		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 38h
		push	esi
		mov	esi, ds:SendMessageA
		push	edi
		mov	edi, [ebp+hWnd]
		push	0		; lParam
		push	9		; wParam
		push	110Ah		; Msg
		push	edi		; hWnd
		call	esi ; SendMessageA
		cmp	[ebp+arg_4], 0
		jz	short loc_4046A2
		call	ds:GetMessagePos	; GetMessagePos
		movsx	ecx, ax
		shr	eax, 10h
		movsx	eax, ax
		mov	[ebp+lParam.y],	eax
		lea	eax, [ebp+lParam]
		push	eax		; lpPoint
		push	edi		; hWnd
		mov	[ebp+lParam.x],	ecx
		call	ds:ScreenToClient	; ScreenToClient
		lea	eax, [ebp+lParam]
		push	eax		; lParam
		push	0		; wParam
		push	1111h		; Msg
		push	edi		; hWnd
		call	esi ; SendMessageA
		test	[ebp+var_8], 66h
		jnz	short loc_40469F
		or	eax, 0FFFFFFFFh
		jmp	short loc_4046BD
; ---------------------------------------------------------------------------

loc_40469F:				; CODE XREF: sub_404643+55j
		mov	eax, [ebp+var_4]

loc_4046A2:				; CODE XREF: sub_404643+21j
		mov	[ebp+var_34], eax
		lea	eax, [ebp+var_38]
		push	eax		; lParam
		push	0		; wParam
		push	110Ch		; Msg
		push	edi		; hWnd
		mov	[ebp+var_38], 4
		call	esi ; SendMessageA
		mov	eax, [ebp+var_14]

loc_4046BD:				; CODE XREF: sub_404643+5Aj
		pop	edi
		pop	esi
		leave
		retn	8
sub_404643	endp


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

; Attributes: bp-based frame

; int __stdcall	sub_4046C3(HWND	hDlg,int,HDC hdc,int)

sub_4046C3	proc near		; DATA XREF: .data:0040928Co

lParam		= dword	ptr -50h
var_4C		= dword	ptr -4Ch
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
ho		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
wParam		= dword	ptr -8
hWnd		= dword	ptr -4
hDlg		= dword	ptr  8
arg_4		= dword	ptr  0Ch
hdc		= dword	ptr  10h
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		sub	esp, 50h
		push	ebx
		push	esi
		mov	esi, ds:GetDlgItem
		push	edi
		push	3F9h		; nIDDlgItem
		push	[ebp+hDlg]	; hDlg
		call	esi ; GetDlgItem
		push	408h		; nIDDlgItem
		mov	[ebp+wParam], eax
		push	[ebp+hDlg]	; hDlg
		call	esi ; GetDlgItem
		mov	ebx, dword_42F448
		mov	esi, ds:SendMessageA
		mov	[ebp+hWnd], eax
		mov	eax, dword_42F428
		add	eax, 94h
		xor	edi, edi
		cmp	[ebp+arg_4], 110h
		mov	[ebp+var_1C], ebx
		mov	[ebp+var_10], eax
		jnz	loc_404932
		mov	eax, [ebp+hDlg]
		push	2
		mov	dword_42F480, eax
		mov	eax, dword_42F44C
		pop	ebx
		mov	[ebp+var_18], edi
		shl	eax, 2
		push	eax		; dwBytes
		push	40h		; uFlags
		mov	[ebp+var_C], ebx
		call	ds:GlobalAlloc	; GlobalAlloc
		push	6Eh		; lpBitmapName
		mov	dword_42A898, eax
		push	hModule		; hInstance
		call	ds:LoadBitmapA	; LoadBitmapA
		push	offset sub_404CBD ; dwNewLong
		push	0FFFFFFFCh	; nIndex
		push	[ebp+hWnd]	; hWnd
		mov	[ebp+ho], eax
		call	ds:SetWindowLongA	; SetWindowLongA
		push	edi		; cGrow
		push	6		; cInitial
		push	21h		; flags
		push	10h		; cy
		push	10h		; cx
		mov	lpPrevWndFunc, eax
		call	ds:ImageList_Create	; ImageList_Create
		push	0FF00FFh	; crMask
		mov	lParam,	eax
		push	[ebp+ho]	; hbmImage
		push	eax		; himl
		call	ds:ImageList_AddMasked	; ImageList_AddMasked
		push	lParam		; lParam
		push	ebx		; wParam
		push	1109h		; Msg
		push	[ebp+hWnd]	; hWnd
		call	esi ; SendMessageA
		push	edi		; lParam
		push	edi		; wParam
		push	111Ch		; Msg
		push	[ebp+hWnd]	; hWnd
		call	esi ; SendMessageA
		cmp	eax, 10h
		jge	short loc_4047B6
		push	edi		; lParam
		push	10h		; wParam
		push	111Bh		; Msg
		push	[ebp+hWnd]	; hWnd
		call	esi ; SendMessageA

loc_4047B6:				; CODE XREF: sub_4046C3+E4j
		push	[ebp+ho]	; ho
		call	ds:DeleteObject	; DeleteObject
		xor	ebx, ebx

loc_4047C1:				; CODE XREF: sub_4046C3+133j
		mov	eax, [ebp+var_10]
		mov	eax, [eax+ebx*4]
		cmp	eax, edi
		jz	short loc_4047F2
		cmp	ebx, 20h
		jz	short loc_4047D3
		mov	[ebp+var_C], edi

loc_4047D3:				; CODE XREF: sub_4046C3+10Bj
		push	eax		; lpString2
		push	edi		; lpString1
		call	sub_4059FD
		push	eax		; lParam
		push	edi		; wParam
		push	143h		; Msg
		push	[ebp+wParam]	; hWnd
		call	esi ; SendMessageA
		push	ebx		; lParam
		push	eax		; wParam
		push	151h		; Msg
		push	[ebp+wParam]	; hWnd
		call	esi ; SendMessageA

loc_4047F2:				; CODE XREF: sub_4046C3+106j
		inc	ebx
		cmp	ebx, 21h
		jl	short loc_4047C1
		mov	edi, [ebp+arg_C]
		mov	ebx, [ebp+var_C]
		push	dword ptr [edi+ebx*4+30h] ; lpString2
		push	15h		; int
		push	[ebp+hDlg]	; hDlg
		call	sub_403DC3
		push	dword ptr [edi+ebx*4+34h] ; lpString2
		push	16h		; int
		push	[ebp+hDlg]	; hDlg
		call	sub_403DC3
		xor	edi, edi
		xor	ebx, ebx
		cmp	dword_42F44C, edi
		jle	loc_4048EE
		mov	eax, [ebp+var_1C]
		lea	edx, [eax+8]
		mov	[ebp+ho], edx

loc_404833:				; CODE XREF: sub_4046C3+21Fj
		lea	eax, [edx+10h]
		cmp	byte ptr [eax],	0
		jz	loc_4048CF
		mov	[ebp+var_38], eax
		mov	eax, [edx]
		push	20h
		mov	edx, eax
		pop	ecx
		mov	[ebp+lParam], ebx
		and	edx, ecx
		mov	[ebp+var_4C], 0FFFF0002h
		test	al, 2
		mov	[ebp+var_48], 0Dh
		mov	[ebp+var_3C], ecx
		mov	[ebp+var_24], edi
		mov	[ebp+var_40], edx
		jz	short loc_4048A1
		lea	eax, [ebp+lParam]
		mov	[ebp+var_48], 4Dh
		push	eax		; lParam
		push	0		; wParam
		push	1100h		; Msg
		mov	[ebp+var_28], 1
		push	[ebp+hWnd]	; hWnd
		call	esi ; SendMessageA
		mov	ecx, dword_42A898
		mov	[ebp+var_18], 1
		mov	[ecx+edi*4], eax
		mov	eax, dword_42A898
		mov	ebx, [eax+edi*4]
		jmp	short loc_4048CF
; ---------------------------------------------------------------------------

loc_4048A1:				; CODE XREF: sub_4046C3+1A4j
		test	al, 4
		jz	short loc_4048B6
		push	ebx		; lParam
		push	3		; wParam
		push	110Ah		; Msg
		push	[ebp+hWnd]	; hWnd
		call	esi ; SendMessageA
		mov	ebx, eax
		jmp	short loc_4048CF
; ---------------------------------------------------------------------------

loc_4048B6:				; CODE XREF: sub_4046C3+1E0j
		lea	eax, [ebp+lParam]
		push	eax		; lParam
		push	0		; wParam
		push	1100h		; Msg
		push	[ebp+hWnd]	; hWnd
		call	esi ; SendMessageA
		mov	ecx, dword_42A898
		mov	[ecx+edi*4], eax

loc_4048CF:				; CODE XREF: sub_4046C3+176j
					; sub_4046C3+1DCj ...
		mov	edx, [ebp+ho]
		inc	edi
		add	edx, 418h
		cmp	edi, dword_42F44C
		mov	[ebp+ho], edx
		jl	loc_404833
		cmp	[ebp+var_18], 0
		jnz	short loc_404907

loc_4048EE:				; CODE XREF: sub_4046C3+161j
		push	0FFFFFFF0h	; nIndex
		push	[ebp+hWnd]	; hWnd
		call	ds:GetWindowLongA	; GetWindowLongA
		and	al, 0FBh
		push	eax		; dwNewLong
		push	0FFFFFFF0h	; nIndex
		push	[ebp+hWnd]	; hWnd
		call	ds:SetWindowLongA	; SetWindowLongA

loc_404907:				; CODE XREF: sub_4046C3+229j
		cmp	[ebp+var_C], 0
		jnz	short loc_404925
		push	5		; nCmdShow
		push	[ebp+wParam]	; hWnd
		call	ds:ShowWindow	; ShowWindow
		push	[ebp+wParam]	; wParam
		call	sub_403DF8
		jmp	loc_404CA8
; ---------------------------------------------------------------------------

loc_404925:				; CODE XREF: sub_4046C3+248j
		push	[ebp+hWnd]	; wParam
		call	sub_403DF8
		mov	ebx, [ebp+var_1C]
		xor	edi, edi

loc_404932:				; CODE XREF: sub_4046C3+4Ej
		cmp	[ebp+arg_4], 405h
		jnz	short loc_40494D
		xor	ecx, ecx
		mov	[ebp+hdc], edi
		inc	ecx
		mov	[ebp+arg_4], 40Fh
		mov	[ebp+arg_C], ecx
		jmp	short loc_404950
; ---------------------------------------------------------------------------

loc_40494D:				; CODE XREF: sub_4046C3+276j
		mov	ecx, [ebp+arg_C]

loc_404950:				; CODE XREF: sub_4046C3+288j
		cmp	[ebp+arg_4], 4Eh
		mov	eax, 413h
		jz	short loc_404964
		cmp	[ebp+arg_4], eax
		jnz	loc_404A4B

loc_404964:				; CODE XREF: sub_4046C3+296j
		cmp	[ebp+arg_4], eax
		mov	[ebp+var_C], ecx
		jz	short loc_404979
		cmp	dword ptr [ecx+4], 408h
		jnz	loc_404A4B

loc_404979:				; CODE XREF: sub_4046C3+2A7j
		test	byte ptr dword_42F430+1, 2
		jnz	short loc_4049F8
		cmp	[ebp+arg_4], eax
		jz	short loc_404990
		mov	ecx, [ebp+arg_C]
		cmp	dword ptr [ecx+8], 0FFFFFFFEh
		jnz	short loc_4049F8

loc_404990:				; CODE XREF: sub_4046C3+2C2j
		xor	ecx, ecx
		cmp	[ebp+arg_4], eax
		setnz	cl
		push	ecx		; int
		push	[ebp+hWnd]	; hWnd
		call	sub_404643
		cmp	eax, edi
		jl	short loc_4049F8
		mov	ecx, eax
		imul	ecx, 418h
		lea	edx, [ecx+ebx+8]
		mov	ecx, [edx]
		test	cl, 10h
		jnz	short loc_4049F8
		test	cl, 40h
		jz	short loc_4049D1
		xor	ecx, 80h
		test	cl, cl
		jns	short loc_4049CC
		or	ecx, 1
		jmp	short loc_4049D4
; ---------------------------------------------------------------------------

loc_4049CC:				; CODE XREF: sub_4046C3+302j
		and	ecx, 0FFFFFFFEh
		jmp	short loc_4049D4
; ---------------------------------------------------------------------------

loc_4049D1:				; CODE XREF: sub_4046C3+2F8j
		xor	ecx, 1

loc_4049D4:				; CODE XREF: sub_4046C3+307j
					; sub_4046C3+30Cj
		push	eax
		mov	[edx], ecx
		call	sub_40117D
		mov	eax, dword_42F430
		xor	ecx, ecx
		not	eax
		inc	ecx
		mov	[ebp+arg_4], 40Fh
		shr	eax, 8
		and	eax, ecx
		mov	[ebp+hdc], ecx
		mov	[ebp+arg_C], eax

loc_4049F8:				; CODE XREF: sub_4046C3+2BDj
					; sub_4046C3+2CBj ...
		cmp	[ebp+var_C], edi
		jz	short loc_404A4B
		mov	eax, [ebp+var_C]
		cmp	dword ptr [eax+8], 0FFFFFE6Eh
		jnz	short loc_404A17
		push	dword ptr [eax+5Ch] ; lParam
		push	edi		; wParam
		push	419h		; Msg
		push	[ebp+hWnd]	; hWnd
		call	esi ; SendMessageA

loc_404A17:				; CODE XREF: sub_4046C3+344j
		mov	eax, [ebp+var_C]
		cmp	dword ptr [eax+8], 0FFFFFE6Ah
		jnz	short loc_404A4B
		cmp	dword ptr [eax+0Ch], 2
		jnz	short loc_404A3B
		mov	eax, [eax+5Ch]
		imul	eax, 418h
		lea	eax, [eax+ebx+8]
		or	dword ptr [eax], 20h
		jmp	short loc_404A4B
; ---------------------------------------------------------------------------

loc_404A3B:				; CODE XREF: sub_4046C3+364j
		mov	eax, [eax+5Ch]
		imul	eax, 418h
		lea	ebx, [eax+ebx+8]
		and	dword ptr [ebx], 0FFFFFFDFh

loc_404A4B:				; CODE XREF: sub_4046C3+29Bj
					; sub_4046C3+2B0j ...
		cmp	[ebp+arg_4], 111h
		jnz	short loc_404AC6
		cmp	word ptr [ebp+hdc], 3F9h
		jnz	loc_404CA8
		mov	eax, [ebp+hdc]
		shr	eax, 10h
		cmp	ax, 1
		jnz	loc_404CA8
		push	edi		; lParam
		push	edi		; wParam
		push	147h		; Msg
		push	[ebp+wParam]	; hWnd
		call	esi ; SendMessageA
		cmp	eax, 0FFFFFFFFh
		jz	loc_404CA8
		push	edi		; lParam
		push	eax		; wParam
		push	150h		; Msg
		push	[ebp+wParam]	; hWnd
		call	esi ; SendMessageA
		mov	ebx, eax
		cmp	ebx, 0FFFFFFFFh
		jz	short loc_404AA0
		mov	eax, [ebp+var_10]
		cmp	[eax+ebx*4], edi
		jnz	short loc_404AA3

loc_404AA0:				; CODE XREF: sub_4046C3+3D3j
		push	20h
		pop	ebx

loc_404AA3:				; CODE XREF: sub_4046C3+3DBj
		push	ebx
		call	sub_401299
		push	ebx		; lParam
		push	edi		; wParam
		push	420h		; Msg
		push	[ebp+hDlg]	; hWnd
		call	esi ; SendMessageA
		mov	[ebp+hdc], 1
		mov	[ebp+arg_C], edi
		mov	[ebp+arg_4], 40Fh

loc_404AC6:				; CODE XREF: sub_4046C3+38Fj
		cmp	[ebp+arg_4], 200h
		jnz	short loc_404ADB
		push	edi		; lParam
		push	edi		; wParam
		push	200h		; Msg
		push	[ebp+hWnd]	; hWnd
		call	esi ; SendMessageA

loc_404ADB:				; CODE XREF: sub_4046C3+40Aj
		cmp	[ebp+arg_4], 40Bh
		jnz	short loc_404B16
		mov	eax, lParam
		cmp	eax, edi
		jz	short loc_404AF4
		push	eax		; himl
		call	ds:ImageList_Destroy	; ImageList_Destroy

loc_404AF4:				; CODE XREF: sub_4046C3+428j
		mov	eax, dword_42A898
		cmp	eax, edi
		jz	short loc_404B04
		push	eax		; hMem
		call	ds:GlobalFree	; GlobalFree

loc_404B04:				; CODE XREF: sub_4046C3+438j
		mov	lParam,	edi
		mov	dword_42A898, edi
		mov	dword_42F480, edi

loc_404B16:				; CODE XREF: sub_4046C3+41Fj
		cmp	[ebp+arg_4], 40Fh
		jnz	loc_404C6A
		push	edi
		push	edi
		call	sub_4011EF
		cmp	[ebp+hdc], edi
		jz	short loc_404B36
		push	8
		call	sub_401410

loc_404B36:				; CODE XREF: sub_4046C3+46Aj
		cmp	[ebp+arg_C], edi
		jz	short loc_404B7A
		push	dword_42A898
		call	sub_4012E2
		mov	ebx, eax
		push	ebx
		call	sub_401299
		xor	eax, eax
		xor	ecx, ecx
		cmp	ebx, edi
		jle	short loc_404B64

loc_404B56:				; CODE XREF: sub_4046C3+49Fj
		mov	edx, [ebp+var_10]
		cmp	[edx+eax*4], edi
		jz	short loc_404B5F
		inc	ecx

loc_404B5F:				; CODE XREF: sub_4046C3+499j
		inc	eax
		cmp	eax, ebx
		jl	short loc_404B56

loc_404B64:				; CODE XREF: sub_4046C3+491j
		push	edi		; lParam
		push	ecx		; wParam
		push	14Eh		; Msg
		push	[ebp+wParam]	; hWnd
		call	esi ; SendMessageA
		mov	[ebp+arg_C], ebx
		mov	[ebp+arg_4], 420h

loc_404B7A:				; CODE XREF: sub_4046C3+476j
		push	edi
		push	edi
		call	sub_4011EF
		mov	eax, dword_42A898
		cmp	dword_42F44C, edi
		mov	[ebp+var_1C], eax
		mov	eax, dword_42F448
		mov	[ebp+var_38], 0F030h
		mov	[ebp+var_C], edi
		jle	loc_404C40
		lea	ebx, [eax+8]

loc_404BA7:				; CODE XREF: sub_4046C3+577j
		mov	eax, [ebp+var_1C]
		mov	ecx, [ebp+var_C]
		mov	eax, [eax+ecx*4]
		cmp	eax, edi
		jz	short loc_404C28
		mov	ecx, [ebx]
		mov	[ebp+var_40], eax
		test	ch, 1
		mov	[ebp+var_44], 8
		jz	short loc_404BD6
		lea	eax, [ebx+10h]
		mov	[ebp+var_44], 9
		mov	[ebp+var_34], eax
		and	byte ptr [ebx+1], 0FEh

loc_404BD6:				; CODE XREF: sub_4046C3+500j
		test	cl, 40h
		jz	short loc_404BE0
		push	3
		pop	eax
		jmp	short loc_404BEE
; ---------------------------------------------------------------------------

loc_404BE0:				; CODE XREF: sub_4046C3+516j
		mov	eax, ecx
		and	eax, 1
		inc	eax
		test	cl, 10h
		jz	short loc_404BEE
		add	eax, 3

loc_404BEE:				; CODE XREF: sub_4046C3+51Bj
					; sub_4046C3+526j
		mov	edx, ecx
		push	[ebp+var_40]	; lParam
		shl	eax, 0Bh
		and	edx, 8
		or	eax, edx
		mov	edx, ecx
		sar	ecx, 5
		add	eax, eax
		and	edx, 20h
		and	ecx, 1
		or	eax, edx
		inc	ecx
		mov	[ebp+var_3C], eax
		push	ecx		; wParam
		push	1102h		; Msg
		push	[ebp+hWnd]	; hWnd
		call	esi ; SendMessageA
		lea	eax, [ebp+var_44]
		push	eax		; lParam
		push	edi		; wParam
		push	110Dh		; Msg
		push	[ebp+hWnd]	; hWnd
		call	esi ; SendMessageA

loc_404C28:				; CODE XREF: sub_4046C3+4EFj
		inc	[ebp+var_C]
		add	ebx, 418h
		mov	eax, [ebp+var_C]
		cmp	eax, dword_42F44C
		jl	loc_404BA7

loc_404C40:				; CODE XREF: sub_4046C3+4DBj
		push	1		; bErase
		push	edi		; lpRect
		push	[ebp+hWnd]	; hWnd
		call	ds:InvalidateRect	; InvalidateRect
		mov	eax, dword_42EBFC
		cmp	[eax+10h], edi
		jz	short loc_404C6A
		push	5
		call	sub_404616
		push	eax		; int
		push	0FFFFFFFBh	; lpString2
		push	3FFh		; nIDDlgItem
		call	sub_404561

loc_404C6A:				; CODE XREF: sub_4046C3+45Aj
					; sub_4046C3+591j
		cmp	[ebp+arg_4], 420h
		jnz	short loc_404CA8
		test	byte ptr dword_42F430+1, 1
		jz	short loc_404CA8
		xor	eax, eax
		cmp	[ebp+arg_C], 20h
		mov	esi, ds:ShowWindow
		setz	al
		shl	eax, 3
		mov	edi, eax
		push	edi		; nCmdShow
		push	[ebp+hWnd]	; hWnd
		call	esi ; ShowWindow
		push	edi		; nCmdShow
		push	3FEh		; nIDDlgItem
		push	[ebp+hDlg]	; hDlg
		call	ds:GetDlgItem	; GetDlgItem
		push	eax		; hWnd
		call	esi ; ShowWindow

loc_404CA8:				; CODE XREF: sub_4046C3+25Dj
					; sub_4046C3+397j ...
		push	[ebp+arg_C]	; hWnd
		push	[ebp+hdc]	; hdc
		push	[ebp+arg_4]	; int
		call	sub_403E2A
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	10h
sub_4046C3	endp


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

; Attributes: bp-based frame

; int __stdcall	sub_404CBD(HWND	hWnd,UINT Msg,WPARAM wParam,int)

sub_404CBD	proc near		; DATA XREF: sub_4046C3+89o

hWnd		= dword	ptr  8
Msg		= dword	ptr  0Ch
wParam		= dword	ptr  10h
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		cmp	[ebp+Msg], 102h
		push	ebx
		push	esi
		jnz	short loc_404CE6
		cmp	[ebp+wParam], 20h
		jnz	loc_404D5F
		push	413h		; Msg
		call	sub_403E0F
		xor	eax, eax
		jmp	loc_404D78
; ---------------------------------------------------------------------------

loc_404CE6:				; CODE XREF: sub_404CBD+Cj
		cmp	[ebp+Msg], 2
		jnz	short loc_404CF3
		or	dword_40929C, 0FFFFFFFFh

loc_404CF3:				; CODE XREF: sub_404CBD+2Dj
		cmp	[ebp+Msg], 200h
		mov	esi, 419h
		jnz	short loc_404D1F
		push	[ebp+hWnd]	; hWnd
		call	ds:IsWindowVisible	; IsWindowVisible
		test	eax, eax
		jz	short loc_404D5F
		push	1		; int
		push	[ebp+hWnd]	; hWnd
		call	sub_404643
		mov	ebx, eax
		mov	[ebp+Msg], esi
		jmp	short loc_404D22
; ---------------------------------------------------------------------------

loc_404D1F:				; CODE XREF: sub_404CBD+42j
		mov	ebx, [ebp+arg_C]

loc_404D22:				; CODE XREF: sub_404CBD+60j
		cmp	[ebp+Msg], esi
		jnz	short loc_404D62
		cmp	dword_40929C, ebx
		jz	short loc_404D62
		push	edi
		mov	esi, offset dword_430000
		mov	edi, offset byte_42A8A0
		push	esi		; lpString2
		push	edi		; lpString1
		mov	dword_40929C, ebx
		call	sub_4059DB
		push	ebx		; int
		push	esi		; LPSTR
		call	sub_405939
		push	6
		call	sub_401410
		push	edi		; lpString2
		push	esi		; lpString1
		call	sub_4059DB
		pop	edi
		jmp	short loc_404D62
; ---------------------------------------------------------------------------

loc_404D5F:				; CODE XREF: sub_404CBD+12j
					; sub_404CBD+4Fj
		mov	ebx, [ebp+arg_C]

loc_404D62:				; CODE XREF: sub_404CBD+68j
					; sub_404CBD+70j ...
		push	ebx		; lParam
		push	[ebp+wParam]	; wParam
		push	[ebp+Msg]	; Msg
		push	[ebp+hWnd]	; hWnd
		push	lpPrevWndFunc	; lpPrevWndFunc
		call	ds:CallWindowProcA	; CallWindowProcA

loc_404D78:				; CODE XREF: sub_404CBD+24j
		pop	esi
		pop	ebx
		pop	ebp
		retn	10h
sub_404CBD	endp


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

; Attributes: bp-based frame

; int __stdcall	sub_404D7E(int,LPCSTR lpString2)

sub_404D7E	proc near		; CODE XREF: sub_401428+9p
					; sub_401439:loc_401495p ...

lParam		= dword	ptr -30h
wParam		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_1C		= dword	ptr -1Ch
var_8		= dword	ptr -8
hWnd		= dword	ptr -4
arg_0		= dword	ptr  8
lpString2	= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 30h
		mov	eax, dword_42EC04
		push	ebx
		xor	ebx, ebx
		push	esi
		cmp	eax, ebx
		push	edi
		mov	[ebp+hWnd], eax
		jz	loc_404E49
		mov	eax, dword_4092A0
		mov	esi, offset byte_42A080
		mov	edi, eax
		mov	[ebp+var_8], eax
		and	edi, 1
		jnz	short loc_404DB6
		push	[ebp+arg_0]	; lpString2
		push	esi		; lpString1
		call	sub_4059FD

loc_404DB6:				; CODE XREF: sub_404D7E+2Dj
		push	esi		; lpString
		call	lstrlenA	; lstrlenA
		cmp	[ebp+lpString2], ebx
		mov	[ebp+arg_0], eax
		jz	short loc_404DDF
		push	[ebp+lpString2]	; lpString
		call	lstrlenA	; lstrlenA
		add	eax, [ebp+arg_0]
		cmp	eax, 800h
		jnb	short loc_404E49
		push	[ebp+lpString2]	; lpString2
		push	esi		; lpString1
		call	lstrcatA	; lstrcatA

loc_404DDF:				; CODE XREF: sub_404D7E+44j
		test	byte ptr [ebp+var_8], 4
		jz	short loc_404DF2
		push	esi		; lpString
		push	dword_42EBE8	; hWnd
		call	ds:SetWindowTextA	; SetWindowTextA

loc_404DF2:				; CODE XREF: sub_404D7E+65j
		test	byte ptr [ebp+var_8], 2
		jz	short loc_404E3C
		push	ebx		; lParam
		push	ebx		; wParam
		push	1004h		; Msg
		mov	[ebp+var_1C], esi
		push	[ebp+hWnd]	; hWnd
		mov	esi, ds:SendMessageA
		mov	[ebp+lParam], 1
		call	esi ; SendMessageA
		sub	eax, edi
		mov	[ebp+var_28], ebx
		mov	[ebp+wParam], eax
		lea	eax, [ebp+lParam]
		push	eax		; lParam
		mov	eax, 1007h
		sub	eax, edi
		push	ebx		; wParam
		push	eax		; Msg
		push	[ebp+hWnd]	; hWnd
		call	esi ; SendMessageA
		push	ebx		; lParam
		push	[ebp+wParam]	; wParam
		push	1013h		; Msg
		push	[ebp+hWnd]	; hWnd
		call	esi ; SendMessageA

loc_404E3C:				; CODE XREF: sub_404D7E+78j
		cmp	edi, ebx
		jz	short loc_404E49
		mov	eax, [ebp+arg_0]
		mov	byte_42A080[eax], bl

loc_404E49:				; CODE XREF: sub_404D7E+15j
					; sub_404D7E+56j ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	8
sub_404D7E	endp


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


; DWORD	__stdcall StartAddress(LPVOID)

StartAddress	proc near		; CODE XREF: sub_403542+29Ap
					; DATA XREF: sub_404EBC+1BEo

hWnd		= dword	ptr  4

		push	esi
		mov	esi, dword_42F448
		push	edi
		mov	edi, dword_42F44C
		push	0		; pvReserved
		call	ds:OleInitialize
		or	dword_42F4D0, eax
		push	0		; Msg
		call	sub_403E0F
		test	edi, edi
		jz	short loc_404EA2
		add	esi, 0Ch

loc_404E7A:				; CODE XREF: StartAddress+48j
		dec	edi
		test	byte ptr [esi-4], 1
		jz	short loc_404E90
		push	[esp+8+hWnd]	; hWnd
		push	dword ptr [esi]	; int
		call	sub_40136D
		test	eax, eax
		jnz	short loc_404E9C

loc_404E90:				; CODE XREF: StartAddress+2Fj
		add	esi, 418h
		test	edi, edi
		jnz	short loc_404E7A
		jmp	short loc_404EA2
; ---------------------------------------------------------------------------

loc_404E9C:				; CODE XREF: StartAddress+3Ej
		inc	dword_42F4AC

loc_404EA2:				; CODE XREF: StartAddress+25j
					; StartAddress+4Aj
		push	404h		; Msg
		call	sub_403E0F
		call	ds:OleUninitialize
		mov	eax, dword_42F4AC
		pop	edi
		pop	esi
		retn	4
StartAddress	endp


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

; Attributes: bp-based frame

; int __stdcall	sub_404EBC(HWND	ThreadId,int,HDC hdc,int)

sub_404EBC	proc near		; DATA XREF: .data:00409294o

var_3C		= byte ptr -3Ch
lParam		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= byte ptr -1Ch
x		= tagRECT ptr -14h
hWnd		= dword	ptr -4
ThreadId	= dword	ptr  8
arg_4		= dword	ptr  0Ch
hdc		= dword	ptr  10h
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		sub	esp, 3Ch
		push	ebx
		push	esi
		push	edi
		mov	edi, dword_42EC04
		xor	ebx, ebx
		cmp	[ebp+arg_4], 110h
		mov	[ebp+hWnd], edi
		jnz	loc_40505D
		or	[ebp+var_2C], 0FFFFFFFFh
		or	[ebp+var_20], 0FFFFFFFFh
		xor	eax, eax
		lea	edi, [ebp+var_1C]
		mov	[ebp+lParam], 2
		mov	[ebp+var_30], ebx
		mov	[ebp+var_28], ebx
		mov	[ebp+var_24], ebx
		stosd
		stosd
		mov	eax, dword_42F428
		mov	edi, ds:GetDlgItem
		push	403h		; nIDDlgItem
		mov	ecx, [eax+5Ch]
		mov	eax, [eax+60h]
		push	[ebp+ThreadId]	; hDlg
		mov	[ebp+arg_4], ecx
		mov	[ebp+hdc], eax
		call	edi ; GetDlgItem
		push	3EEh		; nIDDlgItem
		mov	hWnd, eax
		push	[ebp+ThreadId]	; hDlg
		call	edi ; GetDlgItem
		push	3F8h		; nIDDlgItem
		mov	dword_42EBE8, eax
		push	[ebp+ThreadId]	; hDlg
		call	edi ; GetDlgItem
		push	hWnd		; wParam
		mov	dword_42EC04, eax
		mov	[ebp+hWnd], eax
		call	sub_403DF8
		push	4
		call	sub_404616
		mov	dword_42EBF4, eax
		lea	eax, [ebp+x]
		push	eax		; lpRect
		mov	nNumber, ebx
		push	[ebp+hWnd]	; hWnd
		call	ds:GetClientRect	; GetClientRect
		push	15h		; nIndex
		call	ds:GetSystemMetrics	; GetSystemMetrics
		mov	ecx, [ebp+x.right]
		mov	esi, ds:SendMessageA
		sub	ecx, eax
		lea	eax, [ebp+lParam]
		push	eax		; lParam
		push	ebx		; wParam
		push	101Bh		; Msg
		mov	[ebp+var_2C], ecx
		push	[ebp+hWnd]	; hWnd
		call	esi ; SendMessageA
		mov	eax, 4000h
		push	eax		; lParam
		push	eax		; wParam
		push	1036h		; Msg
		push	[ebp+hWnd]	; hWnd
		call	esi ; SendMessageA
		cmp	[ebp+arg_4], ebx
		jl	short loc_404FC4
		push	[ebp+arg_4]	; lParam
		push	ebx		; wParam
		push	1001h		; Msg
		push	[ebp+hWnd]	; hWnd
		call	esi ; SendMessageA
		push	[ebp+arg_4]	; lParam
		push	ebx		; wParam
		push	1026h		; Msg
		push	[ebp+hWnd]	; hWnd
		call	esi ; SendMessageA

loc_404FC4:				; CODE XREF: sub_404EBC+EAj
		cmp	[ebp+hdc], ebx
		jl	short loc_404FD7
		push	[ebp+hdc]	; lParam
		push	ebx		; wParam
		push	1024h		; Msg
		push	[ebp+hWnd]	; hWnd
		call	esi ; SendMessageA

loc_404FD7:				; CODE XREF: sub_404EBC+10Bj
		mov	eax, [ebp+arg_C]
		push	dword ptr [eax+30h] ; lpString2
		push	1Bh		; int
		push	[ebp+ThreadId]	; hDlg
		call	sub_403DC3
		test	byte ptr dword_42F430, 3
		jz	short loc_405019
		push	ebx		; nCmdShow
		push	hWnd		; hWnd
		call	ds:ShowWindow	; ShowWindow
		test	byte ptr dword_42F430, 2
		jnz	short loc_405013
		push	8		; nCmdShow
		push	[ebp+hWnd]	; hWnd
		call	ds:ShowWindow	; ShowWindow
		jmp	short loc_405019
; ---------------------------------------------------------------------------

loc_405013:				; CODE XREF: sub_404EBC+148j
		mov	hWnd, ebx

loc_405019:				; CODE XREF: sub_404EBC+132j
					; sub_404EBC+155j
		push	3ECh		; nIDDlgItem
		push	[ebp+ThreadId]	; hDlg
		call	edi ; GetDlgItem
		push	75300000h	; lParam
		mov	edi, eax
		push	ebx		; wParam
		push	401h		; Msg
		push	edi		; hWnd
		call	esi ; SendMessageA
		test	byte ptr dword_42F430, 4
		jz	loc_405231
		push	[ebp+hdc]	; lParam
		push	ebx		; wParam
		push	409h		; Msg
		push	edi		; hWnd
		call	esi ; SendMessageA
		push	[ebp+arg_4]	; lParam
		push	ebx		; wParam
		push	2001h		; Msg
		push	edi		; hWnd
		call	esi ; SendMessageA
		jmp	loc_405231
; ---------------------------------------------------------------------------

loc_40505D:				; CODE XREF: sub_404EBC+1Bj
		cmp	[ebp+arg_4], 405h
		jnz	short loc_40508E
		lea	eax, [ebp+ThreadId]
		push	eax		; lpThreadId
		push	ebx		; dwCreationFlags
		push	3ECh		; nIDDlgItem
		push	[ebp+ThreadId]	; hDlg
		call	ds:GetDlgItem	; GetDlgItem
		push	eax		; lpParameter
		push	offset StartAddress ; lpStartAddress
		push	ebx		; dwStackSize
		push	ebx		; lpThreadAttributes
		call	ds:CreateThread	; CreateThread
		push	eax		; hObject
		call	ds:CloseHandle	; CloseHandle

loc_40508E:				; CODE XREF: sub_404EBC+1A8j
		cmp	[ebp+arg_4], 111h
		mov	esi, ds:ShowWindow
		jnz	short loc_4050B8
		cmp	word ptr [ebp+hdc], 403h
		jnz	short loc_4050DA
		push	ebx		; nCmdShow
		push	hWnd		; hWnd
		call	esi ; ShowWindow
		push	8		; nCmdShow
		push	edi		; hWnd
		call	esi ; ShowWindow
		call	sub_404196

loc_4050B8:				; CODE XREF: sub_404EBC+1DFj
		cmp	[ebp+arg_4], 404h
		jnz	short loc_405116
		cmp	dword_42EBEC, ebx
		jz	short loc_4050EF
		push	78h		; wParam
		mov	nResult, 2
		call	sub_403D9C

loc_4050DA:				; CODE XREF: sub_404EBC+1E7j
					; sub_404EBC+25Ej ...
		push	[ebp+arg_C]	; hWnd
		push	[ebp+hdc]	; hdc
		push	[ebp+arg_4]	; int
		call	sub_403E2A

loc_4050E8:				; CODE XREF: sub_404EBC+377j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	10h
; ---------------------------------------------------------------------------

loc_4050EF:				; CODE XREF: sub_404EBC+20Bj
		push	8		; nCmdShow
		push	dword_42F424	; hWnd
		call	esi ; ShowWindow
		cmp	dword_42F4AC, ebx
		jnz	short loc_40510F
		mov	eax, dword_42A078
		push	ebx		; lpString2
		push	dword ptr [eax+34h] ; int
		call	sub_404D7E

loc_40510F:				; CODE XREF: sub_404EBC+243j
		push	1		; wParam
		call	sub_403D9C

loc_405116:				; CODE XREF: sub_404EBC+203j
		cmp	[ebp+arg_4], 7Bh
		jnz	short loc_4050DA
		cmp	[ebp+hdc], edi
		jnz	short loc_4050DA
		push	ebx		; lParam
		push	ebx		; wParam
		push	1004h		; Msg
		push	edi		; hWnd
		call	ds:SendMessageA	; SendMessageA
		cmp	eax, ebx
		mov	[ebp+arg_4], eax
		jle	loc_405231
		call	ds:CreatePopupMenu	; CreatePopupMenu
		push	0FFFFFFE1h	; lpString2
		push	ebx		; lpString1
		mov	esi, eax
		call	sub_4059FD
		push	eax		; lpNewItem
		push	1		; uIDNewItem
		push	ebx		; uFlags
		push	esi		; hMenu
		call	ds:AppendMenuA	; AppendMenuA
		mov	eax, [ebp+arg_C]
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_405170
		lea	eax, [ebp+x]
		push	eax		; lpRect
		push	edi		; hWnd
		call	ds:GetWindowRect	; GetWindowRect
		mov	ecx, [ebp+x.left]
		mov	eax, [ebp+x.top]
		jmp	short loc_405179
; ---------------------------------------------------------------------------

loc_405170:				; CODE XREF: sub_404EBC+29Fj
		movsx	ecx, ax
		shr	eax, 10h
		movsx	eax, ax

loc_405179:				; CODE XREF: sub_404EBC+2B2j
		push	ebx		; prcRect
		push	edi		; hWnd
		push	ebx		; nReserved
		push	eax		; y
		push	ecx		; x
		push	180h		; uFlags
		push	esi		; hMenu
		call	ds:TrackPopupMenu	; TrackPopupMenu
		xor	esi, esi
		inc	esi
		cmp	eax, esi
		jnz	loc_405231
		mov	eax, [ebp+arg_4]
		mov	[ebp+lParam], ebx
		mov	[ebp+var_28], offset byte_42A8A0
		mov	[ebp+var_24], 0FFFh
		mov	[ebp+ThreadId],	eax
		mov	edi, 102Dh

loc_4051B1:				; CODE XREF: sub_404EBC+310j
		dec	[ebp+ThreadId]
		lea	eax, [ebp+var_3C]
		push	eax		; lParam
		push	[ebp+ThreadId]	; wParam
		push	edi		; Msg
		push	[ebp+hWnd]	; hWnd
		call	ds:SendMessageA	; SendMessageA
		cmp	[ebp+ThreadId],	ebx
		lea	esi, [esi+eax+2]
		jnz	short loc_4051B1
		push	ebx		; hWndNewOwner
		call	ds:OpenClipboard	; OpenClipboard
		call	ds:EmptyClipboard	; EmptyClipboard
		push	esi		; dwBytes
		push	42h		; uFlags
		call	ds:GlobalAlloc	; GlobalAlloc
		push	eax		; hMem
		mov	[ebp+ThreadId],	eax
		call	ds:GlobalLock	; GlobalLock
		mov	esi, eax

loc_4051F0:				; CODE XREF: sub_404EBC+359j
		lea	eax, [ebp+var_3C]
		mov	[ebp+var_28], esi
		push	eax		; lParam
		push	ebx		; wParam
		push	edi		; Msg
		push	[ebp+hWnd]	; hWnd
		call	ds:SendMessageA	; SendMessageA
		push	esi		; lpString
		call	lstrlenA	; lstrlenA
		add	esi, eax
		mov	word ptr [esi],	0A0Dh
		inc	esi
		inc	esi
		inc	ebx
		cmp	ebx, [ebp+arg_4]
		jl	short loc_4051F0
		push	[ebp+ThreadId]	; hMem
		call	ds:GlobalUnlock	; GlobalUnlock
		push	[ebp+ThreadId]	; hMem
		push	1		; uFormat
		call	ds:SetClipboardData	; SetClipboardData
		call	ds:CloseClipboard	; CloseClipboard

loc_405231:				; CODE XREF: sub_404EBC+17Ej
					; sub_404EBC+19Cj ...
		xor	eax, eax
		jmp	loc_4050E8
sub_404EBC	endp


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

; Attributes: bp-based frame


sub_405238	proc near		; CODE XREF: sub_404201+13Fp
					; sub_4059FD+162p

ppMalloc	= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		lea	eax, [ebp+ppMalloc]
		push	eax		; ppMalloc
		call	ds:SHGetMalloc	; SHGetMalloc
		mov	eax, [ebp+ppMalloc]
		test	eax, eax
		jz	short locret_40525F
		push	[ebp+arg_0]
		mov	ecx, [eax]
		push	eax
		call	dword ptr [ecx+14h]
		mov	eax, [ebp+ppMalloc]
		push	eax
		mov	ecx, [eax]
		call	dword ptr [ecx+8]

locret_40525F:				; CODE XREF: sub_405238+13j
		leave
		retn	4
sub_405238	endp


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

; Attributes: bp-based frame

; int __stdcall	sub_405263(LPSTR lpCommandLine,LPCSTR lpCurrentDirectory)

sub_405263	proc near		; CODE XREF: sub_401439+A79p
					; start+2D8p

hObject		= _PROCESS_INFORMATION ptr -10h
lpCommandLine	= dword	ptr  8
lpCurrentDirectory= dword ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	[ebp+lpCurrentDirectory] ; lpFileName
		mov	StartupInfo.cb,	44h
		call	ds:GetFileAttributesA	; GetFileAttributesA
		xor	ecx, ecx
		cmp	eax, 0FFFFFFFFh
		jz	short loc_405287
		test	al, 10h
		jnz	short loc_40528A

loc_405287:				; CODE XREF: sub_405263+1Ej
		mov	[ebp+lpCurrentDirectory], ecx

loc_40528A:				; CODE XREF: sub_405263+22j
		lea	eax, [ebp+hObject]
		push	eax		; lpProcessInformation
		push	offset StartupInfo ; lpStartupInfo
		push	[ebp+lpCurrentDirectory] ; lpCurrentDirectory
		push	ecx		; lpEnvironment
		push	ecx		; dwCreationFlags
		push	ecx		; bInheritHandles
		push	ecx		; lpThreadAttributes
		push	ecx		; lpProcessAttributes
		push	[ebp+lpCommandLine] ; lpCommandLine
		push	ecx		; lpApplicationName
		call	ds:CreateProcessA	; CreateProcessA
		test	eax, eax
		jz	short locret_4052B5
		push	[ebp+hObject.hThread] ;	hObject
		call	ds:CloseHandle	; CloseHandle
		mov	eax, [ebp+hObject.hProcess]

locret_4052B5:				; CODE XREF: sub_405263+44j
		leave
		retn	8
sub_405263	endp

; [00000006 BYTES: COLLAPSED FUNCTION SetDlgItemTextA. PRESS KEYPAD "+"	TO EXPAND]

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


; int __stdcall	sub_4052BF(int nIDDlgItem,LPSTR	lpString)

sub_4052BF	proc near		; CODE XREF: sub_404201+33p
					; sub_404201+1B5p ...

nIDDlgItem	= dword	ptr  4
lpString	= dword	ptr  8

		push	400h		; cchMax
		push	[esp+4+lpString] ; lpString
		push	[esp+8+nIDDlgItem] ; nIDDlgItem
		push	dword_42EBF8	; hDlg
		call	ds:GetDlgItemTextA	; GetDlgItemTextA
		retn	8
sub_4052BF	endp


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


; int __stdcall	sub_4052DB(LPCSTR lpText,int)

sub_4052DB	proc near		; CODE XREF: sub_401439+45Dp
					; sub_401439+521p ...

lpText		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	eax, [esp+arg_4]
		mov	ecx, eax
		and	ecx, 1FFFFFh
		cmp	dword_42F4C0, 0
		jz	short loc_4052F5
		shr	eax, 15h
		jnz	short locret_40531A

loc_4052F5:				; CODE XREF: sub_4052DB+13j
		cmp	dword_42F4C8, 0
		jz	short loc_405304
		xor	ecx, 180000h

loc_405304:				; CODE XREF: sub_4052DB+21j
		push	ecx		; uType
		push	offset Caption	; lpCaption
		push	[esp+8+lpText]	; lpText
		push	dword_42F424	; hWnd
		call	ds:MessageBoxA	; MessageBoxA

locret_40531A:				; CODE XREF: sub_4052DB+18j
		retn	8
sub_4052DB	endp


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

; Attributes: bp-based frame

; int __stdcall	sub_40531D(LPCSTR lpString1,int)

sub_40531D	proc near		; CODE XREF: sub_401439+553p
					; sub_40351D+1Fp ...

sz		= _WIN32_FIND_DATAA ptr	-148h
var_8		= dword	ptr -8
var_4		= dword	ptr -4
lpString1	= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 148h
		push	esi
		push	edi
		mov	edi, [ebp+lpString1]
		push	edi		; lpString2
		call	sub_4055C8
		test	byte ptr [ebp+arg_4], 8
		mov	[ebp+var_8], eax
		jz	short loc_405351
		push	edi		; lpFileName
		call	ds:DeleteFileA	; DeleteFileA
		neg	eax
		sbb	eax, eax
		inc	eax
		add	dword_42F4A8, eax
		jmp	loc_4054E2
; ---------------------------------------------------------------------------

loc_405351:				; CODE XREF: sub_40531D+1Bj
		push	ebx
		mov	ebx, [ebp+arg_4]
		and	ebx, 1
		mov	[ebp+var_4], ebx
		jz	short loc_40536F
		test	eax, eax
		jz	loc_405487
		test	byte ptr [ebp+arg_4], 2
		jz	loc_405487

loc_40536F:				; CODE XREF: sub_40531D+3Ej
		mov	esi, offset byte_42B8A8
		push	edi		; lpString2
		push	esi		; lpString1
		call	sub_4059DB
		test	ebx, ebx
		jz	short loc_40538C
		push	offset a_	; "\\*.*"
		push	esi		; lpString1
		call	lstrcatA	; lstrcatA
		jmp	short loc_405392
; ---------------------------------------------------------------------------

loc_40538C:				; CODE XREF: sub_40531D+60j
		push	edi		; lpszStart
		call	sub_40552F

loc_405392:				; CODE XREF: sub_40531D+6Dj
		push	offset SubBlock	; "\\"
		push	edi		; lpString1
		call	lstrcatA	; lstrcatA
		push	edi		; lpString
		call	lstrlenA	; lstrlenA
		mov	ebx, eax
		lea	eax, [ebp+sz]
		push	eax		; lpFindFileData
		push	esi		; lpFileName
		add	ebx, edi
		call	ds:FindFirstFileA	; FindFirstFileA
		cmp	eax, 0FFFFFFFFh
		mov	[ebp+lpString1], eax
		jz	loc_40547D

loc_4053C1:				; CODE XREF: sub_40531D+151j
		lea	eax, [ebp+sz.cFileName]
		push	3Fh		; char
		push	eax		; lpsz
		lea	esi, [ebp+sz.cFileName]
		call	sub_405513
		cmp	byte ptr [eax],	0
		jz	short loc_4053E3
		cmp	[ebp+sz.cAlternateFileName], 0
		jz	short loc_4053E3
		lea	esi, [ebp+sz.cAlternateFileName]

loc_4053E3:				; CODE XREF: sub_40531D+BBj
					; sub_40531D+C1j
		cmp	byte ptr [esi],	2Eh
		jnz	short loc_4053F9
		mov	al, [esi+1]
		test	al, al
		jz	short loc_40545C
		cmp	al, 2Eh
		jnz	short loc_4053F9
		cmp	byte ptr [esi+2], 0
		jz	short loc_40545C

loc_4053F9:				; CODE XREF: sub_40531D+C9j
					; sub_40531D+D4j
		push	esi		; lpString2
		push	ebx		; lpString1
		call	sub_4059DB
		mov	eax, [ebp+sz.dwFileAttributes]
		test	al, 10h
		jz	short loc_40541F
		mov	eax, [ebp+arg_4]
		and	eax, 3
		cmp	al, 3
		jnz	short loc_40545C
		push	[ebp+arg_4]	; int
		push	edi		; lpString1
		call	sub_40531D
		jmp	short loc_40545C
; ---------------------------------------------------------------------------

loc_40541F:				; CODE XREF: sub_40531D+EBj
		and	al, 0FEh
		push	eax		; dwFileAttributes
		push	edi		; lpFileName
		call	ds:SetFileAttributesA	; SetFileAttributesA
		push	edi		; lpFileName
		call	ds:DeleteFileA	; DeleteFileA
		test	eax, eax
		jnz	short loc_405454
		test	byte ptr [ebp+arg_4], 4
		jz	short loc_40544C
		push	edi		; lpString2
		push	0FFFFFFF1h	; int
		call	sub_404D7E
		push	0		; NumberOfBytesRead
		push	edi		; int
		call	sub_405723
		jmp	short loc_40545C
; ---------------------------------------------------------------------------

loc_40544C:				; CODE XREF: sub_40531D+11Bj
		inc	dword_42F4A8
		jmp	short loc_40545C
; ---------------------------------------------------------------------------

loc_405454:				; CODE XREF: sub_40531D+115j
		push	edi		; lpString2
		push	0FFFFFFF2h	; int
		call	sub_404D7E

loc_40545C:				; CODE XREF: sub_40531D+D0j
					; sub_40531D+DAj ...
		lea	eax, [ebp+sz]
		push	eax		; lpFindFileData
		push	[ebp+lpString1]	; hFindFile
		call	ds:FindNextFileA	; FindNextFileA
		test	eax, eax
		jnz	loc_4053C1
		push	[ebp+lpString1]	; hFindFile
		call	ds:FindClose	; FindClose

loc_40547D:				; CODE XREF: sub_40531D+9Ej
		cmp	[ebp+var_4], 0
		jz	short loc_405487
		and	byte ptr [ebx-1], 0

loc_405487:				; CODE XREF: sub_40531D+42j
					; sub_40531D+4Cj ...
		xor	esi, esi
		pop	ebx
		cmp	[ebp+var_4], esi
		jz	short loc_4054E2
		cmp	[ebp+var_8], esi
		jnz	short loc_40549C

loc_405494:				; CODE XREF: sub_40531D+1AAj
		inc	dword_42F4A8
		jmp	short loc_4054E2
; ---------------------------------------------------------------------------

loc_40549C:				; CODE XREF: sub_40531D+175j
		push	edi		; lpFileName
		call	sub_405CB0
		test	eax, eax
		jz	short loc_4054E2
		push	edi		; lpString1
		call	sub_4054E8
		push	80h		; dwFileAttributes
		push	edi		; lpFileName
		call	ds:SetFileAttributesA	; SetFileAttributesA
		push	edi		; lpPathName
		call	ds:RemoveDirectoryA	; RemoveDirectoryA
		test	eax, eax
		jnz	short loc_4054DA
		test	byte ptr [ebp+arg_4], 4
		jz	short loc_405494
		push	edi		; lpString2
		push	0FFFFFFF1h	; int
		call	sub_404D7E
		push	esi		; NumberOfBytesRead
		push	edi		; int
		call	sub_405723
		jmp	short loc_4054E2
; ---------------------------------------------------------------------------

loc_4054DA:				; CODE XREF: sub_40531D+1A4j
		push	edi		; lpString2
		push	0FFFFFFE5h	; int
		call	sub_404D7E

loc_4054E2:				; CODE XREF: sub_40531D+2Fj
					; sub_40531D+170j ...
		pop	edi
		pop	esi
		leave
		retn	8
sub_40531D	endp


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


; int __stdcall	sub_4054E8(LPCSTR lpString1)

sub_4054E8	proc near		; CODE XREF: sub_401439+39Dp
					; sub_401439+12F8p ...

lpString1	= dword	ptr  4

		push	esi
		mov	esi, [esp+4+lpString1]
		push	esi		; lpString
		call	lstrlenA	; lstrlenA
		add	eax, esi
		push	eax		; lpszCurrent
		push	esi		; lpszStart
		call	ds:CharPrevA	; CharPrevA
		cmp	byte ptr [eax],	5Ch
		jz	short loc_40550D
		push	offset SubBlock	; "\\"
		push	esi		; lpString1
		call	lstrcatA	; lstrcatA

loc_40550D:				; CODE XREF: sub_4054E8+18j
		mov	eax, esi
		pop	esi
		retn	4
sub_4054E8	endp


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


; int __stdcall	sub_405513(LPCSTR lpsz,char)

sub_405513	proc near		; CODE XREF: sub_401439+1B8p start+D0p ...

lpsz		= dword	ptr  4
arg_4		= byte ptr  8

		mov	eax, [esp+lpsz]
		jmp	short loc_405526
; ---------------------------------------------------------------------------

loc_405519:				; CODE XREF: sub_405513+17j
		cmp	cl, [esp+arg_4]
		jz	short locret_40552C
		push	eax		; lpsz
		call	ds:CharNextA	; CharNextA

loc_405526:				; CODE XREF: sub_405513+4j
		mov	cl, [eax]
		test	cl, cl
		jnz	short loc_405519

locret_40552C:				; CODE XREF: sub_405513+Aj
		retn	8
sub_405513	endp


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


; int __stdcall	sub_40552F(LPCSTR lpszStart)

sub_40552F	proc near		; CODE XREF: sub_402C37+61p start+2A4p ...

lpszStart	= dword	ptr  4

		push	esi
		mov	esi, [esp+4+lpszStart]
		push	esi		; lpString
		call	lstrlenA	; lstrlenA
		add	eax, esi

loc_40553C:				; CODE XREF: sub_40552F+1Cj
		cmp	byte ptr [eax],	5Ch
		jz	short loc_40554D
		push	eax		; lpszCurrent
		push	esi		; lpszStart
		call	ds:CharPrevA	; CharPrevA
		cmp	eax, esi
		ja	short loc_40553C

loc_40554D:				; CODE XREF: sub_40552F+10j
		and	byte ptr [eax],	0
		pop	esi
		retn	4
sub_40552F	endp


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



sub_405554	proc near		; CODE XREF: sub_401439+37Ap
					; sub_401439+C9Fp ...

arg_0		= dword	ptr  4

		mov	ecx, [esp+arg_0]
		mov	al, [ecx]
		or	al, 20h
		cmp	word ptr [ecx],	5C5Ch
		jz	short loc_405575
		cmp	al, 61h
		jl	short loc_405571
		cmp	al, 7Ah
		jg	short loc_405571
		cmp	byte ptr [ecx+1], 3Ah
		jz	short loc_405575

loc_405571:				; CODE XREF: sub_405554+11j
					; sub_405554+15j
		xor	eax, eax
		jmp	short locret_405578
; ---------------------------------------------------------------------------

loc_405575:				; CODE XREF: sub_405554+Dj
					; sub_405554+1Bj
		xor	eax, eax
		inc	eax

locret_405578:				; CODE XREF: sub_405554+1Fj
		retn	4
sub_405554	endp


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


; int __stdcall	sub_40557B(LPCSTR lpsz)

sub_40557B	proc near		; CODE XREF: sub_401439+1A6p
					; sub_404201+5Ep ...

lpsz		= dword	ptr  4

		push	ebx
		push	esi
		mov	esi, ds:CharNextA
		push	edi
		mov	edi, [esp+0Ch+lpsz]
		push	edi		; lpsz
		call	esi ; CharNextA
		mov	ebx, eax
		push	ebx		; lpsz
		call	esi ; CharNextA
		cmp	byte ptr [edi],	0
		jz	short loc_4055A1
		cmp	word ptr [ebx],	5C3Ah
		jnz	short loc_4055A1
		push	eax		; lpsz
		call	esi ; CharNextA
		jmp	short loc_4055C2
; ---------------------------------------------------------------------------

loc_4055A1:				; CODE XREF: sub_40557B+18j
					; sub_40557B+1Fj
		cmp	word ptr [edi],	5C5Ch
		jnz	short loc_4055C0
		push	2
		pop	esi

loc_4055AB:				; CODE XREF: sub_40557B+41j
		push	5Ch		; char
		push	eax		; lpsz
		dec	esi
		call	sub_405513
		cmp	byte ptr [eax],	0
		jz	short loc_4055C0
		inc	eax
		test	esi, esi
		jnz	short loc_4055AB
		jmp	short loc_4055C2
; ---------------------------------------------------------------------------

loc_4055C0:				; CODE XREF: sub_40557B+2Bj
					; sub_40557B+3Cj
		xor	eax, eax

loc_4055C2:				; CODE XREF: sub_40557B+24j
					; sub_40557B+43j
		pop	edi
		pop	esi
		pop	ebx
		retn	4
sub_40557B	endp


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


; int __stdcall	sub_4055C8(LPCSTR lpString2)

sub_4055C8	proc near		; CODE XREF: start+19Bp sub_403542+94p ...

lpString2	= dword	ptr  4

		push	esi
		push	edi
		push	[esp+8+lpString2] ; lpString2
		mov	esi, offset byte_42BCA8
		push	esi		; lpString1
		call	sub_4059DB
		push	esi		; lpsz
		call	sub_40557B
		mov	edi, eax
		test	edi, edi
		jnz	short loc_4055E9

loc_4055E5:				; CODE XREF: sub_4055C8+34j
					; sub_4055C8+38j ...
		xor	eax, eax
		jmp	short loc_40563B
; ---------------------------------------------------------------------------

loc_4055E9:				; CODE XREF: sub_4055C8+1Bj
		push	edi		; lpszCurrent
		call	sub_405C17
		test	byte ptr dword_42F430, 80h
		jz	short loc_405602
		mov	al, [edi]
		test	al, al
		jz	short loc_4055E5
		cmp	al, 5Ch
		jz	short loc_4055E5

loc_405602:				; CODE XREF: sub_4055C8+2Ej
		sub	edi, esi
		jmp	short loc_40561A
; ---------------------------------------------------------------------------

loc_405606:				; CODE XREF: sub_4055C8+5Bj
		call	sub_405CB0
		test	eax, eax
		jz	short loc_405614
		test	byte ptr [eax],	10h
		jz	short loc_4055E5

loc_405614:				; CODE XREF: sub_4055C8+45j
		push	esi		; lpszStart
		call	sub_40552F

loc_40561A:				; CODE XREF: sub_4055C8+3Cj
		push	esi		; lpString
		call	lstrlenA	; lstrlenA
		cmp	eax, edi
		push	esi		; lpString1
		jg	short loc_405606
		call	sub_4054E8
		push	esi		; lpFileName
		call	ds:GetFileAttributesA	; GetFileAttributesA
		xor	ecx, ecx
		cmp	eax, 0FFFFFFFFh
		setnz	cl
		mov	eax, ecx

loc_40563B:				; CODE XREF: sub_4055C8+1Fj
		pop	edi
		pop	esi
		retn	4
sub_4055C8	endp


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


; int __stdcall	sub_405640(LPCSTR lpString,LPCSTR lpString2)

sub_405640	proc near		; CODE XREF: sub_405723+11Cp
					; sub_405723+188p

lpString	= dword	ptr  4
lpString2	= dword	ptr  8

		push	ebx
		push	esi
		push	edi
		push	[esp+0Ch+lpString2] ; lpString
		call	lstrlenA	; lstrlenA
		mov	edi, eax
		mov	esi, [esp+0Ch+lpString]
		jmp	short loc_405676
; ---------------------------------------------------------------------------

loc_405654:				; CODE XREF: sub_405640+3Ej
		push	[esp+0Ch+lpString2] ; lpString2
		mov	bl, [edi+esi]
		and	byte ptr [edi+esi], 0
		push	esi		; lpString1
		call	ds:lstrcmpiA	; lstrcmpiA
		test	eax, eax
		mov	[edi+esi], bl
		jz	short loc_405688
		push	esi		; lpsz
		call	ds:CharNextA	; CharNextA
		mov	esi, eax

loc_405676:				; CODE XREF: sub_405640+12j
		push	esi		; lpString
		call	lstrlenA	; lstrlenA
		cmp	eax, edi
		jge	short loc_405654
		xor	eax, eax

loc_405682:				; CODE XREF: sub_405640+4Aj
		pop	edi
		pop	esi
		pop	ebx
		retn	8
; ---------------------------------------------------------------------------

loc_405688:				; CODE XREF: sub_405640+2Bj
		mov	eax, esi
		jmp	short loc_405682
sub_405640	endp


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



sub_40568C	proc near		; CODE XREF: sub_401439+137Ep
					; sub_402C37+C1p ...

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

		mov	ecx, [esp+arg_0]
		push	esi
		mov	esi, [esp+4+arg_8]
		test	esi, esi
		jle	short loc_4056A8
		mov	eax, [esp+4+arg_4]
		sub	eax, ecx

loc_40569F:				; CODE XREF: sub_40568C+1Aj
		mov	dl, [eax+ecx]
		mov	[ecx], dl
		inc	ecx
		dec	esi
		jnz	short loc_40569F

loc_4056A8:				; CODE XREF: sub_40568C+Bj
		pop	esi
		retn	0Ch
sub_40568C	endp


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


; int __stdcall	sub_4056AC(LPCSTR lpFileName,DWORD dwDesiredAccess,DWORD dwCreationDisposition)

sub_4056AC	proc near		; CODE XREF: sub_401439+411p
					; sub_401439+10EFp ...

lpFileName	= dword	ptr  4
dwDesiredAccess	= dword	ptr  8
dwCreationDisposition= dword ptr  0Ch

		push	[esp+lpFileName] ; lpFileName
		call	ds:GetFileAttributesA	; GetFileAttributesA
		mov	ecx, eax
		push	0		; hTemplateFile
		inc	ecx
		neg	ecx
		sbb	ecx, ecx
		and	ecx, eax
		push	ecx		; dwFlagsAndAttributes
		push	[esp+8+dwCreationDisposition] ;	dwCreationDisposition
		push	0		; lpSecurityAttributes
		push	1		; dwShareMode
		push	[esp+14h+dwDesiredAccess] ; dwDesiredAccess
		push	[esp+18h+lpFileName] ; lpFileName
		call	ds:CreateFileA	; CreateFileA
		retn	0Ch
sub_4056AC	endp


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

; Attributes: bp-based frame

; int __stdcall	sub_4056DB(const CHAR lpTempFileName,LPCSTR lpPathName)

sub_4056DB	proc near		; CODE XREF: sub_401439+35Ap
					; sub_403132+2Dp

lpTempFileName	= byte ptr  8
lpPathName	= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	esi
		mov	esi, dword ptr [ebp+lpTempFileName]
		push	edi
		push	64h
		pop	edi

loc_4056E6:				; CODE XREF: sub_4056DB+39j
		dec	edi
		mov	dword ptr [ebp+lpTempFileName],	61736Eh
		call	ds:GetTickCount	; GetTickCount
		push	1Ah
		xor	edx, edx
		pop	ecx
		div	ecx
		push	esi		; lpTempFileName
		lea	eax, [ebp+lpTempFileName]
		push	0		; uUnique
		push	eax		; lpPrefixString
		push	[ebp+lpPathName] ; lpPathName
		add	[ebp+0Ah], dl
		call	ds:GetTempFileNameA	; GetTempFileNameA
		test	eax, eax
		jnz	short loc_40571F
		test	edi, edi
		jnz	short loc_4056E6
		and	byte ptr [esi],	0

loc_405719:				; CODE XREF: sub_4056DB+46j
		pop	edi
		pop	esi
		pop	ebp
		retn	8
; ---------------------------------------------------------------------------

loc_40571F:				; CODE XREF: sub_4056DB+35j
		mov	eax, esi
		jmp	short loc_405719
sub_4056DB	endp


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


; int __stdcall	sub_405723(int,LPCSTR NumberOfBytesRead)

sub_405723	proc near		; CODE XREF: sub_401439+2BAp
					; start+288p ...

arg_0		= dword	ptr  4
NumberOfBytesRead= dword ptr  8

		push	ebx
		push	ebp
		push	esi
		push	edi
		push	offset aMovefileexa ; "MoveFileExA"
		push	offset aKernel32_dll ; "KERNEL32.dll"
		call	sub_405CEE
		test	eax, eax
		mov	esi, [esp+10h+NumberOfBytesRead]
		jz	short loc_40574F
		push	5
		push	esi
		push	[esp+18h+arg_0]
		call	eax
		test	eax, eax
		jnz	loc_405895

loc_40574F:				; CODE XREF: sub_405723+19j
		mov	ebx, ds:GetShortPathNameA
		mov	szShortPath, 4C554Eh
		test	esi, esi
		mov	edi, 400h
		mov	ebp, offset szShortPath
		jz	short loc_405793
		push	1		; dwCreationDisposition
		push	0		; dwDesiredAccess
		push	esi		; lpFileName
		call	sub_4056AC
		push	eax		; hObject
		call	ds:CloseHandle	; CloseHandle
		push	edi		; cchBuffer
		push	ebp		; lpszShortPath
		push	esi		; lpszLongPath
		call	ebx ; GetShortPathNameA
		test	eax, eax
		jz	loc_40589B
		cmp	eax, edi
		jg	loc_40589B

loc_405793:				; CODE XREF: sub_405723+48j
		mov	esi, offset Buffer
		push	edi		; cchBuffer
		push	esi		; lpszShortPath
		push	[esp+18h+arg_0]	; lpszLongPath
		call	ebx ; GetShortPathNameA
		test	eax, eax
		jz	loc_40589B
		cmp	eax, edi
		jg	loc_40589B
		push	esi
		push	ebp
		push	offset aSS_0	; "%s=%s\r\n"
		push	offset byte_42C0A8 ; LPSTR
		call	ds:wsprintfA	; wsprintfA
		add	esp, 10h
		mov	ebx, eax
		push	3F0h		; uSize
		push	esi		; lpBuffer
		call	ds:GetWindowsDirectoryA	; GetWindowsDirectoryA
		push	offset aWininit_ini ; "\\wininit.ini"
		push	esi		; lpString1
		call	lstrcatA	; lstrcatA
		xor	eax, eax
		push	eax		; hTemplateFile
		push	8000080h	; dwFlagsAndAttributes
		push	4		; dwCreationDisposition
		push	eax		; lpSecurityAttributes
		push	eax		; dwShareMode
		push	0C0000000h	; dwDesiredAccess
		push	esi		; lpFileName
		call	ds:CreateFileA	; CreateFileA
		mov	ebp, eax
		cmp	ebp, 0FFFFFFFFh
		jz	loc_405895
		push	0		; lpFileSizeHigh
		push	ebp		; hFile
		call	ds:GetFileSize	; GetFileSize
		mov	edi, eax
		lea	eax, [edi+ebx+0Ah]
		push	eax		; dwBytes
		push	40h		; uFlags
		call	ds:GlobalAlloc	; GlobalAlloc
		mov	esi, eax
		test	esi, esi
		jz	short loc_40588E
		lea	eax, [esp+10h+NumberOfBytesRead]
		push	0		; lpOverlapped
		push	eax		; lpNumberOfBytesRead
		push	edi		; nNumberOfBytesToRead
		push	esi		; lpBuffer
		push	ebp		; hFile
		call	ds:ReadFile	; ReadFile
		test	eax, eax
		jz	short loc_40588E
		cmp	edi, [esp+10h+NumberOfBytesRead]
		jnz	short loc_40588E
		push	offset aRename	; "[Rename]\r\n"
		push	esi		; lpString
		call	sub_405640
		test	eax, eax
		jnz	short loc_4058A2
		lea	eax, [esi+edi]
		push	offset aRename	; "[Rename]\r\n"
		push	eax		; lpString1
		call	sub_4059DB
		add	edi, 0Ah

loc_405859:				; CODE XREF: sub_405723+18Fj
		mov	eax, edi

loc_40585B:				; CODE XREF: sub_405723+1AAj
		push	ebx
		add	eax, esi
		push	offset byte_42C0A8
		push	eax
		call	sub_40568C
		xor	eax, eax
		push	eax		; dwMoveMethod
		push	eax		; lpDistanceToMoveHigh
		push	eax		; lDistanceToMove
		push	ebp		; hFile
		call	ds:SetFilePointer	; SetFilePointer
		lea	eax, [esp+10h+NumberOfBytesRead]
		push	0		; lpOverlapped
		add	edi, ebx
		push	eax		; lpNumberOfBytesWritten
		push	edi		; nNumberOfBytesToWrite
		push	esi		; lpBuffer
		push	ebp		; hFile
		call	ds:WriteFile	; WriteFile
		push	esi		; hMem
		call	ds:GlobalFree	; GlobalFree

loc_40588E:				; CODE XREF: sub_405723+FAj
					; sub_405723+10Ej ...
		push	ebp		; hObject
		call	ds:CloseHandle	; CloseHandle

loc_405895:				; CODE XREF: sub_405723+26j
					; sub_405723+D8j
		inc	dword_42F4B0

loc_40589B:				; CODE XREF: sub_405723+62j
					; sub_405723+6Aj ...
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		retn	8
; ---------------------------------------------------------------------------

loc_4058A2:				; CODE XREF: sub_405723+123j
		add	eax, 0Ah
		push	offset asc_409308 ; "\n["
		push	eax		; lpString
		call	sub_405640
		test	eax, eax
		jz	short loc_405859
		inc	eax
		lea	edx, [esi+edi]
		cmp	eax, edx
		mov	ecx, eax
		jnb	short loc_4058CB

loc_4058BE:				; CODE XREF: sub_405723+1A6j
		mov	dl, [ecx]
		mov	[ecx+ebx], dl
		inc	ecx
		lea	edx, [esi+edi]
		cmp	ecx, edx
		jb	short loc_4058BE

loc_4058CB:				; CODE XREF: sub_405723+199j
		sub	eax, esi
		jmp	short loc_40585B
sub_405723	endp


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

; Attributes: bp-based frame

; int __stdcall	sub_4058CF(HKEY	cbData,LPCSTR phkResult,LPCSTR lpValueName,DWORD lpData)

sub_4058CF	proc near		; CODE XREF: sub_403542+4Fp
					; sub_403542+6Cp ...

cbData		= dword	ptr  8
phkResult	= dword	ptr  0Ch
lpValueName	= dword	ptr  10h
lpData		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		push	ebx
		lea	eax, [ebp+phkResult]
		push	esi
		mov	esi, [ebp+lpData]
		xor	ebx, ebx
		push	eax		; phkResult
		push	20019h		; samDesired
		push	ebx		; ulOptions
		push	[ebp+phkResult]	; lpSubKey
		mov	[esi], bl
		push	[ebp+cbData]	; hKey
		call	ds:RegOpenKeyExA	; RegOpenKeyExA
		test	eax, eax
		jnz	short loc_405933
		lea	eax, [ebp+cbData]
		mov	[ebp+cbData], 400h
		push	eax		; lpcbData
		lea	eax, [ebp+lpData]
		push	esi		; lpData
		push	eax		; lpType
		push	ebx		; lpReserved
		push	[ebp+lpValueName] ; lpValueName
		push	[ebp+phkResult]	; hKey
		call	ds:RegQueryValueExA	; RegQueryValueExA
		test	eax, eax
		jnz	short loc_405922
		cmp	[ebp+lpData], 1
		jz	short loc_405924
		cmp	[ebp+lpData], 2
		jz	short loc_405924

loc_405922:				; CODE XREF: sub_4058CF+45j
		mov	[esi], bl

loc_405924:				; CODE XREF: sub_4058CF+4Bj
					; sub_4058CF+51j
		push	[ebp+phkResult]	; hKey
		mov	[esi+3FFh], bl
		call	ds:RegCloseKey	; RegCloseKey

loc_405933:				; CODE XREF: sub_4058CF+24j
		pop	esi
		pop	ebx
		pop	ebp
		retn	10h
sub_4058CF	endp


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


; int __stdcall	sub_405939(LPSTR,int)

sub_405939	proc near		; CODE XREF: sub_401439+AC1p
					; sub_401439+AFCp ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	[esp+arg_4]
		push	offset aD	; "%d"
		push	[esp+8+arg_0]	; LPSTR
		call	ds:wsprintfA	; wsprintfA
		add	esp, 0Ch
		retn	8
sub_405939	endp


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

; Attributes: bp-based frame


sub_405952	proc near		; CODE XREF: sub_40136D+39p
					; sub_401439+91p ...

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
		xor	edi, edi
		cmp	byte ptr [ecx],	2Dh
		mov	[ebp+var_4], 1
		mov	al, 0Ah
		mov	bl, 39h
		jnz	short loc_405973
		inc	ecx
		or	[ebp+var_4], 0FFFFFFFFh

loc_405973:				; CODE XREF: sub_405952+1Aj
		cmp	byte ptr [ecx],	30h
		jnz	short loc_405994
		inc	ecx
		mov	dl, [ecx]
		cmp	dl, 30h
		jl	short loc_405989
		cmp	dl, 37h
		jg	short loc_405989
		mov	al, 8
		mov	bl, 37h

loc_405989:				; CODE XREF: sub_405952+2Cj
					; sub_405952+31j
		and	dl, 0DFh
		cmp	dl, 58h
		jnz	short loc_405994
		mov	al, 10h
		inc	ecx

loc_405994:				; CODE XREF: sub_405952+24j
					; sub_405952+3Dj ...
		movsx	edx, byte ptr [ecx]
		inc	ecx
		cmp	edx, 30h
		jl	short loc_4059A9
		movsx	esi, bl
		cmp	edx, esi
		jg	short loc_4059A9
		sub	edx, 30h
		jmp	short loc_4059C2
; ---------------------------------------------------------------------------

loc_4059A9:				; CODE XREF: sub_405952+49j
					; sub_405952+50j
		cmp	al, 10h
		jnz	short loc_4059CE
		mov	esi, edx
		and	esi, 0FFFFFFDFh
		cmp	esi, 41h
		jl	short loc_4059CE
		cmp	esi, 46h
		jg	short loc_4059CE
		and	edx, 7
		add	edx, 9

loc_4059C2:				; CODE XREF: sub_405952+55j
		movsx	esi, al
		imul	esi, edi
		add	esi, edx
		mov	edi, esi
		jmp	short loc_405994
; ---------------------------------------------------------------------------

loc_4059CE:				; CODE XREF: sub_405952+59j
					; sub_405952+63j ...
		mov	eax, [ebp+var_4]
		imul	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_405952	endp


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


; int __stdcall	sub_4059DB(LPSTR lpString1,LPCSTR lpString2)

sub_4059DB	proc near		; CODE XREF: sub_401439+209p
					; sub_401439+24Fp ...

lpString1	= dword	ptr  4
lpString2	= dword	ptr  8

		push	400h		; iMaxLength
		push	[esp+4+lpString2] ; lpString2
		push	[esp+8+lpString1] ; lpString1
		call	ds:lstrcpynA	; lstrcpynA
		retn	8
sub_4059DB	endp

; [00000006 BYTES: COLLAPSED FUNCTION lstrlenA.	PRESS KEYPAD "+" TO EXPAND]
; [00000006 BYTES: COLLAPSED FUNCTION lstrcatA.	PRESS KEYPAD "+" TO EXPAND]

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

; Attributes: bp-based frame

; int __stdcall	sub_4059FD(LPSTR lpString1,LPCSTR lpString2)

sub_4059FD	proc near		; CODE XREF: sub_401439+441p
					; sub_401439+4F0p ...

csidl		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
pidl		= dword	ptr -4
lpString1	= dword	ptr  8
lpString2	= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		push	ebx
		mov	ebx, [ebp+lpString2]
		push	esi
		push	edi
		test	ebx, ebx
		jge	short loc_405A1E
		mov	ecx, dword_42EBFC
		lea	eax, ds:4[ebx*4]
		sub	ecx, eax
		mov	ebx, [ecx]

loc_405A1E:				; CODE XREF: sub_4059FD+Ej
		mov	eax, dword_42F458
		mov	ecx, [ebp+lpString1]
		add	ebx, eax
		mov	eax, offset byte_42E3C0
		sub	ecx, eax
		mov	edi, eax
		cmp	ecx, 800h
		jnb	loc_405BF1
		mov	edi, [ebp+lpString1]
		and	[ebp+lpString1], 0
		jmp	loc_405BF1
; ---------------------------------------------------------------------------

loc_405A49:				; CODE XREF: sub_4059FD+1FBj
		mov	edx, edi
		sub	edx, eax
		cmp	edx, 400h
		jge	loc_405BFE
		inc	ebx
		cmp	cl, 0FCh
		jbe	loc_405BE4
		movsx	eax, byte ptr [ebx+1]
		movsx	ecx, byte ptr [ebx]
		mov	esi, eax
		mov	edx, ecx
		and	esi, 7Fh
		and	edx, 7Fh
		shl	esi, 7
		or	esi, edx
		mov	edx, 8000h
		mov	[ebp+csidl], ecx
		mov	[ebp+var_10], eax
		or	ecx, edx
		or	eax, edx
		inc	ebx
		mov	[ebp+var_14], ecx
		inc	ebx
		cmp	byte ptr [ebp+lpString2+3], 0FEh
		mov	[ebp+var_C], eax
		jnz	loc_405B8F
		and	[ebp+lpString2], 0
		and	byte ptr [edi],	0
		push	4
		pop	esi
		cmp	[ebp+var_10], esi
		jnz	short loc_405AB2
		mov	[ebp+lpString2], offset	aMicrosoftInter	; "\\Microsoft\\Internet Explorer\\Quick Laun"...
		jmp	short loc_405B2A
; ---------------------------------------------------------------------------

loc_405AB2:				; CODE XREF: sub_4059FD+AAj
		mov	eax, [ebp+csidl]
		cmp	eax, 2Bh
		jnz	short loc_405AD1
		push	edi		; lpData
		push	offset aCommonfilesdir ; "CommonFilesDir"
		push	offset aSoftwareMicros ; "Software\\Microsoft\\Windows\\CurrentVersi"...
		push	80000002h	; cbData
		call	sub_4058CF
		jmp	short loc_405B25
; ---------------------------------------------------------------------------

loc_405AD1:				; CODE XREF: sub_4059FD+BBj
		cmp	eax, 26h
		jnz	short loc_405B01
		push	edi		; lpData
		push	offset aProgramfilesdi ; "ProgramFilesDir"
		push	offset aSoftwareMicros ; "Software\\Microsoft\\Windows\\CurrentVersi"...
		push	80000002h	; cbData
		call	sub_4058CF
		cmp	byte ptr [edi],	0
		jnz	loc_405B87
		push	offset aCProgramFiles ;	"C:\\Program Files"
		push	edi		; lpString1
		call	sub_4059DB
		jmp	short loc_405B25
; ---------------------------------------------------------------------------

loc_405B01:				; CODE XREF: sub_4059FD+D7j
		cmp	eax, 25h
		jnz	short loc_405B14
		push	400h		; uSize
		push	edi		; lpBuffer
		call	ds:GetSystemDirectoryA	; GetSystemDirectoryA
		jmp	short loc_405B25
; ---------------------------------------------------------------------------

loc_405B14:				; CODE XREF: sub_4059FD+107j
		cmp	eax, 24h
		jnz	short loc_405B2A
		push	400h		; uSize
		push	edi		; lpBuffer
		call	ds:GetWindowsDirectoryA	; GetWindowsDirectoryA

loc_405B25:				; CODE XREF: sub_4059FD+D2j
					; sub_4059FD+102j ...
		cmp	byte ptr [edi],	0
		jnz	short loc_405B87

loc_405B2A:				; CODE XREF: sub_4059FD+B3j
					; sub_4059FD+11Aj
		cmp	dword_42F4A4, 0
		jnz	short loc_405B36
		push	2
		pop	esi

loc_405B36:				; CODE XREF: sub_4059FD+134j
					; sub_4059FD+174j
		lea	eax, [ebp+pidl]
		dec	esi
		push	eax		; ppidl
		push	[ebp+esi*4+csidl] ; csidl
		push	dword_42F424	; hwnd
		call	ds:SHGetSpecialFolderLocation	; SHGetSpecialFolderLocation
		test	eax, eax
		jnz	short loc_405B6C
		push	edi		; pszPath
		push	[ebp+pidl]	; pidl
		call	ds:SHGetPathFromIDListA	; SHGetPathFromIDListA
		push	[ebp+pidl]
		mov	[ebp+var_8], eax
		call	sub_405238
		cmp	[ebp+var_8], 0
		jnz	short loc_405B73
		jmp	short loc_405B6F
; ---------------------------------------------------------------------------

loc_405B6C:				; CODE XREF: sub_4059FD+150j
		and	byte ptr [edi],	0

loc_405B6F:				; CODE XREF: sub_4059FD+16Dj
		test	esi, esi
		jnz	short loc_405B36

loc_405B73:				; CODE XREF: sub_4059FD+16Bj
		cmp	byte ptr [edi],	0
		jz	short loc_405B87
		cmp	[ebp+lpString2], 0
		jz	short loc_405B87
		push	[ebp+lpString2]	; lpString2
		push	edi		; lpString1
		call	lstrcatA	; lstrcatA

loc_405B87:				; CODE XREF: sub_4059FD+F1j
					; sub_4059FD+12Bj ...
		push	edi		; lpszCurrent
		call	sub_405C17
		jmp	short loc_405BD5
; ---------------------------------------------------------------------------

loc_405B8F:				; CODE XREF: sub_4059FD+97j
		cmp	byte ptr [ebp+lpString2+3], 0FDh
		jnz	short loc_405BC3
		cmp	esi, 1Bh
		jnz	short loc_405BA8
		push	dword_42F424	; int
		push	edi		; LPSTR
		call	sub_405939
		jmp	short loc_405BB9
; ---------------------------------------------------------------------------

loc_405BA8:				; CODE XREF: sub_4059FD+19Bj
		mov	eax, esi
		shl	eax, 0Ah
		add	eax, offset dword_430000
		push	eax		; lpString2
		push	edi		; lpString1
		call	sub_4059DB

loc_405BB9:				; CODE XREF: sub_4059FD+1A9j
		add	esi, 0FFFFFFEBh
		cmp	esi, 6
		jnb	short loc_405BD5
		jmp	short loc_405B87
; ---------------------------------------------------------------------------

loc_405BC3:				; CODE XREF: sub_4059FD+196j
		cmp	byte ptr [ebp+lpString2+3], 0FFh
		jnz	short loc_405BD5
		or	eax, 0FFFFFFFFh
		sub	eax, esi
		push	eax		; lpString2
		push	edi		; lpString1
		call	sub_4059FD

loc_405BD5:				; CODE XREF: sub_4059FD+190j
					; sub_4059FD+1C2j ...
		push	edi		; lpString
		call	lstrlenA	; lstrlenA
		add	edi, eax
		mov	eax, offset byte_42E3C0
		jmp	short loc_405BF1
; ---------------------------------------------------------------------------

loc_405BE4:				; CODE XREF: sub_4059FD+60j
		jnz	short loc_405BEE
		mov	cl, [ebx]
		mov	[edi], cl
		inc	edi
		inc	ebx
		jmp	short loc_405BF1
; ---------------------------------------------------------------------------

loc_405BEE:				; CODE XREF: sub_4059FD:loc_405BE4j
		mov	[edi], cl
		inc	edi

loc_405BF1:				; CODE XREF: sub_4059FD+3Aj
					; sub_4059FD+47j ...
		mov	cl, [ebx]
		test	cl, cl
		mov	byte ptr [ebp+lpString2+3], cl
		jnz	loc_405A49

loc_405BFE:				; CODE XREF: sub_4059FD+56j
		and	byte ptr [edi],	0
		cmp	[ebp+lpString1], 0
		pop	edi
		pop	esi
		pop	ebx
		jz	short locret_405C13
		push	eax		; lpString2
		push	[ebp+lpString1]	; lpString1
		call	sub_4059DB

locret_405C13:				; CODE XREF: sub_4059FD+20Bj
		leave
		retn	8
sub_4059FD	endp


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


; int __stdcall	sub_405C17(LPCSTR lpszCurrent)

sub_405C17	proc near		; CODE XREF: sub_401439+3A9p
					; sub_401439+1309p ...

lpszCurrent	= dword	ptr  4

		push	ebx
		push	esi
		mov	esi, [esp+8+lpszCurrent]
		push	edi
		cmp	byte ptr [esi],	5Ch
		jnz	short loc_405C38
		cmp	byte ptr [esi+1], 5Ch
		jnz	short loc_405C38
		cmp	byte ptr [esi+2], 3Fh
		jnz	short loc_405C38
		cmp	byte ptr [esi+3], 5Ch
		jnz	short loc_405C38
		add	esi, 4

loc_405C38:				; CODE XREF: sub_405C17+Aj
					; sub_405C17+10j ...
		cmp	byte ptr [esi],	0
		jz	short loc_405C49
		push	esi
		call	sub_405554
		test	eax, eax
		jz	short loc_405C49
		inc	esi
		inc	esi

loc_405C49:				; CODE XREF: sub_405C17+24j
					; sub_405C17+2Ej
		mov	al, [esi]
		mov	ebx, esi
		test	al, al
		mov	edi, esi
		jz	short loc_405C8C
		push	ebp
		mov	ebp, ds:CharNextA

loc_405C5A:				; CODE XREF: sub_405C17+72j
		cmp	al, 1Fh
		jbe	short loc_405C80
		push	eax		; char
		push	offset a?	; "*?|<>/\":"
		call	sub_405513
		cmp	byte ptr [eax],	0
		jnz	short loc_405C80
		push	esi		; lpsz
		call	ebp ; CharNextA
		sub	eax, esi
		push	eax
		push	esi
		push	edi
		call	sub_40568C
		push	edi		; lpsz
		call	ebp ; CharNextA
		mov	edi, eax

loc_405C80:				; CODE XREF: sub_405C17+45j
					; sub_405C17+55j
		push	esi		; lpsz
		call	ebp ; CharNextA
		mov	esi, eax
		mov	al, [esi]
		test	al, al
		jnz	short loc_405C5A
		pop	ebp

loc_405C8C:				; CODE XREF: sub_405C17+3Aj
		and	byte ptr [edi],	0

loc_405C8F:				; CODE XREF: sub_405C17+91j
		push	edi		; lpszCurrent
		push	ebx		; lpszStart
		call	ds:CharPrevA	; CharPrevA
		mov	edi, eax
		mov	al, [edi]
		cmp	al, 20h
		jz	short loc_405CA3
		cmp	al, 5Ch
		jnz	short loc_405CAA

loc_405CA3:				; CODE XREF: sub_405C17+86j
		and	byte ptr [edi],	0
		cmp	ebx, edi
		jb	short loc_405C8F

loc_405CAA:				; CODE XREF: sub_405C17+8Aj
		pop	edi
		pop	esi
		pop	ebx
		retn	4
sub_405C17	endp


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


; int __stdcall	sub_405CB0(LPCSTR lpFileName)

sub_405CB0	proc near		; CODE XREF: sub_401439+228p
					; sub_401439+2A7p ...

lpFileName	= dword	ptr  4

		push	ebx
		push	esi
		mov	esi, ds:SetErrorMode
		push	edi
		push	8001h		; uMode
		call	esi ; SetErrorMode
		mov	edi, offset FindFileData
		push	edi		; lpFindFileData
		push	[esp+10h+lpFileName] ; lpFileName
		call	ds:FindFirstFileA	; FindFirstFileA
		push	0		; uMode
		mov	ebx, eax
		call	esi ; SetErrorMode
		cmp	ebx, 0FFFFFFFFh
		jz	short loc_405CE6
		push	ebx		; hFindFile
		call	ds:FindClose	; FindClose
		mov	eax, edi
		jmp	short loc_405CE8
; ---------------------------------------------------------------------------

loc_405CE6:				; CODE XREF: sub_405CB0+29j
		xor	eax, eax

loc_405CE8:				; CODE XREF: sub_405CB0+34j
		pop	edi
		pop	esi
		pop	ebx
		retn	4
sub_405CB0	endp


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


; int __stdcall	sub_405CEE(LPCSTR lpLibFileName,LPCSTR lpProcName)

sub_405CEE	proc near		; CODE XREF: start+31Cp start+329p ...

lpLibFileName	= dword	ptr  4
lpProcName	= dword	ptr  8

		push	[esp+lpLibFileName] ; lpModuleName
		call	ds:GetModuleHandleA	; GetModuleHandleA
		test	eax, eax
		jnz	short loc_405D0A
		push	[esp+lpLibFileName] ; lpLibFileName
		call	ds:LoadLibraryA	; LoadLibraryA
		test	eax, eax
		jz	short locret_405D15

loc_405D0A:				; CODE XREF: sub_405CEE+Cj
		push	[esp+lpProcName] ; lpProcName
		push	eax		; hModule
		call	ds:GetProcAddress	; GetProcAddress

locret_405D15:				; CODE XREF: sub_405CEE+1Aj
		retn	8
sub_405CEE	endp


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

; Attributes: bp-based frame

; int __stdcall	sub_405D18(UINT	wMsgFilterMax)

sub_405D18	proc near		; CODE XREF: sub_401439+A98p
					; sub_402C37+141p

Msg		= MSG ptr -1Ch
wMsgFilterMax	= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 1Ch
		push	esi
		mov	esi, [ebp+wMsgFilterMax]
		push	edi
		mov	edi, ds:PeekMessageA
		jmp	short loc_405D35
; ---------------------------------------------------------------------------

loc_405D2B:				; CODE XREF: sub_405D18+2Bj
		lea	eax, [ebp+Msg]
		push	eax		; lpMsg
		call	ds:DispatchMessageA	; DispatchMessageA

loc_405D35:				; CODE XREF: sub_405D18+11j
		push	1		; wRemoveMsg
		push	esi		; wMsgFilterMax
		push	esi		; wMsgFilterMin
		lea	eax, [ebp+Msg]
		push	0		; hWnd
		push	eax		; lpMsg
		call	edi ; PeekMessageA
		test	eax, eax
		jnz	short loc_405D2B
		pop	edi
		pop	esi
		leave
		retn	4
sub_405D18	endp


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



sub_405D4B	proc near		; CODE XREF: sub_402C37+180p

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

		cmp	dword_42CE34, 0
		push	esi
		jnz	short loc_405D82
		xor	ecx, ecx

loc_405D57:				; CODE XREF: sub_405D4B+35j
		push	8
		mov	eax, ecx
		pop	esi

loc_405D5C:				; CODE XREF: sub_405D4B+25j
		mov	edx, eax
		and	dl, 1
		neg	dl
		sbb	edx, edx
		and	edx, 0EDB88320h
		shr	eax, 1
		xor	eax, edx
		dec	esi
		jnz	short loc_405D5C
		mov	dword_42CE30[ecx*4], eax
		inc	ecx
		cmp	ecx, 100h
		jl	short loc_405D57

loc_405D82:				; CODE XREF: sub_405D4B+8j
		mov	edx, [esp+4+arg_8]
		mov	eax, [esp+4+arg_0]
		test	edx, edx
		not	eax
		jbe	short loc_405DB3
		mov	ecx, [esp+4+arg_4]
		push	edi

loc_405D95:				; CODE XREF: sub_405D4B+65j
		movzx	edi, byte ptr [ecx]
		mov	esi, eax
		and	esi, 0FFh
		xor	esi, edi
		shr	eax, 8
		mov	esi, dword_42CE30[esi*4]
		xor	eax, esi
		inc	ecx
		dec	edx
		jnz	short loc_405D95
		pop	edi

loc_405DB3:				; CODE XREF: sub_405D4B+43j
		not	eax
		pop	esi
		retn	0Ch
sub_405D4B	endp


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

; Attributes: bp-based frame


sub_405DB9	proc near		; CODE XREF: sub_402EBD+F6p

var_40		= dword	ptr -40h
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 44h
		mov	eax, [ebp+arg_0]
		push	ebx
		push	esi
		push	edi
		mov	ecx, [eax]
		lea	esi, [eax+10h]
		mov	eax, [eax+4]
		mov	[ebp+var_38], ecx
		mov	ecx, [esi+9BA8h]
		mov	ebx, [esi+518h]
		mov	[ebp+var_34], eax
		mov	eax, [esi+51Ch]
		mov	[ebp+var_40], eax
		mov	eax, [esi+9BA4h]
		cmp	ecx, eax
		mov	[ebp+var_30], ecx
		jnb	short loc_405DFA
		sub	eax, ecx
		dec	eax
		jmp	short loc_405E02
; ---------------------------------------------------------------------------

loc_405DFA:				; CODE XREF: sub_405DB9+3Aj
		mov	eax, [esi+9BA0h]
		sub	eax, ecx

loc_405E02:				; CODE XREF: sub_405DB9+3Fj
		mov	[ebp+var_2C], eax
		jmp	loc_4067CD
; ---------------------------------------------------------------------------

loc_405E0A:				; CODE XREF: sub_405DB9+A19j
		jmp	ds:off_406808[eax*4]
; ---------------------------------------------------------------------------

loc_405E11:				; CODE XREF: sub_405DB9+7Bj
		cmp	[ebp+var_34], 0
		jz	loc_4067DD
		mov	eax, [ebp+var_38]
		dec	[ebp+var_34]
		mov	ecx, ebx
		movzx	eax, byte ptr [eax]
		shl	eax, cl
		or	[ebp+var_40], eax
		inc	[ebp+var_38]
		add	ebx, 8

loc_405E31:				; CODE XREF: sub_405DB9:loc_405E0Aj
					; DATA XREF: .text:00406828o
		cmp	ebx, 3
		jb	short loc_405E11
		mov	eax, [ebp+var_40]
		sub	ebx, 3
		shr	[ebp+var_40], 3
		and	eax, 7
		mov	ecx, eax
		and	cl, 1
		neg	cl
		sbb	ecx, ecx
		and	ecx, 7
		shr	eax, 1
		add	ecx, 8
		sub	eax, 0
		mov	[esi+514h], ecx
		jz	loc_405F91
		dec	eax
		jz	short loc_405EBC
		dec	eax
		jz	short loc_405EB1
		dec	eax
		jnz	loc_4067CD

loc_405E70:				; CODE XREF: sub_405DB9:loc_405E0Aj
					; sub_405DB9+358j ...
		or	edi, 0FFFFFFFFh
		mov	dword ptr [esi], 11h

loc_405E79:				; CODE XREF: sub_405DB9+A42j
					; sub_405DB9+A4Aj
		mov	eax, [ebp+var_40]
		mov	ecx, [ebp+arg_0]
		mov	[esi+51Ch], eax
		mov	eax, [ebp+var_34]
		mov	[esi+518h], ebx
		mov	[ecx+4], eax

loc_405E91:				; CODE XREF: sub_405DB9+A3Bj
		mov	eax, [ebp+arg_0]
		mov	ecx, [ebp+var_38]
		push	eax
		mov	[eax], ecx
		mov	ecx, [ebp+var_30]
		mov	[esi+9BA8h], ecx
		call	sub_406848
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
; ---------------------------------------------------------------------------

loc_405EB1:				; CODE XREF: sub_405DB9+AEj
		mov	dword ptr [esi], 0Bh
		jmp	loc_4067CD
; ---------------------------------------------------------------------------

loc_405EBC:				; CODE XREF: sub_405DB9+ABj
		cmp	byte_42E3B8, 0
		jnz	loc_405F69
		and	[ebp+var_8], 0
		mov	eax, offset dword_42D238

loc_405ED2:				; CODE XREF: sub_405DB9+143j
		cmp	eax, offset dword_42D474
		mov	cl, 8
		jle	short loc_405EEF
		cmp	eax, offset dword_42D638
		jge	short loc_405EE6
		inc	cl
		jmp	short loc_405EEF
; ---------------------------------------------------------------------------

loc_405EE6:				; CODE XREF: sub_405DB9+127j
		cmp	eax, offset dword_42D698
		jge	short loc_405EEF
		mov	cl, 7

loc_405EEF:				; CODE XREF: sub_405DB9+120j
					; sub_405DB9+12Bj ...
		movsx	ecx, cl
		mov	[eax], ecx
		add	eax, 4
		cmp	eax, offset dword_42D6B8
		jl	short loc_405ED2
		lea	eax, [ebp+var_8]
		mov	edi, offset dword_42D238
		push	eax
		push	offset dword_42DB38
		push	offset byte_4093F8
		push	offset dword_42D234
		push	offset dword_407368
		push	offset dword_407328
		push	101h
		push	120h
		push	edi
		call	sub_4068B0
		push	1Eh
		pop	ecx
		push	5
		pop	eax
		rep stosd
		lea	eax, [ebp+var_8]
		push	eax
		push	offset dword_42DB38
		push	offset byte_4093FC
		push	offset dword_42D230
		push	offset dword_4073E4
		push	offset dword_4073A8
		push	0
		push	1Eh
		push	offset dword_42D238
		call	sub_4068B0
		inc	byte_42E3B8

loc_405F69:				; CODE XREF: sub_405DB9+10Aj
		mov	al, byte_4093F8
		mov	[esi+10h], al
		mov	al, byte_4093FC
		mov	[esi+11h], al
		mov	eax, dword_42D234
		mov	[esi+14h], eax
		mov	eax, dword_42D230
		mov	[esi+18h], eax

loc_405F89:				; CODE XREF: sub_405DB9+83Aj
					; sub_405DB9+909j ...
		and	dword ptr [esi], 0
		jmp	loc_4067CD
; ---------------------------------------------------------------------------

loc_405F91:				; CODE XREF: sub_405DB9+A4j
		mov	ecx, ebx
		mov	dword ptr [esi], 9
		and	ecx, 7
		shr	[ebp+var_40], cl
		sub	ebx, ecx
		jmp	loc_4067CD
; ---------------------------------------------------------------------------

loc_405FA6:				; CODE XREF: sub_405DB9+210j
		cmp	[ebp+var_34], 0
		jz	loc_4067DD
		mov	eax, [ebp+var_38]
		dec	[ebp+var_34]
		mov	ecx, ebx
		movzx	eax, byte ptr [eax]
		shl	eax, cl
		or	[ebp+var_40], eax
		inc	[ebp+var_38]
		add	ebx, 8

loc_405FC6:				; CODE XREF: sub_405DB9:loc_405E0Aj
					; DATA XREF: .text:0040682Co
		cmp	ebx, 10h
		jb	short loc_405FA6
		mov	eax, [ebp+var_40]
		xor	ebx, ebx
		and	eax, 0FFFFh
		mov	[ebp+var_40], ebx
		cmp	eax, ebx
		mov	[esi+4], eax
		jz	loc_4060CC
		push	0Ah
		pop	eax
		jmp	loc_4060D2
; ---------------------------------------------------------------------------

loc_405FEB:				; CODE XREF: sub_405DB9:loc_405E0Aj
					; DATA XREF: .text:00406830o
		cmp	[ebp+var_34], 0
		jz	loc_4067DD
		mov	eax, [ebp+var_2C]
		test	eax, eax
		jnz	loc_406098
		mov	ecx, [esi+9BA0h]
		mov	edx, [ebp+var_30]
		cmp	edx, ecx
		jnz	short loc_406036
		mov	eax, [esi+9BA4h]
		lea	edi, [esi+1BA0h]
		cmp	eax, edi
		jz	short loc_406036
		mov	edx, edi
		cmp	edx, eax
		mov	[ebp+var_30], edx
		jnb	short loc_40602B
		sub	eax, edx
		dec	eax
		jmp	short loc_40602F
; ---------------------------------------------------------------------------

loc_40602B:				; CODE XREF: sub_405DB9+26Bj
		sub	ecx, edx
		mov	eax, ecx

loc_40602F:				; CODE XREF: sub_405DB9+270j
		test	eax, eax
		mov	[ebp+var_2C], eax
		jnz	short loc_406098

loc_406036:				; CODE XREF: sub_405DB9+252j
					; sub_405DB9+262j
		push	[ebp+arg_0]
		mov	[esi+9BA8h], edx
		call	sub_406848
		mov	edx, [esi+9BA8h]
		mov	ecx, [esi+9BA4h]
		cmp	edx, ecx
		mov	[ebp+var_30], edx
		jnb	short loc_40605E
		mov	eax, ecx
		sub	eax, edx
		dec	eax
		jmp	short loc_406066
; ---------------------------------------------------------------------------

loc_40605E:				; CODE XREF: sub_405DB9+29Cj
		mov	eax, [esi+9BA0h]
		sub	eax, edx

loc_406066:				; CODE XREF: sub_405DB9+2A3j
		mov	edi, [esi+9BA0h]
		mov	[ebp+var_2C], eax
		cmp	edx, edi
		jnz	short loc_406090
		lea	edx, [esi+1BA0h]
		cmp	edx, ecx
		jz	short loc_406090
		mov	[ebp+var_30], edx
		jnb	short loc_406089
		sub	ecx, edx
		dec	ecx
		mov	eax, ecx
		jmp	short loc_40608D
; ---------------------------------------------------------------------------

loc_406089:				; CODE XREF: sub_405DB9+2C7j
		sub	edi, edx
		mov	eax, edi

loc_40608D:				; CODE XREF: sub_405DB9+2CEj
		mov	[ebp+var_2C], eax

loc_406090:				; CODE XREF: sub_405DB9+2B8j
					; sub_405DB9+2C2j
		test	eax, eax
		jz	loc_4067F9

loc_406098:				; CODE XREF: sub_405DB9+241j
					; sub_405DB9+27Bj
		cmp	eax, [ebp+var_34]
		jb	short loc_4060A0
		mov	eax, [ebp+var_34]

loc_4060A0:				; CODE XREF: sub_405DB9+2E2j
		mov	ecx, [esi+4]
		cmp	ecx, eax
		mov	edi, ecx
		jb	short loc_4060AB
		mov	edi, eax

loc_4060AB:				; CODE XREF: sub_405DB9+2EEj
		push	edi
		push	[ebp+var_38]
		push	[ebp+var_30]
		call	sub_40568C
		add	[ebp+var_38], edi
		sub	[ebp+var_34], edi
		add	[ebp+var_30], edi
		sub	[ebp+var_2C], edi
		sub	[esi+4], edi
		jnz	loc_4067CD

loc_4060CC:				; CODE XREF: sub_405DB9+224j
		mov	eax, [esi+514h]

loc_4060D2:				; CODE XREF: sub_405DB9+22Dj
		mov	[esi], eax
		jmp	loc_4067CD
; ---------------------------------------------------------------------------

loc_4060D9:				; CODE XREF: sub_405DB9+343j
		cmp	[ebp+var_34], 0
		jz	loc_4067DD
		mov	eax, [ebp+var_38]
		dec	[ebp+var_34]
		mov	ecx, ebx
		movzx	eax, byte ptr [eax]
		shl	eax, cl
		or	[ebp+var_40], eax
		inc	[ebp+var_38]
		add	ebx, 8

loc_4060F9:				; CODE XREF: sub_405DB9:loc_405E0Aj
					; DATA XREF: .text:00406834o
		cmp	ebx, 0Eh
		jb	short loc_4060D9
		mov	eax, [ebp+var_40]
		and	eax, 3FFFh
		mov	ecx, eax
		mov	[esi+4], eax
		and	ecx, 1Fh
		cmp	cl, 1Dh
		ja	loc_405E70
		and	eax, 3E0h
		cmp	eax, 3A0h
		ja	loc_405E70
		shr	[ebp+var_40], 0Eh
		sub	ebx, 0Eh
		and	dword ptr [esi+8], 0
		mov	dword ptr [esi], 0Ch

loc_406138:				; CODE XREF: sub_405DB9:loc_405E0Aj
					; DATA XREF: .text:00406838o
		mov	eax, [esi+4]
		shr	eax, 0Ah
		add	eax, 4
		cmp	[esi+8], eax
		jnb	short loc_4061AF
		jmp	short loc_406168
; ---------------------------------------------------------------------------

loc_406148:				; CODE XREF: sub_405DB9+3B2j
		cmp	[ebp+var_34], 0
		jz	loc_4067DD
		mov	eax, [ebp+var_38]
		dec	[ebp+var_34]
		mov	ecx, ebx
		movzx	eax, byte ptr [eax]
		shl	eax, cl
		or	[ebp+var_40], eax
		inc	[ebp+var_38]
		add	ebx, 8

loc_406168:				; CODE XREF: sub_405DB9+38Dj
					; sub_405DB9+3E0j
		cmp	ebx, 3
		jb	short loc_406148
		mov	ecx, [esi+8]
		mov	eax, [ebp+var_40]
		and	eax, 7
		sub	ebx, 3
		movsx	ecx, ds:byte_407314[ecx]
		shr	[ebp+var_40], 3
		mov	[esi+ecx*4+0Ch], eax
		mov	ecx, [esi+4]
		inc	dword ptr [esi+8]
		mov	eax, [esi+8]
		shr	ecx, 0Ah
		add	ecx, 4
		cmp	eax, ecx
		jb	short loc_406168
		jmp	short loc_4061AF
; ---------------------------------------------------------------------------

loc_40619D:				; CODE XREF: sub_405DB9+3FAj
		mov	eax, [esi+8]
		movsx	eax, ds:byte_407314[eax]
		and	dword ptr [esi+eax*4+0Ch], 0
		inc	dword ptr [esi+8]

loc_4061AF:				; CODE XREF: sub_405DB9+38Bj
					; sub_405DB9+3E2j
		cmp	dword ptr [esi+8], 13h
		jb	short loc_40619D
		lea	ecx, [ebp+var_8]
		lea	edi, [esi+50Ch]
		push	ecx
		lea	ecx, [esi+520h]
		push	ecx
		lea	ecx, [esi+510h]
		xor	eax, eax
		push	edi
		push	ecx
		push	eax
		mov	[ebp+var_8], eax
		push	eax
		push	13h
		lea	eax, [esi+0Ch]
		push	13h
		push	eax
		mov	dword ptr [edi], 7
		call	sub_4068B0
		test	eax, eax
		jnz	short loc_4061FE
		cmp	[edi], eax
		jz	short loc_4061FE
		and	[esi+8], eax
		mov	dword ptr [esi], 0Dh
		jmp	loc_40631B
; ---------------------------------------------------------------------------

loc_4061FE:				; CODE XREF: sub_405DB9+431j
					; sub_405DB9+435j
		mov	dword ptr [esi], 11h
		jmp	loc_4067CD
; ---------------------------------------------------------------------------

loc_406209:				; CODE XREF: sub_405DB9+57Cj
		mov	eax, [esi+50Ch]
		jmp	short loc_406231
; ---------------------------------------------------------------------------

loc_406211:				; CODE XREF: sub_405DB9+47Aj
		cmp	[ebp+var_34], 0
		jz	loc_4067DD
		mov	ecx, [ebp+var_38]
		dec	[ebp+var_34]
		movzx	edx, byte ptr [ecx]
		mov	ecx, ebx
		shl	edx, cl
		or	[ebp+var_40], edx
		inc	[ebp+var_38]
		add	ebx, 8

loc_406231:				; CODE XREF: sub_405DB9+456j
		cmp	ebx, eax
		jb	short loc_406211
		movzx	eax, word_4093D4[eax*2]
		and	eax, [ebp+var_40]
		mov	ecx, [esi+510h]
		lea	eax, [ecx+eax*4]
		movzx	edx, byte ptr [eax+1]
		movzx	eax, word ptr [eax+2]
		cmp	eax, 10h
		mov	[ebp+var_14], eax
		jnb	short loc_40626F
		mov	ecx, edx
		sub	ebx, edx
		shr	[ebp+var_40], cl
		mov	ecx, [esi+8]
		mov	[esi+ecx*4+0Ch], eax
		inc	dword ptr [esi+8]
		jmp	loc_40631B
; ---------------------------------------------------------------------------

loc_40626F:				; CODE XREF: sub_405DB9+49Ej
		cmp	eax, 12h
		jnz	short loc_406280
		push	7
		mov	[ebp+var_8], 0Bh
		pop	eax
		jmp	short loc_4062AC
; ---------------------------------------------------------------------------

loc_406280:				; CODE XREF: sub_405DB9+4B9j
		add	eax, 0FFFFFFF2h
		mov	[ebp+var_8], 3
		jmp	short loc_4062AC
; ---------------------------------------------------------------------------

loc_40628C:				; CODE XREF: sub_405DB9+4F8j
		cmp	[ebp+var_34], 0
		jz	loc_4067DD
		mov	ecx, [ebp+var_38]
		dec	[ebp+var_34]
		movzx	edi, byte ptr [ecx]
		mov	ecx, ebx
		shl	edi, cl
		or	[ebp+var_40], edi
		inc	[ebp+var_38]
		add	ebx, 8

loc_4062AC:				; CODE XREF: sub_405DB9+4C5j
					; sub_405DB9+4D1j
		lea	ecx, [eax+edx]
		cmp	ebx, ecx
		jb	short loc_40628C
		mov	ecx, edx
		sub	ebx, edx
		shr	[ebp+var_40], cl
		movzx	ecx, word_4093D4[eax*2]
		and	ecx, [ebp+var_40]
		mov	edx, [ebp+var_8]
		sub	ebx, eax
		add	edx, ecx
		mov	ecx, eax
		mov	eax, [esi+4]
		shr	[ebp+var_40], cl
		mov	ecx, [esi+8]
		mov	edi, eax
		shr	edi, 5
		and	edi, 1Fh
		and	eax, 1Fh
		lea	eax, [edi+eax+102h]
		lea	edi, [edx+ecx]
		cmp	edi, eax
		ja	loc_405E70
		cmp	[ebp+var_14], 10h
		jnz	short loc_406309
		cmp	ecx, 1
		jb	loc_405E70
		mov	edi, [esi+ecx*4+8]
		jmp	short loc_40630B
; ---------------------------------------------------------------------------

loc_406309:				; CODE XREF: sub_405DB9+53Fj
		xor	edi, edi

loc_40630B:				; CODE XREF: sub_405DB9+54Ej
		lea	eax, [esi+ecx*4+0Ch]

loc_40630F:				; CODE XREF: sub_405DB9+55Dj
		mov	[eax], edi
		inc	ecx
		add	eax, 4
		dec	edx
		jnz	short loc_40630F
		mov	[esi+8], ecx

loc_40631B:				; CODE XREF: sub_405DB9:loc_405E0Aj
					; sub_405DB9+440j ...
		mov	eax, [esi+4]
		mov	ecx, [esi+8]
		mov	edx, eax
		and	eax, 1Fh
		shr	edx, 5
		and	edx, 1Fh
		lea	eax, [edx+eax+102h]
		cmp	ecx, eax
		jb	loc_406209
		mov	eax, [esi+4]
		and	dword ptr [esi+510h], 0
		and	[ebp+var_C], 0
		mov	edi, eax
		shr	eax, 5
		and	edi, 1Fh
		mov	ecx, 101h
		and	eax, 1Fh
		add	edi, ecx
		inc	eax
		lea	edx, [ebp+var_C]
		mov	[ebp+var_14], eax
		lea	eax, [esi+520h]
		push	edx
		push	eax
		lea	eax, [ebp+var_4]
		mov	[ebp+var_4], 9
		push	eax
		lea	eax, [ebp+var_18]
		push	eax
		push	offset dword_407368
		push	offset dword_407328
		push	ecx
		lea	eax, [esi+0Ch]
		push	edi
		push	eax
		mov	[ebp+var_10], 6
		call	sub_4068B0
		cmp	[ebp+var_4], 0
		jnz	short loc_40639E
		or	eax, 0FFFFFFFFh

loc_40639E:				; CODE XREF: sub_405DB9+5E0j
		test	eax, eax
		jnz	loc_405E70
		lea	eax, [ebp+var_C]
		push	eax
		lea	eax, [esi+520h]
		push	eax
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_1C]
		push	eax
		push	offset dword_4073E4
		push	offset dword_4073A8
		push	0
		push	[ebp+var_14]
		lea	eax, [esi+edi*4+0Ch]
		push	eax
		call	sub_4068B0
		test	eax, eax
		jnz	loc_405E70
		mov	eax, [ebp+var_10]
		test	eax, eax
		jnz	short loc_4063ED
		cmp	edi, 101h
		jg	loc_405E70

loc_4063ED:				; CODE XREF: sub_405DB9+626j
		mov	cl, byte ptr [ebp+var_4]
		and	dword ptr [esi], 0
		mov	[esi+11h], al
		mov	eax, [ebp+var_18]
		mov	[esi+14h], eax
		mov	eax, [ebp+var_1C]
		mov	[esi+10h], cl
		mov	[esi+18h], eax

loc_406405:				; CODE XREF: sub_405DB9:loc_405E0Aj
					; DATA XREF: .text:off_406808o
		movzx	eax, byte ptr [esi+10h]
		mov	[esi+0Ch], eax
		mov	eax, [esi+14h]
		mov	[esi+8], eax
		mov	dword ptr [esi], 1

loc_406418:				; CODE XREF: sub_405DB9:loc_405E0Aj
					; DATA XREF: .text:0040680Co
		mov	eax, [esi+0Ch]
		jmp	short loc_40643D
; ---------------------------------------------------------------------------

loc_40641D:				; CODE XREF: sub_405DB9+686j
		cmp	[ebp+var_34], 0
		jz	loc_4067DD
		mov	ecx, [ebp+var_38]
		dec	[ebp+var_34]
		movzx	edx, byte ptr [ecx]
		mov	ecx, ebx
		shl	edx, cl
		or	[ebp+var_40], edx
		inc	[ebp+var_38]
		add	ebx, 8

loc_40643D:				; CODE XREF: sub_405DB9+662j
		cmp	ebx, eax
		jb	short loc_40641D
		movzx	eax, word_4093D4[eax*2]
		and	eax, [ebp+var_40]
		mov	ecx, [esi+8]
		lea	eax, [ecx+eax*4]
		movzx	ecx, byte ptr [eax+1]
		shr	[ebp+var_40], cl
		sub	ebx, ecx
		movzx	ecx, byte ptr [eax]
		test	ecx, ecx
		jnz	short loc_406474
		movzx	eax, word ptr [eax+2]
		mov	[esi+8], eax
		mov	dword ptr [esi], 6
		jmp	loc_4067CD
; ---------------------------------------------------------------------------

loc_406474:				; CODE XREF: sub_405DB9+6A7j
		test	cl, 10h
		jz	short loc_406491
		and	ecx, 0Fh
		mov	[esi+8], ecx
		movzx	eax, word ptr [eax+2]
		mov	[esi+4], eax
		mov	dword ptr [esi], 2
		jmp	loc_4067CD
; ---------------------------------------------------------------------------

loc_406491:				; CODE XREF: sub_405DB9+6BEj
		test	cl, 40h
		jz	loc_40656B
		test	cl, 20h
		jz	loc_405E70
		mov	dword ptr [esi], 7
		jmp	loc_4067CD
; ---------------------------------------------------------------------------

loc_4064AE:				; CODE XREF: sub_405DB9:loc_405E0Aj
					; DATA XREF: .text:00406810o
		mov	eax, [esi+8]
		jmp	short loc_4064D3
; ---------------------------------------------------------------------------

loc_4064B3:				; CODE XREF: sub_405DB9+71Cj
		cmp	[ebp+var_34], 0
		jz	loc_4067DD
		mov	ecx, [ebp+var_38]
		dec	[ebp+var_34]
		movzx	edx, byte ptr [ecx]
		mov	ecx, ebx
		shl	edx, cl
		or	[ebp+var_40], edx
		inc	[ebp+var_38]
		add	ebx, 8

loc_4064D3:				; CODE XREF: sub_405DB9+6F8j
		cmp	ebx, eax
		jb	short loc_4064B3
		movzx	ecx, word_4093D4[eax*2]
		and	ecx, [ebp+var_40]
		add	[esi+4], ecx
		mov	ecx, eax
		shr	[ebp+var_40], cl
		sub	ebx, eax
		movzx	eax, byte ptr [esi+11h]
		mov	[esi+0Ch], eax
		mov	eax, [esi+18h]
		mov	[esi+8], eax
		mov	dword ptr [esi], 3

loc_4064FF:				; CODE XREF: sub_405DB9:loc_405E0Aj
					; DATA XREF: .text:00406814o
		mov	eax, [esi+0Ch]
		jmp	short loc_406524
; ---------------------------------------------------------------------------

loc_406504:				; CODE XREF: sub_405DB9+76Dj
		cmp	[ebp+var_34], 0
		jz	loc_4067DD
		mov	ecx, [ebp+var_38]
		dec	[ebp+var_34]
		movzx	edx, byte ptr [ecx]
		mov	ecx, ebx
		shl	edx, cl
		or	[ebp+var_40], edx
		inc	[ebp+var_38]
		add	ebx, 8

loc_406524:				; CODE XREF: sub_405DB9+749j
		cmp	ebx, eax
		jb	short loc_406504
		movzx	eax, word_4093D4[eax*2]
		and	eax, [ebp+var_40]
		mov	ecx, [esi+8]
		lea	eax, [ecx+eax*4]
		movzx	ecx, byte ptr [eax+1]
		shr	[ebp+var_40], cl
		sub	ebx, ecx
		movzx	ecx, byte ptr [eax]
		test	cl, 10h
		jz	short loc_406562
		and	ecx, 0Fh
		mov	[esi+8], ecx
		movzx	eax, word ptr [eax+2]
		mov	[esi+0Ch], eax
		mov	dword ptr [esi], 4
		jmp	loc_4067CD
; ---------------------------------------------------------------------------

loc_406562:				; CODE XREF: sub_405DB9+78Fj
		test	cl, 40h
		jnz	loc_405E70

loc_40656B:				; CODE XREF: sub_405DB9+6DBj
		mov	[esi+0Ch], ecx
		movzx	ecx, word ptr [eax+2]
		lea	eax, [eax+ecx*4]
		mov	[esi+8], eax
		jmp	loc_4067CD
; ---------------------------------------------------------------------------

loc_40657D:				; CODE XREF: sub_405DB9:loc_405E0Aj
					; DATA XREF: .text:00406818o
		mov	eax, [esi+8]
		jmp	short loc_4065A2
; ---------------------------------------------------------------------------

loc_406582:				; CODE XREF: sub_405DB9+7EBj
		cmp	[ebp+var_34], 0
		jz	loc_4067DD
		mov	ecx, [ebp+var_38]
		dec	[ebp+var_34]
		movzx	edx, byte ptr [ecx]
		mov	ecx, ebx
		shl	edx, cl
		or	[ebp+var_40], edx
		inc	[ebp+var_38]
		add	ebx, 8

loc_4065A2:				; CODE XREF: sub_405DB9+7C7j
		cmp	ebx, eax
		jb	short loc_406582
		movzx	ecx, word_4093D4[eax*2]
		and	ecx, [ebp+var_40]
		add	[esi+0Ch], ecx
		mov	ecx, eax
		shr	[ebp+var_40], cl
		sub	ebx, eax
		mov	dword ptr [esi], 5

loc_4065C1:				; CODE XREF: sub_405DB9:loc_405E0Aj
					; DATA XREF: .text:0040681Co
		mov	eax, [ebp+var_30]
		mov	edx, [esi+0Ch]
		mov	ecx, eax
		sub	ecx, esi
		sub	ecx, 1BA0h
		cmp	ecx, edx
		jnb	short loc_4065E8
		mov	ecx, [esi+9BA0h]
		sub	ecx, edx
		sub	ecx, esi
		lea	ecx, [ecx+eax-1BA0h]
		jmp	short loc_4065EC
; ---------------------------------------------------------------------------

loc_4065E8:				; CODE XREF: sub_405DB9+81Aj
		mov	ecx, eax
		sub	ecx, edx

loc_4065EC:				; CODE XREF: sub_405DB9+82Dj
		cmp	dword ptr [esi+4], 0
		mov	[ebp+var_20], ecx
		jz	loc_405F89
		mov	edi, [ebp+var_2C]

loc_4065FC:				; CODE XREF: sub_405DB9+903j
		test	edi, edi
		jnz	loc_406695
		mov	edi, [esi+9BA0h]
		cmp	eax, edi
		jnz	short loc_406631
		mov	ecx, [esi+9BA4h]
		lea	edx, [esi+1BA0h]
		cmp	ecx, edx
		jz	short loc_406631
		mov	eax, edx
		cmp	eax, ecx
		jnb	short loc_40662B
		sub	ecx, eax
		dec	ecx
		mov	edi, ecx
		jmp	short loc_40662D
; ---------------------------------------------------------------------------

loc_40662B:				; CODE XREF: sub_405DB9+869j
		sub	edi, eax

loc_40662D:				; CODE XREF: sub_405DB9+870j
		test	edi, edi
		jnz	short loc_406695

loc_406631:				; CODE XREF: sub_405DB9+853j
					; sub_405DB9+863j
		push	[ebp+arg_0]
		mov	[esi+9BA8h], eax
		call	sub_406848
		mov	eax, [esi+9BA8h]
		mov	ecx, [esi+9BA4h]
		cmp	eax, ecx
		mov	[ebp+var_30], eax
		jnb	short loc_406659
		mov	edi, ecx
		sub	edi, eax
		dec	edi
		jmp	short loc_406661
; ---------------------------------------------------------------------------

loc_406659:				; CODE XREF: sub_405DB9+897j
		mov	edi, [esi+9BA0h]
		sub	edi, eax

loc_406661:				; CODE XREF: sub_405DB9+89Ej
		mov	edx, [esi+9BA0h]
		cmp	eax, edx
		mov	[ebp+var_8], edx
		jnz	short loc_40668D
		lea	edx, [esi+1BA0h]
		cmp	ecx, edx
		jz	short loc_40668D
		mov	eax, edx
		cmp	eax, ecx
		mov	[ebp+var_30], eax
		jnb	short loc_406688
		sub	ecx, eax
		dec	ecx
		mov	edi, ecx
		jmp	short loc_40668D
; ---------------------------------------------------------------------------

loc_406688:				; CODE XREF: sub_405DB9+8C6j
		mov	edi, [ebp+var_8]
		sub	edi, eax

loc_40668D:				; CODE XREF: sub_405DB9+8B3j
					; sub_405DB9+8BDj ...
		test	edi, edi
		jz	loc_4067F9

loc_406695:				; CODE XREF: sub_405DB9+845j
					; sub_405DB9+876j
		mov	ecx, [ebp+var_20]
		mov	dl, [ecx]
		mov	[eax], dl
		inc	eax
		inc	ecx
		dec	edi
		cmp	ecx, [esi+9BA0h]
		mov	[ebp+var_30], eax
		mov	[ebp+var_20], ecx
		mov	[ebp+var_2C], edi
		jnz	short loc_4066B9
		lea	ecx, [esi+1BA0h]
		mov	[ebp+var_20], ecx

loc_4066B9:				; CODE XREF: sub_405DB9+8F5j
		dec	dword ptr [esi+4]
		jnz	loc_4065FC
		jmp	loc_405F89
; ---------------------------------------------------------------------------

loc_4066C7:				; CODE XREF: sub_405DB9:loc_405E0Aj
					; DATA XREF: .text:00406820o
		mov	eax, [ebp+var_2C]
		mov	edi, [ebp+var_30]
		test	eax, eax
		jnz	loc_406766
		mov	ecx, [esi+9BA0h]
		cmp	edi, ecx
		jnz	short loc_406702
		mov	eax, [esi+9BA4h]
		lea	edx, [esi+1BA0h]
		cmp	eax, edx
		jz	short loc_406702
		mov	edi, edx
		cmp	edi, eax
		jnb	short loc_4066FA
		sub	eax, edi
		dec	eax
		jmp	short loc_4066FE
; ---------------------------------------------------------------------------

loc_4066FA:				; CODE XREF: sub_405DB9+93Aj
		sub	ecx, edi
		mov	eax, ecx

loc_4066FE:				; CODE XREF: sub_405DB9+93Fj
		test	eax, eax
		jnz	short loc_406766

loc_406702:				; CODE XREF: sub_405DB9+924j
					; sub_405DB9+934j
		push	[ebp+arg_0]
		mov	[esi+9BA8h], edi
		call	sub_406848
		mov	edi, [esi+9BA8h]
		mov	ecx, [esi+9BA4h]
		cmp	edi, ecx
		mov	[ebp+var_30], edi
		jnb	short loc_40672A
		mov	eax, ecx
		sub	eax, edi
		dec	eax
		jmp	short loc_406732
; ---------------------------------------------------------------------------

loc_40672A:				; CODE XREF: sub_405DB9+968j
		mov	eax, [esi+9BA0h]
		sub	eax, edi

loc_406732:				; CODE XREF: sub_405DB9+96Fj
		mov	edx, [esi+9BA0h]
		cmp	edi, edx
		mov	[ebp+var_8], edx
		jnz	short loc_40675E
		lea	edx, [esi+1BA0h]
		cmp	ecx, edx
		jz	short loc_40675E
		mov	edi, edx
		cmp	edi, ecx
		mov	[ebp+var_30], edi
		jnb	short loc_406759
		sub	ecx, edi
		dec	ecx
		mov	eax, ecx
		jmp	short loc_40675E
; ---------------------------------------------------------------------------

loc_406759:				; CODE XREF: sub_405DB9+997j
		mov	eax, [ebp+var_8]
		sub	eax, edi

loc_40675E:				; CODE XREF: sub_405DB9+984j
					; sub_405DB9+98Ej ...
		test	eax, eax
		jz	loc_4067F9

loc_406766:				; CODE XREF: sub_405DB9+916j
					; sub_405DB9+947j
		mov	cl, [esi+8]
		mov	[edi], cl
		inc	edi
		dec	eax
		mov	[ebp+var_30], edi
		mov	[ebp+var_2C], eax
		jmp	loc_405F89
; ---------------------------------------------------------------------------

loc_406778:				; CODE XREF: sub_405DB9:loc_405E0Aj
					; DATA XREF: .text:00406824o
		cmp	ebx, 7
		jbe	short loc_406786
		sub	ebx, 8
		inc	[ebp+var_34]
		dec	[ebp+var_38]

loc_406786:				; CODE XREF: sub_405DB9:loc_405E0Aj
					; sub_405DB9+9C2j
					; DATA XREF: ...
		mov	eax, [ebp+var_30]
		push	[ebp+arg_0]
		mov	[esi+9BA8h], eax
		call	sub_406848
		mov	ecx, [esi+9BA8h]
		mov	edx, [esi+9BA4h]
		cmp	ecx, edx
		mov	[ebp+var_30], ecx
		jnb	short loc_4067B1
		mov	eax, edx
		sub	eax, ecx
		dec	eax
		jmp	short loc_4067B9
; ---------------------------------------------------------------------------

loc_4067B1:				; CODE XREF: sub_405DB9+9EFj
		mov	eax, [esi+9BA0h]
		sub	eax, ecx

loc_4067B9:				; CODE XREF: sub_405DB9+9F6j
		cmp	ecx, edx
		mov	[ebp+var_2C], eax
		jnz	short loc_4067F9
		mov	eax, [esi+514h]
		cmp	eax, 8
		mov	[esi], eax
		jnz	short loc_406800

loc_4067CD:				; CODE XREF: sub_405DB9+4Cj
					; sub_405DB9+B1j ...
		mov	eax, [esi]
		cmp	eax, 0Fh
		jbe	loc_405E0A
		jmp	loc_405E70
; ---------------------------------------------------------------------------

loc_4067DD:				; CODE XREF: sub_405DB9+5Cj
					; sub_405DB9+1F1j ...
		mov	eax, [ebp+var_40]
		xor	edi, edi
		mov	[esi+51Ch], eax
		mov	eax, [ebp+arg_0]
		mov	[esi+518h], ebx
		mov	[eax+4], edi
		jmp	loc_405E91
; ---------------------------------------------------------------------------

loc_4067F9:				; CODE XREF: sub_405DB9+2D9j
					; sub_405DB9+8D6j ...
		xor	edi, edi
		jmp	loc_405E79
; ---------------------------------------------------------------------------

loc_406800:				; CODE XREF: sub_405DB9+A12j
		xor	edi, edi
		inc	edi
		jmp	loc_405E79
sub_405DB9	endp

; ---------------------------------------------------------------------------
off_406808	dd offset loc_406405	; DATA XREF: sub_405DB9:loc_405E0Ar
		dd offset loc_406418
		dd offset loc_4064AE
		dd offset loc_4064FF
		dd offset loc_40657D
		dd offset loc_4065C1
		dd offset loc_4066C7
		dd offset loc_406778
		dd offset loc_405E31
		dd offset loc_405FC6
		dd offset loc_405FEB
		dd offset loc_4060F9
		dd offset loc_406138
		dd offset loc_40631B
		dd offset loc_405E70
		dd offset loc_406786

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



sub_406848	proc near		; CODE XREF: sub_405DB9+EAp
					; sub_405DB9+286p ...

arg_0		= dword	ptr  4

		push	ebx
		push	esi
		mov	esi, [esp+8+arg_0]
		push	edi
		mov	edi, [esi+9BB4h]

loc_406855:				; CODE XREF: sub_406848+52j
					; sub_406848+5Aj
		mov	ebx, [esi+9BB8h]
		cmp	edi, ebx
		jbe	short loc_406865
		mov	ebx, [esi+9BB0h]

loc_406865:				; CODE XREF: sub_406848+15j
		mov	eax, [esi+0Ch]
		sub	ebx, edi
		cmp	ebx, eax
		jb	short loc_406870
		mov	ebx, eax

loc_406870:				; CODE XREF: sub_406848+24j
		push	ebx
		push	edi
		push	dword ptr [esi+8]
		sub	eax, ebx
		mov	[esi+0Ch], eax
		call	sub_40568C
		add	[esi+8], ebx
		mov	eax, [esi+9BB0h]
		add	edi, ebx
		cmp	edi, eax
		jnz	short loc_4068A4
		cmp	[esi+9BB8h], eax
		lea	edi, [esi+1BB0h]
		jnz	short loc_406855
		mov	[esi+9BB8h], edi
		jmp	short loc_406855
; ---------------------------------------------------------------------------

loc_4068A4:				; CODE XREF: sub_406848+44j
		mov	[esi+9BB4h], edi
		pop	edi
		pop	esi
		pop	ebx
		retn	4
sub_406848	endp


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

; Attributes: bp-based frame


sub_4068B0	proc near		; CODE XREF: sub_405DB9+172p
					; sub_405DB9+1A5p ...

var_EC		= dword	ptr -0ECh
var_B0		= dword	ptr -0B0h
var_AC		= dword	ptr -0ACh
var_70		= dword	ptr -70h
var_6C		= dword	ptr -6Ch
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
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_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
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
arg_20		= dword	ptr  28h

		push	ebp
		mov	ebp, esp
		sub	esp, 0ECh
		push	ebx
		push	esi
		mov	esi, [ebp+arg_4]
		push	edi
		push	10h
		xor	eax, eax
		pop	ecx
		lea	edi, [ebp+var_70]
		rep stosd
		mov	ecx, [ebp+arg_0]
		mov	edx, esi

loc_4068CE:				; CODE XREF: sub_4068B0+2Aj
		mov	eax, [ecx]
		add	ecx, 4
		lea	eax, [ebp+eax*4+var_70]
		inc	dword ptr [eax]
		dec	edx
		jnz	short loc_4068CE
		cmp	[ebp+var_70], esi
		jnz	short loc_4068F4
		mov	eax, [ebp+arg_14]
		and	dword ptr [eax], 0
		mov	eax, [ebp+arg_18]
		and	dword ptr [eax], 0
		xor	eax, eax
		jmp	loc_406BE4
; ---------------------------------------------------------------------------

loc_4068F4:				; CODE XREF: sub_4068B0+2Fj
		mov	esi, [ebp+arg_18]
		xor	ebx, ebx
		inc	ebx
		push	0Fh
		mov	edi, [esi]
		mov	ecx, ebx
		mov	[ebp+arg_18], edi
		pop	edx

loc_406904:				; CODE XREF: sub_4068B0+5Fj
		xor	eax, eax
		cmp	[ebp+ecx*4+var_70], eax
		jnz	short loc_406911
		inc	ecx
		cmp	ecx, edx
		jbe	short loc_406904

loc_406911:				; CODE XREF: sub_4068B0+5Aj
		cmp	edi, ecx
		mov	[ebp+var_4], ecx
		jnb	short loc_40691B
		mov	[ebp+arg_18], ecx

loc_40691B:				; CODE XREF: sub_4068B0+66j
					; sub_4068B0+72j
		cmp	[ebp+edx*4+var_70], eax
		jnz	short loc_406924
		dec	edx
		jnz	short loc_40691B

loc_406924:				; CODE XREF: sub_4068B0+6Fj
		cmp	[ebp+arg_18], edx
		mov	[ebp+var_18], edx
		jbe	short loc_40692F
		mov	[ebp+arg_18], edx

loc_40692F:				; CODE XREF: sub_4068B0+7Aj
		mov	edi, [ebp+arg_18]
		mov	[esi], edi
		shl	ebx, cl
		jmp	short loc_406945
; ---------------------------------------------------------------------------

loc_406938:				; CODE XREF: sub_4068B0+97j
		sub	ebx, [ebp+ecx*4+var_70]
		js	loc_406BE1
		inc	ecx
		add	ebx, ebx

loc_406945:				; CODE XREF: sub_4068B0+86j
		cmp	ecx, edx
		jb	short loc_406938
		mov	esi, edx
		shl	esi, 2
		lea	ecx, [ebp+esi+var_70]
		mov	edi, [ecx]
		sub	ebx, edi
		mov	[ebp+var_30], ebx
		js	loc_406BE1
		add	edi, ebx
		mov	[ebp+var_AC], eax
		mov	[ecx], edi
		xor	ecx, ecx
		dec	edx
		jz	short loc_406981
		xor	edi, edi

loc_406970:				; CODE XREF: sub_4068B0+CFj
		add	ecx, [ebp+edi+var_6C]
		add	edi, 4
		dec	edx
		mov	[ebp+edi+var_AC], ecx
		jnz	short loc_406970

loc_406981:				; CODE XREF: sub_4068B0+BCj
		mov	ebx, [ebp+arg_0]
		xor	edi, edi

loc_406986:				; CODE XREF: sub_4068B0+F6j
		mov	ecx, [ebx]
		add	ebx, 4
		cmp	ecx, eax
		jz	short loc_4069A2
		lea	ecx, [ebp+ecx*4+var_B0]
		mov	edx, [ecx]
		mov	dword_42D6B8[edx*4], edi
		inc	edx
		mov	[ecx], edx

loc_4069A2:				; CODE XREF: sub_4068B0+DDj
		inc	edi
		cmp	edi, [ebp+arg_4]
		jb	short loc_406986
		mov	ecx, [ebp+esi+var_B0]
		mov	ebx, [ebp+arg_18]
		or	[ebp+var_C], 0FFFFFFFFh
		and	[ebp+var_24], 0
		mov	[ebp+arg_4], ecx
		mov	ecx, [ebp+var_4]
		neg	ebx
		cmp	ecx, [ebp+var_18]
		mov	[ebp+var_8], eax
		mov	[ebp+var_B0], eax
		mov	[ebp+var_20], offset dword_42D6B8
		mov	[ebp+var_EC], eax
		jg	loc_406BD4
		lea	edx, [ecx-1]
		lea	ecx, [ebp+ecx*4+var_70]
		mov	[ebp+var_28], edx
		mov	[ebp+var_1C], ecx

loc_4069EE:				; CODE XREF: sub_4068B0+31Ej
		mov	ecx, [ebp+var_1C]
		mov	esi, [ecx]
		test	esi, esi
		jz	loc_406BBE
		jmp	short loc_406A00
; ---------------------------------------------------------------------------

loc_4069FD:				; CODE XREF: sub_4068B0+308j
		mov	esi, [ebp+var_2C]

loc_406A00:				; CODE XREF: sub_4068B0+14Bj
		mov	ecx, [ebp+arg_18]
		dec	esi
		add	ecx, ebx
		mov	[ebp+var_2C], esi
		cmp	[ebp+var_4], ecx
		mov	[ebp+var_14], ecx
		jle	loc_406AE1
		inc	esi
		mov	[ebp+var_10], esi

loc_406A19:				; CODE XREF: sub_4068B0+22Bj
		mov	esi, [ebp+var_18]
		inc	[ebp+var_C]
		sub	esi, [ebp+var_14]
		cmp	esi, [ebp+arg_18]
		jbe	short loc_406A2A
		mov	esi, [ebp+arg_18]

loc_406A2A:				; CODE XREF: sub_4068B0+175j
		mov	ecx, [ebp+var_4]
		xor	edx, edx
		sub	ecx, [ebp+var_14]
		inc	edx
		shl	edx, cl
		cmp	edx, [ebp+var_10]
		jbe	short loc_406A5D
		mov	edi, [ebp+var_1C]
		or	eax, 0FFFFFFFFh
		sub	eax, [ebp+var_2C]
		add	edx, eax
		cmp	ecx, esi
		jnb	short loc_406A5D
		jmp	short loc_406A58
; ---------------------------------------------------------------------------

loc_406A4B:				; CODE XREF: sub_4068B0+1ABj
		add	edi, 4
		add	edx, edx
		mov	eax, [edi]
		cmp	edx, eax
		jbe	short loc_406A5D
		sub	edx, eax

loc_406A58:				; CODE XREF: sub_4068B0+199j
		inc	ecx
		cmp	ecx, esi
		jb	short loc_406A4B

loc_406A5D:				; CODE XREF: sub_4068B0+188j
					; sub_4068B0+197j ...
		mov	edx, [ebp+arg_20]
		xor	eax, eax
		inc	eax
		mov	edx, [edx]
		shl	eax, cl
		mov	[ebp+var_24], eax
		lea	edi, [edx+eax]
		cmp	edi, 5A0h
		ja	loc_406BE1
		mov	eax, [ebp+arg_1C]
		lea	eax, [eax+edx*4]
		mov	edx, [ebp+var_C]
		lea	esi, [ebp+edx*4+var_EC]
		mov	edx, [ebp+arg_20]
		mov	[edx], edi
		mov	edx, [ebp+var_C]
		test	edx, edx
		mov	[esi], eax
		jz	short loc_406AC8
		mov	edi, [ebp+var_8]
		mov	esi, [esi-4]
		mov	[ebp+edx*4+var_B0], edi
		mov	dl, byte ptr [ebp+arg_18]
		mov	byte ptr [ebp+arg_0+1],	dl
		mov	byte ptr [ebp+arg_0], cl
		mov	edx, edi
		mov	ecx, ebx
		shr	edx, cl
		mov	ecx, eax
		sub	ecx, esi
		sar	ecx, 2
		sub	ecx, edx
		mov	word ptr [ebp+arg_0+2],	cx
		mov	ecx, [ebp+arg_0]
		mov	[esi+edx*4], ecx
		jmp	short loc_406ACD
; ---------------------------------------------------------------------------

loc_406AC8:				; CODE XREF: sub_4068B0+1E5j
		mov	ecx, [ebp+arg_14]
		mov	[ecx], eax

loc_406ACD:				; CODE XREF: sub_4068B0+216j
		mov	ecx, [ebp+var_14]
		mov	ebx, ecx
		add	ecx, [ebp+arg_18]
		cmp	[ebp+var_4], ecx
		mov	[ebp+var_14], ecx
		jg	loc_406A19

loc_406AE1:				; CODE XREF: sub_4068B0+15Fj
		mov	cl, byte ptr [ebp+var_4]
		mov	esi, [ebp+var_20]
		sub	cl, bl
		mov	byte ptr [ebp+arg_0+1],	cl
		mov	ecx, [ebp+arg_4]
		lea	ecx, ds:42D6B8h[ecx*4]
		cmp	esi, ecx
		jb	short loc_406B00
		mov	byte ptr [ebp+arg_0], 0C0h
		jmp	short loc_406B43
; ---------------------------------------------------------------------------

loc_406B00:				; CODE XREF: sub_4068B0+248j
		mov	ecx, [esi]
		cmp	ecx, [ebp+arg_8]
		jnb	short loc_406B23
		cmp	ecx, 100h
		setb	cl
		dec	cl
		and	ecx, 60h
		mov	byte ptr [ebp+arg_0], cl
		mov	cx, [esi]
		add	esi, 4
		mov	[ebp+var_20], esi
		jmp	short loc_406B3F
; ---------------------------------------------------------------------------

loc_406B23:				; CODE XREF: sub_4068B0+255j
		sub	ecx, [ebp+arg_8]
		mov	edx, [ebp+arg_10]
		add	ecx, ecx
		mov	dl, [ecx+edx]
		add	dl, 50h
		add	[ebp+var_20], 4
		mov	byte ptr [ebp+arg_0], dl
		mov	edx, [ebp+arg_C]
		mov	cx, [ecx+edx]

loc_406B3F:				; CODE XREF: sub_4068B0+271j
		mov	word ptr [ebp+arg_0+2],	cx

loc_406B43:				; CODE XREF: sub_4068B0+24Ej
		mov	ecx, [ebp+var_4]
		mov	edx, [ebp+var_8]
		xor	edi, edi
		sub	ecx, ebx
		inc	edi
		mov	esi, edi
		shl	esi, cl
		mov	ecx, ebx
		shr	edx, cl
		jmp	short loc_406B60
; ---------------------------------------------------------------------------

loc_406B58:				; CODE XREF: sub_4068B0+2B3j
		mov	ecx, [ebp+arg_0]
		mov	[eax+edx*4], ecx
		add	edx, esi

loc_406B60:				; CODE XREF: sub_4068B0+2A6j
		cmp	edx, [ebp+var_24]
		jb	short loc_406B58
		mov	ecx, [ebp+var_28]
		mov	esi, [ebp+var_8]
		mov	edx, edi
		shl	edx, cl
		jmp	short loc_406B75
; ---------------------------------------------------------------------------

loc_406B71:				; CODE XREF: sub_4068B0+2C7j
		xor	esi, edx
		shr	edx, 1

loc_406B75:				; CODE XREF: sub_4068B0+2BFj
		test	edx, esi
		jnz	short loc_406B71
		mov	ecx, edi
		xor	esi, edx
		mov	[ebp+var_10], ecx
		mov	ecx, ebx
		mov	edx, edi
		mov	[ebp+var_8], esi
		shl	edx, cl
		dec	edx
		and	edx, esi
		mov	ecx, edx
		mov	edx, [ebp+var_C]
		cmp	ecx, [ebp+edx*4+var_B0]
		jz	short loc_406BB4

loc_406B9A:				; CODE XREF: sub_4068B0+2FFj
		sub	ebx, [ebp+arg_18]
		mov	esi, edi
		dec	edx
		mov	ecx, ebx
		shl	esi, cl
		dec	esi
		and	esi, [ebp+var_8]
		cmp	esi, [ebp+edx*4+var_B0]
		jnz	short loc_406B9A
		mov	[ebp+var_C], edx

loc_406BB4:				; CODE XREF: sub_4068B0+2E8j
		cmp	[ebp+var_2C], 0
		jnz	loc_4069FD

loc_406BBE:				; CODE XREF: sub_4068B0+145j
		inc	[ebp+var_4]
		add	[ebp+var_1C], 4
		mov	ecx, [ebp+var_4]
		inc	[ebp+var_28]
		cmp	ecx, [ebp+var_18]
		jle	loc_4069EE

loc_406BD4:				; CODE XREF: sub_4068B0+12Bj
		xor	eax, eax
		cmp	[ebp+var_30], eax
		jz	short loc_406BE4
		cmp	[ebp+var_18], 1
		jz	short loc_406BE4

loc_406BE1:				; CODE XREF: sub_4068B0+8Cj
					; sub_4068B0+A9j ...
		or	eax, 0FFFFFFFFh

loc_406BE4:				; CODE XREF: sub_4068B0+3Fj
					; sub_4068B0+329j ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	24h
sub_4068B0	endp

; ---------------------------------------------------------------------------
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION VerQueryValueA. PRESS KEYPAD "+" TO EXPAND]
; [00000006 BYTES: COLLAPSED FUNCTION GetFileVersionInfoA. PRESS KEYPAD	"+" TO EXPAND]
; [00000006 BYTES: COLLAPSED FUNCTION GetFileVersionInfoSizeA. PRESS KEYPAD "+"	TO EXPAND]
		align 10h
_text		ends

; Section 2. (virtual address 00007000)
; Virtual size			: 000011FE (   4606.)
; Section size in file		: 00001200 (   4608.)
; Offset to raw	data for section: 00006000
; Flags	40000040: Data Readable
; Alignment	: default
;
; Imports from ADVAPI32.dll
;
; ===========================================================================

; Segment type:	Externs
; _idata
; LSTATUS __stdcall RegQueryValueExA(HKEY hKey,LPCSTR lpValueName,LPDWORD lpReserved,LPDWORD lpType,LPBYTE lpData,LPDWORD lpcbData)
		extrn RegQueryValueExA:dword ; CODE XREF: sub_401439+1021p
					; sub_4058CF+3Dp
					; DATA XREF: ...
; LSTATUS __stdcall RegSetValueExA(HKEY	hKey,LPCSTR lpValueName,DWORD Reserved,DWORD dwType,const BYTE *lpData,DWORD cbData)
		extrn RegSetValueExA:dword ; CODE XREF:	sub_401439+FDCp
					; DATA XREF: sub_401439+FDCr
; LSTATUS __stdcall RegEnumKeyA(HKEY hKey,DWORD	dwIndex,LPSTR lpName,DWORD cchName)
		extrn RegEnumKeyA:dword	; CODE XREF: sub_401439+109Ap
					; sub_402ADA+57p
					; DATA XREF: ...
; LSTATUS __stdcall RegEnumValueA(HKEY hKey,DWORD dwIndex,LPSTR	lpValueName,LPDWORD lpcchValueName,LPDWORD lpReserved,LPDWORD lpType,LPBYTE lpData,LPDWORD lpcbData)
		extrn RegEnumValueA:dword ; CODE XREF: sub_401439+10ADp
					; DATA XREF: sub_401439+10ADr
; LSTATUS __stdcall RegOpenKeyExA(HKEY hKey,LPCSTR lpSubKey,DWORD ulOptions,REGSAM samDesired,PHKEY phkResult)
		extrn RegOpenKeyExA:dword ; CODE XREF: sub_402ADA+1Bp
					; sub_402B76+22p ...
; LSTATUS __stdcall RegDeleteKeyA(HKEY hKey,LPCSTR lpSubKey)
		extrn RegDeleteKeyA:dword ; CODE XREF: sub_402ADA+6Cp
					; DATA XREF: sub_402ADA+6Cr
; LSTATUS __stdcall RegDeleteValueA(HKEY hKey,LPCSTR lpValueName)
		extrn RegDeleteValueA:dword ; CODE XREF: sub_401439+F10p
					; DATA XREF: sub_401439+F10r
; LSTATUS __stdcall RegCloseKey(HKEY hKey)
		extrn RegCloseKey:dword	; CODE XREF: sub_401439+F19p
					; sub_401439:loc_4024FBp ...
; LSTATUS __stdcall RegCreateKeyExA(HKEY hKey,LPCSTR lpSubKey,DWORD Reserved,LPSTR lpClass,DWORD dwOptions,REGSAM samDesired,const LPSECURITY_ATTRIBUTES lpSecurityAttributes,PHKEY phkResult,LPDWORD lpdwDisposition)
		extrn RegCreateKeyExA:dword ; CODE XREF: sub_401439+F83p
					; DATA XREF: sub_401439+F83r

;
; Imports from COMCTL32.dll
;
; int __stdcall	ImageList_AddMasked(HIMAGELIST himl,HBITMAP hbmImage,COLORREF crMask)
		extrn ImageList_AddMasked:dword	; CODE XREF: sub_4046C3+BEp
					; DATA XREF: sub_4046C3+BEr
; BOOL __stdcall ImageList_Destroy(HIMAGELIST himl)
		extrn ImageList_Destroy:dword ;	CODE XREF: sub_4046C3+42Bp
					; DATA XREF: sub_4046C3+42Br
; void __stdcall InitCommonControls()
		extrn InitCommonControls:dword ; CODE XREF: start+1Ap
					; DATA XREF: start+1Ar
; HIMAGELIST __stdcall ImageList_Create(int cx,int cy,UINT flags,int cInitial,int cGrow)
		extrn ImageList_Create:dword ; CODE XREF: sub_4046C3+AAp
					; DATA XREF: sub_4046C3+AAr

;
; Imports from GDI32.dll
;
; COLORREF __stdcall SetBkColor(HDC hdc,COLORREF color)
		extrn SetBkColor:dword	; CODE XREF: sub_403E2A+74p
					; DATA XREF: sub_403E2A+74r
; int __stdcall	GetDeviceCaps(HDC hdc,int index)
		extrn GetDeviceCaps:dword ; CODE XREF: sub_401439+963p
					; DATA XREF: sub_401439+963r
; BOOL __stdcall DeleteObject(HGDIOBJ ho)
		extrn DeleteObject:dword ; CODE	XREF: sub_401000+EDp
					; sub_401000+165p ...
; HBRUSH __stdcall CreateBrushIndirect(const LOGBRUSH *plbrush)
		extrn CreateBrushIndirect:dword	; CODE XREF: sub_401000+CFp
					; sub_403E2A+98p
					; DATA XREF: ...
; HFONT	__stdcall CreateFontIndirectA(const LOGFONTA *lplf)
		extrn CreateFontIndirectA:dword	; CODE XREF: sub_401000+105p
					; sub_401439+9C4p
					; DATA XREF: ...
; int __stdcall	SetBkMode(HDC hdc,int mode)
		extrn SetBkMode:dword	; CODE XREF: sub_401000+126p
					; sub_403E2A+51p
					; DATA XREF: ...
; COLORREF __stdcall SetTextColor(HDC hdc,COLORREF color)
		extrn SetTextColor:dword ; CODE	XREF: sub_401000+130p
					; sub_403E2A+45p
					; DATA XREF: ...
; HGDIOBJ __stdcall SelectObject(HDC hdc,HGDIOBJ h)
		extrn SelectObject:dword ; CODE	XREF: sub_401000+140p
					; sub_401000+160p
					; DATA XREF: ...

;
; Imports from KERNEL32.dll
;
; BOOL __stdcall CloseHandle(HANDLE hObject)
		extrn CloseHandle:dword	; CODE XREF: sub_401439+4DAp
					; sub_401439:loc_401F10p ...
; BOOL __stdcall SetFileTime(HANDLE hFile,const	FILETIME *lpCreationTime,const FILETIME	*lpLastAccessTime,const	FILETIME *lpLastWriteTime)
		extrn SetFileTime:dword	; CODE XREF: sub_401439+4D1p
					; DATA XREF: sub_401439+4D1r
; LONG __stdcall CompareFileTime(const FILETIME	*lpFileTime1,const FILETIME *lpFileTime2)
		extrn CompareFileTime:dword ; CODE XREF: sub_401439+3CDp
					; DATA XREF: sub_401439+3CDr
; DWORD	__stdcall SearchPathA(LPCSTR lpPath,LPCSTR lpFileName,LPCSTR lpExtension,DWORD nBufferLength,LPSTR lpBuffer,LPSTR *lpFilePart)
		extrn SearchPathA:dword	; CODE XREF: sub_401439+33Ep
					; DATA XREF: sub_401439+33Er
; DWORD	__stdcall GetShortPathNameA(LPCSTR lpszLongPath,LPSTR lpszShortPath,DWORD cchBuffer)
		extrn GetShortPathNameA:dword ;	CODE XREF: sub_401439+31Fp
					; sub_405723+5Ep ...
; DWORD	__stdcall GetFullPathNameA(LPCSTR lpFileName,DWORD nBufferLength,LPSTR lpBuffer,LPSTR *lpFilePart)
		extrn GetFullPathNameA:dword ; CODE XREF: sub_401439+2D9p
					; DATA XREF: sub_401439+2D9r
; BOOL __stdcall MoveFileA(LPCSTR lpExistingFileName,LPCSTR lpNewFileName)
		extrn MoveFileA:dword	; CODE XREF: sub_401439+28Ap
					; DATA XREF: sub_401439+28Ar
; BOOL __stdcall SetCurrentDirectoryA(LPCSTR lpPathName)
		extrn SetCurrentDirectoryA:dword ; CODE	XREF: sub_401439+20Fp
					; DATA XREF: sub_401439+20Fr
; DWORD	__stdcall GetFileAttributesA(LPCSTR lpFileName)
		extrn GetFileAttributesA:dword ; CODE XREF: sub_401439+1E0p
					; sub_401439+3F0p ...
; DWORD	__stdcall GetLastError()
		extrn GetLastError:dword ; CODE	XREF: sub_401439+1D2p
					; DATA XREF: sub_401439+1D2r
; BOOL __stdcall CreateDirectoryA(LPCSTR lpPathName,LPSECURITY_ATTRIBUTES lpSecurityAttributes)
		extrn CreateDirectoryA:dword ; CODE XREF: sub_401439+1C8p
					; sub_403132+21p ...
; BOOL __stdcall SetFileAttributesA(LPCSTR lpFileName,DWORD dwFileAttributes)
		extrn SetFileAttributesA:dword ; CODE XREF: sub_401439+189p
					; sub_401439+3FAp ...
; void __stdcall Sleep(DWORD dwMilliseconds)
		extrn Sleep:dword	; CODE XREF: sub_401439+EEp
					; DATA XREF: sub_401439+EEr
; DWORD	__stdcall GetFileSize(HANDLE hFile,LPDWORD lpFileSizeHigh)
		extrn GetFileSize:dword	; CODE XREF: sub_402C37+69p
					; sub_405723+E1p
					; DATA XREF: ...
; DWORD	__stdcall GetModuleFileNameA(HMODULE hModule,LPCH lpFilename,DWORD nSize)
		extrn GetModuleFileNameA:dword ; CODE XREF: sub_402C37+33p
					; start+24Fp
					; DATA XREF: ...
; DWORD	__stdcall GetTickCount()
		extrn GetTickCount:dword ; CODE	XREF: sub_402C37+Ep
					; sub_402C37:loc_402D7Fp ...
; HANDLE __stdcall GetCurrentProcess()
		extrn GetCurrentProcess:dword ;	CODE XREF: start+352p
					; DATA XREF: start+352r
; int __stdcall	lstrcmpiA(LPCSTR lpString1,LPCSTR lpString2)
		extrn lstrcmpiA:dword	; CODE XREF: sub_401439+607p
					; start+261p ...
; void __stdcall ExitProcess(UINT uExitCode)
		extrn ExitProcess:dword	; CODE XREF: start+1ECp start+3B1p
					; DATA XREF: ...
; LPSTR	__stdcall GetCommandLineA()
		extrn GetCommandLineA:dword ; CODE XREF: start+9Cp
					; DATA XREF: start+9Cr
; UINT __stdcall GetWindowsDirectoryA(LPSTR lpBuffer,UINT uSize)
		extrn GetWindowsDirectoryA:dword ; CODE	XREF: start+72p
					; sub_405723+AAp ...
; DWORD	__stdcall GetTempPathA(DWORD nBufferLength,LPSTR lpBuffer)
		extrn GetTempPathA:dword ; CODE	XREF: start+5Dp
					; DATA XREF: start+5Dr
; LPSTR	__stdcall lstrcpynA(LPSTR lpString1,LPCSTR lpString2,int iMaxLength)
		extrn lstrcpynA:dword	; CODE XREF: sub_403ED7+15p
					; sub_4059DB+Dp
					; DATA XREF: ...
; BOOL __stdcall GetDiskFreeSpaceA(LPCSTR lpRootPathName,LPDWORD lpSectorsPerCluster,LPDWORD lpBytesPerSector,LPDWORD lpNumberOfFreeClusters,LPDWORD lpTotalNumberOfClusters)
		extrn GetDiskFreeSpaceA:dword ;	CODE XREF: sub_404201+22Fp
					; DATA XREF: sub_404201+22Fr
; BOOL __stdcall GlobalUnlock(HGLOBAL hMem)
		extrn GlobalUnlock:dword ; CODE	XREF: sub_404EBC+35Ep
					; DATA XREF: sub_404EBC+35Er
; LPVOID __stdcall GlobalLock(HGLOBAL hMem)
		extrn GlobalLock:dword	; CODE XREF: sub_404EBC+32Cp
					; DATA XREF: sub_404EBC+32Cr
; HANDLE __stdcall CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,SIZE_T	dwStackSize,LPTHREAD_START_ROUTINE lpStartAddress,LPVOID lpParameter,DWORD dwCreationFlags,LPDWORD lpThreadId)
		extrn CreateThread:dword ; CODE	XREF: sub_404EBC+1C5p
					; DATA XREF: sub_404EBC+1C5r
; BOOL __stdcall CreateProcessA(LPCSTR lpApplicationName,LPSTR lpCommandLine,LPSECURITY_ATTRIBUTES lpProcessAttributes,LPSECURITY_ATTRIBUTES lpThreadAttributes,BOOL bInheritHandles,DWORD dwCreationFlags,LPVOID lpEnvironment,LPCSTR lpCurrentDirectory,LPSTARTUPINFOA lpStartupInfo,LPPROCESS_INFORMATION lpProcessInformation)
		extrn CreateProcessA:dword ; CODE XREF:	sub_405263+3Cp
					; DATA XREF: sub_405263+3Cr
; BOOL __stdcall RemoveDirectoryA(LPCSTR lpPathName)
		extrn RemoveDirectoryA:dword ; CODE XREF: sub_40531D+19Cp
					; DATA XREF: sub_40531D+19Cr
; HANDLE __stdcall CreateFileA(LPCSTR lpFileName,DWORD dwDesiredAccess,DWORD dwShareMode,LPSECURITY_ATTRIBUTES lpSecurityAttributes,DWORD dwCreationDisposition,DWORD dwFlagsAndAttributes,HANDLE hTemplateFile)
		extrn CreateFileA:dword	; CODE XREF: sub_4056AC+26p
					; sub_405723+CDp
					; DATA XREF: ...
; UINT __stdcall GetTempFileNameA(LPCSTR lpPathName,LPCSTR lpPrefixString,UINT uUnique,LPSTR lpTempFileName)
		extrn GetTempFileNameA:dword ; CODE XREF: sub_4056DB+2Dp
					; DATA XREF: sub_4056DB+2Dr
; int __stdcall	lstrlenA(LPCSTR	lpString)
		extrn __imp_lstrlenA:dword ; DATA XREF:	lstrlenAr
; LPSTR	__stdcall lstrcatA(LPSTR lpString1,LPCSTR lpString2)
		extrn __imp_lstrcatA:dword ; DATA XREF:	lstrcatAr
; UINT __stdcall GetSystemDirectoryA(LPSTR lpBuffer,UINT uSize)
		extrn GetSystemDirectoryA:dword	; CODE XREF: sub_4059FD+10Fp
					; DATA XREF: sub_4059FD+10Fr
; int __stdcall	lstrcmpA(LPCSTR	lpString1,LPCSTR lpString2)
		extrn lstrcmpA:dword	; CODE XREF: sub_401439:loc_401A52p
					; DATA XREF: sub_401439:loc_401A52r
; DWORD	__stdcall GetEnvironmentVariableA(LPCSTR lpName,LPSTR lpBuffer,DWORD nSize)
		extrn GetEnvironmentVariableA:dword ; CODE XREF: sub_401439+636p
					; DATA XREF: sub_401439+636r
; DWORD	__stdcall ExpandEnvironmentStringsA(LPCSTR lpSrc,LPSTR lpDst,DWORD nSize)
		extrn ExpandEnvironmentStringsA:dword ;	CODE XREF: sub_401439:loc_401A77p
					; DATA XREF: sub_401439:loc_401A77r
; HGLOBAL __stdcall GlobalFree(HGLOBAL hMem)
		extrn GlobalFree:dword	; CODE XREF: sub_401439:loc_401BE1p
					; sub_401439+138Dp ...
; HGLOBAL __stdcall GlobalAlloc(UINT uFlags,SIZE_T dwBytes)
		extrn GlobalAlloc:dword	; CODE XREF: sub_401439+7BAp
					; sub_401439+B45p ...
; DWORD	__stdcall WaitForSingleObject(HANDLE hHandle,DWORD dwMilliseconds)
		extrn WaitForSingleObject:dword	; CODE XREF: sub_401439+AA2p
					; DATA XREF: sub_401439+A8Er
; BOOL __stdcall GetExitCodeProcess(HANDLE hProcess,LPDWORD lpExitCode)
		extrn GetExitCodeProcess:dword ; CODE XREF: sub_401439+AB2p
					; DATA XREF: sub_401439+AB2r
; UINT __stdcall SetErrorMode(UINT uMode)
		extrn SetErrorMode:dword ; CODE	XREF: sub_401439+BAEp
					; sub_401439+C62p ...
; HMODULE __stdcall GetModuleHandleA(LPCSTR lpModuleName)
		extrn GetModuleHandleA:dword ; CODE XREF: sub_401439+BD8p
					; start+ABp ...
; HMODULE __stdcall LoadLibraryA(LPCSTR	lpLibFileName)
		extrn LoadLibraryA:dword ; CODE	XREF: sub_401439+BE5p
					; sub_403542+228p ...
; FARPROC __stdcall GetProcAddress(HMODULE hModule,LPCSTR lpProcName)
		extrn GetProcAddress:dword ; CODE XREF:	sub_401439+BF5p
					; sub_405CEE+21p
					; DATA XREF: ...
; BOOL __stdcall FreeLibrary(HMODULE hLibModule)
		extrn FreeLibrary:dword	; CODE XREF: sub_401439+C4Ep
					; DATA XREF: sub_401439+C4Er
; int __stdcall	MultiByteToWideChar(UINT CodePage,DWORD	dwFlags,LPCSTR lpMultiByteStr,int cbMultiByte,LPWSTR lpWideCharStr,int cchWideChar)
		extrn MultiByteToWideChar:dword	; CODE XREF: sub_401439+D7Cp
					; DATA XREF: sub_401439+D7Cr
; BOOL __stdcall WritePrivateProfileStringA(LPCSTR lpAppName,LPCSTR lpKeyName,LPCSTR lpString,LPCSTR lpFileName)
		extrn WritePrivateProfileStringA:dword ; CODE XREF: sub_401439+EA6p
					; DATA XREF: sub_401439+EA6r
; DWORD	__stdcall GetPrivateProfileStringA(LPCSTR lpAppName,LPCSTR lpKeyName,LPCSTR lpDefault,LPSTR lpReturnedString,DWORD nSize,LPCSTR	lpFileName)
		extrn GetPrivateProfileStringA:dword ; CODE XREF: sub_401439+EE1p
					; DATA XREF: sub_401439+EE1r
; BOOL __stdcall WriteFile(HANDLE hFile,LPCVOID	lpBuffer,DWORD nNumberOfBytesToWrite,LPDWORD lpNumberOfBytesWritten,LPOVERLAPPED lpOverlapped)
		extrn WriteFile:dword	; CODE XREF: sub_401439+1140p
					; sub_401439+139Fp ...
; BOOL __stdcall ReadFile(HANDLE hFile,LPVOID lpBuffer,DWORD nNumberOfBytesToRead,LPDWORD lpNumberOfBytesRead,LPOVERLAPPED lpOverlapped)
		extrn ReadFile:dword	; CODE XREF: sub_401439+1197p
					; sub_4030E9+17p ...
; int __stdcall	MulDiv(int nNumber,int nNumerator,int nDenominator)
		extrn MulDiv:dword	; CODE XREF: sub_40136D+78p
					; sub_401439+972p ...
; DWORD	__stdcall SetFilePointer(HANDLE	hFile,LONG lDistanceToMove,PLONG lpDistanceToMoveHigh,DWORD dwMoveMethod)
		extrn SetFilePointer:dword ; CODE XREF:	sub_401439+11FBp
					; sub_401439+122Bp ...
; BOOL __stdcall FindClose(HANDLE hFindFile)
		extrn FindClose:dword	; CODE XREF: sub_401439+124Ep
					; sub_40531D+15Ap ...
; BOOL __stdcall FindNextFileA(HANDLE hFindFile,LPWIN32_FIND_DATAA lpFindFileData)
		extrn FindNextFileA:dword ; CODE XREF: sub_401439+126Bp
					; sub_40531D+149p
					; DATA XREF: ...
; HANDLE __stdcall FindFirstFileA(LPCSTR lpFileName,LPWIN32_FIND_DATAA lpFindFileData)
		extrn FindFirstFileA:dword ; CODE XREF:	sub_401439+1292p
					; sub_40531D+92p ...
; BOOL __stdcall DeleteFileA(LPCSTR lpFileName)
		extrn DeleteFileA:dword	; CODE XREF: sub_401439+13D5p
					; start+96p ...
; BOOL __stdcall CopyFileA(LPCSTR lpExistingFileName,LPCSTR lpNewFileName,BOOL bFailIfExists)
		extrn CopyFileA:dword	; CODE XREF: start+277p
					; DATA XREF: start+277r

;
; Imports from SHELL32.dll
;
; HRESULT __stdcall SHGetMalloc(IMalloc	**ppMalloc)
		extrn SHGetMalloc:dword	; CODE XREF: sub_405238+8p
					; DATA XREF: sub_405238+8r
; BOOL __stdcall SHGetPathFromIDListA(LPCITEMIDLIST pidl,LPSTR pszPath)
		extrn SHGetPathFromIDListA:dword ; CODE	XREF: sub_4044FB+38p
					; sub_4059FD+156p
					; DATA XREF: ...
; LPITEMIDLIST __stdcall SHBrowseForFolderA(LPBROWSEINFOA lpbi)
		extrn SHBrowseForFolderA:dword ; CODE XREF: sub_404201+134p
					; DATA XREF: sub_404201+134r
; DWORD_PTR __stdcall SHGetFileInfoA(LPCSTR pszPath,DWORD dwFileAttributes,SHFILEINFOA *psfi,UINT cbFileInfo,UINT uFlags)
		extrn SHGetFileInfoA:dword ; CODE XREF:	start+3Dp
					; DATA XREF: start+3Dr
; HINSTANCE __stdcall ShellExecuteA(HWND hwnd,LPCSTR lpOperation,LPCSTR	lpFile,LPCSTR lpParameters,LPCSTR lpDirectory,INT nShowCmd)
		extrn ShellExecuteA:dword ; CODE XREF: sub_401439+A4Fp
					; sub_403F0B+20Fp
					; DATA XREF: ...
; int __stdcall	SHFileOperationA(LPSHFILEOPSTRUCTA lpFileOp)
		extrn SHFileOperationA:dword ; CODE XREF: sub_401439+E25p
					; DATA XREF: sub_401439+E25r
; HRESULT __stdcall SHGetSpecialFolderLocation(HWND hwnd,int csidl,LPITEMIDLIST	*ppidl)
		extrn SHGetSpecialFolderLocation:dword ; CODE XREF: sub_4059FD+148p
					; DATA XREF: sub_4059FD+148r

;
; Imports from USER32.dll
;
; BOOL __stdcall ScreenToClient(HWND hWnd,LPPOINT lpPoint)
		extrn ScreenToClient:dword ; CODE XREF:	sub_4038DB+42Cp
					; sub_404643+3Dp
					; DATA XREF: ...
; BOOL __stdcall GetWindowRect(HWND hWnd,LPRECT	lpRect)
		extrn GetWindowRect:dword ; CODE XREF: sub_4038DB+420p
					; sub_404EBC+2A6p
					; DATA XREF: ...
; DWORD	__stdcall SetClassLongA(HWND hWnd,int nIndex,LONG dwNewLong)
		extrn SetClassLongA:dword ; CODE XREF: sub_4038DB+1CFp
					; DATA XREF: sub_4038DB+1CFr
; BOOL __stdcall IsWindowEnabled(HWND hWnd)
		extrn IsWindowEnabled:dword ; CODE XREF: sub_4038DB+B6p
					; sub_4038DB+103p
					; DATA XREF: ...
; BOOL __stdcall SetWindowPos(HWND hWnd,HWND hWndInsertAfter,int X,int Y,int cx,int cy,UINT uFlags)
		extrn SetWindowPos:dword ; CODE	XREF: sub_4038DB+3Cp
					; sub_4038DB+447p
					; DATA XREF: ...
; DWORD	__stdcall GetSysColor(int nIndex)
		extrn GetSysColor:dword	; CODE XREF: sub_403E2A+39p
					; sub_403E2A+64p ...
; LONG __stdcall GetWindowLongA(HWND hWnd,int nIndex)
		extrn GetWindowLongA:dword ; CODE XREF:	sub_403E2A+1Dp
					; sub_4046C3+230p
					; DATA XREF: ...
; HCURSOR __stdcall SetCursor(HCURSOR hCursor)
		extrn SetCursor:dword	; CODE XREF: sub_403F0B+1FCp
					; sub_403F0B+21Fp
					; DATA XREF: ...
; HCURSOR __stdcall LoadCursorA(HINSTANCE hInstance,LPCSTR lpCursorName)
		extrn LoadCursorA:dword	; CODE XREF: sub_403F0B+1F3p
					; sub_403F0B+21Cp
					; DATA XREF: ...
; BOOL __stdcall CheckDlgButton(HWND hDlg,int nIDButton,UINT uCheck)
		extrn CheckDlgButton:dword ; CODE XREF:	sub_403F0B+8Bp
					; DATA XREF: sub_403F0B+8Br
; DWORD	__stdcall GetMessagePos()
		extrn GetMessagePos:dword ; CODE XREF: sub_404643+23p
					; DATA XREF: sub_404643+23r
; HBITMAP __stdcall LoadBitmapA(HINSTANCE hInstance,LPCSTR lpBitmapName)
		extrn LoadBitmapA:dword	; CODE XREF: sub_4046C3+83p
					; DATA XREF: sub_4046C3+83r
; LRESULT __stdcall CallWindowProcA(WNDPROC lpPrevWndFunc,HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam)
		extrn CallWindowProcA:dword ; CODE XREF: sub_404CBD+B5p
					; DATA XREF: sub_404CBD+B5r
; BOOL __stdcall IsWindowVisible(HWND hWnd)
		extrn IsWindowVisible:dword ; CODE XREF: sub_404CBD+47p
					; DATA XREF: sub_404CBD+47r
; BOOL __stdcall CloseClipboard()
		extrn CloseClipboard:dword ; CODE XREF:	sub_404EBC+36Fp
					; DATA XREF: sub_404EBC+36Fr
; HANDLE __stdcall SetClipboardData(UINT uFormat,HANDLE	hMem)
		extrn SetClipboardData:dword ; CODE XREF: sub_404EBC+369p
					; DATA XREF: sub_404EBC+369r
; BOOL __stdcall EmptyClipboard()
		extrn EmptyClipboard:dword ; CODE XREF:	sub_404EBC+319p
					; DATA XREF: sub_404EBC+319r
; BOOL __stdcall OpenClipboard(HWND hWndNewOwner)
		extrn OpenClipboard:dword ; CODE XREF: sub_404EBC+313p
					; DATA XREF: sub_404EBC+313r
; BOOL __stdcall EndDialog(HWND	hDlg,INT_PTR nResult)
		extrn EndDialog:dword	; CODE XREF: sub_4038DB+48Ap
					; DATA XREF: sub_4038DB+48Ar
; BOOL __stdcall AppendMenuA(HMENU hMenu,UINT uFlags,UINT_PTR uIDNewItem,LPCSTR	lpNewItem)
		extrn AppendMenuA:dword	; CODE XREF: sub_404EBC+293p
					; DATA XREF: sub_404EBC+293r
; HMENU	__stdcall CreatePopupMenu()
		extrn CreatePopupMenu:dword ; CODE XREF: sub_404EBC+27Ep
					; DATA XREF: sub_404EBC+27Er
; int __stdcall	GetSystemMetrics(int nIndex)
		extrn GetSystemMetrics:dword ; CODE XREF: sub_404EBC+B3p
					; DATA XREF: sub_404EBC+B3r
; BOOL __stdcall SetDlgItemTextA(HWND hDlg,int nIDDlgItem,LPCSTR lpString)
		extrn __imp_SetDlgItemTextA:dword ; DATA XREF: SetDlgItemTextAr
; UINT __stdcall GetDlgItemTextA(HWND hDlg,int nIDDlgItem,LPSTR	lpString,int cchMax)
		extrn GetDlgItemTextA:dword ; CODE XREF: sub_4052BF+13p
					; DATA XREF: sub_4052BF+13r
; int __stdcall	MessageBoxA(HWND hWnd,LPCSTR lpText,LPCSTR lpCaption,UINT uType)
		extrn MessageBoxA:dword	; CODE XREF: sub_4052DB+39p
					; DATA XREF: sub_4052DB+39r
; LPSTR	__stdcall CharPrevA(LPCSTR lpszStart,LPCSTR lpszCurrent)
		extrn CharPrevA:dword	; CODE XREF: sub_4054E8+Fp
					; sub_40552F+14p ...
; LRESULT __stdcall DispatchMessageA(const MSG *lpMsg)
		extrn DispatchMessageA:dword ; CODE XREF: sub_405D18+17p
					; DATA XREF: sub_405D18+17r
; BOOL __stdcall PeekMessageA(LPMSG lpMsg,HWND hWnd,UINT wMsgFilterMin,UINT wMsgFilterMax,UINT wRemoveMsg)
		extrn PeekMessageA:dword ; CODE	XREF: sub_405D18+27p
					; DATA XREF: sub_405D18+Br
; HWND __stdcall CreateDialogParamA(HINSTANCE hInstance,LPCSTR lpTemplateName,HWND hWndParent,DLGPROC lpDialogFunc,LPARAM dwInitParam)
		extrn CreateDialogParamA:dword ; CODE XREF: sub_402C37+166p
					; sub_4038DB+3F0p
					; DATA XREF: ...
; BOOL __stdcall DestroyWindow(HWND hWnd)
		extrn DestroyWindow:dword ; CODE XREF: sub_402C37+1A1p
					; sub_402C37+21Bp ...
; UINT_PTR __stdcall SetTimer(HWND hWnd,UINT_PTR nIDEvent,UINT uElapse,TIMERPROC lpTimerFunc)
		extrn SetTimer:dword	; CODE XREF: DialogFunc+20p
					; DATA XREF: DialogFunc+20r
; BOOL __stdcall SetWindowTextA(HWND hWnd,LPCSTR lpString)
		extrn SetWindowTextA:dword ; CODE XREF:	DialogFunc+69p
					; sub_40380E+98p ...
; void __stdcall PostQuitMessage(int nExitCode)
		extrn PostQuitMessage:dword ; CODE XREF: sub_401439+76p
					; DATA XREF: sub_401439+76r
; BOOL __stdcall SetForegroundWindow(HWND hWnd)
		extrn SetForegroundWindow:dword	; CODE XREF: sub_401439+FCp
					; DATA XREF: sub_401439+FCr
; int wsprintfA(LPSTR,LPCSTR,...)
		extrn wsprintfA:dword	; CODE XREF: sub_401439+72Ap
					; sub_401439+A21p ...
; LRESULT __stdcall SendMessageTimeoutA(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM	lParam,UINT fuFlags,UINT uTimeout,PDWORD_PTR lpdwResult)
		extrn SendMessageTimeoutA:dword	; CODE XREF: sub_401439+842p
					; DATA XREF: sub_401439+842r
; HWND __stdcall FindWindowExA(HWND hWndParent,HWND hWndChildAfter,LPCSTR lpszClass,LPCSTR lpszWindow)
		extrn FindWindowExA:dword ; CODE XREF: sub_401439+888p
					; DATA XREF: sub_401439+888r
; ATOM __stdcall RegisterClassA(const WNDCLASSA	*lpWndClass)
		extrn RegisterClassA:dword ; CODE XREF:	sub_403542+18Fp
					; sub_403542+267p
					; DATA XREF: ...
; BOOL __stdcall SystemParametersInfoA(UINT uiAction,UINT uiParam,PVOID	pvParam,UINT fWinIni)
		extrn SystemParametersInfoA:dword ; CODE XREF: sub_403542+1A7p
					; DATA XREF: sub_403542+1A7r
; HWND __stdcall CreateWindowExA(DWORD dwExStyle,LPCSTR	lpClassName,LPCSTR lpWindowName,DWORD dwStyle,int X,int	Y,int nWidth,int nHeight,HWND hWndParent,HMENU hMenu,HINSTANCE hInstance,LPVOID	lpParam)
		extrn CreateWindowExA:dword ; CODE XREF: sub_403542+1E0p
					; DATA XREF: sub_403542+1E0r
; BOOL __stdcall GetClassInfoA(HINSTANCE hInstance,LPCSTR lpClassName,LPWNDCLASSA lpWndClass)
		extrn GetClassInfoA:dword ; CODE XREF: sub_403542+248p
					; sub_403542+257p
					; DATA XREF: ...
; INT_PTR __stdcall DialogBoxParamA(HINSTANCE hInstance,LPCSTR lpTemplateName,HWND hWndParent,DLGPROC lpDialogFunc,LPARAM dwInitParam)
		extrn DialogBoxParamA:dword ; CODE XREF: sub_403542+286p
					; DATA XREF: sub_403542+286r
; LPSTR	__stdcall CharNextA(LPCSTR lpsz)
		extrn CharNextA:dword	; CODE XREF: start+D6p	sub_405513+Dp ...
; BOOL __stdcall TrackPopupMenu(HMENU hMenu,UINT uFlags,int x,int y,int	nReserved,HWND hWnd,const RECT *prcRect)
		extrn TrackPopupMenu:dword ; CODE XREF:	sub_404EBC+2C8p
					; DATA XREF: sub_404EBC+2C8r
; BOOL __stdcall ExitWindowsEx(UINT uFlags,DWORD dwReason)
		extrn ExitWindowsEx:dword ; CODE XREF: start+38Ep
					; DATA XREF: start+38Er
; BOOL __stdcall IsWindow(HWND hWnd)
		extrn IsWindow:dword	; CODE XREF: sub_401439+8A9p
					; DATA XREF: sub_401439+8A9r
; HWND __stdcall GetDlgItem(HWND hDlg,int nIDDlgItem)
		extrn GetDlgItem:dword	; CODE XREF: sub_401439+8CFp
					; sub_401439+8FFp ...
; LONG __stdcall SetWindowLongA(HWND hWnd,int nIndex,LONG dwNewLong)
		extrn SetWindowLongA:dword ; CODE XREF:	sub_401439+8EEp
					; sub_4038DB+8Bp ...
; HANDLE __stdcall LoadImageA(HINSTANCE	hInst,LPCSTR name,UINT type,int	cx,int cy,UINT fuLoad)
		extrn LoadImageA:dword	; CODE XREF: sub_401439+92Dp
					; sub_403542+148p
					; DATA XREF: ...
; HDC __stdcall	GetDC(HWND hWnd)
		extrn GetDC:dword	; CODE XREF: sub_401439+95Cp
					; DATA XREF: sub_401439+95Cr
; BOOL __stdcall EnableWindow(HWND hWnd,BOOL bEnable)
		extrn EnableWindow:dword ; CODE	XREF: sub_401439:loc_401E29p
					; sub_4038DB+2F6p ...
; BOOL __stdcall InvalidateRect(HWND hWnd,const	RECT *lpRect,BOOL bErase)
		extrn InvalidateRect:dword ; CODE XREF:	sub_401439+14F0p
					; sub_4046C3+583p
					; DATA XREF: ...
; LRESULT __stdcall SendMessageA(HWND hWnd,UINT	Msg,WPARAM wParam,LPARAM lParam)
		extrn SendMessageA:dword ; CODE	XREF: sub_40136D+88p
					; sub_401439+85Ap ...
; LRESULT __stdcall DefWindowProcA(HWND	hWnd,UINT Msg,WPARAM wParam,LPARAM lParam)
		extrn DefWindowProcA:dword ; CODE XREF:	sub_401000+2Cp
					; DATA XREF: sub_401000+2Cr
; HDC __stdcall	BeginPaint(HWND	hWnd,LPPAINTSTRUCT lpPaint)
		extrn BeginPaint:dword	; CODE XREF: sub_401000+47p
					; DATA XREF: sub_401000+47r
; BOOL __stdcall GetClientRect(HWND hWnd,LPRECT	lpRect)
		extrn GetClientRect:dword ; CODE XREF: sub_401000+5Bp
					; sub_401439+90Cp ...
; int __stdcall	FillRect(HDC hDC,const RECT *lprc,HBRUSH hbr)
		extrn FillRect:dword	; CODE XREF: sub_401000+E4p
					; DATA XREF: sub_401000+E4r
; int __stdcall	DrawTextA(HDC hdc,LPCSTR lpchText,int cchText,LPRECT lprc,UINT format)
		extrn DrawTextA:dword	; CODE XREF: sub_401000+156p
					; DATA XREF: sub_401000+156r
; BOOL __stdcall EndPaint(HWND hWnd,const PAINTSTRUCT *lpPaint)
		extrn EndPaint:dword	; CODE XREF: sub_401000+16Ep
					; DATA XREF: sub_401000+16Er
; BOOL __stdcall ShowWindow(HWND hWnd,int nCmdShow)
		extrn ShowWindow:dword	; CODE XREF: sub_401439+162p
					; sub_401439+177p ...

;
; Imports from VERSION.dll
;
; DWORD	__stdcall GetFileVersionInfoSizeA(LPCSTR lptstrFilename,LPDWORD	lpdwHandle)
		extrn __imp_GetFileVersionInfoSizeA:dword
					; DATA XREF: GetFileVersionInfoSizeAr
; BOOL __stdcall GetFileVersionInfoA(LPCSTR lptstrFilename,DWORD dwHandle,DWORD	dwLen,LPVOID lpData)
		extrn __imp_GetFileVersionInfoA:dword ;	DATA XREF: GetFileVersionInfoAr
; BOOL __stdcall VerQueryValueA(LPCVOID	pBlock,LPCSTR lpSubBlock,LPVOID	*lplpBuffer,PUINT puLen)
		extrn __imp_VerQueryValueA:dword ; DATA	XREF: VerQueryValueAr

;
; Imports from ole32.dll
;
; HRESULT __stdcall OleInitialize(LPVOID pvReserved)
		extrn OleInitialize:dword ; CODE XREF: start+21p
					; StartAddress+10p
					; DATA XREF: ...
; void __stdcall OleUninitialize()
		extrn OleUninitialize:dword ; CODE XREF: start+1D1p
					; StartAddress+5Cp
					; DATA XREF: ...
; HRESULT __stdcall CoCreateInstance(const IID *const rclsid,LPUNKNOWN pUnkOuter,DWORD dwClsContext,const IID *const riid,LPVOID *ppv)
		extrn CoCreateInstance:dword ; CODE XREF: sub_401439+CC0p
					; DATA XREF: sub_401439+CC0r


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

; Segment type:	Pure data
; Segment permissions: Read
_rdata		segment	para public 'DATA' use32
		assume cs:_rdata
		;org 407280h
; char aShlwapi_dll[]
aShlwapi_dll	db 'shlwapi.dll',0      ; DATA XREF: sub_404201+A8o
; char aShautocomplete[]
aShautocomplete	db 'SHAutoComplete',0   ; DATA XREF: sub_404201+A3o
		align 4
; char a_defaultContro[]
a_defaultContro	db '.DEFAULT\Control Panel\International',0 ; DATA XREF: sub_403542+62o
		align 4
; char ValueName[]
ValueName	db 'Locale',0           ; DATA XREF: sub_403542+5Do
		align 4
; char phkResult[]
phkResult	db 'Control Panel\Desktop\ResourceLocale',0 ; DATA XREF: sub_403542+45o
		align 4
; char aGetuserdefault[]
aGetuserdefault	db 'GetUserDefaultUILanguage',0 ; DATA XREF: sub_403542+Do
		align 10h
; char aD[]
aD		db '%d',0               ; DATA XREF: sub_405939+4o
		align 4
byte_407314	db 10h			; DATA XREF: sub_405DB9+3C0r
					; sub_405DB9+3E7r
		db 11h,	12h, 0
		dd 6090708h, 40B050Ah, 20D030Ch, 0F010Eh
dword_407328	dd 40003h, 60005h, 80007h, 0A0009h, 0D000Bh, 11000Fh, 170013h
					; DATA XREF: sub_405DB9+162o
					; sub_405DB9+5C5o
		dd 1F001Bh, 2B0023h, 3B0033h, 530043h, 730063h,	0A30083h
		dd 0E300C3h, 102h, 0
dword_407368	dd 4 dup(0)		; DATA XREF: sub_405DB9+15Do
					; sub_405DB9+5C0o
		dd 2 dup(10001h), 2 dup(20002h), 2 dup(30003h),	2 dup(40004h)
		dd 2 dup(50005h), 700000h, 70h
dword_4073A8	dd 20001h, 40003h, 70005h, 0D0009h, 190011h, 310021h, 610041h
					; DATA XREF: sub_405DB9+197o
					; sub_405DB9+605o
		dd 0C10081h, 1810101h, 3010201h, 6010401h, 0C010801h, 18011001h
		dd 30012001h, 60014001h
dword_4073E4	dd 2 dup(0)		; DATA XREF: sub_405DB9+192o
					; sub_405DB9+600o
		dd 10001h, 20002h, 30003h, 40004h, 50005h, 60006h, 70007h
		dd 80008h, 90009h, 0A000Ah, 0B000Bh, 0C000Ch, 0D000Dh
; IID riid
riid		dd 214EEh		; Data1	; DATA XREF: sub_401439+CB3o
		dw 0			; Data2
		dw 0			; Data3
		db 0C0h, 6 dup(0), 46h	; Data4
; IID rclsid
rclsid		dd 21401h		; Data1	; DATA XREF: sub_401439+CBBo
		dw 0			; Data2
		dw 0			; Data3
		db 0C0h, 6 dup(0), 46h	; Data4
dword_407440	dd 10Bh, 0		; DATA XREF: sub_401439+CD5o
		dd 0C0h, 46000000h, 7564h, 2 dup(0)
		dd 7B6Eh, 7060h, 7670h,	2 dup(0)
		dd 7F48h, 716Ch, 7540h,	2 dup(0)
		dd 7FDAh, 703Ch, 7650h,	2 dup(0)
		dd 8074h, 714Ch, 7504h,	2 dup(0)
		dd 8116h, 7000h, 752Ch,	2 dup(0)
		dd 8162h, 7028h, 7774h,	2 dup(0)
		dd 81A6h, 7270h, 7764h,	2 dup(0)
		dd 81F2h, 7260h, 5 dup(0)
		dd 809Eh, 80B2h, 8090h,	8080h, 8106h, 80F6h, 80E4h, 80D6h
		dd 80C4h, 0
		dd 8138h, 8124h, 80000011h, 814Eh, 0
		dd 7FCCh, 7FBCh, 7FACh,	7F96h, 7F80h, 7F74h, 7F64h, 7F54h
		dd 0
		dd 792Eh, 793Ch, 794Ah,	795Ch, 796Ah, 797Eh, 7992h, 799Eh
		dd 79B6h, 79CCh, 79DCh,	79F0h, 7A06h, 7A0Eh, 7A1Ch, 7A32h
		dd 7A42h, 7922h, 7A62h,	7A70h, 7A82h, 7A9Ah, 7AAAh, 7AB6h
		dd 7ACAh, 7ADAh, 7AE8h,	7AF8h, 7B0Ah, 7B1Eh, 7B2Ch, 7B40h
		dd 7B4Ch, 7B58h, 7916h,	78FCh, 78E0h, 78D2h, 78C4h, 78AEh
		dd 7898h, 7888h, 7874h,	7864h, 7852h, 7844h, 782Eh, 7810h
		dd 77F4h, 77E8h, 77DCh,	7784h, 77CAh, 77BEh, 77AEh, 779Ch
		dd 778Eh, 7A56h, 0
		dd 8048h, 8030h, 801Ah,	8008h, 7FF8h, 7FE4h, 8056h, 0
		dd 7D76h, 7D88h, 7D98h,	7DA8h, 7DBAh, 7DCAh, 7DD8h, 7DEAh
		dd 7DF6h, 7E04h, 7E16h,	7E26h, 7E34h, 7E46h, 7E58h, 7E6Ah
		dd 7E7Eh, 7E90h, 7D6Ah,	7EB2h, 7EC0h, 7ED2h, 7EE6h, 7EF8h
		dd 7F0Ah, 7F18h, 7F24h,	7F38h, 7CDAh, 7CCAh, 7CBEh, 7CACh
		dd 7C9Ah, 7C84h, 7C6Ah,	7C54h, 7C44h, 7D58h, 7D40h, 7D2Eh
		dd 7D1Eh, 7D0Ch, 7D00h,	7EA0h, 7CF0h, 7C38h, 7C2Ah, 7C18h
		dd 7C0Ah, 7C02h, 7BF2h,	7BE0h, 7BD0h, 7BBEh, 7BB0h, 7BA0h
		dd 7B94h, 7B88h, 7B7Ch,	7C76h, 0
		dd 81D8h, 81C2h, 81B0h,	0
		dd 8196h, 8184h, 8170h,	0
		db  6Ah	; j
		db 2, 4Dh, 75h
aLdiv		db 'lDiv',0
		align 2
		db '|',0
aDeletefilea	db 'DeleteFileA',0
		db 'É',0
aFindfirstfilea	db 'FindFirstFileA',0
		align 2
		db 'Ó',0
aFindnextfilea	db 'FindNextFileA',0
		db 'Å',0
aFindclose	db 'FindClose',0
		dw 310h
aSetfilepointer	db 'SetFilePointer',0
		align 4
		db 0ABh	; «
		db 2, 52h, 65h
aAdfile		db 'adFile',0
		align 4
		db  97h	; —
		db 3, 57h, 72h
aItefile	db 'iteFile',0
		db  94h	; ”
		db 1, 47h, 65h
aTprivateprofil	db 'tPrivateProfileStringA',0
		align 10h
		db  9Ch	; œ
		db 3, 57h, 72h
aIteprivateprof	db 'itePrivateProfileStringA',0
		align 2
		dw 26Bh
aMultibytetowid	db 'MultiByteToWideChar',0
aQ		db 'ï',0
aFreelibrary	db 'FreeLibrary',0
		dw 198h
aGetprocaddress	db 'GetProcAddress',0
		align 4
		db  48h	; H
		db 2, 4Ch, 6Fh
aAdlibrarya	db 'adLibraryA',0
		align 4
		db  77h	; w
		db 1, 47h, 65h
aTmodulehandlea	db 'tModuleHandleA',0
		align 4
		db  0Ah
		db 3, 53h, 65h
aTerrormode	db 'tErrorMode',0
		align 4
		db  52h	; R
		db 1, 47h, 65h
aTexitcodeproce	db 'tExitCodeProcess',0
		align 2
		dw 385h
aWaitforsingleo	db 'WaitForSingleObject',0
		db 0EEh	; î
		db 1, 47h, 6Ch
aObalalloc	db 'obalAlloc',0
		dw 1F5h
aGlobalfree	db 'GlobalFree',0
		align 10h
		db '²',0
aExpandenvironm	db 'ExpandEnvironmentStringsA',0
		db  50h	; P
		db 1, 47h, 65h
aTenvironmentva	db 'tEnvironmentVariableA',0
		dw 3B3h
aLstrcmpa	db 'lstrcmpA',0
		align 2
		dw 3B6h
aLstrcmpia	db 'lstrcmpiA',0
a__0		db '.',0
aClosehandle	db 'CloseHandle',0
		dd 65530314h, 6C694674h, 6D695465h, 330065h, 706D6F43h
		dd 46657261h, 54656C69h, 656D69h, 655302D0h, 68637261h
		dd 68746150h, 1AD0041h
aGetshortpathna	db 'GetShortPathNameA',0
		dw 161h
aGetfullpathnam	db 'GetFullPathNameA',0
		align 2
		dw 264h
aMovefilea	db 'MoveFileA',0
		dw 2FFh
aSetcurrentdire	db 'SetCurrentDirectoryA',0
		align 2
		dw 156h
aGetfileattribu	db 'GetFileAttributesA',0
		align 4
		dd 65470169h, 73614C74h, 72724574h, 726Fh, 72430045h, 65746165h
		dd 65726944h, 726F7463h, 4179h,	6553030Eh, 6C694674h, 74744165h
		dd 75626972h, 41736574h, 3490000h, 65656C53h, 15B0070h
		dd 46746547h, 53656C69h, 657A69h, 65470175h, 646F4D74h
		dd 46656C75h, 4E656C69h, 41656D61h, 1D50000h, 54746547h
		dd 436B6369h, 746E756Fh, 13A0000h, 43746547h, 65727275h
		dd 7250746Eh, 7365636Fh, 3D0073h, 79706F43h, 656C6946h
		dd 0AF0041h, 74697845h,	636F7250h, 737365h, 65470108h
		dd 6D6F4374h, 646E616Dh, 656E694Ch, 1E90041h, 57746547h
		dd 6F646E69h, 69447377h, 74636572h, 4179726Fh, 1CB0000h
		dd 54746547h, 50706D65h, 41687461h, 3BC0000h, 7274736Ch
		dd 6E797063h, 1450041h,	44746547h, 466B7369h, 53656572h
		dd 65636170h, 2000041h,	626F6C47h, 6E556C61h, 6B636F6Ch
		dd 1F90000h, 626F6C47h,	6F4C6C61h, 6B63h, 72430069h, 65746165h
		dd 65726854h, 6461h, 72430060h,	65746165h, 636F7250h, 41737365h
		dd 2BA0000h, 6F6D6552h,	69446576h, 74636572h, 4179726Fh
		dd 4D0000h, 61657243h, 69466574h, 41656Ch, 654701C9h, 6D655474h
		dd 6C694670h, 6D614E65h, 4165h,	736C03BFh, 656C7274h, 416Eh
		dd 736C03B0h, 61637274h, 4174h,	654701B9h, 73795374h, 446D6574h
		dd 63657269h, 79726F74h, 454B0041h, 4C454E52h, 642E3233h
		dd 6C6Ch, 6E4500C8h, 69615064h,	746Eh, 724400BCh, 65547761h
		dd 417478h, 694600E2h, 65526C6Ch, 7463h, 654700FFh, 696C4374h
		dd 52746E65h, 746365h, 6542000Dh, 506E6967h, 746E6961h
		dd 8E0000h, 57666544h, 6F646E69h, 6F725077h, 4163h, 6553023Ah
		dd 654D646Eh, 67617373h, 4165h,	6E490193h, 696C6176h, 65746164h
		dd 74636552h, 0C40000h,	62616E45h, 6957656Ch, 776F646Eh
		dd 10C0000h, 44746547h,	1BF0043h, 64616F4Ch, 67616D49h
		dd 4165h, 6553027Fh, 6E695774h,	4C776F64h, 41676E6Fh, 1110000h
		dd 44746547h, 7449676Ch, 6D65h,	734901ADh, 646E6957h, 776Fh
		dd 694600E4h, 6957646Eh, 776F646Eh, 417845h, 6553023Dh
		dd 654D646Eh, 67617373h, 6D695465h, 74756F65h, 2D50041h
		dd 72707377h, 66746E69h, 2910041h, 776F6853h, 646E6957h
		dd 776Fh, 65530256h, 726F4674h,	6F726765h, 57646E75h, 6F646E69h
		dd 2030077h, 74736F50h,	74697551h, 7373654Dh, 656761h
		dd 65530285h, 6E695774h, 54776F64h, 41747865h, 2790000h
		dd 54746553h, 72656D69h, 990000h, 74736544h, 57796F72h
		dd 6F646E69h, 550077h, 61657243h, 69446574h, 676F6C61h
		dd 61726150h, 416Dh, 784500E1h,	69577469h, 776F646Eh, 784573h
		dd 6843002Ah, 654E7261h, 417478h, 6944009Eh, 676F6C61h
		dd 50786F42h, 6D617261h, 0F60041h, 43746547h, 7373616Ch
		dd 6F666E49h, 600041h, 61657243h, 69576574h, 776F646Eh
		dd 417845h, 79530298h, 6D657473h, 61726150h, 6574656Dh
		dd 6E497372h, 416F66h, 65520215h, 74736967h, 6C437265h
		dd 41737361h, 0C60000h,	44646E45h, 6F6C6169h, 2300067h
		dd 65726353h, 6F546E65h, 65696C43h, 746Eh, 65470174h, 6E695774h
		dd 52776F64h, 746365h, 65530246h, 616C4374h, 6F4C7373h
		dd 41676Eh, 734901AEh, 646E6957h, 6E45776Fh, 656C6261h
		dd 2820064h, 57746553h,	6F646E69h, 736F5077h, 15A0000h
		dd 53746547h, 6F437379h, 726F6Ch, 6547016Eh, 6E695774h
		dd 4C776F64h, 41676E6Fh, 24C0000h, 43746553h, 6F737275h
		dd 1B90072h, 64616F4Ch,	73727543h, 41726Fh, 68430038h
		dd 446B6365h, 7542676Ch, 6E6F7474h, 13C0000h, 4D746547h
		dd 61737365h, 6F506567h, 1B70073h, 64616F4Ch, 6D746942h
		dd 417061h, 6143001Bh, 69576C6Ch, 776F646Eh, 636F7250h
		dd 1B10041h, 69577349h,	776F646Eh, 69736956h, 656C62h
		dd 6C430042h, 4365736Fh, 6270696Ch, 6472616Fh, 2490000h
		dd 43746553h, 6270696Ch, 6472616Fh, 61746144h, 0C10000h
		dd 74706D45h, 696C4379h, 616F6270h, 6472h, 704F01F5h, 6C436E65h
		dd 6F627069h, 647261h, 725402A3h, 506B6361h, 7075706Fh
		dd 756E654Dh, 80000h, 65707041h, 654D646Eh, 41756Eh, 7243005Eh
		dd 65746165h, 75706F50h, 6E654D70h, 15D0075h, 53746547h
		dd 65747379h, 74654D6Dh, 73636972h, 2520000h, 44746553h
		dd 7449676Ch, 65546D65h, 417478h, 65470113h, 676C4474h
		dd 6D657449h, 74786554h, 1DE0041h, 7373654Dh, 42656761h
		dd 41786Fh, 6843002Dh, 72507261h, 417665h, 694400A1h, 74617073h
		dd 654D6863h, 67617373h, 4165h,	655001FFh, 654D6B65h, 67617373h
		dd 4165h, 52455355h, 642E3233h,	6C6Ch, 6553020Eh, 7463656Ch
		dd 656A624Fh, 7463h, 6553023Ch,	78655474h, 6C6F4374h, 726Fh
		dd 65530216h, 4D6B4274h, 65646Fh, 7243003Ah, 65746165h
		dd 746E6F46h, 69646E49h, 74636572h, 290041h, 61657243h
		dd 72426574h, 49687375h, 7269646Eh, 746365h, 6544008Fh
		dd 6574656Ch, 656A624Fh, 7463h,	6547016Bh, 76654474h, 43656369h
		dd 737061h, 65530215h, 436B4274h, 726F6C6Fh, 44470000h
		dd 2E323349h, 6C6C64h, 4853009Ah, 656C6946h, 7265704Fh
		dd 6F697461h, 416Eh, 68530107h,	456C6C65h, 75636578h, 416574h
		dd 485300ACh, 46746547h, 49656C69h, 416F666Eh, 790000h
		dd 72424853h, 6573776Fh, 46726F46h, 65646C6Fh, 4172h, 485300BCh
		dd 50746547h, 46687461h, 496D6F72h, 73694C44h, 4174h, 485300B7h
		dd 4D746547h, 6F6C6C61h, 0C30063h, 65474853h, 65705374h
		dd 6C616963h, 646C6F46h, 6F4C7265h, 69746163h, 6E6Fh, 4C454853h
		dd 2E32334Ch, 6C6C64h, 655201D9h, 756E4567h, 6C61566Dh
		dd 416575h, 655201D5h, 756E4567h, 79654B6Dh, 1EC0041h
		dd 51676552h, 79726575h, 756C6156h, 41784565h, 1F90000h
		dd 53676552h, 61567465h, 4565756Ch, 4178h, 655201CDh, 65724367h
		dd 4B657461h, 78457965h, 1C90041h, 43676552h, 65736F6Ch
		dd 79654Bh, 655201D2h, 6C654467h, 56657465h, 65756C61h
		dd 1D00041h, 44676552h,	74656C65h, 79654B65h, 1E20041h
		dd 4F676552h, 4B6E6570h, 78457965h, 44410041h, 49504156h
		dd 642E3233h, 6C6Ch, 6D490038h,	4C656761h, 5F747369h, 74736544h
		dd 796F72h, 6D490034h, 4C656761h, 5F747369h, 4D646441h
		dd 656B7361h, 370064h, 67616D49h, 73694C65h, 72435F74h
		dd 65746165h, 4F430000h, 4C54434Dh, 642E3233h, 6C6Ch, 6F430010h
		dd 61657243h, 6E496574h, 6E617473h, 6563h, 6C4F0104h, 696E5565h
		dd 6974696Eh, 7A696C61h, 0ED0065h, 49656C4Fh, 6974696Eh
		dd 7A696C61h, 6C6F0065h, 2E323365h, 6C6C64h, 6556000Ah
		dd 65755172h, 61567972h, 4165756Ch, 0
aGetfileversion	db 'GetFileVersionInfoA',0
		db    1
		align 2
aGetfileversi_0	db 'GetFileVersionInfoSizeA',0
aVersion_dll	db 'VERSION.dll',0
		align 10h
_rdata		ends

; Section 3. (virtual address 00009000)
; Virtual size			: 000264D4 ( 156884.)
; Section size in file		: 00000400 (   1024.)
; Offset to raw	data for section: 00007200
; Flags	C0000040: Data Readable	Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure data
; Segment permissions: Read/Write
_data		segment	para public 'DATA' use32
		assume cs:_data
		;org 409000h
off_409000	dd offset dword_42F4A0	; DATA XREF: sub_401439:loc_402059o
		dd offset sub_40136D
		dd offset sub_405C17
dword_40900C	dd 6			; DATA XREF: sub_401439+AFr
					; sub_401439+C9w
; char SubBlock[]
SubBlock	db '\',0                ; DATA XREF: sub_401439+B6Fo
					; sub_40531D:loc_405392o ...
		align 4
; char aSS[]
aSS		db '%s %s',0            ; DATA XREF: sub_401439+A15o
		align 4
; char String2[]
String2		db '->',0               ; DATA XREF: sub_401439+270o
		align 10h
; HANDLE hFile
hFile		dd 0FFFFFFFFh		; DATA XREF: sub_402C37+4Ew
					; sub_4030E9+11r ...
		align 8
aTheInstallerYo	db 'The installer you are trying to use is corrupted or incomplete.',0Ah
					; DATA XREF: sub_402C37:loc_402E42o
		db 'This could be the result of a damaged disk, a failed download or '
		db 'a virus.',0Ah
		db 0Ah
		db 'You may want to contact the author of this installer to obtain a '
		db 'new copy.',0Ah
		db 0Ah
		db 'It may be possible to skip this check using the /NCRC command lin'
		db 'e switch',0Ah
		db '(NOT RECOMMENDED).',0
aVerifyingInsta	db 'verifying installer: %d%%',0 ; DATA XREF: sub_402C37+152o
		align 4
aErrorLaunching	db 'Error launching installer',0 ; DATA XREF: sub_402C37+56o
					; start+18Do
		align 4
; char a___D[]
a___D		db '... %d%%',0         ; DATA XREF: sub_402EBD+141o
		align 10h
; char aAu__exe[]
aAu__exe	db 'Au_.exe',0          ; DATA XREF: start+225o
					; start:loc_403450w ...
aSeshutdownpriv	db 'SeShutdownPrivilege',0 ; DATA XREF: start+364o
; char aAdjusttokenpri[]
aAdjusttokenpri	db 'AdjustTokenPrivileges',0 ; DATA XREF: start+32Eo
		align 4
; char aLookupprivileg[]
aLookupprivileg	db 'LookupPrivilegeValueA',0 ; DATA XREF: start+321o
		align 4
; char ProcName[]
ProcName	db 'OpenProcessToken',0 ; DATA XREF: start+316o
		align 10h
; char aAdvapi32_dll[]
aAdvapi32_dll	db 'ADVAPI32.dll',0     ; DATA XREF: start+311o
		align 10h
; char a_?[]
a_?		db ' _?=',0             ; DATA XREF: start+2BEo
		align 4
; char asc_409218[]
asc_409218	db '" ',0               ; DATA XREF: start:loc_40340Fo
		align 4
; char aNsu_tmp[]
aNsu_tmp	db '~nsu.tmp\',0        ; DATA XREF: start:loc_403358o
		align 4
; char aTemp[]
aTemp		db '\Temp',0            ; DATA XREF: start+78o
		align 10h
; char aNsisError[]
aNsisError	db 'NSIS Error',0       ; DATA XREF: start+43o
		align 10h
; char Text[]
Text		db 'Error writing temporary file. Make sure your temp folder is valid'
					; DATA XREF: start+10o
		db '.',0
		align 4
dword_409284	dd 0FFFFFFFFh		; DATA XREF: sub_4038DB+A4r
					; sub_4038DB+120r ...
; DLGPROC lpDialogFunc
lpDialogFunc	dd offset sub_403F0B	; DATA XREF: sub_4038DB+3D4r
		dd offset sub_4046C3
		dd offset sub_404201
		dd offset sub_404EBC
		dd offset sub_4041BA
dword_40929C	dd 0FFFFFFFFh		; DATA XREF: sub_404CBD+2Fw
					; sub_404CBD+6Ar ...
dword_4092A0	dd 6			; DATA XREF: sub_401439+B4w
					; sub_401439:loc_4014F7r ...
; char ClassName[]
ClassName	db 'RichEdit20A',0      ; DATA XREF: sub_403542+240o
					; sub_403542+251w ...
; char LibFileName[]
LibFileName	db 'RichEd20.dll',0     ; DATA XREF: sub_403542+222o
					; sub_403542+22Fw
		align 10h
; char a_exe[]
a_exe		db '.exe',0             ; DATA XREF: sub_403542+EEo
		align 4
; char aKernel32_dll[]
aKernel32_dll	db 'KERNEL32.dll',0     ; DATA XREF: sub_403542+12o
					; sub_404201+1E9o ...
		align 4
; char Operation[]
Operation	db 'open',0             ; DATA XREF: sub_403F0B+207o
		align 10h
; char aGetdiskfreespa[]
aGetdiskfreespa	db 'GetDiskFreeSpaceExA',0 ; DATA XREF: sub_404201:loc_4043E5o
; char aU_USS[]
aU_USS		db '%u.%u%s%s',0        ; DATA XREF: sub_404561+78o
		align 10h
; char a_[]
a_		db '\*.*',0             ; DATA XREF: sub_40531D+62o
		align 4
; char asc_409308[]
asc_409308	db 0Ah			; DATA XREF: sub_405723+182o
		db '[',0
		align 4
; char aRename[]
aRename		db '[Rename]',0Dh,0Ah,0 ; DATA XREF: sub_405723+116o
					; sub_405723+128o
		align 4
; char aWininit_ini[]
aWininit_ini	db '\wininit.ini',0     ; DATA XREF: sub_405723+B0o
		align 4
; char aSS_0[]
aSS_0		db '%s=%s',0Dh,0Ah,0    ; DATA XREF: sub_405723+8Fo
; char aMovefileexa[]
aMovefileexa	db 'MoveFileExA',0      ; DATA XREF: sub_405723+4o
; char aCProgramFiles[]
aCProgramFiles	db 'C:\Program Files',0 ; DATA XREF: sub_4059FD+F7o
		align 10h
; char aProgramfilesdi[]
aProgramfilesdi	db 'ProgramFilesDir',0  ; DATA XREF: sub_4059FD+DAo
; char aSoftwareMicros[]
aSoftwareMicros	db 'Software\Microsoft\Windows\CurrentVersion',0 ; DATA XREF: sub_4059FD+C3o
					; sub_4059FD+DFo
		align 4
; char aCommonfilesdir[]
aCommonfilesdir	db 'CommonFilesDir',0   ; DATA XREF: sub_4059FD+BEo
		align 4
aMicrosoftInter	db '\Microsoft\Internet Explorer\Quick Launch',0 ; DATA XREF: sub_4059FD+ACo
		align 4
; char a?[]
a?		db '*?|<>/":',0         ; DATA XREF: sub_405C17+48o
		align 4
word_4093D4	dw 0			; DATA XREF: sub_405DB9+47Cr
					; sub_405DB9+501r ...
		dw 1
		dd 70003h, 1F000Fh, 7F003Fh, 1FF00FFh, 7FF03FFh, 1FFF0FFFh
		dd 7FFF3FFFh, 0FFFFh
byte_4093F8	db 9			; DATA XREF: sub_405DB9+153o
					; sub_405DB9:loc_405F69r
		align 4
byte_4093FC	db 5			; DATA XREF: sub_405DB9+188o
					; sub_405DB9+1B8r
		align 10h
; LOGFONTA lf
lf		LOGFONTA <?>		; DATA XREF: sub_401439+97Cw
					; sub_401439+9BFo
dword_40943C	dd ?			; DATA XREF: sub_401439+3Ew
					; sub_402A7D+4r ...
; WCHAR	WideCharStr
WideCharStr	dw ?			; DATA XREF: sub_401439+D63o
					; sub_401439+D73w
		align 4
		dd 1FFh	dup(?)
; char FileName[]
FileName	db 400h	dup(?)		; DATA XREF: sub_401439+380o
					; sub_401439+75Fo ...
; CHAR String1
String1		db ?			; DATA XREF: sub_401428o
					; sub_401439+246o ...
		align 4
		dd 0FFh	dup(?)
; BYTE Data
Data		dd ?			; DATA XREF: sub_401439+3AEo
					; sub_401439+DEEo ...
		dd 2FFh	dup(?)
; HGLOBAL hMem
hMem		dd ?			; DATA XREF: sub_401439+73Br
					; sub_401439+76Br ...
		align 8
; LPCSTR dword_40B048
dword_40B048	dd ?			; DATA XREF: DialogFunc+2Cw
					; DialogFunc+57r
		align 10h
dword_40B050	dd ?			; DATA XREF: sub_402EBD+D4w
					; sub_402EBD+E6o
dword_40B054	dd ?			; DATA XREF: sub_402EBD+DAw
dword_40B058	dd ?			; DATA XREF: sub_402EBD+EBw
					; sub_402EBD+106r ...
dword_40B05C	dd ?			; DATA XREF: sub_402EBD+F1w
dword_40B060	dd ?			; DATA XREF: sub_402EBD+86w
		dd 145h	dup(?)
dword_40B578	dd ?			; DATA XREF: sub_402EBD+70w
dword_40B57C	dd ?			; DATA XREF: sub_402EBD+69w
		dd 5A0h	dup(?)
dword_40CC00	dd 2000h dup(?)		; DATA XREF: sub_402EBD+81o
dword_414C00	dd ?			; DATA XREF: sub_402EBD+9Dw
dword_414C04	dd ?			; DATA XREF: sub_402EBD+95w
dword_414C08	dd ?			; DATA XREF: sub_402EBD+90w
		align 10h
; char String[]
String		db 40h dup(?)		; DATA XREF: DialogFunc+52o
; LONG lDistanceToMove
lDistanceToMove	dd ?			; DATA XREF: DialogFunc+36r
					; sub_402C37+10Fr ...
		align 8
dword_414C58	dd 1000h dup(?)		; DATA XREF: sub_402EBD:loc_402F7Ao
					; sub_402EBD:loc_4030A4o
dword_418C58	dd 2000h dup(?)		; DATA XREF: sub_402EBD+28o
dword_420C58	dd 2000h dup(?)		; DATA XREF: sub_402C37+9Ao
					; sub_402C37+BBo ...
; int nDenominator
nDenominator	dd ?			; DATA XREF: DialogFunc+3Cr
					; sub_402C37+71w ...
		align 10h
; char CommandLine[]
CommandLine	dw ?			; DATA XREF: start+20Bo start+217w ...
		align 4
		dd 1FDh	dup(?)
		db 2 dup(?)
dword_42945A	dd ?			; DATA XREF: start+255r
		align 10h
; char ExistingFileName[]
ExistingFileName db 400h dup(?)		; DATA XREF: start+210o
; char pszPath[]
pszPath		db 8 dup(?)		; DATA XREF: start+38o
					; sub_404201:loc_404491o
; HWND dword_429868
dword_429868	dd ?			; DATA XREF: sub_4038DB+B0r
					; sub_4038DB+1BCw ...
dword_42986C	dd ?			; DATA XREF: sub_403ED7+6r
					; sub_403ED7+28w ...
; char RootPathName[]
RootPathName	db 400h	dup(?)		; DATA XREF: sub_404201+1CCo
; INT_PTR nResult
nResult		dd ?			; DATA XREF: sub_4038DB+141w
					; sub_4038DB+15Bw ...
		align 8
; char dword_429C78[]
dword_429C78	dd 100h	dup(?)		; DATA XREF: sub_404201+10Co
dword_42A078	dd ?			; DATA XREF: sub_4038DB+3C1w
					; sub_403F0B+155r ...
		align 10h
; const	CHAR byte_42A080
byte_42A080	db ?			; DATA XREF: sub_404D7E+20o
					; sub_404D7E+C5w
		align 4
		dd 1FFh	dup(?)
; HWND dword_42A880
dword_42A880	dd ?			; DATA XREF: sub_403542+1E6w
					; sub_403542+210r ...
; LPARAM lParam
lParam		dd ?			; DATA XREF: sub_4046C3+B5w
					; sub_4046C3+C4r ...
dword_42A888	dd ?			; DATA XREF: sub_403F0B+115w
					; sub_403F0B+149r ...
dword_42A88C	dd ?			; DATA XREF: sub_4038DB+195w
					; sub_4038DB+1E4w ...
dword_42A890	dd ?			; DATA XREF: sub_404201:loc_40437Aw
					; sub_404201+2D2r ...
; WNDPROC lpPrevWndFunc
lpPrevWndFunc	dd ?			; DATA XREF: sub_4046C3+A5w
					; sub_404CBD+AFr
; HGLOBAL dword_42A898
dword_42A898	dd ?			; DATA XREF: sub_4046C3+78w
					; sub_4046C3+1C4r ...
; HWND dword_42A89C
dword_42A89C	dd ?			; DATA XREF: sub_4038DB+1B0w
					; sub_4038DB:loc_403C20r ...
; const	CHAR byte_42A8A0
byte_42A8A0	db ?			; DATA XREF: sub_403542:loc_403576o
					; sub_403542+54r ...
		align 4
		dd 3FFh	dup(?)
dword_42B8A0	dd ?			; DATA XREF: sub_401439:loc_40290Ar
					; sub_4038DB:loc_403D6Br ...
		align 8
; char byte_42B8A8[]
byte_42B8A8	db 400h	dup(?)		; DATA XREF: sub_40531D:loc_40536Fo
; char byte_42BCA8[]
byte_42BCA8	db 400h	dup(?)		; DATA XREF: sub_4055C8+6o
; char byte_42C0A8[]
byte_42C0A8	db 400h	dup(?)		; DATA XREF: sub_405723+94o
					; sub_405723+13Bo
; char Buffer[]
Buffer		db 400h	dup(?)		; DATA XREF: sub_405723:loc_405793o
; struct _STARTUPINFOA StartupInfo
StartupInfo	_STARTUPINFOA <?>	; DATA XREF: sub_405263+9w
					; sub_405263+2Bo
		align 10h
; struct _WIN32_FIND_DATAA FindFileData
FindFileData	_WIN32_FIND_DATAA <?>	; DATA XREF: sub_405CB0+10o
; char szShortPath[]
szShortPath	dd ?			; DATA XREF: sub_405723+32w
					; sub_405723+43o
		dd 0FFh	dup(?)
dword_42CE30	dd ?			; DATA XREF: sub_405D4B+27w
					; sub_405D4B+5Ar
dword_42CE34	dd ?			; DATA XREF: sub_405D4Br
		dd 0FEh	dup(?)
dword_42D230	dd ?			; DATA XREF: sub_405DB9+18Do
					; sub_405DB9+1C8r
dword_42D234	dd ?			; DATA XREF: sub_405DB9+158o
					; sub_405DB9+1C0r
dword_42D238	dd 8Fh dup(?)		; DATA XREF: sub_405DB9+114o
					; sub_405DB9+148o ...
dword_42D474	dd 71h dup(?)		; DATA XREF: sub_405DB9:loc_405ED2o
dword_42D638	dd 18h dup(?)		; DATA XREF: sub_405DB9+122o
dword_42D698	dd 8 dup(?)		; DATA XREF: sub_405DB9:loc_405EE6o
dword_42D6B8	dd ?			; DATA XREF: sub_405DB9+13Eo
					; sub_4068B0+E8w ...
		dd 11Fh	dup(?)
dword_42DB38	dd 220h	dup(?)		; DATA XREF: sub_405DB9+14Eo
					; sub_405DB9+183o
byte_42E3B8	db ?			; DATA XREF: sub_405DB9:loc_405EBCr
					; sub_405DB9+1AAw
		align 10h
; const	CHAR byte_42E3C0
byte_42E3C0	db ?			; DATA XREF: sub_403542+B0o
					; sub_403542+C4r ...
; char sz[]
sz		db 3 dup(?)		; DATA XREF: sub_403542+D1o
		dd 1FFh	dup(?)
; WNDCLASSA WndClass
WndClass	WNDCLASSA <?>		; DATA XREF: sub_403542+157o
					; sub_403542+17Aw
; HWND dword_42EBE8
dword_42EBE8	dd ?			; DATA XREF: sub_404D7E+68r
					; sub_404EBC+75w
dword_42EBEC	dd ?			; DATA XREF: sub_401439:loc_40149Fw
					; sub_403542+2A3r ...
; HWND hWnd
hWnd		dd ?			; DATA XREF: sub_401439:loc_401587r
					; sub_404EBC+66w ...
dword_42EBF4	dd ?			; DATA XREF: sub_40136D+5Cr
					; sub_404EBC+99w
; HWND dword_42EBF8
dword_42EBF8	dd ?			; DATA XREF: sub_4038DB+67r
					; sub_4038DB+77w ...
dword_42EBFC	dd ?			; DATA XREF: sub_40380E:loc_403883w
					; sub_403F0B+20r ...
dword_42EC00	dd ?			; DATA XREF: sub_403542:loc_4037AFr
					; sub_40380E+4Dw ...
; HWND dword_42EC04
dword_42EC04	dd ?			; DATA XREF: sub_401439:loc_4015A0r
					; sub_404D7E+6r ...
; LONG dwNewLong
dwNewLong	dd ?			; DATA XREF: sub_403542+14Ew
					; sub_4038DB+1C6r
; int nNumber
nNumber		dd ?			; DATA XREF: sub_40136D+56w
					; sub_40136D+72r ...
		dd 4 dup(?)
; char Caption[]
Caption		db 800h	dup(?)		; DATA XREF: sub_401000+150o start+48o ...
; HMODULE hModule
hModule		dd ?			; DATA XREF: sub_402C37+27r
					; sub_402C37+160r ...
; HWND dword_42F424
dword_42F424	dd ?			; DATA XREF: sub_401000+19r
					; sub_401439+9r ...
dword_42F428	dd ?			; DATA XREF: sub_401000+39r
					; sub_4012E2+6r ...
; SIZE_T dwBytes
dwBytes		dd ?			; DATA XREF: sub_401439+1327r
					; sub_402C37:loc_402CB5r ...
dword_42F430	dd ?			; DATA XREF: sub_402C37+242w
					; sub_403542+81r ...
dword_42F434	dd ?			; DATA XREF: sub_402C37+249w
					; start+16Br
		align 10h
dword_42F440	dd ?			; DATA XREF: sub_402C37+273o
					; sub_4038DB+1F6r
dword_42F444	dd ?			; DATA XREF: sub_4038DB+9Er
					; sub_4038DB+25Dr ...
dword_42F448	dd ?			; DATA XREF: sub_40117D+4r
					; sub_4011EF+12r ...
dword_42F44C	dd ?			; DATA XREF: sub_40117D+22r
					; sub_40117D+64r ...
dword_42F450	dd ?			; DATA XREF: sub_40136D+Cr
		align 8
dword_42F458	dd ?			; DATA XREF: sub_403542+ABr
					; sub_403F0B:loc_403F3Cr ...
		align 10h
dword_42F460	dd ?			; DATA XREF: sub_40380E+2Er
dword_42F464	dd ?			; DATA XREF: sub_40380E:loc_403822r
dword_42F468	dd ?			; DATA XREF: sub_401439:loc_401D13r
		dd 3 dup(?)
dword_42F478	dd ?			; DATA XREF: sub_402EBD+36r
		align 10h
dword_42F480	dd ?			; DATA XREF: sub_4046C3+59w
					; sub_4046C3+44Dw
		dd 7 dup(?)
dword_42F4A0	dd ?			; DATA XREF: sub_401439+111w
					; sub_401439+141r ...
dword_42F4A4	dd ?			; DATA XREF: sub_402B61+8r
					; sub_4059FD:loc_405B2Ar
dword_42F4A8	dd ?			; DATA XREF: sub_401439:loc_4018C2w
					; sub_401439+14F9w ...
dword_42F4AC	dd ?			; DATA XREF: sub_4038DB+132r
					; sub_4038DB+2CDr ...
dword_42F4B0	dd ?			; DATA XREF: sub_405723:loc_405895w
dword_42F4B4	dd ?			; DATA XREF: sub_401439:loc_40229Dw
					; start:loc_40346Ar
		align 10h
dword_42F4C0	dd ?			; DATA XREF: sub_402C37+23Bw
					; sub_403542+202r ...
dword_42F4C4	dd ?			; DATA XREF: sub_404201+2A3w
dword_42F4C8	dd ?			; DATA XREF: sub_40380E+56w
					; sub_4052DB:loc_4052F5r
dword_42F4CC	dd ?			; DATA XREF: start:loc_403322w
					; start:loc_403505r
dword_42F4D0	dd ?			; DATA XREF: sub_401439+BB4r start+27w ...
_data		ends

; Section 4. (virtual address 00030000)
; Virtual size			: 00008000 (  32768.)
; Section size in file		: 00000000 (	  0.)
; Offset to raw	data for section: 00000000
; Flags	C0000080: Bss Readable Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Uninitialized
; Segment permissions: Read/Write
_ndata		segment	para public 'BSS' use32
		assume cs:_ndata
		;org 430000h
		assume es:nothing, ss:nothing, ds:_data, fs:nothing, gs:nothing
; char dword_430000[]
dword_430000	dd 1400h dup(?)		; DATA XREF: sub_40136D+2Eo
					; sub_401439+29o ...
; const	CHAR byte_435000
byte_435000	db ?			; DATA XREF: sub_403132+28o
					; start:loc_4031F6o ...
byte_435001	db 3 dup(?)		; DATA XREF: start+C6o
		dd 0FFh	dup(?)
; const	CHAR byte_435400
byte_435400	db ?			; DATA XREF: sub_401439:loc_402721o
					; start+155o ...
		align 4
		dd 0FFh	dup(?)
; char CurrentDirectory[]
CurrentDirectory db 400h dup(?)		; DATA XREF: sub_401439+204o
					; sub_401439:loc_4017CAo ...
; char szStart[]
szStart		db 400h	dup(?)		; DATA XREF: sub_402C37+1Ao
; char dword_436000[]
dword_436000	dd ?			; DATA XREF: sub_403542+28o
					; sub_403542+39w ...
		dd 0FFh	dup(?)
; char PathName[]
PathName	db 400h	dup(?)		; DATA XREF: sub_403132+1o start+52o
; char dword_436800[]
dword_436800	dd 200h	dup(?)		; DATA XREF: sub_40351D+1Ao
; char dword_437000[]
dword_437000	dd 400h	dup(?)		; DATA XREF: sub_4038DB+290o
_ndata		ends


		end start