	; Don't even think of reading this code
	; It was automatically generated by des-586.pl
	; Which is a perl program used to generate the x86 assember for
	; any of ELF, a.out, COFF, Win32, ...
	; eric <eay@cryptsoft.com>
	; 
%ifdef __omf__
section	code	use32 class=code
%else
section	.text
%endif
extern	_DES_SPtrans
global	_DES_encrypt1
_DES_encrypt1:
	push	esi
	push	edi
	; 
	; Load the 2 words
	mov	esi,		DWORD [12+esp]
	xor	ecx,		ecx
	push	ebx
	push	ebp
	mov	eax,		DWORD [esi]
	mov	ebx,		DWORD [28+esp]
	mov	edi,		DWORD [4+esi]
	; 
	; IP
	rol	eax,		4
	mov	esi,		eax
	xor	eax,		edi
	and	eax,		0f0f0f0f0h
	xor	esi,		eax
	xor	edi,		eax
	; 
	rol	edi,		20
	mov	eax,		edi
	xor	edi,		esi
	and	edi,		0fff0000fh
	xor	eax,		edi
	xor	esi,		edi
	; 
	rol	eax,		14
	mov	edi,		eax
	xor	eax,		esi
	and	eax,		033333333h
	xor	edi,		eax
	xor	esi,		eax
	; 
	rol	esi,		22
	mov	eax,		esi
	xor	esi,		edi
	and	esi,		003fc03fch
	xor	eax,		esi
	xor	edi,		esi
	; 
	rol	eax,		9
	mov	esi,		eax
	xor	eax,		edi
	and	eax,		0aaaaaaaah
	xor	esi,		eax
	xor	edi,		eax
	; 
	rol	edi,		1
	lea	ebp,		[_DES_SPtrans]
	mov	ecx,		DWORD [24+esp]
	cmp	ebx,		0
	je NEAR	@L000start_decrypt
	; 
	; Round 0
	mov	eax,		DWORD [ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [4+ecx]
	xor	eax,		esi
	xor	ecx,		ecx
	xor	edx,		esi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	edi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	edi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	edi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	edi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	edi,		DWORD [0600h+ebx+ebp]
	xor	edi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	edi,		DWORD [0400h+eax+ebp]
	xor	edi,		DWORD [0500h+edx+ebp]
	; 
	; Round 1
	mov	eax,		DWORD [8+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [12+ecx]
	xor	eax,		edi
	xor	ecx,		ecx
	xor	edx,		edi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	esi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	esi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	esi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	esi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	esi,		DWORD [0600h+ebx+ebp]
	xor	esi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	esi,		DWORD [0400h+eax+ebp]
	xor	esi,		DWORD [0500h+edx+ebp]
	; 
	; Round 2
	mov	eax,		DWORD [16+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [20+ecx]
	xor	eax,		esi
	xor	ecx,		ecx
	xor	edx,		esi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	edi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	edi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	edi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	edi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	edi,		DWORD [0600h+ebx+ebp]
	xor	edi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	edi,		DWORD [0400h+eax+ebp]
	xor	edi,		DWORD [0500h+edx+ebp]
	; 
	; Round 3
	mov	eax,		DWORD [24+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [28+ecx]
	xor	eax,		edi
	xor	ecx,		ecx
	xor	edx,		edi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	esi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	esi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	esi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	esi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	esi,		DWORD [0600h+ebx+ebp]
	xor	esi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	esi,		DWORD [0400h+eax+ebp]
	xor	esi,		DWORD [0500h+edx+ebp]
	; 
	; Round 4
	mov	eax,		DWORD [32+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [36+ecx]
	xor	eax,		esi
	xor	ecx,		ecx
	xor	edx,		esi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	edi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	edi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	edi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	edi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	edi,		DWORD [0600h+ebx+ebp]
	xor	edi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	edi,		DWORD [0400h+eax+ebp]
	xor	edi,		DWORD [0500h+edx+ebp]
	; 
	; Round 5
	mov	eax,		DWORD [40+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [44+ecx]
	xor	eax,		edi
	xor	ecx,		ecx
	xor	edx,		edi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	esi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	esi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	esi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	esi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	esi,		DWORD [0600h+ebx+ebp]
	xor	esi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	esi,		DWORD [0400h+eax+ebp]
	xor	esi,		DWORD [0500h+edx+ebp]
	; 
	; Round 6
	mov	eax,		DWORD [48+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [52+ecx]
	xor	eax,		esi
	xor	ecx,		ecx
	xor	edx,		esi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	edi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	edi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	edi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	edi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	edi,		DWORD [0600h+ebx+ebp]
	xor	edi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	edi,		DWORD [0400h+eax+ebp]
	xor	edi,		DWORD [0500h+edx+ebp]
	; 
	; Round 7
	mov	eax,		DWORD [56+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [60+ecx]
	xor	eax,		edi
	xor	ecx,		ecx
	xor	edx,		edi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	esi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	esi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	esi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	esi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	esi,		DWORD [0600h+ebx+ebp]
	xor	esi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	esi,		DWORD [0400h+eax+ebp]
	xor	esi,		DWORD [0500h+edx+ebp]
	; 
	; Round 8
	mov	eax,		DWORD [64+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [68+ecx]
	xor	eax,		esi
	xor	ecx,		ecx
	xor	edx,		esi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	edi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	edi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	edi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	edi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	edi,		DWORD [0600h+ebx+ebp]
	xor	edi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	edi,		DWORD [0400h+eax+ebp]
	xor	edi,		DWORD [0500h+edx+ebp]
	; 
	; Round 9
	mov	eax,		DWORD [72+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [76+ecx]
	xor	eax,		edi
	xor	ecx,		ecx
	xor	edx,		edi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	esi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	esi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	esi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	esi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	esi,		DWORD [0600h+ebx+ebp]
	xor	esi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	esi,		DWORD [0400h+eax+ebp]
	xor	esi,		DWORD [0500h+edx+ebp]
	; 
	; Round 10
	mov	eax,		DWORD [80+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [84+ecx]
	xor	eax,		esi
	xor	ecx,		ecx
	xor	edx,		esi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	edi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	edi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	edi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	edi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	edi,		DWORD [0600h+ebx+ebp]
	xor	edi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	edi,		DWORD [0400h+eax+ebp]
	xor	edi,		DWORD [0500h+edx+ebp]
	; 
	; Round 11
	mov	eax,		DWORD [88+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [92+ecx]
	xor	eax,		edi
	xor	ecx,		ecx
	xor	edx,		edi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	esi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	esi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	esi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	esi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	esi,		DWORD [0600h+ebx+ebp]
	xor	esi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	esi,		DWORD [0400h+eax+ebp]
	xor	esi,		DWORD [0500h+edx+ebp]
	; 
	; Round 12
	mov	eax,		DWORD [96+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [100+ecx]
	xor	eax,		esi
	xor	ecx,		ecx
	xor	edx,		esi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	edi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	edi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	edi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	edi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	edi,		DWORD [0600h+ebx+ebp]
	xor	edi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	edi,		DWORD [0400h+eax+ebp]
	xor	edi,		DWORD [0500h+edx+ebp]
	; 
	; Round 13
	mov	eax,		DWORD [104+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [108+ecx]
	xor	eax,		edi
	xor	ecx,		ecx
	xor	edx,		edi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	esi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	esi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	esi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	esi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	esi,		DWORD [0600h+ebx+ebp]
	xor	esi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	esi,		DWORD [0400h+eax+ebp]
	xor	esi,		DWORD [0500h+edx+ebp]
	; 
	; Round 14
	mov	eax,		DWORD [112+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [116+ecx]
	xor	eax,		esi
	xor	ecx,		ecx
	xor	edx,		esi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	edi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	edi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	edi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	edi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	edi,		DWORD [0600h+ebx+ebp]
	xor	edi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	edi,		DWORD [0400h+eax+ebp]
	xor	edi,		DWORD [0500h+edx+ebp]
	; 
	; Round 15
	mov	eax,		DWORD [120+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [124+ecx]
	xor	eax,		edi
	xor	ecx,		ecx
	xor	edx,		edi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	esi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	esi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	esi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	esi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	esi,		DWORD [0600h+ebx+ebp]
	xor	esi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	esi,		DWORD [0400h+eax+ebp]
	xor	esi,		DWORD [0500h+edx+ebp]
	jmp	@L001end
@L000start_decrypt:
	; 
	; Round 15
	mov	eax,		DWORD [120+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [124+ecx]
	xor	eax,		esi
	xor	ecx,		ecx
	xor	edx,		esi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	edi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	edi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	edi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	edi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	edi,		DWORD [0600h+ebx+ebp]
	xor	edi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	edi,		DWORD [0400h+eax+ebp]
	xor	edi,		DWORD [0500h+edx+ebp]
	; 
	; Round 14
	mov	eax,		DWORD [112+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [116+ecx]
	xor	eax,		edi
	xor	ecx,		ecx
	xor	edx,		edi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	esi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	esi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	esi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	esi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	esi,		DWORD [0600h+ebx+ebp]
	xor	esi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	esi,		DWORD [0400h+eax+ebp]
	xor	esi,		DWORD [0500h+edx+ebp]
	; 
	; Round 13
	mov	eax,		DWORD [104+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [108+ecx]
	xor	eax,		esi
	xor	ecx,		ecx
	xor	edx,		esi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	edi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	edi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	edi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	edi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	edi,		DWORD [0600h+ebx+ebp]
	xor	edi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	edi,		DWORD [0400h+eax+ebp]
	xor	edi,		DWORD [0500h+edx+ebp]
	; 
	; Round 12
	mov	eax,		DWORD [96+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [100+ecx]
	xor	eax,		edi
	xor	ecx,		ecx
	xor	edx,		edi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	esi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	esi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	esi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	esi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	esi,		DWORD [0600h+ebx+ebp]
	xor	esi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	esi,		DWORD [0400h+eax+ebp]
	xor	esi,		DWORD [0500h+edx+ebp]
	; 
	; Round 11
	mov	eax,		DWORD [88+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [92+ecx]
	xor	eax,		esi
	xor	ecx,		ecx
	xor	edx,		esi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	edi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	edi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	edi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	edi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	edi,		DWORD [0600h+ebx+ebp]
	xor	edi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	edi,		DWORD [0400h+eax+ebp]
	xor	edi,		DWORD [0500h+edx+ebp]
	; 
	; Round 10
	mov	eax,		DWORD [80+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [84+ecx]
	xor	eax,		edi
	xor	ecx,		ecx
	xor	edx,		edi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	esi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	esi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	esi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	esi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	esi,		DWORD [0600h+ebx+ebp]
	xor	esi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	esi,		DWORD [0400h+eax+ebp]
	xor	esi,		DWORD [0500h+edx+ebp]
	; 
	; Round 9
	mov	eax,		DWORD [72+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [76+ecx]
	xor	eax,		esi
	xor	ecx,		ecx
	xor	edx,		esi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	edi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	edi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	edi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	edi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	edi,		DWORD [0600h+ebx+ebp]
	xor	edi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	edi,		DWORD [0400h+eax+ebp]
	xor	edi,		DWORD [0500h+edx+ebp]
	; 
	; Round 8
	mov	eax,		DWORD [64+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [68+ecx]
	xor	eax,		edi
	xor	ecx,		ecx
	xor	edx,		edi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	esi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	esi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	esi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	esi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	esi,		DWORD [0600h+ebx+ebp]
	xor	esi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	esi,		DWORD [0400h+eax+ebp]
	xor	esi,		DWORD [0500h+edx+ebp]
	; 
	; Round 7
	mov	eax,		DWORD [56+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [60+ecx]
	xor	eax,		esi
	xor	ecx,		ecx
	xor	edx,		esi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	edi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	edi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	edi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	edi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	edi,		DWORD [0600h+ebx+ebp]
	xor	edi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	edi,		DWORD [0400h+eax+ebp]
	xor	edi,		DWORD [0500h+edx+ebp]
	; 
	; Round 6
	mov	eax,		DWORD [48+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [52+ecx]
	xor	eax,		edi
	xor	ecx,		ecx
	xor	edx,		edi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	esi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	esi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	esi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	esi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	esi,		DWORD [0600h+ebx+ebp]
	xor	esi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	esi,		DWORD [0400h+eax+ebp]
	xor	esi,		DWORD [0500h+edx+ebp]
	; 
	; Round 5
	mov	eax,		DWORD [40+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [44+ecx]
	xor	eax,		esi
	xor	ecx,		ecx
	xor	edx,		esi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	edi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	edi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	edi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	edi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	edi,		DWORD [0600h+ebx+ebp]
	xor	edi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	edi,		DWORD [0400h+eax+ebp]
	xor	edi,		DWORD [0500h+edx+ebp]
	; 
	; Round 4
	mov	eax,		DWORD [32+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [36+ecx]
	xor	eax,		edi
	xor	ecx,		ecx
	xor	edx,		edi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	esi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	esi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	esi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	esi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	esi,		DWORD [0600h+ebx+ebp]
	xor	esi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	esi,		DWORD [0400h+eax+ebp]
	xor	esi,		DWORD [0500h+edx+ebp]
	; 
	; Round 3
	mov	eax,		DWORD [24+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [28+ecx]
	xor	eax,		esi
	xor	ecx,		ecx
	xor	edx,		esi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	edi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	edi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	edi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	edi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	edi,		DWORD [0600h+ebx+ebp]
	xor	edi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	edi,		DWORD [0400h+eax+ebp]
	xor	edi,		DWORD [0500h+edx+ebp]
	; 
	; Round 2
	mov	eax,		DWORD [16+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [20+ecx]
	xor	eax,		edi
	xor	ecx,		ecx
	xor	edx,		edi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	esi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	esi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	esi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	esi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	esi,		DWORD [0600h+ebx+ebp]
	xor	esi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	esi,		DWORD [0400h+eax+ebp]
	xor	esi,		DWORD [0500h+edx+ebp]
	; 
	; Round 1
	mov	eax,		DWORD [8+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [12+ecx]
	xor	eax,		esi
	xor	ecx,		ecx
	xor	edx,		esi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	edi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	edi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	edi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	edi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	edi,		DWORD [0600h+ebx+ebp]
	xor	edi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	edi,		DWORD [0400h+eax+ebp]
	xor	edi,		DWORD [0500h+edx+ebp]
	; 
	; Round 0
	mov	eax,		DWORD [ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [4+ecx]
	xor	eax,		edi
	xor	ecx,		ecx
	xor	edx,		edi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	esi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	esi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	esi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	esi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	esi,		DWORD [0600h+ebx+ebp]
	xor	esi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	esi,		DWORD [0400h+eax+ebp]
	xor	esi,		DWORD [0500h+edx+ebp]
@L001end:
	; 
	; FP
	mov	edx,		DWORD [20+esp]
	ror	esi,		1
	mov	eax,		edi
	xor	edi,		esi
	and	edi,		0aaaaaaaah
	xor	eax,		edi
	xor	esi,		edi
	; 
	rol	eax,		23
	mov	edi,		eax
	xor	eax,		esi
	and	eax,		003fc03fch
	xor	edi,		eax
	xor	esi,		eax
	; 
	rol	edi,		10
	mov	eax,		edi
	xor	edi,		esi
	and	edi,		033333333h
	xor	eax,		edi
	xor	esi,		edi
	; 
	rol	esi,		18
	mov	edi,		esi
	xor	esi,		eax
	and	esi,		0fff0000fh
	xor	edi,		esi
	xor	eax,		esi
	; 
	rol	edi,		12
	mov	esi,		edi
	xor	edi,		eax
	and	edi,		0f0f0f0f0h
	xor	esi,		edi
	xor	eax,		edi
	; 
	ror	eax,		4
	mov	DWORD [edx],	eax
	mov	DWORD [4+edx],	esi
	pop	ebp
	pop	ebx
	pop	edi
	pop	esi
	ret
global	_DES_encrypt2
_DES_encrypt2:
	push	esi
	push	edi
	; 
	; Load the 2 words
	mov	eax,		DWORD [12+esp]
	xor	ecx,		ecx
	push	ebx
	push	ebp
	mov	esi,		DWORD [eax]
	mov	ebx,		DWORD [28+esp]
	rol	esi,		3
	mov	edi,		DWORD [4+eax]
	rol	edi,		3
	lea	ebp,		[_DES_SPtrans]
	mov	ecx,		DWORD [24+esp]
	cmp	ebx,		0
	je NEAR	@L002start_decrypt
	; 
	; Round 0
	mov	eax,		DWORD [ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [4+ecx]
	xor	eax,		esi
	xor	ecx,		ecx
	xor	edx,		esi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	edi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	edi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	edi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	edi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	edi,		DWORD [0600h+ebx+ebp]
	xor	edi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	edi,		DWORD [0400h+eax+ebp]
	xor	edi,		DWORD [0500h+edx+ebp]
	; 
	; Round 1
	mov	eax,		DWORD [8+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [12+ecx]
	xor	eax,		edi
	xor	ecx,		ecx
	xor	edx,		edi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	esi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	esi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	esi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	esi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	esi,		DWORD [0600h+ebx+ebp]
	xor	esi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	esi,		DWORD [0400h+eax+ebp]
	xor	esi,		DWORD [0500h+edx+ebp]
	; 
	; Round 2
	mov	eax,		DWORD [16+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [20+ecx]
	xor	eax,		esi
	xor	ecx,		ecx
	xor	edx,		esi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	edi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	edi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	edi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	edi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	edi,		DWORD [0600h+ebx+ebp]
	xor	edi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	edi,		DWORD [0400h+eax+ebp]
	xor	edi,		DWORD [0500h+edx+ebp]
	; 
	; Round 3
	mov	eax,		DWORD [24+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [28+ecx]
	xor	eax,		edi
	xor	ecx,		ecx
	xor	edx,		edi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	esi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	esi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	esi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	esi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	esi,		DWORD [0600h+ebx+ebp]
	xor	esi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	esi,		DWORD [0400h+eax+ebp]
	xor	esi,		DWORD [0500h+edx+ebp]
	; 
	; Round 4
	mov	eax,		DWORD [32+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [36+ecx]
	xor	eax,		esi
	xor	ecx,		ecx
	xor	edx,		esi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	edi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	edi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	edi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	edi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	edi,		DWORD [0600h+ebx+ebp]
	xor	edi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	edi,		DWORD [0400h+eax+ebp]
	xor	edi,		DWORD [0500h+edx+ebp]
	; 
	; Round 5
	mov	eax,		DWORD [40+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [44+ecx]
	xor	eax,		edi
	xor	ecx,		ecx
	xor	edx,		edi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	esi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	esi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	esi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	esi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	esi,		DWORD [0600h+ebx+ebp]
	xor	esi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	esi,		DWORD [0400h+eax+ebp]
	xor	esi,		DWORD [0500h+edx+ebp]
	; 
	; Round 6
	mov	eax,		DWORD [48+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [52+ecx]
	xor	eax,		esi
	xor	ecx,		ecx
	xor	edx,		esi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	edi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	edi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	edi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	edi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	edi,		DWORD [0600h+ebx+ebp]
	xor	edi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	edi,		DWORD [0400h+eax+ebp]
	xor	edi,		DWORD [0500h+edx+ebp]
	; 
	; Round 7
	mov	eax,		DWORD [56+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [60+ecx]
	xor	eax,		edi
	xor	ecx,		ecx
	xor	edx,		edi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	esi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	esi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	esi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	esi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	esi,		DWORD [0600h+ebx+ebp]
	xor	esi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	esi,		DWORD [0400h+eax+ebp]
	xor	esi,		DWORD [0500h+edx+ebp]
	; 
	; Round 8
	mov	eax,		DWORD [64+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [68+ecx]
	xor	eax,		esi
	xor	ecx,		ecx
	xor	edx,		esi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	edi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	edi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	edi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	edi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	edi,		DWORD [0600h+ebx+ebp]
	xor	edi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	edi,		DWORD [0400h+eax+ebp]
	xor	edi,		DWORD [0500h+edx+ebp]
	; 
	; Round 9
	mov	eax,		DWORD [72+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [76+ecx]
	xor	eax,		edi
	xor	ecx,		ecx
	xor	edx,		edi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	esi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	esi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	esi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	esi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	esi,		DWORD [0600h+ebx+ebp]
	xor	esi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	esi,		DWORD [0400h+eax+ebp]
	xor	esi,		DWORD [0500h+edx+ebp]
	; 
	; Round 10
	mov	eax,		DWORD [80+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [84+ecx]
	xor	eax,		esi
	xor	ecx,		ecx
	xor	edx,		esi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	edi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	edi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	edi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	edi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	edi,		DWORD [0600h+ebx+ebp]
	xor	edi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	edi,		DWORD [0400h+eax+ebp]
	xor	edi,		DWORD [0500h+edx+ebp]
	; 
	; Round 11
	mov	eax,		DWORD [88+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [92+ecx]
	xor	eax,		edi
	xor	ecx,		ecx
	xor	edx,		edi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	esi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	esi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	esi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	esi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	esi,		DWORD [0600h+ebx+ebp]
	xor	esi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	esi,		DWORD [0400h+eax+ebp]
	xor	esi,		DWORD [0500h+edx+ebp]
	; 
	; Round 12
	mov	eax,		DWORD [96+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [100+ecx]
	xor	eax,		esi
	xor	ecx,		ecx
	xor	edx,		esi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	edi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	edi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	edi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	edi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	edi,		DWORD [0600h+ebx+ebp]
	xor	edi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	edi,		DWORD [0400h+eax+ebp]
	xor	edi,		DWORD [0500h+edx+ebp]
	; 
	; Round 13
	mov	eax,		DWORD [104+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [108+ecx]
	xor	eax,		edi
	xor	ecx,		ecx
	xor	edx,		edi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	esi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	esi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	esi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	esi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	esi,		DWORD [0600h+ebx+ebp]
	xor	esi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	esi,		DWORD [0400h+eax+ebp]
	xor	esi,		DWORD [0500h+edx+ebp]
	; 
	; Round 14
	mov	eax,		DWORD [112+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [116+ecx]
	xor	eax,		esi
	xor	ecx,		ecx
	xor	edx,		esi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	edi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	edi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	edi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	edi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	edi,		DWORD [0600h+ebx+ebp]
	xor	edi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	edi,		DWORD [0400h+eax+ebp]
	xor	edi,		DWORD [0500h+edx+ebp]
	; 
	; Round 15
	mov	eax,		DWORD [120+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [124+ecx]
	xor	eax,		edi
	xor	ecx,		ecx
	xor	edx,		edi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	esi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	esi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	esi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	esi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	esi,		DWORD [0600h+ebx+ebp]
	xor	esi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	esi,		DWORD [0400h+eax+ebp]
	xor	esi,		DWORD [0500h+edx+ebp]
	jmp	@L003end
@L002start_decrypt:
	; 
	; Round 15
	mov	eax,		DWORD [120+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [124+ecx]
	xor	eax,		esi
	xor	ecx,		ecx
	xor	edx,		esi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	edi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	edi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	edi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	edi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	edi,		DWORD [0600h+ebx+ebp]
	xor	edi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	edi,		DWORD [0400h+eax+ebp]
	xor	edi,		DWORD [0500h+edx+ebp]
	; 
	; Round 14
	mov	eax,		DWORD [112+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [116+ecx]
	xor	eax,		edi
	xor	ecx,		ecx
	xor	edx,		edi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	esi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	esi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	esi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	esi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	esi,		DWORD [0600h+ebx+ebp]
	xor	esi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	esi,		DWORD [0400h+eax+ebp]
	xor	esi,		DWORD [0500h+edx+ebp]
	; 
	; Round 13
	mov	eax,		DWORD [104+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [108+ecx]
	xor	eax,		esi
	xor	ecx,		ecx
	xor	edx,		esi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	edi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	edi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	edi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	edi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	edi,		DWORD [0600h+ebx+ebp]
	xor	edi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	edi,		DWORD [0400h+eax+ebp]
	xor	edi,		DWORD [0500h+edx+ebp]
	; 
	; Round 12
	mov	eax,		DWORD [96+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [100+ecx]
	xor	eax,		edi
	xor	ecx,		ecx
	xor	edx,		edi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	esi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	esi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	esi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	esi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	esi,		DWORD [0600h+ebx+ebp]
	xor	esi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	esi,		DWORD [0400h+eax+ebp]
	xor	esi,		DWORD [0500h+edx+ebp]
	; 
	; Round 11
	mov	eax,		DWORD [88+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [92+ecx]
	xor	eax,		esi
	xor	ecx,		ecx
	xor	edx,		esi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	edi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	edi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	edi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	edi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	edi,		DWORD [0600h+ebx+ebp]
	xor	edi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	edi,		DWORD [0400h+eax+ebp]
	xor	edi,		DWORD [0500h+edx+ebp]
	; 
	; Round 10
	mov	eax,		DWORD [80+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [84+ecx]
	xor	eax,		edi
	xor	ecx,		ecx
	xor	edx,		edi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	esi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	esi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	esi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	esi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	esi,		DWORD [0600h+ebx+ebp]
	xor	esi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	esi,		DWORD [0400h+eax+ebp]
	xor	esi,		DWORD [0500h+edx+ebp]
	; 
	; Round 9
	mov	eax,		DWORD [72+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [76+ecx]
	xor	eax,		esi
	xor	ecx,		ecx
	xor	edx,		esi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	edi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	edi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	edi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	edi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	edi,		DWORD [0600h+ebx+ebp]
	xor	edi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	edi,		DWORD [0400h+eax+ebp]
	xor	edi,		DWORD [0500h+edx+ebp]
	; 
	; Round 8
	mov	eax,		DWORD [64+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [68+ecx]
	xor	eax,		edi
	xor	ecx,		ecx
	xor	edx,		edi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	esi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	esi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	esi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	esi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	esi,		DWORD [0600h+ebx+ebp]
	xor	esi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	esi,		DWORD [0400h+eax+ebp]
	xor	esi,		DWORD [0500h+edx+ebp]
	; 
	; Round 7
	mov	eax,		DWORD [56+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [60+ecx]
	xor	eax,		esi
	xor	ecx,		ecx
	xor	edx,		esi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	edi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	edi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	edi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	edi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	edi,		DWORD [0600h+ebx+ebp]
	xor	edi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	edi,		DWORD [0400h+eax+ebp]
	xor	edi,		DWORD [0500h+edx+ebp]
	; 
	; Round 6
	mov	eax,		DWORD [48+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [52+ecx]
	xor	eax,		edi
	xor	ecx,		ecx
	xor	edx,		edi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	esi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	esi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	esi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	esi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	esi,		DWORD [0600h+ebx+ebp]
	xor	esi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	esi,		DWORD [0400h+eax+ebp]
	xor	esi,		DWORD [0500h+edx+ebp]
	; 
	; Round 5
	mov	eax,		DWORD [40+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [44+ecx]
	xor	eax,		esi
	xor	ecx,		ecx
	xor	edx,		esi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	edi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	edi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	edi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	edi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	edi,		DWORD [0600h+ebx+ebp]
	xor	edi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	edi,		DWORD [0400h+eax+ebp]
	xor	edi,		DWORD [0500h+edx+ebp]
	; 
	; Round 4
	mov	eax,		DWORD [32+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [36+ecx]
	xor	eax,		edi
	xor	ecx,		ecx
	xor	edx,		edi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	esi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	esi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	esi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	esi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	esi,		DWORD [0600h+ebx+ebp]
	xor	esi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	esi,		DWORD [0400h+eax+ebp]
	xor	esi,		DWORD [0500h+edx+ebp]
	; 
	; Round 3
	mov	eax,		DWORD [24+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [28+ecx]
	xor	eax,		esi
	xor	ecx,		ecx
	xor	edx,		esi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	edi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	edi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	edi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	edi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	edi,		DWORD [0600h+ebx+ebp]
	xor	edi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	edi,		DWORD [0400h+eax+ebp]
	xor	edi,		DWORD [0500h+edx+ebp]
	; 
	; Round 2
	mov	eax,		DWORD [16+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [20+ecx]
	xor	eax,		edi
	xor	ecx,		ecx
	xor	edx,		edi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	esi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	esi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	esi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	esi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	esi,		DWORD [0600h+ebx+ebp]
	xor	esi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	esi,		DWORD [0400h+eax+ebp]
	xor	esi,		DWORD [0500h+edx+ebp]
	; 
	; Round 1
	mov	eax,		DWORD [8+ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [12+ecx]
	xor	eax,		esi
	xor	ecx,		ecx
	xor	edx,		esi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	edi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	edi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	edi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	edi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	edi,		DWORD [0600h+ebx+ebp]
	xor	edi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	edi,		DWORD [0400h+eax+ebp]
	xor	edi,		DWORD [0500h+edx+ebp]
	; 
	; Round 0
	mov	eax,		DWORD [ecx]
	xor	ebx,		ebx
	mov	edx,		DWORD [4+ecx]
	xor	eax,		edi
	xor	ecx,		ecx
	xor	edx,		edi
	and	eax,		0fcfcfcfch
	and	edx,		0cfcfcfcfh
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	xor	esi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	esi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	esi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	esi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	xor	esi,		DWORD [0600h+ebx+ebp]
	xor	esi,		DWORD [0700h+ecx+ebp]
	mov	ecx,		DWORD [24+esp]
	xor	esi,		DWORD [0400h+eax+ebp]
	xor	esi,		DWORD [0500h+edx+ebp]
@L003end:
	; 
	; Fixup
	ror	edi,		3
	mov	eax,		DWORD [20+esp]
	ror	esi,		3
	mov	DWORD [eax],	edi
	mov	DWORD [4+eax],	esi
	pop	ebp
	pop	ebx
	pop	edi
	pop	esi
	ret
global	_DES_encrypt3
_DES_encrypt3:
	push	ebx
	mov	ebx,		DWORD [8+esp]
	push	ebp
	push	esi
	push	edi
	; 
	; Load the data words
	mov	edi,		DWORD [ebx]
	mov	esi,		DWORD [4+ebx]
	sub	esp,		12
	; 
	; IP
	rol	edi,		4
	mov	edx,		edi
	xor	edi,		esi
	and	edi,		0f0f0f0f0h
	xor	edx,		edi
	xor	esi,		edi
	; 
	rol	esi,		20
	mov	edi,		esi
	xor	esi,		edx
	and	esi,		0fff0000fh
	xor	edi,		esi
	xor	edx,		esi
	; 
	rol	edi,		14
	mov	esi,		edi
	xor	edi,		edx
	and	edi,		033333333h
	xor	esi,		edi
	xor	edx,		edi
	; 
	rol	edx,		22
	mov	edi,		edx
	xor	edx,		esi
	and	edx,		003fc03fch
	xor	edi,		edx
	xor	esi,		edx
	; 
	rol	edi,		9
	mov	edx,		edi
	xor	edi,		esi
	and	edi,		0aaaaaaaah
	xor	edx,		edi
	xor	esi,		edi
	; 
	ror	edx,		3
	ror	esi,		2
	mov	DWORD [4+ebx],	esi
	mov	eax,		DWORD [36+esp]
	mov	DWORD [ebx],	edx
	mov	edi,		DWORD [40+esp]
	mov	esi,		DWORD [44+esp]
	mov	DWORD [8+esp],	DWORD 1
	mov	DWORD [4+esp],	eax
	mov	DWORD [esp],	ebx
	call	_DES_encrypt2
	mov	DWORD [8+esp],	DWORD 0
	mov	DWORD [4+esp],	edi
	mov	DWORD [esp],	ebx
	call	_DES_encrypt2
	mov	DWORD [8+esp],	DWORD 1
	mov	DWORD [4+esp],	esi
	mov	DWORD [esp],	ebx
	call	_DES_encrypt2
	add	esp,		12
	mov	edi,		DWORD [ebx]
	mov	esi,		DWORD [4+ebx]
	; 
	; FP
	rol	esi,		2
	rol	edi,		3
	mov	eax,		edi
	xor	edi,		esi
	and	edi,		0aaaaaaaah
	xor	eax,		edi
	xor	esi,		edi
	; 
	rol	eax,		23
	mov	edi,		eax
	xor	eax,		esi
	and	eax,		003fc03fch
	xor	edi,		eax
	xor	esi,		eax
	; 
	rol	edi,		10
	mov	eax,		edi
	xor	edi,		esi
	and	edi,		033333333h
	xor	eax,		edi
	xor	esi,		edi
	; 
	rol	esi,		18
	mov	edi,		esi
	xor	esi,		eax
	and	esi,		0fff0000fh
	xor	edi,		esi
	xor	eax,		esi
	; 
	rol	edi,		12
	mov	esi,		edi
	xor	edi,		eax
	and	edi,		0f0f0f0f0h
	xor	esi,		edi
	xor	eax,		edi
	; 
	ror	eax,		4
	mov	DWORD [ebx],	eax
	mov	DWORD [4+ebx],	esi
	pop	edi
	pop	esi
	pop	ebp
	pop	ebx
	ret
global	_DES_decrypt3
_DES_decrypt3:
	push	ebx
	mov	ebx,		DWORD [8+esp]
	push	ebp
	push	esi
	push	edi
	; 
	; Load the data words
	mov	edi,		DWORD [ebx]
	mov	esi,		DWORD [4+ebx]
	sub	esp,		12
	; 
	; IP
	rol	edi,		4
	mov	edx,		edi
	xor	edi,		esi
	and	edi,		0f0f0f0f0h
	xor	edx,		edi
	xor	esi,		edi
	; 
	rol	esi,		20
	mov	edi,		esi
	xor	esi,		edx
	and	esi,		0fff0000fh
	xor	edi,		esi
	xor	edx,		esi
	; 
	rol	edi,		14
	mov	esi,		edi
	xor	edi,		edx
	and	edi,		033333333h
	xor	esi,		edi
	xor	edx,		edi
	; 
	rol	edx,		22
	mov	edi,		edx
	xor	edx,		esi
	and	edx,		003fc03fch
	xor	edi,		edx
	xor	esi,		edx
	; 
	rol	edi,		9
	mov	edx,		edi
	xor	edi,		esi
	and	edi,		0aaaaaaaah
	xor	edx,		edi
	xor	esi,		edi
	; 
	ror	edx,		3
	ror	esi,		2
	mov	DWORD [4+ebx],	esi
	mov	esi,		DWORD [36+esp]
	mov	DWORD [ebx],	edx
	mov	edi,		DWORD [40+esp]
	mov	eax,		DWORD [44+esp]
	mov	DWORD [8+esp],	DWORD 0
	mov	DWORD [4+esp],	eax
	mov	DWORD [esp],	ebx
	call	_DES_encrypt2
	mov	DWORD [8+esp],	DWORD 1
	mov	DWORD [4+esp],	edi
	mov	DWORD [esp],	ebx
	call	_DES_encrypt2
	mov	DWORD [8+esp],	DWORD 0
	mov	DWORD [4+esp],	esi
	mov	DWORD [esp],	ebx
	call	_DES_encrypt2
	add	esp,		12
	mov	edi,		DWORD [ebx]
	mov	esi,		DWORD [4+ebx]
	; 
	; FP
	rol	esi,		2
	rol	edi,		3
	mov	eax,		edi
	xor	edi,		esi
	and	edi,		0aaaaaaaah
	xor	eax,		edi
	xor	esi,		edi
	; 
	rol	eax,		23
	mov	edi,		eax
	xor	eax,		esi
	and	eax,		003fc03fch
	xor	edi,		eax
	xor	esi,		eax
	; 
	rol	edi,		10
	mov	eax,		edi
	xor	edi,		esi
	and	edi,		033333333h
	xor	eax,		edi
	xor	esi,		edi
	; 
	rol	esi,		18
	mov	edi,		esi
	xor	esi,		eax
	and	esi,		0fff0000fh
	xor	edi,		esi
	xor	eax,		esi
	; 
	rol	edi,		12
	mov	esi,		edi
	xor	edi,		eax
	and	edi,		0f0f0f0f0h
	xor	esi,		edi
	xor	eax,		edi
	; 
	ror	eax,		4
	mov	DWORD [ebx],	eax
	mov	DWORD [4+ebx],	esi
	pop	edi
	pop	esi
	pop	ebp
	pop	ebx
	ret
global	_DES_ncbc_encrypt
_DES_ncbc_encrypt:
	; 
	push	ebp
	push	ebx
	push	esi
	push	edi
	mov	ebp,		DWORD [28+esp]
	; getting iv ptr from parameter 4
	mov	ebx,		DWORD [36+esp]
	mov	esi,		DWORD [ebx]
	mov	edi,		DWORD [4+ebx]
	push	edi
	push	esi
	push	edi
	push	esi
	mov	ebx,		esp
	mov	esi,		DWORD [36+esp]
	mov	edi,		DWORD [40+esp]
	; getting encrypt flag from parameter 5
	mov	ecx,		DWORD [56+esp]
	; get and push parameter 5
	push	ecx
	; get and push parameter 3
	mov	eax,		DWORD [52+esp]
	push	eax
	push	ebx
	cmp	ecx,		0
	jz NEAR	@L004decrypt
	and	ebp,		4294967288
	mov	eax,		DWORD [12+esp]
	mov	ebx,		DWORD [16+esp]
	jz NEAR	@L005encrypt_finish
@L006encrypt_loop:
	mov	ecx,		DWORD [esi]
	mov	edx,		DWORD [4+esi]
	xor	eax,		ecx
	xor	ebx,		edx
	mov	DWORD [12+esp],	eax
	mov	DWORD [16+esp],	ebx
	call	_DES_encrypt1
	mov	eax,		DWORD [12+esp]
	mov	ebx,		DWORD [16+esp]
	mov	DWORD [edi],	eax
	mov	DWORD [4+edi],	ebx
	add	esi,		8
	add	edi,		8
	sub	ebp,		8
	jnz NEAR	@L006encrypt_loop
@L005encrypt_finish:
	mov	ebp,		DWORD [56+esp]
	and	ebp,		7
	jz NEAR	@L007finish
	call	@L008PIC_point
@L008PIC_point:
	pop	edx
	lea	ecx,		[(@L009cbc_enc_jmp_table-@L008PIC_point)+edx]
	mov	ebp,		DWORD [ebp*4+ecx]
	add	ebp,		edx
	xor	ecx,		ecx
	xor	edx,		edx
	jmp	ebp
@L010ej7:
	mov	dh,		BYTE [6+esi]
	shl	edx,		8
@L011ej6:
	mov	dh,		BYTE [5+esi]
@L012ej5:
	mov	dl,		BYTE [4+esi]
@L013ej4:
	mov	ecx,		DWORD [esi]
	jmp	@L014ejend
@L015ej3:
	mov	ch,		BYTE [2+esi]
	shl	ecx,		8
@L016ej2:
	mov	ch,		BYTE [1+esi]
@L017ej1:
	mov	cl,		BYTE [esi]
@L014ejend:
	xor	eax,		ecx
	xor	ebx,		edx
	mov	DWORD [12+esp],	eax
	mov	DWORD [16+esp],	ebx
	call	_DES_encrypt1
	mov	eax,		DWORD [12+esp]
	mov	ebx,		DWORD [16+esp]
	mov	DWORD [edi],	eax
	mov	DWORD [4+edi],	ebx
	jmp	@L007finish
@L004decrypt:
	and	ebp,		4294967288
	mov	eax,		DWORD [20+esp]
	mov	ebx,		DWORD [24+esp]
	jz NEAR	@L018decrypt_finish
@L019decrypt_loop:
	mov	eax,		DWORD [esi]
	mov	ebx,		DWORD [4+esi]
	mov	DWORD [12+esp],	eax
	mov	DWORD [16+esp],	ebx
	call	_DES_encrypt1
	mov	eax,		DWORD [12+esp]
	mov	ebx,		DWORD [16+esp]
	mov	ecx,		DWORD [20+esp]
	mov	edx,		DWORD [24+esp]
	xor	ecx,		eax
	xor	edx,		ebx
	mov	eax,		DWORD [esi]
	mov	ebx,		DWORD [4+esi]
	mov	DWORD [edi],	ecx
	mov	DWORD [4+edi],	edx
	mov	DWORD [20+esp],	eax
	mov	DWORD [24+esp],	ebx
	add	esi,		8
	add	edi,		8
	sub	ebp,		8
	jnz NEAR	@L019decrypt_loop
@L018decrypt_finish:
	mov	ebp,		DWORD [56+esp]
	and	ebp,		7
	jz NEAR	@L007finish
	mov	eax,		DWORD [esi]
	mov	ebx,		DWORD [4+esi]
	mov	DWORD [12+esp],	eax
	mov	DWORD [16+esp],	ebx
	call	_DES_encrypt1
	mov	eax,		DWORD [12+esp]
	mov	ebx,		DWORD [16+esp]
	mov	ecx,		DWORD [20+esp]
	mov	edx,		DWORD [24+esp]
	xor	ecx,		eax
	xor	edx,		ebx
	mov	eax,		DWORD [esi]
	mov	ebx,		DWORD [4+esi]
@L020dj7:
	ror	edx,		16
	mov	BYTE [6+edi],	dl
	shr	edx,		16
@L021dj6:
	mov	BYTE [5+edi],	dh
@L022dj5:
	mov	BYTE [4+edi],	dl
@L023dj4:
	mov	DWORD [edi],	ecx
	jmp	@L024djend
@L025dj3:
	ror	ecx,		16
	mov	BYTE [2+edi],	cl
	shl	ecx,		16
@L026dj2:
	mov	BYTE [1+esi],	ch
@L027dj1:
	mov	BYTE [esi],	cl
@L024djend:
	jmp	@L007finish
@L007finish:
	mov	ecx,		DWORD [64+esp]
	add	esp,		28
	mov	DWORD [ecx],	eax
	mov	DWORD [4+ecx],	ebx
	pop	edi
	pop	esi
	pop	ebx
	pop	ebp
	ret
align	64
@L009cbc_enc_jmp_table:
DD	0
DD	@L017ej1-@L008PIC_point
DD	@L016ej2-@L008PIC_point
DD	@L015ej3-@L008PIC_point
DD	@L013ej4-@L008PIC_point
DD	@L012ej5-@L008PIC_point
DD	@L011ej6-@L008PIC_point
DD	@L010ej7-@L008PIC_point
align	64
global	_DES_ede3_cbc_encrypt
_DES_ede3_cbc_encrypt:
	; 
	push	ebp
	push	ebx
	push	esi
	push	edi
	mov	ebp,		DWORD [28+esp]
	; getting iv ptr from parameter 6
	mov	ebx,		DWORD [44+esp]
	mov	esi,		DWORD [ebx]
	mov	edi,		DWORD [4+ebx]
	push	edi
	push	esi
	push	edi
	push	esi
	mov	ebx,		esp
	mov	esi,		DWORD [36+esp]
	mov	edi,		DWORD [40+esp]
	; getting encrypt flag from parameter 7
	mov	ecx,		DWORD [64+esp]
	; get and push parameter 5
	mov	eax,		DWORD [56+esp]
	push	eax
	; get and push parameter 4
	mov	eax,		DWORD [56+esp]
	push	eax
	; get and push parameter 3
	mov	eax,		DWORD [56+esp]
	push	eax
	push	ebx
	cmp	ecx,		0
	jz NEAR	@L028decrypt
	and	ebp,		4294967288
	mov	eax,		DWORD [16+esp]
	mov	ebx,		DWORD [20+esp]
	jz NEAR	@L029encrypt_finish
@L030encrypt_loop:
	mov	ecx,		DWORD [esi]
	mov	edx,		DWORD [4+esi]
	xor	eax,		ecx
	xor	ebx,		edx
	mov	DWORD [16+esp],	eax
	mov	DWORD [20+esp],	ebx
	call	_DES_encrypt3
	mov	eax,		DWORD [16+esp]
	mov	ebx,		DWORD [20+esp]
	mov	DWORD [edi],	eax
	mov	DWORD [4+edi],	ebx
	add	esi,		8
	add	edi,		8
	sub	ebp,		8
	jnz NEAR	@L030encrypt_loop
@L029encrypt_finish:
	mov	ebp,		DWORD [60+esp]
	and	ebp,		7
	jz NEAR	@L031finish
	call	@L032PIC_point
@L032PIC_point:
	pop	edx
	lea	ecx,		[(@L033cbc_enc_jmp_table-@L032PIC_point)+edx]
	mov	ebp,		DWORD [ebp*4+ecx]
	add	ebp,		edx
	xor	ecx,		ecx
	xor	edx,		edx
	jmp	ebp
@L034ej7:
	mov	dh,		BYTE [6+esi]
	shl	edx,		8
@L035ej6:
	mov	dh,		BYTE [5+esi]
@L036ej5:
	mov	dl,		BYTE [4+esi]
@L037ej4:
	mov	ecx,		DWORD [esi]
	jmp	@L038ejend
@L039ej3:
	mov	ch,		BYTE [2+esi]
	shl	ecx,		8
@L040ej2:
	mov	ch,		BYTE [1+esi]
@L041ej1:
	mov	cl,		BYTE [esi]
@L038ejend:
	xor	eax,		ecx
	xor	ebx,		edx
	mov	DWORD [16+esp],	eax
	mov	DWORD [20+esp],	ebx
	call	_DES_encrypt3
	mov	eax,		DWORD [16+esp]
	mov	ebx,		DWORD [20+esp]
	mov	DWORD [edi],	eax
	mov	DWORD [4+edi],	ebx
	jmp	@L031finish
@L028decrypt:
	and	ebp,		4294967288
	mov	eax,		DWORD [24+esp]
	mov	ebx,		DWORD [28+esp]
	jz NEAR	@L042decrypt_finish
@L043decrypt_loop:
	mov	eax,		DWORD [esi]
	mov	ebx,		DWORD [4+esi]
	mov	DWORD [16+esp],	eax
	mov	DWORD [20+esp],	ebx
	call	_DES_decrypt3
	mov	eax,		DWORD [16+esp]
	mov	ebx,		DWORD [20+esp]
	mov	ecx,		DWORD [24+esp]
	mov	edx,		DWORD [28+esp]
	xor	ecx,		eax
	xor	edx,		ebx
	mov	eax,		DWORD [esi]
	mov	ebx,		DWORD [4+esi]
	mov	DWORD [edi],	ecx
	mov	DWORD [4+edi],	edx
	mov	DWORD [24+esp],	eax
	mov	DWORD [28+esp],	ebx
	add	esi,		8
	add	edi,		8
	sub	ebp,		8
	jnz NEAR	@L043decrypt_loop
@L042decrypt_finish:
	mov	ebp,		DWORD [60+esp]
	and	ebp,		7
	jz NEAR	@L031finish
	mov	eax,		DWORD [esi]
	mov	ebx,		DWORD [4+esi]
	mov	DWORD [16+esp],	eax
	mov	DWORD [20+esp],	ebx
	call	_DES_decrypt3
	mov	eax,		DWORD [16+esp]
	mov	ebx,		DWORD [20+esp]
	mov	ecx,		DWORD [24+esp]
	mov	edx,		DWORD [28+esp]
	xor	ecx,		eax
	xor	edx,		ebx
	mov	eax,		DWORD [esi]
	mov	ebx,		DWORD [4+esi]
@L044dj7:
	ror	edx,		16
	mov	BYTE [6+edi],	dl
	shr	edx,		16
@L045dj6:
	mov	BYTE [5+edi],	dh
@L046dj5:
	mov	BYTE [4+edi],	dl
@L047dj4:
	mov	DWORD [edi],	ecx
	jmp	@L048djend
@L049dj3:
	ror	ecx,		16
	mov	BYTE [2+edi],	cl
	shl	ecx,		16
@L050dj2:
	mov	BYTE [1+esi],	ch
@L051dj1:
	mov	BYTE [esi],	cl
@L048djend:
	jmp	@L031finish
@L031finish:
	mov	ecx,		DWORD [76+esp]
	add	esp,		32
	mov	DWORD [ecx],	eax
	mov	DWORD [4+ecx],	ebx
	pop	edi
	pop	esi
	pop	ebx
	pop	ebp
	ret
align	64
@L033cbc_enc_jmp_table:
DD	0
DD	@L041ej1-@L032PIC_point
DD	@L040ej2-@L032PIC_point
DD	@L039ej3-@L032PIC_point
DD	@L037ej4-@L032PIC_point
DD	@L036ej5-@L032PIC_point
DD	@L035ej6-@L032PIC_point
DD	@L034ej7-@L032PIC_point
align	64
