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

Disassembly:
push ebp
mov ebp, esp
push 0xfffffffffffffffe
push 0xb11650
push 0xa847a0
mov eax, dword fs:[0]
push eax
sub esp, 0x20
push ebx
push esi
push edi
mov eax, dword [0xb196ec]
xor dword [ebp - 8], eax
xor eax, ebp
push eax
lea eax, [ebp - 0x10]
mov dword fs:[0], eax
mov dword [ebp - 0x18], esp
mov esi, ecx
xor eax, eax
mov dword [ebp - 4], eax
mov dword [ebp - 0x28], eax
mov dword [ebp - 0x20], eax
call fcn.00987cf0
mov edi, eax
xor bl, bl
mov byte [ebp - 0x19], bl
mov dword [ebp - 0x24], esi
xor ecx, ecx
xor eax, eax
mov dword [ebp - 0x2c], eax
cmp esi, ecx
je 0x979a2c
mov dword [ebp - 0x24], ecx
cmp esi, 0x61
jl 0x979a17
lea ebx, [esi - 0x61]
jmp 0x979a21
lea edx, [esi - 0x41]
cmp edx, 0x19
ja 0x979a31
mov bl, dl
mov eax, 1
mov byte [ebp - 0x19], bl
mov dword [ebp - 0x2c], eax
cmp dword [ebp - 0x24], ecx
jne 0x979a69
cmp eax, ecx
jne 0x979a50
mov eax, 0x4ec4ec4f
imul edi
sar edx, 3
mov eax, edx
shr eax, 0x1f
add eax, edx
imul eax, eax, 0x1a
mov ebx, edi
sub ebx, eax
mov byte [ebp - 0x19], bl
movzx eax, bl
add eax, 0x61
cmp eax, 0x6c
je 0x979a65
cmp eax, 0x69
je 0x979a65
cmp eax, 0x6f
jne 0x979a86
inc bl
jmp 0x979a83
mov eax, 0x66666667
imul edi
sar edx, 2
mov eax, edx
shr eax, 0x1f
add eax, edx
lea edx, [eax + eax*4]
add edx, edx
mov ebx, edi
sub ebx, edx
mov byte [ebp - 0x19], bl
movzx eax, bl
cdq
mov esi, 0xa
idiv esi
mov byte [ebp - 0x1a], dl
mov eax, dword [ebp + 8]
cmp byte [eax], cl
je 0x979c4b
mov esi, dword [ebp + 0x10]
cmp esi, ecx
je 0x979c4b
lea edx, [esi + 2]
push edx
push ecx
mov edi, dword [ebp + 0xc]
push edi
call fcn.00a7ffb0
add esp, 0xc
mov eax, esi
and eax, 0x80000001
jns 0x979ac9
dec eax
or eax, 0xfffffffe
inc eax
mov eax, esi
cdq
jne 0x979ad4
sub eax, edx
sar eax, 1
jmp 0x979ad9
sub eax, edx
sar eax, 1
inc eax
mov dword [ebp - 0x30], eax
xor eax, eax
mov dword [ebp - 0x28], eax
cmp eax, esi
jge 0x979c14
mov esi, dword [ebp - 0x20]
cmp esi, dword [ebp - 0x30]
jne 0x979b0f
cmp dword [ebp - 0x24], 0
jne 0x979b02
movzx ecx, bl
add ecx, 0x61
mov byte [esi + edi], cl
jmp 0x979b0b
movzx edx, bl
add edx, 0x30
mov byte [esi + edi], dl
inc esi
mov dword [ebp - 0x20], esi
mov ecx, dword [ebp + 8]
mov al, byte [eax + ecx]
mov dl, al
sub dl, 0x41
cmp dl, 0x19
ja 0x979b81
movsx eax, al
movzx ecx, bl
lea ecx, [eax + ecx - 0x41]
cmp ecx, 0x1a
jl 0x979b44
mov eax, 0x4ec4ec4f
imul ecx
sar edx, 3
mov eax, edx
shr eax, 0x1f
add eax, edx
imul eax, eax, 0x1a
sub ecx, eax
mov al, byte [ecx + 0xb4c880]
cmp al, 0x61
jb 0x979b6b
cmp al, 0x7a
ja 0x979b6b
movzx eax, al
sub eax, 0x20
mov byte [esi + edi], al
mov eax, dword [ebp - 0x28]
inc eax
inc esi
mov dword [ebp - 0x20], esi
mov esi, dword [ebp + 0x10]
jmp 0x979ade
movzx eax, al
mov byte [esi + edi], al
mov eax, dword [ebp - 0x28]
inc eax
inc esi
mov dword [ebp - 0x20], esi
mov esi, dword [ebp + 0x10]
jmp 0x979ade
mov cl, al
sub cl, 0x61
cmp cl, 0x19
ja 0x979bc9
movsx edx, al
movzx eax, bl
lea ecx, [edx + eax - 0x61]
cmp ecx, 0x1a
jl 0x979bb0
mov eax, 0x4ec4ec4f
imul ecx
sar edx, 3
mov eax, edx
shr eax, 0x1f
add eax, edx
imul eax, eax, 0x1a
sub ecx, eax
mov cl, byte [ecx + 0xb4c880]
mov byte [esi + edi], cl
mov eax, dword [ebp - 0x28]
inc eax
inc esi
mov dword [ebp - 0x20], esi
mov esi, dword [ebp + 0x10]
jmp 0x979ade
mov dl, al
sub dl, 0x30
cmp dl, 9
ja 0x979c01
movsx eax, al
movzx ecx, byte [ebp - 0x1a]
lea ecx, [eax + ecx - 0x30]
cmp ecx, 0xa
jl 0x979bfb
mov eax, 0x66666667
imul ecx
sar edx, 2
mov eax, edx
shr eax, 0x1f
add eax, edx
lea edx, [eax + eax*4]
add edx, edx
sub ecx, edx
mov al, byte [ecx + 0xb4c89c]
mov byte [esi + edi], al
mov eax, dword [ebp - 0x28]
inc eax
inc esi
mov dword [ebp - 0x20], esi
mov esi, dword [ebp + 0x10]
jmp 0x979ade
cmp dword [ebp - 0x20], 1
jne 0x979c4e
mov dword [ebp - 0x20], 2
cmp dword [ebp - 0x24], 0
jne 0x979c39
movzx ecx, bl
add ecx, 0x61
mov byte [edi + 1], cl
mov eax, dword [ebp - 0x20]
mov byte [eax + edi], 0
jmp 0x979c6f
movzx edx, bl
add edx, 0x30
mov byte [edi + 1], dl
mov eax, dword [ebp - 0x20]
mov byte [eax + edi], 0
jmp 0x979c6f
mov edi, dword [ebp + 0xc]
mov eax, dword [ebp - 0x20]
mov byte [eax + edi], 0
jmp 0x979c6f
mov dword [ebp - 4], 0xfffffffe
mov ecx, dword [ebp - 0x10]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret