/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x140093f40 FUN_140093f40 * Pseudocode, not original source. */ undefined4 FUN_140093f40(longlong param_1,uint param_2,TypeDescriptor *param_3,TypeDescriptor *param_4) { uint uVar1; uint uVar2; undefined4 uVar3; LPVOID pvVar4; int *piVar5; longlong *plVar6; longlong *plVar7; undefined8 **ppuVar8; uint *puVar9; longlong lVar10; uint uVar11; ulonglong uVar12; TypeDescriptor *pTVar13; longlong lVar14; int iVar15; uint *puVar16; undefined8 *local_res8; plVar7 = (longlong *)(param_1 + -0xa8); pTVar13 = param_4; piVar5 = (int *)(**(code **)(*plVar7 + 0x58))(plVar7); FUN_14006b350(piVar5); if (DAT_1401b42cf != '\0') { (**(code **)(*plVar7 + 200))(plVar7,L"Proud::CNetServerImpl::GetMostSuitableSuperPeerInGroup"); } uVar12 = (ulonglong)param_2; ppuVar8 = &local_res8; plVar6 = FUN_140093630((longlong)plVar7,(longlong *)ppuVar8,param_2); if ((undefined8 *)*plVar6 == (undefined8 *)0x0) { puVar16 = (uint *)0x0; } else { puVar16 = *(uint **)*plVar6; } if ((local_res8 != (undefined8 *)0x0) && (local_res8[1] = local_res8[1] + -1, local_res8[1] == 0)) { pvVar4 = (LPVOID)*local_res8; if (pvVar4 != (LPVOID)0x0) { FUN_1400807c0((longlong)pvVar4,ppuVar8,uVar12,pTVar13); FUN_14006cc60(pvVar4); } FUN_14006cc60(local_res8); } if (puVar16 != (uint *)0x0) { puVar9 = puVar16; FUN_140088f60((longlong)plVar7,puVar16,param_3,pTVar13); iVar15 = 0; uVar1 = puVar16[0x1e]; lVar10 = 0; if (0 < (int)uVar1) { lVar14 = 0; do { if ((lVar10 < 0) || ((int)uVar1 <= iVar15)) { /* WARNING: Subroutine does not return */ FUN_14006be30(plVar7,puVar9,param_3,pTVar13); } param_3 = (TypeDescriptor *)0x0; puVar9 = (uint *)0x0; uVar2 = *(uint *)¶m_4[1].spare; pTVar13 = (TypeDescriptor *)(ulonglong)uVar2; if ((int)uVar2 < 1) { LAB_14009409b: if ((-1 < iVar15) && (iVar15 < (int)uVar1)) { uVar3 = *(undefined4 *)((longlong)iVar15 * 0x40 + *(longlong *)(puVar16 + 0x1c)); FUN_14006b3e0((longlong)piVar5); return uVar3; } /* WARNING: Subroutine does not return */ FUN_14006be30(plVar7,puVar9,param_3,pTVar13); } while( true ) { if (((longlong)puVar9 < 0) || ((int)uVar2 <= (int)param_3)) { /* WARNING: Subroutine does not return */ FUN_14006be30(plVar7,puVar9,param_3,pTVar13); } plVar7 = param_4[1].pVFTable; if (*(int *)((longlong)plVar7 + (longlong)puVar9 * 4) == *(int *)(lVar14 + *(longlong *)(puVar16 + 0x1c))) break; uVar11 = (int)param_3 + 1; param_3 = (TypeDescriptor *)(ulonglong)uVar11; puVar9 = (uint *)((longlong)puVar9 + 1); if ((int)uVar2 <= (int)uVar11) goto LAB_14009409b; } iVar15 = iVar15 + 1; lVar10 = lVar10 + 1; lVar14 = lVar14 + 0x40; } while (iVar15 < (int)uVar1); } } FUN_14006b3e0((longlong)piVar5); return 0; }