; Listing generated by Microsoft (R) Optimizing Compiler Version 14.00.50727.762 

	TITLE	d:\Source Code\STGM\engine_math.cpp
	.686P
	.XMM
	include listing.inc
	.model	flat

INCLUDELIB LIBCMTD
INCLUDELIB OLDNAMES

PUBLIC	??_C@_0P@GHFPNOJB@bad?5allocation?$AA@		; `string'
PUBLIC	?Vector3Math@@3PAV_Vector3MathFunctions@@A	; Vector3Math
PUBLIC	?Vector4Math@@3PAV_Vector4MathFunctions@@A	; Vector4Math
PUBLIC	?collate@?$_Locbase@H@std@@2HB			; std::_Locbase<int>::collate
PUBLIC	?ctype@?$_Locbase@H@std@@2HB			; std::_Locbase<int>::ctype
PUBLIC	?monetary@?$_Locbase@H@std@@2HB			; std::_Locbase<int>::monetary
PUBLIC	?numeric@?$_Locbase@H@std@@2HB			; std::_Locbase<int>::numeric
PUBLIC	?time@?$_Locbase@H@std@@2HB			; std::_Locbase<int>::time
PUBLIC	?messages@?$_Locbase@H@std@@2HB			; std::_Locbase<int>::messages
PUBLIC	?all@?$_Locbase@H@std@@2HB			; std::_Locbase<int>::all
PUBLIC	?none@?$_Locbase@H@std@@2HB			; std::_Locbase<int>::none
PUBLIC	?table_size@?$ctype@D@std@@2IB			; std::ctype<char>::table_size
PUBLIC	?skipws@?$_Iosb@H@std@@2W4_Fmtflags@12@B	; std::_Iosb<int>::skipws
PUBLIC	?unitbuf@?$_Iosb@H@std@@2W4_Fmtflags@12@B	; std::_Iosb<int>::unitbuf
PUBLIC	?uppercase@?$_Iosb@H@std@@2W4_Fmtflags@12@B	; std::_Iosb<int>::uppercase
PUBLIC	?showbase@?$_Iosb@H@std@@2W4_Fmtflags@12@B	; std::_Iosb<int>::showbase
PUBLIC	?showpoint@?$_Iosb@H@std@@2W4_Fmtflags@12@B	; std::_Iosb<int>::showpoint
PUBLIC	?showpos@?$_Iosb@H@std@@2W4_Fmtflags@12@B	; std::_Iosb<int>::showpos
PUBLIC	?left@?$_Iosb@H@std@@2W4_Fmtflags@12@B		; std::_Iosb<int>::left
PUBLIC	?right@?$_Iosb@H@std@@2W4_Fmtflags@12@B		; std::_Iosb<int>::right
PUBLIC	?internal@?$_Iosb@H@std@@2W4_Fmtflags@12@B	; std::_Iosb<int>::internal
PUBLIC	?dec@?$_Iosb@H@std@@2W4_Fmtflags@12@B		; std::_Iosb<int>::dec
PUBLIC	?oct@?$_Iosb@H@std@@2W4_Fmtflags@12@B		; std::_Iosb<int>::oct
PUBLIC	?hex@?$_Iosb@H@std@@2W4_Fmtflags@12@B		; std::_Iosb<int>::hex
PUBLIC	?scientific@?$_Iosb@H@std@@2W4_Fmtflags@12@B	; std::_Iosb<int>::scientific
PUBLIC	?fixed@?$_Iosb@H@std@@2W4_Fmtflags@12@B		; std::_Iosb<int>::fixed
PUBLIC	?boolalpha@?$_Iosb@H@std@@2W4_Fmtflags@12@B	; std::_Iosb<int>::boolalpha
PUBLIC	?_Stdio@?$_Iosb@H@std@@2W4_Fmtflags@12@B	; std::_Iosb<int>::_Stdio
PUBLIC	?adjustfield@?$_Iosb@H@std@@2W4_Fmtflags@12@B	; std::_Iosb<int>::adjustfield
PUBLIC	?basefield@?$_Iosb@H@std@@2W4_Fmtflags@12@B	; std::_Iosb<int>::basefield
PUBLIC	?floatfield@?$_Iosb@H@std@@2W4_Fmtflags@12@B	; std::_Iosb<int>::floatfield
PUBLIC	?goodbit@?$_Iosb@H@std@@2W4_Iostate@12@B	; std::_Iosb<int>::goodbit
PUBLIC	?eofbit@?$_Iosb@H@std@@2W4_Iostate@12@B		; std::_Iosb<int>::eofbit
PUBLIC	?failbit@?$_Iosb@H@std@@2W4_Iostate@12@B	; std::_Iosb<int>::failbit
PUBLIC	?badbit@?$_Iosb@H@std@@2W4_Iostate@12@B		; std::_Iosb<int>::badbit
PUBLIC	?_Hardfail@?$_Iosb@H@std@@2W4_Iostate@12@B	; std::_Iosb<int>::_Hardfail
PUBLIC	?in@?$_Iosb@H@std@@2W4_Openmode@12@B		; std::_Iosb<int>::in
PUBLIC	?out@?$_Iosb@H@std@@2W4_Openmode@12@B		; std::_Iosb<int>::out
PUBLIC	?ate@?$_Iosb@H@std@@2W4_Openmode@12@B		; std::_Iosb<int>::ate
PUBLIC	?app@?$_Iosb@H@std@@2W4_Openmode@12@B		; std::_Iosb<int>::app
PUBLIC	?trunc@?$_Iosb@H@std@@2W4_Openmode@12@B		; std::_Iosb<int>::trunc
PUBLIC	?_Nocreate@?$_Iosb@H@std@@2W4_Openmode@12@B	; std::_Iosb<int>::_Nocreate
PUBLIC	?_Noreplace@?$_Iosb@H@std@@2W4_Openmode@12@B	; std::_Iosb<int>::_Noreplace
PUBLIC	?binary@?$_Iosb@H@std@@2W4_Openmode@12@B	; std::_Iosb<int>::binary
PUBLIC	?beg@?$_Iosb@H@std@@2W4_Seekdir@12@B		; std::_Iosb<int>::beg
PUBLIC	?cur@?$_Iosb@H@std@@2W4_Seekdir@12@B		; std::_Iosb<int>::cur
PUBLIC	?end@?$_Iosb@H@std@@2W4_Seekdir@12@B		; std::_Iosb<int>::end
_BSS	SEGMENT
?Vector3Math@@3PAV_Vector3MathFunctions@@A DD 01H DUP (?) ; Vector3Math
?Vector4Math@@3PAV_Vector4MathFunctions@@A DD 01H DUP (?) ; Vector4Math
_BSS	ENDS
;	COMDAT ?end@?$_Iosb@H@std@@2W4_Seekdir@12@B
CONST	SEGMENT
?end@?$_Iosb@H@std@@2W4_Seekdir@12@B DD 02H		; std::_Iosb<int>::end
CONST	ENDS
;	COMDAT ?cur@?$_Iosb@H@std@@2W4_Seekdir@12@B
CONST	SEGMENT
?cur@?$_Iosb@H@std@@2W4_Seekdir@12@B DD 01H		; std::_Iosb<int>::cur
CONST	ENDS
;	COMDAT ?beg@?$_Iosb@H@std@@2W4_Seekdir@12@B
CONST	SEGMENT
?beg@?$_Iosb@H@std@@2W4_Seekdir@12@B DD 00H		; std::_Iosb<int>::beg
CONST	ENDS
;	COMDAT ?binary@?$_Iosb@H@std@@2W4_Openmode@12@B
CONST	SEGMENT
?binary@?$_Iosb@H@std@@2W4_Openmode@12@B DD 020H	; std::_Iosb<int>::binary
CONST	ENDS
;	COMDAT ?_Noreplace@?$_Iosb@H@std@@2W4_Openmode@12@B
CONST	SEGMENT
?_Noreplace@?$_Iosb@H@std@@2W4_Openmode@12@B DD 080H	; std::_Iosb<int>::_Noreplace
CONST	ENDS
;	COMDAT ?_Nocreate@?$_Iosb@H@std@@2W4_Openmode@12@B
CONST	SEGMENT
?_Nocreate@?$_Iosb@H@std@@2W4_Openmode@12@B DD 040H	; std::_Iosb<int>::_Nocreate
CONST	ENDS
;	COMDAT ?trunc@?$_Iosb@H@std@@2W4_Openmode@12@B
CONST	SEGMENT
?trunc@?$_Iosb@H@std@@2W4_Openmode@12@B DD 010H		; std::_Iosb<int>::trunc
CONST	ENDS
;	COMDAT ?app@?$_Iosb@H@std@@2W4_Openmode@12@B
CONST	SEGMENT
?app@?$_Iosb@H@std@@2W4_Openmode@12@B DD 08H		; std::_Iosb<int>::app
CONST	ENDS
;	COMDAT ?ate@?$_Iosb@H@std@@2W4_Openmode@12@B
CONST	SEGMENT
?ate@?$_Iosb@H@std@@2W4_Openmode@12@B DD 04H		; std::_Iosb<int>::ate
CONST	ENDS
;	COMDAT ?out@?$_Iosb@H@std@@2W4_Openmode@12@B
CONST	SEGMENT
?out@?$_Iosb@H@std@@2W4_Openmode@12@B DD 02H		; std::_Iosb<int>::out
CONST	ENDS
;	COMDAT ?in@?$_Iosb@H@std@@2W4_Openmode@12@B
CONST	SEGMENT
?in@?$_Iosb@H@std@@2W4_Openmode@12@B DD 01H		; std::_Iosb<int>::in
CONST	ENDS
;	COMDAT ?_Hardfail@?$_Iosb@H@std@@2W4_Iostate@12@B
CONST	SEGMENT
?_Hardfail@?$_Iosb@H@std@@2W4_Iostate@12@B DD 010H	; std::_Iosb<int>::_Hardfail
CONST	ENDS
;	COMDAT ?badbit@?$_Iosb@H@std@@2W4_Iostate@12@B
CONST	SEGMENT
?badbit@?$_Iosb@H@std@@2W4_Iostate@12@B DD 04H		; std::_Iosb<int>::badbit
CONST	ENDS
;	COMDAT ?failbit@?$_Iosb@H@std@@2W4_Iostate@12@B
CONST	SEGMENT
?failbit@?$_Iosb@H@std@@2W4_Iostate@12@B DD 02H		; std::_Iosb<int>::failbit
CONST	ENDS
;	COMDAT ?eofbit@?$_Iosb@H@std@@2W4_Iostate@12@B
CONST	SEGMENT
?eofbit@?$_Iosb@H@std@@2W4_Iostate@12@B DD 01H		; std::_Iosb<int>::eofbit
CONST	ENDS
;	COMDAT ?goodbit@?$_Iosb@H@std@@2W4_Iostate@12@B
CONST	SEGMENT
?goodbit@?$_Iosb@H@std@@2W4_Iostate@12@B DD 00H		; std::_Iosb<int>::goodbit
CONST	ENDS
;	COMDAT ?floatfield@?$_Iosb@H@std@@2W4_Fmtflags@12@B
CONST	SEGMENT
?floatfield@?$_Iosb@H@std@@2W4_Fmtflags@12@B DD 03000H	; std::_Iosb<int>::floatfield
CONST	ENDS
;	COMDAT ?basefield@?$_Iosb@H@std@@2W4_Fmtflags@12@B
CONST	SEGMENT
?basefield@?$_Iosb@H@std@@2W4_Fmtflags@12@B DD 0e00H	; std::_Iosb<int>::basefield
CONST	ENDS
;	COMDAT ?adjustfield@?$_Iosb@H@std@@2W4_Fmtflags@12@B
CONST	SEGMENT
?adjustfield@?$_Iosb@H@std@@2W4_Fmtflags@12@B DD 01c0H	; std::_Iosb<int>::adjustfield
CONST	ENDS
;	COMDAT ?_Stdio@?$_Iosb@H@std@@2W4_Fmtflags@12@B
CONST	SEGMENT
?_Stdio@?$_Iosb@H@std@@2W4_Fmtflags@12@B DD 08000H	; std::_Iosb<int>::_Stdio
CONST	ENDS
;	COMDAT ?boolalpha@?$_Iosb@H@std@@2W4_Fmtflags@12@B
CONST	SEGMENT
?boolalpha@?$_Iosb@H@std@@2W4_Fmtflags@12@B DD 04000H	; std::_Iosb<int>::boolalpha
CONST	ENDS
;	COMDAT ?fixed@?$_Iosb@H@std@@2W4_Fmtflags@12@B
CONST	SEGMENT
?fixed@?$_Iosb@H@std@@2W4_Fmtflags@12@B DD 02000H	; std::_Iosb<int>::fixed
CONST	ENDS
;	COMDAT ?scientific@?$_Iosb@H@std@@2W4_Fmtflags@12@B
CONST	SEGMENT
?scientific@?$_Iosb@H@std@@2W4_Fmtflags@12@B DD 01000H	; std::_Iosb<int>::scientific
CONST	ENDS
;	COMDAT ?hex@?$_Iosb@H@std@@2W4_Fmtflags@12@B
CONST	SEGMENT
?hex@?$_Iosb@H@std@@2W4_Fmtflags@12@B DD 0800H		; std::_Iosb<int>::hex
CONST	ENDS
;	COMDAT ?oct@?$_Iosb@H@std@@2W4_Fmtflags@12@B
CONST	SEGMENT
?oct@?$_Iosb@H@std@@2W4_Fmtflags@12@B DD 0400H		; std::_Iosb<int>::oct
CONST	ENDS
;	COMDAT ?dec@?$_Iosb@H@std@@2W4_Fmtflags@12@B
CONST	SEGMENT
?dec@?$_Iosb@H@std@@2W4_Fmtflags@12@B DD 0200H		; std::_Iosb<int>::dec
CONST	ENDS
;	COMDAT ?internal@?$_Iosb@H@std@@2W4_Fmtflags@12@B
CONST	SEGMENT
?internal@?$_Iosb@H@std@@2W4_Fmtflags@12@B DD 0100H	; std::_Iosb<int>::internal
CONST	ENDS
;	COMDAT ?right@?$_Iosb@H@std@@2W4_Fmtflags@12@B
CONST	SEGMENT
?right@?$_Iosb@H@std@@2W4_Fmtflags@12@B DD 080H		; std::_Iosb<int>::right
CONST	ENDS
;	COMDAT ?left@?$_Iosb@H@std@@2W4_Fmtflags@12@B
CONST	SEGMENT
?left@?$_Iosb@H@std@@2W4_Fmtflags@12@B DD 040H		; std::_Iosb<int>::left
CONST	ENDS
;	COMDAT ?showpos@?$_Iosb@H@std@@2W4_Fmtflags@12@B
CONST	SEGMENT
?showpos@?$_Iosb@H@std@@2W4_Fmtflags@12@B DD 020H	; std::_Iosb<int>::showpos
CONST	ENDS
;	COMDAT ?showpoint@?$_Iosb@H@std@@2W4_Fmtflags@12@B
CONST	SEGMENT
?showpoint@?$_Iosb@H@std@@2W4_Fmtflags@12@B DD 010H	; std::_Iosb<int>::showpoint
CONST	ENDS
;	COMDAT ?showbase@?$_Iosb@H@std@@2W4_Fmtflags@12@B
CONST	SEGMENT
?showbase@?$_Iosb@H@std@@2W4_Fmtflags@12@B DD 08H	; std::_Iosb<int>::showbase
CONST	ENDS
;	COMDAT ?uppercase@?$_Iosb@H@std@@2W4_Fmtflags@12@B
CONST	SEGMENT
?uppercase@?$_Iosb@H@std@@2W4_Fmtflags@12@B DD 04H	; std::_Iosb<int>::uppercase
CONST	ENDS
;	COMDAT ?unitbuf@?$_Iosb@H@std@@2W4_Fmtflags@12@B
CONST	SEGMENT
?unitbuf@?$_Iosb@H@std@@2W4_Fmtflags@12@B DD 02H	; std::_Iosb<int>::unitbuf
CONST	ENDS
;	COMDAT ?skipws@?$_Iosb@H@std@@2W4_Fmtflags@12@B
CONST	SEGMENT
?skipws@?$_Iosb@H@std@@2W4_Fmtflags@12@B DD 01H		; std::_Iosb<int>::skipws
CONST	ENDS
;	COMDAT ?table_size@?$ctype@D@std@@2IB
CONST	SEGMENT
?table_size@?$ctype@D@std@@2IB DD 0100H			; std::ctype<char>::table_size
CONST	ENDS
;	COMDAT ?none@?$_Locbase@H@std@@2HB
CONST	SEGMENT
?none@?$_Locbase@H@std@@2HB DD 00H			; std::_Locbase<int>::none
CONST	ENDS
;	COMDAT ?all@?$_Locbase@H@std@@2HB
CONST	SEGMENT
?all@?$_Locbase@H@std@@2HB DD 03fH			; std::_Locbase<int>::all
CONST	ENDS
;	COMDAT ?messages@?$_Locbase@H@std@@2HB
CONST	SEGMENT
?messages@?$_Locbase@H@std@@2HB DD 020H			; std::_Locbase<int>::messages
CONST	ENDS
;	COMDAT ?time@?$_Locbase@H@std@@2HB
CONST	SEGMENT
?time@?$_Locbase@H@std@@2HB DD 010H			; std::_Locbase<int>::time
CONST	ENDS
;	COMDAT ?numeric@?$_Locbase@H@std@@2HB
CONST	SEGMENT
?numeric@?$_Locbase@H@std@@2HB DD 08H			; std::_Locbase<int>::numeric
CONST	ENDS
;	COMDAT ?monetary@?$_Locbase@H@std@@2HB
CONST	SEGMENT
?monetary@?$_Locbase@H@std@@2HB DD 04H			; std::_Locbase<int>::monetary
CONST	ENDS
;	COMDAT ?ctype@?$_Locbase@H@std@@2HB
CONST	SEGMENT
?ctype@?$_Locbase@H@std@@2HB DD 02H			; std::_Locbase<int>::ctype
CONST	ENDS
;	COMDAT ?collate@?$_Locbase@H@std@@2HB
CONST	SEGMENT
?collate@?$_Locbase@H@std@@2HB DD 01H			; std::_Locbase<int>::collate
CONST	ENDS
_DATA	SEGMENT
__bad_alloc_Message DD FLAT:??_C@_0P@GHFPNOJB@bad?5allocation?$AA@
_DATA	ENDS
;	COMDAT ??_C@_0P@GHFPNOJB@bad?5allocation?$AA@
CONST	SEGMENT
??_C@_0P@GHFPNOJB@bad?5allocation?$AA@ DB 'bad allocation', 00H ; `string'
CONST	ENDS
PUBLIC	_sqrtf
EXTRN	__fltused:DWORD
; Function compile flags: /Ogtpy
; File c:\program files\microsoft visual studio 8\vc\include\math.h
;	COMDAT _sqrtf
_TEXT	SEGMENT
__X$ = 8						; size = 4
_sqrtf	PROC						; COMDAT

; 423  :         {return ((float)sqrt((double)_X)); }

	fld	DWORD PTR __X$[esp-4]
	fsqrt
	ret	0
_sqrtf	ENDP
_TEXT	ENDS
PUBLIC	?sqrt@@YAMM@Z					; sqrt
; Function compile flags: /Ogtpy
;	COMDAT ?sqrt@@YAMM@Z
_TEXT	SEGMENT
__X$ = 8						; size = 4
?sqrt@@YAMM@Z PROC					; sqrt, COMDAT

; 534  :         {return (sqrtf(_X)); }

	fld	DWORD PTR __X$[esp-4]
	fsqrt
	ret	0
?sqrt@@YAMM@Z ENDP					; sqrt
_TEXT	ENDS
PUBLIC	??_7bad_alloc@std@@6B@				; std::bad_alloc::`vftable'
PUBLIC	??0bad_alloc@std@@QAE@PBD@Z			; std::bad_alloc::bad_alloc
PUBLIC	??_R4bad_alloc@std@@6B@				; std::bad_alloc::`RTTI Complete Object Locator'
PUBLIC	??_R0?AVbad_alloc@std@@@8			; std::bad_alloc `RTTI Type Descriptor'
PUBLIC	??_R3bad_alloc@std@@8				; std::bad_alloc::`RTTI Class Hierarchy Descriptor'
PUBLIC	??_R2bad_alloc@std@@8				; std::bad_alloc::`RTTI Base Class Array'
PUBLIC	??_R1A@?0A@EA@bad_alloc@std@@8			; std::bad_alloc::`RTTI Base Class Descriptor at (0,-1,0,64)'
PUBLIC	??_R1A@?0A@EA@exception@std@@8			; std::exception::`RTTI Base Class Descriptor at (0,-1,0,64)'
PUBLIC	??_R0?AVexception@std@@@8			; std::exception `RTTI Type Descriptor'
PUBLIC	??_R3exception@std@@8				; std::exception::`RTTI Class Hierarchy Descriptor'
PUBLIC	??_R2exception@std@@8				; std::exception::`RTTI Base Class Array'
EXTRN	??0exception@std@@QAE@ABQBD@Z:PROC		; std::exception::exception
EXTRN	??_7type_info@@6B@:QWORD			; type_info::`vftable'
EXTRN	??_Ebad_alloc@std@@UAEPAXI@Z:PROC		; std::bad_alloc::`vector deleting destructor'
EXTRN	?what@exception@std@@UBEPBDXZ:PROC		; std::exception::what
;	COMDAT ??_R2exception@std@@8
; File c:\program files\microsoft visual studio 8\vc\include\exception
rdata$r	SEGMENT
??_R2exception@std@@8 DD FLAT:??_R1A@?0A@EA@exception@std@@8 ; std::exception::`RTTI Base Class Array'
rdata$r	ENDS
;	COMDAT ??_R3exception@std@@8
rdata$r	SEGMENT
??_R3exception@std@@8 DD 00H				; std::exception::`RTTI Class Hierarchy Descriptor'
	DD	00H
	DD	01H
	DD	FLAT:??_R2exception@std@@8
rdata$r	ENDS
;	COMDAT ??_R0?AVexception@std@@@8
_DATA	SEGMENT
??_R0?AVexception@std@@@8 DD FLAT:??_7type_info@@6B@	; std::exception `RTTI Type Descriptor'
	DD	00H
	DB	'.?AVexception@std@@', 00H
_DATA	ENDS
;	COMDAT ??_R1A@?0A@EA@exception@std@@8
rdata$r	SEGMENT
??_R1A@?0A@EA@exception@std@@8 DD FLAT:??_R0?AVexception@std@@@8 ; std::exception::`RTTI Base Class Descriptor at (0,-1,0,64)'
	DD	00H
	DD	00H
	DD	0ffffffffH
	DD	00H
	DD	040H
	DD	FLAT:??_R3exception@std@@8
rdata$r	ENDS
;	COMDAT ??_R1A@?0A@EA@bad_alloc@std@@8
rdata$r	SEGMENT
??_R1A@?0A@EA@bad_alloc@std@@8 DD FLAT:??_R0?AVbad_alloc@std@@@8 ; std::bad_alloc::`RTTI Base Class Descriptor at (0,-1,0,64)'
	DD	01H
	DD	00H
	DD	0ffffffffH
	DD	00H
	DD	040H
	DD	FLAT:??_R3bad_alloc@std@@8
rdata$r	ENDS
;	COMDAT ??_R2bad_alloc@std@@8
rdata$r	SEGMENT
??_R2bad_alloc@std@@8 DD FLAT:??_R1A@?0A@EA@bad_alloc@std@@8 ; std::bad_alloc::`RTTI Base Class Array'
	DD	FLAT:??_R1A@?0A@EA@exception@std@@8
rdata$r	ENDS
;	COMDAT ??_R3bad_alloc@std@@8
rdata$r	SEGMENT
??_R3bad_alloc@std@@8 DD 00H				; std::bad_alloc::`RTTI Class Hierarchy Descriptor'
	DD	00H
	DD	02H
	DD	FLAT:??_R2bad_alloc@std@@8
rdata$r	ENDS
;	COMDAT ??_R0?AVbad_alloc@std@@@8
_DATA	SEGMENT
??_R0?AVbad_alloc@std@@@8 DD FLAT:??_7type_info@@6B@	; std::bad_alloc `RTTI Type Descriptor'
	DD	00H
	DB	'.?AVbad_alloc@std@@', 00H
_DATA	ENDS
;	COMDAT ??_R4bad_alloc@std@@6B@
rdata$r	SEGMENT
??_R4bad_alloc@std@@6B@ DD 00H				; std::bad_alloc::`RTTI Complete Object Locator'
	DD	00H
	DD	00H
	DD	FLAT:??_R0?AVbad_alloc@std@@@8
	DD	FLAT:??_R3bad_alloc@std@@8
rdata$r	ENDS
;	COMDAT ??_7bad_alloc@std@@6B@
CONST	SEGMENT
??_7bad_alloc@std@@6B@ DD FLAT:??_R4bad_alloc@std@@6B@	; std::bad_alloc::`vftable'
	DD	FLAT:??_Ebad_alloc@std@@UAEPAXI@Z
	DD	FLAT:?what@exception@std@@UBEPBDXZ
; Function compile flags: /Ogtpy
CONST	ENDS
;	COMDAT ??0bad_alloc@std@@QAE@PBD@Z
_TEXT	SEGMENT
__Message$ = 8						; size = 4
??0bad_alloc@std@@QAE@PBD@Z PROC			; std::bad_alloc::bad_alloc, COMDAT
; _this$ = ecx

; 371  : 		{	// construct from message string

	push	esi
	lea	eax, DWORD PTR __Message$[esp]
	push	eax
	mov	esi, ecx
	call	??0exception@std@@QAE@ABQBD@Z		; std::exception::exception
	mov	DWORD PTR [esi], OFFSET ??_7bad_alloc@std@@6B@

; 372  : 		}

	mov	eax, esi
	pop	esi
	ret	4
??0bad_alloc@std@@QAE@PBD@Z ENDP			; std::bad_alloc::bad_alloc
_TEXT	ENDS
PUBLIC	??1bad_alloc@std@@UAE@XZ			; std::bad_alloc::~bad_alloc
EXTRN	??1exception@std@@UAE@XZ:PROC			; std::exception::~exception
; Function compile flags: /Ogtpy
;	COMDAT ??1bad_alloc@std@@UAE@XZ
_TEXT	SEGMENT
??1bad_alloc@std@@UAE@XZ PROC				; std::bad_alloc::~bad_alloc, COMDAT
; _this$ = ecx

; 380  : 		{	// destroy the object

	mov	DWORD PTR [ecx], OFFSET ??_7bad_alloc@std@@6B@

; 381  : 		}

	jmp	??1exception@std@@UAE@XZ		; std::exception::~exception
??1bad_alloc@std@@UAE@XZ ENDP				; std::bad_alloc::~bad_alloc
_TEXT	ENDS
EXTRN	??3@YAXPAX@Z:PROC				; operator delete
; Function compile flags: /Ogtpy
;	COMDAT ??_Gbad_alloc@std@@UAEPAXI@Z
_TEXT	SEGMENT
___flags$ = 8						; size = 4
??_Gbad_alloc@std@@UAEPAXI@Z PROC			; std::bad_alloc::`scalar deleting destructor', COMDAT
; _this$ = ecx
	push	esi
	mov	esi, ecx
	mov	DWORD PTR [esi], OFFSET ??_7bad_alloc@std@@6B@
	call	??1exception@std@@UAE@XZ		; std::exception::~exception
	test	BYTE PTR ___flags$[esp], 1
	je	SHORT $LN6@scalar
	push	esi
	call	??3@YAXPAX@Z				; operator delete
	add	esp, 4
$LN6@scalar:
	mov	eax, esi
	pop	esi
	ret	4
??_Gbad_alloc@std@@UAEPAXI@Z ENDP			; std::bad_alloc::`scalar deleting destructor'
_TEXT	ENDS
PUBLIC	??_7_Vector3MathFunctions@@6B@			; _Vector3MathFunctions::`vftable'
PUBLIC	??0_Vector3MathFunctions@@QAE@XZ		; _Vector3MathFunctions::_Vector3MathFunctions
PUBLIC	??_R4_Vector3MathFunctions@@6B@			; _Vector3MathFunctions::`RTTI Complete Object Locator'
PUBLIC	??_R0?AV_Vector3MathFunctions@@@8		; _Vector3MathFunctions `RTTI Type Descriptor'
PUBLIC	??_R3_Vector3MathFunctions@@8			; _Vector3MathFunctions::`RTTI Class Hierarchy Descriptor'
PUBLIC	??_R2_Vector3MathFunctions@@8			; _Vector3MathFunctions::`RTTI Base Class Array'
PUBLIC	??_R1A@?0A@EA@_Vector3MathFunctions@@8		; _Vector3MathFunctions::`RTTI Base Class Descriptor at (0,-1,0,64)'
PUBLIC	?Add@_Vector3MathFunctions@@UAE?AUVector3@@PAU2@0@Z ; _Vector3MathFunctions::Add
PUBLIC	?Add@_Vector3MathFunctions@@UAEXPAUVector3@@00@Z ; _Vector3MathFunctions::Add
PUBLIC	?Subtract@_Vector3MathFunctions@@UAE?AUVector3@@PAU2@0@Z ; _Vector3MathFunctions::Subtract
PUBLIC	?Subtract@_Vector3MathFunctions@@UAEXPAUVector3@@00@Z ; _Vector3MathFunctions::Subtract
PUBLIC	?Multiply@_Vector3MathFunctions@@UAE?AUVector3@@PAU2@PAM@Z ; _Vector3MathFunctions::Multiply
PUBLIC	?Multiply@_Vector3MathFunctions@@UAE?AUVector3@@PAU2@0@Z ; _Vector3MathFunctions::Multiply
PUBLIC	?Multiply@_Vector3MathFunctions@@UAEXPAUVector3@@PAM0@Z ; _Vector3MathFunctions::Multiply
PUBLIC	?Multiply@_Vector3MathFunctions@@UAEXPAUVector3@@00@Z ; _Vector3MathFunctions::Multiply
PUBLIC	?Divide@_Vector3MathFunctions@@UAE?AUVector3@@PAU2@PAM@Z ; _Vector3MathFunctions::Divide
PUBLIC	?Divide@_Vector3MathFunctions@@UAE?AUVector3@@PAU2@0@Z ; _Vector3MathFunctions::Divide
PUBLIC	?Divide@_Vector3MathFunctions@@UAEXPAUVector3@@PAM0@Z ; _Vector3MathFunctions::Divide
PUBLIC	?Divide@_Vector3MathFunctions@@UAEXPAUVector3@@00@Z ; _Vector3MathFunctions::Divide
PUBLIC	?Cross@_Vector3MathFunctions@@UAE?AUVector3@@PAU2@0@Z ; _Vector3MathFunctions::Cross
PUBLIC	?Cross@_Vector3MathFunctions@@UAEXPAUVector3@@00@Z ; _Vector3MathFunctions::Cross
PUBLIC	?Normalize@_Vector3MathFunctions@@UAE?AUVector3@@PAU2@@Z ; _Vector3MathFunctions::Normalize
PUBLIC	?Normalize@_Vector3MathFunctions@@UAEXPAUVector3@@0@Z ; _Vector3MathFunctions::Normalize
PUBLIC	?Dot@_Vector3MathFunctions@@UAEMPAUVector3@@0@Z	; _Vector3MathFunctions::Dot
PUBLIC	?Dot@_Vector3MathFunctions@@UAEXPAUVector3@@0PAM@Z ; _Vector3MathFunctions::Dot
;	COMDAT ??_R1A@?0A@EA@_Vector3MathFunctions@@8
rdata$r	SEGMENT
??_R1A@?0A@EA@_Vector3MathFunctions@@8 DD FLAT:??_R0?AV_Vector3MathFunctions@@@8 ; _Vector3MathFunctions::`RTTI Base Class Descriptor at (0,-1,0,64)'
	DD	00H
	DD	00H
	DD	0ffffffffH
	DD	00H
	DD	040H
	DD	FLAT:??_R3_Vector3MathFunctions@@8
rdata$r	ENDS
;	COMDAT ??_R2_Vector3MathFunctions@@8
rdata$r	SEGMENT
??_R2_Vector3MathFunctions@@8 DD FLAT:??_R1A@?0A@EA@_Vector3MathFunctions@@8 ; _Vector3MathFunctions::`RTTI Base Class Array'
rdata$r	ENDS
;	COMDAT ??_R3_Vector3MathFunctions@@8
rdata$r	SEGMENT
??_R3_Vector3MathFunctions@@8 DD 00H			; _Vector3MathFunctions::`RTTI Class Hierarchy Descriptor'
	DD	00H
	DD	01H
	DD	FLAT:??_R2_Vector3MathFunctions@@8
rdata$r	ENDS
;	COMDAT ??_R0?AV_Vector3MathFunctions@@@8
_DATA	SEGMENT
??_R0?AV_Vector3MathFunctions@@@8 DD FLAT:??_7type_info@@6B@ ; _Vector3MathFunctions `RTTI Type Descriptor'
	DD	00H
	DB	'.?AV_Vector3MathFunctions@@', 00H
_DATA	ENDS
;	COMDAT ??_R4_Vector3MathFunctions@@6B@
rdata$r	SEGMENT
??_R4_Vector3MathFunctions@@6B@ DD 00H			; _Vector3MathFunctions::`RTTI Complete Object Locator'
	DD	00H
	DD	00H
	DD	FLAT:??_R0?AV_Vector3MathFunctions@@@8
	DD	FLAT:??_R3_Vector3MathFunctions@@8
rdata$r	ENDS
;	COMDAT ??_7_Vector3MathFunctions@@6B@
CONST	SEGMENT
??_7_Vector3MathFunctions@@6B@ DD FLAT:??_R4_Vector3MathFunctions@@6B@ ; _Vector3MathFunctions::`vftable'
	DD	FLAT:?Add@_Vector3MathFunctions@@UAE?AUVector3@@PAU2@0@Z
	DD	FLAT:?Add@_Vector3MathFunctions@@UAEXPAUVector3@@00@Z
	DD	FLAT:?Subtract@_Vector3MathFunctions@@UAE?AUVector3@@PAU2@0@Z
	DD	FLAT:?Subtract@_Vector3MathFunctions@@UAEXPAUVector3@@00@Z
	DD	FLAT:?Multiply@_Vector3MathFunctions@@UAE?AUVector3@@PAU2@PAM@Z
	DD	FLAT:?Multiply@_Vector3MathFunctions@@UAE?AUVector3@@PAU2@0@Z
	DD	FLAT:?Multiply@_Vector3MathFunctions@@UAEXPAUVector3@@PAM0@Z
	DD	FLAT:?Multiply@_Vector3MathFunctions@@UAEXPAUVector3@@00@Z
	DD	FLAT:?Divide@_Vector3MathFunctions@@UAE?AUVector3@@PAU2@PAM@Z
	DD	FLAT:?Divide@_Vector3MathFunctions@@UAE?AUVector3@@PAU2@0@Z
	DD	FLAT:?Divide@_Vector3MathFunctions@@UAEXPAUVector3@@PAM0@Z
	DD	FLAT:?Divide@_Vector3MathFunctions@@UAEXPAUVector3@@00@Z
	DD	FLAT:?Cross@_Vector3MathFunctions@@UAE?AUVector3@@PAU2@0@Z
	DD	FLAT:?Cross@_Vector3MathFunctions@@UAEXPAUVector3@@00@Z
	DD	FLAT:?Normalize@_Vector3MathFunctions@@UAE?AUVector3@@PAU2@@Z
	DD	FLAT:?Normalize@_Vector3MathFunctions@@UAEXPAUVector3@@0@Z
	DD	FLAT:?Dot@_Vector3MathFunctions@@UAEMPAUVector3@@0@Z
	DD	FLAT:?Dot@_Vector3MathFunctions@@UAEXPAUVector3@@0PAM@Z
