请仔细阅读和分析下面函数
1. 保留所有原始功能
2. 提高执行效率,降低计算复杂度
3. 已经给定的结构体名字和元素不要更改
4. 程序内部错误和异常使用英文, 其他给出详细的中文注释
5. 增强异常处理和边界条件检查
6. 自动添加中文注释说明功能逻辑
7. 不使用 auto,使用显式 for 循环
8. 结构体采用32位定义
10. 不要使用小函数
11. 实现全部功能,完整可编译的代码
特别注意: 必须保持原始逻辑不变
HDDMDevice *__fastcall HDDMDeviceCache::loadDevice(
HDDMDeviceCache *this,
const std::string *a2,
const std::string *a3,
const std::string *a4,
const std::string *a5)
{
int v6; // eax
__int64 v7; // r15
__int64 v8; // r14
int v9; // edx
int v10; // ecx
int v11; // r8d
int v12; // r9d
__int64 n128; // r13
_QWORD *s1_1; // r14
HDDMDevice *Device_2; // rbx
_QWORD *s2_1; // rsi
size_t n; // rdx
bool v19; // zf
HDDMDevice *Device_1; // rax
const std::string *v21; // r12
HDConfig *v22; // rbx
unsigned __int64 v23; // rbx
HEXInternalException *v24; // rbx
char isDerived; // al
char ValueAsBoolERKSs; // bl
char ValueAsBoolERKSs_1; // bl
unsigned __int16 v28; // si
unsigned __int16 v29; // cx
__int64 v30; // rdx
unsigned __int64 v31; // rbx
__int64 v32; // rdx
__int64 v33; // rdi
__int64 v34; // rax
__int64 v35; // rcx
__int64 v36; // rsi
_QWORD *v37; // r12
__int64 v38; // rdx
unsigned __int64 v39; // rax
unsigned int v40; // ebp
__int64 v41; // rcx
unsigned int v42; // edi
int v43; // r8d
int v44; // edx
int v45; // esi
__int64 v46; // rcx
int v47; // r9d
int v48; // r10d
__int16 n3; // cx
unsigned int v50; // r14d
__int64 v51; // r13
__int64 v52; // r13
__int64 v53; // r13
__int64 v54; // r8
const HDDMTilePort *s1_4; // r13
__int64 v56; // r8
std::string *v57; // rax
_QWORD *v58; // r14
__int64 v59; // r15
__int64 v60; // rax
__int64 v61; // r8
__int64 v62; // r14
__int64 v63; // rax
unsigned int v64; // r15d
unsigned int v65; // r14d
__int64 v66; // r14
__int64 v67; // rax
__int64 v68; // r8
int *insert_hint_unique_pos_3; // rdx
int *insert_hint_unique_pos_2; // r15
int *insert_hint_unique_pos_4; // r14
__int64 insert_hint_unique_pos_5; // rax
__int64 insert_hint_unique_pos; // rax
__int64 v74; // rdx
_BOOL8 v75; // rdi
unsigned __int64 v76; // r14
int *insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__12; // rdx
int *insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__2; // r15
__int64 insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__14; // rax
__int64 insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4_; // rax
__int64 v81; // rdx
_BOOL8 v82; // rdi
int *insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__15; // rdx
HDDMTile *v84; // rsi
int *insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__5; // r15
int *insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__16; // r14
__int64 insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__17; // rax
HDDMTile *v88; // rax
__int64 insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__3; // rax
__int64 v90; // rdx
_BOOL8 v91; // rdi
unsigned __int64 v92; // r14
int *insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__18; // rdx
int *insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__8; // r15
__int64 insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__20; // rax
__int64 insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__6; // rax
__int64 v97; // rdx
_BOOL8 v98; // rdi
unsigned int v99; // r14d
unsigned int v100; // r15d
__int64 v101; // r13
__int64 v102; // r13
__int64 v103; // r13
__int64 v104; // r13
__int64 v105; // r13
__int64 v106; // r13
__int64 v107; // r13
__int64 v108; // rax
__int64 v109; // rdx
int v110; // eax
__int64 v111; // rax
int v112; // ecx
unsigned int v113; // ebx
__int64 v114; // rdx
int v115; // ebp
__int64 v116; // rax
__int64 v117; // rax
__int64 v118; // rax
__int64 v119; // rdx
__int64 v120; // r13
int v121; // r14d
int *insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__21; // rax
unsigned __int64 v123; // r12
int *insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__10; // rbx
__int64 insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__22; // rax
int *insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__11; // r15
__int64 insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__9; // rax
__int64 v128; // rdx
_BOOL8 v129; // rdi
int v130; // ebx
__int64 v131; // rax
__int64 v132; // rax
__int64 v133; // rax
__int64 TileType; // rbx
int v135; // eax
__int64 v136; // rdx
__int64 v137; // rcx
__int64 v138; // rax
__int64 TileTypeERKSs; // rbx
int v140; // eax
__int64 v141; // rdx
__int64 v142; // rcx
__int64 v143; // rax
HPAParamMgr *ParamMgrEv; // rbp
char ValueAsBoolERKSs_2; // bl
const char *s1_3; // rbp
HDDMInactiveExceptionAccess *v147; // rbp
char v148; // bl
google::protobuf::Message *v149; // rdx
HEXDataException *v150; // rbp
HDDMDevice **v151; // rbx
__int64 v152; // rax
__int64 v153; // rax
HDDMOracle *v154; // rbx
HEXDataException *exception; // rbx
const char *DEBUG:_Request_device_load:_%s__%s_n; // [rsp+0h] [rbp-AC8h]
int v157; // [rsp+0h] [rbp-AC8h]
int v158; // [rsp+8h] [rbp-AC0h]
__int64 v159; // [rsp+8h] [rbp-AC0h]
int v160; // [rsp+10h] [rbp-AB8h]
int v161; // [rsp+10h] [rbp-AB8h]
HDDMTilePort **p_s1; // [rsp+20h] [rbp-AA8h]
std::string *v165; // [rsp+30h] [rbp-A98h]
std::string *v167; // [rsp+58h] [rbp-A70h]
int *insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4_; // [rsp+68h] [rbp-A60h]
int *insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__19; // [rsp+68h] [rbp-A60h]
unsigned int v170; // [rsp+68h] [rbp-A60h]
int *insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__7; // [rsp+68h] [rbp-A60h]
int *insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__4; // [rsp+68h] [rbp-A60h]
int *insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__1; // [rsp+68h] [rbp-A60h]
int *insert_hint_unique_pos_1; // [rsp+68h] [rbp-A60h]
unsigned int v175; // [rsp+74h] [rbp-A54h]
HDDMDevice *Device; // [rsp+98h] [rbp-A30h]
__int64 v177; // [rsp+A0h] [rbp-A28h]
__int64 v178; // [rsp+C0h] [rbp-A08h]
char ValueAsBool; // [rsp+CBh] [rbp-9FDh]
unsigned int v180; // [rsp+CCh] [rbp-9FCh]
char v181; // [rsp+E5h] [rbp-9E3h] BYREF
char v182; // [rsp+E7h] [rbp-9E1h] BYREF
char v183; // [rsp+E9h] [rbp-9DFh] BYREF
char v184; // [rsp+EAh] [rbp-9DEh] BYREF
char v185; // [rsp+ECh] [rbp-9DCh] BYREF
char v186; // [rsp+EDh] [rbp-9DBh] BYREF
char v187; // [rsp+EFh] [rbp-9D9h] BYREF
unsigned __int16 v188[8]; // [rsp+F0h] [rbp-9D8h] BYREF
unsigned __int16 v189[8]; // [rsp+100h] [rbp-9C8h] BYREF
unsigned __int16 v190[7]; // [rsp+110h] [rbp-9B8h] BYREF
unsigned __int16 v191; // [rsp+11Eh] [rbp-9AAh] BYREF
_QWORD v192[2]; // [rsp+120h] [rbp-9A8h] BYREF
_QWORD v193[2]; // [rsp+130h] [rbp-998h] BYREF
_QWORD v194[2]; // [rsp+140h] [rbp-988h] BYREF
_QWORD v195[2]; // [rsp+150h] [rbp-978h] BYREF
__int64 v196; // [rsp+160h] [rbp-968h] BYREF
__int64 v197; // [rsp+170h] [rbp-958h] BYREF
int v198[2]; // [rsp+180h] [rbp-948h] BYREF
int v199[2]; // [rsp+190h] [rbp-938h] BYREF
_QWORD v200[2]; // [rsp+1A0h] [rbp-928h] BYREF
_QWORD v201[2]; // [rsp+1B0h] [rbp-918h] BYREF
_QWORD v202[2]; // [rsp+1C0h] [rbp-908h] BYREF
_QWORD v203[2]; // [rsp+1F0h] [rbp-8D8h] BYREF
_QWORD v204[2]; // [rsp+200h] [rbp-8C8h] BYREF
__int64 v205; // [rsp+210h] [rbp-8B8h] BYREF
__int64 v206; // [rsp+220h] [rbp-8A8h] BYREF
_QWORD v207[2]; // [rsp+230h] [rbp-898h] BYREF
_QWORD v208[2]; // [rsp+240h] [rbp-888h] BYREF
_QWORD v209[2]; // [rsp+250h] [rbp-878h] BYREF
_QWORD v210[2]; // [rsp+260h] [rbp-868h] BYREF
_QWORD v211[2]; // [rsp+270h] [rbp-858h] BYREF
_QWORD v212[2]; // [rsp+280h] [rbp-848h] BYREF
_QWORD v213[2]; // [rsp+2A0h] [rbp-828h] BYREF
_QWORD v214[2]; // [rsp+2B0h] [rbp-818h] BYREF
_QWORD v215[2]; // [rsp+2C0h] [rbp-808h] BYREF
_QWORD v216[2]; // [rsp+2D0h] [rbp-7F8h] BYREF
_QWORD v217[2]; // [rsp+2F0h] [rbp-7D8h] BYREF
_QWORD v218[2]; // [rsp+300h] [rbp-7C8h] BYREF
_QWORD v219[2]; // [rsp+310h] [rbp-7B8h] BYREF
_QWORD v220[2]; // [rsp+320h] [rbp-7A8h] BYREF
_QWORD v221[2]; // [rsp+330h] [rbp-798h] BYREF
_QWORD v222[2]; // [rsp+340h] [rbp-788h] BYREF
_QWORD v223[2]; // [rsp+350h] [rbp-778h] BYREF
_QWORD v224[2]; // [rsp+360h] [rbp-768h] BYREF
_QWORD v225[2]; // [rsp+370h] [rbp-758h] BYREF
_QWORD v226[2]; // [rsp+380h] [rbp-748h] BYREF
_QWORD v227[2]; // [rsp+390h] [rbp-738h] BYREF
unsigned int v228[4]; // [rsp+3A0h] [rbp-728h] BYREF
_QWORD v229[2]; // [rsp+3B0h] [rbp-718h] BYREF
HDDMTile *v230[2]; // [rsp+3C0h] [rbp-708h] BYREF
HDDMTilePort *p_s1[2]; // [rsp+3D0h] [rbp-6F8h] BYREF
__int64 v232; // [rsp+3E0h] [rbp-6E8h] BYREF
__int64 v233; // [rsp+3F0h] [rbp-6D8h] BYREF
_QWORD v234[2]; // [rsp+400h] [rbp-6C8h] BYREF
_QWORD v235[2]; // [rsp+410h] [rbp-6B8h] BYREF
__int64 v236; // [rsp+420h] [rbp-6A8h] BYREF
_QWORD v237[2]; // [rsp+430h] [rbp-698h] BYREF
_QWORD v238[2]; // [rsp+440h] [rbp-688h] BYREF
_QWORD v239[2]; // [rsp+450h] [rbp-678h] BYREF
const HDDMTile *v240[2]; // [rsp+460h] [rbp-668h] BYREF
__int64 v241; // [rsp+470h] [rbp-658h] BYREF
int v242; // [rsp+478h] [rbp-650h] BYREF
int *insert_hint_unique_pos_6; // [rsp+480h] [rbp-648h]
int *v244; // [rsp+488h] [rbp-640h]
int *v245; // [rsp+490h] [rbp-638h]
__int64 v246; // [rsp+498h] [rbp-630h]
void *s1_2; // [rsp+4A0h] [rbp-628h] BYREF
int v248; // [rsp+4A8h] [rbp-620h] BYREF
int *insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__23; // [rsp+4B0h] [rbp-618h]
int *v250; // [rsp+4B8h] [rbp-610h]
int *v251; // [rsp+4C0h] [rbp-608h]
__int64 v252; // [rsp+4C8h] [rbp-600h]
_BYTE v253[64]; // [rsp+4D0h] [rbp-5F8h] BYREF
void *s2[12]; // [rsp+510h] [rbp-5B8h] BYREF
_BYTE v255[176]; // [rsp+570h] [rbp-558h] BYREF
void *s1; // [rsp+620h] [rbp-4A8h] BYREF
char *v257; // [rsp+628h] [rbp-4A0h] BYREF
__int16 v258; // [rsp+630h] [rbp-498h] BYREF
__int16 v259; // [rsp+632h] [rbp-496h]
__int16 v260; // [rsp+634h] [rbp-494h]
__int16 v261; // [rsp+636h] [rbp-492h]
__int16 v262; // [rsp+638h] [rbp-490h]
__int16 v263; // [rsp+63Ah] [rbp-48Eh]
_QWORD v264[3]; // [rsp+640h] [rbp-488h] BYREF
int v265; // [rsp+658h] [rbp-470h]
int v266; // [rsp+65Ch] [rbp-46Ch]
int v267; // [rsp+660h] [rbp-468h]
int v268; // [rsp+664h] [rbp-464h]
char v269; // [rsp+A88h] [rbp-40h]
std::string::string(&s1, "", &s1_2);
std::string::string(s2, "device:loadDevice", &v241);
HUTMemWatcher::HUTMemWatcher((HUTMemWatcher *)v255, (const std::string *)s2, (const std::string *)&s1);
std::string::_Rep::_M_dispose((char *)s2[0] - 24, v253);
std::string::_Rep::_M_dispose((char *)s1 - 24, s2);
if ( &_pthread_key_create )
{
v6 = pthread_mutex_lock(&mutex_);
if ( v6 )
std::__throw_system_error(v6);
}
HUTRuntime::HUTRuntime((HUTRuntime *)v253, 1);
HUTMemory::getUsedMemory((HUTMemory *)v253);
p_s1 = (HDDMTilePort **)HPAParamMgr::getParamMgr((HPAParamMgr *)v253);
std::string::string(v192, "device.trackDeviceDataLoading", s2);
ValueAsBool = HPAParamMgr::getValueAsBool((HPAParamMgr *)p_s1, (const std::string *)v192);
std::string::_Rep::_M_dispose(v192[0] - 24LL, &s1);
if ( ValueAsBool )
{
v7 = *(_QWORD *)a2;
v8 = *(_QWORD *)a3;
std::string::string(v225, "trackDeviceDataLoading", &v182);
std::string::string(v224, "device", &s1);
v160 = v8;
v158 = v7;
DEBUG:_Request_device_load:_%s__%s_n = "DEBUG: Request device load: %s, %s\n";
ComMsgMgr::sendScopedMsg::eval(
2,
"/proj/rdi-xco/wall/workspaces/wall287/sub/REL/2016.3/src/shared/device/devmodel/HDDMDevice.cxx",
770,
v224,
v225,
16777218);
std::string::_Rep::_M_dispose(v224[0] - 24LL, s2);
std::string::_Rep::_M_dispose(v225[0] - 24LL, &s1);
}
std::string::string((std::string *)v193, a2);
sub_2188390(
(unsigned int)&s1,
(unsigned int)v193,
v9,
v10,
v11,
v12,
(_DWORD)DEBUG:_Request_device_load:_%s__%s_n,
v158,
v160);
n128 = 0;
std::string::_Rep::_M_dispose(v193[0] - 24LL, s2);
s1_1 = s1;
do
{
Device_2 = *(HDDMDevice **)((char *)this + n128);
if ( Device_2 )
{
s2_1 = (_QWORD *)*((_QWORD *)Device_2 + 44);
n = *(s1_1 - 3);
if ( n == *(s2_1 - 3) && !memcmp(s1_1, s2_1, n) )
{
++*((_DWORD *)Device_2 + 86);
if ( ValueAsBool )
{
std::string::string(v227, "trackDeviceDataLoading", &v183);
std::string::string(v226, "device", s2);
ComMsgMgr::sendScopedMsg::eval(
3,
"/proj/rdi-xco/wall/workspaces/wall287/sub/REL/2016.3/src/shared/device/devmodel/HDDMDevice.cxx",
789,
v226,
v227,
16777218);
std::string::_Rep::_M_dispose(v226[0] - 24LL, &s1_2);
std::string::_Rep::_M_dispose(v227[0] - 24LL, s2);
s1_1 = s1;
}
std::string::_Rep::_M_dispose(s1_1 - 3, s2);
goto LABEL_13;
}
}
n128 += 8;
}
while ( n128 != 128 );
std::string::_Rep::_M_dispose(s1_1 - 3, s2);
std::string::string(v195, "", s2);
std::string::string(v194, "", &s1_2);
Device = (HDDMDevice *)HDDMDeviceCache::createDevice(this, (const std::string *)v194, (const std::string *)v195);
std::string::_Rep::_M_dispose(v194[0] - 24LL, &s1);
std::string::_Rep::_M_dispose(v195[0] - 24LL, &s1);
++*((_DWORD *)Device + 86);
v188[0] = 0;
v191 = 0;
HDDMDeviceCache::getFileTypeAndVersion(this, a2, v188, &v191);
if ( (unsigned __int16)(v188[0] - 2) > 1u )
{
exception = (HEXDataException *)__cxa_allocate_exception(0x18u);
std::string::string((std::string *)&v197, a2);
std::string::string(&v196, "File is not a chip or device XNG:", s2);
sub_1E8DC92(exception, v157, v159);
std::string::_Rep::_M_dispose(v196 - 24, &s1);
std::string::_Rep::_M_dispose(v197 - 24, &s1);
__cxa_throw(exception, (struct type_info *)&`typeinfo for'HEXDataException, sub_1F4CF30);
}
*(_QWORD *)v198 = (char *)&std::string::_Rep::_S_empty_rep_storage + 24;
*(_QWORD *)v199 = (char *)&std::string::_Rep::_S_empty_rep_storage + 24;
if ( v188[0] == 2 )
{
sub_1F9A060(&s1, *(_QWORD *)a2, 4, 0);
std::istream::read((std::istream *)&v258, (char *)&s1_2, 8);
HDDMXng::Chip::Chip((HDDMXng::Chip *)s2);
HDDMDevice::readMessage((HDDMDevice *)&v258, (std::istream *)s2, v149);
std::string::assign((std::string *)v198, (const std::string *)s2[7]);
std::string::assign((std::string *)v199, (const std::string *)s2[6]);
HDDMXng::Chip::~Chip((HDDMXng::Chip *)s2);
sub_1F34A70(&s1);
}
else
{
std::string::string((std::string *)v200, a2);
HUBSimpleScanner::HUBSimpleScanner(&s1, v200);
std::string::_Rep::_M_dispose(v200[0] - 24LL, s2);
HUBSimpleScanner::scanTargetWord((HUBSimpleScanner *)&s1, "xngd", 1);
HUBSimpleScanner::scanInt((HUBSimpleScanner *)&s1, 1, "version number");
HUBSimpleScanner::scanWord((HUBSimpleScanner *)v201, (bool)&s1, (const char *)&dword_0 + 1);
std::string::swap((std::string *)v198, (std::string *)v201);
std::string::_Rep::_M_dispose(v201[0] - 24LL, s2);
HUBSimpleScanner::scanWord((HUBSimpleScanner *)v202, (bool)&s1, (const char *)&dword_0 + 1);
std::string::swap((std::string *)v199, (std::string *)v202);
std::string::_Rep::_M_dispose(v202[0] - 24LL, s2);
HUBSimpleScanner::~HUBSimpleScanner((HUBSimpleScanner *)&s1);
}
std::string::string((std::string *)v203, a3);
if ( !*(_QWORD *)(v203[0] - 24LL) )
{
sub_21886D0(v204, a2, v198);
std::string::swap((std::string *)v203, (std::string *)v204);
std::string::_Rep::_M_dispose(v204[0] - 24LL, &s1);
}
HDDMDevice::setloadpaths(Device, a2, (const std::string *)v203);
v189[0] = 0;
v190[0] = 0;
HDDMDeviceCache::getFileTypeAndVersion(this, (const std::string *)v203, v189, v190);
if ( v189[0] != 1 )
{
v150 = (HEXDataException *)__cxa_allocate_exception(0x18u);
std::string::string((std::string *)&v206, (const std::string *)v203);
std::string::string(&v205, "File is not an architecture XNG:", s2);
sub_1E8DC92(v150, v157, v159);
std::string::_Rep::_M_dispose(v205 - 24, &s1);
std::string::_Rep::_M_dispose(v206 - 24, &s1);
__cxa_throw(v150, (struct type_info *)&`typeinfo for'HEXDataException, sub_1F4CF30);
}
HDDMDevice::readarch_pb(Device, (const std::string *)v203, v190[0]);
v19 = v188[0] != 3;
*((_BYTE *)Device + 497) = v188[0] == 3;
if ( !v19 )
{
HDDMDevice::readdevice(Device, a2);
Device_1 = Device;
if ( *((_QWORD *)Device + 8) )
goto LABEL_24;
LABEL_29:
HDDMDevice::createRPMGrid(Device_1);
goto LABEL_24;
}
v260 = -1;
v261 = -1;
v258 = -1;
s1 = (char *)&std::string::_Rep::_S_empty_rep_storage + 24;
v257 = (char *)&std::string::_Rep::_S_empty_rep_storage + 24;
v259 = -1;
v262 = -1;
v263 = -1;
v264[0] = (char *)&std::string::_Rep::_S_empty_rep_storage + 24;
v264[1] = 0;
v264[2] = 0;
v265 = 0;
v266 = 0;
v267 = 0;
v268 = -1;
std::string::assign((std::string *)&v257, "chip", 4u);
std::string::assign((std::string *)&s1, (const std::string *)v199);
std::string::assign((std::string *)v264, a2);
v261 = 0;
v258 = 0;
v259 = 0;
v260 = 0;
v262 = 0;
v263 = 0;
v267 = 0;
v268 = 0;
s2[0] = 0;
std::vector<HDDMChip *>::_M_fill_assign((char *)Device + 952, 1, s2);
HDDMDevice::readchip_pb(Device, &s1);
std::string::_Rep::_M_dispose(v264[0] - 24LL, s2);
std::string::_Rep::_M_dispose(v257 - 24, s2);
std::string::_Rep::_M_dispose((char *)s1 - 24, s2);
Device_1 = Device;
if ( !*((_QWORD *)Device + 8) )
goto LABEL_29;
LABEL_24:
HDDMDevice::createRoutingDS(Device);
HDDMDevice::setrecursivedeviceid(Device, *(_BYTE *)Device & 0xF);
v21 = (HDDMDevice *)((char *)Device + 352);
std::string::string((std::string *)v207, (HDDMDevice *)((char *)Device + 352));
std::string::string((std::string *)v239, (const std::string *)v207);
std::string::_Rep::_M_dispose(v207[0] - 24LL, &s1);
std::string::string(v208, "cfg", &v181);
boost::filesystem::path::replace_extension((boost::filesystem::path *)v239, (const boost::filesystem::path *)v208);
std::string::_Rep::_M_dispose(v208[0] - 24LL, &s1);
HUTEnv::getRDIDataDir((HUTEnv *)v209, (const std::string *)v239);
std::string::string((std::string *)v240, (const std::string *)v209);
std::string::_Rep::_M_dispose(v209[0] - 24LL, &s1);
boost::filesystem::path::operator/=(v240, v239);
std::string::string((std::string *)&v241, (const std::string *)v240);
boost::filesystem::path::stem((boost::filesystem::path *)v210);
std::string::string((std::string *)&s1_2, (const std::string *)v210);
std::string::_Rep::_M_dispose(v210[0] - 24LL, &s1);
std::string::string((std::string *)v211, (const std::string *)&v241);
boost::filesystem::detail::status(v228, v211, 0);
if ( v228[0] <= 1 )
{
std::string::_Rep::_M_dispose(v211[0] - 24LL, &s1);
}
else
{
std::string::_Rep::_M_dispose(v211[0] - 24LL, &s1);
v22 = (HDConfig *)operator new(0xB0u);
HDConfig::HDConfig(v22, 0, 1);
*((_QWORD *)Device + 98) = v22;
std::string::string(v212, "", s2);
HDConfig::readFile(*((HDConfig **)Device + 98), (const std::string *)&v241, (const std::string *)v212);
std::string::_Rep::_M_dispose(v212[0] - 24LL, &s1);
s2[0] = (char *)&std::string::_Rep::_S_empty_rep_storage + 24;
std::string::string(v213, "DeviceName", v238);
LOBYTE(v22) = sub_1F2E490(*((std::string **)Device + 98), (HDARPart *)v213, (std::string *)s2);
std::string::_Rep::_M_dispose(v213[0] - 24LL, &s1);
if ( (_BYTE)v22 )
{
v23 = *((_QWORD *)s1_2 - 3);
if ( v23 != *((_QWORD *)s2[0] - 3) || memcmp(s1_2, s2[0], *((_QWORD *)s1_2 - 3)) )
{
std::string::string(&s1, " Device name does not match configuration name! ", v238);
std::string::append((std::string *)&s1, (const std::string *)s2);
v24 = (HEXInternalException *)__cxa_allocate_exception(0x18u);
HEXInternalException::HEXInternalException(v24, (const std::string *)&s1);
__cxa_throw(v24, (struct type_info *)&`typeinfo for'HEXInternalException, sub_1F508A0);
}
}
else
{
v23 = *((_QWORD *)s2[0] - 3);
}
std::string::_M_mutate((std::string *)s2, 0, v23, 0);
std::string::string(v214, "BaseDevice", v238);
v148 = sub_1F2E490(*((std::string **)Device + 98), (HDARPart *)v214, (std::string *)s2);
std::string::_Rep::_M_dispose(v214[0] - 24LL, &s1);
if ( v148 )
std::string::assign((HDDMDevice *)((char *)Device + 792), (const std::string *)s2);
std::string::_Rep::_M_dispose((char *)s2[0] - 24, &s1);
}
HDConfig::HDConfig((HDConfig *)&s1, 0, 1);
std::string::string(v216, "", v238);
std::string::string(v215, "specdevice.cfg", v237);
HDConfig::readFile((HDConfig *)&s1, (const std::string *)v215, (const std::string *)v216);
std::string::_Rep::_M_dispose(v215[0] - 24LL, s2);
std::string::_Rep::_M_dispose(v216[0] - 24LL, s2);
std::string::string(s2, "specialDevice.", v238);
std::string::append((std::string *)s2, (const std::string *)&s1_2);
if ( (unsigned __int8)HDConfig::exists((HDConfig *)&s1, (const std::string *)s2, 0) )
{
if ( !*((_QWORD *)Device + 98) )
sub_2035550(
(unsigned int)"/proj/rdi-xco/wall/workspaces/wall287/sub/REL/2016.3/src/shared/device/devmodel/HDDMDevice.cxx",
932,
(unsigned int)"device",
0x20000000,
(unsigned int)"@21-424@%s",
(_DWORD)s1_2,
v157,
v159,
v161);
}
else if ( *((_QWORD *)Device + 98) )
{
s1_3 = (const char *)s1_2;
std::string::string(v229, "device", &v184);
ComMsgMgr::sendMsg::eval(
1,
"/proj/rdi-xco/wall/workspaces/wall287/sub/REL/2016.3/src/shared/device/devmodel/HDDMDevice.cxx",
938,
v229,
&unk_8000000,
"@21-425@%s",
s1_3);
std::string::_Rep::_M_dispose(v229[0] - 24LL, v238);
}
std::string::_Rep::_M_dispose((char *)s2[0] - 24, v238);
HDConfig::~HDConfig((HDConfig *)&s1);
std::string::_Rep::_M_dispose((char *)s1_2 - 24, &s1);
std::string::_Rep::_M_dispose(v241 - 24, &s1);
std::string::_Rep::_M_dispose((char *)v240[0] - 24, &s1);
std::string::_Rep::_M_dispose(v239[0] - 24LL, &s1);
HDDMDerived::HDDMDerived((HDDMDerived *)s2, Device);
isDerived = HDDMDerived::isDerived((HDDMDerived *)s2);
*((_BYTE *)Device + 801) = isDerived;
if ( isDerived )
{
HDDMDerived::buildTileList((HDDMDerived *)s2);
HDDMDerived::buildSiteList((HDDMDerived *)s2);
if ( *((_BYTE *)Device + 801) )
HDDMDerived::updateDevice((HDDMDerived *)s2);
}
HDDMDevice::postprocess(Device);
std::string::string(v217, "device.disableTemplateLoading", &s1_2);
ValueAsBoolERKSs = HPAParamMgr::getValueAsBool((HPAParamMgr *)p_s1, (const std::string *)v217);
std::string::_Rep::_M_dispose(v217[0] - 24LL, &s1);
if ( !ValueAsBoolERKSs )
{
HDDMTemplateIO::HDDMTemplateIO((HDDMTemplateIO *)&s1);
std::string::string(v218, "device.loadAllNodeTemplates", &v241);
ValueAsBoolERKSs_1 = HPAParamMgr::getValueAsBool((HPAParamMgr *)p_s1, (const std::string *)v218);
std::string::_Rep::_M_dispose(v218[0] - 24LL, &s1_2);
if ( ValueAsBoolERKSs_1 )
v269 = 1;
std::string::string((std::string *)v220, a5);
std::string::string((std::string *)v219, a4);
HDDMTemplateIO::loadTemplateData(&s1, Device, v219, v220);
std::string::_Rep::_M_dispose(v219[0] - 24LL, &s1_2);
std::string::_Rep::_M_dispose(v220[0] - 24LL, &s1_2);
HDDMTemplateIO::~HDDMTemplateIO((HDDMTemplateIO *)&s1);
}
HDDMNodeAdjuster::HDDMNodeAdjuster((HDDMNodeAdjuster *)&s1, Device);
HDDMNodeAdjuster::performAdjustments((HDDMNodeAdjuster *)&s1, v21);
HDDMNodeAdjuster::~HDDMNodeAdjuster((HDDMNodeAdjuster *)&s1);
HDDMDevice::suppressCostcodes(Device);
if ( !HUTEnv::getEnv((HUTEnv *)"DEVMODEL_CHECKTILEPORTS", (const char *)v21) )
goto LABEL_184;
v242 = 0;
insert_hint_unique_pos_6 = 0;
v246 = 0;
v248 = 0;
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__23 = 0;
v252 = 0;
v244 = &v242;
v245 = &v242;
v250 = &v248;
v251 = &v248;
std::__ostream_insert<char,std::char_traits<char>>(&std::cout, "Begin checking tile ports {\n", 28);
v28 = *((_WORD *)Device + 2);
v29 = *((_WORD *)Device + 3);
if ( !(v29 * v28) )
goto LABEL_159;
v180 = 0;
v30 = 0;
do
{
v31 = *(_QWORD *)(*((_QWORD *)Device + 31) + 8 * v30);
v32 = *(_QWORD *)(*(_QWORD *)(HDDMDeviceCache::m_devcache[(*(_WORD *)v31 >> 6) & 0xF] + 168LL)
+ 8LL * (*(_WORD *)(v31 + 4) & 0x3FF));
v33 = *(_QWORD *)(v32 + 560);
v34 = *(_QWORD *)(v32 + 552);
if ( !(unsigned __int16)((v33 - v34) >> 3) )
goto LABEL_158;
v178 = 0;
do
{
v167 = *(std::string **)(v34 + 8 * v178);
v35 = *((_QWORD *)v167 + 3);
v36 = *((_QWORD *)v167 + 4);
if ( !(unsigned __int16)((v36 - v35) >> 3) )
goto LABEL_156;
v177 = 0;
while ( 1 )
{
v37 = *(_QWORD **)(v35 + 8 * v177);
v38 = v37[3];
v39 = (v37[4] - v38) >> 3;
if ( (_DWORD)v39 )
{
v40 = 0;
while ( 1 )
{
s1_4 = 0;
if ( (unsigned __int16)v40 < v39 )
s1_4 = *(const HDDMTilePort **)(v38 + 8LL * (unsigned __int16)v40);
v230[0] = 0;
p_s1[0] = 0;
if ( (unsigned __int8)HDDMTile::getMatchingPort((HDDMTile *)v31, s1_4, v230, p_s1) )
{
if ( !(unsigned int)std::string::compare((std::string *)((char *)v167 + 8), "Z") )
hut::detail::assertion_failed(
(hut::detail *)"edge1->getName() != \"Z\"",
"void {anonymous}::_checkTilePorts(const HDDMDevice*)",
"/proj/rdi-xco/wall/workspaces/wall287/sub/REL/2016.3/src/shared/device/devmodel/HDDMDevice.cxx",
(const char *)&elf_hash_bucket[82],
v56);
v57 = *(std::string **)p_s1[0];
v240[0] = 0;
s1 = 0;
v165 = v57;
HDDMTile::getMatchingPort(v230[0], p_s1[0], v240, (const HDDMTilePort **)&s1);
if ( s1 )
v58 = *(_QWORD **)s1;
else
v58 = 0;
if ( (const HDDMTile *)v31 != v240[0] )
{
HDDMTile::getName((HDDMTile *)&v236);
if ( v240[0] )
HDDMTile::getName((HDDMTile *)v235);
else
std::string::string(v235, "NULL", &v186);
std::__ostream_insert<char,std::char_traits<char>>(&std::cout, "Tile3 = ", 8);
v59 = std::__ostream_insert<char,std::char_traits<char>>(
&std::cout,
v235[0],
*(_QWORD *)(v235[0] - 24LL));
std::__ostream_insert<char,std::char_traits<char>>(v59, " should be ", 11);
v60 = std::__ostream_insert<char,std::char_traits<char>>(v59, v236, *(_QWORD *)(v236 - 24));
std::__ostream_insert<char,std::char_traits<char>>(v60, "\n", 1);
std::string::_Rep::_M_dispose(v235[0] - 24LL, v239);
std::string::_Rep::_M_dispose(v236 - 24, v239);
if ( (const HDDMTile *)v31 != v240[0] )
hut::detail::assertion_failed(
(hut::detail *)"tile3 == tile1",
"void {anonymous}::_checkTilePorts(const HDDMDevice*)",
"/proj/rdi-xco/wall/workspaces/wall287/sub/REL/2016.3/src/shared/device/devmodel/HDDMDevice.cxx",
(const char *)&elf_hash_bucket[85],
v61);
}
if ( v37 != v58 )
{
if ( v58 )
std::string::string((std::string *)v234, (const std::string *)(v58 + 2));
else
std::string::string(v234, "NULL", &v185);
std::__ostream_insert<char,std::char_traits<char>>(&std::cout, "Face3 = ", 8);
v62 = std::__ostream_insert<char,std::char_traits<char>>(
&std::cout,
v234[0],
*(_QWORD *)(v234[0] - 24LL));
std::__ostream_insert<char,std::char_traits<char>>(v62, " should be ", 11);
v63 = std::__ostream_insert<char,std::char_traits<char>>(v62, v37[2], *(_QWORD *)(v37[2] - 24LL));
std::__ostream_insert<char,std::char_traits<char>>(v63, "\n", 1);
std::string::_Rep::_M_dispose(v234[0] - 24LL, v239);
}
if ( s1_4 != s1 )
{
v64 = *((_DWORD *)s1_4 + 2);
v65 = -1;
if ( s1 )
v65 = *((_DWORD *)s1 + 2);
std::__ostream_insert<char,std::char_traits<char>>(&std::cout, "Port3 = ", 8);
v66 = std::ostream::_M_insert<unsigned long>(&std::cout, v65);
std::__ostream_insert<char,std::char_traits<char>>(v66, " should be ", 11);
v67 = std::ostream::_M_insert<unsigned long>(v66, v64);
std::__ostream_insert<char,std::char_traits<char>>(v67, "\n", 1);
if ( s1_4 != s1 )
hut::detail::assertion_failed(
(hut::detail *)"port3 == port1",
"void {anonymous}::_checkTilePorts(const HDDMDevice*)",
"/proj/rdi-xco/wall/workspaces/wall287/sub/REL/2016.3/src/shared/device/devmodel/HDDMDevice.cxx",
(const char *)&elf_hash_bucket[87] + 3,
v68);
}
if ( *((_DWORD *)s1_4 + 3) != *((_DWORD *)p_s1[0] + 3) )
{
insert_hint_unique_pos_3 = insert_hint_unique_pos_6;
insert_hint_unique_pos_2 = &v242;
if ( !insert_hint_unique_pos_6 )
goto LABEL_86;
do
{
while ( v31 <= *((_QWORD *)insert_hint_unique_pos_3 + 4) )
{
insert_hint_unique_pos_2 = insert_hint_unique_pos_3;
insert_hint_unique_pos_3 = (int *)*((_QWORD *)insert_hint_unique_pos_3 + 2);
if ( !insert_hint_unique_pos_3 )
goto LABEL_84;
}
insert_hint_unique_pos_3 = (int *)*((_QWORD *)insert_hint_unique_pos_3 + 3);
}
while ( insert_hint_unique_pos_3 );
LABEL_84:
if ( insert_hint_unique_pos_2 == &v242 || v31 < *((_QWORD *)insert_hint_unique_pos_2 + 4) )
{
LABEL_86:
insert_hint_unique_pos_4 = insert_hint_unique_pos_2;
insert_hint_unique_pos_5 = operator new(0x30u);
insert_hint_unique_pos_2 = (int *)insert_hint_unique_pos_5;
if ( insert_hint_unique_pos_5 )
{
*(_DWORD *)insert_hint_unique_pos_5 = 0;
*(_QWORD *)(insert_hint_unique_pos_5 + 8) = 0;
*(_QWORD *)(insert_hint_unique_pos_5 + 16) = 0;
*(_QWORD *)(insert_hint_unique_pos_5 + 24) = 0;
*(_QWORD *)(insert_hint_unique_pos_5 + 32) = v31;
*(_DWORD *)(insert_hint_unique_pos_5 + 40) = 0;
}
insert_hint_unique_pos = std::_Rb_tree<HDDMTile const*,std::pair<HDDMTile const* const,int>,std::_Select1st<std::pair<HDDMTile const* const,int>>,std::less<HDDMTile const*>,std::allocator<std::pair<HDDMTile const* const,int>>>::_M_get_insert_hint_unique_pos(
&v241,
insert_hint_unique_pos_4,
insert_hint_unique_pos_5 + 32);
if ( v74 )
{
v75 = 1;
if ( !insert_hint_unique_pos && (int *)v74 != &v242 )
v75 = *((_QWORD *)insert_hint_unique_pos_2 + 4) < *(_QWORD *)(v74 + 32);
std::_Rb_tree_insert_and_rebalance(v75, insert_hint_unique_pos_2, v74, &v242);
++v246;
}
else
{
insert_hint_unique_pos_1 = (int *)insert_hint_unique_pos;
operator delete(insert_hint_unique_pos_2);
insert_hint_unique_pos_2 = insert_hint_unique_pos_1;
}
}
++insert_hint_unique_pos_2[10];
v76 = *(_QWORD *)(*(_QWORD *)(HDDMDeviceCache::m_devcache[(*(_WORD *)v31 >> 6) & 0xF] + 168LL)
+ 8LL * (*(_WORD *)(v31 + 4) & 0x3FF));
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__12 = insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__23;
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__2 = &v248;
if ( !insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__23 )
goto LABEL_98;
do
{
while ( v76 <= *((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__12 + 4) )
{
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__2 = insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__12;
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__12 = (int *)*((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__12
+ 2);
if ( !insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__12 )
goto LABEL_96;
}
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__12 = (int *)*((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__12
+ 3);
}
while ( insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__12 );
LABEL_96:
if ( insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__2 == &v248
|| v76 < *((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__2 + 4) )
{
LABEL_98:
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4_ = insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__2;
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__14 = operator new(0x30u);
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__2 = (int *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__14;
if ( insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__14 )
{
*(_DWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__14 = 0;
*(_QWORD *)(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__14 + 8) = 0;
*(_QWORD *)(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__14 + 16) = 0;
*(_QWORD *)(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__14 + 24) = 0;
*(_QWORD *)(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__14 + 32) = v76;
*(_DWORD *)(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__14 + 40) = 0;
}
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4_ = std::_Rb_tree<HDDMTileType const*,std::pair<HDDMTileType const* const,int>,std::_Select1st<std::pair<HDDMTileType const* const,int>>,std::less<HDDMTileType const*>,std::allocator<std::pair<HDDMTileType const* const,int>>>::_M_get_insert_hint_unique_pos(
&s1_2,
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4_,
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__14
+ 32);
if ( v81 )
{
v82 = 1;
if ( !insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4_ && (int *)v81 != &v248 )
v82 = *((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__2 + 4) < *(_QWORD *)(v81 + 32);
std::_Rb_tree_insert_and_rebalance(
v82,
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__2,
v81,
&v248);
++v252;
}
else
{
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__1 = (int *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4_;
operator delete(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__2);
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__2 = insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__1;
}
}
++insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__2[10];
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__15 = insert_hint_unique_pos_6;
if ( insert_hint_unique_pos_6 )
{
v84 = v230[0];
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__5 = &v242;
do
{
while ( (HDDMTile *)*((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__15 + 4) >= v230[0] )
{
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__5 = insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__15;
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__15 = (int *)*((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__15
+ 2);
if ( !insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__15 )
goto LABEL_108;
}
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__15 = (int *)*((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__15
+ 3);
}
while ( insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__15 );
LABEL_108:
if ( insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__5 == &v242
|| (HDDMTile *)*((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__5 + 4) > v230[0] )
{
LABEL_110:
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__16 = insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__5;
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__17 = operator new(0x30u);
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__5 = (int *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__17;
if ( insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__17 )
{
*(_DWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__17 = 0;
*(_QWORD *)(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__17 + 8) = 0;
*(_QWORD *)(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__17 + 16) = 0;
*(_QWORD *)(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__17 + 24) = 0;
v88 = v230[0];
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__5[10] = 0;
*((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__5 + 4) = v88;
}
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__3 = std::_Rb_tree<HDDMTile const*,std::pair<HDDMTile const* const,int>,std::_Select1st<std::pair<HDDMTile const* const,int>>,std::less<HDDMTile const*>,std::allocator<std::pair<HDDMTile const* const,int>>>::_M_get_insert_hint_unique_pos(
&v241,
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__16,
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__5
+ 8);
if ( v90 )
{
v91 = 1;
if ( !insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__3 && (int *)v90 != &v242 )
v91 = *((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__5 + 4) < *(_QWORD *)(v90 + 32);
std::_Rb_tree_insert_and_rebalance(
v91,
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__5,
v90,
&v242);
++v246;
}
else
{
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__4 = (int *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__3;
operator delete(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__5);
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__5 = insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__4;
}
v84 = v230[0];
}
++insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__5[10];
v92 = *(_QWORD *)(*(_QWORD *)(HDDMDeviceCache::m_devcache[(*(_WORD *)v84 >> 6) & 0xF] + 168LL)
+ 8LL * (*((_WORD *)v84 + 2) & 0x3FF));
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__18 = insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__23;
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__8 = &v248;
if ( !insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__23 )
goto LABEL_123;
do
{
while ( v92 <= *((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__18 + 4) )
{
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__8 = insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__18;
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__18 = (int *)*((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__18
+ 2);
if ( !insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__18 )
goto LABEL_121;
}
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__18 = (int *)*((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__18
+ 3);
}
while ( insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__18 );
LABEL_121:
if ( insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__8 == &v248
|| v92 < *((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__8 + 4) )
{
LABEL_123:
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__19 = insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__8;
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__20 = operator new(0x30u);
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__8 = (int *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__20;
if ( insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__20 )
{
*(_DWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__20 = 0;
*(_QWORD *)(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__20 + 8) = 0;
*(_QWORD *)(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__20 + 16) = 0;
*(_QWORD *)(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__20 + 24) = 0;
*(_QWORD *)(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__20 + 32) = v92;
*(_DWORD *)(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__20 + 40) = 0;
}
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__6 = std::_Rb_tree<HDDMTileType const*,std::pair<HDDMTileType const* const,int>,std::_Select1st<std::pair<HDDMTileType const* const,int>>,std::less<HDDMTileType const*>,std::allocator<std::pair<HDDMTileType const* const,int>>>::_M_get_insert_hint_unique_pos(
&s1_2,
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__19,
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__20
+ 32);
if ( v97 )
{
v98 = 1;
if ( !insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__6 && (int *)v97 != &v248 )
v98 = *((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__8 + 4) < *(_QWORD *)(v97 + 32);
std::_Rb_tree_insert_and_rebalance(
v98,
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__8,
v97,
&v248);
++v252;
}
else
{
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__7 = (int *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__6;
operator delete(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__8);
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__8 = insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__7;
}
}
++insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__8[10];
v170 = *((_DWORD *)p_s1[0] + 3);
v175 = *((_DWORD *)p_s1[0] + 2);
HDDMTile::getName((HDDMTile *)&v233);
v99 = *((_DWORD *)s1_4 + 3);
v100 = *((_DWORD *)s1_4 + 2);
HDDMTile::getName((HDDMTile *)&v232);
std::__ostream_insert<char,std::char_traits<char>>(&std::cout, "Global mismatch: ", 17);
v101 = std::__ostream_insert<char,std::char_traits<char>>(&std::cout, v232, *(_QWORD *)(v232 - 24));
std::__ostream_insert<char,std::char_traits<char>>(v101, ".", 1);
v102 = std::__ostream_insert<char,std::char_traits<char>>(v101, v37[2], *(_QWORD *)(v37[2] - 24LL));
std::__ostream_insert<char,std::char_traits<char>>(v102, "[", 1);
v103 = std::ostream::_M_insert<unsigned long>(v102, v100);
std::__ostream_insert<char,std::char_traits<char>>(v103, "] = ", 4);
v104 = std::ostream::_M_insert<unsigned long>(v103, v99);
std::__ostream_insert<char,std::char_traits<char>>(v104, " ", 1);
v105 = std::__ostream_insert<char,std::char_traits<char>>(v104, v233, *(_QWORD *)(v233 - 24));
std::__ostream_insert<char,std::char_traits<char>>(v105, ".", 1);
v106 = std::__ostream_insert<char,std::char_traits<char>>(
v105,
*((_QWORD *)v165 + 2),
*(_QWORD *)(*((_QWORD *)v165 + 2) - 24LL));
std::__ostream_insert<char,std::char_traits<char>>(v106, "[", 1);
v107 = std::ostream::_M_insert<unsigned long>(v106, v175);
std::__ostream_insert<char,std::char_traits<char>>(v107, "] = ", 4);
v108 = std::ostream::_M_insert<unsigned long>(v107, v170);
std::__ostream_insert<char,std::char_traits<char>>(v108, "\n", 1);
std::string::_Rep::_M_dispose(v232 - 24, v239);
std::string::_Rep::_M_dispose(v233 - 24, v239);
goto LABEL_56;
}
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__5 = &v242;
goto LABEL_110;
}
}
else if ( v230[0] )
{
if ( (*(_BYTE *)v31 & 0x20) != 0 )
{
v147 = (HDDMInactiveExceptionAccess *)__cxa_allocate_exception(0x18u);
HDDMTile::getRawName((HDDMTile *)v238);
std::string::string(v239, "Tile", v240);
HDDMInactiveExceptionAccess::HDDMInactiveExceptionAccess(
v147,
(const std::string *)v239,
(const std::string *)v238);
std::string::_Rep::_M_dispose(v239[0] - 24LL, &s1);
std::string::_Rep::_M_dispose(v238[0] - 24LL, &s1);
__cxa_throw(v147, (struct type_info *)&`typeinfo for'HDDMInactiveExceptionAccess, sub_1ED58B0);
}
v41 = HDDMDeviceCache::m_devcache[(*(_WORD *)v31 >> 6) & 0xF];
v42 = *(unsigned __int16 *)(v41 + 6);
v43 = *(unsigned __int16 *)(v41 + 4);
v44 = *(_DWORD *)(v31 + 40) % v42;
v45 = v43 - 1 - *(_DWORD *)(v31 + 40) / v42;
v46 = *(_QWORD *)(*(_QWORD *)(v41 + 168) + 8LL * (*(_WORD *)(v31 + 4) & 0x3FF));
v47 = *(unsigned __int16 *)(v46 + 24);
v48 = *(unsigned __int16 *)(v46 + 26);
n3 = ***(_WORD ***)s1_4;
if ( n3 == 1 )
{
if ( v47 + v44 == v42 )
goto LABEL_56;
}
else if ( n3 )
{
if ( n3 == 2 )
{
if ( !(_WORD)v45 )
goto LABEL_56;
}
else if ( n3 != 3 || !(_WORD)v44 )
{
goto LABEL_56;
}
}
else if ( v48 + (unsigned __int16)v45 == v43 )
{
goto LABEL_56;
}
v50 = *((_DWORD *)s1_4 + 2);
HDDMTile::getName((HDDMTile *)v237);
std::__ostream_insert<char,std::char_traits<char>>(&std::cout, "Missing matching port for ", 26);
v51 = std::__ostream_insert<char,std::char_traits<char>>(&std::cout, v237[0], *(_QWORD *)(v237[0] - 24LL));
std::__ostream_insert<char,std::char_traits<char>>(v51, ".", 1);
v52 = std::__ostream_insert<char,std::char_traits<char>>(v51, v37[2], *(_QWORD *)(v37[2] - 24LL));
std::__ostream_insert<char,std::char_traits<char>>(v52, "[", 1);
v53 = std::ostream::_M_insert<unsigned long>(v52, v50);
std::__ostream_insert<char,std::char_traits<char>>(v53, "]", 1);
std::__ostream_insert<char,std::char_traits<char>>(v53, "\n", 1);
std::string::_Rep::_M_dispose(v237[0] - 24LL, &s1);
hut::detail::assertion_failed(
(hut::detail *)"false",
"void {anonymous}::_checkTilePorts(const HDDMDevice*)",
"/proj/rdi-xco/wall/workspaces/wall287/sub/REL/2016.3/src/shared/device/devmodel/HDDMDevice.cxx",
(const char *)&elf_hash_bucket[80] + 1,
v54);
}
LABEL_56:
v38 = v37[3];
++v40;
v39 = (v37[4] - v38) >> 3;
if ( v40 >= (unsigned int)v39 )
{
v109 = *((_QWORD *)v167 + 3);
v36 = *((_QWORD *)v167 + 4);
goto LABEL_139;
}
}
}
v109 = v35;
LABEL_139:
v110 = v177++;
if ( (unsigned __int16)((v36 - v109) >> 3) <= v110 + 1 )
break;
v35 = v109;
}
v111 = *(_QWORD *)(*(_QWORD *)(HDDMDeviceCache::m_devcache[(*(_WORD *)v31 >> 6) & 0xF] + 168LL)
+ 8LL * (*(_WORD *)(v31 + 4) & 0x3FF));
v33 = *(_QWORD *)(v111 + 560);
v34 = *(_QWORD *)(v111 + 552);
LABEL_156:
v112 = v178++;
}
while ( v112 + 1 < (unsigned __int16)((v33 - v34) >> 3) );
v28 = *((_WORD *)Device + 2);
v29 = *((_WORD *)Device + 3);
LABEL_158:
v30 = ++v180;
}
while ( v180 < v29 * (unsigned int)v28 );
LABEL_159:
if ( v246 )
{
std::ofstream::basic_ofstream(&s1, "badGlobals.txt", 48);
if ( *((unsigned __int16 *)Device + 3) * *((unsigned __int16 *)Device + 2) )
{
v113 = 0;
v114 = 0;
do
{
v240[0] = *(const HDDMTile **)(*((_QWORD *)Device + 31) + 8 * v114);
v115 = *(_DWORD *)std::map<HDDMTile const*,int>::operator[](&v241, v240);
if ( v115 > 0 )
{
HDDMTile::getName((HDDMTile *)p_s1);
v116 = std::__ostream_insert<char,std::char_traits<char>>(&s1, p_s1[0], *((_QWORD *)p_s1[0] - 3));
v117 = std::operator<<<std::char_traits<char>>(v116, " ");
v118 = std::ostream::operator<<(v117, (unsigned int)v115);
std::operator<<<std::char_traits<char>>(v118, "\n");
std::string::_Rep::_M_dispose((char *)p_s1[0] - 24, v239);
}
v114 = ++v113;
}
while ( v113 < *((unsigned __int16 *)Device + 3) * (unsigned int)*((unsigned __int16 *)Device + 2) );
}
v119 = *((_QWORD *)Device + 21);
if ( (unsigned __int16)((*((_QWORD *)Device + 22) - v119) >> 3) )
{
v120 = 0;
v121 = 0;
do
{
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__21 = insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__23;
v123 = *(_QWORD *)(v119 + v120);
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__10 = &v248;
if ( !insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__23 )
goto LABEL_174;
do
{
while ( v123 <= *((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__21 + 4) )
{
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__10 = insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__21;
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__21 = (int *)*((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__21
+ 2);
if ( !insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__21 )
goto LABEL_172;
}
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__21 = (int *)*((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__21
+ 3);
}
while ( insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__21 );
LABEL_172:
if ( insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__10 == &v248
|| v123 < *((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__10 + 4) )
{
LABEL_174:
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__22 = operator new(0x30u);
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__11 = (int *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__22;
if ( insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__22 )
{
*(_DWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__22 = 0;
*(_QWORD *)(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__22 + 8) = 0;
*(_QWORD *)(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__22 + 16) = 0;
*(_QWORD *)(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__22 + 24) = 0;
*(_QWORD *)(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__22 + 32) = v123;
*(_DWORD *)(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__22 + 40) = 0;
}
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__9 = std::_Rb_tree<HDDMTileType const*,std::pair<HDDMTileType const* const,int>,std::_Select1st<std::pair<HDDMTileType const* const,int>>,std::less<HDDMTileType const*>,std::allocator<std::pair<HDDMTileType const* const,int>>>::_M_get_insert_hint_unique_pos(
&s1_2,
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__10,
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__22
+ 32);
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__10 = (int *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__9;
if ( v128 )
{
v129 = 1;
if ( !insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__9 && (int *)v128 != &v248 )
v129 = *((_QWORD *)insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__11 + 4) < *(_QWORD *)(v128 + 32);
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__10 = insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__11;
std::_Rb_tree_insert_and_rebalance(
v129,
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__11,
v128,
&v248);
++v252;
}
else
{
operator delete(insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__11);
}
}
v130 = insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__10[10];
if ( v130 > 0 )
{
HDDMTileType::getName((HDDMTileType *)v230);
v131 = std::__ostream_insert<char,std::char_traits<char>>(&s1, v230[0], *((_QWORD *)v230[0] - 3));
v132 = std::operator<<<std::char_traits<char>>(v131, " ");
v133 = std::ostream::operator<<(v132, (unsigned int)v130);
std::operator<<<std::char_traits<char>>(v133, "\n");
std::string::_Rep::_M_dispose((char *)v230[0] - 24, v240);
}
++v121;
v120 += 8;
v119 = *((_QWORD *)Device + 21);
}
while ( v121 < (unsigned __int16)((*((_QWORD *)Device + 22) - v119) >> 3) );
}
std::__ostream_insert<char,std::char_traits<char>>(&std::cout, "}\n", 2);
std::ofstream::~ofstream(&s1);
}
std::_Rb_tree<HDDMTileType const*,std::pair<HDDMTileType const* const,int>,std::_Select1st<std::pair<HDDMTileType const* const,int>>,std::less<HDDMTileType const*>,std::allocator<std::pair<HDDMTileType const* const,int>>>::_M_erase(
&s1_2,
insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4__23);
std::_Rb_tree<HDDMTile const*,std::pair<HDDMTile const* const,int>,std::_Select1st<std::pair<HDDMTile const* const,int>>,std::less<HDDMTile const*>,std::allocator<std::pair<HDDMTile const* const,int>>>::_M_erase(
&v241,
insert_hint_unique_pos_6);
LABEL_184:
if ( !*((_QWORD *)Device + 102) )
{
v154 = (HDDMOracle *)operator new(0x138u);
HDDMOracle::HDDMOracle(v154, Device);
*((_QWORD *)Device + 102) = v154;
}
std::string::string(v221, "RCLK_INT_L", &s1_2);
TileType = HDDMDevice::getTileType(Device, (const std::string *)v221);
std::string::_Rep::_M_dispose(v221[0] - 24LL, &s1);
if ( TileType )
{
v135 = *(unsigned __int16 *)(TileType + 2);
if ( (_WORD)v135 )
{
v136 = 0;
v137 = 8 * (3LL * (unsigned int)(v135 - 1) + 3);
do
{
v138 = *(_QWORD *)(TileType + 216) + v136;
if ( (*(_BYTE *)(v138 + 1) & 8) != 0 )
*(_BYTE *)(v138 + 2) |= 0x10u;
v136 += 24;
}
while ( v136 != v137 );
}
}
std::string::string(v222, "RCLK_INT_R", &s1_2);
TileTypeERKSs = HDDMDevice::getTileType(Device, (const std::string *)v222);
std::string::_Rep::_M_dispose(v222[0] - 24LL, &s1);
if ( TileTypeERKSs )
{
v140 = *(unsigned __int16 *)(TileTypeERKSs + 2);
if ( (_WORD)v140 )
{
v141 = 0;
v142 = 8 * (3LL * (unsigned int)(v140 - 1) + 3);
do
{
v143 = *(_QWORD *)(TileTypeERKSs + 216) + v141;
if ( (*(_BYTE *)(v143 + 1) & 8) != 0 )
*(_BYTE *)(v143 + 2) |= 0x10u;
v141 += 24;
}
while ( v141 != v142 );
}
}
HDDMResourceLimits::HDDMResourceLimits((HDDMResourceLimits *)&s1, Device, 0);
*((_BYTE *)Device + 802) = HDDMResourceLimits::isDeviceLimited((HDDMResourceLimits *)&s1);
HDDMResourceLimits::~HDDMResourceLimits((HDDMResourceLimits *)&s1);
if ( ValueAsBool )
{
HUTMemory::getUsedMemory((HUTMemory *)&s1);
HUTRuntime::getWallSecs((HUTRuntime *)v253);
HUTRuntime::getUserSecs((HUTRuntime *)v253);
std::string::string(&s1, "trackDeviceDataLoading", &v187);
std::string::string(v240, "device", &s1_2);
ComMsgMgr::sendScopedMsg::eval(
4,
"/proj/rdi-xco/wall/workspaces/wall287/sub/REL/2016.3/src/shared/device/devmodel/HDDMDevice.cxx",
1045,
v240,
&s1,
16777218);
std::string::_Rep::_M_dispose((char *)v240[0] - 24, &v241);
std::string::_Rep::_M_dispose((char *)s1 - 24, &s1_2);
}
HDDMProto::freeMemory((HDDMProto *)&qword_992E0F0);
ParamMgrEv = (HPAParamMgr *)HPAParamMgr::getParamMgr((HPAParamMgr *)&qword_992E0F0);
std::string::string(v223, "arch.regenRpmGrid", &s1_2);
ValueAsBoolERKSs_2 = HPAParamMgr::getValueAsBool(ParamMgrEv, (const std::string *)v223);
std::string::_Rep::_M_dispose(v223[0] - 24LL, &s1);
if ( ValueAsBoolERKSs_2 )
{
HDDMSiteRPMHack::HDDMSiteRPMHack((HDDMSiteRPMHack *)&s1, Device);
HDDMSiteRPMHack::regenRPMGrid((HDDMSiteRPMHack *)&s1);
HDDMDevice::createRPMGrid(Device);
HDDMSiteRPMHack::~HDDMSiteRPMHack((HDDMSiteRPMHack *)&s1);
}
if ( !*((_QWORD *)Device + 103) )
{
v151 = (HDDMDevice **)operator new(0x20u);
v151[1] = 0;
v151[2] = 0;
v151[3] = 0;
*v151 = Device;
v152 = *((_QWORD *)Device + 19) - *((_QWORD *)Device + 18);
s1 = 0;
v153 = v152 >> 3;
if ( (_WORD)v153 )
std::vector<HDDMConnectionDB *>::_M_fill_insert(v151 + 1, 0, (unsigned __int16)v153, &s1);
*((_QWORD *)Device + 103) = v151;
}
HDDMDerived::~HDDMDerived((HDDMDerived *)s2);
std::string::_Rep::_M_dispose(v203[0] - 24LL, &s1);
std::string::_Rep::_M_dispose(*(_QWORD *)v199 - 24LL, &s1);
std::string::_Rep::_M_dispose(*(_QWORD *)v198 - 24LL, &s1);
Device_2 = Device;
LABEL_13:
HUTRuntime::~HUTRuntime((HUTRuntime *)v253);
if ( &_pthread_key_create )
pthread_mutex_unlock(&mutex_);
HUTMemWatcher::~HUTMemWatcher((HUTMemWatcher *)v255);
return Device_2;
}