Function at 0x43d1c0
Capabilities:
Validate payment card number using luhn algorithm

Disassembly:
push ebx
mov ebx, esp
sub esp, 8
and esp, 0xfffffff8
add esp, 4
push ebp
mov ebp, dword [ebx + 4]
mov dword [esp + 4], ebp
mov ebp, esp
sub esp, 0x50
mov eax, dword [ebx + 8]
xorps xmm1, xmm1
push esi
push edi
mov dword [ebp - 0x20], ecx
mov edi, dword [eax]
mov ecx, edi
mov eax, dword [eax + 4]
sub ecx, eax
mov dword [ebp - 0x10], eax
mov dword [ebp - 0x44], ecx
mov dl, byte [edi]
movsd qword [ebp - 0x50], xmm1
cmp dl, 0x2d
jne 0x43d207
mov dl, byte [edi + 1]
inc edi
mov ah, 1
jmp 0x43d209
xor ah, ah
mov al, dl
mov byte [ebp - 2], ah
xor esi, esi
mov byte [ebp - 3], 0
sub al, 0x30
mov dword [ebp - 0x14], esi
mov ecx, edi
xorps xmm0, xmm0
mov dword [ebp - 0x38], ecx
movlpd qword [ebp - 0x30], xmm0
cmp al, 9
ja 0x43d9ea
mov al, byte [ecx + 1]
lea edi, [ecx + 1]
movsx ecx, dl
sub ecx, 0x30
mov dword [ebp - 0x1c], ecx
test ah, ah
je 0x43d295
cmp al, 0x30
jl 0x43d2d5
mov edx, edi
cmp al, 0x39
jg 0x43d2d5
cmp ecx, 0xccccccc
jb 0x43d263
jne 0x43d287
mov edx, edi
cmp al, 0x38
ja 0x43d287
movsx eax, byte [edx]
lea ecx, [ecx + ecx*4]
lea ecx, [ecx - 0x18]
inc esi
lea edi, [edx + 1]
mov dword [ebp - 0x14], esi
lea ecx, [eax + ecx*2]
mov al, byte [edi]
mov dword [ebp - 0x1c], ecx
cmp al, 0x30
jl 0x43d2d2
mov edx, edi
cmp al, 0x39
jle 0x43d253
jmp 0x43d2d2
mov ah, byte [ebp - 2]
mov al, 1
mov esi, ecx
mov byte [ebp - 3], al
xor ecx, ecx
jmp 0x43d2de
cmp al, 0x30
jl 0x43d2d5
mov edx, edi
cmp al, 0x39
jg 0x43d2d5
nop
cmp ecx, 0x19999999
jb 0x43d2b0
jne 0x43d287
mov edx, edi
cmp al, 0x35
ja 0x43d287
movsx eax, byte [edx]
lea ecx, [ecx + ecx*4]
lea ecx, [ecx - 0x18]
inc esi
lea edi, [edx + 1]
mov dword [ebp - 0x14], esi
lea ecx, [eax + ecx*2]
mov al, byte [edi]
mov dword [ebp - 0x1c], ecx
cmp al, 0x30
jl 0x43d2d2
mov edx, edi
cmp al, 0x39
jle 0x43d2a0
mov ah, byte [ebp - 2]
mov ecx, dword [ebp - 0x2c]
mov esi, dword [ebp - 0x30]
mov al, byte [ebp - 3]
xor dh, dh
mov dword [ebp - 8], ecx
mov dword [ebp - 0xc], esi
mov byte [ebp - 1], dh
test al, al
je 0x43d440
test ah, ah
je 0x43d3c4
mov dl, byte [edi]
cmp dl, 0x30
jl 0x43d398
mov eax, edi
mov dword [ebp - 0x24], eax
cmp dl, 0x39
jg 0x43d398
cmp ecx, 0xccccccc
jb 0x43d33c
ja 0x43d324
cmp esi, 0xcccccccc
jb 0x43d33c
cmp esi, 0xcccccccc
jne 0x43d38a
cmp ecx, 0xccccccc
jne 0x43d38a
mov eax, dword [ebp - 0x24]
cmp dl, 0x38
ja 0x43d38a
movsx esi, byte [eax]
lea edi, [eax + 1]
mov eax, dword [ebp - 0xc]
xor edx, edx
shld ecx, eax, 2
sub esi, 0x30
shl eax, 2
add dword [ebp - 0xc], eax
mov eax, dword [ebp - 0xc]
adc dword [ebp - 8], ecx
mov ecx, dword [ebp - 8]
shld ecx, eax, 1
add eax, eax
add esi, eax
mov eax, dword [ebp - 0x14]
mov dword [ebp - 0xc], esi
adc ecx, edx
mov dl, byte [edi]
inc eax
mov dword [ebp - 8], ecx
mov dword [ebp - 0x14], eax
cmp dl, 0x30
jl 0x43d39d
mov dword [ebp - 0x24], edi
mov dword [ebp - 0x38], edi
cmp dl, 0x39
jg 0x43d39d
mov eax, edi
jmp 0x43d312
mov edx, ecx
mov ecx, esi
call fcn.006d4920
movaps xmm1, xmm0
mov dh, 1
mov eax, dword [ebp - 0x14]
jmp 0x43d3a0
mov dh, byte [ebp - 1]
mov ecx, dword [ebp - 8]
mov byte [ebp - 1], dh
mov dword [ebp - 0x14], eax
mov dword [ebp - 0xc], esi
mov dword [ebp - 8], ecx
movsd qword [ebp - 0x50], xmm1
mov dword [ebp - 0x2c], ecx
test dh, dh
je 0x43d443
jmp 0x43d496
mov al, byte [edi]
cmp al, 0x30
jl 0x43d440
mov edx, edi
cmp al, 0x39
jg 0x43d440
cmp ecx, 0x19999999
jb 0x43d400
ja 0x43d3e2
cmp esi, 0x99999999
jb 0x43d400
cmp esi, 0x99999999
jne 0x43d47e
cmp ecx, 0x19999999
jne 0x43d47e
mov edx, edi
cmp al, 0x35
ja 0x43d47e
mov eax, dword [ebp - 0xc]
lea edi, [edx + 1]
movsx esi, byte [edx]
xor edx, edx
shld ecx, eax, 2
sub esi, 0x30
shl eax, 2
add dword [ebp - 0xc], eax
mov eax, dword [ebp - 0xc]
adc dword [ebp - 8], ecx
mov ecx, dword [ebp - 8]
shld ecx, eax, 1
add eax, eax
add esi, eax
mov al, byte [edi]
mov dword [ebp - 0xc], esi
adc ecx, edx
inc dword [ebp - 0x14]
mov dword [ebp - 8], ecx
cmp al, 0x30
jl 0x43d440
mov edx, edi
cmp al, 0x39
jle 0x43d3d0
mov ecx, dword [ebp - 8]
cmp byte [edi], 0x2e
mov dl, byte [ebp - 1]
mov dword [ebp - 0x18], 0
jne 0x43d5e3
mov al, byte [edi + 1]
inc edi
mov byte [ebp - 1], dl
cmp al, 0x30
jl 0x43d59f
cmp al, 0x39
jg 0x43d59f
test dl, dl
jne 0x43d4f1
cmp byte [ebp - 3], dl
je 0x43d4d5
mov eax, esi
jmp 0x43d4da
mov edx, ecx
mov ecx, esi
call fcn.006d4920
mov ecx, dword [ebp - 8]
movaps xmm1, xmm0
movsd qword [ebp - 0x50], xmm0
mov byte [ebp - 1], 1
mov al, byte [edi]
cmp al, 0x30
jl 0x43d443
movsd xmm2, qword [0x739988]
mov edx, edi
cmp al, 0x39
ja 0x43d4cb
movsx eax, byte [edx]
lea edi, [edx + 1]
sub eax, 0x30
mulsd xmm1, xmm2
mov edx, edi
movd xmm0, eax
mov al, byte [edi]
cvtdq2pd xmm0, xmm0
addsd xmm1, xmm0
cmp al, 0x30
jge 0x43d4a6
movsd qword [ebp - 0x50], xmm1
jmp 0x43d443
mov eax, dword [ebp - 0x1c]
xor ecx, ecx
mov edx, ecx
mov ecx, eax
call fcn.006d4920
movaps xmm1, xmm0
movsd qword [ebp - 0x50], xmm0
mov byte [ebp - 1], 1
jmp 0x43d4f6
movsd qword [ebp - 0x50], xmm1
mov cl, byte [edi]
mov eax, edi
mov byte [ebp - 4], cl
mov edx, edi
mov ecx, dword [ebp - 8]
xorps xmm2, xmm2
mov dword [ebp - 0x2c], eax
mov dword [ebp - 0x38], edi
mov dword [ebp - 0xc], esi
mov dword [ebp - 8], ecx
cmp byte [ebp - 4], 0x39
mov esi, dword [ebp - 0x38]
mov dword [ebp - 0x24], esi
mov esi, dword [ebp - 0xc]
jg 0x43d572
mov edi, dword [ebp - 0x14]
cmp edi, 0x11
jge 0x43d558
movsx eax, byte [edx]
mulsd xmm1, qword [0x739988]
sub eax, 0x30
dec dword [ebp - 0x18]
movd xmm0, eax
cvtdq2pd xmm0, xmm0
addsd xmm1, xmm0
comisd xmm1, xmm2
movsd qword [ebp - 0x50], xmm1
jbe 0x43d554
inc edi
mov dword [ebp - 0x14], edi
mov edi, edx
jmp 0x43d55d
mov edi, dword [ebp - 0x2c]
mov edx, edi
mov al, byte [edi + 1]
inc edi
inc edx
mov byte [ebp - 4], al
mov dword [ebp - 0x2c], edx
mov dword [ebp - 0x38], edx
mov dword [ebp - 0x24], edx
cmp al, 0x30
jge 0x43d511
mov edx, dword [ebp - 0x24]
xor eax, eax
cmp byte [edx], 0x65
je 0x43d58b
cmp byte [edx], 0x45
mov dword [ebp - 8], ecx
jne 0x43d7ef
mov dword [ebp - 0xc], esi
lea edi, [edx + 1]
mov dword [ebp - 0x14], edi
cmp byte [ebp - 1], al
jne 0x43d604
cmp byte [ebp - 3], al
je 0x43d5ea
mov eax, esi
jmp 0x43d5ef
mov esi, dword [ebp - 0x20]
cmp dword [esi + 0x18], 0
je 0x43d5bf
push 0x637
push str.D:devwewindows_srcjsoninclude_rapidjson_reader.h
push str._HasParseError__
call fcn.005d018c
add esp, 0xc
mov ecx, dword [ebp - 0x10]
mov eax, edi
sub eax, ecx
mov dword [esi + 0x18], 0xe
mov dword [esi + 0x1c], eax
mov eax, dword [ebx + 8]
mov dword [eax], edi
mov dword [eax + 4], ecx
pop edi
pop esi
mov esp, ebp
pop ebp
mov esp, ebx
pop ebx
ret 8
mov ecx, dword [ebp - 8]
mov edx, edi
jmp 0x43d575
mov eax, dword [ebp - 0x1c]
xor ecx, ecx
mov edx, ecx
mov ecx, eax
call fcn.006d4920
movaps xmm1, xmm0
mov byte [ebp - 1], 1
movsd qword [ebp - 0x50], xmm1
mov ecx, dword [ebp - 0x14]
xor dh, dh
mov dl, byte [ecx]
cmp dl, 0x2b
je 0x43d617
cmp dl, 0x2d
jne 0x43d622
mov dh, 1
mov dl, byte [ecx + 1]
lea edi, [ecx + 1]
mov ecx, edi
mov dword [ebp - 0x14], ecx
mov al, dl
sub al, 0x30
cmp al, 9
ja 0x43d7aa
movsx eax, dl
lea edi, [ecx + 1]
sub eax, 0x30
mov dword [ebp - 0x24], eax
test dh, dh
je 0x43d734
mov eax, dword [ebp - 0x18]
test eax, eax
jle 0x43d668
push 0x677
push str.D:devwewindows_srcjsoninclude_rapidjson_reader.h
push str.expFrac___0
call fcn.005d018c
movsd xmm1, qword [ebp - 0x50]
add esp, 0xc
mov eax, dword [ebp - 0x18]
lea ecx, [eax + 0x7ffffff7]
mov eax, 0x66666667
imul ecx
sar edx, 2
mov eax, edx
shr eax, 0x1f
add eax, edx
mov dword [ebp - 0x38], eax
mov al, byte [edi]
cmp al, 0x30
jl 0x43d6df
mov edx, edi
nop word [eax + eax]
cmp al, 0x39
ja 0x43d6dc
mov eax, dword [ebp - 0x24]
lea edi, [edx + 1]
lea ecx, [eax + eax*4]
movsx eax, byte [edx]
mov edx, edi
lea eax, [eax + ecx*2]
add eax, 0xffffffd0
mov dword [ebp - 0x24], eax
cmp eax, dword [ebp - 0x38]
jle 0x43d6d6
mov al, byte [edi]
cmp al, 0x30
jl 0x43d6d6
mov ecx, edi
mov dword [ebp - 0x2c], edi
mov esi, edi
nop dword [eax]
mov edx, ecx
cmp al, 0x39
ja 0x43d6d6
mov al, byte [esi + 1]
lea edi, [esi + 1]
mov ecx, edi
mov edx, edi
mov esi, edi
cmp al, 0x30
jge 0x43d6c0
mov al, byte [edi]
cmp al, 0x30
jge 0x43d690
mov esi, dword [ebp - 0xc]
mov eax, dword [ebp - 0x24]
neg eax
mov edx, dword [ebp - 0x18]
mov ecx, dword [ebp - 8]
cmp byte [ebp - 1], 0
je 0x43d843
add eax, edx
cmp eax, 0xfffffecc
jge 0x43d705
divsd xmm1, qword [0x739aa8]
lea ecx, [eax + 0x134]
movaps xmm0, xmm1
cmovge ecx, eax
call fcn.00430300
comisd xmm0, xmmword [0x739ab0]
jbe 0x43d7f7
mov esi, dword [ebp - 0x20]
cmp dword [esi + 0x18], 0
je 0x43d798
push 0x6bb
jmp 0x43d786
mov edx, dword [ebp - 0x18]
mov ecx, 0x134
sub ecx, edx
mov dword [ebp - 0x38], ecx
mov cl, byte [edi]
cmp cl, 0x30
jl 0x43d6e7
mov edx, edi
nop word [eax + eax]
cmp cl, 0x39
ja 0x43d6e4
lea ecx, [eax + eax*4]
movsx eax, byte [edx]
lea edi, [edx + 1]
lea eax, [eax + ecx*2]
add eax, 0xffffffd0
cmp eax, dword [ebp - 0x38]
jg 0x43d778
cmp byte [edi], 0x30
mov edx, edi
jl 0x43d6e4
mov cl, byte [edi]
jmp 0x43d750
mov esi, dword [ebp - 0x20]
cmp dword [esi + 0x18], 0
je 0x43d798
push 0x687
push str.D:devwewindows_srcjsoninclude_rapidjson_reader.h
push str._HasParseError__
call fcn.005d018c
add esp, 0xc
mov eax, dword [ebp - 0x44]
mov dword [esi + 0x18], 0xd
mov dword [esi + 0x1c], eax
jmp 0x43d82d
mov esi, dword [ebp - 0x20]
cmp dword [esi + 0x18], 0
je 0x43d7ca
push 0x68c
push str.D:devwewindows_srcjsoninclude_rapidjson_reader.h
push str._HasParseError__
call fcn.005d018c
add esp, 0xc
mov eax, dword [ebp - 0x14]
mov ecx, dword [ebp - 0x10]
sub eax, ecx
mov dword [esi + 0x1c], eax
mov eax, dword [ebx + 8]
mov dword [esi + 0x18], 0xf
mov dword [eax], edi
mov dword [eax + 4], ecx
pop edi
pop esi
mov esp, ebp
pop ebp
mov esp, ebx
pop ebx
ret 8
mov edx, dword [ebp - 0x18]
jmp 0x43d6ea
cmp byte [ebp - 2], 0
je 0x43d804
xorps xmm0, xmmword [0x739f80]
push ecx
mov ecx, dword [ebx + 0xc]
movsd qword [ebp - 0x50], xmm0
lea ecx, [ecx + 0x18]
call fcn.0043e160
xorps xmm0, xmm0
mov ecx, 0x216
movups xmmword [eax], xmm0
movsd xmm0, qword [ebp - 0x50]
movsd qword [eax], xmm0
mov word [eax + 0xe], cx
mov ecx, dword [ebp - 0x10]
mov eax, dword [ebx + 8]
mov dword [eax], edi
mov dword [eax + 4], ecx
pop edi
pop esi
mov esp, ebp
pop ebp
mov esp, ebx
pop ebx
ret 8
mov eax, dword [ebx + 0xc]
add eax, 0x18
cmp byte [ebp - 3], 0
je 0x43d984
cmp byte [ebp - 2], 0
je 0x43d901
neg esi
adc ecx, 0
neg ecx
mov dword [ebp - 8], ecx
push ecx
mov ecx, eax
call fcn.0043e160
mov ecx, dword [ebp - 8]
mov edx, eax
xorps xmm0, xmm0
mov eax, 0x96
movups xmmword [edx], xmm0
mov dword [edx], esi
mov dword [edx + 4], ecx
mov word [edx + 0xe], ax
test ecx, ecx
jl 0x43d8dc
jg 0x43d892
test esi, esi
jb 0x43d8dc
mov eax, 0x196
mov word [edx + 0xe], ax
xor eax, eax
or eax, ecx
jne 0x43d8ac
mov eax, 0x1d6
mov word [edx + 0xe], ax
jmp 0x43d8b1
mov eax, 0x196
and esi, 0x80000000
or esi, ecx
mov ecx, dword [ebp - 0x10]
jne 0x43d830
or eax, 0x20
mov word [edx + 0xe], ax
mov eax, dword [ebx + 8]
mov dword [eax], edi
mov dword [eax + 4], ecx
pop edi
pop esi
mov esp, ebp
pop ebp
mov esp, ebx
pop ebx
ret 8
cmp ecx, 0xffffffff
jl 0x43d82d
jg 0x43d8f3
cmp esi, 0x80000000
jb 0x43d82d
mov eax, 0xb6
mov word [edx + 0xe], ax
jmp 0x43d82d
push ecx
mov ecx, eax
call fcn.0043e160
mov ecx, dword [ebp - 8]
mov edx, eax
xorps xmm0, xmm0
mov eax, 0x116
mov dword [ebp - 0x44], eax
movups xmmword [edx], xmm0
mov dword [edx], esi
mov dword [edx + 4], ecx
mov word [edx + 0xe], ax
test ecx, ecx
jl 0x43d93b
jg 0x43d92f
test esi, esi
jb 0x43d93b
mov eax, 0x196
mov word [edx + 0xe], ax
mov dword [ebp - 0x44], eax
movzx eax, ax
mov dword [ebp - 0x38], eax
xor eax, eax
or eax, ecx
jne 0x43d956
mov eax, dword [ebp - 0x44]
or eax, 0x40
mov word [edx + 0xe], ax
movzx eax, ax
jmp 0x43d959
mov eax, dword [ebp - 0x38]
and esi, 0x80000000
or esi, ecx
mov ecx, dword [ebp - 0x10]
jne 0x43d830
or eax, 0x20
mov word [edx + 0xe], ax
mov eax, dword [ebx + 8]
mov dword [eax], edi
mov dword [eax + 4], ecx
pop edi
pop esi
mov esp, ebp
pop ebp
mov esp, ebx
pop ebx
ret 8
cmp byte [ebp - 2], 0
push ecx
mov ecx, eax
je 0x43d9c0
neg dword [ebp - 0x1c]
call fcn.0043e160
cmp dword [ebp - 0x1c], 0
mov esi, eax
mov eax, dword [ebp - 0x1c]
xorps xmm0, xmm0
cdq
mov ecx, 0xb6
movups xmmword [esi], xmm0
mov dword [esi], eax
mov eax, 0x1f6
cmovge ecx, eax
mov dword [esi + 4], edx
mov word [esi + 0xe], cx
jmp 0x43d82d
call fcn.0043e160
mov ecx, dword [ebp - 0x1c]
xorps xmm0, xmm0
movups xmmword [eax], xmm0
mov dword [eax], ecx
shr ecx, 0x1a
not ecx
mov dword [eax + 4], 0
and ecx, 0x20
or ecx, 0x1d6
jmp 0x43d829
mov esi, dword [ebp - 0x20]
cmp dword [esi + 0x18], 0
je 0x43da0a
push 0x60c
push str.D:devwewindows_srcjsoninclude_rapidjson_reader.h
push str._HasParseError__
call fcn.005d018c
add esp, 0xc
mov eax, dword [ebp - 0x38]
mov ecx, dword [ebp - 0x10]
sub eax, ecx
mov dword [esi + 0x1c], eax
mov eax, dword [ebx + 8]
mov dword [esi + 0x18], 3
mov dword [eax], edi
pop edi
mov dword [eax + 4], ecx
pop esi
mov esp, ebp
pop ebp
mov esp, ebx
pop ebx
ret 8