; Function compile flags: /Ogtpy
CONST	ENDS
;	COMDAT ??0_Vector3MathFunctions@@QAE@XZ
_TEXT	SEGMENT
??0_Vector3MathFunctions@@QAE@XZ PROC			; _Vector3MathFunctions::_Vector3MathFunctions, COMDAT
; _this$ = ecx
	mov	eax, ecx
	mov	DWORD PTR [eax], OFFSET ??_7_Vector3MathFunctions@@6B@
	ret	0
??0_Vector3MathFunctions@@QAE@XZ ENDP			; _Vector3MathFunctions::_Vector3MathFunctions
_TEXT	ENDS
PUBLIC	??_7_Vector4MathFunctions@@6B@			; _Vector4MathFunctions::`vftable'
PUBLIC	??0_Vector4MathFunctions@@QAE@XZ		; _Vector4MathFunctions::_Vector4MathFunctions
PUBLIC	??_R4_Vector4MathFunctions@@6B@			; _Vector4MathFunctions::`RTTI Complete Object Locator'
PUBLIC	??_R0?AV_Vector4MathFunctions@@@8		; _Vector4MathFunctions `RTTI Type Descriptor'
PUBLIC	??_R3_Vector4MathFunctions@@8			; _Vector4MathFunctions::`RTTI Class Hierarchy Descriptor'
PUBLIC	??_R2_Vector4MathFunctions@@8			; _Vector4MathFunctions::`RTTI Base Class Array'
PUBLIC	??_R1A@?0A@EA@_Vector4MathFunctions@@8		; _Vector4MathFunctions::`RTTI Base Class Descriptor at (0,-1,0,64)'
PUBLIC	?Add@_Vector4MathFunctions@@UAE?AUVector4@@PAU2@0@Z ; _Vector4MathFunctions::Add
PUBLIC	?Add@_Vector4MathFunctions@@UAEXPAUVector4@@00@Z ; _Vector4MathFunctions::Add
PUBLIC	?Subtract@_Vector4MathFunctions@@UAE?AUVector4@@PAU2@0@Z ; _Vector4MathFunctions::Subtract
PUBLIC	?Subtract@_Vector4MathFunctions@@UAEXPAUVector4@@00@Z ; _Vector4MathFunctions::Subtract
PUBLIC	?Multiply@_Vector4MathFunctions@@UAE?AUVector4@@PAU2@PAM@Z ; _Vector4MathFunctions::Multiply
PUBLIC	?Multiply@_Vector4MathFunctions@@UAE?AUVector4@@PAU2@0@Z ; _Vector4MathFunctions::Multiply
PUBLIC	?Multiply@_Vector4MathFunctions@@UAEXPAUVector4@@PAM0@Z ; _Vector4MathFunctions::Multiply
PUBLIC	?Multiply@_Vector4MathFunctions@@UAEXPAUVector4@@00@Z ; _Vector4MathFunctions::Multiply
PUBLIC	?Divide@_Vector4MathFunctions@@UAE?AUVector4@@PAU2@PAM@Z ; _Vector4MathFunctions::Divide
PUBLIC	?Divide@_Vector4MathFunctions@@UAE?AUVector4@@PAU2@0@Z ; _Vector4MathFunctions::Divide
PUBLIC	?Divide@_Vector4MathFunctions@@UAEXPAUVector4@@PAM0@Z ; _Vector4MathFunctions::Divide
PUBLIC	?Divide@_Vector4MathFunctions@@UAEXPAUVector4@@00@Z ; _Vector4MathFunctions::Divide
;	COMDAT ??_R1A@?0A@EA@_Vector4MathFunctions@@8
rdata$r	SEGMENT
??_R1A@?0A@EA@_Vector4MathFunctions@@8 DD FLAT:??_R0?AV_Vector4MathFunctions@@@8 ; _Vector4MathFunctions::`RTTI Base Class Descriptor at (0,-1,0,64)'
	DD	00H
	DD	00H
	DD	0ffffffffH
	DD	00H
	DD	040H
	DD	FLAT:??_R3_Vector4MathFunctions@@8
rdata$r	ENDS
;	COMDAT ??_R2_Vector4MathFunctions@@8
rdata$r	SEGMENT
??_R2_Vector4MathFunctions@@8 DD FLAT:??_R1A@?0A@EA@_Vector4MathFunctions@@8 ; _Vector4MathFunctions::`RTTI Base Class Array'
rdata$r	ENDS
;	COMDAT ??_R3_Vector4MathFunctions@@8
rdata$r	SEGMENT
??_R3_Vector4MathFunctions@@8 DD 00H			; _Vector4MathFunctions::`RTTI Class Hierarchy Descriptor'
	DD	00H
	DD	01H
	DD	FLAT:??_R2_Vector4MathFunctions@@8
rdata$r	ENDS
;	COMDAT ??_R0?AV_Vector4MathFunctions@@@8
_DATA	SEGMENT
??_R0?AV_Vector4MathFunctions@@@8 DD FLAT:??_7type_info@@6B@ ; _Vector4MathFunctions `RTTI Type Descriptor'
	DD	00H
	DB	'.?AV_Vector4MathFunctions@@', 00H
_DATA	ENDS
;	COMDAT ??_R4_Vector4MathFunctions@@6B@
rdata$r	SEGMENT
??_R4_Vector4MathFunctions@@6B@ DD 00H			; _Vector4MathFunctions::`RTTI Complete Object Locator'
	DD	00H
	DD	00H
	DD	FLAT:??_R0?AV_Vector4MathFunctions@@@8
	DD	FLAT:??_R3_Vector4MathFunctions@@8
rdata$r	ENDS
;	COMDAT ??_7_Vector4MathFunctions@@6B@
CONST	SEGMENT
??_7_Vector4MathFunctions@@6B@ DD FLAT:??_R4_Vector4MathFunctions@@6B@ ; _Vector4MathFunctions::`vftable'
	DD	FLAT:?Add@_Vector4MathFunctions@@UAE?AUVector4@@PAU2@0@Z
	DD	FLAT:?Add@_Vector4MathFunctions@@UAEXPAUVector4@@00@Z
	DD	FLAT:?Subtract@_Vector4MathFunctions@@UAE?AUVector4@@PAU2@0@Z
	DD	FLAT:?Subtract@_Vector4MathFunctions@@UAEXPAUVector4@@00@Z
	DD	FLAT:?Multiply@_Vector4MathFunctions@@UAE?AUVector4@@PAU2@PAM@Z
	DD	FLAT:?Multiply@_Vector4MathFunctions@@UAE?AUVector4@@PAU2@0@Z
	DD	FLAT:?Multiply@_Vector4MathFunctions@@UAEXPAUVector4@@PAM0@Z
	DD	FLAT:?Multiply@_Vector4MathFunctions@@UAEXPAUVector4@@00@Z
	DD	FLAT:?Divide@_Vector4MathFunctions@@UAE?AUVector4@@PAU2@PAM@Z
	DD	FLAT:?Divide@_Vector4MathFunctions@@UAE?AUVector4@@PAU2@0@Z
	DD	FLAT:?Divide@_Vector4MathFunctions@@UAEXPAUVector4@@PAM0@Z
	DD	FLAT:?Divide@_Vector4MathFunctions@@UAEXPAUVector4@@00@Z
; Function compile flags: /Ogtpy
CONST	ENDS
;	COMDAT ??0_Vector4MathFunctions@@QAE@XZ
_TEXT	SEGMENT
??0_Vector4MathFunctions@@QAE@XZ PROC			; _Vector4MathFunctions::_Vector4MathFunctions, COMDAT
; _this$ = ecx
	mov	eax, ecx
	mov	DWORD PTR [eax], OFFSET ??_7_Vector4MathFunctions@@6B@
	ret	0
??0_Vector4MathFunctions@@QAE@XZ ENDP			; _Vector4MathFunctions::_Vector4MathFunctions
_TEXT	ENDS
PUBLIC	??_C@_0BC@EGBNMJNF@?4?2engine_math?4cpp?$AA@	; `string'
PUBLIC	??_C@_0BC@IOGHAFOL@DestroyEngineMath?$AA@	; `string'
PUBLIC	?DestroyEngineMath@@YAXXZ			; DestroyEngineMath
EXTRN	?m_setOwner@@YAXPBDI0@Z:PROC			; m_setOwner
;	COMDAT ??_C@_0BC@EGBNMJNF@?4?2engine_math?4cpp?$AA@
; File d:\source code\stgm\engine_math.cpp
CONST	SEGMENT
??_C@_0BC@EGBNMJNF@?4?2engine_math?4cpp?$AA@ DB '.\engine_math.cpp', 00H ; `string'
CONST	ENDS
;	COMDAT ??_C@_0BC@IOGHAFOL@DestroyEngineMath?$AA@
CONST	SEGMENT
??_C@_0BC@IOGHAFOL@DestroyEngineMath?$AA@ DB 'DestroyEngineMath', 00H ; `string'
; Function compile flags: /Ogtpy
CONST	ENDS
;	COMDAT ?DestroyEngineMath@@YAXXZ
_TEXT	SEGMENT
?DestroyEngineMath@@YAXXZ PROC				; DestroyEngineMath, COMDAT

; 42   : 	delete Vector3Math;

	push	OFFSET ??_C@_0BC@IOGHAFOL@DestroyEngineMath?$AA@
	push	42					; 0000002aH
	push	OFFSET ??_C@_0BC@EGBNMJNF@?4?2engine_math?4cpp?$AA@
	call	?m_setOwner@@YAXPBDI0@Z			; m_setOwner
	mov	eax, DWORD PTR ?Vector3Math@@3PAV_Vector3MathFunctions@@A ; Vector3Math
	push	eax
	call	??3@YAXPAX@Z				; operator delete

; 43   : 	delete Vector4Math;

	push	OFFSET ??_C@_0BC@IOGHAFOL@DestroyEngineMath?$AA@
	push	43					; 0000002bH
	push	OFFSET ??_C@_0BC@EGBNMJNF@?4?2engine_math?4cpp?$AA@
	call	?m_setOwner@@YAXPBDI0@Z			; m_setOwner
	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	push	ecx
	call	??3@YAXPAX@Z				; operator delete
	add	esp, 32					; 00000020H

; 44   : }

	ret	0
?DestroyEngineMath@@YAXXZ ENDP				; DestroyEngineMath
_TEXT	ENDS
PUBLIC	??0Vector2@@QAE@MM@Z				; Vector2::Vector2
; Function compile flags: /Ogtpy
;	COMDAT ??0Vector2@@QAE@MM@Z
_TEXT	SEGMENT
_x$ = 8							; size = 4
_y$ = 12						; size = 4
??0Vector2@@QAE@MM@Z PROC				; Vector2::Vector2, COMDAT
; _this$ = ecx

; 48   : 	X = x;

	fld	DWORD PTR _x$[esp-4]
	mov	eax, ecx
	fstp	DWORD PTR [eax]

; 49   : 	Y = y;

	fld	DWORD PTR _y$[esp-4]
	fstp	DWORD PTR [eax+4]

; 50   : }

	ret	8
??0Vector2@@QAE@MM@Z ENDP				; Vector2::Vector2
_TEXT	ENDS
PUBLIC	??0Vector2@@QAE@XZ				; Vector2::Vector2
; Function compile flags: /Ogtpy
;	COMDAT ??0Vector2@@QAE@XZ
_TEXT	SEGMENT
??0Vector2@@QAE@XZ PROC					; Vector2::Vector2, COMDAT
; _this$ = ecx

; 52   : {

	mov	eax, ecx

; 53   : 	Vector2::Vector2(0,0);
; 54   : }

	ret	0
??0Vector2@@QAE@XZ ENDP					; Vector2::Vector2
_TEXT	ENDS
PUBLIC	??XVector2@@QAEAAV0@AAV0@@Z			; Vector2::operator*=
; Function compile flags: /Ogtpy
;	COMDAT ??XVector2@@QAEAAV0@AAV0@@Z
_TEXT	SEGMENT
_v$ = 8							; size = 4
??XVector2@@QAEAAV0@AAV0@@Z PROC			; Vector2::operator*=, COMDAT
; _this$ = ecx

; 56   : {

	mov	eax, ecx

; 57   : 	this->X *= v.X;

	mov	ecx, DWORD PTR _v$[esp-4]
	fld	DWORD PTR [ecx]
	fmul	DWORD PTR [eax]
	fstp	DWORD PTR [eax]

; 58   : 	this->Y *= v.Y;

	fld	DWORD PTR [ecx+4]
	fmul	DWORD PTR [eax+4]
	fstp	DWORD PTR [eax+4]

; 59   : 	return *this;
; 60   : }

	ret	4
??XVector2@@QAEAAV0@AAV0@@Z ENDP			; Vector2::operator*=
_TEXT	ENDS
PUBLIC	??_0Vector2@@QAEAAV0@AAV0@@Z			; Vector2::operator/=
; Function compile flags: /Ogtpy
;	COMDAT ??_0Vector2@@QAEAAV0@AAV0@@Z
_TEXT	SEGMENT
_v$ = 8							; size = 4
??_0Vector2@@QAEAAV0@AAV0@@Z PROC			; Vector2::operator/=, COMDAT
; _this$ = ecx

; 62   : {

	mov	eax, ecx

; 63   : 	this->X /= v.X;

	fld	DWORD PTR [eax]
	mov	ecx, DWORD PTR _v$[esp-4]
	fdiv	DWORD PTR [ecx]
	fstp	DWORD PTR [eax]

; 64   : 	this->Y /= v.Y;

	fld	DWORD PTR [eax+4]
	fdiv	DWORD PTR [ecx+4]
	fstp	DWORD PTR [eax+4]

; 65   : 	return *this;
; 66   : }

	ret	4
??_0Vector2@@QAEAAV0@AAV0@@Z ENDP			; Vector2::operator/=
_TEXT	ENDS
PUBLIC	??YVector2@@QAEAAV0@AAV0@@Z			; Vector2::operator+=
; Function compile flags: /Ogtpy
;	COMDAT ??YVector2@@QAEAAV0@AAV0@@Z
_TEXT	SEGMENT
_v$ = 8							; size = 4
??YVector2@@QAEAAV0@AAV0@@Z PROC			; Vector2::operator+=, COMDAT
; _this$ = ecx

; 68   : {

	mov	eax, ecx

; 69   : 	this->X += v.X;

	mov	ecx, DWORD PTR _v$[esp-4]
	fld	DWORD PTR [ecx]
	fadd	DWORD PTR [eax]
	fstp	DWORD PTR [eax]

; 70   : 	this->Y += v.Y;

	fld	DWORD PTR [ecx+4]
	fadd	DWORD PTR [eax+4]
	fstp	DWORD PTR [eax+4]

; 71   : 	return *this;
; 72   : }

	ret	4
??YVector2@@QAEAAV0@AAV0@@Z ENDP			; Vector2::operator+=
_TEXT	ENDS
PUBLIC	??ZVector2@@QAEAAV0@AAV0@@Z			; Vector2::operator-=
; Function compile flags: /Ogtpy
;	COMDAT ??ZVector2@@QAEAAV0@AAV0@@Z
_TEXT	SEGMENT
_v$ = 8							; size = 4
??ZVector2@@QAEAAV0@AAV0@@Z PROC			; Vector2::operator-=, COMDAT
; _this$ = ecx

; 74   : {

	mov	eax, ecx

; 75   : 	this->X -= v.X;

	fld	DWORD PTR [eax]
	mov	ecx, DWORD PTR _v$[esp-4]
	fsub	DWORD PTR [ecx]
	fstp	DWORD PTR [eax]

; 76   : 	this->Y -= v.Y;

	fld	DWORD PTR [eax+4]
	fsub	DWORD PTR [ecx+4]
	fstp	DWORD PTR [eax+4]

; 77   : 	return *this;
; 78   : }

	ret	4
??ZVector2@@QAEAAV0@AAV0@@Z ENDP			; Vector2::operator-=
_TEXT	ENDS
PUBLIC	??XVector2@@QAEAAV0@M@Z				; Vector2::operator*=
; Function compile flags: /Ogtpy
;	COMDAT ??XVector2@@QAEAAV0@M@Z
_TEXT	SEGMENT
_f$ = 8							; size = 4
??XVector2@@QAEAAV0@M@Z PROC				; Vector2::operator*=, COMDAT
; _this$ = ecx

; 80   : {

	mov	eax, ecx

; 81   : 	this->X *= f;

	fld	DWORD PTR [eax]
	fld	DWORD PTR _f$[esp-4]
	fmul	ST(1), ST(0)
	fxch	ST(1)
	fstp	DWORD PTR [eax]

; 82   : 	this->Y *= f;

	fmul	DWORD PTR [eax+4]
	fstp	DWORD PTR [eax+4]

; 83   : 	return *this;
; 84   : }

	ret	4
??XVector2@@QAEAAV0@M@Z ENDP				; Vector2::operator*=
_TEXT	ENDS
PUBLIC	__real@3f800000
PUBLIC	??_0Vector2@@QAEAAV0@M@Z			; Vector2::operator/=
;	COMDAT __real@3f800000
CONST	SEGMENT
__real@3f800000 DD 03f800000r			; 1
; Function compile flags: /Ogtpy
CONST	ENDS
;	COMDAT ??_0Vector2@@QAEAAV0@M@Z
_TEXT	SEGMENT
_f$ = 8							; size = 4
??_0Vector2@@QAEAAV0@M@Z PROC				; Vector2::operator/=, COMDAT
; _this$ = ecx

; 87   : 	this->X /= f;

	fld1
	mov	eax, ecx
	fdiv	DWORD PTR _f$[esp-4]
	fld	DWORD PTR [eax]
	fmul	ST(0), ST(1)
	fstp	DWORD PTR [eax]

; 88   : 	this->Y /= f;

	fmul	DWORD PTR [eax+4]
	fstp	DWORD PTR [eax+4]

; 89   : 	return *this;
; 90   : }

	ret	4
??_0Vector2@@QAEAAV0@M@Z ENDP				; Vector2::operator/=
_TEXT	ENDS
PUBLIC	??DVector2@@QBE?AV0@ABV0@@Z			; Vector2::operator*
; Function compile flags: /Ogtpy
;	COMDAT ??DVector2@@QBE?AV0@ABV0@@Z
_TEXT	SEGMENT
___$ReturnUdt$ = 8					; size = 4
_v$ = 12						; size = 4
??DVector2@@QBE?AV0@ABV0@@Z PROC			; Vector2::operator*, COMDAT
; _this$ = ecx

; 93   : 	return Vector2(this->X * v.X,this->Y * v.Y);

	mov	edx, DWORD PTR _v$[esp-4]
	fld	DWORD PTR [edx]
	mov	eax, DWORD PTR ___$ReturnUdt$[esp-4]
	fmul	DWORD PTR [ecx]
	fstp	DWORD PTR [eax]
	fld	DWORD PTR [edx+4]
	fmul	DWORD PTR [ecx+4]
	fstp	DWORD PTR [eax+4]

; 94   : }

	ret	8
??DVector2@@QBE?AV0@ABV0@@Z ENDP			; Vector2::operator*
_TEXT	ENDS
PUBLIC	??KVector2@@QBE?AV0@ABV0@@Z			; Vector2::operator/
; Function compile flags: /Ogtpy
;	COMDAT ??KVector2@@QBE?AV0@ABV0@@Z
_TEXT	SEGMENT
___$ReturnUdt$ = 8					; size = 4
_v$ = 12						; size = 4
??KVector2@@QBE?AV0@ABV0@@Z PROC			; Vector2::operator/, COMDAT
; _this$ = ecx

; 97   : 	return Vector2(this->X / v.X,this->Y / v.Y);

	mov	edx, DWORD PTR _v$[esp-4]
	fld	DWORD PTR [ecx]
	fdiv	DWORD PTR [edx]
	mov	eax, DWORD PTR ___$ReturnUdt$[esp-4]
	fstp	DWORD PTR [eax]
	fld	DWORD PTR [ecx+4]
	fdiv	DWORD PTR [edx+4]
	fstp	DWORD PTR [eax+4]

; 98   : }

	ret	8
??KVector2@@QBE?AV0@ABV0@@Z ENDP			; Vector2::operator/
_TEXT	ENDS
PUBLIC	??HVector2@@QBE?AV0@ABV0@@Z			; Vector2::operator+
; Function compile flags: /Ogtpy
;	COMDAT ??HVector2@@QBE?AV0@ABV0@@Z
_TEXT	SEGMENT
___$ReturnUdt$ = 8					; size = 4
_v$ = 12						; size = 4
??HVector2@@QBE?AV0@ABV0@@Z PROC			; Vector2::operator+, COMDAT
; _this$ = ecx

; 101  : 	return Vector2(this->X + v.X,this->Y + v.Y);

	mov	edx, DWORD PTR _v$[esp-4]
	fld	DWORD PTR [edx]
	mov	eax, DWORD PTR ___$ReturnUdt$[esp-4]
	fadd	DWORD PTR [ecx]
	fstp	DWORD PTR [eax]
	fld	DWORD PTR [edx+4]
	fadd	DWORD PTR [ecx+4]
	fstp	DWORD PTR [eax+4]

; 102  : }

	ret	8
??HVector2@@QBE?AV0@ABV0@@Z ENDP			; Vector2::operator+
_TEXT	ENDS
PUBLIC	??GVector2@@QBE?AV0@ABV0@@Z			; Vector2::operator-
; Function compile flags: /Ogtpy
;	COMDAT ??GVector2@@QBE?AV0@ABV0@@Z
_TEXT	SEGMENT
___$ReturnUdt$ = 8					; size = 4
_v$ = 12						; size = 4
??GVector2@@QBE?AV0@ABV0@@Z PROC			; Vector2::operator-, COMDAT
; _this$ = ecx

; 105  : 	return Vector2(this->X - v.X,this->Y - v.Y);

	mov	edx, DWORD PTR _v$[esp-4]
	fld	DWORD PTR [ecx]
	fsub	DWORD PTR [edx]
	mov	eax, DWORD PTR ___$ReturnUdt$[esp-4]
	fstp	DWORD PTR [eax]
	fld	DWORD PTR [ecx+4]
	fsub	DWORD PTR [edx+4]
	fstp	DWORD PTR [eax+4]

; 106  : }

	ret	8
??GVector2@@QBE?AV0@ABV0@@Z ENDP			; Vector2::operator-
_TEXT	ENDS
PUBLIC	??DVector2@@QBE?AV0@M@Z				; Vector2::operator*
; Function compile flags: /Ogtpy
;	COMDAT ??DVector2@@QBE?AV0@M@Z
_TEXT	SEGMENT
___$ReturnUdt$ = 8					; size = 4
_f$ = 12						; size = 4
??DVector2@@QBE?AV0@M@Z PROC				; Vector2::operator*, COMDAT
; _this$ = ecx

; 109  : 	return Vector2(this->X * f,this->Y * f);

	fld	DWORD PTR [ecx]
	mov	eax, DWORD PTR ___$ReturnUdt$[esp-4]
	fld	DWORD PTR _f$[esp-4]
	fmul	ST(1), ST(0)
	fxch	ST(1)
	fstp	DWORD PTR [eax]
	fmul	DWORD PTR [ecx+4]
	fstp	DWORD PTR [eax+4]

; 110  : }

	ret	8
??DVector2@@QBE?AV0@M@Z ENDP				; Vector2::operator*
_TEXT	ENDS
PUBLIC	??KVector2@@QBE?AV0@M@Z				; Vector2::operator/
; Function compile flags: /Ogtpy
;	COMDAT ??KVector2@@QBE?AV0@M@Z
_TEXT	SEGMENT
___$ReturnUdt$ = 8					; size = 4
_f$ = 12						; size = 4
??KVector2@@QBE?AV0@M@Z PROC				; Vector2::operator/, COMDAT
; _this$ = ecx

; 113  : 	return Vector2(this->X / f,this->Y / f);

	fld1
	mov	eax, DWORD PTR ___$ReturnUdt$[esp-4]
	fdiv	DWORD PTR _f$[esp-4]
	fld	DWORD PTR [ecx]
	fmul	ST(0), ST(1)
	fstp	DWORD PTR [eax]
	fmul	DWORD PTR [ecx+4]
	fstp	DWORD PTR [eax+4]

; 114  : }

	ret	8
??KVector2@@QBE?AV0@M@Z ENDP				; Vector2::operator/
_TEXT	ENDS
PUBLIC	??0Vector3@@QAE@MMM@Z				; Vector3::Vector3
; Function compile flags: /Ogtpy
;	COMDAT ??0Vector3@@QAE@MMM@Z
_TEXT	SEGMENT
_x$ = 8							; size = 4
_y$ = 12						; size = 4
_z$ = 16						; size = 4
??0Vector3@@QAE@MMM@Z PROC				; Vector3::Vector3, COMDAT
; _this$ = ecx

; 118  : 	X = x;

	fld	DWORD PTR _x$[esp-4]
	mov	eax, ecx
	fstp	DWORD PTR [eax]

; 119  : 	Y = y;

	fld	DWORD PTR _y$[esp-4]
	fstp	DWORD PTR [eax+4]

; 120  : 	Z = z;

	fld	DWORD PTR _z$[esp-4]
	fstp	DWORD PTR [eax+8]

; 121  : }

	ret	12					; 0000000cH
??0Vector3@@QAE@MMM@Z ENDP				; Vector3::Vector3
_TEXT	ENDS
PUBLIC	??XVector3@@QAEAAU0@AAU0@@Z			; Vector3::operator*=
; Function compile flags: /Ogtpy
;	COMDAT ??XVector3@@QAEAAU0@AAU0@@Z
_TEXT	SEGMENT
_v$ = 8							; size = 4
??XVector3@@QAEAAU0@AAU0@@Z PROC			; Vector3::operator*=, COMDAT
; _this$ = ecx

; 124  :  	Vector3Math->Multiply(this,&v,this);

	mov	edx, DWORD PTR _v$[esp-4]
	push	esi
	mov	esi, ecx
	mov	ecx, DWORD PTR ?Vector3Math@@3PAV_Vector3MathFunctions@@A ; Vector3Math
	mov	eax, DWORD PTR [ecx]
	mov	eax, DWORD PTR [eax+28]
	push	esi
	push	edx
	push	esi
	call	eax

; 125  : 	return *this;

	mov	eax, esi
	pop	esi

; 126  : }

	ret	4
??XVector3@@QAEAAU0@AAU0@@Z ENDP			; Vector3::operator*=
_TEXT	ENDS
PUBLIC	??_0Vector3@@QAEAAU0@AAU0@@Z			; Vector3::operator/=
; Function compile flags: /Ogtpy
;	COMDAT ??_0Vector3@@QAEAAU0@AAU0@@Z
_TEXT	SEGMENT
_v$ = 8							; size = 4
??_0Vector3@@QAEAAU0@AAU0@@Z PROC			; Vector3::operator/=, COMDAT
; _this$ = ecx

; 129  : 	Vector3Math->Divide(this,&v,this);

	mov	edx, DWORD PTR _v$[esp-4]
	push	esi
	mov	esi, ecx
	mov	ecx, DWORD PTR ?Vector3Math@@3PAV_Vector3MathFunctions@@A ; Vector3Math
	mov	eax, DWORD PTR [ecx]
	mov	eax, DWORD PTR [eax+44]
	push	esi
	push	edx
	push	esi
	call	eax

; 130  : 	return *this;

	mov	eax, esi
	pop	esi

; 131  : }

	ret	4
??_0Vector3@@QAEAAU0@AAU0@@Z ENDP			; Vector3::operator/=
_TEXT	ENDS
PUBLIC	??YVector3@@QAEAAU0@AAU0@@Z			; Vector3::operator+=
; Function compile flags: /Ogtpy
;	COMDAT ??YVector3@@QAEAAU0@AAU0@@Z
_TEXT	SEGMENT
_v$ = 8							; size = 4
??YVector3@@QAEAAU0@AAU0@@Z PROC			; Vector3::operator+=, COMDAT
; _this$ = ecx

; 134  : 	Vector3Math->Add(this,&v,this);

	mov	edx, DWORD PTR _v$[esp-4]
	push	esi
	mov	esi, ecx
	mov	ecx, DWORD PTR ?Vector3Math@@3PAV_Vector3MathFunctions@@A ; Vector3Math
	mov	eax, DWORD PTR [ecx]
	mov	eax, DWORD PTR [eax+4]
	push	esi
	push	edx
	push	esi
	call	eax

; 135  : 	return *this;

	mov	eax, esi
	pop	esi

; 136  : }

	ret	4
??YVector3@@QAEAAU0@AAU0@@Z ENDP			; Vector3::operator+=
_TEXT	ENDS
PUBLIC	??ZVector3@@QAEAAU0@AAU0@@Z			; Vector3::operator-=
; Function compile flags: /Ogtpy
;	COMDAT ??ZVector3@@QAEAAU0@AAU0@@Z
_TEXT	SEGMENT
_v$ = 8							; size = 4
??ZVector3@@QAEAAU0@AAU0@@Z PROC			; Vector3::operator-=, COMDAT
; _this$ = ecx

; 139  : 	Vector3Math->Subtract(this,&v,this);

	mov	edx, DWORD PTR _v$[esp-4]
	push	esi
	mov	esi, ecx
	mov	ecx, DWORD PTR ?Vector3Math@@3PAV_Vector3MathFunctions@@A ; Vector3Math
	mov	eax, DWORD PTR [ecx]
	mov	eax, DWORD PTR [eax+12]
	push	esi
	push	edx
	push	esi
	call	eax

; 140  : 	return *this;

	mov	eax, esi
	pop	esi

; 141  : }

	ret	4
??ZVector3@@QAEAAU0@AAU0@@Z ENDP			; Vector3::operator-=
_TEXT	ENDS
PUBLIC	??XVector3@@QAEAAU0@M@Z				; Vector3::operator*=
; Function compile flags: /Ogtpy
;	COMDAT ??XVector3@@QAEAAU0@M@Z
_TEXT	SEGMENT
_f$ = 8							; size = 4
??XVector3@@QAEAAU0@M@Z PROC				; Vector3::operator*=, COMDAT
; _this$ = ecx

; 143  : {

	push	esi
	mov	esi, ecx

; 144  : 	Vector3Math->Multiply(this,&f,this);

	mov	ecx, DWORD PTR ?Vector3Math@@3PAV_Vector3MathFunctions@@A ; Vector3Math
	mov	eax, DWORD PTR [ecx]
	mov	eax, DWORD PTR [eax+24]
	push	esi
	lea	edx, DWORD PTR _f$[esp+4]
	push	edx
	push	esi
	call	eax

; 145  : 	return *this;

	mov	eax, esi
	pop	esi

; 146  : }

	ret	4
??XVector3@@QAEAAU0@M@Z ENDP				; Vector3::operator*=
_TEXT	ENDS
PUBLIC	??_0Vector3@@QAEAAU0@M@Z			; Vector3::operator/=
; Function compile flags: /Ogtpy
;	COMDAT ??_0Vector3@@QAEAAU0@M@Z
_TEXT	SEGMENT
_f$ = 8							; size = 4
??_0Vector3@@QAEAAU0@M@Z PROC				; Vector3::operator/=, COMDAT
; _this$ = ecx

; 148  : {

	push	esi
	mov	esi, ecx

; 149  :  	Vector3Math->Divide(this,&f,this);

	mov	ecx, DWORD PTR ?Vector3Math@@3PAV_Vector3MathFunctions@@A ; Vector3Math
	mov	eax, DWORD PTR [ecx]
	mov	eax, DWORD PTR [eax+40]
	push	esi
	lea	edx, DWORD PTR _f$[esp+4]
	push	edx
	push	esi
	call	eax

; 150  : 	return *this;

	mov	eax, esi
	pop	esi

; 151  : }

	ret	4
??_0Vector3@@QAEAAU0@M@Z ENDP				; Vector3::operator/=
_TEXT	ENDS
PUBLIC	??DVector3@@QBE?AU0@ABU0@@Z			; Vector3::operator*
; Function compile flags: /Ogtpy
;	COMDAT ??DVector3@@QBE?AU0@ABU0@@Z
_TEXT	SEGMENT
___$ReturnUdt$ = 8					; size = 4
_v$ = 12						; size = 4
??DVector3@@QBE?AU0@ABU0@@Z PROC			; Vector3::operator*, COMDAT
; _this$ = ecx

; 153  : {

	push	esi

; 154  : 	return Vector3Math->Multiply((Vector3*)this,(Vector3*)&v);

	mov	esi, DWORD PTR _v$[esp]
	mov	eax, ecx
	mov	ecx, DWORD PTR ?Vector3Math@@3PAV_Vector3MathFunctions@@A ; Vector3Math
	mov	edx, DWORD PTR [ecx]
	push	esi
	mov	esi, DWORD PTR ___$ReturnUdt$[esp+4]
	push	eax
	mov	eax, DWORD PTR [edx+20]
	push	esi
	call	eax
	mov	eax, esi
	pop	esi

; 155  : }

	ret	8
??DVector3@@QBE?AU0@ABU0@@Z ENDP			; Vector3::operator*
_TEXT	ENDS
PUBLIC	??KVector3@@QBE?AU0@ABU0@@Z			; Vector3::operator/
; Function compile flags: /Ogtpy
;	COMDAT ??KVector3@@QBE?AU0@ABU0@@Z
_TEXT	SEGMENT
___$ReturnUdt$ = 8					; size = 4
_v$ = 12						; size = 4
??KVector3@@QBE?AU0@ABU0@@Z PROC			; Vector3::operator/, COMDAT
; _this$ = ecx

