Disassembly: 
  L1: 8b ff ?? mov edi, edi
   55 ?? push ebp
   8b ec ?? mov ebp, esp
   56 ?? push esi
   8b 75 0c ?? mov esi, dword ss:[ebp + 12]
   f6 46 0c 40 ?? test byte ds:[esi + 12], 0x40<64>
   57 ?? push edi
   75 79 ?? jne basic block L16
  
  L2: 56 ?? push esi
   e8 66 82 00 00 ?? call function 0x0040f180
  
  L3: 59 ?? pop ecx
   ba a8 49 43 00 ?? mov edx, 0x004349a8
   83 f8 ff ?? cmp eax, 0xff<255,-1>
   74 1b ?? je basic block L6
  
  L4: 83 f8 fe ?? cmp eax, 0xfe<254,-2>
   74 16 ?? je basic block L6
  
  L5: 8b c8 ?? mov ecx, eax
   83 e1 1f ?? and ecx, 0x1f<31>
   8b f8 ?? mov edi, eax
   c1 ff 05 ?? sar edi, 5
   c1 e1 06 ?? shl ecx, 6
   03 0c bd c0 66 43 00 ?? add ecx, dword ds:[0x004366c0 + edi * 4]
   eb 02 ?? jmp basic block L7
  
  L6: 8b ca ?? mov ecx, edx
  
  L7: f6 41 24 7f ?? test byte ds:[ecx + 0x24<36>], 0x7f<127>
   75 26 ?? jne basic block L13
  
  L8: 83 f8 ff ?? cmp eax, 0xff<255,-1>
   74 19 ?? je basic block L11
  
  L9: 83 f8 fe ?? cmp eax, 0xfe<254,-2>
   74 14 ?? je basic block L11
  
  L10: 8b c8 ?? mov ecx, eax
   83 e0 1f ?? and eax, 0x1f<31>
   c1 f9 05 ?? sar ecx, 5
   c1 e0 06 ?? shl eax, 6
   03 04 8d c0 66 43 00 ?? add eax, dword ds:[0x004366c0 + ecx * 4]
   eb 02 ?? jmp basic block L12
  
  L11: 8b c2 ?? mov eax, edx
  
  L12: f6 40 24 80 ?? test byte ds:[eax + 0x24<36>], 0x80<128,-128>
   74 1f ?? je basic block L16
  
  L13: e8 79 58 00 00 ?? call function 0x0040c7ec
  
  L14: 33 ff ?? xor edi, edi
   57 ?? push edi
   57 ?? push edi
   57 ?? push edi
   57 ?? push edi
   57 ?? push edi
   c7 00 16 00 00 00 ?? mov dword ds:[eax], 0x00000016<22>
   e8 5b f9 ff ff ?? call function 0x004068e0
  
  L15: 83 c4 14 ?? add esp, 0x14<20>
   83 c8 ff ?? or eax, 0xff<255,-1>
   eb 4a ?? jmp basic block L31
  
  L16: 53 ?? push ebx
   8b 5d 08 ?? mov ebx, dword ss:[ebp + 8]
   83 fb ff ?? cmp ebx, 0xff<255,-1>
   74 3d ?? je basic block L29
  
  L17: 8b 46 0c ?? mov eax, dword ds:[esi + 12]
   a8 01 ?? test al, 1
   75 08 ?? jne basic block L20
  
  L18: 84 c0 ?? test al, al
   79 32 ?? jns basic block L29
  
  L19: a8 02 ?? test al, 2
   75 2e ?? jne basic block L29
  
  L20: 33 ff ?? xor edi, edi
   39 7e 08 ?? cmp dword ds:[esi + 8], edi
   75 07 ?? jne basic block L23
  
  L21: 56 ?? push esi
   e8 64 83 00 00 ?? call function 0x0040f316
  
  L22: 59 ?? pop ecx
  
  L23: 8b 06 ?? mov eax, dword ds:[esi]
   3b 46 08 ?? cmp eax, dword ds:[esi + 8]
   75 08 ?? jne basic block L26
  
  L24: 39 7e 04 ?? cmp dword ds:[esi + 4], edi
   75 14 ?? jne basic block L29
  
  L25: 40 ?? inc eax
   89 06 ?? mov dword ds:[esi], eax
  
  L26: ff 0e ?? dec dword ds:[esi]
   f6 46 0c 40 ?? test byte ds:[esi + 12], 0x40<64>
   8b 06 ?? mov eax, dword ds:[esi]
   74 0f ?? je basic block L32
  
  L27: 38 18 ?? cmp byte ds:[eax], bl
   74 0d ?? je basic block L33
  
  L28: 40 ?? inc eax
   89 06 ?? mov dword ds:[esi], eax
  
  L29: 83 c8 ff ?? or eax, 0xff<255,-1>
  
  L30: 5b ?? pop ebx
  
  L31: 5f ?? pop edi
   5e ?? pop esi
   5d ?? pop ebp
   c3 ?? ret
  
  L32: 88 18 ?? mov byte ds:[eax], bl
  
  L33: 8b 46 0c ?? mov eax, dword ds:[esi + 12]
   ff 46 04 ?? inc dword ds:[esi + 4]
   83 e0 ef ?? and eax, 0xef<239,-17>
   83 c8 01 ?? or eax, 1
   89 46 0c ?? mov dword ds:[esi + 12], eax
   8b c3 ?? mov eax, ebx
   25 ff 00 00 00 ?? and eax, 0x000000ff<255>
   eb e1 ?? jmp basic block L30
  
  