Function at 0x422100
Capabilities:
Encode data using xor

Disassembly:
push ebp
mov ebp, esp
push 0xffffffffffffffff
push 0x469410
mov eax, dword fs:[0]
push eax
sub esp, 0x38
mov eax, dword [0x47e064]
xor eax, ebp
mov dword [ebp - 0x10], eax
push esi
push edi
push eax
lea eax, [ebp - 0xc]
mov dword fs:[0], eax
mov edi, ecx
mov dword [ebp - 0x30], edi
mov ecx, dword [edi + 0xcc]
mov eax, ecx
shr eax, 4
add eax, 0x400
add eax, ecx
mov dword [ebp - 0x2c], eax
cmp eax, ecx
jae 0x422152
mov eax, 0x80004005
jmp 0x4225f9
mov eax, dword [edi + 0xd8]
mov dword [edi + 0xd4], eax
test eax, eax
jne 0x42220e
lea esi, [edi + 0xdc]
push ecx
mov ecx, esi
call fcn.0041e850
mov eax, dword [esi]
mov dword [ebp - 0x34], eax
test eax, eax
jne 0x422187
mov eax, 0x8007000e
jmp 0x4225f9
mov eax, dword [edi + 0xf4]
test eax, eax
jne 0x4221e8
mov eax, dword [edi + 0x38]
mov edx, 0x159a55e5
mov dword [ebp - 0x38], eax
mov ecx, 0x1f123bb5
mov eax, dword [edi + 0xe0]
mov dword [ebp - 0x28], eax
test eax, eax
je 0x4221f3
mov edi, dword [ebp - 0x34]
xor esi, esi
movzx eax, dx
imul eax, eax, 0x9069
shr edx, 0x10
add edx, eax
movzx eax, cx
imul eax, eax, 0x4650
shr ecx, 0x10
add ecx, eax
mov al, cl
xor al, byte [ebp - 0x38]
mov byte [esi + edi], al
inc esi
cmp esi, dword [ebp - 0x28]
jb 0x4221b3
mov edi, dword [ebp - 0x30]
lea esi, [edi + 0xdc]
jmp 0x4221f3
push dword [edi + 0x38]
mov ecx, esi
push eax
call fcn.00422620
mov edx, dword [edi + 0xe0]
mov ecx, dword [esi]
call fcn.00427e50
mov dword [edi + 0xc8], eax
mov eax, dword [esi]
mov dword [edi + 0xd4], eax
cmp dword [edi + 0x18], 0
je 0x422232
push dword [edi + 0xcc]
lea ecx, [edi + 0xe4]
call fcn.0041e850
cmp dword [edi + 0xe4], 0
je 0x42217d
cmp dword [edi + 0xbc], 0
jne 0x422293
push 0x1c
call fcn.0042cd1a
mov esi, eax
add esp, 4
mov dword [ebp - 0x34], esi
test esi, esi
je 0x42226b
mov dword [esi + 4], 0
mov dword [esi + 8], 0
mov dword [esi + 0xc], 0
mov dword [esi], vtable.CBenchmarkOutStream.0
jmp 0x42226d
xor esi, esi
mov dword [edi + 0xb8], esi
test esi, esi
je 0x42227d
mov eax, dword [esi]
push esi
call dword [eax + 4]
mov ecx, dword [edi + 0xbc]
test ecx, ecx
je 0x42228d
mov eax, dword [ecx]
push ecx
call dword [eax + 8]
mov dword [edi + 0xbc], esi
mov ecx, dword [edi + 0xb8]
push dword [ebp - 0x2c]
add ecx, 4
call fcn.0041e850
mov eax, dword [edi + 0xb8]
cmp dword [eax + 4], 0
je 0x42217d
cmp dword [edi + 0xf0], 0
jne 0x422315
push 0x1c
call fcn.0042cd1a
mov esi, eax
add esp, 4
mov dword [ebp - 0x34], esi
test esi, esi
je 0x4222ed
mov dword [esi + 4], 0
mov dword [esi + 8], 0
mov dword [esi + 0xc], 0
mov dword [esi], vtable.CBenchmarkOutStream.0
jmp 0x4222ef
xor esi, esi
mov dword [edi + 0xec], esi
test esi, esi
je 0x4222ff
mov eax, dword [esi]
push esi
call dword [eax + 4]
mov ecx, dword [edi + 0xf0]
test ecx, ecx
je 0x42230f
mov eax, dword [ecx]
push ecx
call dword [eax + 8]
mov dword [edi + 0xf0], esi
mov ecx, dword [edi + 0xec]
push 5
add ecx, 4
call fcn.0041e850
mov eax, dword [edi + 0xec]
cmp dword [eax + 4], 0
je 0x42217d
mov dword [eax + 0x18], 0xffffffff
mov word [eax + 0x14], 1
mov dword [eax + 0x10], 0
mov dword [ebp - 0x34], 0
mov eax, dword [edi + 0x18]
lea ecx, [ebp - 0x34]
mov dword [ebp - 4], 0
test eax, eax
je 0x422364
push eax
jmp 0x422367
push dword [edi + 0x14]
call fcn.0041e590
mov dword [ebp - 0x2c], 0
mov esi, dword [ebp - 0x34]
lea ecx, [ebp - 0x2c]
push ecx
push 0x46e9b8
push esi
mov eax, dword [esi]
mov byte [ebp - 4], 1
call dword [eax]
mov eax, dword [ebp - 0x2c]
test eax, eax
je 0x42245c
mov edx, dword [edi + 0xcc]
lea ecx, [ebp - 0x40]
push ecx
push eax
lea ecx, [edi + 0xf8]
mov dword [ebp - 0x40], edx
mov dword [ebp - 0x3c], 0
call fcn.00429870
mov ecx, eax
mov dword [ebp - 0x24], ecx
test ecx, ecx
jne 0x422588
mov dword [ebp - 0x38], 0
mov eax, dword [esi]
lea ecx, [ebp - 0x38]
push ecx
push 0x46e9d8
push esi
mov byte [ebp - 4], 6
call dword [eax]
mov eax, dword [ebp - 0x38]
test eax, eax
je 0x4223f9
push dword [edi + 0xf0]
mov ecx, dword [eax]
push eax
call dword [ecx + 0xc]
mov ecx, eax
mov dword [ebp - 0x24], ecx
test ecx, ecx
jne 0x422577
mov dword [ebp - 0x30], 0
mov eax, dword [esi]
lea ecx, [ebp - 0x30]
push ecx
push 0x46eaf8
push esi
mov byte [ebp - 4], 0xa
call dword [eax]
mov eax, dword [ebp - 0x30]
test eax, eax
je 0x4225b8
mov edx, dword [eax]
lea ecx, [edi + 0x70]
push 0x10
push ecx
push eax
call dword [edx + 0xc]
mov dword [ebp - 0x24], eax
test eax, eax
jne 0x422566
mov ecx, dword [edi + 0x18]
xorps xmm0, xmm0
movups xmmword [ebp - 0x20], xmm0
test ecx, ecx
je 0x42249f
mov eax, dword [ecx]
push ecx
call dword [eax + 0xc]
mov eax, dword [edi + 0x18]
lea edx, [ebp - 0x20]
push 0x10
push edx
push eax
mov ecx, dword [eax]
call dword [ecx + 0x10]
jmp 0x4225b5
cmp dword [edi + 0xfc], 0
mov dword [ebp - 0x28], 0
jbe 0x4223c0
mov edx, dword [edi + 0xf8]
mov ecx, dword [edx]
cmp byte [ecx + 4], 0
je 0x422495
mov ecx, dword [ebp - 0x28]
add edx, 4
inc ecx
mov dword [ebp - 0x28], ecx
cmp ecx, dword [edi + 0xfc]
jb 0x422476
jmp 0x4223c0
mov edi, 0x80070057
jmp 0x42258e
push 0x14
call fcn.0042cd1a
mov ecx, eax
mov dword [ebp - 0x24], eax
add esp, 4
test ecx, ecx
je 0x4224c1
mov dword [ecx + 4], 0
mov dword [ecx], vtable.CBenchmarkInStream.0
jmp 0x4224c6
xor ecx, ecx
mov dword [ebp - 0x24], ecx
mov dword [ebp - 0x44], ecx
test ecx, ecx
je 0x4224d6
mov eax, dword [ecx]
push ecx
call dword [eax + 4]
mov ecx, dword [ebp - 0x24]
lea eax, [ebp - 0x20]
mov byte [ebp - 4], 0xf
push 0x10
mov dword [ecx + 8], eax
mov dword [ecx + 0x10], 0x10
mov dword [ecx + 0xc], 0
call fcn.0042cd1a
mov edx, eax
mov dword [ebp - 0x28], eax
add esp, 4
test edx, edx
je 0x422514
mov dword [edx + 4], 0
mov dword [edx], vtable.CCrcOutStream.0
mov byte [edx + 8], 1
jmp 0x422519
xor edx, edx
mov dword [ebp - 0x28], edx
mov dword [ebp - 0x3c], edx
test edx, edx
je 0x422529
mov eax, dword [edx]
push edx
call dword [eax + 4]
mov edx, dword [ebp - 0x28]
push 0
push 0
mov dword [edx + 0xc], 0xffffffff
mov eax, dword [edi + 0x14]
mov edi, dword [ebp - 0x24]
push 0
push edx
mov ecx, dword [eax]
push edi
push eax
mov byte [ebp - 4], 0x10
call dword [ecx + 0xc]
mov dword [ebp - 0x24], eax
test eax, eax
je 0x42259e
mov ecx, dword [ebp - 0x28]
push ecx
mov byte [ebp - 4], 0x11
mov eax, dword [ecx]
call dword [eax + 8]
mov eax, dword [edi]
push edi
mov byte [ebp - 4], 0x12
call dword [eax + 8]
mov eax, dword [ebp - 0x30]
mov byte [ebp - 4], 0x13
test eax, eax
je 0x422577
mov ecx, dword [eax]
push eax
call dword [ecx + 8]
mov eax, dword [ebp - 0x38]
mov byte [ebp - 4], 0x14
test eax, eax
je 0x422588
mov ecx, dword [eax]
push eax
call dword [ecx + 8]
mov eax, dword [ebp - 0x2c]
mov edi, dword [ebp - 0x24]
mov byte [ebp - 4], 0x15
test eax, eax
je 0x4225ea
mov ecx, dword [eax]
push eax
call dword [ecx + 8]
jmp 0x4225ea
mov ecx, dword [ebp - 0x28]
push ecx
mov byte [ebp - 4], 0x17
mov eax, dword [ecx]
call dword [eax + 8]
mov eax, dword [edi]
push edi
mov byte [ebp - 4], 0x18
call dword [eax + 8]
mov eax, dword [ebp - 0x30]
mov byte [ebp - 4], 0x19
test eax, eax
je 0x4225c6
mov ecx, dword [eax]
push eax
call dword [ecx + 8]
mov eax, dword [ebp - 0x38]
mov byte [ebp - 4], 0x1a
test eax, eax
je 0x4225d7
mov ecx, dword [eax]
push eax
call dword [ecx + 8]
mov eax, dword [ebp - 0x2c]
mov byte [ebp - 4], 0x1b
test eax, eax
je 0x4225e8
mov ecx, dword [eax]
push eax
call dword [ecx + 8]
xor edi, edi
mov ecx, dword [esi]
push esi
mov dword [ebp - 4], 0x1c
call dword [ecx + 8]
mov eax, edi
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
mov ecx, dword [ebp - 0x10]
xor ecx, ebp
call fcn.0042d480
mov esp, ebp
pop ebp
ret