; 157  : {

	push	esi

; 158  : 	return Vector3Math->Divide((Vector3*)this,(Vector3*)&v);	

	mov	esi, DWORD PTR _v$[esp]
	mov	eax, ecx
	mov	ecx, DWORD PTR ?Vector3Math@@3PAV_Vector3MathFunctions@@A ; Vector3Math
	mov	edx, DWORD PTR [ecx]
	push	esi
	mov	esi, DWORD PTR ___$ReturnUdt$[esp+4]
	push	eax
	mov	eax, DWORD PTR [edx+36]
	push	esi
	call	eax
	mov	eax, esi
	pop	esi

; 159  : }

	ret	8
??KVector3@@QBE?AU0@ABU0@@Z ENDP			; Vector3::operator/
_TEXT	ENDS
PUBLIC	??HVector3@@QBE?AU0@ABU0@@Z			; Vector3::operator+
; Function compile flags: /Ogtpy
;	COMDAT ??HVector3@@QBE?AU0@ABU0@@Z
_TEXT	SEGMENT
___$ReturnUdt$ = 8					; size = 4
_v$ = 12						; size = 4
??HVector3@@QBE?AU0@ABU0@@Z PROC			; Vector3::operator+, COMDAT
; _this$ = ecx

; 161  : {

	push	esi

; 162  : 	return Vector3Math->Add((Vector3*)this,(Vector3*)&v);

	mov	esi, DWORD PTR _v$[esp]
	mov	eax, ecx
	mov	ecx, DWORD PTR ?Vector3Math@@3PAV_Vector3MathFunctions@@A ; Vector3Math
	mov	edx, DWORD PTR [ecx]
	push	esi
	mov	esi, DWORD PTR ___$ReturnUdt$[esp+4]
	push	eax
	mov	eax, DWORD PTR [edx]
	push	esi
	call	eax
	mov	eax, esi
	pop	esi

; 163  : }

	ret	8
??HVector3@@QBE?AU0@ABU0@@Z ENDP			; Vector3::operator+
_TEXT	ENDS
PUBLIC	??GVector3@@QBE?AU0@ABU0@@Z			; Vector3::operator-
; Function compile flags: /Ogtpy
;	COMDAT ??GVector3@@QBE?AU0@ABU0@@Z
_TEXT	SEGMENT
___$ReturnUdt$ = 8					; size = 4
_v$ = 12						; size = 4
??GVector3@@QBE?AU0@ABU0@@Z PROC			; Vector3::operator-, COMDAT
; _this$ = ecx

; 165  : {

	push	esi

; 166  : 	return Vector3Math->Subtract((Vector3*)this,(Vector3*)&v);

	mov	esi, DWORD PTR _v$[esp]
	mov	eax, ecx
	mov	ecx, DWORD PTR ?Vector3Math@@3PAV_Vector3MathFunctions@@A ; Vector3Math
	mov	edx, DWORD PTR [ecx]
	push	esi
	mov	esi, DWORD PTR ___$ReturnUdt$[esp+4]
	push	eax
	mov	eax, DWORD PTR [edx+8]
	push	esi
	call	eax
	mov	eax, esi
	pop	esi

; 167  : }

	ret	8
??GVector3@@QBE?AU0@ABU0@@Z ENDP			; Vector3::operator-
_TEXT	ENDS
PUBLIC	??DVector3@@QBE?AU0@M@Z				; Vector3::operator*
; Function compile flags: /Ogtpy
;	COMDAT ??DVector3@@QBE?AU0@M@Z
_TEXT	SEGMENT
___$ReturnUdt$ = 8					; size = 4
_f$ = 12						; size = 4
??DVector3@@QBE?AU0@M@Z PROC				; Vector3::operator*, COMDAT
; _this$ = ecx

; 169  : {

	push	esi
	mov	eax, ecx

; 170  : 	return Vector3Math->Multiply((Vector3*)this,&f);

	mov	ecx, DWORD PTR ?Vector3Math@@3PAV_Vector3MathFunctions@@A ; Vector3Math
	mov	edx, DWORD PTR [ecx]
	lea	esi, DWORD PTR _f$[esp]
	push	esi
	mov	esi, DWORD PTR ___$ReturnUdt$[esp+4]
	push	eax
	mov	eax, DWORD PTR [edx+16]
	push	esi
	call	eax
	mov	eax, esi
	pop	esi

; 171  : }

	ret	8
??DVector3@@QBE?AU0@M@Z ENDP				; Vector3::operator*
_TEXT	ENDS
PUBLIC	??KVector3@@QBE?AU0@M@Z				; Vector3::operator/
; Function compile flags: /Ogtpy
;	COMDAT ??KVector3@@QBE?AU0@M@Z
_TEXT	SEGMENT
___$ReturnUdt$ = 8					; size = 4
_f$ = 12						; size = 4
??KVector3@@QBE?AU0@M@Z PROC				; Vector3::operator/, COMDAT
; _this$ = ecx

; 173  : {

	push	esi
	mov	eax, ecx

; 174  : 	return Vector3Math->Divide((Vector3*)this,&f);

	mov	ecx, DWORD PTR ?Vector3Math@@3PAV_Vector3MathFunctions@@A ; Vector3Math
	mov	edx, DWORD PTR [ecx]
	lea	esi, DWORD PTR _f$[esp]
	push	esi
	mov	esi, DWORD PTR ___$ReturnUdt$[esp+4]
	push	eax
	mov	eax, DWORD PTR [edx+32]
	push	esi
	call	eax
	mov	eax, esi
	pop	esi

; 175  : }

	ret	8
??KVector3@@QBE?AU0@M@Z ENDP				; Vector3::operator/
_TEXT	ENDS
PUBLIC	?Normalize@Vector3@@QAEXXZ			; Vector3::Normalize
; Function compile flags: /Ogtpy
;	COMDAT ?Normalize@Vector3@@QAEXXZ
_TEXT	SEGMENT
$T44333 = -12						; size = 12
?Normalize@Vector3@@QAEXXZ PROC				; Vector3::Normalize, COMDAT
; _this$ = ecx

; 177  : {

	mov	eax, ecx

; 178  : 	Vector3Math->Normalize(this);

	mov	ecx, DWORD PTR ?Vector3Math@@3PAV_Vector3MathFunctions@@A ; Vector3Math
	mov	edx, DWORD PTR [ecx]
	mov	edx, DWORD PTR [edx+56]
	sub	esp, 12					; 0000000cH
	push	eax
	lea	eax, DWORD PTR $T44333[esp+16]
	push	eax
	call	edx

; 179  : }

	add	esp, 12					; 0000000cH
	ret	0
?Normalize@Vector3@@QAEXXZ ENDP				; Vector3::Normalize
_TEXT	ENDS
PUBLIC	__real@00000000
PUBLIC	?Normalize@Vector3@@SA?AU1@U1@@Z		; Vector3::Normalize
;	COMDAT __real@00000000
CONST	SEGMENT
__real@00000000 DD 000000000r			; 0
; Function compile flags: /Ogtpy
CONST	ENDS
;	COMDAT ?Normalize@Vector3@@SA?AU1@U1@@Z
_TEXT	SEGMENT
___$ReturnUdt$ = 8					; size = 4
_v$ = 12						; size = 12
?Normalize@Vector3@@SA?AU1@U1@@Z PROC			; Vector3::Normalize, COMDAT

; 182  : 	Vector3 temp;

	fldz
	push	esi
	mov	esi, DWORD PTR ___$ReturnUdt$[esp]
	fst	DWORD PTR [esi]
	fst	DWORD PTR [esi+4]

; 183  : 	Vector3Math->Normalize(&v,&temp);

	push	esi
	fstp	DWORD PTR [esi+8]
	lea	edx, DWORD PTR _v$[esp+4]
	mov	ecx, DWORD PTR ?Vector3Math@@3PAV_Vector3MathFunctions@@A ; Vector3Math
	mov	eax, DWORD PTR [ecx]
	mov	eax, DWORD PTR [eax+60]
	push	edx
	call	eax

; 184  : 	return temp;

	mov	eax, esi
	pop	esi

; 185  : }

	ret	0
?Normalize@Vector3@@SA?AU1@U1@@Z ENDP			; Vector3::Normalize
_TEXT	ENDS
PUBLIC	?Dot@Vector3@@QAEMU1@@Z				; Vector3::Dot
; Function compile flags: /Ogtpy
;	COMDAT ?Dot@Vector3@@QAEMU1@@Z
_TEXT	SEGMENT
_v$ = 8							; size = 12
?Dot@Vector3@@QAEMU1@@Z PROC				; Vector3::Dot, COMDAT
; _this$ = ecx

; 187  : {

	push	esi
	mov	eax, ecx

; 188  : 	return Vector3Math->Dot(this, &v);

	mov	ecx, DWORD PTR ?Vector3Math@@3PAV_Vector3MathFunctions@@A ; Vector3Math
	mov	edx, DWORD PTR [ecx]
	lea	esi, DWORD PTR _v$[esp]
	push	esi
	push	eax
	mov	eax, DWORD PTR [edx+64]
	call	eax
	pop	esi

; 189  : }

	ret	12					; 0000000cH
?Dot@Vector3@@QAEMU1@@Z ENDP				; Vector3::Dot
_TEXT	ENDS
PUBLIC	?Dot@Vector3@@SAMU1@0@Z				; Vector3::Dot
; Function compile flags: /Ogtpy
;	COMDAT ?Dot@Vector3@@SAMU1@0@Z
_TEXT	SEGMENT
_v$ = 8							; size = 12
_v2$ = 20						; size = 12
?Dot@Vector3@@SAMU1@0@Z PROC				; Vector3::Dot, COMDAT

; 192  : 	return Vector3Math->Dot(&v, &v2);

	mov	ecx, DWORD PTR ?Vector3Math@@3PAV_Vector3MathFunctions@@A ; Vector3Math
	mov	eax, DWORD PTR [ecx]
	mov	eax, DWORD PTR [eax+64]
	lea	edx, DWORD PTR _v2$[esp-4]
	push	edx
	lea	edx, DWORD PTR _v$[esp]
	push	edx
	call	eax

; 193  : }

	ret	0
?Dot@Vector3@@SAMU1@0@Z ENDP				; Vector3::Dot
_TEXT	ENDS
PUBLIC	?Cross@Vector3@@QAE?AU1@U1@@Z			; Vector3::Cross
; Function compile flags: /Ogtpy
;	COMDAT ?Cross@Vector3@@QAE?AU1@U1@@Z
_TEXT	SEGMENT
___$ReturnUdt$ = 8					; size = 4
_v$ = 12						; size = 12
?Cross@Vector3@@QAE?AU1@U1@@Z PROC			; Vector3::Cross, COMDAT
; _this$ = ecx

; 195  : {

	push	esi
	mov	eax, ecx

; 196  : 	return Vector3Math->Cross(this, &v);

	mov	ecx, DWORD PTR ?Vector3Math@@3PAV_Vector3MathFunctions@@A ; Vector3Math
	mov	edx, DWORD PTR [ecx]
	lea	esi, DWORD PTR _v$[esp]
	push	esi
	mov	esi, DWORD PTR ___$ReturnUdt$[esp+4]
	push	eax
	mov	eax, DWORD PTR [edx+48]
	push	esi
	call	eax
	mov	eax, esi
	pop	esi

; 197  : }

	ret	16					; 00000010H
?Cross@Vector3@@QAE?AU1@U1@@Z ENDP			; Vector3::Cross
_TEXT	ENDS
PUBLIC	?Cross@Vector3@@SA?AU1@U1@0@Z			; Vector3::Cross
; Function compile flags: /Ogtpy
;	COMDAT ?Cross@Vector3@@SA?AU1@U1@0@Z
_TEXT	SEGMENT
___$ReturnUdt$ = 8					; size = 4
_v$ = 12						; size = 12
_v2$ = 24						; size = 12
?Cross@Vector3@@SA?AU1@U1@0@Z PROC			; Vector3::Cross, COMDAT

; 200  : 	return Vector3Math->Cross(&v, &v2);

	mov	ecx, DWORD PTR ?Vector3Math@@3PAV_Vector3MathFunctions@@A ; Vector3Math
	mov	eax, DWORD PTR [ecx]
	mov	eax, DWORD PTR [eax+48]
	push	esi
	mov	esi, DWORD PTR ___$ReturnUdt$[esp]
	lea	edx, DWORD PTR _v2$[esp]
	push	edx
	lea	edx, DWORD PTR _v$[esp+4]
	push	edx
	push	esi
	call	eax
	mov	eax, esi
	pop	esi

; 201  : }

	ret	0
?Cross@Vector3@@SA?AU1@U1@0@Z ENDP			; Vector3::Cross
; Function compile flags: /Ogtpy
_TEXT	ENDS
;	COMDAT ?Add@_Vector3MathFunctions@@UAEXPAUVector3@@00@Z
_TEXT	SEGMENT
$T44357 = -12						; size = 12
_src1$ = 8						; size = 4
_src2$ = 12						; size = 4
_dest$ = 16						; size = 4
?Add@_Vector3MathFunctions@@UAEXPAUVector3@@00@Z PROC	; _Vector3MathFunctions::Add, COMDAT
; _this$ = ecx

; 204  : {

	sub	esp, 12					; 0000000cH

; 205  : 	*dest = Vector3(src1->X + src2->X,src1->Y + src2->Y,src1->Z + src2->Z);

	mov	eax, DWORD PTR _src1$[esp+8]
	fld	DWORD PTR [eax]
	mov	ecx, DWORD PTR _src2$[esp+8]
	fadd	DWORD PTR [ecx]
	fstp	DWORD PTR $T44357[esp+12]
	fld	DWORD PTR [eax+4]
	fadd	DWORD PTR [ecx+4]
	fstp	DWORD PTR $T44357[esp+16]
	mov	edx, DWORD PTR $T44357[esp+16]
	fld	DWORD PTR [eax+8]
	mov	eax, DWORD PTR _dest$[esp+8]
	fadd	DWORD PTR [ecx+8]
	mov	ecx, DWORD PTR $T44357[esp+12]
	mov	DWORD PTR [eax], ecx
	mov	DWORD PTR [eax+4], edx
	fstp	DWORD PTR $T44357[esp+20]
	mov	ecx, DWORD PTR $T44357[esp+20]
	mov	DWORD PTR [eax+8], ecx

; 206  : }

	add	esp, 12					; 0000000cH
	ret	12					; 0000000cH
?Add@_Vector3MathFunctions@@UAEXPAUVector3@@00@Z ENDP	; _Vector3MathFunctions::Add
; Function compile flags: /Ogtpy
_TEXT	ENDS
;	COMDAT ?Subtract@_Vector3MathFunctions@@UAEXPAUVector3@@00@Z
_TEXT	SEGMENT
$T44367 = -12						; size = 12
_src1$ = 8						; size = 4
_src2$ = 12						; size = 4
_dest$ = 16						; size = 4
?Subtract@_Vector3MathFunctions@@UAEXPAUVector3@@00@Z PROC ; _Vector3MathFunctions::Subtract, COMDAT
; _this$ = ecx

; 208  : {

	sub	esp, 12					; 0000000cH

; 209  : 	*dest = Vector3(src1->X - src2->X,src1->Y - src2->Y,src1->Z - src2->Z);

	mov	eax, DWORD PTR _src1$[esp+8]
	fld	DWORD PTR [eax]
	mov	ecx, DWORD PTR _src2$[esp+8]
	fsub	DWORD PTR [ecx]
	fstp	DWORD PTR $T44367[esp+12]
	fld	DWORD PTR [eax+4]
	fsub	DWORD PTR [ecx+4]
	fstp	DWORD PTR $T44367[esp+16]
	mov	edx, DWORD PTR $T44367[esp+16]
	fld	DWORD PTR [eax+8]
	mov	eax, DWORD PTR _dest$[esp+8]
	fsub	DWORD PTR [ecx+8]
	mov	ecx, DWORD PTR $T44367[esp+12]
	mov	DWORD PTR [eax], ecx
	mov	DWORD PTR [eax+4], edx
	fstp	DWORD PTR $T44367[esp+20]
	mov	ecx, DWORD PTR $T44367[esp+20]
	mov	DWORD PTR [eax+8], ecx

; 210  : }

	add	esp, 12					; 0000000cH
	ret	12					; 0000000cH
?Subtract@_Vector3MathFunctions@@UAEXPAUVector3@@00@Z ENDP ; _Vector3MathFunctions::Subtract
; Function compile flags: /Ogtpy
_TEXT	ENDS
;	COMDAT ?Multiply@_Vector3MathFunctions@@UAEXPAUVector3@@00@Z
_TEXT	SEGMENT
$T44377 = -12						; size = 12
_src1$ = 8						; size = 4
_src2$ = 12						; size = 4
_dest$ = 16						; size = 4
?Multiply@_Vector3MathFunctions@@UAEXPAUVector3@@00@Z PROC ; _Vector3MathFunctions::Multiply, COMDAT
; _this$ = ecx

; 212  : {

	sub	esp, 12					; 0000000cH

; 213  : 	*dest = Vector3(src1->X * src2->X,src1->Y * src2->Y,src1->Z * src2->Z);

	mov	eax, DWORD PTR _src1$[esp+8]
	fld	DWORD PTR [eax]
	mov	ecx, DWORD PTR _src2$[esp+8]
	fmul	DWORD PTR [ecx]
	fstp	DWORD PTR $T44377[esp+12]
	fld	DWORD PTR [eax+4]
	fmul	DWORD PTR [ecx+4]
	fstp	DWORD PTR $T44377[esp+16]
	mov	edx, DWORD PTR $T44377[esp+16]
	fld	DWORD PTR [eax+8]
	mov	eax, DWORD PTR _dest$[esp+8]
	fmul	DWORD PTR [ecx+8]
	mov	ecx, DWORD PTR $T44377[esp+12]
	mov	DWORD PTR [eax], ecx
	mov	DWORD PTR [eax+4], edx
	fstp	DWORD PTR $T44377[esp+20]
	mov	ecx, DWORD PTR $T44377[esp+20]
	mov	DWORD PTR [eax+8], ecx

; 214  : }

	add	esp, 12					; 0000000cH
	ret	12					; 0000000cH
?Multiply@_Vector3MathFunctions@@UAEXPAUVector3@@00@Z ENDP ; _Vector3MathFunctions::Multiply
; Function compile flags: /Ogtpy
_TEXT	ENDS
;	COMDAT ?Divide@_Vector3MathFunctions@@UAEXPAUVector3@@00@Z
_TEXT	SEGMENT
$T44387 = -12						; size = 12
_src1$ = 8						; size = 4
_src2$ = 12						; size = 4
_dest$ = 16						; size = 4
?Divide@_Vector3MathFunctions@@UAEXPAUVector3@@00@Z PROC ; _Vector3MathFunctions::Divide, COMDAT
; _this$ = ecx

; 216  : {

	sub	esp, 12					; 0000000cH

; 217  : 	*dest = Vector3(src1->X / src2->X,src1->Y / src2->Y,src1->Z / src2->Z);

	mov	eax, DWORD PTR _src1$[esp+8]
	fld	DWORD PTR [eax]
	mov	ecx, DWORD PTR _src2$[esp+8]
	fdiv	DWORD PTR [ecx]
	fstp	DWORD PTR $T44387[esp+12]
	fld	DWORD PTR [eax+4]
	fdiv	DWORD PTR [ecx+4]
	fstp	DWORD PTR $T44387[esp+16]
	fld	DWORD PTR [eax+8]
	fdiv	DWORD PTR [ecx+8]
	mov	edx, DWORD PTR $T44387[esp+16]
	mov	eax, DWORD PTR _dest$[esp+8]
	mov	ecx, DWORD PTR $T44387[esp+12]
	mov	DWORD PTR [eax], ecx
	mov	DWORD PTR [eax+4], edx
	fstp	DWORD PTR $T44387[esp+20]
	mov	ecx, DWORD PTR $T44387[esp+20]
	mov	DWORD PTR [eax+8], ecx

; 218  : }

	add	esp, 12					; 0000000cH
	ret	12					; 0000000cH
?Divide@_Vector3MathFunctions@@UAEXPAUVector3@@00@Z ENDP ; _Vector3MathFunctions::Divide
; Function compile flags: /Ogtpy
_TEXT	ENDS
;	COMDAT ?Multiply@_Vector3MathFunctions@@UAEXPAUVector3@@PAM0@Z
_TEXT	SEGMENT
$T44397 = -12						; size = 12
_src1$ = 8						; size = 4
_src2$ = 12						; size = 4
_dest$ = 16						; size = 4
?Multiply@_Vector3MathFunctions@@UAEXPAUVector3@@PAM0@Z PROC ; _Vector3MathFunctions::Multiply, COMDAT
; _this$ = ecx

; 220  : {

	sub	esp, 12					; 0000000cH

; 221  : 	*dest = Vector3(src1->X * *src2,src1->Y * *src2,src1->Z * *src2);

	mov	eax, DWORD PTR _src1$[esp+8]
	fld	DWORD PTR [eax]
	mov	ecx, DWORD PTR _src2$[esp+8]
	fmul	DWORD PTR [ecx]
	fstp	DWORD PTR $T44397[esp+12]
	fld	DWORD PTR [eax+4]
	fmul	DWORD PTR [ecx]
	fstp	DWORD PTR $T44397[esp+16]
	mov	edx, DWORD PTR $T44397[esp+16]
	fld	DWORD PTR [eax+8]
	mov	eax, DWORD PTR _dest$[esp+8]
	fmul	DWORD PTR [ecx]
	mov	ecx, DWORD PTR $T44397[esp+12]
	mov	DWORD PTR [eax], ecx
	mov	DWORD PTR [eax+4], edx
	fstp	DWORD PTR $T44397[esp+20]
	mov	ecx, DWORD PTR $T44397[esp+20]
	mov	DWORD PTR [eax+8], ecx

; 222  : }

	add	esp, 12					; 0000000cH
	ret	12					; 0000000cH
?Multiply@_Vector3MathFunctions@@UAEXPAUVector3@@PAM0@Z ENDP ; _Vector3MathFunctions::Multiply
; Function compile flags: /Ogtpy
_TEXT	ENDS
;	COMDAT ?Divide@_Vector3MathFunctions@@UAEXPAUVector3@@PAM0@Z
_TEXT	SEGMENT
$T44407 = -12						; size = 12
_src1$ = 8						; size = 4
_src2$ = 12						; size = 4
_dest$ = 16						; size = 4
?Divide@_Vector3MathFunctions@@UAEXPAUVector3@@PAM0@Z PROC ; _Vector3MathFunctions::Divide, COMDAT
; _this$ = ecx

; 224  : {

	sub	esp, 12					; 0000000cH

; 225  :  	*dest = Vector3(src1->X / *src2,src1->Y / *src2,src1->Z / *src2);

	fld1
	mov	eax, DWORD PTR _src2$[esp+8]
	fdiv	DWORD PTR [eax]
	mov	eax, DWORD PTR _src1$[esp+8]
	fld	DWORD PTR [eax]
	fmul	ST(0), ST(1)
	fstp	DWORD PTR $T44407[esp+12]
	mov	ecx, DWORD PTR $T44407[esp+12]
	fld	DWORD PTR [eax+4]
	fmul	ST(0), ST(1)
	fstp	DWORD PTR $T44407[esp+16]
	mov	edx, DWORD PTR $T44407[esp+16]
	fmul	DWORD PTR [eax+8]
	mov	eax, DWORD PTR _dest$[esp+8]
	mov	DWORD PTR [eax], ecx
	mov	DWORD PTR [eax+4], edx
	fstp	DWORD PTR $T44407[esp+20]
	mov	ecx, DWORD PTR $T44407[esp+20]
	mov	DWORD PTR [eax+8], ecx

; 226  : }

	add	esp, 12					; 0000000cH
	ret	12					; 0000000cH
?Divide@_Vector3MathFunctions@@UAEXPAUVector3@@PAM0@Z ENDP ; _Vector3MathFunctions::Divide
; Function compile flags: /Ogtpy
_TEXT	ENDS
;	COMDAT ?Cross@_Vector3MathFunctions@@UAEXPAUVector3@@00@Z
_TEXT	SEGMENT
$T44417 = -12						; size = 12
_src1$ = 8						; size = 4
_src2$ = 12						; size = 4
_dest$ = 16						; size = 4
?Cross@_Vector3MathFunctions@@UAEXPAUVector3@@00@Z PROC	; _Vector3MathFunctions::Cross, COMDAT
; _this$ = ecx

; 228  : {

	sub	esp, 12					; 0000000cH

; 229  : 	*dest = Vector3(src1->X * src2->Z - src1->Z * src2->Y,src1->Z * src2->X - src1->X * src2->Z,src1->X * src2->Y - src1->Y * src2->Z);

	mov	ecx, DWORD PTR _src1$[esp+8]
	mov	eax, DWORD PTR _src2$[esp+8]
	fld	DWORD PTR [ecx]
	fmul	DWORD PTR [eax+8]
	fld	DWORD PTR [ecx+8]
	fmul	DWORD PTR [eax+4]
	fsubr	ST(0), ST(1)
	fstp	DWORD PTR $T44417[esp+12]
	fld	DWORD PTR [ecx+8]
	fmul	DWORD PTR [eax]
	fsubrp	ST(1), ST(0)
	fstp	DWORD PTR $T44417[esp+16]
	mov	edx, DWORD PTR $T44417[esp+16]
	fld	DWORD PTR [ecx]
	fmul	DWORD PTR [eax+4]
	fld	DWORD PTR [ecx+4]
	mov	ecx, DWORD PTR $T44417[esp+12]
	fmul	DWORD PTR [eax+8]
	mov	eax, DWORD PTR _dest$[esp+8]
	mov	DWORD PTR [eax], ecx
	mov	DWORD PTR [eax+4], edx
	fsubp	ST(1), ST(0)
	fstp	DWORD PTR $T44417[esp+20]
	mov	ecx, DWORD PTR $T44417[esp+20]
	mov	DWORD PTR [eax+8], ecx

; 230  : }

	add	esp, 12					; 0000000cH
	ret	12					; 0000000cH
?Cross@_Vector3MathFunctions@@UAEXPAUVector3@@00@Z ENDP	; _Vector3MathFunctions::Cross
; Function compile flags: /Ogtpy
_TEXT	ENDS
;	COMDAT ?Normalize@_Vector3MathFunctions@@UAEXPAUVector3@@0@Z
_TEXT	SEGMENT
$T44428 = -12						; size = 12
$T44427 = -12						; size = 12
_src1$ = 8						; size = 4
_dest$ = 12						; size = 4
?Normalize@_Vector3MathFunctions@@UAEXPAUVector3@@0@Z PROC ; _Vector3MathFunctions::Normalize, COMDAT
; _this$ = ecx

; 233  :  	float magnitude = src1->X * src1->X + src1->Y * src1->Y + src1->Z * src1->Z;

	mov	ecx, DWORD PTR _src1$[esp-4]
	fld	DWORD PTR [ecx+8]
	sub	esp, 12					; 0000000cH
	fld	DWORD PTR [ecx+4]
	fld	DWORD PTR [ecx]
	fmul	ST(0), ST(0)
	fld	ST(1)
	fmulp	ST(2), ST(0)
	faddp	ST(1), ST(0)
	fld	ST(1)
	fmulp	ST(2), ST(0)
	faddp	ST(1), ST(0)

; 234  : 	if (!magnitude)

	fldz
	fld	ST(0)
	fucomp	ST(2)
	fnstsw	ax
	test	ah, 68					; 00000044H
	mov	eax, DWORD PTR _dest$[esp+8]
	jp	SHORT $LN13@Normalize

; 235  : 	{
; 236  : 		*dest = Vector3();

	fst	DWORD PTR $T44427[esp+12]
	mov	edx, DWORD PTR $T44427[esp+12]
	mov	DWORD PTR [eax], edx
	fst	DWORD PTR $T44427[esp+16]
	mov	edx, DWORD PTR $T44427[esp+16]
	fstp	DWORD PTR $T44427[esp+20]
	mov	DWORD PTR [eax+4], edx
	mov	edx, DWORD PTR $T44427[esp+20]
	mov	DWORD PTR [eax+8], edx
	jmp	SHORT $LN1@Normalize
$LN13@Normalize:
	fstp	ST(0)
$LN1@Normalize:

; 237  : 	}
; 238  : 	float multiply = 1.0f / sqrt(magnitude);

	fsqrt
	fld1
	fdivrp	ST(1), ST(0)

; 239  : 	*dest = Vector3(src1->X * multiply,src1->Y * multiply,src1->Z * multiply);

	fld	DWORD PTR [ecx]
	fmul	ST(0), ST(1)
	fstp	DWORD PTR $T44428[esp+12]
	fld	ST(0)
	fmul	DWORD PTR [ecx+4]
	fstp	DWORD PTR $T44428[esp+16]
	mov	edx, DWORD PTR $T44428[esp+16]
	fmul	DWORD PTR [ecx+8]
	mov	ecx, DWORD PTR $T44428[esp+12]
	mov	DWORD PTR [eax], ecx
	mov	DWORD PTR [eax+4], edx
	fstp	DWORD PTR $T44428[esp+20]
	mov	ecx, DWORD PTR $T44428[esp+20]
	mov	DWORD PTR [eax+8], ecx

; 240  : }

	add	esp, 12					; 0000000cH
	ret	8
?Normalize@_Vector3MathFunctions@@UAEXPAUVector3@@0@Z ENDP ; _Vector3MathFunctions::Normalize
; Function compile flags: /Ogtpy
_TEXT	ENDS
;	COMDAT ?Dot@_Vector3MathFunctions@@UAEXPAUVector3@@0PAM@Z
_TEXT	SEGMENT
_src1$ = 8						; size = 4
_src2$ = 12						; size = 4
_dest$ = 16						; size = 4
?Dot@_Vector3MathFunctions@@UAEXPAUVector3@@0PAM@Z PROC	; _Vector3MathFunctions::Dot, COMDAT
; _this$ = ecx

; 243  : 	*dest = (src1->X * src2->X) + (src1->Y * src2->Y) + (src1->Z * src2->Z);

	mov	eax, DWORD PTR _src1$[esp-4]
	fld	DWORD PTR [eax+8]
	mov	ecx, DWORD PTR _src2$[esp-4]
	fmul	DWORD PTR [ecx+8]
	fld	DWORD PTR [eax+4]
	fmul	DWORD PTR [ecx+4]
	faddp	ST(1), ST(0)
	fld	DWORD PTR [eax]
	mov	eax, DWORD PTR _dest$[esp-4]
	fmul	DWORD PTR [ecx]
	faddp	ST(1), ST(0)
	fstp	DWORD PTR [eax]

; 244  : }

	ret	12					; 0000000cH
?Dot@_Vector3MathFunctions@@UAEXPAUVector3@@0PAM@Z ENDP	; _Vector3MathFunctions::Dot
; Function compile flags: /Ogtpy
_TEXT	ENDS
;	COMDAT ?Add@_Vector3MathFunctions@@UAE?AUVector3@@PAU2@0@Z
_TEXT	SEGMENT
___$ReturnUdt$ = 8					; size = 4
_src1$ = 12						; size = 4
_src2$ = 16						; size = 4
?Add@_Vector3MathFunctions@@UAE?AUVector3@@PAU2@0@Z PROC ; _Vector3MathFunctions::Add, COMDAT
; _this$ = ecx

; 247  : 	Vector3 temp;

	fldz

; 248  : 	this->Add(src1,src2,&temp);

	mov	edx, DWORD PTR _src2$[esp-4]
	mov	eax, DWORD PTR [ecx]
	mov	eax, DWORD PTR [eax+4]
	push	esi
	mov	esi, DWORD PTR ___$ReturnUdt$[esp]
	push	esi
	fst	DWORD PTR [esi]
	push	edx
	fst	DWORD PTR [esi+4]
	mov	edx, DWORD PTR _src1$[esp+8]
	fstp	DWORD PTR [esi+8]
	push	edx
	call	eax

; 249  : 	return temp;

	mov	eax, esi
	pop	esi

; 250  : }

	ret	12					; 0000000cH
?Add@_Vector3MathFunctions@@UAE?AUVector3@@PAU2@0@Z ENDP ; _Vector3MathFunctions::Add
; Function compile flags: /Ogtpy
_TEXT	ENDS
;	COMDAT ?Subtract@_Vector3MathFunctions@@UAE?AUVector3@@PAU2@0@Z
_TEXT	SEGMENT
___$ReturnUdt$ = 8					; size = 4
_src1$ = 12						; size = 4
_src2$ = 16						; size = 4
?Subtract@_Vector3MathFunctions@@UAE?AUVector3@@PAU2@0@Z PROC ; _Vector3MathFunctions::Subtract, COMDAT
; _this$ = ecx

; 253  :  	Vector3 temp;

	fldz

; 254  : 	this->Subtract(src1,src2,&temp);

	mov	edx, DWORD PTR _src2$[esp-4]
	mov	eax, DWORD PTR [ecx]
	mov	eax, DWORD PTR [eax+12]
	push	esi
	mov	esi, DWORD PTR ___$ReturnUdt$[esp]
	push	esi
	fst	DWORD PTR [esi]
	push	edx
	fst	DWORD PTR [esi+4]
	mov	edx, DWORD PTR _src1$[esp+8]
	fstp	DWORD PTR [esi+8]
	push	edx
	call	eax

; 255  : 	return temp;

	mov	eax, esi
	pop	esi

; 256  : }

	ret	12					; 0000000cH
?Subtract@_Vector3MathFunctions@@UAE?AUVector3@@PAU2@0@Z ENDP ; _Vector3MathFunctions::Subtract
; Function compile flags: /Ogtpy
_TEXT	ENDS
;	COMDAT ?Multiply@_Vector3MathFunctions@@UAE?AUVector3@@PAU2@0@Z
_TEXT	SEGMENT
___$ReturnUdt$ = 8					; size = 4
_src1$ = 12						; size = 4
_src2$ = 16						; size = 4
?Multiply@_Vector3MathFunctions@@UAE?AUVector3@@PAU2@0@Z PROC ; _Vector3MathFunctions::Multiply, COMDAT
; _this$ = ecx

; 259  :  	Vector3 temp;

	fldz

; 260  : 	this->Multiply(src1,src2,&temp);

	mov	edx, DWORD PTR _src2$[esp-4]
	mov	eax, DWORD PTR [ecx]
	mov	eax, DWORD PTR [eax+28]
	push	esi
	mov	esi, DWORD PTR ___$ReturnUdt$[esp]
	push	esi
	fst	DWORD PTR [esi]
	push	edx
	fst	DWORD PTR [esi+4]
	mov	edx, DWORD PTR _src1$[esp+8]
	fstp	DWORD PTR [esi+8]
	push	edx
	call	eax

