/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x14009f660 FUN_14009f660 * Pseudocode, not original source. */ /* WARNING: Removing unreachable block (ram,0x00014009f9c9) */ /* WARNING: Removing unreachable block (ram,0x00014009f9be) */ void FUN_14009f660(SIZE_T *param_1) { uint *puVar1; ulonglong uVar2; bool bVar3; bool bVar4; bool bVar5; bool bVar6; char cVar7; int iVar8; int iVar9; int *piVar10; int *piVar11; longlong lVar12; undefined8 *puVar13; undefined8 *puVar14; int *local_b0; piVar10 = (int *)(**(code **)(*param_1 + 0x58))(); FUN_14006b350(piVar10); if (DAT_1401b42cf != '\0') { (**(code **)(*param_1 + 200))(param_1,L"Proud::CNetServerImpl::DisposeIssuedRemoteClients"); } if (param_1[0x54] == 0) { puVar13 = (undefined8 *)0x0; } else { puVar13 = (undefined8 *)param_1[0x52]; } do { if (puVar13 == (undefined8 *)0x0) { FUN_14006b3e0((longlong)piVar10); return; } if (puVar13 == (undefined8 *)0x0) { /* WARNING: Subroutine does not return */ FUN_1400064e0(0x80004005); } puVar1 = (uint *)*puVar13; FUN_14009ece0(param_1,puVar1); piVar11 = (int *)(**(code **)(*(longlong *)(puVar1 + 0x42) + 0x10))(); FUN_14006b350(piVar11); local_b0 = (int *)0x0; bVar6 = false; if ((*(longlong **)(puVar1 + 0x1d0) != (longlong *)0x0) && (lVar12 = **(longlong **)(puVar1 + 0x1d0), lVar12 != 0)) { local_b0 = (int *)(lVar12 + 0xa8); FUN_14006b350(local_b0); bVar6 = true; } FUN_14006b350((int *)(param_1 + 0xf3)); FUN_14006b350((int *)(param_1 + 0xfa)); iVar8 = FUN_1400d8950((longlong)(puVar1 + 0x30)); if ((*(char *)(*(longlong *)(puVar1 + 0x1d2) + 0x40) == '\0') && (**(char **)(puVar1 + 0x1d2) == '\0')) { bVar3 = true; } else { bVar3 = false; } if ((*(longlong **)(puVar1 + 0x1d8) == (longlong *)0x0) || (lVar12 = **(longlong **)(puVar1 + 0x1d8), lVar12 == 0)) { LAB_14009f835: bVar4 = true; } else { if (*(char *)(lVar12 + 0x140) == '\0') { if (*(longlong **)(puVar1 + 0x1d8) == (longlong *)0x0) { lVar12 = 0; } else { lVar12 = **(longlong **)(puVar1 + 0x1d8); } if (*(char *)(lVar12 + 0x100) == '\0') { if (*(longlong **)(puVar1 + 0x1d8) == (longlong *)0x0) { lVar12 = 0; } else { lVar12 = **(longlong **)(puVar1 + 0x1d8); } iVar9 = FUN_1400d8950(lVar12 + 0x40); if (iVar9 == 0) goto LAB_14009f835; } } bVar4 = false; } if (((*(longlong *)(puVar1 + 8) == 0) && (cVar7 = (**(code **)(*(longlong *)(puVar1 + 2) + 0x18))(), cVar7 == '\0')) && (*(longlong *)(puVar1 + 0x48) == 0)) { bVar5 = false; } else { bVar5 = true; } FUN_14006b3e0((longlong)piVar11); if (((iVar8 != 0) || (!bVar3)) || ((!bVar4 || (bVar5)))) { puVar14 = (undefined8 *)puVar13[2]; } else { FUN_14008b1c0((longlong)param_1,puVar1); puVar14 = (undefined8 *)puVar13[2]; FUN_1400a22a0((char *)(param_1 + 0x50),puVar13,'\0'); uVar2 = ((ulonglong)puVar1 & 0xffffffff) % (ulonglong)(uint)param_1[0x2ed]; if (param_1[0x2e9] != 0) { puVar13 = *(undefined8 **)(param_1[0x2e9] + uVar2 * 8); while( true ) { if ((puVar13 == (undefined8 *)0x0) || ((uint)uVar2 != *(uint *)(puVar13 + 4) % (uint)param_1[0x2ed])) goto LAB_14009f93f; if ((uint *)*puVar13 == puVar1) break; puVar13 = (undefined8 *)puVar13[2]; } FUN_1400a22a0((char *)(param_1 + 0x2e8),puVar13,'\0'); } LAB_14009f93f: if (bVar6) { FUN_14006b3e0((longlong)local_b0); bVar6 = false; } (**(code **)(*(longlong *)puVar1 + 8))(puVar1,1); } FUN_14006b3e0((longlong)(param_1 + 0xfa)); FUN_14006b3e0((longlong)(param_1 + 0xf3)); puVar13 = puVar14; if (bVar6) { FUN_14006b3e0((longlong)local_b0); } } while( true ); }