/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x140087b50 FUN_140087b50 * Pseudocode, not original source. */ ulonglong FUN_140087b50(longlong param_1,uint param_2) { int *piVar1; longlong *plVar2; longlong lVar3; short *psVar4; int *piVar5; int *piVar6; ulonglong uVar7; uint *puVar8; longlong lVar9; short *psVar10; ulonglong uVar11; undefined8 uVar12; short *local_res8; plVar2 = (longlong *)(param_1 + -0xa8); piVar5 = (int *)(**(code **)(*plVar2 + 0x58))(plVar2); FUN_14006b350(piVar5); if (DAT_1401b42cf != '\0') { (**(code **)(*plVar2 + 200))(plVar2); } uVar11 = (ulonglong)*(uint *)(param_1 + 0xbf8); uVar7 = (ulonglong)param_2 % uVar11; if ((*(longlong *)(param_1 + 0xbd8) != 0) && (puVar8 = *(uint **)(*(longlong *)(param_1 + 0xbd8) + uVar7 * 8), puVar8 != (uint *)0x0)) { while ((int)uVar7 == (int)((ulonglong)puVar8[8] % uVar11)) { if (*puVar8 == param_2) { lVar3 = *(longlong *)(puVar8 + 2); if ((lVar3 != 0) && (*(longlong *)(lVar3 + 0x228) == 0)) { if (*(longlong *)(param_1 + 0x1748) != 0) { FUN_14006cb70(puVar8,(ulonglong)puVar8[8] % uVar11,uVar7,uVar11); local_res8 = (short *)PTR_DAT_1401ac010; FUN_140053d20((longlong *)&local_res8, L"CNetServer.CloseConnection(%d)를 콜 하였습니다.", (ulonglong)param_2,uVar11); psVar4 = local_res8; psVar10 = local_res8; if (local_res8 == (short *)0x0) { psVar10 = (short *)PTR_DAT_1401ac010; } uVar12 = 0; lVar9 = *(longlong *)(param_1 + 0x1748); FUN_1400cb700(lVar9,0,psVar10,uVar11); if (((psVar4 != (short *)0x0) && (psVar4 != (short *)PTR_DAT_1401ac010)) && (psVar4 + -4 != (short *)0x0)) { piVar6 = (int *)FUN_14006cb70(lVar9,uVar12,psVar10,uVar11); FUN_14006b350(piVar6); piVar1 = (int *)(psVar4 + -2); *piVar1 = *piVar1 + -1; if (*piVar1 == 0) { FUN_14006cc60(psVar4 + -4); } FUN_14006b3e0((longlong)piVar6); } } if (*(double *)(lVar3 + 0x758) == 0.0) { uVar12 = (**(code **)(*(longlong *)(param_1 + 0x70) + 8))(); *(undefined8 *)(lVar3 + 0x758) = uVar12; (**(code **)(*(longlong *)(param_1 + 0x400) + 0x100)) ((longlong *)(param_1 + 0x400),*(undefined4 *)(lVar3 + 0x6f8),&DAT_1401b6110); } uVar12 = FUN_14006b3e0((longlong)piVar5); return CONCAT71((int7)((ulonglong)uVar12 >> 8),1); } break; } puVar8 = *(uint **)(puVar8 + 4); if (puVar8 == (uint *)0x0) break; } } uVar7 = FUN_14006b3e0((longlong)piVar5); return uVar7 & 0xffffffffffffff00; }