; 261  : 	return temp;

	mov	eax, esi
	pop	esi

; 262  : }

	ret	12					; 0000000cH
?Multiply@_Vector3MathFunctions@@UAE?AUVector3@@PAU2@0@Z ENDP ; _Vector3MathFunctions::Multiply
; Function compile flags: /Ogtpy
_TEXT	ENDS
;	COMDAT ?Divide@_Vector3MathFunctions@@UAE?AUVector3@@PAU2@0@Z
_TEXT	SEGMENT
___$ReturnUdt$ = 8					; size = 4
_src1$ = 12						; size = 4
_src2$ = 16						; size = 4
?Divide@_Vector3MathFunctions@@UAE?AUVector3@@PAU2@0@Z PROC ; _Vector3MathFunctions::Divide, COMDAT
; _this$ = ecx

; 265  :  	Vector3 temp;

	fldz

; 266  : 	this->Divide(src1,src2,&temp);

	mov	edx, DWORD PTR _src2$[esp-4]
	mov	eax, DWORD PTR [ecx]
	mov	eax, DWORD PTR [eax+44]
	push	esi
	mov	esi, DWORD PTR ___$ReturnUdt$[esp]
	push	esi
	fst	DWORD PTR [esi]
	push	edx
	fst	DWORD PTR [esi+4]
	mov	edx, DWORD PTR _src1$[esp+8]
	fstp	DWORD PTR [esi+8]
	push	edx
	call	eax

; 267  : 	return temp;

	mov	eax, esi
	pop	esi

; 268  : }

	ret	12					; 0000000cH
?Divide@_Vector3MathFunctions@@UAE?AUVector3@@PAU2@0@Z ENDP ; _Vector3MathFunctions::Divide
; Function compile flags: /Ogtpy
_TEXT	ENDS
;	COMDAT ?Multiply@_Vector3MathFunctions@@UAE?AUVector3@@PAU2@PAM@Z
_TEXT	SEGMENT
___$ReturnUdt$ = 8					; size = 4
_src1$ = 12						; size = 4
_src2$ = 16						; size = 4
?Multiply@_Vector3MathFunctions@@UAE?AUVector3@@PAU2@PAM@Z PROC ; _Vector3MathFunctions::Multiply, COMDAT
; _this$ = ecx

; 271  :  	Vector3 temp;

	fldz

; 272  : 	this->Multiply(src1,src2,&temp);

	mov	edx, DWORD PTR _src2$[esp-4]
	mov	eax, DWORD PTR [ecx]
	mov	eax, DWORD PTR [eax+24]
	push	esi
	mov	esi, DWORD PTR ___$ReturnUdt$[esp]
	push	esi
	fst	DWORD PTR [esi]
	push	edx
	fst	DWORD PTR [esi+4]
	mov	edx, DWORD PTR _src1$[esp+8]
	fstp	DWORD PTR [esi+8]
	push	edx
	call	eax

; 273  : 	return temp;

	mov	eax, esi
	pop	esi

; 274  : }

	ret	12					; 0000000cH
?Multiply@_Vector3MathFunctions@@UAE?AUVector3@@PAU2@PAM@Z ENDP ; _Vector3MathFunctions::Multiply
; Function compile flags: /Ogtpy
_TEXT	ENDS
;	COMDAT ?Divide@_Vector3MathFunctions@@UAE?AUVector3@@PAU2@PAM@Z
_TEXT	SEGMENT
___$ReturnUdt$ = 8					; size = 4
_src1$ = 12						; size = 4
_src2$ = 16						; size = 4
?Divide@_Vector3MathFunctions@@UAE?AUVector3@@PAU2@PAM@Z PROC ; _Vector3MathFunctions::Divide, COMDAT
; _this$ = ecx

; 277  :  	Vector3 temp;

	fldz

; 278  : 	this->Divide(src1,src2,&temp);

	mov	edx, DWORD PTR _src2$[esp-4]
	mov	eax, DWORD PTR [ecx]
	mov	eax, DWORD PTR [eax+40]
	push	esi
	mov	esi, DWORD PTR ___$ReturnUdt$[esp]
	push	esi
	fst	DWORD PTR [esi]
	push	edx
	fst	DWORD PTR [esi+4]
	mov	edx, DWORD PTR _src1$[esp+8]
	fstp	DWORD PTR [esi+8]
	push	edx
	call	eax

; 279  : 	return temp;

	mov	eax, esi
	pop	esi

; 280  : }

	ret	12					; 0000000cH
?Divide@_Vector3MathFunctions@@UAE?AUVector3@@PAU2@PAM@Z ENDP ; _Vector3MathFunctions::Divide
; Function compile flags: /Ogtpy
_TEXT	ENDS
;	COMDAT ?Cross@_Vector3MathFunctions@@UAE?AUVector3@@PAU2@0@Z
_TEXT	SEGMENT
___$ReturnUdt$ = 8					; size = 4
_src1$ = 12						; size = 4
_src2$ = 16						; size = 4
?Cross@_Vector3MathFunctions@@UAE?AUVector3@@PAU2@0@Z PROC ; _Vector3MathFunctions::Cross, COMDAT
; _this$ = ecx

; 283  :  	Vector3 temp;

	fldz

; 284  : 	this->Cross(src1,src2,&temp);

	mov	edx, DWORD PTR _src2$[esp-4]
	mov	eax, DWORD PTR [ecx]
	mov	eax, DWORD PTR [eax+52]
	push	esi
	mov	esi, DWORD PTR ___$ReturnUdt$[esp]
	push	esi
	fst	DWORD PTR [esi]
	push	edx
	fst	DWORD PTR [esi+4]
	mov	edx, DWORD PTR _src1$[esp+8]
	fstp	DWORD PTR [esi+8]
	push	edx
	call	eax

; 285  : 	return temp;

	mov	eax, esi
	pop	esi

; 286  : }

	ret	12					; 0000000cH
?Cross@_Vector3MathFunctions@@UAE?AUVector3@@PAU2@0@Z ENDP ; _Vector3MathFunctions::Cross
; Function compile flags: /Ogtpy
_TEXT	ENDS
;	COMDAT ?Normalize@_Vector3MathFunctions@@UAE?AUVector3@@PAU2@@Z
_TEXT	SEGMENT
___$ReturnUdt$ = 8					; size = 4
_src$ = 12						; size = 4
?Normalize@_Vector3MathFunctions@@UAE?AUVector3@@PAU2@@Z PROC ; _Vector3MathFunctions::Normalize, COMDAT
; _this$ = ecx

; 289  :  	Vector3 temp;

	fldz

; 290  : 	this->Normalize(src,&temp);

	mov	eax, DWORD PTR [ecx]
	mov	edx, DWORD PTR _src$[esp-4]
	mov	eax, DWORD PTR [eax+60]
	push	esi
	mov	esi, DWORD PTR ___$ReturnUdt$[esp]
	fst	DWORD PTR [esi]
	push	esi
	fst	DWORD PTR [esi+4]
	push	edx
	fstp	DWORD PTR [esi+8]
	call	eax

; 291  : 	return temp;

	mov	eax, esi
	pop	esi

; 292  : }

	ret	8
?Normalize@_Vector3MathFunctions@@UAE?AUVector3@@PAU2@@Z ENDP ; _Vector3MathFunctions::Normalize
; Function compile flags: /Ogtpy
_TEXT	ENDS
;	COMDAT ?Dot@_Vector3MathFunctions@@UAEMPAUVector3@@0@Z
_TEXT	SEGMENT
_src1$ = 8						; size = 4
_temp$ = 12						; size = 4
_src2$ = 12						; size = 4
?Dot@_Vector3MathFunctions@@UAEMPAUVector3@@0@Z PROC	; _Vector3MathFunctions::Dot, COMDAT
; _this$ = ecx

; 295  : 	float temp;
; 296  : 	this->Dot(src1,src2,&temp);

	mov	eax, DWORD PTR [ecx]
	mov	eax, DWORD PTR [eax+68]
	lea	edx, DWORD PTR _temp$[esp-4]
	push	edx
	mov	edx, DWORD PTR _src2$[esp]
	push	edx
	mov	edx, DWORD PTR _src1$[esp+4]
	push	edx
	call	eax

; 297  : 	return temp;

	fld	DWORD PTR _temp$[esp-4]

; 298  : }

	ret	8
?Dot@_Vector3MathFunctions@@UAEMPAUVector3@@0@Z ENDP	; _Vector3MathFunctions::Dot
_TEXT	ENDS
PUBLIC	??0Vector4@@QAE@MMMM@Z				; Vector4::Vector4
; Function compile flags: /Ogtpy
;	COMDAT ??0Vector4@@QAE@MMMM@Z
_TEXT	SEGMENT
_x$ = 8							; size = 4
_y$ = 12						; size = 4
_z$ = 16						; size = 4
_w$ = 20						; size = 4
??0Vector4@@QAE@MMMM@Z PROC				; Vector4::Vector4, COMDAT
; _this$ = ecx

; 375  : 	X = x;

	fld	DWORD PTR _x$[esp-4]
	mov	eax, ecx
	fstp	DWORD PTR [eax]

; 376  : 	Y = y;

	fld	DWORD PTR _y$[esp-4]
	fstp	DWORD PTR [eax+4]

; 377  : 	Z = z;

	fld	DWORD PTR _z$[esp-4]
	fstp	DWORD PTR [eax+8]

; 378  : 	W = w;

	fld	DWORD PTR _w$[esp-4]
	fstp	DWORD PTR [eax+12]

; 379  : };

	ret	16					; 00000010H
??0Vector4@@QAE@MMMM@Z ENDP				; Vector4::Vector4
_TEXT	ENDS
PUBLIC	?FromVector2@Vector4@@SA?AU1@VVector2@@@Z	; Vector4::FromVector2
; Function compile flags: /Ogtpy
;	COMDAT ?FromVector2@Vector4@@SA?AU1@VVector2@@@Z
_TEXT	SEGMENT
___$ReturnUdt$ = 8					; size = 4
_source$ = 12						; size = 8
?FromVector2@Vector4@@SA?AU1@VVector2@@@Z PROC		; Vector4::FromVector2, COMDAT

; 382  : 	return Vector4(source.X,source.Y,0,0);

	mov	eax, DWORD PTR ___$ReturnUdt$[esp-4]
	fld	DWORD PTR _source$[esp-4]
	fstp	DWORD PTR [eax]
	fld	DWORD PTR _source$[esp]
	fstp	DWORD PTR [eax+4]
	fldz
	fst	DWORD PTR [eax+8]
	fstp	DWORD PTR [eax+12]

; 383  : }

	ret	0
?FromVector2@Vector4@@SA?AU1@VVector2@@@Z ENDP		; Vector4::FromVector2
_TEXT	ENDS
PUBLIC	??_C@_0BF@PDIPFBIN@Vector4?3?3FromVector2?$AA@	; `string'
PUBLIC	?FromVector2@Vector4@@SAPAU1@PAVVector2@@@Z	; Vector4::FromVector2
EXTRN	??2@YAPAXI@Z:PROC				; operator new
;	COMDAT ??_C@_0BF@PDIPFBIN@Vector4?3?3FromVector2?$AA@
CONST	SEGMENT
??_C@_0BF@PDIPFBIN@Vector4?3?3FromVector2?$AA@ DB 'Vector4::FromVector2', 00H ; `string'
; Function compile flags: /Ogtpy
CONST	ENDS
;	COMDAT ?FromVector2@Vector4@@SAPAU1@PAVVector2@@@Z
_TEXT	SEGMENT
_source$ = 8						; size = 4
?FromVector2@Vector4@@SAPAU1@PAVVector2@@@Z PROC	; Vector4::FromVector2, COMDAT

; 386  : 	return new Vector4(source->X,source->Y,0,0);

	push	OFFSET ??_C@_0BF@PDIPFBIN@Vector4?3?3FromVector2?$AA@
	push	386					; 00000182H
	push	OFFSET ??_C@_0BC@EGBNMJNF@?4?2engine_math?4cpp?$AA@
	call	?m_setOwner@@YAXPBDI0@Z			; m_setOwner
	push	16					; 00000010H
	call	??2@YAPAXI@Z				; operator new
	add	esp, 16					; 00000010H
	test	eax, eax
	je	SHORT $LN3@FromVector
	mov	ecx, DWORD PTR _source$[esp-4]
	fld	DWORD PTR [ecx+4]
	fld	DWORD PTR [ecx]
	fstp	DWORD PTR [eax]
	fstp	DWORD PTR [eax+4]
	fldz
	fst	DWORD PTR [eax+8]
	fstp	DWORD PTR [eax+12]

; 387  : }

	ret	0
$LN3@FromVector:

; 386  : 	return new Vector4(source->X,source->Y,0,0);

	xor	eax, eax

; 387  : }

	ret	0
?FromVector2@Vector4@@SAPAU1@PAVVector2@@@Z ENDP	; Vector4::FromVector2
_TEXT	ENDS
PUBLIC	?FromVector3@Vector4@@SA?AU1@UVector3@@@Z	; Vector4::FromVector3
; Function compile flags: /Ogtpy
;	COMDAT ?FromVector3@Vector4@@SA?AU1@UVector3@@@Z
_TEXT	SEGMENT
___$ReturnUdt$ = 8					; size = 4
_source$ = 12						; size = 12
?FromVector3@Vector4@@SA?AU1@UVector3@@@Z PROC		; Vector4::FromVector3, COMDAT

; 390  : 	return Vector4(source.X,source.Y,source.Z,0);

	mov	eax, DWORD PTR ___$ReturnUdt$[esp-4]
	fld	DWORD PTR _source$[esp-4]
	fstp	DWORD PTR [eax]
	fld	DWORD PTR _source$[esp]
	fstp	DWORD PTR [eax+4]
	fld	DWORD PTR _source$[esp+4]
	fstp	DWORD PTR [eax+8]
	fldz
	fstp	DWORD PTR [eax+12]

; 391  : }

	ret	0
?FromVector3@Vector4@@SA?AU1@UVector3@@@Z ENDP		; Vector4::FromVector3
_TEXT	ENDS
PUBLIC	??_C@_0BF@OKJEGAMM@Vector4?3?3FromVector3?$AA@	; `string'
PUBLIC	?FromVector3@Vector4@@SAPAU1@PAUVector3@@@Z	; Vector4::FromVector3
;	COMDAT ??_C@_0BF@OKJEGAMM@Vector4?3?3FromVector3?$AA@
CONST	SEGMENT
??_C@_0BF@OKJEGAMM@Vector4?3?3FromVector3?$AA@ DB 'Vector4::FromVector3', 00H ; `string'
; Function compile flags: /Ogtpy
CONST	ENDS
;	COMDAT ?FromVector3@Vector4@@SAPAU1@PAUVector3@@@Z
_TEXT	SEGMENT
_source$ = 8						; size = 4
?FromVector3@Vector4@@SAPAU1@PAUVector3@@@Z PROC	; Vector4::FromVector3, COMDAT

; 394  : 	return new Vector4(source->X,source->Y,source->Z,0);

	push	OFFSET ??_C@_0BF@OKJEGAMM@Vector4?3?3FromVector3?$AA@
	push	394					; 0000018aH
	push	OFFSET ??_C@_0BC@EGBNMJNF@?4?2engine_math?4cpp?$AA@
	call	?m_setOwner@@YAXPBDI0@Z			; m_setOwner
	push	16					; 00000010H
	call	??2@YAPAXI@Z				; operator new
	add	esp, 16					; 00000010H
	test	eax, eax
	je	SHORT $LN3@FromVector@2
	mov	ecx, DWORD PTR _source$[esp-4]
	fld	DWORD PTR [ecx+4]
	fld	DWORD PTR [ecx+8]
	fld	DWORD PTR [ecx]
	fstp	DWORD PTR [eax]
	fxch	ST(1)
	fstp	DWORD PTR [eax+4]
	fstp	DWORD PTR [eax+8]
	fldz
	fstp	DWORD PTR [eax+12]

; 395  : }

	ret	0
$LN3@FromVector@2:

; 394  : 	return new Vector4(source->X,source->Y,source->Z,0);

	xor	eax, eax

; 395  : }

	ret	0
?FromVector3@Vector4@@SAPAU1@PAUVector3@@@Z ENDP	; Vector4::FromVector3
_TEXT	ENDS
PUBLIC	??XVector4@@QAEAAU0@AAU0@@Z			; Vector4::operator*=
; Function compile flags: /Ogtpy
;	COMDAT ??XVector4@@QAEAAU0@AAU0@@Z
_TEXT	SEGMENT
_v$ = 8							; size = 4
??XVector4@@QAEAAU0@AAU0@@Z PROC			; Vector4::operator*=, COMDAT
; _this$ = ecx

; 398  : 	Vector4Math->Multiply(this,&v,this);

	mov	edx, DWORD PTR _v$[esp-4]
	push	esi
	mov	esi, ecx
	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	mov	eax, DWORD PTR [ecx]
	mov	eax, DWORD PTR [eax+28]
	push	esi
	push	edx
	push	esi
	call	eax

; 399  : 	return *this;

	mov	eax, esi
	pop	esi

; 400  : }

	ret	4
??XVector4@@QAEAAU0@AAU0@@Z ENDP			; Vector4::operator*=
_TEXT	ENDS
PUBLIC	??_0Vector4@@QAEAAU0@AAU0@@Z			; Vector4::operator/=
; Function compile flags: /Ogtpy
;	COMDAT ??_0Vector4@@QAEAAU0@AAU0@@Z
_TEXT	SEGMENT
_v$ = 8							; size = 4
??_0Vector4@@QAEAAU0@AAU0@@Z PROC			; Vector4::operator/=, COMDAT
; _this$ = ecx

; 403  : 	Vector4Math->Divide(this,&v,this);

	mov	edx, DWORD PTR _v$[esp-4]
	push	esi
	mov	esi, ecx
	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	mov	eax, DWORD PTR [ecx]
	mov	eax, DWORD PTR [eax+44]
	push	esi
	push	edx
	push	esi
	call	eax

; 404  : 	return *this;

	mov	eax, esi
	pop	esi

; 405  : }

	ret	4
??_0Vector4@@QAEAAU0@AAU0@@Z ENDP			; Vector4::operator/=
_TEXT	ENDS
PUBLIC	??YVector4@@QAEAAU0@AAU0@@Z			; Vector4::operator+=
; Function compile flags: /Ogtpy
;	COMDAT ??YVector4@@QAEAAU0@AAU0@@Z
_TEXT	SEGMENT
_v$ = 8							; size = 4
??YVector4@@QAEAAU0@AAU0@@Z PROC			; Vector4::operator+=, COMDAT
; _this$ = ecx

; 408  : 	Vector4Math->Add(this,&v,this);

	mov	edx, DWORD PTR _v$[esp-4]
	push	esi
	mov	esi, ecx
	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	mov	eax, DWORD PTR [ecx]
	mov	eax, DWORD PTR [eax+4]
	push	esi
	push	edx
	push	esi
	call	eax

; 409  : 	return *this;

	mov	eax, esi
	pop	esi

; 410  : }

	ret	4
??YVector4@@QAEAAU0@AAU0@@Z ENDP			; Vector4::operator+=
_TEXT	ENDS
PUBLIC	??ZVector4@@QAEAAU0@AAU0@@Z			; Vector4::operator-=
; Function compile flags: /Ogtpy
;	COMDAT ??ZVector4@@QAEAAU0@AAU0@@Z
_TEXT	SEGMENT
_v$ = 8							; size = 4
??ZVector4@@QAEAAU0@AAU0@@Z PROC			; Vector4::operator-=, COMDAT
; _this$ = ecx

; 413  : 	Vector4Math->Add(this,&v,this);

	mov	edx, DWORD PTR _v$[esp-4]
	push	esi
	mov	esi, ecx
	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	mov	eax, DWORD PTR [ecx]
	mov	eax, DWORD PTR [eax+4]
	push	esi
	push	edx
	push	esi
	call	eax

; 414  : 	return *this;

	mov	eax, esi
	pop	esi

; 415  : }

	ret	4
??ZVector4@@QAEAAU0@AAU0@@Z ENDP			; Vector4::operator-=
_TEXT	ENDS
PUBLIC	??XVector4@@QAEAAU0@M@Z				; Vector4::operator*=
; Function compile flags: /Ogtpy
;	COMDAT ??XVector4@@QAEAAU0@M@Z
_TEXT	SEGMENT
_f$ = 8							; size = 4
??XVector4@@QAEAAU0@M@Z PROC				; Vector4::operator*=, COMDAT
; _this$ = ecx

; 417  : {

	push	esi
	mov	esi, ecx

; 418  : 	Vector4Math->Multiply(this,&f,this);

	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	mov	eax, DWORD PTR [ecx]
	mov	eax, DWORD PTR [eax+24]
	push	esi
	lea	edx, DWORD PTR _f$[esp+4]
	push	edx
	push	esi
	call	eax

; 419  : 	return *this;

	mov	eax, esi
	pop	esi

; 420  : }

	ret	4
??XVector4@@QAEAAU0@M@Z ENDP				; Vector4::operator*=
_TEXT	ENDS
PUBLIC	??_0Vector4@@QAEAAU0@M@Z			; Vector4::operator/=
; Function compile flags: /Ogtpy
;	COMDAT ??_0Vector4@@QAEAAU0@M@Z
_TEXT	SEGMENT
_f$ = 8							; size = 4
??_0Vector4@@QAEAAU0@M@Z PROC				; Vector4::operator/=, COMDAT
; _this$ = ecx

; 422  : {

	push	esi
	mov	esi, ecx

; 423  : 	Vector4Math->Divide(this,&f,this);

	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	mov	eax, DWORD PTR [ecx]
	mov	eax, DWORD PTR [eax+40]
	push	esi
	lea	edx, DWORD PTR _f$[esp+4]
	push	edx
	push	esi
	call	eax

; 424  : 	return *this;

	mov	eax, esi
	pop	esi

; 425  : }

	ret	4
??_0Vector4@@QAEAAU0@M@Z ENDP				; Vector4::operator/=
_TEXT	ENDS
PUBLIC	??DVector4@@QBE?AU0@ABU0@@Z			; Vector4::operator*
; Function compile flags: /Ogtpy
;	COMDAT ??DVector4@@QBE?AU0@ABU0@@Z
_TEXT	SEGMENT
___$ReturnUdt$ = 8					; size = 4
_v$ = 12						; size = 4
??DVector4@@QBE?AU0@ABU0@@Z PROC			; Vector4::operator*, COMDAT
; _this$ = ecx

; 427  : {

	push	esi

; 428  : 	return Vector4Math->Multiply((Vector4*)this,(Vector4*)&v);

	mov	esi, DWORD PTR _v$[esp]
	mov	eax, ecx
	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	mov	edx, DWORD PTR [ecx]
	push	esi
	mov	esi, DWORD PTR ___$ReturnUdt$[esp+4]
	push	eax
	mov	eax, DWORD PTR [edx+20]
	push	esi
	call	eax
	mov	eax, esi
	pop	esi

; 429  : }

	ret	8
??DVector4@@QBE?AU0@ABU0@@Z ENDP			; Vector4::operator*
_TEXT	ENDS
PUBLIC	??KVector4@@QBE?AU0@ABU0@@Z			; Vector4::operator/
; Function compile flags: /Ogtpy
;	COMDAT ??KVector4@@QBE?AU0@ABU0@@Z
_TEXT	SEGMENT
___$ReturnUdt$ = 8					; size = 4
_v$ = 12						; size = 4
??KVector4@@QBE?AU0@ABU0@@Z PROC			; Vector4::operator/, COMDAT
; _this$ = ecx

; 431  : {

	push	esi

; 432  : 	return Vector4Math->Divide((Vector4*)this,(Vector4*)&v);

	mov	esi, DWORD PTR _v$[esp]
	mov	eax, ecx
	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	mov	edx, DWORD PTR [ecx]
	push	esi
	mov	esi, DWORD PTR ___$ReturnUdt$[esp+4]
	push	eax
	mov	eax, DWORD PTR [edx+36]
	push	esi
	call	eax
	mov	eax, esi
	pop	esi

; 433  : }

	ret	8
??KVector4@@QBE?AU0@ABU0@@Z ENDP			; Vector4::operator/
_TEXT	ENDS
PUBLIC	??HVector4@@QBE?AU0@ABU0@@Z			; Vector4::operator+
; Function compile flags: /Ogtpy
;	COMDAT ??HVector4@@QBE?AU0@ABU0@@Z
_TEXT	SEGMENT
___$ReturnUdt$ = 8					; size = 4
_v$ = 12						; size = 4
??HVector4@@QBE?AU0@ABU0@@Z PROC			; Vector4::operator+, COMDAT
; _this$ = ecx

; 435  : {

	push	esi

; 436  : 	return Vector4Math->Add((Vector4*)this,(Vector4*)&v);

	mov	esi, DWORD PTR _v$[esp]
	mov	eax, ecx
	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	mov	edx, DWORD PTR [ecx]
	push	esi
	mov	esi, DWORD PTR ___$ReturnUdt$[esp+4]
	push	eax
	mov	eax, DWORD PTR [edx]
	push	esi
	call	eax
	mov	eax, esi
	pop	esi

; 437  : }

	ret	8
??HVector4@@QBE?AU0@ABU0@@Z ENDP			; Vector4::operator+
_TEXT	ENDS
PUBLIC	??GVector4@@QBE?AU0@ABU0@@Z			; Vector4::operator-
; Function compile flags: /Ogtpy
;	COMDAT ??GVector4@@QBE?AU0@ABU0@@Z
_TEXT	SEGMENT
___$ReturnUdt$ = 8					; size = 4
_v$ = 12						; size = 4
??GVector4@@QBE?AU0@ABU0@@Z PROC			; Vector4::operator-, COMDAT
; _this$ = ecx

; 439  : {

	push	esi

; 440  : 	return Vector4Math->Subtract((Vector4*)this,(Vector4*)&v);

	mov	esi, DWORD PTR _v$[esp]
	mov	eax, ecx
	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	mov	edx, DWORD PTR [ecx]
	push	esi
	mov	esi, DWORD PTR ___$ReturnUdt$[esp+4]
	push	eax
	mov	eax, DWORD PTR [edx+8]
	push	esi
	call	eax
	mov	eax, esi
	pop	esi

; 441  : }

	ret	8
??GVector4@@QBE?AU0@ABU0@@Z ENDP			; Vector4::operator-
_TEXT	ENDS
PUBLIC	??DVector4@@QBE?AU0@M@Z				; Vector4::operator*
; Function compile flags: /Ogtpy
;	COMDAT ??DVector4@@QBE?AU0@M@Z
_TEXT	SEGMENT
___$ReturnUdt$ = 8					; size = 4
_f$ = 12						; size = 4
??DVector4@@QBE?AU0@M@Z PROC				; Vector4::operator*, COMDAT
; _this$ = ecx

; 443  : {

	push	esi
	mov	eax, ecx

; 444  : 	return Vector4Math->Multiply((Vector4*)this,&f);

	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	mov	edx, DWORD PTR [ecx]
	lea	esi, DWORD PTR _f$[esp]
	push	esi
	mov	esi, DWORD PTR ___$ReturnUdt$[esp+4]
	push	eax
	mov	eax, DWORD PTR [edx+16]
	push	esi
	call	eax
	mov	eax, esi
	pop	esi

; 445  : }

	ret	8
??DVector4@@QBE?AU0@M@Z ENDP				; Vector4::operator*
_TEXT	ENDS
PUBLIC	??KVector4@@QBE?AU0@M@Z				; Vector4::operator/
; Function compile flags: /Ogtpy
;	COMDAT ??KVector4@@QBE?AU0@M@Z
_TEXT	SEGMENT
___$ReturnUdt$ = 8					; size = 4
_f$ = 12						; size = 4
??KVector4@@QBE?AU0@M@Z PROC				; Vector4::operator/, COMDAT
; _this$ = ecx

; 447  : {

	push	esi
	mov	eax, ecx

; 448  : 	return Vector4Math->Divide((Vector4*)this,&f);

	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	mov	edx, DWORD PTR [ecx]
	lea	esi, DWORD PTR _f$[esp]
	push	esi
	mov	esi, DWORD PTR ___$ReturnUdt$[esp+4]
	push	eax
	mov	eax, DWORD PTR [edx+32]
	push	esi
	call	eax
	mov	eax, esi
	pop	esi

; 449  : }

	ret	8
??KVector4@@QBE?AU0@M@Z ENDP				; Vector4::operator/
_TEXT	ENDS
PUBLIC	__real@bf800000
PUBLIC	?Inverse@Vector4@@QAE?AU1@XZ			; Vector4::Inverse
;	COMDAT __real@bf800000
CONST	SEGMENT
__real@bf800000 DD 0bf800000r			; -1
; Function compile flags: /Ogtpy
CONST	ENDS
;	COMDAT ?Inverse@Vector4@@QAE?AU1@XZ
_TEXT	SEGMENT
$T44591 = -4						; size = 4
___$ReturnUdt$ = 8					; size = 4
?Inverse@Vector4@@QAE?AU1@XZ PROC			; Vector4::Inverse, COMDAT
; _this$ = ecx

; 451  : {

	push	ecx

; 452  : 	return *this * -1;

	fld	DWORD PTR __real@bf800000
	push	esi
	mov	eax, ecx
	fstp	DWORD PTR $T44591[esp+8]
	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	mov	edx, DWORD PTR [ecx]
	lea	esi, DWORD PTR $T44591[esp+8]
	push	esi
	mov	esi, DWORD PTR ___$ReturnUdt$[esp+8]
	push	eax
	mov	eax, DWORD PTR [edx+16]
	push	esi
	call	eax
	mov	eax, esi
	pop	esi

; 453  : }

	pop	ecx
	ret	4
?Inverse@Vector4@@QAE?AU1@XZ ENDP			; Vector4::Inverse
; Function compile flags: /Ogtpy
_TEXT	ENDS
;	COMDAT ?Add@_Vector4MathFunctions@@UAEXPAUVector4@@00@Z
_TEXT	SEGMENT
$T44597 = -16						; size = 16
_src1$ = 8						; size = 4
_src2$ = 12						; size = 4
_dest$ = 16						; size = 4
?Add@_Vector4MathFunctions@@UAEXPAUVector4@@00@Z PROC	; _Vector4MathFunctions::Add, COMDAT
; _this$ = ecx

; 456  : {

	sub	esp, 16					; 00000010H

; 457  : 	*dest = Vector4(src1->X - src2->X,src1->Y - src2->Y,src1->Z - src2->Z,src1->W - src2->W);

	mov	eax, DWORD PTR _src1$[esp+12]
	fld	DWORD PTR [eax]
	mov	ecx, DWORD PTR _src2$[esp+12]
	fsub	DWORD PTR [ecx]
	fstp	DWORD PTR $T44597[esp+16]
	fld	DWORD PTR [eax+4]
	fsub	DWORD PTR [ecx+4]
	fstp	DWORD PTR $T44597[esp+20]
	mov	edx, DWORD PTR $T44597[esp+20]
	fld	DWORD PTR [eax+8]
	fsub	DWORD PTR [ecx+8]
	fstp	DWORD PTR $T44597[esp+24]
	fld	DWORD PTR [eax+12]
	mov	eax, DWORD PTR _dest$[esp+12]
	fsub	DWORD PTR [ecx+12]
	mov	ecx, DWORD PTR $T44597[esp+16]
	mov	DWORD PTR [eax], ecx
	mov	ecx, DWORD PTR $T44597[esp+24]
	mov	DWORD PTR [eax+4], edx
	fstp	DWORD PTR $T44597[esp+28]
	mov	edx, DWORD PTR $T44597[esp+28]
	mov	DWORD PTR [eax+8], ecx
	mov	DWORD PTR [eax+12], edx

; 458  : }

	add	esp, 16					; 00000010H
	ret	12					; 0000000cH
?Add@_Vector4MathFunctions@@UAEXPAUVector4@@00@Z ENDP	; _Vector4MathFunctions::Add
; Function compile flags: /Ogtpy
_TEXT	ENDS
;	COMDAT ?Subtract@_Vector4MathFunctions@@UAEXPAUVector4@@00@Z
_TEXT	SEGMENT
$T44608 = -16						; size = 16
_src1$ = 8						; size = 4
_src2$ = 12						; size = 4
_dest$ = 16						; size = 4
?Subtract@_Vector4MathFunctions@@UAEXPAUVector4@@00@Z PROC ; _Vector4MathFunctions::Subtract, COMDAT
; _this$ = ecx

; 460  : {

	sub	esp, 16					; 00000010H

; 461  : 	*dest = Vector4(src1->X - src2->X,src1->Y - src2->Y,src1->Z - src2->Z,src1->W - src2->W);

	mov	eax, DWORD PTR _src1$[esp+12]
	fld	DWORD PTR [eax]
	mov	ecx, DWORD PTR _src2$[esp+12]
	fsub	DWORD PTR [ecx]
	fstp	DWORD PTR $T44608[esp+16]
	fld	DWORD PTR [eax+4]
	fsub	DWORD PTR [ecx+4]
	fstp	DWORD PTR $T44608[esp+20]
	mov	edx, DWORD PTR $T44608[esp+20]
	fld	DWORD PTR [eax+8]
	fsub	DWORD PTR [ecx+8]
	fstp	DWORD PTR $T44608[esp+24]
	fld	DWORD PTR [eax+12]
	mov	eax, DWORD PTR _dest$[esp+12]
	fsub	DWORD PTR [ecx+12]
	mov	ecx, DWORD PTR $T44608[esp+16]
	mov	DWORD PTR [eax], ecx
	mov	ecx, DWORD PTR $T44608[esp+24]
	mov	DWORD PTR [eax+4], edx
	fstp	DWORD PTR $T44608[esp+28]
	mov	edx, DWORD PTR $T44608[esp+28]
	mov	DWORD PTR [eax+8], ecx
	mov	DWORD PTR [eax+12], edx

; 462  : }

	add	esp, 16					; 00000010H
	ret	12					; 0000000cH
?Subtract@_Vector4MathFunctions@@UAEXPAUVector4@@00@Z ENDP ; _Vector4MathFunctions::Subtract
; Function compile flags: /Ogtpy
_TEXT	ENDS
;	COMDAT ?Multiply@_Vector4MathFunctions@@UAEXPAUVector4@@00@Z
_TEXT	SEGMENT
$T44619 = -16						; size = 16
_src1$ = 8						; size = 4
_src2$ = 12						; size = 4
_dest$ = 16						; size = 4
?Multiply@_Vector4MathFunctions@@UAEXPAUVector4@@00@Z PROC ; _Vector4MathFunctions::Multiply, COMDAT
; _this$ = ecx

