/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1401f1120 FUN_1401f1120 * Pseudocode, not original source. */ void FUN_1401f1120(longlong param_1,int *param_2,byte *param_3) { longlong lVar1; undefined8 *puVar2; byte bVar3; int iVar4; undefined8 uVar5; longlong *plVar6; longlong lVar7; longlong lVar8; int iVar9; longlong *local_res8; undefined1 local_1b8 [8]; longlong local_1b0; longlong local_1a8; int local_19c; int local_190; undefined **local_188; int local_180; undefined2 local_17c; char local_178; undefined8 local_168; undefined1 local_160; undefined8 local_158; undefined4 local_150 [2]; undefined1 local_148 [8]; longlong local_140; longlong local_138; undefined4 local_130; int local_12c; int local_120; undefined **local_118; int local_110; undefined2 local_10c; char local_108; undefined1 local_100 [232]; local_158 = 0xfffffffffffffffe; iVar9 = (int)((*param_2 >> 0x1f & 7U) + *param_2) >> 3; uVar5 = FUN_1401d3b20(*(undefined8 *)(param_1 + 0x108),param_2[10]); plVar6 = (longlong *)(*(longlong *)(param_1 + 0x108) + 0x1838); bVar3 = (**(code **)(*plVar6 + 0x10))(plVar6,param_2,uVar5); *param_3 = *param_3 | bVar3; if (*param_3 == 0) { FUN_14016b040(param_2,iVar9); plVar6 = (longlong *)(*(longlong *)(param_1 + 0x108) + 0x17f0); bVar3 = (**(code **)(*plVar6 + 0x10))(plVar6,param_2,uVar5); *param_3 = *param_3 | bVar3; if (*param_3 == 0) { FUN_14016b040(param_2,iVar9); FUN_14016b440(local_1b8); local_188 = Proud::AddrPort::vftable; local_178 = 0; lVar8 = 0; local_190 = 0; local_180 = DAT_140344450; local_17c = DAT_140344454; FUN_14016abe0(local_1b8); if (*(longlong *)(param_2 + 2) == 0) { if (*(longlong *)(param_2 + 4) == 0) { /* WARNING: Subroutine does not return */ FUN_14016d1e0(); } iVar9 = param_2[6]; } else { iVar9 = *(int *)(*(longlong *)(param_2 + 2) + 0x18); } iVar4 = (int)(*param_2 + (*param_2 >> 0x1f & 7U)) >> 3; lVar7 = *(longlong *)(param_2 + 4); if (*(longlong *)(param_2 + 4) == 0) { lVar1 = *(longlong *)(param_2 + 2); if (lVar1 == 0) { /* WARNING: Subroutine does not return */ FUN_14016d1e0(); } lVar7 = lVar8; if (*(int *)(lVar1 + 0x18) != 0) { lVar7 = *(longlong *)(lVar1 + 0x10); } } FUN_14016b9e0(local_1b8,iVar4 + lVar7,iVar9 - iVar4); local_180 = param_2[0xe]; local_17c = (undefined2)param_2[0xf]; local_190 = param_2[10]; local_178 = (char)param_2[0x10]; if ((local_1b0 == 0) && (local_1a8 == 0)) { local_1b0 = FUN_14016d120(); *(undefined8 *)(local_1b0 + 0x28) = 1; } (**(code **)(*(longlong *)(*(longlong *)(param_1 + 0x108) + 0x78) + 0x10))(); FUN_14016b470(local_148,local_1b8); local_120 = local_190; local_118 = Proud::AddrPort::vftable; local_110 = local_180; local_10c = local_17c; local_108 = local_178; FUN_14018b960(local_100); local_150[0] = 1; lVar7 = *(longlong *)(param_1 + 0x108); uVar5 = FUN_1401db930(lVar7 + 0x15e0,local_150,*(undefined8 *)(lVar7 + 0x15f0),0); if (*(undefined8 **)(lVar7 + 0x15f0) == (undefined8 *)0x0) { *(undefined8 *)(lVar7 + 0x15e8) = uVar5; } else { **(undefined8 **)(lVar7 + 0x15f0) = uVar5; } *(undefined8 *)(lVar7 + 0x15f0) = uVar5; FUN_14018ba10(local_100); local_res8 = &local_140; FUN_14016d0e0(&local_140); if (local_138 != 0) { if (local_12c < 0) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } local_130 = 0; } if ((local_190 != 1) && (local_190 != 0)) { uVar5 = (**(code **)(**(longlong **)(param_1 + 0x108) + 0x58))(); local_168 = uVar5; FUN_14016db50(uVar5); local_160 = 1; plVar6 = (longlong *)FUN_1401d2620(*(undefined8 *)(param_1 + 0x108),&local_res8,local_190); if ((longlong *)*plVar6 != (longlong *)0x0) { lVar8 = *(longlong *)*plVar6; } if ((local_res8 != (longlong *)0x0) && (local_res8[1] = local_res8[1] + -1, plVar6 = local_res8, uVar5 = local_168, local_res8[1] == 0)) { puVar2 = (undefined8 *)*local_res8; if (puVar2 != (undefined8 *)0x0) { (**(code **)*puVar2)(puVar2,1); } FUN_14016d970(plVar6); uVar5 = local_168; } if (((lVar8 != 0) && (*(char *)(lVar8 + 0x684) == '\0')) && (*(undefined1 *)(lVar8 + 0x21) = 1, local_178 == '\0')) { *(int *)(lVar8 + 0x48) = *(int *)(lVar8 + 0x48) + 1; } FUN_14016dbe0(uVar5); } local_res8 = &local_1b0; FUN_14016d0e0(&local_1b0); if ((local_1a8 != 0) && (local_19c < 0)) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } } } return; }