/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x140091f40 FUN_140091f40 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ ulonglong FUN_140091f40(longlong param_1,longlong *param_2,undefined ***param_3,ulonglong param_4) { int iVar1; undefined *puVar2; void *pvVar3; int iVar4; DWORD DVar5; DWORD DVar6; DWORD DVar7; byte *pbVar8; uint *puVar9; longlong *plVar10; undefined ***pppuVar11; byte **ppbVar12; int *piVar13; undefined8 *puVar14; byte *pbVar15; ulonglong uVar16; byte *pbVar17; byte *pbVar18; uint uVar19; byte *pbVar20; uint *puVar21; wchar_t *pwVar22; LPCWSTR pWVar23; longlong *plVar24; uint uVar25; longlong lVar26; undefined *puVar27; SIZE_T SVar28; undefined8 uVar29; undefined ***pppuVar30; uint **ppuVar31; uint *puVar32; uint uVar33; uint uVar35; longlong lVar36; double dVar37; undefined1 auStackY_488 [32]; uint *local_458; undefined ***local_450; byte *local_448; char *local_440; byte *local_438; undefined **local_430; longlong *local_428; longlong *local_420; ulonglong local_418; undefined8 local_410; undefined *local_408; undefined **local_400; undefined8 local_3f8; byte *local_3f0; undefined8 local_3e8; undefined8 local_3e0; undefined **local_3d8; longlong *local_3d0; byte *local_3c8; ulonglong local_3c0; undefined4 local_3b8; undefined4 local_3b4; undefined **local_3b0; undefined8 local_3a8; byte *local_3a0; undefined8 local_398; undefined8 local_390; undefined **local_388; longlong local_380; byte *local_378; undefined8 local_370; undefined4 local_368; undefined4 local_364; undefined4 *local_360; char *local_358; undefined **local_350; undefined8 local_348; undefined8 local_340; undefined8 local_338; undefined8 local_330; int *local_328; undefined1 local_320; byte **local_318; undefined1 local_310; int *local_308; undefined1 local_300; undefined ***local_2f8; undefined1 local_2f0; undefined8 local_2e8; int *local_2e0; undefined1 local_2d8; exception local_2d0 [24]; exception local_2b8 [24]; exception local_2a0 [72]; exception local_258 [72]; exception local_210 [72]; exception local_1c8 [72]; undefined8 local_180 [3]; char *local_168; char local_160 [136]; char *local_d8; char local_d0 [136]; ulonglong local_48; byte *pbVar34; pppuVar30 = &local_388; local_2e8 = 0xfffffffffffffffe; local_48 = DAT_1401ac5a0 ^ (ulonglong)auStackY_488; local_2e0 = (int *)(param_1 + 0xb8); local_450 = param_3; FUN_14006b350(local_2e0); local_2d8 = 1; if ((*(longlong **)(param_1 + 0x6a0) != (longlong *)0x0) && (**(longlong **)(param_1 + 0x6a0) != 0)) goto LAB_140092d71; DVar5 = *(DWORD *)((longlong)param_2 + 0x54); if (DVar5 == 0) { DVar5 = FUN_14006c0c0(); *(DWORD *)((longlong)param_2 + 0x54) = DVar5; } if ((int)DVar5 < 0) { FUN_14006ba50(local_210,L"Invalid thread count",param_3,param_4); /* WARNING: Subroutine does not return */ _CxxThrowException(local_210,(ThrowInfo *)&DAT_1401a93e8); } uVar16 = (ulonglong)param_3 & 0xffffffffffffff00; ppuVar31 = (uint **)(param_4 & 0xffffffffffffff00); pbVar15 = (byte *)0x0; uVar25 = 0; pbVar17 = pbVar15; pbVar18 = pbVar15; if (0 < (int)param_2[6]) { do { if (((longlong)pbVar17 < 0) || ((int)param_2[6] <= (int)pbVar18)) { /* WARNING: Subroutine does not return */ FUN_14006be30(pbVar17,pbVar18,uVar16,ppuVar31); } if (*(int *)(param_2[5] + (longlong)pbVar17 * 4) == 0) { ppuVar31 = (uint **)CONCAT71((int7)((ulonglong)ppuVar31 >> 8),1); } else { uVar16 = CONCAT71((int7)(uVar16 >> 8),1); } uVar19 = (int)pbVar18 + 1; pbVar18 = (byte *)(ulonglong)uVar19; pbVar17 = pbVar17 + 1; } while ((int)uVar19 < (int)param_2[6]); if (((char)ppuVar31 != '\0') && ((char)uVar16 != '\0')) { FUN_14006ba50(local_258, L"Cannot assign non-zero UDP port number with zero UDP port number! All non-zero or all zero must be guaranteed!" ,uVar16,ppuVar31); /* WARNING: Subroutine does not return */ _CxxThrowException(local_258,(ThrowInfo *)&DAT_1401a93e8); } } iVar1 = *(int *)((longlong)param_2 + 0x5c); if (((iVar1 != 0x80) && (iVar1 != 0xc0)) && (iVar1 != 0x100)) { FUN_14006ba50(local_1c8,L"Invalid key length!",uVar16,ppuVar31); /* WARNING: Subroutine does not return */ _CxxThrowException(local_1c8,(ThrowInfo *)&DAT_1401a93e8); } local_3d8 = Proud::CFastArray::vftable; if (DAT_1401ac8a0 != 5) { FUN_140078250(); } local_3d0 = (longlong *)param_2[4]; local_3b4 = *(undefined4 *)((longlong)param_2 + 0x3c); local_3c8 = (byte *)0x0; local_3c0 = 0; local_3b8 = 0; iVar1 = (int)param_2[6]; lVar36 = (longlong)iVar1; if (iVar1 < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } FUN_140063f80((longlong)&local_3d8,iVar1,uVar16,(longlong)ppuVar31); pbVar17 = local_3c8; iVar4 = (int)local_3c0; pbVar18 = local_3c8; if ((int)local_3c0 == 0) { pbVar18 = pbVar15; } pbVar20 = pbVar15; if ((int)param_2[6] != 0) { pbVar20 = (byte *)param_2[5]; } if (0 < iVar1) { lVar26 = (longlong)pbVar20 - (longlong)pbVar18; do { *(undefined4 *)pbVar18 = *(undefined4 *)(pbVar18 + lVar26); pbVar18 = pbVar18 + 4; lVar36 = lVar36 + -1; } while (lVar36 != 0); } pbVar18 = local_3c8; if ((int)local_3c0 == 0) { pbVar18 = pbVar15; } pbVar20 = (byte *)(local_3c0 & 0xffffffff); FUN_14008cc20((longlong)pbVar18,(int)local_3c0,0); uVar19 = iVar4 - 1; puVar27 = (undefined *)(ulonglong)uVar19; pbVar8 = pbVar15; pbVar34 = pbVar15; if (0 < (int)uVar19) { do { if (((longlong)pbVar8 < 0) || (iVar4 <= (int)pbVar34)) { /* WARNING: Subroutine does not return */ FUN_14006be30(pbVar18,pbVar20,puVar27,ppuVar31); } pbVar20 = pbVar8 + 1; if ((longlong)pbVar20 < 0) { LAB_1400921bc: /* WARNING: Subroutine does not return */ FUN_14006be30(pbVar18,pbVar20,puVar27,ppuVar31); } uVar33 = (int)pbVar34 + 1; pbVar34 = (byte *)(ulonglong)uVar33; if (iVar4 <= (int)uVar33) goto LAB_1400921bc; uVar35 = *(uint *)(pbVar17 + (longlong)pbVar8 * 4); pbVar18 = (byte *)(ulonglong)uVar35; if ((uVar35 == *(uint *)(pbVar17 + (longlong)pbVar8 * 4 + 4)) && (uVar35 != 0)) { FUN_14006ba50(local_2a0,L"Cannot add duplicated UDP port number!",puVar27,ppuVar31); /* WARNING: Subroutine does not return */ _CxxThrowException(local_2a0,(ThrowInfo *)&DAT_1401a93e8); } pbVar8 = pbVar20; } while ((int)uVar33 < (int)uVar19); } local_430 = Proud::CFastArray,0>::vftable; local_428 = (longlong *)0x0; local_420 = (longlong *)0x0; local_418 = 0; local_410 = 0; pppuVar11 = &local_430; FUN_140071210((longlong)pppuVar11,pbVar20,(ulonglong)puVar27,ppuVar31); DVar5 = 0; if ((1 < (int)local_418) && (((puVar2 = (undefined *)param_2[1], puVar2 == (undefined *)0x0 || (puVar2 == PTR_DAT_1401ac010)) || (*(int *)(puVar2 + -8) == 0)))) { FUN_14006cb70(pppuVar11,pbVar20,puVar27,ppuVar31); local_458 = (uint *)PTR_DAT_1401ac010; uVar19 = FUN_14006c9f0( L"Server has multiple network devices, however, no device is specified for listening. Is it your intention?" ); pbVar18 = pbVar15; if ((local_458 != (uint *)0x0) && (pbVar18 = (byte *)0x0, local_458 != (uint *)PTR_DAT_1401ac010)) { pbVar18 = (byte *)(ulonglong)local_458[-2]; } uVar33 = uVar19; if ((((int)uVar19 <= (int)pbVar18) && (uVar33 = uVar25, local_458 != (uint *)0x0)) && (local_458 != (uint *)PTR_DAT_1401ac010)) { uVar33 = local_458[-2]; } uVar35 = 1; if (1 < (int)uVar33) { uVar35 = uVar33; } uVar33 = uVar25; if ((local_458 != (uint *)0x0) && (local_458 != (uint *)PTR_DAT_1401ac010)) { uVar33 = local_458[-2]; } if ((int)uVar33 < (int)uVar35) { if (local_458 == (uint *)0x0) { local_458 = (uint *)PTR_DAT_1401ac010; } if ((int)uVar35 < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } if (uVar35 == 0) { FUN_1400031e0((longlong *)&local_458,PTR_DAT_1401ac010,pbVar18,ppuVar31); } else { uVar33 = uVar25; if ((local_458 != (uint *)0x0) && (local_458 != (uint *)PTR_DAT_1401ac010)) { uVar33 = local_458[-2]; } if (uVar35 != uVar33) { puVar9 = (uint *)FUN_14006cbf0((longlong)(int)uVar35 * 2 + 10); if (puVar9 != (uint *)0x0) { *puVar9 = 0; puVar9[1] = 1; } *puVar9 = uVar35; DVar7 = DVar5; if ((local_458 != (uint *)0x0) && (local_458 != (uint *)PTR_DAT_1401ac010)) { DVar7 = local_458[-2]; } puVar21 = (uint *)PTR_DAT_1401ac010; if ((int)uVar35 < (int)DVar7) { LAB_140092321: if (local_458 != (uint *)0x0) { puVar21 = local_458; } } else { uVar35 = uVar25; if (local_458 != (uint *)0x0) { if (local_458 != (uint *)PTR_DAT_1401ac010) { uVar35 = local_458[-2]; } goto LAB_140092321; } } uVar16 = (ulonglong)uVar35; puVar32 = puVar21; FUN_14006ca20(puVar9 + 2,puVar21,uVar35); FUN_1400031e0((longlong *)&local_458,puVar21,uVar16,puVar32); local_458 = puVar9 + 2; } } } FUN_140002e40((longlong *)&local_458); puVar9 = local_458; if (local_458 == (uint *)0x0) { puVar9 = (uint *)PTR_DAT_1401ac010; } FUN_14006ca20(puVar9, L"Server has multiple network devices, however, no device is specified for listening. Is it your intention?" ,uVar19); puVar9 = local_458; if (local_458 == (uint *)0x0) { puVar9 = (uint *)PTR_DAT_1401ac010; } DVar6 = FUN_14006c9f0((short *)puVar9); DVar7 = 0; if (0 < (int)DVar6) { DVar7 = DVar6; } DVar6 = DVar5; if ((local_458 != (uint *)0x0) && (local_458 != (uint *)PTR_DAT_1401ac010)) { DVar6 = local_458[-2]; } if (((int)DVar7 < (int)DVar6) || (DVar7 = DVar5, local_458 == (uint *)0x0)) { LAB_1400923c4: if (((local_458 != (uint *)PTR_DAT_1401ac010) && (local_458 != (uint *)0x0)) && (local_458 + -2 != (DWORD *)0x0)) { local_458[-2] = DVar7; *(undefined2 *)((longlong)local_458 + (longlong)(int)DVar7 * 2) = 0; } } else if (local_458 != (uint *)PTR_DAT_1401ac010) { DVar7 = local_458[-2]; goto LAB_1400923c4; } local_348 = 0; local_340 = 0; local_338 = 0; local_330 = 0; local_350 = Proud::ByteArray::vftable; ppuVar31 = &local_458; uVar29 = 0; plVar10 = FUN_140078c10((longlong *)&local_360,1,0,(longlong *)ppuVar31,(longlong)&local_350); FUN_14008e530(param_1 + -0xa8,plVar10,uVar29,ppuVar31); pppuVar11 = &local_350; FUN_140078360(pppuVar11); puVar9 = local_458; if (((local_458 != (uint *)0x0) && (local_458 != (uint *)PTR_DAT_1401ac010)) && (puVar21 = local_458 + -2, puVar21 != (uint *)0x0)) { pppuVar11 = (undefined ***)FUN_14006cb70(pppuVar11,plVar10,uVar29,ppuVar31); local_2f8 = pppuVar11; FUN_14006b350((int *)pppuVar11); local_2f0 = 1; puVar9 = puVar9 + -1; *puVar9 = *puVar9 - 1; if (*puVar9 == 0) { FUN_14006cc60(puVar21); } FUN_14006b3e0((longlong)pppuVar11); local_2f0 = 0; } local_458 = (uint *)PTR_DAT_1401ac010; FUN_14006cb70(pppuVar11,plVar10,uVar29,ppuVar31); local_438 = PTR_DAT_1401ac010; plVar10 = FUN_14006c8a0((longlong *)&local_408,plVar10,uVar29,ppuVar31); puVar27 = (undefined *)*plVar10; if ((undefined *)*plVar10 == (undefined *)0x0) { puVar27 = PTR_DAT_1401ac010; } pwVar22 = L"No NIC binding though multiple NIC detected##Process=%s"; ppbVar12 = &local_438; FUN_140053d20((longlong *)ppbVar12,L"No NIC binding though multiple NIC detected##Process=%s", puVar27,ppuVar31); if (((local_408 != (undefined *)0x0) && (local_408 != PTR_DAT_1401ac010)) && (local_408 + -8 != (undefined *)0x0)) { ppbVar12 = (byte **)FUN_14006cb70(ppbVar12,pwVar22,puVar27,ppuVar31); local_318 = ppbVar12; FUN_14006b350((int *)ppbVar12); local_310 = 1; piVar13 = (int *)(local_408 + -4); *piVar13 = *piVar13 + -1; if (*piVar13 == 0) { FUN_14006cc60(local_408 + -8); } FUN_14006b3e0((longlong)ppbVar12); local_310 = 0; } local_408 = PTR_DAT_1401ac010; FUN_14006cb70(ppbVar12,pwVar22,puVar27,ppuVar31); pbVar18 = local_438; local_448 = PTR_DAT_1401ac010; if (PTR_DAT_1401ac010 == (undefined *)0x0) { local_448 = pbVar15; } if (local_438 != PTR_DAT_1401ac010) { piVar13 = (int *)FUN_14006cb70(ppbVar12,pwVar22,puVar27,ppuVar31); local_308 = piVar13; FUN_14006b350(piVar13); local_300 = 1; FUN_1400031e0((longlong *)&local_448,pwVar22,puVar27,ppuVar31); local_448 = pbVar18; if (((pbVar18 != PTR_DAT_1401ac010) && (pbVar18 != (byte *)0x0)) && (pbVar18 != (byte *)0x8)) { *(int *)(pbVar18 + -4) = *(int *)(pbVar18 + -4) + 1; } FUN_14006b3e0((longlong)piVar13); local_300 = 0; } ppbVar12 = &local_448; FUN_14006fa80((longlong *)ppbVar12,pwVar22,puVar27,ppuVar31); if (((pbVar18 != (byte *)0x0) && (pbVar18 != PTR_DAT_1401ac010)) && (pbVar18 + -8 != (byte *)0x0)) { piVar13 = (int *)FUN_14006cb70(ppbVar12,pwVar22,puVar27,ppuVar31); local_328 = piVar13; FUN_14006b350(piVar13); local_320 = 1; pbVar20 = pbVar18 + -4; *(int *)pbVar20 = *(int *)pbVar20 + -1; if (*(int *)pbVar20 == 0) { FUN_14006cc60(pbVar18 + -8); } FUN_14006b3e0((longlong)piVar13); local_320 = 0; } local_438 = PTR_DAT_1401ac010; } dVar37 = (double)param_2[0x16]; if ((double)param_2[0x16] <= 0.0) { dVar37 = DAT_1401ac1a0; } *(double *)(param_1 + 0x778) = dVar37; *(undefined1 *)(param_1 + 0x1a4) = *(undefined1 *)((longlong)param_2 + 0x65); *(undefined1 *)(param_1 + 0x1a5) = *(undefined1 *)((longlong)param_2 + 100); *(undefined1 *)(param_1 + 0x1a6) = *(undefined1 *)((longlong)param_2 + 0x67); *(char *)(param_1 + 0x198) = (char)param_2[0xf]; *(char *)(param_1 + 0x1c0) = (char)param_2[0xd]; iVar1 = *(int *)((longlong)param_2 + 0x5c); *(int *)(param_1 + 0x19c) = iVar1; if (((iVar1 != 0x80) && (iVar1 != 0xc0)) && (iVar1 != 0x100)) { local_358 = "CStartServerParameter::m_encryptedMessageKeyLength Incorrect key length, only 128,192,256"; std::exception::exception(local_2d0,&local_358); /* WARNING: Subroutine does not return */ _CxxThrowException(local_2d0,(ThrowInfo *)&DAT_1401a9298); } iVar1 = (int)param_2[0xc]; *(int *)(param_1 + 0x1a0) = iVar1; if ((((iVar1 != 0) && (iVar1 != 0x200)) && (iVar1 != 0x400)) && (iVar1 != 0x800)) { local_440 = "CStartServerParameter::m_fastEncryptedMessageKeyLength Incorrect key lengt, MaxSize is 2048, MinSize is 8" ; std::exception::exception(local_2b8,&local_440); /* WARNING: Subroutine does not return */ _CxxThrowException(local_2b8,(ThrowInfo *)&DAT_1401a9298); } *(int *)(param_1 + 0x1a8) = (int)param_2[0x10]; *(undefined1 *)(param_1 + 0x1ac) = *(undefined1 *)((longlong)param_2 + 0x84); *(undefined1 *)(param_1 + 0x1ad) = *(undefined1 *)((longlong)param_2 + 0x85); FUN_1400dd700((undefined8 *)(param_1 + 0xba0),param_1 + 0xba8,puVar27,ppuVar31); local_3a8 = 0; local_3a0 = (byte *)0x0; local_398 = 0; local_390 = 0; local_3b0 = Proud::ByteArray::vftable; FUN_1400dd5d0((longlong)&local_3b0,*(int *)(param_1 + 0x19c),(SIZE_T)puVar27,ppuVar31); pbVar18 = local_3a0; if ((int)local_398 == 0) { pbVar18 = pbVar15; } SVar28 = (SIZE_T)(*(uint *)(param_1 + 0x19c) >> 3); lVar36 = 0x10; FUN_1400cd030((void *)(param_1 + 0x798),pbVar18,SVar28,0x10); local_3f8 = 0; local_3f0 = (byte *)0x0; local_3e8 = 0; local_3e0 = 0; local_400 = Proud::ByteArray::vftable; FUN_1400dd5d0((longlong)&local_400,*(int *)(param_1 + 0x1a0),SVar28,lVar36); pbVar18 = local_3f0; if ((int)local_3e8 == 0) { pbVar18 = pbVar15; } uVar16 = (ulonglong)(*(uint *)(param_1 + 0x1a0) >> 3); FUN_1400dccc0(param_1 + 0xb68,(longlong)pbVar18,uVar16,lVar36); *(undefined4 *)(param_1 + 0xb98) = 0; local_440 = operator_new(0xa8); pbVar18 = pbVar15; if (local_440 != (char *)0x0) { pbVar18 = (byte *)(param_1 + -0x40); if (param_1 == 0xa8) { pbVar18 = pbVar15; } uVar16 = CONCAT71((int7)(uVar16 >> 8),1); pbVar18 = (byte *)FUN_1400761a0(local_440,pbVar18,uVar16,lVar36); } *(byte **)(param_1 + 0x6e0) = pbVar18; local_440 = operator_new(0xa8); pbVar18 = pbVar15; if (local_440 != (char *)0x0) { pbVar18 = (byte *)(param_1 + -0x40); if (param_1 == 0xa8) { pbVar18 = pbVar15; } pbVar18 = (byte *)FUN_1400761a0(local_440,pbVar18,CONCAT71((int7)(uVar16 >> 8),1),lVar36); } *(byte **)(param_1 + 0x6e8) = pbVar18; FUN_140076ec0((char *)(param_1 + 0x6b8)); dVar37 = FUN_140076f50((char *)(param_1 + 0x6b8)); *(double *)(param_1 + 0x158) = dVar37; *(undefined8 *)(param_1 + 0x118) = 0; puVar14 = FUN_140074230(local_180); *(undefined4 *)(param_1 + 0x1c4) = *(undefined4 *)puVar14; *(undefined4 *)(param_1 + 0x1c8) = *(undefined4 *)((longlong)puVar14 + 4); *(undefined4 *)(param_1 + 0x1cc) = *(undefined4 *)(puVar14 + 1); *(undefined4 *)(param_1 + 0x1d0) = *(undefined4 *)((longlong)puVar14 + 0xc); *(int *)(param_1 + 0x179c) = (int)param_2[8]; *(undefined4 *)(param_1 + 0x340) = *(undefined4 *)((longlong)param_2 + 0x44); *(int *)(param_1 + 0x344) = (int)param_2[9]; *(undefined4 *)(param_1 + 0x348) = *(undefined4 *)((longlong)param_2 + 0x4c); *(int *)(param_1 + 0x34c) = (int)param_2[10]; pWVar23 = (LPCWSTR)*param_2; if ((LPCWSTR)*param_2 == (LPCWSTR)0x0) { pWVar23 = (LPCWSTR)PTR_DAT_1401ac010; } local_168 = local_160; FUN_14006b570((longlong *)&local_168,pWVar23,3); FUN_14006b850((longlong *)(param_1 + 0x168),local_168); if (local_168 != local_160) { free(local_168); } pWVar23 = (LPCWSTR)param_2[1]; if ((LPCWSTR)param_2[1] == (LPCWSTR)0x0) { pWVar23 = (LPCWSTR)PTR_DAT_1401ac010; } local_d8 = local_d0; uVar29 = 3; FUN_14006b570((longlong *)&local_d8,pWVar23,3); FUN_14006b850((longlong *)(param_1 + 0x170),local_d8); if (local_d8 != local_d0) { free(local_d8); } *(undefined4 *)(param_1 + 0x1b0) = *(undefined4 *)((longlong)param_2 + 0x6c); *(longlong *)(param_1 + 0x1b8) = param_2[0xe]; local_388 = Proud::CFastArray::vftable; if (DAT_1401ac8a0 != 5) { FUN_140078250(); } local_380 = param_2[4]; local_364 = *(undefined4 *)((longlong)param_2 + 0x3c); local_378 = (byte *)0x0; local_370 = 0; local_368 = 0; iVar1 = (int)param_2[6]; lVar26 = (longlong)iVar1; if (iVar1 < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } FUN_140063f80((longlong)pppuVar30,iVar1,uVar29,lVar36); pppuVar11 = local_450; pbVar18 = local_378; if ((int)local_370 == 0) { pbVar18 = pbVar15; } pbVar20 = pbVar15; if ((int)param_2[6] != 0) { pbVar20 = (byte *)param_2[5]; } if (0 < iVar1) { lVar36 = (longlong)pbVar20 - (longlong)pbVar18; do { *(undefined4 *)pbVar18 = *(undefined4 *)(pbVar18 + lVar36); pbVar18 = pbVar18 + 4; lVar26 = lVar26 + -1; } while (lVar26 != 0); } plVar10 = param_2 + 0x11; plVar24 = (longlong *)(ulonglong)*(uint *)(param_2 + 8); uVar29 = FUN_14008fb10((longlong *)(param_1 + -0xa8),*(uint *)(param_2 + 8),(longlong **)pppuVar30 ,(longlong)plVar10,(ulonglong *)local_450); if ((char)uVar29 != '\0') { plVar24 = (longlong *)(ulonglong)*(uint *)(param_2 + 2); uVar29 = FUN_14008f270(param_1 + -0xa8,(ulonglong)plVar24,(ulonglong *)pppuVar11,plVar10); pppuVar30 = pppuVar11; if ((char)uVar29 != '\0') { pbVar18 = pbVar15; if (*(int *)((longlong)param_2 + 0x7c) == 0) { local_450 = operator_new(0x10); if (local_450 != (undefined ***)0x0) { pbVar18 = (byte *)FUN_1400dbf10(local_450); } } else { local_450 = operator_new(0x90); if (local_450 != (undefined ***)0x0) { pbVar18 = (byte *)FUN_1400dc550(local_450,DAT_1401ac1a8); } } *(byte **)(param_1 + 0x3d0) = pbVar18; *(undefined4 *)(param_1 + 0x175c) = 0; FUN_140008030((longlong *)(param_1 + 0x1760),&DAT_14015cd00,pppuVar11,plVar10); *(undefined8 *)(param_1 + 0x1768) = 0; *(undefined4 *)(param_1 + 0x1798) = 0; DVar7 = *(DWORD *)(param_2 + 0xb); DVar6 = FUN_14006c0c0(); if ((int)DVar6 <= (int)DVar7) { DVar7 = FUN_14006c0c0(); } if (0 < (int)DVar7) { DVar5 = DVar7; } *(DWORD *)(param_2 + 0xb) = DVar5; if (DVar5 == 0) { DVar5 = FUN_14006c0c0(); *(DWORD *)(param_2 + 0xb) = DVar5; } local_360 = operator_new(0x280); if (local_360 != (undefined4 *)0x0) { pbVar15 = (byte *)FUN_1400c6740(local_360,param_1 + -0xa8,pppuVar11,plVar10); } *(byte **)(param_1 + 0x338) = pbVar15; FUN_1400ca800((int *)pbVar15,*(int *)((longlong)param_2 + 0x54), (int *)(ulonglong)*(uint *)(param_2 + 0xb)); Sleep(100); FUN_140078360(&local_400); FUN_140078360(&local_3b0); local_430 = Proud::CFastArray,0>::vftable; if (0 < (int)local_418) { uVar16 = local_418 & 0xffffffff; plVar10 = local_420; do { FUN_140008440(plVar10); plVar10 = plVar10 + 1; uVar16 = uVar16 - 1; } while (uVar16 != 0); } if (local_420 != (longlong *)0x0) { if (local_428 == (longlong *)0x0) { FUN_14006cc60(local_420); } else { (**(code **)(*local_428 + 0x18))(local_428,local_420); } } if (pbVar17 != (byte *)0x0) { if (local_3d0 == (longlong *)0x0) { FUN_14006cc60(pbVar17); } else { (**(code **)(*local_3d0 + 0x18))(local_3d0,pbVar17); } } uVar29 = FUN_14006b3e0(param_1 + 0xb8); return CONCAT71((int7)((ulonglong)uVar29 >> 8),1); } } FUN_140076f10((char *)(param_1 + 0x6b8)); pvVar3 = *(void **)(param_1 + 0x6e0); if (pvVar3 != (void *)0x0) { FUN_140076380((longlong)pvVar3,plVar24,(longlong *)pppuVar30,plVar10); operator_delete(pvVar3); } *(undefined8 *)(param_1 + 0x6e0) = 0; pvVar3 = *(void **)(param_1 + 0x6e8); if (pvVar3 != (void *)0x0) { FUN_140076380((longlong)pvVar3,plVar24,(longlong *)pppuVar30,plVar10); operator_delete(pvVar3); } *(undefined8 *)(param_1 + 0x6e8) = 0; *(undefined4 *)(param_1 + 0x1c4) = 0; *(undefined4 *)(param_1 + 0x1c8) = 0; *(undefined4 *)(param_1 + 0x1cc) = 0; *(undefined4 *)(param_1 + 0x1d0) = 0; FUN_140078360(&local_400); FUN_140078360(&local_3b0); local_430 = Proud::CFastArray,0>::vftable; if (0 < (int)local_418) { uVar16 = local_418 & 0xffffffff; plVar10 = local_420; do { FUN_140008440(plVar10); plVar10 = plVar10 + 1; uVar16 = uVar16 - 1; } while (uVar16 != 0); } if (local_420 != (longlong *)0x0) { if (local_428 == (longlong *)0x0) { FUN_14006cc60(local_420); } else { (**(code **)(*local_428 + 0x18))(local_428,local_420); } } if (pbVar17 != (byte *)0x0) { if (local_3d0 == (longlong *)0x0) { FUN_14006cc60(pbVar17); } else { (**(code **)(*local_3d0 + 0x18))(local_3d0,pbVar17); } } LAB_140092d71: uVar16 = FUN_14006b3e0(param_1 + 0xb8); return uVar16 & 0xffffffffffffff00; }