; 464  : {

	sub	esp, 16					; 00000010H

; 465  : 	*dest = Vector4(src1->X * src2->X,src1->Y * src2->Y,src1->Z * src2->Z,src1->W * src2->W);

	mov	eax, DWORD PTR _src1$[esp+12]
	fld	DWORD PTR [eax]
	mov	ecx, DWORD PTR _src2$[esp+12]
	fmul	DWORD PTR [ecx]
	fstp	DWORD PTR $T44619[esp+16]
	fld	DWORD PTR [eax+4]
	fmul	DWORD PTR [ecx+4]
	fstp	DWORD PTR $T44619[esp+20]
	mov	edx, DWORD PTR $T44619[esp+20]
	fld	DWORD PTR [eax+8]
	fmul	DWORD PTR [ecx+8]
	fstp	DWORD PTR $T44619[esp+24]
	fld	DWORD PTR [eax+12]
	mov	eax, DWORD PTR _dest$[esp+12]
	fmul	DWORD PTR [ecx+12]
	mov	ecx, DWORD PTR $T44619[esp+16]
	mov	DWORD PTR [eax], ecx
	mov	ecx, DWORD PTR $T44619[esp+24]
	mov	DWORD PTR [eax+4], edx
	fstp	DWORD PTR $T44619[esp+28]
	mov	edx, DWORD PTR $T44619[esp+28]
	mov	DWORD PTR [eax+8], ecx
	mov	DWORD PTR [eax+12], edx

; 466  : }

	add	esp, 16					; 00000010H
	ret	12					; 0000000cH
?Multiply@_Vector4MathFunctions@@UAEXPAUVector4@@00@Z ENDP ; _Vector4MathFunctions::Multiply
; Function compile flags: /Ogtpy
_TEXT	ENDS
;	COMDAT ?Divide@_Vector4MathFunctions@@UAEXPAUVector4@@00@Z
_TEXT	SEGMENT
$T44630 = -16						; size = 16
_src1$ = 8						; size = 4
_src2$ = 12						; size = 4
_dest$ = 16						; size = 4
?Divide@_Vector4MathFunctions@@UAEXPAUVector4@@00@Z PROC ; _Vector4MathFunctions::Divide, COMDAT
; _this$ = ecx

; 468  : {

	sub	esp, 16					; 00000010H

; 469  : 	*dest = Vector4(src1->X / src2->X,src1->Y / src2->Y,src1->Z / src2->Z,src1->W / src2->W);

	mov	eax, DWORD PTR _src1$[esp+12]
	fld	DWORD PTR [eax]
	mov	ecx, DWORD PTR _src2$[esp+12]
	fdiv	DWORD PTR [ecx]
	fstp	DWORD PTR $T44630[esp+16]
	fld	DWORD PTR [eax+4]
	fdiv	DWORD PTR [ecx+4]
	fstp	DWORD PTR $T44630[esp+20]
	fld	DWORD PTR [eax+8]
	fdiv	DWORD PTR [ecx+8]
	mov	edx, DWORD PTR $T44630[esp+20]
	fstp	DWORD PTR $T44630[esp+24]
	fld	DWORD PTR [eax+12]
	fdiv	DWORD PTR [ecx+12]
	mov	eax, DWORD PTR _dest$[esp+12]
	mov	ecx, DWORD PTR $T44630[esp+16]
	mov	DWORD PTR [eax], ecx
	mov	ecx, DWORD PTR $T44630[esp+24]
	mov	DWORD PTR [eax+4], edx
	mov	DWORD PTR [eax+8], ecx
	fstp	DWORD PTR $T44630[esp+28]
	mov	edx, DWORD PTR $T44630[esp+28]
	mov	DWORD PTR [eax+12], edx

; 470  : }

	add	esp, 16					; 00000010H
	ret	12					; 0000000cH
?Divide@_Vector4MathFunctions@@UAEXPAUVector4@@00@Z ENDP ; _Vector4MathFunctions::Divide
; Function compile flags: /Ogtpy
_TEXT	ENDS
;	COMDAT ?Multiply@_Vector4MathFunctions@@UAEXPAUVector4@@PAM0@Z
_TEXT	SEGMENT
$T44641 = -16						; size = 16
_src1$ = 8						; size = 4
_src2$ = 12						; size = 4
_dest$ = 16						; size = 4
?Multiply@_Vector4MathFunctions@@UAEXPAUVector4@@PAM0@Z PROC ; _Vector4MathFunctions::Multiply, COMDAT
; _this$ = ecx

; 472  : {

	sub	esp, 16					; 00000010H

; 473  : 	*dest = Vector4(src1->X * *src2,src1->Y * *src2,src1->Z * *src2,src1->W * *src2);

	mov	eax, DWORD PTR _src1$[esp+12]
	fld	DWORD PTR [eax]
	mov	ecx, DWORD PTR _src2$[esp+12]
	fmul	DWORD PTR [ecx]
	fstp	DWORD PTR $T44641[esp+16]
	fld	DWORD PTR [eax+4]
	fmul	DWORD PTR [ecx]
	fstp	DWORD PTR $T44641[esp+20]
	mov	edx, DWORD PTR $T44641[esp+20]
	fld	DWORD PTR [eax+8]
	fmul	DWORD PTR [ecx]
	fstp	DWORD PTR $T44641[esp+24]
	fld	DWORD PTR [eax+12]
	mov	eax, DWORD PTR _dest$[esp+12]
	fmul	DWORD PTR [ecx]
	mov	ecx, DWORD PTR $T44641[esp+16]
	mov	DWORD PTR [eax], ecx
	mov	ecx, DWORD PTR $T44641[esp+24]
	mov	DWORD PTR [eax+4], edx
	fstp	DWORD PTR $T44641[esp+28]
	mov	edx, DWORD PTR $T44641[esp+28]
	mov	DWORD PTR [eax+8], ecx
	mov	DWORD PTR [eax+12], edx

; 474  : }

	add	esp, 16					; 00000010H
	ret	12					; 0000000cH
?Multiply@_Vector4MathFunctions@@UAEXPAUVector4@@PAM0@Z ENDP ; _Vector4MathFunctions::Multiply
; Function compile flags: /Ogtpy
_TEXT	ENDS
;	COMDAT ?Divide@_Vector4MathFunctions@@UAEXPAUVector4@@PAM0@Z
_TEXT	SEGMENT
$T44652 = -16						; size = 16
_src1$ = 8						; size = 4
_src2$ = 12						; size = 4
_dest$ = 16						; size = 4
?Divide@_Vector4MathFunctions@@UAEXPAUVector4@@PAM0@Z PROC ; _Vector4MathFunctions::Divide, COMDAT
; _this$ = ecx

; 476  : {

	sub	esp, 16					; 00000010H

; 477  : 	*dest = Vector4(src1->X / *src2,src1->Y / *src2,src1->Z / *src2,src1->W / *src2);

	fld1
	mov	eax, DWORD PTR _src2$[esp+12]
	fdiv	DWORD PTR [eax]
	mov	eax, DWORD PTR _src1$[esp+12]
	fld	DWORD PTR [eax]
	fmul	ST(0), ST(1)
	fstp	DWORD PTR $T44652[esp+16]
	mov	ecx, DWORD PTR $T44652[esp+16]
	fld	DWORD PTR [eax+4]
	fmul	ST(0), ST(1)
	fstp	DWORD PTR $T44652[esp+20]
	mov	edx, DWORD PTR $T44652[esp+20]
	fld	DWORD PTR [eax+8]
	fmul	ST(0), ST(1)
	fstp	DWORD PTR $T44652[esp+24]
	fmul	DWORD PTR [eax+12]
	mov	eax, DWORD PTR _dest$[esp+12]
	mov	DWORD PTR [eax], ecx
	mov	ecx, DWORD PTR $T44652[esp+24]
	mov	DWORD PTR [eax+4], edx
	fstp	DWORD PTR $T44652[esp+28]
	mov	edx, DWORD PTR $T44652[esp+28]
	mov	DWORD PTR [eax+8], ecx
	mov	DWORD PTR [eax+12], edx

; 478  : }

	add	esp, 16					; 00000010H
	ret	12					; 0000000cH
?Divide@_Vector4MathFunctions@@UAEXPAUVector4@@PAM0@Z ENDP ; _Vector4MathFunctions::Divide
; Function compile flags: /Ogtpy
_TEXT	ENDS
;	COMDAT ?Add@_Vector4MathFunctions@@UAE?AUVector4@@PAU2@0@Z
_TEXT	SEGMENT
___$ReturnUdt$ = 8					; size = 4
_src1$ = 12						; size = 4
_src2$ = 16						; size = 4
?Add@_Vector4MathFunctions@@UAE?AUVector4@@PAU2@0@Z PROC ; _Vector4MathFunctions::Add, COMDAT
; _this$ = ecx

; 482  : 	Vector4 temp;

	fldz

; 483  : 	this->Add(src1,src2,&temp);

	mov	edx, DWORD PTR _src2$[esp-4]
	mov	eax, DWORD PTR [ecx]
	mov	eax, DWORD PTR [eax+4]
	push	esi
	mov	esi, DWORD PTR ___$ReturnUdt$[esp]
	push	esi
	fst	DWORD PTR [esi]
	push	edx
	fst	DWORD PTR [esi+4]
	mov	edx, DWORD PTR _src1$[esp+8]
	fst	DWORD PTR [esi+8]
	push	edx
	fstp	DWORD PTR [esi+12]
	call	eax

; 484  : 	return temp;

	mov	eax, esi
	pop	esi

; 485  : }

	ret	12					; 0000000cH
?Add@_Vector4MathFunctions@@UAE?AUVector4@@PAU2@0@Z ENDP ; _Vector4MathFunctions::Add
; Function compile flags: /Ogtpy
_TEXT	ENDS
;	COMDAT ?Subtract@_Vector4MathFunctions@@UAE?AUVector4@@PAU2@0@Z
_TEXT	SEGMENT
___$ReturnUdt$ = 8					; size = 4
_src1$ = 12						; size = 4
_src2$ = 16						; size = 4
?Subtract@_Vector4MathFunctions@@UAE?AUVector4@@PAU2@0@Z PROC ; _Vector4MathFunctions::Subtract, COMDAT
; _this$ = ecx

; 488  : 	Vector4 temp;

	fldz

; 489  : 	this->Subtract(src1,src2,&temp);

	mov	edx, DWORD PTR _src2$[esp-4]
	mov	eax, DWORD PTR [ecx]
	mov	eax, DWORD PTR [eax+12]
	push	esi
	mov	esi, DWORD PTR ___$ReturnUdt$[esp]
	push	esi
	fst	DWORD PTR [esi]
	push	edx
	fst	DWORD PTR [esi+4]
	mov	edx, DWORD PTR _src1$[esp+8]
	fst	DWORD PTR [esi+8]
	push	edx
	fstp	DWORD PTR [esi+12]
	call	eax

; 490  : 	return temp;

	mov	eax, esi
	pop	esi

; 491  : }

	ret	12					; 0000000cH
?Subtract@_Vector4MathFunctions@@UAE?AUVector4@@PAU2@0@Z ENDP ; _Vector4MathFunctions::Subtract
; Function compile flags: /Ogtpy
_TEXT	ENDS
;	COMDAT ?Multiply@_Vector4MathFunctions@@UAE?AUVector4@@PAU2@0@Z
_TEXT	SEGMENT
___$ReturnUdt$ = 8					; size = 4
_src1$ = 12						; size = 4
_src2$ = 16						; size = 4
?Multiply@_Vector4MathFunctions@@UAE?AUVector4@@PAU2@0@Z PROC ; _Vector4MathFunctions::Multiply, COMDAT
; _this$ = ecx

; 494  : 	Vector4 temp;

	fldz

; 495  : 	this->Multiply(src1,src2,&temp);

	mov	edx, DWORD PTR _src2$[esp-4]
	mov	eax, DWORD PTR [ecx]
	mov	eax, DWORD PTR [eax+28]
	push	esi
	mov	esi, DWORD PTR ___$ReturnUdt$[esp]
	push	esi
	fst	DWORD PTR [esi]
	push	edx
	fst	DWORD PTR [esi+4]
	mov	edx, DWORD PTR _src1$[esp+8]
	fst	DWORD PTR [esi+8]
	push	edx
	fstp	DWORD PTR [esi+12]
	call	eax

; 496  : 	return temp;

	mov	eax, esi
	pop	esi

; 497  : }

	ret	12					; 0000000cH
?Multiply@_Vector4MathFunctions@@UAE?AUVector4@@PAU2@0@Z ENDP ; _Vector4MathFunctions::Multiply
; Function compile flags: /Ogtpy
_TEXT	ENDS
;	COMDAT ?Divide@_Vector4MathFunctions@@UAE?AUVector4@@PAU2@0@Z
_TEXT	SEGMENT
___$ReturnUdt$ = 8					; size = 4
_src1$ = 12						; size = 4
_src2$ = 16						; size = 4
?Divide@_Vector4MathFunctions@@UAE?AUVector4@@PAU2@0@Z PROC ; _Vector4MathFunctions::Divide, COMDAT
; _this$ = ecx

; 500  : 	Vector4 temp;

	fldz

; 501  : 	this->Divide(src1,src2,&temp);

	mov	edx, DWORD PTR _src2$[esp-4]
	mov	eax, DWORD PTR [ecx]
	mov	eax, DWORD PTR [eax+44]
	push	esi
	mov	esi, DWORD PTR ___$ReturnUdt$[esp]
	push	esi
	fst	DWORD PTR [esi]
	push	edx
	fst	DWORD PTR [esi+4]
	mov	edx, DWORD PTR _src1$[esp+8]
	fst	DWORD PTR [esi+8]
	push	edx
	fstp	DWORD PTR [esi+12]
	call	eax

; 502  : 	return temp;

	mov	eax, esi
	pop	esi

; 503  : }

	ret	12					; 0000000cH
?Divide@_Vector4MathFunctions@@UAE?AUVector4@@PAU2@0@Z ENDP ; _Vector4MathFunctions::Divide
; Function compile flags: /Ogtpy
_TEXT	ENDS
;	COMDAT ?Multiply@_Vector4MathFunctions@@UAE?AUVector4@@PAU2@PAM@Z
_TEXT	SEGMENT
___$ReturnUdt$ = 8					; size = 4
_src1$ = 12						; size = 4
_src2$ = 16						; size = 4
?Multiply@_Vector4MathFunctions@@UAE?AUVector4@@PAU2@PAM@Z PROC ; _Vector4MathFunctions::Multiply, COMDAT
; _this$ = ecx

; 506  : 	Vector4 temp;

	fldz

; 507  : 	this->Multiply(src1,src2,&temp);

	mov	edx, DWORD PTR _src2$[esp-4]
	mov	eax, DWORD PTR [ecx]
	mov	eax, DWORD PTR [eax+24]
	push	esi
	mov	esi, DWORD PTR ___$ReturnUdt$[esp]
	push	esi
	fst	DWORD PTR [esi]
	push	edx
	fst	DWORD PTR [esi+4]
	mov	edx, DWORD PTR _src1$[esp+8]
	fst	DWORD PTR [esi+8]
	push	edx
	fstp	DWORD PTR [esi+12]
	call	eax

; 508  : 	return temp;

	mov	eax, esi
	pop	esi

; 509  : }

	ret	12					; 0000000cH
?Multiply@_Vector4MathFunctions@@UAE?AUVector4@@PAU2@PAM@Z ENDP ; _Vector4MathFunctions::Multiply
; Function compile flags: /Ogtpy
_TEXT	ENDS
;	COMDAT ?Divide@_Vector4MathFunctions@@UAE?AUVector4@@PAU2@PAM@Z
_TEXT	SEGMENT
___$ReturnUdt$ = 8					; size = 4
_src1$ = 12						; size = 4
_src2$ = 16						; size = 4
?Divide@_Vector4MathFunctions@@UAE?AUVector4@@PAU2@PAM@Z PROC ; _Vector4MathFunctions::Divide, COMDAT
; _this$ = ecx

; 512  : 	Vector4 temp;

	fldz

; 513  : 	this->Divide(src1,src2,&temp);

	mov	edx, DWORD PTR _src2$[esp-4]
	mov	eax, DWORD PTR [ecx]
	mov	eax, DWORD PTR [eax+40]
	push	esi
	mov	esi, DWORD PTR ___$ReturnUdt$[esp]
	push	esi
	fst	DWORD PTR [esi]
	push	edx
	fst	DWORD PTR [esi+4]
	mov	edx, DWORD PTR _src1$[esp+8]
	fst	DWORD PTR [esi+8]
	push	edx
	fstp	DWORD PTR [esi+12]
	call	eax

; 514  : 	return temp;

	mov	eax, esi
	pop	esi

; 515  : }

	ret	12					; 0000000cH
?Divide@_Vector4MathFunctions@@UAE?AUVector4@@PAU2@PAM@Z ENDP ; _Vector4MathFunctions::Divide
_TEXT	ENDS
PUBLIC	?Add@_Vector4MathFunctionsSSE@@UAEXPAUVector4@@00@Z ; _Vector4MathFunctionsSSE::Add
; Function compile flags: /Ogtpy
;	COMDAT ?Add@_Vector4MathFunctionsSSE@@UAEXPAUVector4@@00@Z
_TEXT	SEGMENT
_src1$ = 8						; size = 4
_src2$ = 12						; size = 4
_dest$ = 16						; size = 4
?Add@_Vector4MathFunctionsSSE@@UAEXPAUVector4@@00@Z PROC ; _Vector4MathFunctionsSSE::Add, COMDAT
; _this$ = ecx

; 519  : {

	push	ebp
	mov	ebp, esp
	and	esp, -16				; fffffff0H

; 520  : 	__m128 a = _mm_loadu_ps((float*)src1);

	mov	ecx, DWORD PTR _src1$[ebp]

; 521  : 	__m128 b = _mm_loadu_ps((float*)src2);

	mov	edx, DWORD PTR _src2$[ebp]
	movups	xmm0, XMMWORD PTR [ecx]
	movups	xmm1, XMMWORD PTR [edx]

; 522  : 	__m128 res = _mm_add_ps(a,b);
; 523  : 	_mm_storeu_ps((float*)dest,res);

	mov	eax, DWORD PTR _dest$[ebp]
	addps	xmm0, xmm1
	movups	XMMWORD PTR [eax], xmm0

; 524  : }

	mov	esp, ebp
	pop	ebp
	ret	12					; 0000000cH
?Add@_Vector4MathFunctionsSSE@@UAEXPAUVector4@@00@Z ENDP ; _Vector4MathFunctionsSSE::Add
_TEXT	ENDS
PUBLIC	?Subtract@_Vector4MathFunctionsSSE@@UAEXPAUVector4@@00@Z ; _Vector4MathFunctionsSSE::Subtract
; Function compile flags: /Ogtpy
;	COMDAT ?Subtract@_Vector4MathFunctionsSSE@@UAEXPAUVector4@@00@Z
_TEXT	SEGMENT
_src1$ = 8						; size = 4
_src2$ = 12						; size = 4
_dest$ = 16						; size = 4
?Subtract@_Vector4MathFunctionsSSE@@UAEXPAUVector4@@00@Z PROC ; _Vector4MathFunctionsSSE::Subtract, COMDAT
; _this$ = ecx

; 526  : {

	push	ebp
	mov	ebp, esp
	and	esp, -16				; fffffff0H

; 527  : 	__m128 a = _mm_loadu_ps((float*)src1);

	mov	ecx, DWORD PTR _src1$[ebp]

; 528  : 	__m128 b = _mm_loadu_ps((float*)src2);

	mov	edx, DWORD PTR _src2$[ebp]
	movups	xmm0, XMMWORD PTR [ecx]
	movups	xmm1, XMMWORD PTR [edx]

; 529  : 	__m128 res = _mm_sub_ps(a,b);
; 530  : 	_mm_storeu_ps((float*)dest,res);

	mov	eax, DWORD PTR _dest$[ebp]
	subps	xmm0, xmm1
	movups	XMMWORD PTR [eax], xmm0

; 531  : }

	mov	esp, ebp
	pop	ebp
	ret	12					; 0000000cH
?Subtract@_Vector4MathFunctionsSSE@@UAEXPAUVector4@@00@Z ENDP ; _Vector4MathFunctionsSSE::Subtract
_TEXT	ENDS
PUBLIC	?Multiply@_Vector4MathFunctionsSSE@@UAEXPAUVector4@@00@Z ; _Vector4MathFunctionsSSE::Multiply
; Function compile flags: /Ogtpy
;	COMDAT ?Multiply@_Vector4MathFunctionsSSE@@UAEXPAUVector4@@00@Z
_TEXT	SEGMENT
_src1$ = 8						; size = 4
_src2$ = 12						; size = 4
_dest$ = 16						; size = 4
?Multiply@_Vector4MathFunctionsSSE@@UAEXPAUVector4@@00@Z PROC ; _Vector4MathFunctionsSSE::Multiply, COMDAT
; _this$ = ecx

; 533  : {

	push	ebp
	mov	ebp, esp
	and	esp, -16				; fffffff0H

; 534  : 	__m128 a = _mm_loadu_ps((float*)src1);

	mov	ecx, DWORD PTR _src1$[ebp]

; 535  : 	__m128 b = _mm_loadu_ps((float*)src2);

	mov	edx, DWORD PTR _src2$[ebp]
	movups	xmm0, XMMWORD PTR [ecx]
	movups	xmm1, XMMWORD PTR [edx]

; 536  : 	__m128 res = _mm_mul_ps(a,b);
; 537  : 	_mm_storeu_ps((float*)dest,res);

	mov	eax, DWORD PTR _dest$[ebp]
	mulps	xmm0, xmm1
	movups	XMMWORD PTR [eax], xmm0

; 538  : }

	mov	esp, ebp
	pop	ebp
	ret	12					; 0000000cH
?Multiply@_Vector4MathFunctionsSSE@@UAEXPAUVector4@@00@Z ENDP ; _Vector4MathFunctionsSSE::Multiply
_TEXT	ENDS
PUBLIC	?Divide@_Vector4MathFunctionsSSE@@UAEXPAUVector4@@00@Z ; _Vector4MathFunctionsSSE::Divide
; Function compile flags: /Ogtpy
;	COMDAT ?Divide@_Vector4MathFunctionsSSE@@UAEXPAUVector4@@00@Z
_TEXT	SEGMENT
_src1$ = 8						; size = 4
_src2$ = 12						; size = 4
_dest$ = 16						; size = 4
?Divide@_Vector4MathFunctionsSSE@@UAEXPAUVector4@@00@Z PROC ; _Vector4MathFunctionsSSE::Divide, COMDAT
; _this$ = ecx

; 540  : {

	push	ebp
	mov	ebp, esp
	and	esp, -16				; fffffff0H

; 541  : 	__m128 a = _mm_loadu_ps((float*)src1);

	mov	ecx, DWORD PTR _src1$[ebp]

; 542  : 	__m128 b = _mm_loadu_ps((float*)src2);

	mov	edx, DWORD PTR _src2$[ebp]
	movups	xmm0, XMMWORD PTR [ecx]
	movups	xmm1, XMMWORD PTR [edx]

; 543  : 	__m128 res = _mm_div_ps(a,b);
; 544  : 	_mm_storeu_ps((float*)dest,res);

	mov	eax, DWORD PTR _dest$[ebp]
	divps	xmm0, xmm1
	movups	XMMWORD PTR [eax], xmm0

; 545  : }

	mov	esp, ebp
	pop	ebp
	ret	12					; 0000000cH
?Divide@_Vector4MathFunctionsSSE@@UAEXPAUVector4@@00@Z ENDP ; _Vector4MathFunctionsSSE::Divide
_TEXT	ENDS
PUBLIC	?Multiply@_Vector4MathFunctionsSSE@@UAEXPAUVector4@@PAM0@Z ; _Vector4MathFunctionsSSE::Multiply
; Function compile flags: /Ogtpy
;	COMDAT ?Multiply@_Vector4MathFunctionsSSE@@UAEXPAUVector4@@PAM0@Z
_TEXT	SEGMENT
_src1$ = 8						; size = 4
_src2$ = 12						; size = 4
_dest$ = 16						; size = 4
?Multiply@_Vector4MathFunctionsSSE@@UAEXPAUVector4@@PAM0@Z PROC ; _Vector4MathFunctionsSSE::Multiply, COMDAT
; _this$ = ecx

; 547  : {

	push	ebp
	mov	ebp, esp
	and	esp, -16				; fffffff0H

; 548  : 	__m128 a = _mm_loadu_ps((float*)src1);
; 549  : 	__m128 b = _mm_load_ps1((float*)src2);

	mov	ecx, DWORD PTR _src2$[ebp]
	movss	xmm0, DWORD PTR [ecx]
	mov	edx, DWORD PTR _src1$[ebp]
	movups	xmm1, XMMWORD PTR [edx]

; 550  : 	__m128 res = _mm_mul_ps(a,b);
; 551  : 	_mm_storeu_ps((float*)dest,res);

	mov	eax, DWORD PTR _dest$[ebp]
	shufps	xmm0, xmm0, 0
	mulps	xmm0, xmm1
	movups	XMMWORD PTR [eax], xmm0

; 552  : }

	mov	esp, ebp
	pop	ebp
	ret	12					; 0000000cH
?Multiply@_Vector4MathFunctionsSSE@@UAEXPAUVector4@@PAM0@Z ENDP ; _Vector4MathFunctionsSSE::Multiply
_TEXT	ENDS
PUBLIC	?Divide@_Vector4MathFunctionsSSE@@UAEXPAUVector4@@PAM0@Z ; _Vector4MathFunctionsSSE::Divide
; Function compile flags: /Ogtpy
;	COMDAT ?Divide@_Vector4MathFunctionsSSE@@UAEXPAUVector4@@PAM0@Z
_TEXT	SEGMENT
_src1$ = 8						; size = 4
_src2$ = 12						; size = 4
_dest$ = 16						; size = 4
?Divide@_Vector4MathFunctionsSSE@@UAEXPAUVector4@@PAM0@Z PROC ; _Vector4MathFunctionsSSE::Divide, COMDAT
; _this$ = ecx

; 554  : {

	push	ebp
	mov	ebp, esp
	and	esp, -16				; fffffff0H

; 555  : 	__m128 a = _mm_loadu_ps((float*)src1);
; 556  : 	__m128 b = _mm_load_ps1((float*)src2);

	mov	ecx, DWORD PTR _src2$[ebp]
	movss	xmm0, DWORD PTR [ecx]
	mov	edx, DWORD PTR _src1$[ebp]
	movups	xmm1, XMMWORD PTR [edx]

; 557  : 	__m128 res = _mm_mul_ps(a,b);
; 558  : 	_mm_storeu_ps((float*)dest,res);

	mov	eax, DWORD PTR _dest$[ebp]
	shufps	xmm0, xmm0, 0
	mulps	xmm0, xmm1
	movups	XMMWORD PTR [eax], xmm0

; 559  : }

	mov	esp, ebp
	pop	ebp
	ret	12					; 0000000cH
?Divide@_Vector4MathFunctionsSSE@@UAEXPAUVector4@@PAM0@Z ENDP ; _Vector4MathFunctionsSSE::Divide
_TEXT	ENDS
PUBLIC	??_FVector4@@QAEXXZ				; Vector4::`default constructor closure'
; Function compile flags: /Ogtpy
;	COMDAT ??_FVector4@@QAEXXZ
_TEXT	SEGMENT
??_FVector4@@QAEXXZ PROC				; Vector4::`default constructor closure', COMDAT
; _this$ = ecx
	fldz
	fst	DWORD PTR [ecx]
	fst	DWORD PTR [ecx+4]
	fst	DWORD PTR [ecx+8]
	fstp	DWORD PTR [ecx+12]
	ret	0
??_FVector4@@QAEXXZ ENDP				; Vector4::`default constructor closure'
_TEXT	ENDS
PUBLIC	??_H@YGXPAXIHP6EPAX0@Z@Z			; `vector constructor iterator'
; Function compile flags: /Ogtpy
;	COMDAT ??_H@YGXPAXIHP6EPAX0@Z@Z
_TEXT	SEGMENT
___t$ = 8						; size = 4
___s$ = 12						; size = 4
___n$ = 16						; size = 4
___f$ = 20						; size = 4
??_H@YGXPAXIHP6EPAX0@Z@Z PROC				; `vector constructor iterator', COMDAT
	push	edi
	mov	edi, DWORD PTR ___n$[esp]
	sub	edi, 1
	js	SHORT $LN1@vector
	push	ebx
	mov	ebx, DWORD PTR ___f$[esp+4]
	push	ebp
	mov	ebp, DWORD PTR ___s$[esp+8]
	push	esi
	mov	esi, DWORD PTR ___t$[esp+12]
	npad	7
$LL2@vector:
	mov	ecx, esi
	call	ebx
	add	esi, ebp
	sub	edi, 1
	jns	SHORT $LL2@vector
	pop	esi
	pop	ebp
	pop	ebx
$LN1@vector:
	pop	edi
	ret	16					; 00000010H
??_H@YGXPAXIHP6EPAX0@Z@Z ENDP				; `vector constructor iterator'
_TEXT	ENDS
PUBLIC	??XMatrix4@@QAEAAU0@AAU0@@Z			; Matrix4::operator*=
; Function compile flags: /Ogtpy
;	COMDAT ??XMatrix4@@QAEAAU0@AAU0@@Z
_TEXT	SEGMENT
_m$ = 8							; size = 4
??XMatrix4@@QAEAAU0@AAU0@@Z PROC			; Matrix4::operator*=, COMDAT
; _this$ = ecx

; 570  : {

	mov	eax, ecx

; 571  : 	return *this;
; 572  : }

	ret	4
??XMatrix4@@QAEAAU0@AAU0@@Z ENDP			; Matrix4::operator*=
_TEXT	ENDS
PUBLIC	??YMatrix4@@QAEAAU0@AAU0@@Z			; Matrix4::operator+=
; Function compile flags: /Ogtpy
;	COMDAT ??YMatrix4@@QAEAAU0@AAU0@@Z
_TEXT	SEGMENT
_m$ = 8							; size = 4
??YMatrix4@@QAEAAU0@AAU0@@Z PROC			; Matrix4::operator+=, COMDAT
; _this$ = ecx

; 575  : {

	push	ebx
	push	esi
	push	edi

; 576  : 	this->Row[0] += m.Row[0];

	mov	edi, DWORD PTR _m$[esp+8]
	mov	esi, ecx
	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	mov	eax, DWORD PTR [ecx]
	mov	edx, DWORD PTR [eax+4]
	push	esi
	push	edi
	push	esi
	call	edx

; 577  : 	this->Row[1] += m.Row[1];

	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	mov	edx, DWORD PTR [ecx]
	lea	eax, DWORD PTR [esi+16]
	push	eax
	lea	ebx, DWORD PTR [edi+16]
	push	ebx
	push	eax
	mov	eax, DWORD PTR [edx+4]
	call	eax

; 578  : 	this->Row[2] += m.Row[2];

	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	mov	edx, DWORD PTR [ecx]
	lea	eax, DWORD PTR [esi+32]
	push	eax
	lea	ebx, DWORD PTR [edi+32]
	push	ebx
	push	eax
	mov	eax, DWORD PTR [edx+4]
	call	eax

; 579  : 	this->Row[3] += m.Row[3];

	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	mov	edx, DWORD PTR [ecx]
	lea	eax, DWORD PTR [esi+48]
	push	eax
	add	edi, 48					; 00000030H
	push	edi
	push	eax
	mov	eax, DWORD PTR [edx+4]
	call	eax
	pop	edi

; 580  : 	return *this;

	mov	eax, esi
	pop	esi
	pop	ebx

; 581  : }

	ret	4
??YMatrix4@@QAEAAU0@AAU0@@Z ENDP			; Matrix4::operator+=
_TEXT	ENDS
PUBLIC	??ZMatrix4@@QAEAAU0@AAU0@@Z			; Matrix4::operator-=
; Function compile flags: /Ogtpy
;	COMDAT ??ZMatrix4@@QAEAAU0@AAU0@@Z
_TEXT	SEGMENT
_m$ = 8							; size = 4
??ZMatrix4@@QAEAAU0@AAU0@@Z PROC			; Matrix4::operator-=, COMDAT
; _this$ = ecx

; 583  : {

	push	ebx
	push	esi
	push	edi

; 584  : 	this->Row[0] -= m.Row[0];

	mov	edi, DWORD PTR _m$[esp+8]
	mov	esi, ecx
	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	mov	eax, DWORD PTR [ecx]
	mov	edx, DWORD PTR [eax+4]
	push	esi
	push	edi
	push	esi
	call	edx

; 585  : 	this->Row[1] -= m.Row[1];

	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	mov	edx, DWORD PTR [ecx]
	lea	eax, DWORD PTR [esi+16]
	push	eax
	lea	ebx, DWORD PTR [edi+16]
	push	ebx
	push	eax
	mov	eax, DWORD PTR [edx+4]
	call	eax

; 586  : 	this->Row[2] -= m.Row[2];

	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	mov	edx, DWORD PTR [ecx]
	lea	eax, DWORD PTR [esi+32]
	push	eax
	lea	ebx, DWORD PTR [edi+32]
	push	ebx
	push	eax
	mov	eax, DWORD PTR [edx+4]
	call	eax

; 587  : 	this->Row[3] -= m.Row[3];

	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	mov	edx, DWORD PTR [ecx]
	lea	eax, DWORD PTR [esi+48]
	push	eax
	add	edi, 48					; 00000030H
	push	edi
	push	eax
	mov	eax, DWORD PTR [edx+4]
	call	eax
	pop	edi

; 588  : 	return *this;

	mov	eax, esi
	pop	esi
	pop	ebx

; 589  : }

	ret	4
??ZMatrix4@@QAEAAU0@AAU0@@Z ENDP			; Matrix4::operator-=
_TEXT	ENDS
PUBLIC	??XMatrix4@@QAEAAU0@M@Z				; Matrix4::operator*=
; Function compile flags: /Ogtpy
;	COMDAT ??XMatrix4@@QAEAAU0@M@Z
_TEXT	SEGMENT
$T44774 = -4						; size = 4
$T44769 = -4						; size = 4
$T44764 = -4						; size = 4
$T44779 = 8						; size = 4
_f$ = 8							; size = 4
??XMatrix4@@QAEAAU0@M@Z PROC				; Matrix4::operator*=, COMDAT
; _this$ = ecx

; 591  : {

	push	ecx

; 592  : 	this->Row[0] *= f;

	fld	DWORD PTR _f$[esp]
	push	esi
	push	edi
	fstp	DWORD PTR $T44764[esp+12]
	mov	esi, ecx
	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	mov	eax, DWORD PTR [ecx]
	mov	eax, DWORD PTR [eax+24]
	push	esi
	lea	edx, DWORD PTR $T44764[esp+16]
	push	edx
	push	esi
	call	eax

; 593  : 	this->Row[1] *= f;

	fld	DWORD PTR _f$[esp+8]
	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	fstp	DWORD PTR $T44769[esp+12]
	mov	edx, DWORD PTR [ecx]
	lea	eax, DWORD PTR [esi+16]
	push	eax
	lea	edi, DWORD PTR $T44769[esp+16]
	push	edi
	push	eax
	mov	eax, DWORD PTR [edx+24]
	call	eax

; 594  : 	this->Row[2] *= f;

	fld	DWORD PTR _f$[esp+8]
	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	fstp	DWORD PTR $T44774[esp+12]
	mov	edx, DWORD PTR [ecx]
	lea	eax, DWORD PTR [esi+32]
	push	eax
	lea	edi, DWORD PTR $T44774[esp+16]
	push	edi
	push	eax
	mov	eax, DWORD PTR [edx+24]
	call	eax

; 595  : 	this->Row[3] *= f;

	fld	DWORD PTR _f$[esp+8]
	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	fstp	DWORD PTR $T44779[esp+8]
	mov	edx, DWORD PTR [ecx]
	lea	eax, DWORD PTR [esi+48]
	push	eax
	lea	edi, DWORD PTR $T44779[esp+12]
	push	edi
	push	eax
	mov	eax, DWORD PTR [edx+24]
	call	eax
	pop	edi

; 596  : 	return *this;

	mov	eax, esi
	pop	esi

; 597  : }

	pop	ecx
	ret	4
??XMatrix4@@QAEAAU0@M@Z ENDP				; Matrix4::operator*=
_TEXT	ENDS
PUBLIC	??_0Matrix4@@QAEAAU0@M@Z			; Matrix4::operator/=
; Function compile flags: /Ogtpy
;	COMDAT ??_0Matrix4@@QAEAAU0@M@Z
_TEXT	SEGMENT
$T44796 = -4						; size = 4
$T44791 = -4						; size = 4
$T44786 = -4						; size = 4
$T44801 = 8						; size = 4
_f$ = 8							; size = 4
??_0Matrix4@@QAEAAU0@M@Z PROC				; Matrix4::operator/=, COMDAT
; _this$ = ecx

; 599  : {

	push	ecx

; 600  : 	this->Row[0] /= f;

	fld	DWORD PTR _f$[esp]
	push	esi
	push	edi
	fstp	DWORD PTR $T44786[esp+12]
	mov	esi, ecx
	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	mov	eax, DWORD PTR [ecx]
	mov	eax, DWORD PTR [eax+40]
	push	esi
	lea	edx, DWORD PTR $T44786[esp+16]
	push	edx
	push	esi
	call	eax

; 601  : 	this->Row[1] /= f;

	fld	DWORD PTR _f$[esp+8]
	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	fstp	DWORD PTR $T44791[esp+12]
	mov	edx, DWORD PTR [ecx]
	lea	eax, DWORD PTR [esi+16]
	push	eax
	lea	edi, DWORD PTR $T44791[esp+16]
	push	edi
	push	eax
	mov	eax, DWORD PTR [edx+40]
	call	eax

; 602  : 	this->Row[2] /= f;

	fld	DWORD PTR _f$[esp+8]
	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	fstp	DWORD PTR $T44796[esp+12]
	mov	edx, DWORD PTR [ecx]
	lea	eax, DWORD PTR [esi+32]
	push	eax
	lea	edi, DWORD PTR $T44796[esp+16]
	push	edi
	push	eax
	mov	eax, DWORD PTR [edx+40]
	call	eax

; 603  : 	this->Row[3] /= f;

	fld	DWORD PTR _f$[esp+8]
	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	fstp	DWORD PTR $T44801[esp+8]
	mov	edx, DWORD PTR [ecx]
	lea	eax, DWORD PTR [esi+48]
	push	eax
	lea	edi, DWORD PTR $T44801[esp+12]
	push	edi
	push	eax
	mov	eax, DWORD PTR [edx+40]
	call	eax
	pop	edi

; 604  : 	return *this;

	mov	eax, esi
	pop	esi

; 605  : }

	pop	ecx
	ret	4
??_0Matrix4@@QAEAAU0@M@Z ENDP				; Matrix4::operator/=
_TEXT	ENDS
PUBLIC	?Determinant@Matrix4@@QAEMXZ			; Matrix4::Determinant
; Function compile flags: /Ogtpy
;	COMDAT ?Determinant@Matrix4@@QAEMXZ
_TEXT	SEGMENT
?Determinant@Matrix4@@QAEMXZ PROC			; Matrix4::Determinant, COMDAT
; _this$ = ecx

; 667  : 	float det;
; 668  : 	det =	(Row[0].X * Row[1].Y - Row[0].Y * Row[1].X) * (Row[2].Z * Row[3].W - Row[2].W * Row[3].Z);

	fld	DWORD PTR [ecx+40]
	fmul	DWORD PTR [ecx+60]
	fld	DWORD PTR [ecx+56]
	fmul	DWORD PTR [ecx+44]
	fsubp	ST(1), ST(0)
	fld	DWORD PTR [ecx]
	fmul	DWORD PTR [ecx+20]
	fld	DWORD PTR [ecx+16]
	fmul	DWORD PTR [ecx+4]
	fsubp	ST(1), ST(0)
	fmulp	ST(1), ST(0)

; 669  : 	det -=	(Row[0].X * Row[1].Z - Row[0].Z * Row[1].X) * (Row[2].Y * Row[3].W - Row[2].W * Row[3].Y);

	fld	DWORD PTR [ecx+24]
	fmul	DWORD PTR [ecx]
	fld	DWORD PTR [ecx+8]
	fmul	DWORD PTR [ecx+16]
	fsubp	ST(1), ST(0)
	fld	DWORD PTR [ecx+36]
	fmul	DWORD PTR [ecx+60]
	fld	DWORD PTR [ecx+44]
	fmul	DWORD PTR [ecx+52]
	fsubp	ST(1), ST(0)
	fmulp	ST(1), ST(0)
	fsubp	ST(1), ST(0)

; 670  : 	det +=	(Row[0].X * Row[1].W - Row[0].W * Row[1].X) * (Row[2].Y * Row[3].Z - Row[2].Z * Row[3].Y);

	fld	DWORD PTR [ecx+56]
	fmul	DWORD PTR [ecx+36]
	fld	DWORD PTR [ecx+40]
	fmul	DWORD PTR [ecx+52]
	fsubp	ST(1), ST(0)
	fld	DWORD PTR [ecx]
	fmul	DWORD PTR [ecx+28]
	fld	DWORD PTR [ecx+16]
	fmul	DWORD PTR [ecx+12]
	fsubp	ST(1), ST(0)
	fmulp	ST(1), ST(0)
	faddp	ST(1), ST(0)

; 671  : 	det +=	(Row[0].Y * Row[1].Z - Row[0].Z * Row[1].Y) * (Row[2].X * Row[3].W - Row[2].W * Row[3].X);

	fld	DWORD PTR [ecx+24]
	fmul	DWORD PTR [ecx+4]
	fld	DWORD PTR [ecx+8]
	fmul	DWORD PTR [ecx+20]
	fsubp	ST(1), ST(0)
	fld	DWORD PTR [ecx+32]
	fmul	DWORD PTR [ecx+60]
	fld	DWORD PTR [ecx+44]
	fmul	DWORD PTR [ecx+48]
	fsubp	ST(1), ST(0)
	fmulp	ST(1), ST(0)
	faddp	ST(1), ST(0)

; 672  : 	det -=	(Row[0].Y * Row[1].W - Row[0].W * Row[1].Y) * (Row[2].X * Row[3].Z - Row[2].Z * Row[3].X);

	fld	DWORD PTR [ecx+56]
	fmul	DWORD PTR [ecx+32]
	fld	DWORD PTR [ecx+40]
	fmul	DWORD PTR [ecx+48]
	fsubp	ST(1), ST(0)
	fld	DWORD PTR [ecx+4]
	fmul	DWORD PTR [ecx+28]
	fld	DWORD PTR [ecx+20]
	fmul	DWORD PTR [ecx+12]
	fsubp	ST(1), ST(0)
	fmulp	ST(1), ST(0)
	fsubp	ST(1), ST(0)

; 673  : 	det +=	(Row[0].Z * Row[1].W - Row[0].W * Row[1].Z) * (Row[2].X * Row[3].Y - Row[2].Y * Row[3].X);

	fld	DWORD PTR [ecx+52]
	fmul	DWORD PTR [ecx+32]
	fld	DWORD PTR [ecx+48]
	fmul	DWORD PTR [ecx+36]
	fsubp	ST(1), ST(0)
	fld	DWORD PTR [ecx+8]
	fmul	DWORD PTR [ecx+28]
	fld	DWORD PTR [ecx+24]
	fmul	DWORD PTR [ecx+12]
	fsubp	ST(1), ST(0)
	fmulp	ST(1), ST(0)
	faddp	ST(1), ST(0)

; 674  : 	return det;
; 675  : }

	ret	0
?Determinant@Matrix4@@QAEMXZ ENDP			; Matrix4::Determinant
_TEXT	ENDS
PUBLIC	??0Matrix2@@QAE@XZ				; Matrix2::Matrix2
; Function compile flags: /Ogtpy
;	COMDAT ??0Matrix2@@QAE@XZ
_TEXT	SEGMENT
$T44809 = -8						; size = 8
$T44808 = -8						; size = 8
??0Matrix2@@QAE@XZ PROC					; Matrix2::Matrix2, COMDAT
; _this$ = ecx

; 703  : 	Row[0] = Vector2();

	mov	edx, DWORD PTR $T44808[esp+4]
	mov	eax, ecx
	mov	ecx, DWORD PTR $T44808[esp]
	mov	DWORD PTR [eax], ecx

; 704  : 	Row[1] = Vector2();

	mov	ecx, DWORD PTR $T44809[esp]
	mov	DWORD PTR [eax+4], edx
	mov	edx, DWORD PTR $T44809[esp+4]
	sub	esp, 8
	mov	DWORD PTR [eax+8], ecx
	mov	DWORD PTR [eax+12], edx

; 705  : }

	add	esp, 8
	ret	0
??0Matrix2@@QAE@XZ ENDP					; Matrix2::Matrix2
_TEXT	ENDS
PUBLIC	??0Matrix2@@QAE@VVector2@@0@Z			; Matrix2::Matrix2
; Function compile flags: /Ogtpy
;	COMDAT ??0Matrix2@@QAE@VVector2@@0@Z
_TEXT	SEGMENT
_r1$ = 8						; size = 8
_r2$ = 16						; size = 8
??0Matrix2@@QAE@VVector2@@0@Z PROC			; Matrix2::Matrix2, COMDAT
; _this$ = ecx

; 708  : 	Row[0] = r1;

	mov	edx, DWORD PTR _r1$[esp]
	mov	eax, ecx
	mov	ecx, DWORD PTR _r1$[esp-4]
	mov	DWORD PTR [eax], ecx

; 709  : 	Row[1] = r2;

	mov	ecx, DWORD PTR _r2$[esp-4]
	mov	DWORD PTR [eax+4], edx
	mov	edx, DWORD PTR _r2$[esp]
	mov	DWORD PTR [eax+8], ecx
	mov	DWORD PTR [eax+12], edx

; 710  : }

	ret	16					; 00000010H
??0Matrix2@@QAE@VVector2@@0@Z ENDP			; Matrix2::Matrix2
_TEXT	ENDS
PUBLIC	?Determinant@Matrix2@@QAEMXZ			; Matrix2::Determinant
; Function compile flags: /Ogtpy
;	COMDAT ?Determinant@Matrix2@@QAEMXZ
_TEXT	SEGMENT
?Determinant@Matrix2@@QAEMXZ PROC			; Matrix2::Determinant, COMDAT
; _this$ = ecx

; 713  : 	return (Row[0].X * Row[1].Y) - (Row[0].Y * Row[1].X);

	fld	DWORD PTR [ecx+12]
	fmul	DWORD PTR [ecx]
	fld	DWORD PTR [ecx+8]
	fmul	DWORD PTR [ecx+4]
	fsubp	ST(1), ST(0)

; 714  : }

	ret	0
?Determinant@Matrix2@@QAEMXZ ENDP			; Matrix2::Determinant
_TEXT	ENDS
PUBLIC	?Inverse@Matrix2@@QAE?AU1@XZ			; Matrix2::Inverse
; Function compile flags: /Ogtpy
;	COMDAT ?Inverse@Matrix2@@QAE?AU1@XZ
_TEXT	SEGMENT
$T44941 = -16						; size = 8
$T44940 = -16						; size = 8
$T44893 = -16						; size = 8
$T44892 = -16						; size = 8
_temp$ = -16						; size = 16
___$ReturnUdt$ = 8					; size = 4
?Inverse@Matrix2@@QAE?AU1@XZ PROC			; Matrix2::Inverse, COMDAT
; _this$ = ecx

; 717  : 	float s = Determinant();

	fld	DWORD PTR [ecx]

; 718  : 	if (s == 0.0f) return Matrix2();

	mov	edx, DWORD PTR $T44892[esp+4]
	fmul	DWORD PTR [ecx+12]
	sub	esp, 16					; 00000010H
	fld	DWORD PTR [ecx+8]
	fmul	DWORD PTR [ecx+4]
	fsubp	ST(1), ST(0)
	fldz
	fucomp	ST(1)
	fnstsw	ax
	test	ah, 68					; 00000044H
	jp	SHORT $LN1@Inverse
	mov	eax, DWORD PTR ___$ReturnUdt$[esp+12]
	fstp	ST(0)
	mov	ecx, DWORD PTR $T44892[esp+16]
	mov	DWORD PTR [eax], ecx
	mov	ecx, DWORD PTR $T44893[esp+16]
	mov	DWORD PTR [eax+4], edx
	mov	edx, DWORD PTR $T44893[esp+20]

; 721  : 	temp.Row[0].X = s * Row[1].Y;
; 722  : 	temp.Row[0].Y = s * (-Row[0].Y);
; 723  : 	temp.Row[1].X = s * (-Row[1].X);
; 724  : 	temp.Row[1].Y = s * Row[0].X;
; 725  : 	return temp;

	mov	DWORD PTR [eax+8], ecx
	mov	DWORD PTR [eax+12], edx

; 726  : }

	add	esp, 16					; 00000010H
	ret	4
$LN1@Inverse:

; 719  : 	s = 1/s;

	fld1

; 720  : 	Matrix2 temp;

	mov	eax, DWORD PTR $T44940[esp+16]
	fdivrp	ST(1), ST(0)
	mov	DWORD PTR _temp$[esp+16], eax
	mov	eax, DWORD PTR $T44941[esp+16]
	mov	DWORD PTR _temp$[esp+20], edx
	mov	edx, DWORD PTR $T44941[esp+20]
	mov	DWORD PTR _temp$[esp+24], eax

; 721  : 	temp.Row[0].X = s * Row[1].Y;
; 722  : 	temp.Row[0].Y = s * (-Row[0].Y);
; 723  : 	temp.Row[1].X = s * (-Row[1].X);
; 724  : 	temp.Row[1].Y = s * Row[0].X;
; 725  : 	return temp;

	mov	eax, DWORD PTR ___$ReturnUdt$[esp+12]
	mov	DWORD PTR _temp$[esp+28], edx
	fld	ST(0)
	fmul	DWORD PTR [ecx+12]
	fstp	DWORD PTR _temp$[esp+16]
	fld	DWORD PTR [ecx+4]
	fchs
	fmul	ST(0), ST(1)
	fstp	DWORD PTR _temp$[esp+20]
	mov	edx, DWORD PTR _temp$[esp+20]
	fld	DWORD PTR [ecx+8]
	fchs
	fmul	ST(0), ST(1)
	fstp	DWORD PTR _temp$[esp+24]
	fmul	DWORD PTR [ecx]
	mov	ecx, DWORD PTR _temp$[esp+16]
	mov	DWORD PTR [eax], ecx
	mov	ecx, DWORD PTR _temp$[esp+24]
	mov	DWORD PTR [eax+4], edx
	fstp	DWORD PTR _temp$[esp+28]
	mov	edx, DWORD PTR _temp$[esp+28]
	mov	DWORD PTR [eax+8], ecx
	mov	DWORD PTR [eax+12], edx

; 726  : }

	add	esp, 16					; 00000010H
	ret	4
?Inverse@Matrix2@@QAE?AU1@XZ ENDP			; Matrix2::Inverse
_TEXT	ENDS
PUBLIC	__TI2?AVbad_alloc@std@@
PUBLIC	??_C@_0DN@JHKGIIJF@C?3?2Program?5Files?2Microsoft?5Visua@ ; `string'
PUBLIC	?allocate@?$_DebugHeapAllocator@D@std@@QAAPADIPBX@Z ; std::_DebugHeapAllocator<char>::allocate
PUBLIC	__CTA2?AVbad_alloc@std@@
PUBLIC	__CT??_R0?AVbad_alloc@std@@@8??0bad_alloc@std@@QAE@ABV01@@Z12
PUBLIC	??0bad_alloc@std@@QAE@ABV01@@Z			; std::bad_alloc::bad_alloc
PUBLIC	__CT??_R0?AVexception@std@@@8??0exception@std@@QAE@ABV01@@Z12
EXTRN	??_U@YAPAXIABU_DebugHeapTag_t@std@@PADH@Z:PROC	; operator new[]
EXTRN	?_DebugHeapTag_func@std@@YAABU_DebugHeapTag_t@1@XZ:PROC ; std::_DebugHeapTag_func
EXTRN	__CxxThrowException@8:PROC
EXTRN	??0exception@std@@QAE@ABV01@@Z:PROC		; std::exception::exception
;	COMDAT __CT??_R0?AVexception@std@@@8??0exception@std@@QAE@ABV01@@Z12
; File c:\program files\microsoft visual studio 8\vc\include\exception
xdata$x	SEGMENT
__CT??_R0?AVexception@std@@@8??0exception@std@@QAE@ABV01@@Z12 DD 00H
	DD	FLAT:??_R0?AVexception@std@@@8
	DD	00H
	DD	0ffffffffH
	ORG $+4
	DD	0cH
	DD	FLAT:??0exception@std@@QAE@ABV01@@Z
xdata$x	ENDS
;	COMDAT __CT??_R0?AVbad_alloc@std@@@8??0bad_alloc@std@@QAE@ABV01@@Z12
xdata$x	SEGMENT
__CT??_R0?AVbad_alloc@std@@@8??0bad_alloc@std@@QAE@ABV01@@Z12 DD 00H
	DD	FLAT:??_R0?AVbad_alloc@std@@@8
	DD	00H
	DD	0ffffffffH
	ORG $+4
	DD	0cH
	DD	FLAT:??0bad_alloc@std@@QAE@ABV01@@Z
xdata$x	ENDS
;	COMDAT __CTA2?AVbad_alloc@std@@
xdata$x	SEGMENT
__CTA2?AVbad_alloc@std@@ DD 02H
	DD	FLAT:__CT??_R0?AVbad_alloc@std@@@8??0bad_alloc@std@@QAE@ABV01@@Z12
	DD	FLAT:__CT??_R0?AVexception@std@@@8??0exception@std@@QAE@ABV01@@Z12
xdata$x	ENDS
;	COMDAT __TI2?AVbad_alloc@std@@
xdata$x	SEGMENT
__TI2?AVbad_alloc@std@@ DD 00H
	DD	FLAT:??1bad_alloc@std@@UAE@XZ
	DD	00H
	DD	FLAT:__CTA2?AVbad_alloc@std@@
xdata$x	ENDS
;	COMDAT ??_C@_0DN@JHKGIIJF@C?3?2Program?5Files?2Microsoft?5Visua@
CONST	SEGMENT
??_C@_0DN@JHKGIIJF@C?3?2Program?5Files?2Microsoft?5Visua@ DB 'C:\Program '
	DB	'Files\Microsoft Visual Studio 8\VC\include\xdebug', 00H ; `string'
; Function compile flags: /Ogtpy
; File c:\program files\microsoft visual studio 8\vc\include\xdebug
CONST	ENDS
;	COMDAT ?allocate@?$_DebugHeapAllocator@D@std@@QAAPADIPBX@Z
_TEXT	SEGMENT
$T44967 = -12						; size = 12
_this$ = 8						; size = 4
$T44973 = 12						; size = 4
__Count$ = 12						; size = 4
___formal$ = 16						; size = 4
?allocate@?$_DebugHeapAllocator@D@std@@QAAPADIPBX@Z PROC ; std::_DebugHeapAllocator<char>::allocate, COMDAT

; 79   : 		{	// check for integer overflow

	sub	esp, 12					; 0000000cH
	push	esi

; 80   : 		if (_Count <= 0)

	mov	esi, DWORD PTR __Count$[esp+12]
	test	esi, esi
	ja	SHORT $LN3@allocate

; 81   : 			_Count = 0;

	xor	esi, esi
$LN1@allocate:

; 84   : 
; 85   : 			// allocate array of _Count elements, ignore hint
; 86   : 		return ((_Ty *)_NEW_CRT char[_Count * sizeof(_Ty)]);

	push	86					; 00000056H
	push	OFFSET ??_C@_0DN@JHKGIIJF@C?3?2Program?5Files?2Microsoft?5Visua@
	call	?_DebugHeapTag_func@std@@YAABU_DebugHeapTag_t@1@XZ ; std::_DebugHeapTag_func
	push	eax
	push	esi
	call	??_U@YAPAXIABU_DebugHeapTag_t@std@@PADH@Z ; operator new[]
	add	esp, 16					; 00000010H
	pop	esi

; 87   : 		}

	add	esp, 12					; 0000000cH
	ret	0
$LN3@allocate:

; 82   : 		else if (((size_t)(-1) / _Count) < sizeof(_Ty))

	or	eax, -1
	xor	edx, edx
	div	esi
	cmp	eax, 1
	jae	SHORT $LN1@allocate

; 83   : 			_THROW_NCEE(std::bad_alloc, NULL);

	lea	eax, DWORD PTR $T44973[esp+12]
	push	eax
	lea	ecx, DWORD PTR $T44967[esp+20]
	mov	DWORD PTR $T44973[esp+16], 0
	call	??0exception@std@@QAE@ABQBD@Z		; std::exception::exception
	push	OFFSET __TI2?AVbad_alloc@std@@
	lea	ecx, DWORD PTR $T44967[esp+20]
	push	ecx
	mov	DWORD PTR $T44967[esp+24], OFFSET ??_7bad_alloc@std@@6B@
	call	__CxxThrowException@8
$LN9@allocate:
$LN8@allocate:
	int	3
?allocate@?$_DebugHeapAllocator@D@std@@QAAPADIPBX@Z ENDP ; std::_DebugHeapAllocator<char>::allocate
_TEXT	ENDS
PUBLIC	?allocate@?$_DebugHeapAllocator@D@std@@QAEPADI@Z ; std::_DebugHeapAllocator<char>::allocate
; Function compile flags: /Ogtpy
;	COMDAT ?allocate@?$_DebugHeapAllocator@D@std@@QAEPADI@Z
_TEXT	SEGMENT
$T44979 = -12						; size = 12
$T44984 = 8						; size = 4
__Count$ = 8						; size = 4
?allocate@?$_DebugHeapAllocator@D@std@@QAEPADI@Z PROC	; std::_DebugHeapAllocator<char>::allocate, COMDAT
; _this$ = ecx

; 90   : 		{	// check for integer overflow

	sub	esp, 12					; 0000000cH
	push	esi

; 91   : 		if (_Count <= 0)

	mov	esi, DWORD PTR __Count$[esp+12]
	test	esi, esi
	ja	SHORT $LN3@allocate@2

; 92   : 			_Count = 0;

	xor	esi, esi
$LN1@allocate@2:

; 95   : 
; 96   : 			// allocate array of _Count elements
; 97   : 		return ((_Ty *)_NEW_CRT char[_Count * sizeof(_Ty)]);

	push	97					; 00000061H
	push	OFFSET ??_C@_0DN@JHKGIIJF@C?3?2Program?5Files?2Microsoft?5Visua@
	call	?_DebugHeapTag_func@std@@YAABU_DebugHeapTag_t@1@XZ ; std::_DebugHeapTag_func
	push	eax
	push	esi
	call	??_U@YAPAXIABU_DebugHeapTag_t@std@@PADH@Z ; operator new[]
	add	esp, 16					; 00000010H
	pop	esi

; 98   : 		}

	add	esp, 12					; 0000000cH
	ret	4
$LN3@allocate@2:

; 93   : 		else if (((size_t)(-1) / _Count) < sizeof(_Ty))

	or	eax, -1
	xor	edx, edx
	div	esi
	cmp	eax, 1
	jae	SHORT $LN1@allocate@2

; 94   : 			_THROW_NCEE(std::bad_alloc, NULL);

	lea	eax, DWORD PTR $T44984[esp+12]
	push	eax
	lea	ecx, DWORD PTR $T44979[esp+20]
	mov	DWORD PTR $T44984[esp+16], 0
	call	??0exception@std@@QAE@ABQBD@Z		; std::exception::exception
	push	OFFSET __TI2?AVbad_alloc@std@@
	lea	ecx, DWORD PTR $T44979[esp+20]
	push	ecx
	mov	DWORD PTR $T44979[esp+24], OFFSET ??_7bad_alloc@std@@6B@
	call	__CxxThrowException@8
$LN9@allocate@2:
$LN8@allocate@2:
	int	3
?allocate@?$_DebugHeapAllocator@D@std@@QAEPADI@Z ENDP	; std::_DebugHeapAllocator<char>::allocate
; Function compile flags: /Ogtpy
_TEXT	ENDS
;	COMDAT ??0bad_alloc@std@@QAE@ABV01@@Z
_TEXT	SEGMENT
___that$ = 8						; size = 4
??0bad_alloc@std@@QAE@ABV01@@Z PROC			; std::bad_alloc::bad_alloc, COMDAT
; _this$ = ecx
	mov	eax, DWORD PTR ___that$[esp-4]
	push	esi
	push	eax
	mov	esi, ecx
	call	??0exception@std@@QAE@ABV01@@Z		; std::exception::exception
	mov	DWORD PTR [esi], OFFSET ??_7bad_alloc@std@@6B@
	mov	eax, esi
	pop	esi
	ret	4
??0bad_alloc@std@@QAE@ABV01@@Z ENDP			; std::bad_alloc::bad_alloc
_TEXT	ENDS
PUBLIC	??0?$allocator@D@std@@QAE@XZ			; std::allocator<char>::allocator<char>
; Function compile flags: /Ogtpy
; File c:\program files\microsoft visual studio 8\vc\include\xmemory
;	COMDAT ??0?$allocator@D@std@@QAE@XZ
_TEXT	SEGMENT
??0?$allocator@D@std@@QAE@XZ PROC			; std::allocator<char>::allocator<char>, COMDAT
; _this$ = ecx

; 120  : 	allocator() _THROW0()

	mov	eax, ecx

; 121  : 		{	// construct default allocator (do nothing)
; 122  : 		}

	ret	0
??0?$allocator@D@std@@QAE@XZ ENDP			; std::allocator<char>::allocator<char>
_TEXT	ENDS
PUBLIC	??0?$allocator@D@std@@QAE@ABV01@@Z		; std::allocator<char>::allocator<char>
; Function compile flags: /Ogtpy
;	COMDAT ??0?$allocator@D@std@@QAE@ABV01@@Z
_TEXT	SEGMENT
___formal$ = 8						; size = 4
??0?$allocator@D@std@@QAE@ABV01@@Z PROC			; std::allocator<char>::allocator<char>, COMDAT
; _this$ = ecx

; 124  : 	allocator(const allocator<_Ty>&) _THROW0()

	mov	eax, ecx

; 125  : 		{	// construct by copying (do nothing)
; 126  : 		}

	ret	4
??0?$allocator@D@std@@QAE@ABV01@@Z ENDP			; std::allocator<char>::allocator<char>
_TEXT	ENDS
PUBLIC	??$_DebugHeapDelete@X@std@@YAXPAX@Z		; std::_DebugHeapDelete<void>
EXTRN	_free:PROC
; Function compile flags: /Ogtpy
; File c:\program files\microsoft visual studio 8\vc\include\xdebug
;	COMDAT ??$_DebugHeapDelete@X@std@@YAXPAX@Z
_TEXT	SEGMENT
__Ptr$ = 8						; size = 4
??$_DebugHeapDelete@X@std@@YAXPAX@Z PROC		; std::_DebugHeapDelete<void>, COMDAT

; 56   : 	if (_Ptr != 0)

	mov	eax, DWORD PTR __Ptr$[esp-4]
	test	eax, eax
	je	SHORT $LN1@DebugHeapD

; 57   : 		{	// worth deleting
; 58   : 		_Ptr->~_Ty();
; 59   : 		// delete as _NORMAL_BLOCK, not _CRT_BLOCK, since we might have
; 60   : 		// facets allocated by normal new.
; 61   : 		free(_Ptr);

	mov	DWORD PTR __Ptr$[esp-4], eax
	jmp	_free
$LN1@DebugHeapD:

; 62   : 		}
; 63   : 	}

	ret	0
??$_DebugHeapDelete@X@std@@YAXPAX@Z ENDP		; std::_DebugHeapDelete<void>
_TEXT	ENDS
PUBLIC	??_7_Vector4MathFunctionsSSE@@6B@		; _Vector4MathFunctionsSSE::`vftable'
PUBLIC	??0_Vector4MathFunctionsSSE@@QAE@XZ		; _Vector4MathFunctionsSSE::_Vector4MathFunctionsSSE
PUBLIC	??_R4_Vector4MathFunctionsSSE@@6B@		; _Vector4MathFunctionsSSE::`RTTI Complete Object Locator'
PUBLIC	??_R0?AV_Vector4MathFunctionsSSE@@@8		; _Vector4MathFunctionsSSE `RTTI Type Descriptor'
PUBLIC	??_R3_Vector4MathFunctionsSSE@@8		; _Vector4MathFunctionsSSE::`RTTI Class Hierarchy Descriptor'
PUBLIC	??_R2_Vector4MathFunctionsSSE@@8		; _Vector4MathFunctionsSSE::`RTTI Base Class Array'
PUBLIC	??_R1A@?0A@EA@_Vector4MathFunctionsSSE@@8	; _Vector4MathFunctionsSSE::`RTTI Base Class Descriptor at (0,-1,0,64)'
;	COMDAT ??_R1A@?0A@EA@_Vector4MathFunctionsSSE@@8
rdata$r	SEGMENT
??_R1A@?0A@EA@_Vector4MathFunctionsSSE@@8 DD FLAT:??_R0?AV_Vector4MathFunctionsSSE@@@8 ; _Vector4MathFunctionsSSE::`RTTI Base Class Descriptor at (0,-1,0,64)'
	DD	01H
	DD	00H
	DD	0ffffffffH
	DD	00H
	DD	040H
	DD	FLAT:??_R3_Vector4MathFunctionsSSE@@8
rdata$r	ENDS
;	COMDAT ??_R2_Vector4MathFunctionsSSE@@8
rdata$r	SEGMENT
??_R2_Vector4MathFunctionsSSE@@8 DD FLAT:??_R1A@?0A@EA@_Vector4MathFunctionsSSE@@8 ; _Vector4MathFunctionsSSE::`RTTI Base Class Array'
	DD	FLAT:??_R1A@?0A@EA@_Vector4MathFunctions@@8
rdata$r	ENDS
;	COMDAT ??_R3_Vector4MathFunctionsSSE@@8
rdata$r	SEGMENT
??_R3_Vector4MathFunctionsSSE@@8 DD 00H			; _Vector4MathFunctionsSSE::`RTTI Class Hierarchy Descriptor'
	DD	00H
	DD	02H
	DD	FLAT:??_R2_Vector4MathFunctionsSSE@@8
rdata$r	ENDS
;	COMDAT ??_R0?AV_Vector4MathFunctionsSSE@@@8
_DATA	SEGMENT
??_R0?AV_Vector4MathFunctionsSSE@@@8 DD FLAT:??_7type_info@@6B@ ; _Vector4MathFunctionsSSE `RTTI Type Descriptor'
	DD	00H
	DB	'.?AV_Vector4MathFunctionsSSE@@', 00H
_DATA	ENDS
;	COMDAT ??_R4_Vector4MathFunctionsSSE@@6B@
rdata$r	SEGMENT
??_R4_Vector4MathFunctionsSSE@@6B@ DD 00H		; _Vector4MathFunctionsSSE::`RTTI Complete Object Locator'
	DD	00H
	DD	00H
	DD	FLAT:??_R0?AV_Vector4MathFunctionsSSE@@@8
	DD	FLAT:??_R3_Vector4MathFunctionsSSE@@8
rdata$r	ENDS
;	COMDAT ??_7_Vector4MathFunctionsSSE@@6B@
CONST	SEGMENT
??_7_Vector4MathFunctionsSSE@@6B@ DD FLAT:??_R4_Vector4MathFunctionsSSE@@6B@ ; _Vector4MathFunctionsSSE::`vftable'
	DD	FLAT:?Add@_Vector4MathFunctions@@UAE?AUVector4@@PAU2@0@Z
	DD	FLAT:?Add@_Vector4MathFunctionsSSE@@UAEXPAUVector4@@00@Z
	DD	FLAT:?Subtract@_Vector4MathFunctions@@UAE?AUVector4@@PAU2@0@Z
	DD	FLAT:?Subtract@_Vector4MathFunctionsSSE@@UAEXPAUVector4@@00@Z
	DD	FLAT:?Multiply@_Vector4MathFunctions@@UAE?AUVector4@@PAU2@PAM@Z
	DD	FLAT:?Multiply@_Vector4MathFunctions@@UAE?AUVector4@@PAU2@0@Z
	DD	FLAT:?Multiply@_Vector4MathFunctionsSSE@@UAEXPAUVector4@@PAM0@Z
	DD	FLAT:?Multiply@_Vector4MathFunctionsSSE@@UAEXPAUVector4@@00@Z
	DD	FLAT:?Divide@_Vector4MathFunctions@@UAE?AUVector4@@PAU2@PAM@Z
	DD	FLAT:?Divide@_Vector4MathFunctions@@UAE?AUVector4@@PAU2@0@Z
	DD	FLAT:?Divide@_Vector4MathFunctionsSSE@@UAEXPAUVector4@@PAM0@Z
	DD	FLAT:?Divide@_Vector4MathFunctionsSSE@@UAEXPAUVector4@@00@Z
; Function compile flags: /Ogtpy
CONST	ENDS
;	COMDAT ??0_Vector4MathFunctionsSSE@@QAE@XZ
_TEXT	SEGMENT
??0_Vector4MathFunctionsSSE@@QAE@XZ PROC		; _Vector4MathFunctionsSSE::_Vector4MathFunctionsSSE, COMDAT
; _this$ = ecx
	mov	eax, ecx
	mov	DWORD PTR [eax], OFFSET ??_7_Vector4MathFunctionsSSE@@6B@
	ret	0
??0_Vector4MathFunctionsSSE@@QAE@XZ ENDP		; _Vector4MathFunctionsSSE::_Vector4MathFunctionsSSE
_TEXT	ENDS
PUBLIC	??0Matrix4@@QAE@XZ				; Matrix4::Matrix4
; Function compile flags: /Ogtpy
; File d:\source code\stgm\engine_math.cpp
;	COMDAT ??0Matrix4@@QAE@XZ
_TEXT	SEGMENT
$T45013 = -16						; size = 16
$T45012 = -16						; size = 16
$T45011 = -16						; size = 16
$T45010 = -16						; size = 16
??0Matrix4@@QAE@XZ PROC					; Matrix4::Matrix4, COMDAT
; _this$ = ecx

; 563  : {

	sub	esp, 16					; 00000010H
	fldz
	mov	eax, ecx
	fst	DWORD PTR [eax]
	fst	DWORD PTR [eax+4]
	fst	DWORD PTR [eax+8]
	fst	DWORD PTR [eax+12]
	fst	DWORD PTR [eax+16]
	fst	DWORD PTR [eax+20]
	fst	DWORD PTR [eax+24]
	fst	DWORD PTR [eax+28]
	fst	DWORD PTR [eax+32]
	fst	DWORD PTR [eax+36]
	fst	DWORD PTR [eax+40]
	fst	DWORD PTR [eax+44]
	fst	DWORD PTR [eax+48]
	fst	DWORD PTR [eax+52]
	fst	DWORD PTR [eax+56]
	fst	DWORD PTR [eax+60]

; 564  : 	this->Row[0] = Vector4(0,0,0,0);

	fst	DWORD PTR $T45010[esp+16]
	mov	ecx, DWORD PTR $T45010[esp+16]
	fst	DWORD PTR $T45010[esp+20]
	mov	edx, DWORD PTR $T45010[esp+20]
	fst	DWORD PTR $T45010[esp+24]
	mov	DWORD PTR [eax], ecx
	fst	DWORD PTR $T45010[esp+28]
	mov	ecx, DWORD PTR $T45010[esp+24]

; 565  : 	this->Row[1] = Vector4(0,0,0,0);

	fst	DWORD PTR $T45011[esp+16]
	mov	DWORD PTR [eax+4], edx
	fst	DWORD PTR $T45011[esp+20]
	mov	edx, DWORD PTR $T45010[esp+28]
	fst	DWORD PTR $T45011[esp+24]
	mov	DWORD PTR [eax+8], ecx
	fst	DWORD PTR $T45011[esp+28]
	mov	ecx, DWORD PTR $T45011[esp+16]

; 566  : 	this->Row[2] = Vector4(0,0,0,0);

	fst	DWORD PTR $T45012[esp+16]
	mov	DWORD PTR [eax+12], edx
	mov	edx, DWORD PTR $T45011[esp+20]
	fst	DWORD PTR $T45012[esp+20]
	mov	DWORD PTR [eax+16], ecx
	mov	ecx, DWORD PTR $T45011[esp+24]
	fst	DWORD PTR $T45012[esp+24]
	mov	DWORD PTR [eax+20], edx
	mov	edx, DWORD PTR $T45011[esp+28]
	fst	DWORD PTR $T45012[esp+28]
	mov	DWORD PTR [eax+24], ecx
	mov	ecx, DWORD PTR $T45012[esp+16]

; 567  : 	this->Row[3] = Vector4(0,0,0,0);

	fst	DWORD PTR $T45013[esp+16]
	mov	DWORD PTR [eax+28], edx
	mov	edx, DWORD PTR $T45012[esp+20]
	fst	DWORD PTR $T45013[esp+20]
	mov	DWORD PTR [eax+32], ecx
	mov	ecx, DWORD PTR $T45012[esp+24]
	fst	DWORD PTR $T45013[esp+24]
	mov	DWORD PTR [eax+36], edx
	mov	edx, DWORD PTR $T45012[esp+28]
	fstp	DWORD PTR $T45013[esp+28]
	mov	DWORD PTR [eax+40], ecx
	mov	ecx, DWORD PTR $T45013[esp+16]
	mov	DWORD PTR [eax+44], edx
	mov	edx, DWORD PTR $T45013[esp+20]
	mov	DWORD PTR [eax+48], ecx
	mov	ecx, DWORD PTR $T45013[esp+24]
	mov	DWORD PTR [eax+52], edx
	mov	edx, DWORD PTR $T45013[esp+28]
	mov	DWORD PTR [eax+56], ecx
	mov	DWORD PTR [eax+60], edx

; 568  : }

	add	esp, 16					; 00000010H
	ret	0
??0Matrix4@@QAE@XZ ENDP					; Matrix4::Matrix4
_TEXT	ENDS
PUBLIC	??HMatrix4@@QBE?AU0@ABU0@@Z			; Matrix4::operator+
; Function compile flags: /Ogtpy
;	COMDAT ??HMatrix4@@QBE?AU0@ABU0@@Z
_TEXT	SEGMENT
$T45057 = -16						; size = 16
$T45056 = -16						; size = 16
$T45055 = -16						; size = 16
$T45054 = -16						; size = 16
___$ReturnUdt$ = 8					; size = 4
_m$ = 12						; size = 4
??HMatrix4@@QBE?AU0@ABU0@@Z PROC			; Matrix4::operator+, COMDAT
; _this$ = ecx

; 608  : {

	sub	esp, 16					; 00000010H
	push	ebx
	push	esi

; 609  : 	Matrix4 t;

	mov	esi, DWORD PTR ___$ReturnUdt$[esp+20]
	push	edi
	mov	edi, ecx
	mov	ecx, esi
	call	??0Matrix4@@QAE@XZ			; Matrix4::Matrix4

; 610  : 	t.Row[0] = this->Row[0] + m.Row[0];

	mov	ebx, DWORD PTR _m$[esp+24]
	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	mov	eax, DWORD PTR [ecx]
	mov	eax, DWORD PTR [eax]
	push	ebx
	push	edi
	lea	edx, DWORD PTR $T45054[esp+36]
	push	edx
	call	eax
	mov	ecx, DWORD PTR $T45054[esp+28]
	mov	edx, DWORD PTR $T45054[esp+32]
	mov	eax, DWORD PTR $T45054[esp+36]
	mov	DWORD PTR [esi], ecx
	mov	ecx, DWORD PTR $T45054[esp+40]
	mov	DWORD PTR [esi+4], edx
	mov	DWORD PTR [esi+8], eax

; 611  : 	t.Row[1] = this->Row[1] + m.Row[1];

	lea	eax, DWORD PTR [ebx+16]
	push	eax
	mov	DWORD PTR [esi+12], ecx
	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	mov	edx, DWORD PTR [ecx]
	mov	edx, DWORD PTR [edx]
	lea	eax, DWORD PTR [edi+16]
	push	eax
	lea	eax, DWORD PTR $T45055[esp+36]
	push	eax
	call	edx
	mov	eax, DWORD PTR $T45055[esp+28]
	mov	ecx, DWORD PTR $T45055[esp+32]
	mov	edx, DWORD PTR $T45055[esp+36]
	mov	DWORD PTR [esi+16], eax
	mov	eax, DWORD PTR $T45055[esp+40]
	mov	DWORD PTR [esi+20], ecx
	mov	DWORD PTR [esi+24], edx
	mov	DWORD PTR [esi+28], eax

; 612  : 	t.Row[2] = this->Row[2] + m.Row[2];

	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	mov	edx, DWORD PTR [ecx]
	mov	edx, DWORD PTR [edx]
	lea	eax, DWORD PTR [ebx+32]
	push	eax
	lea	eax, DWORD PTR [edi+32]
	push	eax
	lea	eax, DWORD PTR $T45056[esp+36]
	push	eax
	call	edx
	mov	eax, DWORD PTR $T45056[esp+28]
	mov	ecx, DWORD PTR $T45056[esp+32]
	mov	edx, DWORD PTR $T45056[esp+36]
	mov	DWORD PTR [esi+32], eax
	mov	eax, DWORD PTR $T45056[esp+40]
	mov	DWORD PTR [esi+36], ecx
	mov	DWORD PTR [esi+40], edx
	mov	DWORD PTR [esi+44], eax

; 613  : 	t.Row[3] = this->Row[3] + m.Row[3];

	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	mov	edx, DWORD PTR [ecx]
	mov	edx, DWORD PTR [edx]
	add	ebx, 48					; 00000030H
	push	ebx
	add	edi, 48					; 00000030H
	push	edi
	lea	eax, DWORD PTR $T45057[esp+36]
	push	eax
	call	edx
	mov	eax, DWORD PTR $T45057[esp+28]
	mov	ecx, DWORD PTR $T45057[esp+32]
	mov	edx, DWORD PTR $T45057[esp+36]
	mov	DWORD PTR [esi+48], eax
	mov	eax, DWORD PTR $T45057[esp+40]
	mov	DWORD PTR [esi+52], ecx
	mov	DWORD PTR [esi+56], edx
	mov	DWORD PTR [esi+60], eax

; 614  : 	return t;

	mov	eax, esi
	pop	edi
	pop	esi
	pop	ebx

; 615  : }

	add	esp, 16					; 00000010H
	ret	8
??HMatrix4@@QBE?AU0@ABU0@@Z ENDP			; Matrix4::operator+
_TEXT	ENDS
PUBLIC	??GMatrix4@@QBE?AU0@ABU0@@Z			; Matrix4::operator-
; Function compile flags: /Ogtpy
;	COMDAT ??GMatrix4@@QBE?AU0@ABU0@@Z
_TEXT	SEGMENT
$T45076 = -16						; size = 16
$T45075 = -16						; size = 16
$T45074 = -16						; size = 16
$T45073 = -16						; size = 16
___$ReturnUdt$ = 8					; size = 4
_m$ = 12						; size = 4
??GMatrix4@@QBE?AU0@ABU0@@Z PROC			; Matrix4::operator-, COMDAT
; _this$ = ecx

; 617  : {

	sub	esp, 16					; 00000010H
	push	ebx
	push	esi

; 618  : 	Matrix4 t;

	mov	esi, DWORD PTR ___$ReturnUdt$[esp+20]
	push	edi
	mov	edi, ecx
	mov	ecx, esi
	call	??0Matrix4@@QAE@XZ			; Matrix4::Matrix4

; 619  : 	t.Row[0] = this->Row[0] - m.Row[0];

	mov	ebx, DWORD PTR _m$[esp+24]
	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	mov	eax, DWORD PTR [ecx]
	mov	eax, DWORD PTR [eax+8]
	push	ebx
	push	edi
	lea	edx, DWORD PTR $T45073[esp+36]
	push	edx
	call	eax
	mov	ecx, DWORD PTR $T45073[esp+28]
	mov	edx, DWORD PTR $T45073[esp+32]
	mov	eax, DWORD PTR $T45073[esp+36]
	mov	DWORD PTR [esi], ecx
	mov	ecx, DWORD PTR $T45073[esp+40]
	mov	DWORD PTR [esi+4], edx
	mov	DWORD PTR [esi+8], eax

; 620  : 	t.Row[1] = this->Row[1] - m.Row[1];

	lea	eax, DWORD PTR [ebx+16]
	push	eax
	mov	DWORD PTR [esi+12], ecx
	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	mov	edx, DWORD PTR [ecx]
	mov	edx, DWORD PTR [edx+8]
	lea	eax, DWORD PTR [edi+16]
	push	eax
	lea	eax, DWORD PTR $T45074[esp+36]
	push	eax
	call	edx
	mov	eax, DWORD PTR $T45074[esp+28]
	mov	ecx, DWORD PTR $T45074[esp+32]
	mov	edx, DWORD PTR $T45074[esp+36]
	mov	DWORD PTR [esi+16], eax
	mov	eax, DWORD PTR $T45074[esp+40]
	mov	DWORD PTR [esi+20], ecx
	mov	DWORD PTR [esi+24], edx
	mov	DWORD PTR [esi+28], eax

; 621  : 	t.Row[2] = this->Row[2] - m.Row[2];

	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	mov	edx, DWORD PTR [ecx]
	mov	edx, DWORD PTR [edx+8]
	lea	eax, DWORD PTR [ebx+32]
	push	eax
	lea	eax, DWORD PTR [edi+32]
	push	eax
	lea	eax, DWORD PTR $T45075[esp+36]
	push	eax
	call	edx
	mov	eax, DWORD PTR $T45075[esp+28]
	mov	ecx, DWORD PTR $T45075[esp+32]
	mov	edx, DWORD PTR $T45075[esp+36]
	mov	DWORD PTR [esi+32], eax
	mov	eax, DWORD PTR $T45075[esp+40]
	mov	DWORD PTR [esi+36], ecx
	mov	DWORD PTR [esi+40], edx
	mov	DWORD PTR [esi+44], eax

; 622  : 	t.Row[3] = this->Row[3] - m.Row[3];

	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	mov	edx, DWORD PTR [ecx]
	mov	edx, DWORD PTR [edx+8]
	add	ebx, 48					; 00000030H
	push	ebx
	add	edi, 48					; 00000030H
	push	edi
	lea	eax, DWORD PTR $T45076[esp+36]
	push	eax
	call	edx
	mov	eax, DWORD PTR $T45076[esp+28]
	mov	ecx, DWORD PTR $T45076[esp+32]
	mov	edx, DWORD PTR $T45076[esp+36]
	mov	DWORD PTR [esi+48], eax
	mov	eax, DWORD PTR $T45076[esp+40]
	mov	DWORD PTR [esi+52], ecx
	mov	DWORD PTR [esi+56], edx
	mov	DWORD PTR [esi+60], eax

; 623  : 	return t;

	mov	eax, esi
	pop	edi
	pop	esi
	pop	ebx

; 624  : }

	add	esp, 16					; 00000010H
	ret	8
??GMatrix4@@QBE?AU0@ABU0@@Z ENDP			; Matrix4::operator-
_TEXT	ENDS
PUBLIC	??DMatrix4@@QBE?AU0@ABU0@@Z			; Matrix4::operator*
; Function compile flags: /Ogtpy
;	COMDAT ??DMatrix4@@QBE?AU0@ABU0@@Z
_TEXT	SEGMENT
___$ReturnUdt$ = 8					; size = 4
_m$ = 12						; size = 4
??DMatrix4@@QBE?AU0@ABU0@@Z PROC			; Matrix4::operator*, COMDAT
; _this$ = ecx

; 626  : {

	push	esi
	push	edi

; 627  : 	Matrix4 temp;

	mov	edi, DWORD PTR ___$ReturnUdt$[esp+4]
	mov	esi, ecx
	mov	ecx, edi
	call	??0Matrix4@@QAE@XZ			; Matrix4::Matrix4

; 628  : 	temp.Row[0].X = this->Row[0].X * m.Row[0].X + this->Row[0].Y * m.Row[1].X + this->Row[0].Z * m.Row[2].X + this->Row[0].W * m.Row[3].X;

	mov	eax, DWORD PTR _m$[esp+4]
	fld	DWORD PTR [eax+32]
	fmul	DWORD PTR [esi+8]
	fld	DWORD PTR [eax+16]
	fmul	DWORD PTR [esi+4]
	faddp	ST(1), ST(0)
	fld	DWORD PTR [eax]
	fmul	DWORD PTR [esi]
	faddp	ST(1), ST(0)
	fld	DWORD PTR [esi+12]
	fmul	DWORD PTR [eax+48]
	faddp	ST(1), ST(0)
	fstp	DWORD PTR [edi]

; 629  : 	temp.Row[0].Y = this->Row[0].X * m.Row[0].Y + this->Row[0].Y * m.Row[1].Y + this->Row[0].Z * m.Row[2].Y + this->Row[0].W * m.Row[3].Y;

	fld	DWORD PTR [eax+20]
	fmul	DWORD PTR [esi+4]
	fld	DWORD PTR [eax+36]
	fmul	DWORD PTR [esi+8]
	faddp	ST(1), ST(0)
	fld	DWORD PTR [esi]
	fmul	DWORD PTR [eax+4]
	faddp	ST(1), ST(0)
	fld	DWORD PTR [eax+52]
	fmul	DWORD PTR [esi+12]
	faddp	ST(1), ST(0)
	fstp	DWORD PTR [edi+4]

; 630  : 	temp.Row[0].Z = this->Row[0].X * m.Row[0].Z + this->Row[0].Y * m.Row[1].Z + this->Row[0].Z * m.Row[2].Z + this->Row[0].W * m.Row[3].Z;

	fld	DWORD PTR [eax+40]
	fmul	DWORD PTR [esi+8]
	fld	DWORD PTR [eax+8]
	fmul	DWORD PTR [esi]
	faddp	ST(1), ST(0)
	fld	DWORD PTR [eax+56]
	fmul	DWORD PTR [esi+12]
	faddp	ST(1), ST(0)
	fld	DWORD PTR [eax+24]
	fmul	DWORD PTR [esi+4]
	faddp	ST(1), ST(0)
	fstp	DWORD PTR [edi+8]

; 631  : 	temp.Row[0].W = this->Row[0].X * m.Row[0].W + this->Row[0].Y * m.Row[1].W + this->Row[0].Z * m.Row[2].W + this->Row[0].W * m.Row[3].W;

	fld	DWORD PTR [eax+12]
	fmul	DWORD PTR [esi]
	fld	DWORD PTR [esi+12]
	fmul	DWORD PTR [eax+60]
	faddp	ST(1), ST(0)
	fld	DWORD PTR [eax+28]
	fmul	DWORD PTR [esi+4]
	faddp	ST(1), ST(0)
	fld	DWORD PTR [eax+44]
	fmul	DWORD PTR [esi+8]
	faddp	ST(1), ST(0)
	fstp	DWORD PTR [edi+12]

; 632  : 	temp.Row[1].X = this->Row[1].X * m.Row[0].X + this->Row[1].Y * m.Row[1].X + this->Row[1].Z * m.Row[2].X + this->Row[1].W * m.Row[3].X;

	fld	DWORD PTR [eax+16]
	fmul	DWORD PTR [esi+20]
	fld	DWORD PTR [esi+28]
	fmul	DWORD PTR [eax+48]
	faddp	ST(1), ST(0)
	fld	DWORD PTR [eax+32]
	fmul	DWORD PTR [esi+24]
	faddp	ST(1), ST(0)
	fld	DWORD PTR [esi+16]
	fmul	DWORD PTR [eax]
	faddp	ST(1), ST(0)
	fstp	DWORD PTR [edi+16]

; 633  : 	temp.Row[1].Y = this->Row[1].X * m.Row[0].Y + this->Row[1].Y * m.Row[1].Y + this->Row[1].Z * m.Row[2].Y + this->Row[1].W * m.Row[3].Y;

	fld	DWORD PTR [eax+20]
	fmul	DWORD PTR [esi+20]
	fld	DWORD PTR [esi+16]
	fmul	DWORD PTR [eax+4]
	faddp	ST(1), ST(0)
	fld	DWORD PTR [eax+52]
	fmul	DWORD PTR [esi+28]
	faddp	ST(1), ST(0)
	fld	DWORD PTR [eax+36]
	fmul	DWORD PTR [esi+24]
	faddp	ST(1), ST(0)
	fstp	DWORD PTR [edi+20]

; 634  : 	temp.Row[1].Z = this->Row[1].X * m.Row[0].Z + this->Row[1].Y * m.Row[1].Z + this->Row[1].Z * m.Row[2].Z + this->Row[1].W * m.Row[3].Z;

	fld	DWORD PTR [esi+20]
	fmul	DWORD PTR [eax+24]
	fld	DWORD PTR [esi+16]
	fmul	DWORD PTR [eax+8]
	faddp	ST(1), ST(0)
	fld	DWORD PTR [eax+56]
	fmul	DWORD PTR [esi+28]
	faddp	ST(1), ST(0)
	fld	DWORD PTR [eax+40]
	fmul	DWORD PTR [esi+24]
	faddp	ST(1), ST(0)
	fstp	DWORD PTR [edi+24]

; 635  : 	temp.Row[1].W = this->Row[1].X * m.Row[0].W + this->Row[1].Y * m.Row[1].W + this->Row[1].Z * m.Row[2].W + this->Row[1].W * m.Row[3].W;

	fld	DWORD PTR [esi+16]
	fmul	DWORD PTR [eax+12]
	fld	DWORD PTR [esi+28]
	fmul	DWORD PTR [eax+60]
	faddp	ST(1), ST(0)
	fld	DWORD PTR [esi+24]
	fmul	DWORD PTR [eax+44]
	faddp	ST(1), ST(0)
	fld	DWORD PTR [esi+20]
	fmul	DWORD PTR [eax+28]
	faddp	ST(1), ST(0)
	fstp	DWORD PTR [edi+28]

; 636  : 	temp.Row[2].X = this->Row[2].X * m.Row[0].X + this->Row[2].Y * m.Row[1].X + this->Row[2].Z * m.Row[2].X + this->Row[2].W * m.Row[3].X;

	fld	DWORD PTR [eax+16]
	fmul	DWORD PTR [esi+36]
	fld	DWORD PTR [esi+44]
	fmul	DWORD PTR [eax+48]
	faddp	ST(1), ST(0)
	fld	DWORD PTR [eax+32]
	fmul	DWORD PTR [esi+40]
	faddp	ST(1), ST(0)
	fld	DWORD PTR [esi+32]
	fmul	DWORD PTR [eax]
	faddp	ST(1), ST(0)
	fstp	DWORD PTR [edi+32]

; 637  : 	temp.Row[2].Y = this->Row[2].X * m.Row[0].Y + this->Row[2].Y * m.Row[1].Y + this->Row[2].Z * m.Row[2].Y + this->Row[2].W * m.Row[3].Y;

	fld	DWORD PTR [esi+32]
	fmul	DWORD PTR [eax+4]
	fld	DWORD PTR [eax+20]
	fmul	DWORD PTR [esi+36]
	faddp	ST(1), ST(0)
	fld	DWORD PTR [eax+52]
	fmul	DWORD PTR [esi+44]
	faddp	ST(1), ST(0)
	fld	DWORD PTR [eax+36]
	fmul	DWORD PTR [esi+40]
	faddp	ST(1), ST(0)
	fstp	DWORD PTR [edi+36]

; 638  : 	temp.Row[2].Z = this->Row[2].X * m.Row[0].Z + this->Row[2].Y * m.Row[1].Z + this->Row[2].Z * m.Row[2].Z + this->Row[2].W * m.Row[3].Z;

	fld	DWORD PTR [esi+36]
	fmul	DWORD PTR [eax+24]
	fld	DWORD PTR [eax+56]
	fmul	DWORD PTR [esi+44]
	faddp	ST(1), ST(0)
	fld	DWORD PTR [eax+40]
	fmul	DWORD PTR [esi+40]
	faddp	ST(1), ST(0)
	fld	DWORD PTR [esi+32]
	fmul	DWORD PTR [eax+8]
	faddp	ST(1), ST(0)
	fstp	DWORD PTR [edi+40]

; 639  : 	temp.Row[2].W = this->Row[2].X * m.Row[0].W + this->Row[2].Y * m.Row[1].W + this->Row[2].Z * m.Row[2].W + this->Row[2].W * m.Row[3].W;

	fld	DWORD PTR [esi+32]
	fmul	DWORD PTR [eax+12]
	fld	DWORD PTR [esi+44]
	fmul	DWORD PTR [eax+60]
	faddp	ST(1), ST(0)
	fld	DWORD PTR [esi+40]
	fmul	DWORD PTR [eax+44]
	faddp	ST(1), ST(0)
	fld	DWORD PTR [esi+36]
	fmul	DWORD PTR [eax+28]
	faddp	ST(1), ST(0)
	fstp	DWORD PTR [edi+44]

; 640  : 	temp.Row[3].X = this->Row[3].X * m.Row[0].X + this->Row[3].Y * m.Row[1].X + this->Row[3].Z * m.Row[2].X + this->Row[3].W * m.Row[3].X;

	fld	DWORD PTR [eax+16]
	fmul	DWORD PTR [esi+52]
	fld	DWORD PTR [eax+32]
	fmul	DWORD PTR [esi+56]
	faddp	ST(1), ST(0)
	fld	DWORD PTR [esi+60]
	fmul	DWORD PTR [eax+48]
	faddp	ST(1), ST(0)
	fld	DWORD PTR [esi+48]
	fmul	DWORD PTR [eax]
	faddp	ST(1), ST(0)
	fstp	DWORD PTR [edi+48]

; 641  : 	temp.Row[3].Y = this->Row[3].X * m.Row[0].Y + this->Row[3].Y * m.Row[1].Y + this->Row[3].Z * m.Row[2].Y + this->Row[3].W * m.Row[3].Y;

	fld	DWORD PTR [esi+48]
	fmul	DWORD PTR [eax+4]
	fld	DWORD PTR [eax+20]
	fmul	DWORD PTR [esi+52]
	faddp	ST(1), ST(0)
	fld	DWORD PTR [eax+36]
	fmul	DWORD PTR [esi+56]
	faddp	ST(1), ST(0)
	fld	DWORD PTR [eax+52]
	fmul	DWORD PTR [esi+60]
	faddp	ST(1), ST(0)
	fstp	DWORD PTR [edi+52]

; 642  : 	temp.Row[3].Z = this->Row[3].X * m.Row[0].Z + this->Row[3].Y * m.Row[1].Z + this->Row[3].Z * m.Row[2].Z + this->Row[3].W * m.Row[3].Z;

	fld	DWORD PTR [esi+52]
	fmul	DWORD PTR [eax+24]
	fld	DWORD PTR [eax+40]
	fmul	DWORD PTR [esi+56]
	faddp	ST(1), ST(0)
	fld	DWORD PTR [eax+56]
	fmul	DWORD PTR [esi+60]
	faddp	ST(1), ST(0)
	fld	DWORD PTR [esi+48]
	fmul	DWORD PTR [eax+8]
	faddp	ST(1), ST(0)
	fstp	DWORD PTR [edi+56]

; 643  : 	temp.Row[3].W = this->Row[3].X * m.Row[0].W + this->Row[3].Y * m.Row[1].W + this->Row[3].Z * m.Row[2].W + this->Row[3].W * m.Row[3].W;

	fld	DWORD PTR [esi+48]
	fmul	DWORD PTR [eax+12]
	fld	DWORD PTR [esi+60]
	fmul	DWORD PTR [eax+60]
	faddp	ST(1), ST(0)
	fld	DWORD PTR [esi+56]
	fmul	DWORD PTR [eax+44]
	faddp	ST(1), ST(0)
	fld	DWORD PTR [esi+52]
	fmul	DWORD PTR [eax+28]

; 644  : 	return temp;

	mov	eax, edi
	faddp	ST(1), ST(0)
	fstp	DWORD PTR [edi+60]
	pop	edi
	pop	esi

; 645  : }

	ret	8
??DMatrix4@@QBE?AU0@ABU0@@Z ENDP			; Matrix4::operator*
_TEXT	ENDS
PUBLIC	??DMatrix4@@QBE?AU0@M@Z				; Matrix4::operator*
; Function compile flags: /Ogtpy
;	COMDAT ??DMatrix4@@QBE?AU0@M@Z
_TEXT	SEGMENT
$T45098 = -16						; size = 16
$T45097 = -16						; size = 16
$T45096 = -16						; size = 16
$T45095 = -16						; size = 16
$T45110 = 8						; size = 4
$T45102 = 8						; size = 4
$T45106 = 8						; size = 4
___$ReturnUdt$ = 8					; size = 4
$T45114 = 12						; size = 4
_f$ = 12						; size = 4
??DMatrix4@@QBE?AU0@M@Z PROC				; Matrix4::operator*, COMDAT
; _this$ = ecx

; 647  : {

	sub	esp, 16					; 00000010H
	push	esi

; 648  : 	Matrix4 t;

	mov	esi, DWORD PTR ___$ReturnUdt$[esp+16]
	push	edi
	mov	edi, ecx
	mov	ecx, esi
	call	??0Matrix4@@QAE@XZ			; Matrix4::Matrix4

; 649  : 	t.Row[0] = this->Row[0] * f;

	fld	DWORD PTR _f$[esp+20]
	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	fstp	DWORD PTR $T45102[esp+20]
	mov	eax, DWORD PTR [ecx]
	mov	eax, DWORD PTR [eax+16]
	lea	edx, DWORD PTR $T45102[esp+20]
	push	edx
	push	edi
	lea	edx, DWORD PTR $T45095[esp+32]
	push	edx
	call	eax

; 650  : 	t.Row[1] = this->Row[1] * f;

	fld	DWORD PTR _f$[esp+20]
	mov	ecx, DWORD PTR $T45095[esp+24]
	fstp	DWORD PTR $T45106[esp+20]
	mov	edx, DWORD PTR $T45095[esp+28]
	mov	eax, DWORD PTR $T45095[esp+32]
	mov	DWORD PTR [esi], ecx
	mov	ecx, DWORD PTR $T45095[esp+36]
	mov	DWORD PTR [esi+4], edx
	mov	DWORD PTR [esi+8], eax
	lea	eax, DWORD PTR $T45106[esp+20]
	push	eax
	mov	DWORD PTR [esi+12], ecx
	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	mov	edx, DWORD PTR [ecx]
	mov	edx, DWORD PTR [edx+16]
	lea	eax, DWORD PTR [edi+16]
	push	eax
	lea	eax, DWORD PTR $T45096[esp+32]
	push	eax
	call	edx

; 651  : 	t.Row[2] = this->Row[2] * f;

	fld	DWORD PTR _f$[esp+20]
	mov	eax, DWORD PTR $T45096[esp+24]
	fstp	DWORD PTR $T45110[esp+20]
	mov	ecx, DWORD PTR $T45096[esp+28]
	mov	edx, DWORD PTR $T45096[esp+32]
	mov	DWORD PTR [esi+16], eax
	mov	eax, DWORD PTR $T45096[esp+36]
	mov	DWORD PTR [esi+20], ecx
	mov	DWORD PTR [esi+24], edx
	mov	DWORD PTR [esi+28], eax
	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	mov	edx, DWORD PTR [ecx]
	mov	edx, DWORD PTR [edx+16]
	lea	eax, DWORD PTR $T45110[esp+20]
	push	eax
	lea	eax, DWORD PTR [edi+32]
	push	eax
	lea	eax, DWORD PTR $T45097[esp+32]
	push	eax
	call	edx

; 652  : 	t.Row[3] = this->Row[3] * f;

	fld	DWORD PTR _f$[esp+20]
	mov	eax, DWORD PTR $T45097[esp+24]
	fstp	DWORD PTR $T45114[esp+20]
	mov	ecx, DWORD PTR $T45097[esp+28]
	mov	edx, DWORD PTR $T45097[esp+32]
	mov	DWORD PTR [esi+32], eax
	mov	eax, DWORD PTR $T45097[esp+36]
	mov	DWORD PTR [esi+36], ecx
	mov	DWORD PTR [esi+40], edx
	mov	DWORD PTR [esi+44], eax
	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	mov	edx, DWORD PTR [ecx]
	mov	edx, DWORD PTR [edx+16]
	lea	eax, DWORD PTR $T45114[esp+20]
	push	eax
	add	edi, 48					; 00000030H
	push	edi
	lea	eax, DWORD PTR $T45098[esp+32]
	push	eax
	call	edx
	mov	eax, DWORD PTR $T45098[esp+24]
	mov	ecx, DWORD PTR $T45098[esp+28]
	mov	DWORD PTR [esi+48], eax
	mov	DWORD PTR [esi+52], ecx
	mov	edx, DWORD PTR $T45098[esp+32]
	mov	eax, DWORD PTR $T45098[esp+36]
	mov	DWORD PTR [esi+56], edx
	mov	DWORD PTR [esi+60], eax
	pop	edi

; 653  : 	return t;

	mov	eax, esi
	pop	esi

; 654  : }

	add	esp, 16					; 00000010H
	ret	8
??DMatrix4@@QBE?AU0@M@Z ENDP				; Matrix4::operator*
_TEXT	ENDS
PUBLIC	??KMatrix4@@QBE?AU0@M@Z				; Matrix4::operator/
; Function compile flags: /Ogtpy
;	COMDAT ??KMatrix4@@QBE?AU0@M@Z
_TEXT	SEGMENT
$T45121 = -16						; size = 16
$T45120 = -16						; size = 16
$T45119 = -16						; size = 16
$T45118 = -16						; size = 16
$T45133 = 8						; size = 4
$T45125 = 8						; size = 4
$T45129 = 8						; size = 4
___$ReturnUdt$ = 8					; size = 4
$T45137 = 12						; size = 4
_f$ = 12						; size = 4
??KMatrix4@@QBE?AU0@M@Z PROC				; Matrix4::operator/, COMDAT
; _this$ = ecx

; 656  : {

	sub	esp, 16					; 00000010H
	push	esi

; 657  : 	Matrix4 t;

	mov	esi, DWORD PTR ___$ReturnUdt$[esp+16]
	push	edi
	mov	edi, ecx
	mov	ecx, esi
	call	??0Matrix4@@QAE@XZ			; Matrix4::Matrix4

; 658  : 	t.Row[0] = this->Row[0] / f;

	fld	DWORD PTR _f$[esp+20]
	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	fstp	DWORD PTR $T45125[esp+20]
	mov	eax, DWORD PTR [ecx]
	mov	eax, DWORD PTR [eax+32]
	lea	edx, DWORD PTR $T45125[esp+20]
	push	edx
	push	edi
	lea	edx, DWORD PTR $T45118[esp+32]
	push	edx
	call	eax

; 659  : 	t.Row[1] = this->Row[1] / f;

	fld	DWORD PTR _f$[esp+20]
	mov	ecx, DWORD PTR $T45118[esp+24]
	fstp	DWORD PTR $T45129[esp+20]
	mov	edx, DWORD PTR $T45118[esp+28]
	mov	eax, DWORD PTR $T45118[esp+32]
	mov	DWORD PTR [esi], ecx
	mov	ecx, DWORD PTR $T45118[esp+36]
	mov	DWORD PTR [esi+4], edx
	mov	DWORD PTR [esi+8], eax
	lea	eax, DWORD PTR $T45129[esp+20]
	push	eax
	mov	DWORD PTR [esi+12], ecx
	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	mov	edx, DWORD PTR [ecx]
	mov	edx, DWORD PTR [edx+32]
	lea	eax, DWORD PTR [edi+16]
	push	eax
	lea	eax, DWORD PTR $T45119[esp+32]
	push	eax
	call	edx

; 660  : 	t.Row[2] = this->Row[2] / f;

	fld	DWORD PTR _f$[esp+20]
	mov	eax, DWORD PTR $T45119[esp+24]
	fstp	DWORD PTR $T45133[esp+20]
	mov	ecx, DWORD PTR $T45119[esp+28]
	mov	edx, DWORD PTR $T45119[esp+32]
	mov	DWORD PTR [esi+16], eax
	mov	eax, DWORD PTR $T45119[esp+36]
	mov	DWORD PTR [esi+20], ecx
	mov	DWORD PTR [esi+24], edx
	mov	DWORD PTR [esi+28], eax
	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	mov	edx, DWORD PTR [ecx]
	mov	edx, DWORD PTR [edx+32]
	lea	eax, DWORD PTR $T45133[esp+20]
	push	eax
	lea	eax, DWORD PTR [edi+32]
	push	eax
	lea	eax, DWORD PTR $T45120[esp+32]
	push	eax
	call	edx

; 661  : 	t.Row[3] = this->Row[3] / f;

	fld	DWORD PTR _f$[esp+20]
	mov	eax, DWORD PTR $T45120[esp+24]
	fstp	DWORD PTR $T45137[esp+20]
	mov	ecx, DWORD PTR $T45120[esp+28]
	mov	edx, DWORD PTR $T45120[esp+32]
	mov	DWORD PTR [esi+32], eax
	mov	eax, DWORD PTR $T45120[esp+36]
	mov	DWORD PTR [esi+36], ecx
	mov	DWORD PTR [esi+40], edx
	mov	DWORD PTR [esi+44], eax
	mov	ecx, DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A ; Vector4Math
	mov	edx, DWORD PTR [ecx]
	mov	edx, DWORD PTR [edx+32]
	lea	eax, DWORD PTR $T45137[esp+20]
	push	eax
	add	edi, 48					; 00000030H
	push	edi
	lea	eax, DWORD PTR $T45121[esp+32]
	push	eax
	call	edx
	mov	eax, DWORD PTR $T45121[esp+24]
	mov	ecx, DWORD PTR $T45121[esp+28]
	mov	DWORD PTR [esi+48], eax
	mov	DWORD PTR [esi+52], ecx
	mov	edx, DWORD PTR $T45121[esp+32]
	mov	eax, DWORD PTR $T45121[esp+36]
	mov	DWORD PTR [esi+56], edx
	mov	DWORD PTR [esi+60], eax
	pop	edi

; 662  : 	return t;

	mov	eax, esi
	pop	esi

; 663  : }

	add	esp, 16					; 00000010H
	ret	8
??KMatrix4@@QBE?AU0@M@Z ENDP				; Matrix4::operator/
_TEXT	ENDS
PUBLIC	?Inverse@Matrix4@@QAE?AU1@XZ			; Matrix4::Inverse
; Function compile flags: /Ogtpy
;	COMDAT ?Inverse@Matrix4@@QAE?AU1@XZ
_TEXT	SEGMENT
tv1059 = -128						; size = 4
tv951 = -128						; size = 4
tv1072 = -124						; size = 4
tv973 = -124						; size = 4
tv992 = -120						; size = 4
tv991 = -116						; size = 4
tv1023 = -112						; size = 4
tv959 = -108						; size = 4
tv955 = -104						; size = 4
tv978 = -100						; size = 4
tv977 = -96						; size = 4
tv997 = -92						; size = 4
_s$ = -92						; size = 4
tv1058 = -88						; size = 4
tv947 = -88						; size = 4
tv972 = -84						; size = 4
tv1019 = -80						; size = 4
tv996 = -76						; size = 4
tv934 = -72						; size = 4
tv933 = -68						; size = 4
_t$ = -64						; size = 64
___$ReturnUdt$ = 8					; size = 4
?Inverse@Matrix4@@QAE?AU1@XZ PROC			; Matrix4::Inverse, COMDAT
; _this$ = ecx

; 677  : {

	sub	esp, 128				; 00000080H
	push	esi
	mov	esi, ecx

; 678  : 	float s = Determinant();

	call	?Determinant@Matrix4@@QAEMXZ		; Matrix4::Determinant

; 679  : 	if (s == 0.0) return Matrix4();

	fldz
	fucomp	ST(1)
	fnstsw	ax
	test	ah, 68					; 00000044H
	jp	SHORT $LN1@Inverse@2
	mov	esi, DWORD PTR ___$ReturnUdt$[esp+128]
	fstp	ST(0)
	mov	ecx, esi
	call	??0Matrix4@@QAE@XZ			; Matrix4::Matrix4
	mov	eax, esi
	pop	esi

; 699  : }

	add	esp, 128				; 00000080H
	ret	4
$LN1@Inverse@2:

; 680  : 	s = 1/s;

	fld1
	push	edi
	fdivrp	ST(1), ST(0)

; 681  : 	Matrix4 t;

	lea	ecx, DWORD PTR _t$[esp+136]
	fstp	DWORD PTR _s$[esp+136]
	call	??0Matrix4@@QAE@XZ			; Matrix4::Matrix4

; 682  : 	t.Row[0].X = s*(Row[1].Y*(Row[2].Z*Row[3].W - Row[2].W*Row[3].Z) + Row[1].Z*(Row[2].W*Row[3].Y - Row[2].Y*Row[3].W) + Row[1].W*(Row[2].Y*Row[3].Z - Row[2].Z*Row[3].Y));

	fld	DWORD PTR [esi+40]
	fmul	DWORD PTR [esi+60]
	fld	DWORD PTR [esi+44]
	fmul	DWORD PTR [esi+56]
	fld	DWORD PTR [esi+52]
	fmul	DWORD PTR [esi+44]
	fld	DWORD PTR [esi+60]
	fmul	DWORD PTR [esi+36]
	fld	DWORD PTR [esi+36]
	fmul	DWORD PTR [esi+56]
	fst	DWORD PTR tv933[esp+136]
	fld	DWORD PTR [esi+40]
	fmul	DWORD PTR [esi+52]
	fst	DWORD PTR tv934[esp+136]
	fld	ST(3)
	fsub	ST(0), ST(3)
	fmul	DWORD PTR [esi+24]
	fld	ST(6)
	fsub	ST(0), ST(6)
	fmul	DWORD PTR [esi+20]
	faddp	ST(1), ST(0)
	fxch	ST(2)
	fsubrp	ST(1), ST(0)
	fmul	DWORD PTR [esi+28]
	faddp	ST(1), ST(0)
	fld	DWORD PTR _s$[esp+136]
	fmul	ST(1), ST(0)
	fxch	ST(1)
	fstp	DWORD PTR _t$[esp+136]

; 683  : 	t.Row[0].Y = s*(Row[2].Y*(Row[0].Z*Row[3].W - Row[0].W*Row[3].Z) + Row[2].Z*(Row[0].W*Row[3].Y - Row[0].Y*Row[3].W) + Row[2].W*(Row[0].Y*Row[3].Z - Row[0].Z*Row[3].Y));

	fld	DWORD PTR [esi+60]
	fmul	DWORD PTR [esi+8]
	fst	DWORD PTR tv947[esp+136]
	fld	DWORD PTR [esi+56]
	fmul	DWORD PTR [esi+12]
	fstp	DWORD PTR tv951[esp+136]
	fld	DWORD PTR [esi+52]
	fmul	DWORD PTR [esi+12]
	fstp	DWORD PTR tv955[esp+136]
	fld	DWORD PTR [esi+60]
	fmul	DWORD PTR [esi+4]
	fstp	DWORD PTR tv959[esp+136]
	fld	DWORD PTR [esi+56]
	fmul	DWORD PTR [esi+4]
	fld	DWORD PTR [esi+52]
	fmul	DWORD PTR [esi+8]
	fsubp	ST(1), ST(0)
	fmul	DWORD PTR [esi+44]
	fxch	ST(1)
	fsub	DWORD PTR tv951[esp+136]
	fmul	DWORD PTR [esi+36]
	faddp	ST(1), ST(0)
	fld	DWORD PTR tv955[esp+136]
	fsub	DWORD PTR tv959[esp+136]
	fmul	DWORD PTR [esi+40]
	faddp	ST(1), ST(0)
	fmul	ST(0), ST(1)
	fstp	DWORD PTR _t$[esp+140]

; 684  : 	t.Row[0].Z = s*(Row[3].Y*(Row[0].Z*Row[1].W - Row[0].W*Row[1].Z) + Row[3].Z*(Row[0].W*Row[1].Y - Row[0].Y*Row[1].W) + Row[3].W*(Row[0].Y*Row[1].Z - Row[0].Z*Row[1].Y));

	fld	DWORD PTR [esi+28]
	fmul	DWORD PTR [esi+8]
	fst	DWORD PTR tv972[esp+136]
	fld	DWORD PTR [esi+24]
	fmul	DWORD PTR [esi+12]
	fstp	DWORD PTR tv973[esp+136]
	fld	DWORD PTR [esi+20]
	fmul	DWORD PTR [esi+12]
	fstp	DWORD PTR tv977[esp+136]
	fld	DWORD PTR [esi+28]
	fmul	DWORD PTR [esi+4]
	fstp	DWORD PTR tv978[esp+136]
	fld	DWORD PTR [esi+24]
	fmul	DWORD PTR [esi+4]
	fld	DWORD PTR [esi+20]
	fmul	DWORD PTR [esi+8]
	fsubp	ST(1), ST(0)
	fmul	DWORD PTR [esi+60]
	fxch	ST(1)
	fsub	DWORD PTR tv973[esp+136]
	fmul	DWORD PTR [esi+52]
	faddp	ST(1), ST(0)
	fld	DWORD PTR tv977[esp+136]
	fsub	DWORD PTR tv978[esp+136]
	fmul	DWORD PTR [esi+56]
	faddp	ST(1), ST(0)
	fmul	ST(0), ST(1)
	fstp	DWORD PTR _t$[esp+144]

; 685  : 	t.Row[0].W = s*(Row[0].Y*(Row[1].W*Row[2].Z - Row[1].Z*Row[2].W) + Row[0].Z*(Row[1].Y*Row[2].W - Row[1].W*Row[2].Y) + Row[0].W*(Row[1].Z*Row[2].Y - Row[1].Y*Row[2].Z));

	fld	DWORD PTR [esi+40]
	fmul	DWORD PTR [esi+28]
	fstp	DWORD PTR tv991[esp+136]
	fld	DWORD PTR [esi+44]
	fmul	DWORD PTR [esi+24]
	fstp	DWORD PTR tv992[esp+136]
	fld	DWORD PTR [esi+44]
	fmul	DWORD PTR [esi+20]
	fst	DWORD PTR tv996[esp+136]
	fld	DWORD PTR [esi+36]
	fmul	DWORD PTR [esi+28]
	fstp	DWORD PTR tv997[esp+136]
	fld	DWORD PTR [esi+36]
	fmul	DWORD PTR [esi+24]
	fld	DWORD PTR [esi+40]
	fmul	DWORD PTR [esi+20]
	fsubp	ST(1), ST(0)
	fmul	DWORD PTR [esi+12]
	fxch	ST(1)
	fsub	DWORD PTR tv997[esp+136]
	fmul	DWORD PTR [esi+8]
	faddp	ST(1), ST(0)
	fld	DWORD PTR tv991[esp+136]
	fsub	DWORD PTR tv992[esp+136]
	fmul	DWORD PTR [esi+4]
	faddp	ST(1), ST(0)
	fmul	ST(0), ST(1)
	fstp	DWORD PTR _t$[esp+148]

; 686  : 	t.Row[1].X = s*(Row[1].Z*(Row[2].X*Row[3].W - Row[2].W*Row[3].X) + Row[1].W*(Row[2].Z*Row[3].X - Row[2].X*Row[3].Z) + Row[1].X*(Row[2].W*Row[3].Z - Row[2].Z*Row[3].W));

	fld	DWORD PTR [esi+60]
	fmul	DWORD PTR [esi+32]
	fst	DWORD PTR tv1019[esp+136]
	fld	DWORD PTR [esi+44]
	fmul	DWORD PTR [esi+48]
	fstp	DWORD PTR tv1023[esp+136]
	fld	DWORD PTR [esi+40]
	fmul	DWORD PTR [esi+48]
	fld	DWORD PTR [esi+56]
	fmul	DWORD PTR [esi+32]
	fsubp	ST(1), ST(0)
	fmul	DWORD PTR [esi+28]
	fxch	ST(1)
	fsub	DWORD PTR tv1023[esp+136]
	fmul	DWORD PTR [esi+24]
	faddp	ST(1), ST(0)
	fxch	ST(4)
	fsubrp	ST(5), ST(0)
	fxch	ST(4)
	fmul	DWORD PTR [esi+16]
	faddp	ST(3), ST(0)
	fxch	ST(2)
	fmul	ST(0), ST(3)
	fstp	DWORD PTR _t$[esp+152]

; 687  : 	t.Row[1].Y = s*(Row[2].Z*(Row[0].X*Row[3].W - Row[0].W*Row[3].X) + Row[2].W*(Row[0].Z*Row[3].X - Row[0].X*Row[3].Z) + Row[2].X*(Row[0].W*Row[3].Z - Row[0].Z*Row[3].W));

	fld	DWORD PTR [esi+60]
	fmul	DWORD PTR [esi]
	fld	DWORD PTR [esi+48]
	fmul	DWORD PTR [esi+12]
	fld	DWORD PTR [esi+48]
	fmul	DWORD PTR [esi+8]
	fld	DWORD PTR [esi+56]
	fmul	DWORD PTR [esi]
	fsubp	ST(1), ST(0)
	fmul	DWORD PTR [esi+44]
	fld	DWORD PTR tv951[esp+136]
	fsub	DWORD PTR tv947[esp+136]
	fmul	DWORD PTR [esi+32]
	faddp	ST(1), ST(0)
	fld	ST(2)
	fsub	ST(0), ST(2)
	fmul	DWORD PTR [esi+40]
	faddp	ST(1), ST(0)
	fmul	ST(0), ST(5)
	fstp	DWORD PTR _t$[esp+156]

; 688  : 	t.Row[1].Z = s*(Row[3].Z*(Row[0].X*Row[1].W - Row[0].W*Row[1].X) + Row[3].W*(Row[0].Z*Row[1].X - Row[0].X*Row[1].Z) + Row[3].X*(Row[0].W*Row[1].Z - Row[0].Z*Row[1].W));

	fld	DWORD PTR [esi+28]
	fmul	DWORD PTR [esi]
	fst	DWORD PTR tv1058[esp+136]
	fld	DWORD PTR [esi+16]
	fmul	DWORD PTR [esi+12]
	fstp	DWORD PTR tv1059[esp+136]
	fld	DWORD PTR [esi+16]
	fmul	DWORD PTR [esi+8]
	fld	DWORD PTR [esi]
	fmul	DWORD PTR [esi+24]
	fsubp	ST(1), ST(0)
	fmul	DWORD PTR [esi+60]
	fld	DWORD PTR tv973[esp+136]
	fsub	DWORD PTR tv972[esp+136]
	fmul	DWORD PTR [esi+48]
	faddp	ST(1), ST(0)
	fxch	ST(1)
	fsub	DWORD PTR tv1059[esp+136]
	fmul	DWORD PTR [esi+56]
	faddp	ST(1), ST(0)
	fmul	ST(0), ST(5)
	fstp	DWORD PTR _t$[esp+160]

; 689  : 	t.Row[1].W = s*(Row[0].Z*(Row[1].W*Row[2].X - Row[1].X*Row[2].W) + Row[0].W*(Row[1].X*Row[2].Z - Row[1].Z*Row[2].X) + Row[0].X*(Row[1].Z*Row[2].W - Row[1].W*Row[2].Z));

	fld	DWORD PTR [esi+28]
	fmul	DWORD PTR [esi+32]
	fstp	DWORD PTR tv1072[esp+136]
	fld	DWORD PTR [esi+44]
	fmul	DWORD PTR [esi+16]
	fld	DWORD PTR [esi+40]
	fmul	DWORD PTR [esi+16]
	fld	DWORD PTR [esi+32]
	fmul	DWORD PTR [esi+24]
	fsubp	ST(1), ST(0)
	fmul	DWORD PTR [esi+12]
	fld	DWORD PTR tv992[esp+136]
	fsub	DWORD PTR tv991[esp+136]
	fmul	DWORD PTR [esi]
	faddp	ST(1), ST(0)
	fld	DWORD PTR tv1072[esp+136]
	fsub	ST(0), ST(2)
	fmul	DWORD PTR [esi+8]
	faddp	ST(1), ST(0)
	fmul	ST(0), ST(6)
	fstp	DWORD PTR _t$[esp+164]

; 690  : 	t.Row[2].X = s*(Row[1].W*(Row[2].X*Row[3].Y - Row[2].Y*Row[3].X) + Row[1].X*(Row[2].Y*Row[3].W - Row[2].W*Row[3].Y) + Row[1].Y*(Row[2].W*Row[3].X - Row[2].X*Row[3].W));

	fld	DWORD PTR [esi+52]
	fmul	DWORD PTR [esi+32]
	fld	DWORD PTR [esi+36]
	fmul	DWORD PTR [esi+48]
	fsubp	ST(1), ST(0)
	fmul	DWORD PTR [esi+28]
	fld	DWORD PTR tv1023[esp+136]
	fsub	DWORD PTR tv1019[esp+136]
	fmul	DWORD PTR [esi+20]
	faddp	ST(1), ST(0)
	fxch	ST(5)
	fsubrp	ST(4), ST(0)
	fxch	ST(3)
	fmul	DWORD PTR [esi+16]
	faddp	ST(4), ST(0)
	fxch	ST(3)
	fmul	ST(0), ST(4)
	fstp	DWORD PTR _t$[esp+168]

; 691  : 	t.Row[2].Y = s*(Row[2].W*(Row[0].X*Row[3].Y - Row[0].Y*Row[3].X) + Row[2].X*(Row[0].Y*Row[3].W - Row[0].W*Row[3].Y) + Row[2].Y*(Row[0].W*Row[3].X - Row[0].X*Row[3].W));

	fld	DWORD PTR [esi+52]
	fmul	DWORD PTR [esi]
	fld	DWORD PTR [esi+48]
	fmul	DWORD PTR [esi+4]
	fsubp	ST(1), ST(0)
	fmul	DWORD PTR [esi+44]
	fld	DWORD PTR tv959[esp+136]
	fsub	DWORD PTR tv955[esp+136]
	fmul	DWORD PTR [esi+32]
	faddp	ST(1), ST(0)
	fxch	ST(3)
	fsubrp	ST(1), ST(0)
	fmul	DWORD PTR [esi+36]
	faddp	ST(2), ST(0)
	fxch	ST(1)
	fmul	ST(0), ST(2)
	fstp	DWORD PTR _t$[esp+172]

; 692  : 	t.Row[2].Z = s*(Row[3].W*(Row[0].X*Row[1].Y - Row[0].Y*Row[1].X) + Row[3].X*(Row[0].Y*Row[1].W - Row[0].W*Row[1].Y) + Row[3].Y*(Row[0].W*Row[1].X - Row[0].X*Row[1].W));

	fld	DWORD PTR [esi+20]
	fmul	DWORD PTR [esi]
	fld	DWORD PTR [esi+16]
	fmul	DWORD PTR [esi+4]
	fsubp	ST(1), ST(0)
	fmul	DWORD PTR [esi+60]
	fld	DWORD PTR tv978[esp+136]
	fsub	DWORD PTR tv977[esp+136]
	fmul	DWORD PTR [esi+48]
	faddp	ST(1), ST(0)
	fld	DWORD PTR tv1059[esp+136]
	fsub	DWORD PTR tv1058[esp+136]
	fmul	DWORD PTR [esi+52]
	faddp	ST(1), ST(0)
	fmul	ST(0), ST(2)
	fstp	DWORD PTR _t$[esp+176]

; 693  : 	t.Row[2].W = s*(Row[0].W*(Row[1].Y*Row[2].X - Row[1].X*Row[2].Y) + Row[0].X*(Row[1].W*Row[2].Y - Row[1].Y*Row[2].W) + Row[0].Y*(Row[1].X*Row[2].W - Row[1].W*Row[2].X));

	fld	DWORD PTR [esi+20]
	fmul	DWORD PTR [esi+32]
	fld	DWORD PTR [esi+36]
	fmul	DWORD PTR [esi+16]
	fsubp	ST(1), ST(0)
	fmul	DWORD PTR [esi+12]
	fld	DWORD PTR tv997[esp+136]
	fsub	DWORD PTR tv996[esp+136]
	fmul	DWORD PTR [esi]
	faddp	ST(1), ST(0)
	fxch	ST(1)
	fsub	DWORD PTR tv1072[esp+136]
	fmul	DWORD PTR [esi+4]
	faddp	ST(1), ST(0)
	fmul	ST(0), ST(1)
	fstp	DWORD PTR _t$[esp+180]

; 694  : 	t.Row[3].X = s*(Row[1].X*(Row[2].Z*Row[3].Y - Row[2].Y*Row[3].Z) + Row[1].Y*(Row[2].X*Row[3].Z - Row[2].Z*Row[3].X) + Row[1].Z*(Row[2].Y*Row[3].X - Row[2].X*Row[3].Y));

	fld	DWORD PTR [esi+56]
	fmul	DWORD PTR [esi+32]
	fld	DWORD PTR [esi+40]
	fmul	DWORD PTR [esi+48]
	fsubp	ST(1), ST(0)
	fmul	DWORD PTR [esi+20]
	fld	DWORD PTR [esi+36]
	fmul	DWORD PTR [esi+48]
	fld	DWORD PTR [esi+52]
	fmul	DWORD PTR [esi+32]
	fsubp	ST(1), ST(0)
	fmul	DWORD PTR [esi+24]
	faddp	ST(1), ST(0)
	fld	DWORD PTR tv934[esp+136]
	fsub	DWORD PTR tv933[esp+136]
	fmul	DWORD PTR [esi+16]
	faddp	ST(1), ST(0)
	fmul	ST(0), ST(1)
	fstp	DWORD PTR _t$[esp+184]

; 695  : 	t.Row[3].Y = s*(Row[2].X*(Row[0].Z*Row[3].Y - Row[0].Y*Row[3].Z) + Row[2].Y*(Row[0].X*Row[3].Z - Row[0].Z*Row[3].X) + Row[2].Z*(Row[0].Y*Row[3].X - Row[0].X*Row[3].Y));

	fld	DWORD PTR [esi+56]
	fmul	DWORD PTR [esi]
	fld	DWORD PTR [esi+48]
	fmul	DWORD PTR [esi+8]
	fsubp	ST(1), ST(0)
	fmul	DWORD PTR [esi+36]
	fld	DWORD PTR [esi+52]
	fmul	DWORD PTR [esi+8]
	fld	DWORD PTR [esi+56]
	fmul	DWORD PTR [esi+4]
	fsubp	ST(1), ST(0)
	fmul	DWORD PTR [esi+32]
	faddp	ST(1), ST(0)
	fld	DWORD PTR [esi+48]
	fmul	DWORD PTR [esi+4]
	fld	DWORD PTR [esi+52]
	fmul	DWORD PTR [esi]
	fsubp	ST(1), ST(0)
	fmul	DWORD PTR [esi+40]
	faddp	ST(1), ST(0)
	fmul	ST(0), ST(1)
	fstp	DWORD PTR _t$[esp+188]

; 696  : 	t.Row[3].Z = s*(Row[3].X*(Row[0].Z*Row[1].Y - Row[0].Y*Row[1].Z) + Row[3].Y*(Row[0].X*Row[1].Z - Row[0].Z*Row[1].X) + Row[3].Z*(Row[0].Y*Row[1].X - Row[0].X*Row[1].Y));

	fld	DWORD PTR [esi+20]
	fmul	DWORD PTR [esi+8]
	fld	DWORD PTR [esi+24]
	fmul	DWORD PTR [esi+4]
	fsubp	ST(1), ST(0)
	fmul	DWORD PTR [esi+48]
	fld	DWORD PTR [esi]
	fmul	DWORD PTR [esi+24]
	fld	DWORD PTR [esi+16]
	fmul	DWORD PTR [esi+8]
	fsubp	ST(1), ST(0)

; 697  : 	t.Row[3].W = s*(Row[0].X*(Row[1].Y*Row[2].Z - Row[1].Z*Row[2].Y) + Row[0].Y*(Row[1].Z*Row[2].X - Row[1].X*Row[2].Z) + Row[0].Z*(Row[1].X*Row[2].Y - Row[1].Y*Row[2].X));
; 698  : 	return t;

	mov	eax, DWORD PTR ___$ReturnUdt$[esp+132]
	mov	ecx, 16					; 00000010H
	mov	edi, eax
	fmul	DWORD PTR [esi+52]
	faddp	ST(1), ST(0)
	fld	DWORD PTR [esi+16]
	fmul	DWORD PTR [esi+4]
	fld	DWORD PTR [esi+20]
	fmul	DWORD PTR [esi]
	fsubp	ST(1), ST(0)
	fmul	DWORD PTR [esi+56]
	faddp	ST(1), ST(0)
	fmul	ST(0), ST(1)
	fstp	DWORD PTR _t$[esp+192]
	fld	DWORD PTR [esi+32]
	fmul	DWORD PTR [esi+24]
	fld	DWORD PTR [esi+40]
	fmul	DWORD PTR [esi+16]
	fsubp	ST(1), ST(0)
	fmul	DWORD PTR [esi+4]
	fld	DWORD PTR [esi+36]
	fmul	DWORD PTR [esi+16]
	fld	DWORD PTR [esi+20]
	fmul	DWORD PTR [esi+32]
	fsubp	ST(1), ST(0)
	fmul	DWORD PTR [esi+8]
	faddp	ST(1), ST(0)
	fld	DWORD PTR [esi+40]
	fmul	DWORD PTR [esi+20]
	fld	DWORD PTR [esi+36]
	fmul	DWORD PTR [esi+24]
	fsubp	ST(1), ST(0)
	fmul	DWORD PTR [esi]
	lea	esi, DWORD PTR _t$[esp+136]
	faddp	ST(1), ST(0)
	fmulp	ST(1), ST(0)
	fstp	DWORD PTR _t$[esp+196]
	rep movsd
	pop	edi
	pop	esi

; 699  : }

	add	esp, 128				; 00000080H
	ret	4
?Inverse@Matrix4@@QAE?AU1@XZ ENDP			; Matrix4::Inverse
_TEXT	ENDS
PUBLIC	?deallocate@?$_DebugHeapAllocator@D@std@@QAEXPADI@Z ; std::_DebugHeapAllocator<char>::deallocate
; Function compile flags: /Ogtpy
; File c:\program files\microsoft visual studio 8\vc\include\xdebug
;	COMDAT ?deallocate@?$_DebugHeapAllocator@D@std@@QAEXPADI@Z
_TEXT	SEGMENT
__Ptr$ = 8						; size = 4
___formal$ = 12						; size = 4
?deallocate@?$_DebugHeapAllocator@D@std@@QAEXPADI@Z PROC ; std::_DebugHeapAllocator<char>::deallocate, COMDAT
; _this$ = ecx

; 102  : 		_DELETE_CRT_VEC(_Ptr);

	mov	eax, DWORD PTR __Ptr$[esp-4]
	test	eax, eax
	je	SHORT $LN3@deallocate
	push	eax
	call	_free
	pop	ecx
$LN3@deallocate:

; 103  : 		}

	ret	8
?deallocate@?$_DebugHeapAllocator@D@std@@QAEXPADI@Z ENDP ; std::_DebugHeapAllocator<char>::deallocate
_TEXT	ENDS
PUBLIC	??0?$_DebugHeapAllocator@D@std@@QAE@XZ		; std::_DebugHeapAllocator<char>::_DebugHeapAllocator<char>
; Function compile flags: /Ogtpy
;	COMDAT ??0?$_DebugHeapAllocator@D@std@@QAE@XZ
_TEXT	SEGMENT
??0?$_DebugHeapAllocator@D@std@@QAE@XZ PROC		; std::_DebugHeapAllocator<char>::_DebugHeapAllocator<char>, COMDAT
; _this$ = ecx
	mov	eax, ecx
	ret	0
??0?$_DebugHeapAllocator@D@std@@QAE@XZ ENDP		; std::_DebugHeapAllocator<char>::_DebugHeapAllocator<char>
_TEXT	ENDS
PUBLIC	??0?$_DebugHeapAllocator@D@std@@QAE@ABV01@@Z	; std::_DebugHeapAllocator<char>::_DebugHeapAllocator<char>
; Function compile flags: /Ogtpy
;	COMDAT ??0?$_DebugHeapAllocator@D@std@@QAE@ABV01@@Z
_TEXT	SEGMENT
___that$ = 8						; size = 4
??0?$_DebugHeapAllocator@D@std@@QAE@ABV01@@Z PROC	; std::_DebugHeapAllocator<char>::_DebugHeapAllocator<char>, COMDAT
; _this$ = ecx
	mov	eax, ecx
	ret	4
??0?$_DebugHeapAllocator@D@std@@QAE@ABV01@@Z ENDP	; std::_DebugHeapAllocator<char>::_DebugHeapAllocator<char>
_TEXT	ENDS
PUBLIC	??_C@_0P@LMMLHCOB@InitEngineMath?$AA@		; `string'
PUBLIC	?InitEngineMath@@YAXXZ				; InitEngineMath
EXTRN	?HasSSE@@3PA_NA:DWORD				; HasSSE
;	COMDAT ??_C@_0P@LMMLHCOB@InitEngineMath?$AA@
; File d:\source code\stgm\engine_math.cpp
CONST	SEGMENT
??_C@_0P@LMMLHCOB@InitEngineMath?$AA@ DB 'InitEngineMath', 00H ; `string'
; Function compile flags: /Ogtpy
CONST	ENDS
;	COMDAT ?InitEngineMath@@YAXXZ
_TEXT	SEGMENT
?InitEngineMath@@YAXXZ PROC				; InitEngineMath, COMDAT

; 24   : 	Vector3Math = new _Vector3MathFunctions();

	push	OFFSET ??_C@_0P@LMMLHCOB@InitEngineMath?$AA@
	push	24					; 00000018H
	push	OFFSET ??_C@_0BC@EGBNMJNF@?4?2engine_math?4cpp?$AA@
	call	?m_setOwner@@YAXPBDI0@Z			; m_setOwner
	push	4
	call	??2@YAPAXI@Z				; operator new
	add	esp, 16					; 00000010H
	test	eax, eax
	je	SHORT $LN5@InitEngine
	mov	DWORD PTR [eax], OFFSET ??_7_Vector3MathFunctions@@6B@
	mov	DWORD PTR ?Vector3Math@@3PAV_Vector3MathFunctions@@A, eax ; Vector3Math
	jmp	SHORT $LN6@InitEngine
$LN5@InitEngine:
	mov	DWORD PTR ?Vector3Math@@3PAV_Vector3MathFunctions@@A, 0 ; Vector3Math
$LN6@InitEngine:

; 25   : #ifdef WIN32
; 26   : 	if ((HasSSE) && (*HasSSE))

	mov	eax, DWORD PTR ?HasSSE@@3PA_NA		; HasSSE
	test	eax, eax
	je	SHORT $LN2@InitEngine
	cmp	BYTE PTR [eax], 0
	je	SHORT $LN2@InitEngine

; 27   : 	{
; 28   : 		//DO NOT USE _Vector3MathFunctionsSSE, NOT FULLY OPERATIONAL YET
; 29   : 		//Vector3Math = new _Vector3MathFunctionsSSE();
; 30   : 		Vector4Math = new _Vector4MathFunctionsSSE();

	push	OFFSET ??_C@_0P@LMMLHCOB@InitEngineMath?$AA@
	push	30					; 0000001eH
	push	OFFSET ??_C@_0BC@EGBNMJNF@?4?2engine_math?4cpp?$AA@
	call	?m_setOwner@@YAXPBDI0@Z			; m_setOwner
	push	4
	call	??2@YAPAXI@Z				; operator new
	add	esp, 16					; 00000010H
	test	eax, eax
	je	SHORT $LN13@InitEngine
	mov	DWORD PTR [eax], OFFSET ??_7_Vector4MathFunctionsSSE@@6B@

; 31   : 	}
; 32   : 	else
; 33   : #endif
; 34   : 	{
; 35   : 		//Vector3Math = new _Vector3MathFunctions();
; 36   : 		Vector4Math = new _Vector4MathFunctions();

	mov	DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A, eax ; Vector4Math

; 37   : 	}
; 38   : }

	ret	0
$LN2@InitEngine:

; 31   : 	}
; 32   : 	else
; 33   : #endif
; 34   : 	{
; 35   : 		//Vector3Math = new _Vector3MathFunctions();
; 36   : 		Vector4Math = new _Vector4MathFunctions();

	push	OFFSET ??_C@_0P@LMMLHCOB@InitEngineMath?$AA@
	push	36					; 00000024H
	push	OFFSET ??_C@_0BC@EGBNMJNF@?4?2engine_math?4cpp?$AA@
	call	?m_setOwner@@YAXPBDI0@Z			; m_setOwner
	push	4
	call	??2@YAPAXI@Z				; operator new
	add	esp, 16					; 00000010H
	test	eax, eax
	je	SHORT $LN13@InitEngine
	mov	DWORD PTR [eax], OFFSET ??_7_Vector4MathFunctions@@6B@
	mov	DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A, eax ; Vector4Math

; 37   : 	}
; 38   : }

	ret	0
$LN13@InitEngine:

; 31   : 	}
; 32   : 	else
; 33   : #endif
; 34   : 	{
; 35   : 		//Vector3Math = new _Vector3MathFunctions();
; 36   : 		Vector4Math = new _Vector4MathFunctions();

	mov	DWORD PTR ?Vector4Math@@3PAV_Vector4MathFunctions@@A, 0 ; Vector4Math

; 37   : 	}
; 38   : }

	ret	0
?InitEngineMath@@YAXXZ ENDP				; InitEngineMath
_TEXT	ENDS
END
