Skip to content

Instantly share code, notes, and snippets.

@peterix
Created December 24, 2011 16:48
Show Gist options
  • Save peterix/1517773 to your computer and use it in GitHub Desktop.
Save peterix/1517773 to your computer and use it in GitHub Desktop.
void __cdecl sub_89289C0(int unit_)
{
int unit__; // esi@1
int v2; // eax@3
int v3; // edx@3
int v4; // edx@4
int v5; // ecx@4
int v6; // edi@5
signed int v7; // edx@7
signed int v8; // eax@8
int v9; // ebx@8
int v10; // esi@8
int v11; // ecx@10
char v12; // sf@16
void *v13; // edx@18
int v14; // eax@22
int v15; // ecx@22
void *v16; // ebp@22
signed int v17; // edx@24
signed int v18; // eax@25
int v19; // ebx@25
int v20; // edi@25
void *v21; // eax@34
__int16 v22; // bx@34
__int16 v23; // ax@34
__int16 v24; // bx@34
__int16 v25; // ax@34
__int16 v26; // bx@34
__int16 v27; // ax@34
int v28; // eax@34
int v29; // ebx@34
__int16 v30; // ax@34
int v31; // ebp@36
char *v32; // edx@37
int v33; // ecx@37
char *v34; // ecx@38
unsigned int v35; // edx@43
int v36; // eax@52
int v37; // ebx@52
void *v38; // edi@52
int v39; // ecx@52
int v40; // eax@52
int v41; // eax@54
int v42; // ebp@54
void *v43; // edx@57
unsigned int v44; // ecx@57
unsigned int v45; // ebp@60
unsigned int v46; // ebp@60
unsigned int v47; // eax@61
int _EDI; // edi@61
unsigned int _ECX; // ecx@62
int v50; // eax@65
int v51; // ebp@65
int v52; // edi@66
int v53; // eax@67
int v54; // ebx@67
int v55; // eax@76
int v56; // edx@76
int v57; // ebx@76
int v58; // eax@76
int v59; // ebx@83
int v60; // eax@86
int v61; // eax@93
char v62; // sf@95
int v63; // edx@97
unsigned __int8 v64; // cl@97
int v65; // eax@99
int v66; // eax@100
int v67; // edi@101
signed int v68; // edx@103
signed int v69; // eax@104
int v70; // ebx@104
int v71; // esi@104
int v72; // ecx@106
char v73; // sf@112
int v74; // edx@114
int v75; // eax@115
int v76; // ecx@115
int v77; // ebp@115
int v78; // ecx@116
int v79; // eax@117
unsigned int v80; // eax@121
int v81; // edx@122
char v82; // sf@129
int v83; // eax@132
int v84; // edx@132
int v85; // edx@133
int v86; // edi@133
char v87; // sf@134
int v88; // ebx@136
__int16 v89; // si@136
__int16 v90; // bp@136
__int16 v91; // ST30_2@136
__int16 v92; // ax@136
int v93; // eax@136
char v94; // al@137
int v95; // ecx@139
signed int v96; // eax@140
signed int v97; // eax@141
int v98; // esi@141
int v99; // esi@143
int v100; // esi@145
int v101; // eax@151
int v102; // edx@153
int v103; // ecx@153
int v104; // ecx@154
int v105; // eax@155
signed int v106; // edx@155
int v107; // ebp@155
int v108; // edi@155
signed int v109; // edx@155
int v110; // ebx@157
int v111; // edx@159
int v112; // ecx@159
int v113; // esi@159
int v114; // edx@162
int v115; // ecx@162
int v116; // ecx@163
int v117; // ebp@165
int v118; // edi@165
int v119; // ebx@167
int v120; // edx@169
unsigned int v121; // eax@173
int v122; // edx@174
int v123; // eax@181
int v124; // edx@181
int v125; // edi@182
int v126; // ebx@183
__int16 v127; // ST2C_2@183
__int16 v128; // bp@183
__int16 v129; // ST30_2@183
__int16 v130; // ax@183
int v131; // edx@188
int v132; // eax@191
int v133; // ebp@191
signed int v134; // eax@196
signed int v135; // edx@196
signed int v136; // ecx@196
int v137; // eax@196
int v138; // eax@196
int v139; // ebx@196
char v140; // sf@202
int v141; // eax@204
unsigned int v142; // eax@208
int v143; // edx@209
int v144; // eax@216
int v145; // eax@221
int v146; // edx@221
char v147; // sf@223
int v148; // eax@226
int v149; // ebp@226
int v150; // edi@226
int v151; // ebx@227
int v152; // eax@231
int v153; // esi@231
int v154; // edx@233
int v155; // eax@233
int v156; // eax@234
char v157; // sf@237
void *v158; // eax@239
int j; // ecx@240
int v160; // eax@241
int v161; // eax@241
int v162; // edx@241
int v163; // edx@241
int v164; // esi@242
int v165; // ebx@243
unsigned int v166; // eax@244
int v167; // eax@245
signed int v168; // edx@250
signed int v169; // eax@251
int v170; // edi@251
int v171; // esi@251
int v172; // ecx@253
char v173; // sf@259
int v174; // edx@263
int v175; // ecx@263
int v176; // ecx@264
signed int v177; // edx@266
int v178; // ebp@266
int v179; // edi@266
signed int v180; // edx@266
int v181; // ebx@268
int v182; // edx@270
unsigned int v183; // eax@279
int v184; // edx@280
int v185; // eax@285
int v186; // edx@285
int v187; // ecx@286
char v188; // sf@287
int v189; // eax@290
int v190; // edx@292
int v191; // eax@292
char v192; // sf@297
char v193; // sf@298
int v194; // eax@302
int v195; // edx@302
int v196; // eax@304
int v197; // eax@322
signed int v198; // esi@327
signed int v199; // eax@328
int v200; // ebx@328
int v201; // edi@329
int v202; // eax@335
int v203; // eax@339
char v204; // al@346
signed int v205; // eax@347
signed int v206; // ecx@347
signed int v207; // ebx@347
int v208; // eax@347
int v209; // eax@347
int v210; // esi@347
int v211; // eax@360
int v212; // ebx@360
int v213; // eax@374
int v214; // esi@374
int v215; // ecx@382
int v216; // eax@384
int v217; // eax@388
void *v218; // edx@390
int v219; // edx@390
void *v220; // ebp@390
signed int v221; // eax@390
signed int v222; // eax@390
int v223; // ebx@391
void *v224; // eax@394
unsigned int v225; // ecx@394
unsigned int v226; // ecx@398
int _EBP; // ebp@398
unsigned int _EBX; // ebx@399
int v229; // ebp@402
int v230; // ebx@403
int v231; // eax@406
unsigned int v232; // ecx@406
unsigned int v233; // edx@410
int _EAX; // eax@411
unsigned int _EBX; // ebx@411
unsigned int v236; // edx@415
signed int v237; // edx@418
signed int v238; // eax@419
int v239; // ebx@419
int v240; // ebp@419
int v241; // ecx@421
int v242; // ebp@431
signed int v243; // edx@433
signed int v244; // eax@434
int v245; // ebx@434
int v246; // ecx@436
void *v247; // eax@445
int v248; // edx@445
__int16 v249; // ST34_2@445
__int16 v250; // ax@445
__int16 v251; // ST34_2@445
__int16 v252; // ax@445
__int16 v253; // ST34_2@445
__int16 v254; // ax@445
int v255; // eax@445
int v256; // ebp@445
__int16 v257; // ax@445
int v258; // edx@447
char *v259; // ecx@448
int v260; // ebx@448
char *v261; // ebx@449
char *v262; // ebp@450
char v263; // sf@455
int v264; // ebp@457
char *v265; // edx@458
signed int v266; // ecx@458
char v267; // sf@460
char v268; // sf@467
int v269; // ecx@469
char *v270; // edx@470
signed int v271; // ebp@470
char v272; // sf@472
int v273; // eax@476
int v274; // edx@476
int v275; // edx@477
int v276; // ecx@477
char v277; // sf@478
int v278; // eax@481
int v279; // edx@481
int v280; // eax@481
int v281; // edx@481
int v282; // ebx@482
char v283; // sf@483
int v284; // eax@486
int v285; // ebp@488
int v286; // eax@488
int v287; // eax@489
int v288; // ebx@491
int v289; // edx@492
int v290; // esi@492
signed int v291; // esi@494
signed int v292; // ebx@495
int v293; // edi@495
int v294; // eax@503
int v295; // ecx@503
int v296; // edx@504
int v297; // eax@509
int v298; // eax@511
int v299; // eax@512
int v300; // edx@512
int v301; // ecx@512
int v302; // ebp@513
unsigned int v303; // edx@514
unsigned int v304; // ecx@514
int v305; // ebx@514
unsigned int v306; // eax@515
int v307; // eax@516
signed int v308; // edx@521
signed int v309; // eax@522
int v310; // ebp@522
int v311; // ecx@524
char v312; // sf@530
char v313; // sf@534
char v314; // sf@536
int v315; // eax@541
int v316; // edx@541
int v317; // ebx@541
int v318; // eax@543
int v319; // eax@555
int v320; // edx@555
int v321; // ecx@556
char v322; // sf@557
int v323; // eax@560
int v324; // edx@560
int v325; // eax@560
int v326; // edx@560
int v327; // ebx@561
char v328; // sf@562
int v329; // eax@565
int v330; // ebp@567
int v331; // eax@567
int v332; // eax@568
int v333; // edx@570
int v334; // ebx@571
int v335; // edi@571
signed int v336; // edi@573
signed int v337; // edx@574
int v338; // esi@574
int v339; // eax@583
int v340; // ecx@584
int v341; // eax@585
int v342; // eax@586
int v343; // edx@586
int v344; // ebx@586
int v345; // ebp@587
unsigned int v346; // edx@588
unsigned int v347; // ecx@588
int v348; // ebx@588
unsigned int v349; // eax@589
int v350; // eax@590
signed int v351; // edx@595
signed int v352; // eax@596
int v353; // ebp@596
int v354; // ecx@598
char v355; // sf@604
char v356; // sf@608
char v357; // sf@610
int v358; // eax@615
int v359; // edx@615
int v360; // ebx@615
int v361; // eax@617
int v362; // eax@629
int v363; // edx@629
unsigned int v364; // edx@631
int v365; // eax@633
int v366; // edx@636
int v367; // ecx@636
int v368; // eax@637
int v369; // ecx@637
signed int v370; // edx@639
signed int v371; // eax@640
int v372; // ebx@640
int v373; // ebp@640
int v374; // ecx@642
int v375; // edx@649
unsigned int v376; // eax@651
unsigned __int16 v377; // ax@656
unsigned int v378; // eax@658
int v379; // eax@661
int v380; // edx@663
int v381; // edx@664
int v383; // ebx@668
int v384; // ebp@668
signed int v385; // edx@670
signed int v386; // eax@671
int v387; // ebx@671
int v388; // ecx@673
int v389; // eax@683
int v390; // edx@685
int v391; // ebp@685
int v392; // eax@687
int v393; // ecx@687
char *v394; // eax@697
int v395; // eax@699
signed int v396; // edx@703
signed int v397; // eax@704
int v398; // ebx@704
int v399; // ebp@704
int v400; // ecx@706
int v402; // edx@714
int v403; // ecx@714
int v404; // ecx@715
int v405; // eax@720
int v406; // edx@720
int v407; // ecx@720
int v408; // ebx@720
int v409; // eax@720
int v410; // ecx@721
int v411; // edx@728
int v412; // ebp@728
int v413; // eax@731
int v414; // eax@739
int v415; // ecx@739
int v416; // eax@740
int v417; // edx@745
int v418; // ebp@745
int v419; // eax@747
int v420; // ebx@765
int v421; // eax@767
int v422; // ecx@767
int v423; // ecx@771
int v424; // ebp@771
int v425; // eax@773
int v426; // edx@773
int v427; // esi@783
int v428; // eax@785
int v429; // ecx@791
int v430; // eax@793
int v431; // ecx@797
int v432; // eax@800
int v433; // [sp+2Ch] [bp-E0h]@136
int v434; // [sp+34h] [bp-D8h]@2
int v435; // [sp+34h] [bp-D8h]@3
int v436; // [sp+34h] [bp-D8h]@34
int v437; // [sp+34h] [bp-D8h]@42
int v438; // [sp+34h] [bp-D8h]@44
int v439; // [sp+34h] [bp-D8h]@52
int v440; // [sp+34h] [bp-D8h]@100
int v441; // [sp+34h] [bp-D8h]@132
int v442; // [sp+34h] [bp-D8h]@181
int v443; // [sp+34h] [bp-D8h]@221
int v444; // [sp+34h] [bp-D8h]@241
unsigned int v445; // [sp+34h] [bp-D8h]@393
unsigned int v446; // [sp+34h] [bp-D8h]@397
int v447; // [sp+34h] [bp-D8h]@403
unsigned int v448; // [sp+34h] [bp-D8h]@409
int v449; // [sp+34h] [bp-D8h]@414
int v450; // [sp+34h] [bp-D8h]@445
int v451; // [sp+34h] [bp-D8h]@481
int v452; // [sp+34h] [bp-D8h]@512
int v453; // [sp+34h] [bp-D8h]@560
int v454; // [sp+34h] [bp-D8h]@586
int v455; // [sp+34h] [bp-D8h]@630
int v456; // [sp+34h] [bp-D8h]@668
int v457; // [sp+34h] [bp-D8h]@683
int v458; // [sp+34h] [bp-D8h]@699
int v459; // [sp+38h] [bp-D4h]@3
int v460; // [sp+38h] [bp-D4h]@27
int v461; // [sp+38h] [bp-D4h]@60
int v462; // [sp+38h] [bp-D4h]@99
signed int v463; // [sp+38h] [bp-D4h]@133
signed int v464; // [sp+38h] [bp-D4h]@182
int v465; // [sp+38h] [bp-D4h]@222
int v466; // [sp+38h] [bp-D4h]@242
int v467; // [sp+38h] [bp-D4h]@286
int v468; // [sp+38h] [bp-D4h]@410
unsigned int v469; // [sp+38h] [bp-D4h]@415
int v470; // [sp+38h] [bp-D4h]@434
int v471; // [sp+38h] [bp-D4h]@481
int v472; // [sp+38h] [bp-D4h]@513
int v473; // [sp+38h] [bp-D4h]@560
int v474; // [sp+38h] [bp-D4h]@587
int v475; // [sp+38h] [bp-D4h]@629
int v476; // [sp+38h] [bp-D4h]@661
int v477; // [sp+38h] [bp-D4h]@791
int i; // [sp+3Ch] [bp-D0h]@4
unsigned int v479; // [sp+3Ch] [bp-D0h]@60
int unit___; // [sp+3Ch] [bp-D0h]@100
int v481; // [sp+3Ch] [bp-D0h]@140
int v482; // [sp+3Ch] [bp-D0h]@189
int v483; // [sp+3Ch] [bp-D0h]@227
int v484; // [sp+3Ch] [bp-D0h]@240
int v485; // [sp+3Ch] [bp-D0h]@285
int v486; // [sp+3Ch] [bp-D0h]@390
int v487; // [sp+3Ch] [bp-D0h]@409
int v488; // [sp+3Ch] [bp-D0h]@486
int v489; // [sp+3Ch] [bp-D0h]@511
int v490; // [sp+3Ch] [bp-D0h]@565
int v491; // [sp+3Ch] [bp-D0h]@585
int v492; // [sp+3Ch] [bp-D0h]@765
int v493; // [sp+3Ch] [bp-D0h]@783
int v494; // [sp+3Ch] [bp-D0h]@797
int v495; // [sp+40h] [bp-CCh]@3
unsigned int v496; // [sp+40h] [bp-CCh]@43
int v497; // [sp+40h] [bp-CCh]@75
int v498; // [sp+40h] [bp-CCh]@142
int v499; // [sp+40h] [bp-CCh]@157
int v500; // [sp+40h] [bp-CCh]@167
int v501; // [sp+40h] [bp-CCh]@189
int v502; // [sp+40h] [bp-CCh]@241
int v503; // [sp+40h] [bp-CCh]@268
int v504; // [sp+40h] [bp-CCh]@382
int v505; // [sp+40h] [bp-CCh]@397
int v506; // [sp+40h] [bp-CCh]@416
signed int v507; // [sp+40h] [bp-CCh]@445
int v508; // [sp+40h] [bp-CCh]@476
int v509; // [sp+40h] [bp-CCh]@541
int v510; // [sp+40h] [bp-CCh]@555
int v511; // [sp+40h] [bp-CCh]@615
int v512; // [sp+40h] [bp-CCh]@637
int v513; // [sp+40h] [bp-CCh]@656
int v514; // [sp+40h] [bp-CCh]@662
int *v515; // [sp+44h] [bp-C8h]@22
signed int v516; // [sp+44h] [bp-C8h]@34
int v517; // [sp+44h] [bp-C8h]@42
int v518; // [sp+44h] [bp-C8h]@100
int v519; // [sp+44h] [bp-C8h]@410
int v520; // [sp+44h] [bp-C8h]@414
int v521; // [sp+44h] [bp-C8h]@477
int v522; // [sp+44h] [bp-C8h]@556
int v523; // [sp+44h] [bp-C8h]@596
char v524; // [sp+44h] [bp-C8h]@662
int v525; // [sp+44h] [bp-C8h]@699
__int16 v526; // [sp+48h] [bp-C4h]@34
char v527; // [sp+48h] [bp-C4h]@100
signed int v528; // [sp+48h] [bp-C4h]@133
signed int v529; // [sp+48h] [bp-C4h]@182
int v530; // [sp+48h] [bp-C4h]@239
__int16 v531; // [sp+48h] [bp-C4h]@445
signed int v532; // [sp+48h] [bp-C4h]@477
signed int v533; // [sp+48h] [bp-C4h]@556
int v534; // [sp+48h] [bp-C4h]@700
int v535; // [sp+4Ch] [bp-C0h]@97
int v536; // [sp+4Ch] [bp-C0h]@389
int v537; // [sp+4Ch] [bp-C0h]@492
int v538; // [sp+4Ch] [bp-C0h]@522
char v539; // [sp+50h] [bp-BCh]@34
int v540; // [sp+50h] [bp-BCh]@99
int v541; // [sp+50h] [bp-BCh]@222
int v542; // [sp+50h] [bp-BCh]@240
int v543; // [sp+50h] [bp-BCh]@496
int v544; // [sp+50h] [bp-BCh]@509
int v545; // [sp+50h] [bp-BCh]@571
int v546; // [sp+50h] [bp-BCh]@583
int v547; // [sp+50h] [bp-BCh]@671
char v548; // [sp+54h] [bp-B8h]@99
int v549; // [sp+54h] [bp-B8h]@240
char v550; // [sp+54h] [bp-B8h]@445
int v551; // [sp+54h] [bp-B8h]@489
int v552; // [sp+54h] [bp-B8h]@510
int v553; // [sp+54h] [bp-B8h]@575
int v554; // [sp+54h] [bp-B8h]@584
int v555; // [sp+54h] [bp-B8h]@701
int v556; // [sp+54h] [bp-B8h]@728
char v557; // [sp+58h] [bp-B4h]@100
int v558; // [sp+58h] [bp-B4h]@447
int v559; // [sp+58h] [bp-B4h]@489
int v560; // [sp+58h] [bp-B4h]@568
int v561; // [sp+58h] [bp-B4h]@584
int v562; // [sp+58h] [bp-B4h]@728
int v563; // [sp+58h] [bp-B4h]@745
int v564; // [sp+5Ch] [bp-B0h]@3
int v565; // [sp+5Ch] [bp-B0h]@489
int v566; // [sp+5Ch] [bp-B0h]@510
int v567; // [sp+5Ch] [bp-B0h]@568
int v568; // [sp+5Ch] [bp-B0h]@745
int v569; // [sp+60h] [bp-ACh]@100
int v570; // [sp+60h] [bp-ACh]@477
int v571; // [sp+60h] [bp-ACh]@510
int unit____; // [sp+60h] [bp-ACh]@568
int v573; // [sp+60h] [bp-ACh]@584
int v574; // [sp+64h] [bp-A8h]@477
int v575; // [sp+64h] [bp-A8h]@556
int v576; // [sp+68h] [bp-A4h]@477
int v577; // [sp+68h] [bp-A4h]@556
int v578; // [sp+6Ch] [bp-A0h]@556
void *v579; // [sp+70h] [bp-9Ch]@18
unsigned int v580; // [sp+74h] [bp-98h]@52
int v581; // [sp+78h] [bp-94h]@52
void *v582; // [sp+80h] [bp-8Ch]@629
int v583; // [sp+84h] [bp-88h]@629
int v584; // [sp+88h] [bp-84h]@629
void *v585; // [sp+90h] [bp-7Ch]@34
int v586; // [sp+94h] [bp-78h]@34
int v587; // [sp+98h] [bp-74h]@34
void *v588; // [sp+A0h] [bp-6Ch]@38
unsigned int v589; // [sp+A4h] [bp-68h]@390
int v590; // [sp+A8h] [bp-64h]@390
void *v591; // [sp+B0h] [bp-5Ch]@37
unsigned int v592; // [sp+B4h] [bp-58h]@390
int v593; // [sp+B8h] [bp-54h]@390
int v594; // [sp+BCh] [bp-50h]@218
int v595; // [sp+C0h] [bp-4Ch]@194
int v596; // [sp+D0h] [bp-3Ch]@194
int v597; // [sp+E0h] [bp-2Ch]@22
unit__ = unit_;
if ( !(*(_BYTE *)(unit_ + 0x144) & 1) )
return;
v434 = *(_WORD *)(unit_ + 0x110);
if ( !*(_WORD *)(unit_ + 0x110) )
{
v564 = unit_ + 0x114;
v435 = *(_DWORD *)(unit_ + 0x114);
v495 = *(_DWORD *)(unit_ + 0x114);
v2 = *(_DWORD *)(unit_ + 280);
v3 = ((*(_DWORD *)(unit_ + 280) - v435) >> 2) - 1;
v459 = v3;
if ( v3 < 0 )
goto LABEL_97;
v5 = *(_DWORD *)(unit_ + 0x114);
v4 = 4 * v3;
for ( i = v4; ; v4 = i )
{
v6 = *(_DWORD *)(v5 + v4);
if ( !((dword_940B1F4 - dword_940B1F0) >> 2)
|| v6 == -1
|| (v7 = ((dword_940B1F4 - dword_940B1F0) >> 2) - 1, v7 < 0) )
goto LABEL_16;
v8 = v7 >> 1;
v9 = *(_DWORD *)(dword_940B1F0 + 4 * (v7 >> 1));
v10 = *(_DWORD *)(v9 + 20);
if ( v6 != v10 )
break;
LABEL_92:
if ( !v9 )
goto LABEL_16;
v61 = (signed __int16)(**(int (__cdecl ***)(_DWORD))v9)(v9);
if ( (signed __int16)v61 == 24 || v61 == 61 )
{
v74 = *(_DWORD *)(v9 + 20);
if ( !((dword_93F73D4 - dword_93F73D0) >> 2)
|| v74 == -1
|| (v198 = ((dword_93F73D4 - dword_93F73D0) >> 2) - 1, v198 < 0) )
goto LABEL_115;
v199 = v198 >> 1;
v200 = *(_DWORD *)(dword_93F73D0 + 4 * (v198 >> 1));
if ( v74 == v200 )
{
LABEL_364:
if ( *(_DWORD *)(dword_93F73DC + 4 * v199) != *(_DWORD *)(unit_ + 0xA8) )
goto LABEL_115;
v435 = *(_DWORD *)(unit_ + 0x114);
v495 = *(_DWORD *)(unit_ + 0x114);
}
else
{
v201 = 0;
while ( 1 )
{
if ( v74 < v200 )
v198 = v199 - 1;
else
v201 = v199 + 1;
if ( v201 > v198 )
break;
v199 = (v198 + v201) >> 1;
v200 = *(_DWORD *)(dword_93F73D0 + 4 * v199);
if ( v74 == v200 )
goto LABEL_364;
}
LABEL_115:
v77 = *(_DWORD *)(unit_ + 0x114);
v76 = *(_DWORD *)(unit_ + 0x118);
v75 = v77 + 4 + i;
if ( v76 != v75 )
{
v78 = (v76 - v75) >> 2;
if ( v78 )
memmove((void *)(v77 + i), (const void *)(v77 + 4 + i), 4 * v78);
}
v79 = *(_DWORD *)(unit_ + 0x114);
*(_DWORD *)(unit_ + 0x118) -= 4;
v435 = v79;
v495 = v79;
}
LABEL_16:
i -= 4;
v12 = v459-- - 1 < 0;
if ( v12 )
goto LABEL_96;
goto LABEL_17;
}
i -= 4;
v62 = v459-- - 1 < 0;
v435 = *(_DWORD *)(unit_ + 0x114);
v495 = *(_DWORD *)(unit_ + 0x114);
if ( v62 )
{
LABEL_96:
unit__ = unit_;
v2 = *(_DWORD *)(unit_ + 0x118);
LABEL_97:
v64 = *(_BYTE *)(unit__ + 0x578);
v63 = 38;
v535 = v64 >= 1u ? 0x19 : 0;
if ( !*(_BYTE *)(unit__ + 0x556) )
v63 = -(*(_BYTE *)(unit__ + 0x54C) < 1u);
v548 = v64 != 0;
v65 = ((v2 - v435) >> 2) - 1;
v540 = v63;
v462 = v65;
if ( v65 >= 0 )
{
v440 = 4 * v65;
v557 = 0;
v518 = unit__ + 0xA8;
v527 = v64 != 0;
v66 = v495;
v569 = unit__ + 0x118;
unit___ = unit__;
while ( 2 )
{
v67 = *(_DWORD *)(v66 + v440);
if ( (dword_940B1F4 - dword_940B1F0) >> 2 )
{
if ( v67 != -1 )
{
v68 = ((dword_940B1F4 - dword_940B1F0) >> 2) - 1;
if ( v68 >= 0 )
{
v69 = v68 >> 1;
v70 = *(_DWORD *)(dword_940B1F0 + 4 * (v68 >> 1));
v71 = *(_DWORD *)(v70 + 20);
if ( v67 != v71 )
{
if ( (dword_940B1F4 - dword_940B1F0) >> 2 != 1 )
{
v72 = 0;
do
{
if ( v67 < v71 )
{
v68 = v69 - 1;
if ( v69 - 1 < v72 )
goto LABEL_112;
}
else
{
v72 = v69 + 1;
if ( v68 < v69 + 1 )
goto LABEL_112;
}
v69 = (v72 + v68) >> 1;
v70 = *(_DWORD *)(dword_940B1F0 + 4 * v69);
v71 = *(_DWORD *)(v70 + 20);
if ( v67 == v71 )
goto LABEL_118;
}
while ( v68 != v72 );
}
break;
}
LABEL_118:
if ( v70 )
{
if ( (unsigned __int16)(**(int (__cdecl ***)(_DWORD))v70)(v70) == 61 )
{
if ( v527 )
{
v80 = sub_8062200(*(_DWORD *)(v70 + 20), &dword_93F73D0);
v527 = 0;
if ( v80 != -1 )
{
v81 = dword_93F73E0;
if ( v80 < (dword_93F73E0 - dword_93F73DC) >> 2 )
{
v144 = dword_93F73DC + 4 * v80;
if ( dword_93F73E0 == dword_93F73E4 )
{
sub_8052120(&dword_93F73DC, v144, v518);
}
else
{
if ( dword_93F73E0 == v144 )
{
if ( dword_93F73E0 )
*(_DWORD *)dword_93F73E0 = *(_DWORD *)(unit___ + 0xA8);
dword_93F73E0 = v81 + 4;
}
else
{
v594 = *(_DWORD *)(unit___ + 0xA8);
sub_8053990(&dword_93F73DC, v144, &v594);
}
}
v527 = 0;
}
else
{
if ( dword_93F73E0 == dword_93F73E4 )
{
sub_8052120(&dword_93F73DC, dword_93F73E0, v518);
}
else
{
if ( dword_93F73E0 )
*(_DWORD *)dword_93F73E0 = *(_DWORD *)(unit___ + 0xA8);
dword_93F73E0 = v81 + 4;
v527 = 0;
}
}
}
}
else
{
v114 = *(_DWORD *)(unit___ + 0x114) + v440;
v115 = *(_DWORD *)(unit___ + 0x118);
if ( v115 != v114 + 4 )
{
v116 = (v115 - (v114 + 4)) >> 2;
if ( v116 )
memmove((void *)v114, (const void *)(v114 + 4), 4 * v116);
}
v105 = dword_93F73D4;
v118 = dword_93F73D0;
v117 = *(_DWORD *)(v70 + 20);
*(_DWORD *)(unit___ + 0x118) -= 4;
if ( (v105 - v118) >> 2 && v117 != -1 )
{
v119 = 0;
v500 = ((v105 - v118) >> 2) - 1;
while ( v119 <= v500 )
{
v120 = (v119 + v500) >> 1;
v113 = 4 * v120;
v112 = v118 + 4 * v120;
if ( v117 == *(_DWORD *)v112 )
goto LABEL_371;
if ( v117 >= *(_DWORD *)v112 )
v119 = v120 + 1;
else
v500 = v120 - 1;
}
}
}
break;
}
if ( (unsigned __int16)(**(int (__cdecl ***)(_DWORD))v70)(v70) == 38 )
{
if ( v535 <= 0 )
{
v174 = *(_DWORD *)(unit___ + 0x114) + v440;
v175 = *(_DWORD *)(unit___ + 0x118);
if ( v175 != v174 + 4 )
{
v176 = (v175 - (v174 + 4)) >> 2;
if ( v176 )
memmove((void *)v174, (const void *)(v174 + 4), 4 * v176);
}
v105 = dword_93F73D4;
v179 = dword_93F73D0;
v180 = dword_93F73D4 - dword_93F73D0;
*(_DWORD *)(unit___ + 0x118) -= 4;
v177 = v180 >> 2;
v178 = *(_DWORD *)(v70 + 20);
if ( v177 && *(_DWORD *)(v70 + 20) != -1 )
{
v181 = 0;
v503 = v177 - 1;
while ( v181 <= v503 )
{
v182 = (v181 + v503) >> 1;
v113 = 4 * v182;
v112 = v179 + 4 * v182;
if ( v178 == *(_DWORD *)v112 )
goto LABEL_371;
if ( v178 >= *(_DWORD *)v112 )
v181 = v182 + 1;
else
v503 = v182 - 1;
}
}
break;
}
v440 -= 4;
v535 -= (*(int (__cdecl **)(int))(*(_DWORD *)v70 + 0x214))(v70);
v82 = v462-- - 1 < 0;
if ( v82 )
{
LABEL_130:
unit__ = unit___;
goto LABEL_131;
}
LABEL_113:
v66 = *(_DWORD *)(unit___ + 0x114);
continue;
}
if ( (unsigned __int16)(**(int (__cdecl ***)(_DWORD))v70)(v70) == 24 )
{
if ( v548 )
{
if ( (unsigned __int8)(*(int (__cdecl **)(int))(*(_DWORD *)v70 + 0x2F4))(v70) )
goto LABEL_279;
sub_88B6E00(v462, v569);
v211 = sub_88B6B90(dword_93F73D4, dword_93F73D0);
v212 = v211;
if ( v211 != -1 )
{
sub_88B6E00(v211, &dword_93F73D4);
sub_88B6E00(v212, &dword_93F73E0);
}
}
else
{
if ( v540 == -1 )
goto LABEL_808;
v101 = (signed __int16)(*(int (__cdecl **)(int))(*(_DWORD *)v70 + 0x254))(v70);
if ( (signed __int16)v101 == -1 )
v101 = (signed __int16)(*(int (__cdecl **)(int))(*(_DWORD *)v70 + 0x250))(v70);
if ( v540 != v101 )
{
LABEL_808:
v102 = *(_DWORD *)(unit___ + 0x114) + v440;
v103 = *(_DWORD *)(unit___ + 0x118);
if ( v103 != v102 + 4 )
{
v104 = (v103 - (v102 + 4)) >> 2;
if ( v104 )
memmove((void *)v102, (const void *)(v102 + 4), 4 * v104);
}
v105 = dword_93F73D4;
v108 = dword_93F73D0;
v109 = dword_93F73D4 - dword_93F73D0;
*(_DWORD *)(unit___ + 0x118) -= 4;
v106 = v109 >> 2;
v107 = *(_DWORD *)(v70 + 20);
if ( v106 && *(_DWORD *)(v70 + 20) != -1 )
{
v110 = 0;
v499 = v106 - 1;
while ( 1 )
{
if ( v110 > v499 )
goto LABEL_112;
v111 = (v110 + v499) >> 1;
v113 = 4 * v111;
v112 = v108 + 4 * v111;
if ( v107 == *(_DWORD *)v112 )
break;
if ( v107 >= *(_DWORD *)v112 )
v110 = v111 + 1;
else
v499 = v111 - 1;
}
LABEL_371:
if ( v105 != v112 + 4 )
{
if ( (v105 - (v112 + 4)) >> 2 )
{
memmove((void *)v112, (const void *)(v112 + 4), 4 * ((v105 - (v112 + 4)) >> 2));
v105 = dword_93F73D4;
}
}
dword_93F73D4 = v105 - 4;
v213 = dword_93F73E0;
v214 = dword_93F73DC + v113;
if ( dword_93F73E0 != v214 + 4 )
{
if ( (dword_93F73E0 - (v214 + 4)) >> 2 )
{
memmove((void *)v214, (const void *)(v214 + 4), 4 * ((dword_93F73E0 - (v214 + 4)) >> 2));
v213 = dword_93F73E0;
}
}
dword_93F73E0 = v213 - 4;
}
break;
}
LABEL_279:
v183 = sub_8062200(*(_DWORD *)(v70 + 20), &dword_93F73D0);
v557 = 1;
if ( v183 != -1 )
{
v184 = dword_93F73E0;
if ( v183 < (dword_93F73E0 - dword_93F73DC) >> 2 )
{
v202 = dword_93F73DC + 4 * v183;
if ( dword_93F73E0 == dword_93F73E4 )
{
sub_8052120(&dword_93F73DC, v202, v518);
}
else
{
if ( dword_93F73E0 == v202 )
{
if ( dword_93F73E0 )
*(_DWORD *)dword_93F73E0 = *(_DWORD *)(unit___ + 0xA8);
dword_93F73E0 = v184 + 4;
}
else
{
v594 = *(_DWORD *)(unit___ + 0xA8);
sub_8053990(&dword_93F73DC, v202, &v594);
}
}
v557 = 1;
}
else
{
if ( dword_93F73E0 == dword_93F73E4 )
{
sub_8052120(&dword_93F73DC, dword_93F73E0, v518);
}
else
{
if ( dword_93F73E0 )
*(_DWORD *)dword_93F73E0 = *(_DWORD *)(unit___ + 0xA8);
dword_93F73E0 = v184 + 4;
v557 = 1;
}
}
}
}
}
}
}
}
}
break;
}
LABEL_112:
v440 -= 4;
v73 = v462-- - 1 < 0;
if ( v73 )
goto LABEL_130;
goto LABEL_113;
}
v557 = 0;
v527 = v64 != 0;
LABEL_131:
v515 = &v597;
if ( !v527 )
goto LABEL_179;
v83 = dword_940B280;
v84 = ((dword_940B284 - dword_940B280) >> 2) - 1;
v441 = v84;
if ( v84 < 0 )
goto LABEL_294;
v86 = 4 * v84;
v85 = unit__;
v528 = (signed __int16)(2 * ((_WORD)dword_944A4B0 + (_WORD)dword_944A4A8 + dword_944A4AC));
v463 = -1;
while ( 2 )
{
v88 = *(_DWORD *)(v83 + v86);
v89 = *(_WORD *)(v85 + 0x44);
v433 = v85;
v90 = (*(int (__cdecl **)(int))(*(_DWORD *)v88 + 0x2A0))(v88);
v91 = (*(int (__cdecl **)(int))(*(_DWORD *)v88 + 4))(v88);
v92 = (**(int (__cdecl ***)(_DWORD))v88)(v88);
v93 = sub_88C2210(v92, v91, v90, v89);
v85 = v433;
if ( !v93 )
{
v94 = sub_85D8BF0(v88);
v85 = v433;
if ( v94 )
{
if ( !(*(_DWORD *)(v88 + 12) & 0x2E90C32) )
{
v95 = *(_DWORD *)(v88 + 20);
if ( (dword_93F73D4 - dword_93F73D0) >> 2 && v95 != -1 )
{
v427 = 0;
v493 = ((dword_93F73D4 - dword_93F73D0) >> 2) - 1;
while ( v427 <= v493 )
{
v428 = (v427 + v493) >> 1;
if ( v95 == *(_DWORD *)(dword_93F73D0 + 4 * v428) )
goto LABEL_134;
if ( v95 >= *(_DWORD *)(dword_93F73D0 + 4 * v428) )
v427 = v428 + 1;
else
v493 = v428 - 1;
}
}
v96 = ((dword_93F716C - dword_93F7168) >> 2) - 1;
v481 = v96;
if ( v96 < 0 )
{
LABEL_345:
sub_85D1880(v88, &v597, &v596, &v595);
v85 = v433;
if ( (signed __int16)v597 != -30000 )
{
v204 = sub_88D67E0(v433, v597, v596, v595, 1);
v85 = v433;
if ( v204 )
{
v208 = (signed __int16)(v597 - *(_WORD *)(v433 + 0x48)) >> 31;
v206 = (signed __int16)((v208 ^ (unsigned __int16)(v597 - *(_WORD *)(v433 + 0x48))) - (_WORD)v208);
v209 = (signed __int16)(v596 - *(_WORD *)(v433 + 0x4A)) >> 31;
v207 = (signed __int16)((v209 ^ (unsigned __int16)(v596 - *(_WORD *)(v433 + 0x4A))) - (_WORD)v209);
v210 = (signed __int16)(v595 - *(_WORD *)(v433 + 0x4C)) >> 31;
v205 = (signed __int16)((v210 ^ (unsigned __int16)(v595 - *(_WORD *)(v433 + 0x4C))) - (_WORD)v210);
if ( (signed __int16)v206 > v205 || v207 > v205 )
{
v205 = v207;
if ( v207 < v206 )
v205 = v206;
}
if ( v528 > v205 )
{
v528 = v205;
v463 = v441;
}
}
}
}
else
{
v97 = v96 >> 1;
v98 = *(_DWORD *)(*(_DWORD *)(dword_93F7168 + 4 * v97) + 20);
if ( v95 != v98 )
{
v498 = 0;
if ( v95 < v98 )
{
LABEL_143:
v99 = v498;
v481 = v97 - 1;
goto LABEL_144;
}
while ( 1 )
{
v498 = v97 + 1;
v99 = v97 + 1;
LABEL_144:
if ( v481 < v99 )
goto LABEL_345;
v97 = (v481 + v99) >> 1;
v100 = *(_DWORD *)(*(_DWORD *)(dword_93F7168 + 4 * v97) + 20);
if ( v95 == v100 )
break;
if ( v95 < v100 )
goto LABEL_143;
}
}
}
}
}
}
LABEL_134:
v86 -= 4;
v87 = v441-- - 1 < 0;
if ( v87 )
{
unit__ = v85;
if ( v463 != -1 )
{
sub_8062200(*(_DWORD *)(*(_DWORD *)(dword_940B280 + 4 * v463) + 20), v564);
v121 = sub_8062200(*(_DWORD *)(*(_DWORD *)(dword_940B280 + 4 * v463) + 20), &dword_93F73D0);
if ( v121 != -1 )
{
v122 = dword_93F73E0;
if ( v121 < (dword_93F73E0 - dword_93F73DC) >> 2 )
{
v203 = dword_93F73DC + 4 * v121;
if ( dword_93F73E0 == dword_93F73E4 )
{
sub_8052120(&dword_93F73DC, v203, unit__ + 0xA8);
}
else
{
if ( dword_93F73E0 == v203 )
{
LABEL_176:
if ( dword_93F73E0 )
*(_DWORD *)dword_93F73E0 = *(_DWORD *)(unit__ + 0xA8);
dword_93F73E0 = v122 + 4;
}
else
{
v594 = *(_DWORD *)(unit__ + 0xA8);
sub_8053990(&dword_93F73DC, v203, &v594);
}
}
}
else
{
if ( dword_93F73E0 != dword_93F73E4 )
goto LABEL_176;
sub_8052120(&dword_93F73DC, dword_93F73E0, unit__ + 0xA8);
}
}
LABEL_179:
if ( v557 || !v548 && v540 == -1 )
goto LABEL_214;
v123 = dword_940B214;
v124 = ((dword_940B218 - dword_940B214) >> 2) - 1;
v442 = v124;
if ( v124 < 0 )
goto LABEL_320;
v529 = (signed __int16)(2 * ((_WORD)dword_944A4B0 + (_WORD)dword_944A4A8 + dword_944A4AC));
v125 = 4 * v124;
v464 = -1;
while ( 2 )
{
v126 = *(_DWORD *)(v123 + v125);
v127 = *(_WORD *)(unit__ + 68);
v128 = (*(int (__cdecl **)(int))(*(_DWORD *)v126 + 0x2A0))(v126);
v129 = (*(int (__cdecl **)(int))(*(_DWORD *)v126 + 4))(v126);
v130 = (**(int (__cdecl ***)(_DWORD))v126)(v126);
if ( !sub_88C2210(v130, v129, v128, v127) )
{
if ( v548 )
{
if ( (unsigned __int8)(*(int (__cdecl **)(int))(*(_DWORD *)v126 + 0x2F4))(v126) )
{
LABEL_186:
if ( (unsigned __int8)sub_85D8BF0(v126) && !(*(_DWORD *)(v126 + 0xC) & 0x2E90C32) )
{
v131 = *(_DWORD *)(v126 + 0x14);
if ( (dword_93F73D4 - dword_93F73D0) >> 2 && v131 != -1 )
{
v431 = 0;
v494 = ((dword_93F73D4 - dword_93F73D0) >> 2) - 1;
while ( v431 <= v494 )
{
v432 = (v431 + v494) >> 1;
if ( v131 == *(_DWORD *)(dword_93F73D0 + 4 * v432) )
goto LABEL_202;
if ( v131 < *(_DWORD *)(dword_93F73D0 + 4 * v432) )
v494 = v432 - 1;
else
v431 = v432 + 1;
}
}
v482 = 0;
v501 = ((dword_93F6FB0 - dword_93F6FAC) >> 2) - 1;
while ( v482 <= v501 )
{
v132 = (v482 + v501) >> 1;
v133 = *(_DWORD *)(dword_93F6FAC + 4 * v132);
if ( v131 == *(_DWORD *)(v133 + 20) )
goto LABEL_202;
if ( v131 >= *(_DWORD *)(v133 + 20) )
v482 = v132 + 1;
else
v501 = v132 - 1;
}
sub_85D1880(v126, &v595, &v596, &v597);
if ( (signed __int16)v595 != -30000 )
{
if ( (unsigned __int8)sub_88D67E0(unit__, v595, v596, v597, 1) )
{
v137 = (signed __int16)(v595 - *(_WORD *)(unit__ + 0x48)) >> 31;
v135 = (signed __int16)((v137 ^ (unsigned __int16)(v595 - *(_WORD *)(unit__ + 0x48)))
- (_WORD)v137);
v138 = (signed __int16)(v596 - *(_WORD *)(unit__ + 0x4A)) >> 31;
v136 = (signed __int16)((v138 ^ (unsigned __int16)(v596 - *(_WORD *)(unit__ + 0x4A)))
- (_WORD)v138);
v139 = (signed __int16)(v597 - *(_WORD *)(unit__ + 0x4C)) >> 31;
v134 = (signed __int16)((v139 ^ (unsigned __int16)(v597 - *(_WORD *)(unit__ + 0x4C)))
- (_WORD)v139);
if ( (signed __int16)v135 > v134 || v136 > v134 )
{
v134 = v136;
if ( v136 < v135 )
v134 = v135;
}
if ( v134 < v529 )
{
v529 = v134;
v464 = v442;
}
}
}
}
}
}
else
{
v141 = (signed __int16)(*(int (__cdecl **)(int))(*(_DWORD *)v126 + 0x254))(v126);
if ( (signed __int16)v141 == -1 )
v141 = (signed __int16)(*(int (__cdecl **)(int))(*(_DWORD *)v126 + 0x250))(v126);
if ( v540 == v141 )
goto LABEL_186;
}
}
LABEL_202:
v125 -= 4;
v140 = v442-- - 1 < 0;
if ( v140 )
{
if ( v464 != -1 )
{
sub_8062200(*(_DWORD *)(*(_DWORD *)(dword_940B214 + 4 * v464) + 20), v564);
v142 = sub_8062200(*(_DWORD *)(*(_DWORD *)(dword_940B214 + 4 * v464) + 20), &dword_93F73D0);
if ( v142 != -1 )
{
v143 = dword_93F73E0;
if ( v142 < (dword_93F73E0 - dword_93F73DC) >> 2 )
{
v197 = dword_93F73DC + 4 * v142;
if ( dword_93F73E0 == dword_93F73E4 )
{
sub_8052120(&dword_93F73DC, v197, unit__ + 0xA8);
}
else
{
if ( dword_93F73E0 == v197 )
{
LABEL_211:
if ( dword_93F73E0 )
*(_DWORD *)dword_93F73E0 = *(_DWORD *)(unit__ + 0xA8);
dword_93F73E0 = v143 + 4;
}
else
{
v594 = *(_DWORD *)(unit__ + 0xA8);
sub_8053990(&dword_93F73DC, v197, &v594);
}
}
}
else
{
if ( dword_93F73E0 != dword_93F73E4 )
goto LABEL_211;
sub_8052120(&dword_93F73DC, dword_93F73E0, unit__ + 0xA8);
}
}
LABEL_214:
if ( !*(_BYTE *)(unit__ + 1400) )
{
v434 = *(_WORD *)(unit__ + 272);
goto LABEL_52;
}
v145 = *(_DWORD *)(unit__ + 516);
v146 = ((*(_DWORD *)(unit__ + 520) - v145) >> 2) - 1;
v443 = v146;
if ( v146 >= 0 )
{
v465 = 4 * v146;
v541 = unit__ + 0xA8;
while ( 1 )
{
if ( (unsigned __int16)(****(int (__fastcall *****)(_DWORD))(v145 + v465))(v465) != 61
|| (v149 = **(_DWORD **)(*(_DWORD *)(unit__ + 0x204) + v465),
v148 = *(_DWORD *)(v149 + 0x24),
v150 = ((*(_DWORD *)(v149 + 0x28) - v148) >> 2) - 1,
v150 < 0) )
{
v465 -= 4;
v147 = v443-- - 1 < 0;
if ( v147 )
break;
}
else
{
v151 = 4 * v150;
v483 = unit__;
while ( 1 )
{
if ( (*(int (__cdecl **)(_DWORD))(**(_DWORD **)(v148 + v151) + 8))(*(_DWORD *)(v148 + v151)) == 10 )
{
v152 = (*(int (__cdecl **)(_DWORD))(**(_DWORD **)(*(_DWORD *)(v149 + 0x24) + v151) + 0xC))(*(_DWORD *)(*(_DWORD *)(v149 + 0x24) + v151));
v153 = v152;
if ( v152 )
{
if ( (unsigned __int16)(**(int (__cdecl ***)(_DWORD))v152)(v152) == 38 )
{
v155 = (*(int (__cdecl **)(int))(*(_DWORD *)v153 + 0x214))(v153);
v154 = *(_DWORD *)(v153 + 0x14);
v535 -= v155;
if ( (dword_93F73F8 - dword_93F73F4) >> 2 && v154 != -1 )
{
v215 = 0;
v504 = ((dword_93F73F8 - dword_93F73F4) >> 2) - 1;
while ( 1 )
{
if ( v215 > v504 )
goto LABEL_234;
v216 = (v215 + v504) >> 1;
if ( v154 == *(_DWORD *)(dword_93F73F4 + 4 * v216) )
break;
if ( v154 >= *(_DWORD *)(dword_93F73F4 + 4 * v216) )
v215 = v216 + 1;
else
v504 = v216 - 1;
}
if ( *(_DWORD *)(dword_93F7400 + 4 * v216) == *(_DWORD *)(v483 + 0xA8) )
sub_8062200(v154, v483 + 12 * *(_WORD *)(v483 + 0x110) + 0x114);
}
else
{
LABEL_234:
sub_8062200(v154, v483 + 12 * *(_WORD *)(v483 + 0x110) + 0x114);
v156 = sub_8062200(*(_DWORD *)(v153 + 0x14), &dword_93F73F4);
if ( v156 >= (dword_93F7404 - dword_93F7400) >> 2 )
{
sub_80E86D0(&dword_93F7400, v541);
}
else
{
if ( v156 != -1 )
sub_81374F0(&dword_93F7400, v156, v541);
}
}
}
}
}
v151 -= 4;
--v150;
if ( v150 < 0 )
break;
v148 = *(_DWORD *)(v149 + 0x24);
}
v465 -= 4;
v157 = v443-- - 1 < 0;
unit__ = v483;
if ( v157 )
break;
}
v145 = *(_DWORD *)(unit__ + 0x204);
}
}
if ( v535 <= 0 )
goto LABEL_262;
v158 = off_93F73E8;
v530 = ((dword_93F73EC - (_DWORD)off_93F73E8) >> 2) - 1;
if ( v530 < 0 )
{
v434 = *(_WORD *)(unit__ + 0x110);
goto LABEL_52;
}
v549 = unit__ + 0xA8;
v484 = unit__;
v542 = 4 * v530;
for ( j = 4 * v530; ; j = v542 )
{
v161 = *(_DWORD *)((char *)v158 + j);
v502 = v161;
v163 = *(_DWORD *)(v161 + 24);
v160 = *(_DWORD *)(v161 + 20);
v162 = ((v163 - v160) >> 2) - 1;
v444 = v162;
if ( v162 >= 0 )
break;
LABEL_298:
v542 -= 4;
v193 = v530-- - 1 < 0;
if ( v193 )
{
unit__ = v484;
goto LABEL_262;
}
v158 = off_93F73E8;
}
v466 = 4 * v162;
v164 = 4 * v162;
while ( 2 )
{
v165 = *(_DWORD *)(v160 + v164);
if ( dword_93F73F4 < (unsigned int)dword_93F73F8 )
{
v166 = dword_93F73F4;
if ( v165 == *(_DWORD *)dword_93F73F4 )
{
v167 = 0;
LABEL_296:
if ( *(_DWORD *)(dword_93F7400 + 4 * v167) != *(_DWORD *)(v484 + 0xA8) )
{
v466 -= 4;
v192 = v444-- - 1 < 0;
if ( v192 )
goto LABEL_298;
goto LABEL_260;
}
}
else
{
while ( 1 )
{
v166 += 4;
if ( dword_93F73F8 <= v166 )
break;
if ( v165 == *(_DWORD *)v166 )
{
v167 = (signed int)(v166 - dword_93F73F4) >> 2;
if ( v167 == -1 )
break;
goto LABEL_296;
}
}
}
}
if ( !((dword_940B1F4 - dword_940B1F0) >> 2)
|| v165 == -1
|| (v168 = ((dword_940B1F4 - dword_940B1F0) >> 2) - 1, v168 < 0) )
{
LABEL_259:
v466 -= 4;
v173 = v444-- - 1 < 0;
if ( v173 )
goto LABEL_298;
LABEL_260:
v164 = v466;
v160 = *(_DWORD *)(v502 + 20);
continue;
}
break;
}
v169 = v168 >> 1;
v171 = *(_DWORD *)(dword_940B1F0 + 4 * (v168 >> 1));
v170 = *(_DWORD *)(v171 + 20);
if ( v165 != v170 )
{
if ( (dword_940B1F4 - dword_940B1F0) >> 2 != 1 )
{
v172 = 0;
do
{
if ( v165 < v170 )
{
v168 = v169 - 1;
if ( v169 - 1 < v172 )
goto LABEL_259;
}
else
{
v172 = v169 + 1;
if ( v168 < v169 + 1 )
goto LABEL_259;
}
v169 = (v172 + v168) >> 1;
v171 = *(_DWORD *)(dword_940B1F0 + 4 * v169);
v170 = *(_DWORD *)(v171 + 20);
if ( v165 == v170 )
goto LABEL_300;
}
while ( v168 != v172 );
}
goto LABEL_259;
}
LABEL_300:
if ( !v171
|| (sub_85D1880(v171, &v597, &v596, &v595),
!(unsigned __int8)sub_88D67E0(v484, v597, v596, v595, 1)) )
goto LABEL_259;
v535 -= (*(int (__cdecl **)(int))(*(_DWORD *)v171 + 0x214))(v171);
sub_8062200(v165, v484 + 0x114 + 12 * *(_WORD *)(v484 + 0x110));
v194 = sub_8062200(v165, &dword_93F73F4);
v195 = dword_93F7404;
if ( v194 >= (dword_93F7404 - dword_93F7400) >> 2 )
{
if ( dword_93F7404 != dword_93F7408 )
{
if ( dword_93F7404 )
*(_DWORD *)dword_93F7404 = *(_DWORD *)(v484 + 0xA8);
goto LABEL_312;
}
sub_8052120(&dword_93F7400, dword_93F7404, v549);
}
else
{
if ( v194 == -1 )
goto LABEL_307;
v196 = dword_93F7400 + 4 * v194;
if ( dword_93F7404 == dword_93F7408 )
{
sub_8052120(&dword_93F7400, v196, v549);
}
else
{
if ( dword_93F7404 != v196 )
{
v594 = *(_DWORD *)(v484 + 0xA8);
sub_8053990(&dword_93F7400, v196, &v594);
goto LABEL_307;
}
if ( dword_93F7404 )
*(_DWORD *)dword_93F7404 = *(_DWORD *)(v484 + 0xA8);
LABEL_312:
dword_93F7404 = v195 + 4;
}
}
LABEL_307:
if ( v535 <= 0 )
{
unit__ = v484;
v434 = *(_WORD *)(v484 + 0x110);
goto LABEL_52;
}
goto LABEL_259;
}
LABEL_320:
sub_88F3930(unit__, 43, 300);
goto LABEL_214;
}
v123 = dword_940B214;
continue;
}
}
LABEL_294:
sub_88F3930(unit__, 43, 300);
goto LABEL_179;
}
v83 = dword_940B280;
continue;
}
}
LABEL_17:
v495 = v435;
v5 = v435;
}
if ( (dword_940B1F4 - dword_940B1F0) >> 2 != 1 )
{
v11 = 0;
do
{
if ( v6 < v10 )
{
v7 = v8 - 1;
if ( v11 > v8 - 1 )
goto LABEL_16;
}
else
{
v11 = v8 + 1;
if ( v8 + 1 > v7 )
goto LABEL_16;
}
v8 = (v7 + v11) >> 1;
v9 = *(_DWORD *)(dword_940B1F0 + 4 * v8);
v10 = *(_DWORD *)(v9 + 20);
if ( v6 == v10 )
goto LABEL_92;
}
while ( v11 != v7 );
}
goto LABEL_16;
}
v16 = dword_9449064;
v15 = *(_DWORD *)(unit_ + 0x100);
*(_DWORD *)(unit_ + 12 * *(_WORD *)(unit_ + 0x110) + 0x118) = *(_DWORD *)(unit_
+ 12 * *(_WORD *)(unit_ + 0x110)
+ 0x114);
v515 = &v597;
v14 = (dword_9449068 - (_DWORD)v16) >> 2;
if ( !((dword_9449068 - (_DWORD)v16) >> 2) || v15 == -1 || (v17 = v14 - 1, v14 - 1 < 0) )
goto LABEL_52;
v18 = v17 >> 1;
v20 = *((_DWORD *)v16 + (v17 >> 1));
v19 = *(_DWORD *)v20;
if ( v15 != *(_DWORD *)v20 )
{
if ( !v17 )
goto LABEL_52;
v460 = 0;
while ( 1 )
{
if ( v15 < v19 )
v17 = v18 - 1;
else
v460 = v18 + 1;
if ( v17 < v460 )
{
v515 = &v597;
goto LABEL_52;
}
v18 = (v17 + v460) >> 1;
v20 = *((_DWORD *)v16 + v18);
v19 = *(_DWORD *)v20;
if ( v15 == *(_DWORD *)v20 )
break;
if ( v17 == v460 )
{
v515 = &v597;
goto LABEL_52;
}
}
}
if ( !v20 )
{
v515 = &v597;
goto LABEL_52;
}
v217 = *(_DWORD *)(unit_ + 0x104);
if ( v217 == -1 )
{
v515 = &v597;
goto LABEL_52;
}
v536 = *(_DWORD *)(*(_DWORD *)(v20 + 0x44) + 4 * v217);
if ( !*(_DWORD *)(*(_DWORD *)(v20 + 0x44) + 4 * v217) )
{
v515 = &v597;
goto LABEL_52;
}
v219 = *(_DWORD *)(unit_ + 0x308);
v591 = 0;
v592 = 0;
v221 = *(_DWORD *)(v219 + 4) - *(_DWORD *)v219;
v593 = 0;
v588 = 0;
v589 = 0;
v590 = 0;
LOWORD(v595) = 0;
sub_80525A0(&v591, 0, v221 >> 2, &v595);
v222 = *(_DWORD *)(*(_DWORD *)(unit_ + 0x308) + 4) - **(_DWORD **)(unit_ + 0x308);
LOBYTE(v597) = 0;
sub_80E92F0(&v588, 0, v222 >> 2, &v597);
v218 = v588;
v220 = v591;
v486 = v592;
if ( (unsigned int)v591 < v592 )
{
v223 = -(((_BYTE)v591 & 0xFu) >> 1) & 7;
if ( ((v592 + ~(unsigned int)v591) >> 1) + 1 <= v223 )
v223 = ((v592 + ~(unsigned int)v591) >> 1) + 1;
v445 = ((v592 + ~(unsigned int)v591) >> 1) + 1;
if ( !v223 )
{
v224 = v591;
LABEL_397:
v446 = v445 - v223;
v505 = 8 * (v446 >> 3);
if ( !v505 )
goto LABEL_809;
_EBP = (int)((char *)v220 + 2 * v223);
v226 = 0;
do
{
_EBX = v226++;
_EBX *= 16;
__asm
{
xorps xmm0, xmm0
movaps xmmword ptr [ebp+ebx+0], xmm0
}
}
while ( v226 < v446 >> 3 );
v224 = (char *)v224 + 16 * (v446 >> 3);
if ( v446 != v505 )
{
LABEL_809:
do
{
*(_WORD *)v224 = 0;
v224 = (char *)v224 + 2;
}
while ( v486 > (unsigned int)v224 );
}
goto LABEL_402;
}
v224 = v591;
v225 = 0;
do
{
++v225;
*(_WORD *)v224 = 0;
v224 = (char *)v224 + 2;
}
while ( v223 > v225 );
if ( v445 != v223 )
goto LABEL_397;
}
LABEL_402:
v229 = v589;
if ( (unsigned int)v218 >= v589 )
goto LABEL_414;
v447 = v589 - (_DWORD)v218;
v230 = -(signed int)v218 & 0xF;
if ( v589 - (_DWORD)v218 <= v230 )
v230 = v589 - (_DWORD)v218;
if ( !v230 )
{
v231 = (int)v218;
LABEL_409:
v448 = v447 - v230;
v487 = 16 * (v448 >> 4);
if ( !v487 )
goto LABEL_810;
v468 = (int)((char *)v218 + v230);
v233 = 0;
v519 = v231;
do
{
_EAX = v468;
_EBX = v233;
__asm { xorps xmm0, xmm0 }
++v233;
_EBX *= 16;
__asm { movaps xmmword ptr [eax+ebx], xmm0 }
}
while ( v448 >> 4 > v233 );
v231 = v487 + v519;
if ( v448 != v487 )
{
LABEL_810:
do
*(_BYTE *)v231++ = 0;
while ( v229 > (unsigned int)v231 );
}
goto LABEL_414;
}
v231 = (int)v218;
v232 = 0;
do
{
++v232;
*(_BYTE *)v231++ = 0;
}
while ( v230 > v232 );
if ( v230 != v447 )
goto LABEL_409;
LABEL_414:
v449 = *(_DWORD *)(v536 + 0x9C);
v520 = *(_DWORD *)(v536 + 0xA0);
if ( (unsigned int)(*(_DWORD *)(v536 + 0xA0) - *(_DWORD *)(v536 + 0x9C)) >> 2 )
{
v236 = 0;
v469 = 0;
do
{
v506 = *(_DWORD *)(v449 + 4 * v236);
if ( (dword_940B1F4 - dword_940B1F0) >> 2 )
{
if ( v506 != -1 )
{
v237 = ((dword_940B1F4 - dword_940B1F0) >> 2) - 1;
if ( v237 >= 0 )
{
v238 = v237 >> 1;
v239 = *(_DWORD *)(dword_940B1F0 + 4 * (v237 >> 1));
v240 = *(_DWORD *)(v239 + 20);
if ( v506 == v240 )
{
LABEL_443:
if ( v239 )
{
switch ( (unsigned __int16)((**(int (__cdecl ***)(_DWORD))v239)(v239) - 25) )
{
case 0u:
case 1u:
case 3u:
case 4u:
case 0xBu:
case 0xFu:
case 0x10u:
case 0x11u:
case 0x22u:
v249 = (*(int (__cdecl **)(int))(*(_DWORD *)v239 + 4))(v239);
v250 = (**(int (__cdecl ***)(_DWORD))v239)(v239);
v507 = (signed __int16)sub_829D850(&off_944C29C, v250, v249);
v251 = (*(int (__cdecl **)(int))(*(_DWORD *)v239 + 4))(v239);
v252 = (**(int (__cdecl ***)(_DWORD))v239)(v239);
v531 = sub_829D9A0(&off_944C29C, v252, v251);
v253 = (*(int (__cdecl **)(_DWORD))(*(_DWORD *)v239 + 4))(v239);
v254 = (**(int (__cdecl ***)(_DWORD))v239)(v239);
v550 = sub_829DC20(&off_944C29C, v254, v253);
v587 = 0;
v255 = *(_DWORD *)v239;
v586 = 0;
v585 = 0;
v256 = (*(int (__cdecl **)(int))(v255 + 172))(v239);
v257 = (**(int (__cdecl ***)(_DWORD))v239)(v239);
sub_88F0F30(unit_, v257, v256, &v585);
v247 = v585;
v248 = ((v586 - (_DWORD)v585) >> 1) - 1;
v450 = v248;
if ( v248 >= 0 )
{
if ( v550 )
{
v258 = 2 * v248;
v558 = v239;
while ( 1 )
{
v260 = *(_WORD *)((char *)v585 + v258);
v259 = (char *)v591 + 2 * v260;
if ( v507 >= *(_WORD *)v259 )
{
v261 = (char *)v588 + v260;
if ( !*v261 )
break;
}
v258 -= 2;
v263 = v450-- - 1 < 0;
if ( v263 )
goto LABEL_452;
}
v262 = v261;
v239 = v558;
*(_WORD *)v259 += v531;
*v262 = 1;
}
else
{
v264 = 2 * v248;
while ( 1 )
{
v265 = (char *)v591 + 2 * *(_WORD *)((char *)v585 + v264);
v266 = *(_WORD *)v265;
if ( v507 >= v266 )
break;
v264 -= 2;
v267 = v450-- - 1 < 0;
if ( v267 )
goto LABEL_452;
}
*(_WORD *)v265 = v531 + v266;
}
sub_8062200(*(_DWORD *)(v239 + 20), unit_ + 12 * *(_WORD *)(unit_ + 0x110) + 0x114);
v247 = v585;
}
LABEL_452:
if ( v247 )
{
operator delete(v247);
v449 = *(_DWORD *)(v536 + 0x9C);
v520 = *(_DWORD *)(v536 + 0xA0);
}
else
{
v449 = *(_DWORD *)(v536 + 0x9C);
v520 = *(_DWORD *)(v536 + 0xA0);
}
break;
default:
sub_8062200(*(_DWORD *)(v239 + 20), unit_ + 12 * *(_WORD *)(unit_ + 0x110) + 0x114);
v449 = *(_DWORD *)(v536 + 0x9C);
v520 = *(_DWORD *)(v536 + 0xA0);
break;
}
}
}
else
{
if ( (dword_940B1F4 - dword_940B1F0) >> 2 != 1 )
{
v241 = 0;
do
{
if ( v506 < v240 )
{
v237 = v238 - 1;
if ( v241 > v238 - 1 )
break;
}
else
{
v241 = v238 + 1;
if ( v238 + 1 > v237 )
break;
}
v238 = (v237 + v241) >> 1;
v239 = *(_DWORD *)(dword_940B1F0 + 4 * v238);
v240 = *(_DWORD *)(v239 + 20);
if ( v506 == v240 )
goto LABEL_443;
}
while ( v241 != v237 );
}
}
}
}
}
++v469;
v236 = v469;
}
while ( v469 < (v520 - v449) >> 2 );
}
if ( !(*(_BYTE *)(v536 + 152) & 1) )
{
v437 = *(_DWORD *)(unit_ + 0x114);
v517 = *(_DWORD *)(unit_ + 0x118);
if ( (unsigned int)(*(_DWORD *)(unit_ + 0x118) - *(_DWORD *)(unit_ + 0x114)) >> 2 )
{
v35 = 0;
v496 = 0;
do
{
v242 = *(_DWORD *)(v437 + 4 * v35);
if ( (dword_940B1F4 - dword_940B1F0) >> 2 )
{
if ( *(_DWORD *)(v437 + 4 * v35) != -1 )
{
v243 = ((dword_940B1F4 - dword_940B1F0) >> 2) - 1;
if ( v243 >= 0 )
{
v244 = v243 >> 1;
v245 = *(_DWORD *)(*(_DWORD *)(dword_940B1F0 + 4 * (v243 >> 1)) + 20);
v470 = *(_DWORD *)(dword_940B1F0 + 4 * (v243 >> 1));
if ( v242 == v245 )
goto LABEL_464;
if ( (dword_940B1F4 - dword_940B1F0) >> 2 != 1 )
{
v246 = 0;
while ( 1 )
{
if ( v242 < v245 )
{
v243 = v244 - 1;
if ( v246 > v244 - 1 )
goto LABEL_43;
}
else
{
v246 = v244 + 1;
if ( v244 + 1 > v243 )
goto LABEL_43;
}
v244 = (v243 + v246) >> 1;
v245 = *(_DWORD *)(*(_DWORD *)(dword_940B1F0 + 4 * v244) + 20);
if ( v242 == v245 )
break;
if ( v246 == v243 )
goto LABEL_43;
}
v470 = *(_DWORD *)(dword_940B1F0 + 4 * v244);
LABEL_464:
if ( v470 )
{
switch ( (unsigned __int16)((**(int (__cdecl ***)(_DWORD))v470)(v470) - 25) )
{
case 0u:
case 1u:
case 3u:
case 4u:
case 0xBu:
case 0xFu:
case 0x10u:
case 0x11u:
case 0x22u:
v22 = (*(int (__cdecl **)(int))(*(_DWORD *)v470 + 4))(v470);
v23 = (**(int (__cdecl ***)(_DWORD))v470)(v470);
v516 = (signed __int16)sub_829D850(&off_944C29C, v23, v22);
v24 = (*(int (__cdecl **)(int))(*(_DWORD *)v470 + 4))(v470);
v25 = (**(int (__cdecl ***)(_DWORD))v470)(v470);
v526 = sub_829D9A0(&off_944C29C, v25, v24);
v26 = (*(int (__cdecl **)(_DWORD))(*(_DWORD *)v470 + 4))(v470);
v27 = (**(int (__cdecl ***)(_DWORD))v470)(v470);
v539 = sub_829DC20(&off_944C29C, v27, v26);
v587 = 0;
v585 = 0;
v28 = *(_DWORD *)v470;
v586 = 0;
v29 = (*(int (__cdecl **)(int))(v28 + 0xAC))(v470);
v30 = (**(int (__cdecl ***)(_DWORD))v470)(v470);
sub_88F0F30(unit_, v30, v29, &v585);
v21 = v585;
v436 = ((v586 - (_DWORD)v585) >> 1) - 1;
if ( v436 >= 0 )
{
if ( v539 )
{
v31 = 2 * v436;
while ( 1 )
{
v33 = *(_WORD *)((char *)v585 + v31);
v32 = (char *)v591 + 2 * v33;
if ( v516 >= *(_WORD *)v32 )
{
v34 = (char *)v588 + v33;
if ( !*v34 )
break;
}
v31 -= 2;
v268 = v436-- - 1 < 0;
if ( v268 )
goto LABEL_41;
}
*(_WORD *)v32 += v526;
*v34 = 1;
}
else
{
v269 = 2 * v436;
while ( 1 )
{
v270 = (char *)v591 + 2 * *(_WORD *)((char *)v585 + v269);
v271 = *(_WORD *)v270;
if ( v516 >= v271 )
break;
v269 -= 2;
v272 = v436-- - 1 < 0;
if ( v272 )
goto LABEL_41;
}
*(_WORD *)v270 = v526 + v271;
}
sub_8062200(*(_DWORD *)(v470 + 20), unit_ + 12 * *(_WORD *)(unit_ + 0x110) + 0x114);
v21 = v585;
}
LABEL_41:
if ( v21 )
{
operator delete(v21);
v437 = *(_DWORD *)(unit_ + 0x114);
v517 = *(_DWORD *)(unit_ + 0x118);
}
else
{
v437 = *(_DWORD *)(unit_ + 0x114);
v517 = *(_DWORD *)(unit_ + 0x118);
}
break;
default:
v437 = *(_DWORD *)(unit_ + 0x114);
v517 = *(_DWORD *)(unit_ + 0x118);
break;
}
}
goto LABEL_43;
}
}
}
}
LABEL_43:
++v496;
v35 = v496;
}
while ( v496 < (v517 - v437) >> 2 );
}
}
v438 = *(_WORD *)(unit_ + 0x110);
if ( *(_WORD *)(unit_ + 0x110) != 2 )
goto LABEL_45;
v585 = 0;
v586 = 0;
v587 = 0;
v362 = *(_DWORD *)(v536 + 0x88);
v363 = *(_DWORD *)(v536 + 0x8C);
v582 = 0;
v583 = 0;
v584 = 0;
v475 = (v363 - v362) >> 2;
if ( v475 > 0 )
{
v455 = 0;
while ( 1 )
{
v594 = 1;
v366 = *(_DWORD *)(v362 + 4 * v455);
v367 = *(_DWORD *)(v366 + 20);
if ( (unsigned int)(*(_DWORD *)(v366 + 24) - v367) >> 2 )
{
v369 = *(_DWORD *)v367;
v368 = (dword_940B1F4 - dword_940B1F0) >> 2;
v512 = v369;
if ( (dword_940B1F4 - dword_940B1F0) >> 2 )
{
if ( v369 != -1 )
{
v370 = v368 - 1;
if ( v368 - 1 >= 0 )
{
v371 = v370 >> 1;
v372 = *(_DWORD *)(dword_940B1F0 + 4 * (v370 >> 1));
v373 = *(_DWORD *)(v372 + 20);
if ( v369 == v373 )
{
LABEL_654:
if ( v372 )
{
if ( !(unsigned __int8)(*(int (__cdecl **)(int))(*(_DWORD *)v372 + 0x2F4))(v372) )
{
v377 = (*(int (__cdecl **)(int))(*(_DWORD *)v372 + 0x250))(v372);
v513 = (signed __int16)v377;
if ( v377 <= 0x73u )
{
if ( (v586 - (_DWORD)v585) >> 1 )
{
v424 = ((v586 - (_DWORD)v585) >> 1) - 1;
v423 = 0;
while ( v423 <= v424 )
{
v425 = (v424 + v423) >> 1;
v426 = *((_WORD *)v585 + v425);
if ( v513 == v426 )
{
*((_DWORD *)v582 + v425) += v594;
goto LABEL_634;
}
if ( v513 >= v426 )
v423 = v425 + 1;
else
v424 = v425 - 1;
}
}
v378 = sub_805D7E0(v513, &v585);
if ( v378 != -1 )
{
if ( v378 < (v583 - (_DWORD)v582) >> 2 )
sub_81374F0(&v582, v378, &v594);
else
sub_80E86D0(&v582, &v594);
}
}
}
}
}
else
{
if ( v370 )
{
v374 = 0;
do
{
if ( v512 < v373 )
{
v370 = v371 - 1;
if ( v374 > v371 - 1 )
break;
}
else
{
v374 = v371 + 1;
if ( v371 + 1 > v370 )
break;
}
v371 = (v370 + v374) >> 1;
v372 = *(_DWORD *)(dword_940B1F0 + 4 * v371);
v373 = *(_DWORD *)(v372 + 20);
if ( v512 == v373 )
goto LABEL_654;
}
while ( v374 != v370 );
}
}
}
}
}
}
else
{
v364 = *(_WORD *)(v366 + 6);
if ( (signed int)v364 >= 0 )
{
if ( v364 < (dword_944C2AC - (_DWORD)off_944C2A8) >> 2 )
{
v365 = *((_DWORD *)off_944C2A8 + v364);
if ( *(_WORD *)(v365 + 34) == -1 )
{
v375 = *(_WORD *)(v365 + 32);
if ( (_WORD)v375 <= 0x73u )
{
if ( (v586 - (_DWORD)v585) >> 1 )
{
v420 = 0;
v492 = ((v586 - (_DWORD)v585) >> 1) - 1;
while ( v420 <= v492 )
{
v421 = (v420 + v492) >> 1;
v422 = *((_WORD *)v585 + v421);
if ( v375 == v422 )
{
++*((_DWORD *)v582 + v421);
goto LABEL_634;
}
if ( v375 >= v422 )
v420 = v421 + 1;
else
v492 = v421 - 1;
}
}
v376 = sub_805D7E0(v375, &v585);
if ( v376 != -1 )
{
if ( v376 < (v583 - (_DWORD)v582) >> 2 )
sub_81374F0(&v582, v376, &v594);
else
sub_80E86D0(&v582, &v594);
}
}
}
}
}
}
LABEL_634:
++v455;
if ( v455 >= v475 )
break;
v362 = *(_DWORD *)(v536 + 0x88);
}
}
v379 = ((*(_DWORD *)(v20 + 0xA8) - *(_DWORD *)(v20 + 0xA4)) >> 2) - 1;
v476 = v379;
if ( v379 >= 0 )
{
v514 = 4 * v379;
v524 = 0;
do
{
v383 = *(_DWORD *)(v20 + 0xA4);
v384 = *(_DWORD *)(v383 + v514);
v456 = v383 + v514;
if ( (dword_940B1F4 - dword_940B1F0) >> 2 )
{
if ( *(_DWORD *)(v383 + v514) != -1 )
{
v385 = ((dword_940B1F4 - dword_940B1F0) >> 2) - 1;
if ( v385 >= 0 )
{
v386 = v385 >> 1;
v387 = *(_DWORD *)(*(_DWORD *)(dword_940B1F0 + 4 * (v385 >> 1)) + 20);
v547 = *(_DWORD *)(dword_940B1F0 + 4 * (v385 >> 1));
if ( v384 != v387 )
{
if ( (dword_940B1F4 - dword_940B1F0) >> 2 == 1 )
goto LABEL_663;
v388 = 0;
while ( 1 )
{
if ( v384 < v387 )
{
v385 = v386 - 1;
if ( v386 - 1 < v388 )
goto LABEL_663;
}
else
{
v388 = v386 + 1;
if ( v385 < v386 + 1 )
goto LABEL_663;
}
v386 = (v388 + v385) >> 1;
v387 = *(_DWORD *)(*(_DWORD *)(dword_940B1F0 + 4 * v386) + 20);
if ( v384 == v387 )
break;
if ( v385 == v388 )
goto LABEL_663;
}
v547 = *(_DWORD *)(dword_940B1F0 + 4 * v386);
}
if ( v547 )
{
if ( (unsigned __int16)(*(int (__cdecl **)(int))(*(_DWORD *)v547 + 0x254))(v547) == -1 )
{
v457 = (signed __int16)(*(int (__cdecl **)(int))(*(_DWORD *)v547 + 0x250))(v547);
v389 = (v586 - (_DWORD)v585) >> 1;
if ( v457 != -1 )
{
if ( v389 )
{
v391 = v389 - 1;
v390 = 0;
while ( v390 <= v391 )
{
v392 = (v391 + v390) >> 1;
v393 = *((_WORD *)v585 + v392);
if ( v457 == v393 )
{
v394 = (char *)v582 + 4 * v392;
if ( *(_DWORD *)v394 <= 0 )
goto LABEL_667;
--*(_DWORD *)v394;
if ( v524 )
{
v458 = *(_WORD *)(unit_ + 0x110);
}
else
{
v458 = *(_WORD *)(unit_ + 0x110);
v395 = ((*(_DWORD *)(unit_ + 12 * *(_WORD *)(unit_ + 0x110) + 0x118)
- *(_DWORD *)(unit_ + 12 * *(_WORD *)(unit_ + 0x110) + 0x114)) >> 2)
- 1;
v525 = v395;
if ( v395 >= 0 )
{
v534 = 4 * v395;
do
{
v555 = *(_DWORD *)(*(_DWORD *)(unit_ + 12 * v458 + 0x114) + v534);
if ( (dword_940B1F4 - dword_940B1F0) >> 2 )
{
if ( *(_DWORD *)(*(_DWORD *)(unit_ + 12 * v458 + 0x114) + v534) != -1 )
{
v396 = ((dword_940B1F4 - dword_940B1F0) >> 2) - 1;
if ( v396 >= 0 )
{
v397 = v396 >> 1;
v399 = *(_DWORD *)(dword_940B1F0 + 4 * (v396 >> 1));
v398 = *(_DWORD *)(v399 + 20);
if ( v555 == v398 )
{
LABEL_717:
if ( v399 )
{
if ( (unsigned __int16)(**(int (__cdecl ***)(_DWORD))v399)(v399) == 24 )
{
v405 = *(_WORD *)(unit_ + 0x110);
v458 = v405;
v408 = *(_WORD *)(unit_ + 0x110);
v409 = unit_ + 12 * v405;
v406 = *(_DWORD *)(v409 + 0x114) + v534;
v407 = *(_DWORD *)(v409 + 0x118);
if ( v407 != v406 + 4 )
{
v410 = (v407 - (v406 + 4)) >> 2;
if ( v410 )
{
memmove((void *)v406, (const void *)(v406 + 4), 4 * v410);
v458 = *(_WORD *)(unit_ + 0x110);
}
}
*(_DWORD *)(unit_ + 12 * v408 + 0x118) -= 4;
}
else
{
v458 = *(_WORD *)(unit_ + 0x110);
}
}
}
else
{
if ( (dword_940B1F4 - dword_940B1F0) >> 2 != 1 )
{
v400 = 0;
do
{
if ( v398 > v555 )
{
v396 = v397 - 1;
if ( v400 > v397 - 1 )
break;
}
else
{
v400 = v397 + 1;
if ( v397 + 1 > v396 )
break;
}
v397 = (v396 + v400) >> 1;
v399 = *(_DWORD *)(dword_940B1F0 + 4 * v397);
v398 = *(_DWORD *)(v399 + 20);
if ( v555 == v398 )
goto LABEL_717;
}
while ( v400 != v396 );
}
}
}
}
}
v534 -= 4;
}
while ( v525-- - 1 >= 0 );
}
v524 = 1;
}
sub_8062200(*(_DWORD *)(v547 + 20), unit_ + 12 * v458 + 0x114);
sub_8062200(*(_DWORD *)(v547 + 20), v20 + 0xB0);
v402 = *(_DWORD *)(v20 + 0xA4) + v514;
v403 = *(_DWORD *)(v20 + 0xA8);
if ( v403 != v402 + 4 )
{
v404 = (v403 - (v402 + 4)) >> 2;
if ( v404 )
memmove((void *)v402, (const void *)(v402 + 4), 4 * v404);
}
goto LABEL_666;
}
if ( v457 >= v393 )
v390 = v392 + 1;
else
v391 = v392 - 1;
}
}
}
}
goto LABEL_667;
}
}
}
}
LABEL_663:
v380 = *(_DWORD *)(v20 + 0xA8);
if ( v380 != v456 + 4 )
{
v381 = (v380 - (v456 + 4)) >> 2;
if ( v381 )
memmove((void *)v456, (const void *)(v456 + 4), 4 * v381);
}
LABEL_666:
*(_DWORD *)(v20 + 0xA8) -= 4;
LABEL_667:
v514 -= 4;
}
while ( v476-- - 1 >= 0 );
}
if ( v582 )
operator delete(v582);
if ( v585 )
{
operator delete(v585);
v438 = *(_WORD *)(unit_ + 0x110);
}
else
{
v438 = *(_WORD *)(unit_ + 0x110);
}
LABEL_45:
if ( v438 != 1 )
goto LABEL_46;
if ( *(_DWORD *)(v536 + 0xA8) == 0xFFFFFFFF )
goto LABEL_47;
v319 = *(_DWORD *)(unit_ + 0x204);
v320 = ((*(_DWORD *)(unit_ + 0x208) - v319) >> 2) - 1;
v510 = v320;
if ( v320 < 0 )
{
v533 = 25;
goto LABEL_583;
}
v522 = 4 * v320;
v321 = unit_ + 0xA8;
v533 = 25;
v578 = v20 + 0xBC;
v575 = unit_ + 0xA8;
v577 = v20 + 0xC8;
while ( 2 )
{
if ( (unsigned __int16)(****(int (__fastcall *****)(_DWORD))(v319 + v522))(v321) != 61
|| (v325 = **(_DWORD **)(*(_DWORD *)(unit__ + 0x204) + v522),
v321 = v325,
v473 = **(_DWORD **)(*(_DWORD *)(unit__ + 0x204) + v522),
v326 = *(_DWORD *)(v325 + 0x28),
v323 = *(_DWORD *)(v325 + 0x24),
v324 = ((v326 - v323) >> 2) - 1,
v453 = v324,
v324 < 0) )
goto LABEL_557;
v327 = 4 * v324;
while ( 2 )
{
if ( (*(int (__cdecl **)(_DWORD))(**(_DWORD **)(v323 + v327) + 8))(*(_DWORD *)(v323 + v327)) != 10
|| (v329 = (*(int (__cdecl **)(_DWORD))(**(_DWORD **)(*(_DWORD *)(v473 + 0x24) + v327) + 12))(*(_DWORD *)(*(_DWORD *)(v473 + 0x24) + v327)),
v490 = v329,
!v329)
|| (unsigned __int16)(**(int (__cdecl ***)(_DWORD))v329)(v329) != 38
|| (v331 = (*(int (__cdecl **)(int))(*(_DWORD *)v490 + 0x214))(v490),
v321 = *(_DWORD *)(v20 + 0x98),
v533 -= v331,
v330 = ((*(_DWORD *)(v20 + 0x9C) - v321) >> 2) - 1,
v330 < 0) )
goto LABEL_562;
v332 = 4 * v330;
v560 = v327;
v567 = v20;
unit____ = unit__;
while ( 1 )
{
v333 = *(_DWORD *)(v321 + v332);
if ( *(_BYTE *)(v333 + 16) & 1 )
{
v545 = *(_DWORD *)(v490 + 20);
v334 = *(_DWORD *)(v333 + 20);
v335 = (*(_DWORD *)(v333 + 24) - v334) >> 2;
if ( v335 )
{
if ( v545 != -1 )
{
v336 = v335 - 1;
if ( v336 >= 0 )
break;
}
}
}
LABEL_569:
v332 -= 4;
--v330;
if ( v330 < 0 )
{
v327 = v560;
v20 = v567;
unit__ = unit____;
goto LABEL_562;
}
}
v337 = v336 >> 1;
v338 = *(_DWORD *)(v334 + 4 * (v336 >> 1));
if ( v545 != v338 )
{
v553 = 0;
do
{
if ( v545 < v338 )
v336 = v337 - 1;
else
v553 = v337 + 1;
if ( v336 < v553 )
goto LABEL_569;
v337 = (v336 + v553) >> 1;
v338 = *(_DWORD *)(v334 + 4 * v337);
}
while ( v545 != v338 );
}
v20 = v567;
v327 = v560;
unit__ = unit____;
v415 = *(_DWORD *)(v567 + 0xBC);
v414 = (*(_DWORD *)(v567 + 0xC0) - v415) >> 2;
if ( v414 )
{
v418 = v414 - 1;
v417 = 0;
v568 = v560;
v563 = v415;
while ( 1 )
{
if ( v417 > v418 )
{
v327 = v568;
goto LABEL_740;
}
v419 = (v418 + v417) >> 1;
v321 = *(_DWORD *)(v490 + 20);
if ( *(_DWORD *)(v563 + 4 * v419) == v545 )
break;
if ( *(_DWORD *)(v563 + 4 * v419) <= v545 )
v417 = v419 + 1;
else
v418 = v419 - 1;
}
v327 = v568;
if ( *(_DWORD *)(*(_DWORD *)(v20 + 0xC8) + 4 * v419) == *(_DWORD *)(unit____ + 0xA8) )
sub_8062200(v545, unit____ + 12 * *(_WORD *)(unit____ + 0x110) + 0x114);
}
else
{
LABEL_740:
sub_8062200(v545, unit____ + 12 * *(_WORD *)(unit____ + 0x110) + 0x114);
v416 = sub_8062200(*(_DWORD *)(v490 + 20), v578);
if ( v416 >= (*(_DWORD *)(v20 + 0xCC) - *(_DWORD *)(v20 + 0xC8)) >> 2 )
{
sub_80E86D0(v577, v575);
}
else
{
if ( v416 != -1 )
sub_81374F0(v577, v416, v575);
}
}
LABEL_562:
v327 -= 4;
v328 = v453-- - 1 < 0;
if ( !v328 )
{
v323 = *(_DWORD *)(v473 + 0x24);
continue;
}
break;
}
LABEL_557:
v522 -= 4;
v322 = v510-- - 1 < 0;
if ( !v322 )
{
v319 = *(_DWORD *)(unit__ + 0x204);
continue;
}
break;
}
if ( v533 <= 0 )
{
v438 = *(_WORD *)(unit__ + 0x110);
goto LABEL_46;
}
LABEL_583:
v339 = *(_DWORD *)(v20 + 0x98);
v546 = ((*(_DWORD *)(v20 + 0x9C) - v339) >> 2) - 1;
if ( v546 < 0 )
{
v438 = *(_WORD *)(unit__ + 0x110);
goto LABEL_46;
}
v340 = 4 * v546;
v554 = 4 * v546;
v561 = v20 + 0xC8;
v573 = unit__ + 0xA8;
while ( 2 )
{
v341 = *(_DWORD *)(v339 + v340);
v491 = v341;
if ( *(_BYTE *)(v341 + 16) & 1 )
{
v344 = v341;
v342 = *(_DWORD *)(v341 + 20);
v343 = ((*(_DWORD *)(v344 + 24) - v342) >> 2) - 1;
v454 = v343;
if ( v343 >= 0 )
{
v474 = 4 * v343;
v345 = 4 * v343;
while ( 1 )
{
v347 = *(_DWORD *)(v20 + 0xBC);
v346 = *(_DWORD *)(v20 + 0xC0);
v348 = *(_DWORD *)(v342 + v345);
if ( v347 >= v346 )
goto LABEL_593;
v349 = *(_DWORD *)(v20 + 0xBC);
if ( v348 != *(_DWORD *)v347 )
break;
v350 = 0;
LABEL_607:
if ( *(_DWORD *)(*(_DWORD *)(v20 + 0xC8) + 4 * v350) == *(_DWORD *)(unit__ + 0xA8) )
goto LABEL_593;
v474 -= 4;
v356 = v454-- - 1 < 0;
if ( v356 )
goto LABEL_609;
LABEL_605:
v345 = v474;
v342 = *(_DWORD *)(v491 + 20);
}
while ( 1 )
{
v349 += 4;
if ( v346 <= v349 )
break;
if ( v348 == *(_DWORD *)v349 )
{
v350 = (signed int)(v349 - v347) >> 2;
if ( v350 == -1 )
break;
goto LABEL_607;
}
}
LABEL_593:
if ( (dword_940B1F4 - dword_940B1F0) >> 2 )
{
if ( v348 != -1 )
{
v351 = ((dword_940B1F4 - dword_940B1F0) >> 2) - 1;
if ( v351 >= 0 )
{
v352 = v351 >> 1;
v353 = *(_DWORD *)(*(_DWORD *)(dword_940B1F0 + 4 * (v351 >> 1)) + 20);
v523 = *(_DWORD *)(dword_940B1F0 + 4 * (v351 >> 1));
if ( v348 != v353 )
{
if ( (dword_940B1F4 - dword_940B1F0) >> 2 == 1 )
goto LABEL_604;
v354 = 0;
while ( 1 )
{
if ( v348 < v353 )
{
v351 = v352 - 1;
if ( v354 > v352 - 1 )
goto LABEL_604;
}
else
{
v354 = v352 + 1;
if ( v352 + 1 > v351 )
goto LABEL_604;
}
v352 = (v351 + v354) >> 1;
v353 = *(_DWORD *)(*(_DWORD *)(dword_940B1F0 + 4 * v352) + 20);
if ( v348 == v353 )
break;
if ( v354 == v351 )
goto LABEL_604;
}
v523 = *(_DWORD *)(dword_940B1F0 + 4 * v352);
}
if ( v523 )
{
sub_85D1880(v523, &v597, &v596, &v595);
if ( (unsigned __int8)sub_88D67E0(unit__, v597, v596, v595, 1) )
{
v511 = (*(int (__cdecl **)(int))(*(_DWORD *)v523 + 0x214))(v523);
sub_8062200(v348, unit__ + 12 * *(_WORD *)(unit__ + 0x110) + 276);
v358 = sub_8062200(v348, v20 + 0xBC);
v359 = *(_DWORD *)(v20 + 0xCC);
v360 = *(_DWORD *)(v20 + 0xC8);
if ( v358 >= (*(_DWORD *)(v20 + 0xCC) - v360) >> 2 )
{
if ( v359 == *(_DWORD *)(v20 + 0xD0) )
{
sub_8052120(v561, *(_DWORD *)(v20 + 0xCC), v573);
goto LABEL_620;
}
}
else
{
if ( v358 == -1 )
goto LABEL_620;
v361 = v360 + 4 * v358;
if ( v359 == *(_DWORD *)(v20 + 0xD0) )
{
sub_8052120(v561, v361, v573);
goto LABEL_620;
}
if ( v359 != v361 )
{
v594 = *(_DWORD *)(unit__ + 0xA8);
sub_8053990(v561, v361, &v594);
goto LABEL_620;
}
}
if ( v359 )
*(_DWORD *)v359 = *(_DWORD *)(unit__ + 0xA8);
*(_DWORD *)(v20 + 0xCC) = v359 + 4;
LABEL_620:
v533 -= v511;
if ( v533 <= 0 )
{
v438 = *(_WORD *)(unit__ + 0x110);
goto LABEL_46;
}
goto LABEL_604;
}
}
}
}
}
LABEL_604:
v474 -= 4;
v355 = v454-- - 1 < 0;
if ( v355 )
goto LABEL_609;
goto LABEL_605;
}
}
LABEL_609:
if ( v533 > 0 )
{
v554 -= 4;
v357 = v546-- - 1 < 0;
if ( v357 )
{
v438 = *(_WORD *)(unit__ + 0x110);
goto LABEL_46;
}
v339 = *(_DWORD *)(v20 + 0x98);
v340 = v554;
continue;
}
break;
}
v438 = *(_WORD *)(unit__ + 0x110);
LABEL_46:
if ( v438 != 3 )
{
LABEL_47:
v515 = &v597;
goto LABEL_48;
}
if ( *(_DWORD *)(v536 + 0xA8) == 0xFFFFFFFF )
{
v515 = &v597;
goto LABEL_48;
}
v273 = *(_DWORD *)(unit__ + 0x204);
v274 = ((*(_DWORD *)(unit__ + 0x208) - v273) >> 2) - 1;
v508 = v274;
if ( v274 < 0 )
{
v532 = 25;
goto LABEL_509;
}
v275 = 4 * v274;
v276 = v20 + 0xBC;
v521 = v275;
v532 = 25;
v576 = v20 + 0xBC;
v570 = unit__ + 0xA8;
v574 = v20 + 0xC8;
while ( 2 )
{
if ( (unsigned __int16)(****(int (__fastcall *****)(_DWORD))(v273 + v275))(v276) != 61
|| (v276 = v521,
v280 = **(_DWORD **)(*(_DWORD *)(unit__ + 0x204) + v521),
v471 = **(_DWORD **)(*(_DWORD *)(unit__ + 0x204) + v521),
v281 = *(_DWORD *)(v280 + 0x28),
v278 = *(_DWORD *)(v280 + 0x24),
v279 = ((v281 - v278) >> 2) - 1,
v451 = v279,
v279 < 0) )
goto LABEL_478;
v282 = 4 * v279;
while ( 2 )
{
if ( (*(int (__cdecl **)(_DWORD))(**(_DWORD **)(v278 + v282) + 8))(*(_DWORD *)(v278 + v282)) != 10
|| (v284 = (*(int (__cdecl **)(_DWORD))(**(_DWORD **)(*(_DWORD *)(v471 + 0x24) + v282) + 12))(*(_DWORD *)(*(_DWORD *)(v471 + 0x24) + v282)),
v488 = v284,
!v284)
|| (unsigned __int16)(**(int (__cdecl ***)(_DWORD))v284)(v284) != 38
|| (v286 = (*(int (__cdecl **)(int))(*(_DWORD *)v488 + 0x214))(v488),
v276 = *(_DWORD *)(v20 + 0x98),
v532 -= v286,
v285 = ((*(_DWORD *)(v20 + 156) - v276) >> 2) - 1,
v285 < 0) )
goto LABEL_483;
v287 = 4 * v285;
v551 = v282;
v559 = v20;
v565 = unit__;
while ( 2 )
{
v288 = *(_DWORD *)(v276 + v287);
if ( !(*(_BYTE *)(v288 + 16) & 2)
|| (v289 = *(_DWORD *)(v288 + 20),
v537 = *(_DWORD *)(v488 + 20),
v290 = (*(_DWORD *)(v288 + 24) - v289) >> 2,
!v290)
|| v537 == -1
|| (v291 = v290 - 1, v291 < 0) )
{
LABEL_490:
v287 -= 4;
--v285;
if ( v285 < 0 )
{
v282 = v551;
v20 = v559;
unit__ = v565;
goto LABEL_483;
}
continue;
}
break;
}
v292 = v291 >> 1;
v293 = *(_DWORD *)(v289 + 4 * (v291 >> 1));
if ( v537 != v293 )
{
v543 = 0;
do
{
if ( v537 < v293 )
v291 = v292 - 1;
else
v543 = v292 + 1;
if ( v543 > v291 )
goto LABEL_490;
v292 = (v291 + v543) >> 1;
v293 = *(_DWORD *)(v289 + 4 * v292);
}
while ( v537 != v293 );
}
v20 = v559;
v282 = v551;
unit__ = v565;
v295 = *(_DWORD *)(v559 + 0xBC);
v294 = (*(_DWORD *)(v559 + 0xC0) - v295) >> 2;
if ( v294 )
{
v412 = v294 - 1;
v411 = 0;
v562 = v551;
v556 = v295;
while ( 1 )
{
if ( v411 > v412 )
{
v282 = v562;
goto LABEL_504;
}
v413 = (v412 + v411) >> 1;
v276 = *(_DWORD *)(v488 + 20);
if ( *(_DWORD *)(v556 + 4 * v413) == v537 )
break;
if ( *(_DWORD *)(v556 + 4 * v413) > v537 )
v412 = v413 - 1;
else
v411 = v413 + 1;
}
v282 = v562;
if ( *(_DWORD *)(*(_DWORD *)(v20 + 0xC8) + 4 * v413) == *(_DWORD *)(v565 + 0xA8) )
sub_8062200(v537, v565 + 12 * *(_WORD *)(v565 + 0x110) + 0x114);
}
else
{
LABEL_504:
sub_8062200(v537, v565 + 12 * *(_WORD *)(v565 + 0x110) + 0x114);
v296 = sub_8062200(*(_DWORD *)(v488 + 0x14), v576);
if ( v296 >= (*(_DWORD *)(v20 + 0xCC) - *(_DWORD *)(v20 + 0xC8)) >> 2 )
{
sub_80E86D0(v574, v570);
}
else
{
if ( v296 != -1 )
sub_81374F0(v574, v296, v570);
}
}
LABEL_483:
v282 -= 4;
v283 = v451-- - 1 < 0;
if ( !v283 )
{
v278 = *(_DWORD *)(v471 + 0x24);
continue;
}
break;
}
LABEL_478:
v521 -= 4;
v277 = v508-- - 1 < 0;
if ( !v277 )
{
v273 = *(_DWORD *)(unit__ + 0x204);
v275 = v521;
continue;
}
break;
}
if ( v532 <= 0 )
{
v515 = &v597;
}
else
{
LABEL_509:
v297 = *(_DWORD *)(v20 + 0x98);
v544 = ((*(_DWORD *)(v20 + 0x9C) - v297) >> 2) - 1;
if ( v544 >= 0 )
{
v515 = &v597;
v552 = 4 * v544;
v566 = v20 + 0xC8;
v571 = unit__ + 0xA8;
while ( 1 )
{
v298 = *(_DWORD *)(v297 + v552);
v489 = v298;
if ( *(_BYTE *)(v298 + 16) & 2 )
{
v301 = v298;
v299 = *(_DWORD *)(v298 + 20);
v300 = ((*(_DWORD *)(v301 + 24) - v299) >> 2) - 1;
v452 = v300;
if ( v300 >= 0 )
break;
}
LABEL_535:
if ( v532 <= 0 || (v552 -= 4, v314 = v544 - 1 < 0, --v544, v314) )
goto LABEL_48;
v297 = *(_DWORD *)(v20 + 0x98);
}
v472 = 4 * v300;
v302 = 4 * v300;
while ( 2 )
{
v304 = *(_DWORD *)(v20 + 0xBC);
v303 = *(_DWORD *)(v20 + 0xC0);
v305 = *(_DWORD *)(v299 + v302);
if ( v304 < v303 )
{
v306 = *(_DWORD *)(v20 + 0xBC);
if ( v305 == *(_DWORD *)v304 )
{
v307 = 0;
LABEL_533:
if ( *(_DWORD *)(*(_DWORD *)(v20 + 0xC8) + 4 * v307) != *(_DWORD *)(unit__ + 0xA8) )
{
v472 -= 4;
v313 = v452-- - 1 < 0;
if ( v313 )
goto LABEL_535;
goto LABEL_531;
}
}
else
{
while ( 1 )
{
v306 += 4;
if ( v303 <= v306 )
break;
if ( v305 == *(_DWORD *)v306 )
{
v307 = (signed int)(v306 - v304) >> 2;
if ( v307 == -1 )
break;
goto LABEL_533;
}
}
}
}
if ( (dword_940B1F4 - dword_940B1F0) >> 2 )
{
if ( v305 != -1 )
{
v308 = ((dword_940B1F4 - dword_940B1F0) >> 2) - 1;
if ( v308 >= 0 )
{
v309 = v308 >> 1;
v310 = *(_DWORD *)(*(_DWORD *)(dword_940B1F0 + 4 * (v308 >> 1)) + 20);
v538 = *(_DWORD *)(dword_940B1F0 + 4 * (v308 >> 1));
if ( v305 == v310 )
goto LABEL_539;
if ( (dword_940B1F4 - dword_940B1F0) >> 2 != 1 )
{
v311 = 0;
while ( 1 )
{
if ( v305 < v310 )
{
v308 = v309 - 1;
if ( v311 > v309 - 1 )
goto LABEL_530;
}
else
{
v311 = v309 + 1;
if ( v309 + 1 > v308 )
goto LABEL_530;
}
v309 = (v308 + v311) >> 1;
v310 = *(_DWORD *)(*(_DWORD *)(dword_940B1F0 + 4 * v309) + 20);
if ( v305 == v310 )
break;
if ( v311 == v308 )
goto LABEL_530;
}
v538 = *(_DWORD *)(dword_940B1F0 + 4 * v309);
LABEL_539:
if ( v538 )
{
sub_85D1880(v538, &v595, &v596, &v597);
if ( (unsigned __int8)sub_88D67E0(unit__, v595, v596, v597, 1) )
{
v509 = (*(int (__cdecl **)(int))(*(_DWORD *)v538 + 0x214))(v538);
sub_8062200(v305, unit__ + 12 * *(_WORD *)(unit__ + 0x110) + 0x114);
v315 = sub_8062200(v305, v20 + 0xBC);
v316 = *(_DWORD *)(v20 + 0xCC);
v317 = *(_DWORD *)(v20 + 0xC8);
if ( v315 >= (*(_DWORD *)(v20 + 0xCC) - v317) >> 2 )
{
if ( v316 == *(_DWORD *)(v20 + 0xD0) )
{
sub_8052120(v566, *(_DWORD *)(v20 + 0xCC), v571);
goto LABEL_546;
}
goto LABEL_548;
}
if ( v315 != -1 )
{
v318 = v317 + 4 * v315;
if ( v316 == *(_DWORD *)(v20 + 0xD0) )
{
sub_8052120(v566, v318, v571);
goto LABEL_546;
}
if ( v316 != v318 )
{
v594 = *(_DWORD *)(unit__ + 0xA8);
sub_8053990(v566, v318, &v594);
goto LABEL_546;
}
LABEL_548:
if ( v316 )
*(_DWORD *)v316 = *(_DWORD *)(unit__ + 0xA8);
*(_DWORD *)(v20 + 0xCC) = v316 + 4;
}
LABEL_546:
v532 -= v509;
if ( v532 <= 0 )
goto LABEL_48;
}
}
}
}
}
}
LABEL_530:
v472 -= 4;
v312 = v452-- - 1 < 0;
if ( v312 )
goto LABEL_535;
LABEL_531:
v302 = v472;
v299 = *(_DWORD *)(v489 + 20);
continue;
}
}
v515 = &v597;
}
LABEL_48:
if ( v588 )
operator delete(v588);
if ( v591 )
{
operator delete(v591);
v434 = *(_WORD *)(unit__ + 0x110);
}
else
{
LABEL_262:
v434 = *(_WORD *)(unit__ + 0x110);
}
LABEL_52:
v36 = *(_DWORD *)(unit__ + 0x148);
v581 = 0;
v579 = 0;
v580 = 0;
*(_DWORD *)(unit__ + 0x14C) = v36;
v39 = *(_DWORD *)(unit__ + 12 * v434 + 0x114);
*(_DWORD *)(unit__ + 0x158) = *(_DWORD *)(unit__ + 0x154);
v40 = *(_DWORD *)(unit__ + 12 * v434 + 0x118);
LOBYTE(v597) = 0;
sub_8356370(&v579, 0, (v40 - v39) >> 2, v515);
v37 = v580;
v38 = v579;
v439 = v580 - (_DWORD)v579;
if ( (signed int)(v580 - (_DWORD)v579) > 0 && (unsigned int)v579 < v580 )
{
v42 = v580 - (_DWORD)v579;
v41 = -(signed int)v579 & 0xF;
if ( v580 - (_DWORD)v579 <= v41 )
v41 = v580 - (_DWORD)v579;
if ( !v41 )
{
v43 = v579;
goto LABEL_60;
}
v43 = v579;
v44 = 0;
do
{
++v44;
*(_BYTE *)v43 = 0;
v43 = (char *)v43 + 1;
}
while ( v44 < v41 );
if ( v41 != v42 )
{
LABEL_60:
v46 = v42 - v41;
v479 = v46;
v45 = v46 >> 4;
v461 = 16 * v45;
if ( !(16 * v45) )
goto LABEL_811;
_EDI = (int)((char *)v38 + v41);
v47 = 0;
do
{
_ECX = v47;
__asm { xorps xmm0, xmm0 }
++v47;
_ECX *= 16;
__asm { movaps xmmword ptr [edi+ecx], xmm0 }
}
while ( v45 > v47 );
v43 = (char *)v43 + v461;
if ( v461 != v479 )
{
LABEL_811:
do
{
*(_BYTE *)v43 = 0;
v43 = (char *)v43 + 1;
}
while ( v37 > (unsigned int)v43 );
}
}
}
v50 = *(_DWORD *)(unit__ + 0x204);
v51 = ((*(_DWORD *)(unit__ + 0x208) - v50) >> 2) - 1;
if ( v51 >= 0 )
{
v52 = 4 * v51;
while ( 2 )
{
v54 = *(_DWORD *)(v50 + v52);
v53 = *(_WORD *)(v54 + 4);
if ( v53 == 6 || !*(_WORD *)(v54 + 4) || v53 == 9 )
goto LABEL_78;
if ( (unsigned __int16)(*(int (__cdecl **)(int (__cdecl ***)(_DWORD)))**(int (__cdecl ****)(_DWORD))v54)(*(int (__cdecl ****)(_DWORD))v54) == 81
&& *(_WORD *)(v54 + 4) == 2 )
{
v52 -= 4;
--v51;
if ( v51 < 0 )
break;
goto LABEL_79;
}
if ( (unsigned __int16)(***(int (__cdecl ****)(_DWORD))v54)(*(_DWORD *)v54) == 57 && *(_WORD *)(v54 + 4) == 5
|| (unsigned __int16)(***(int (__cdecl ****)(_DWORD))v54)(*(_DWORD *)v54) == 82 && *(_WORD *)(v54 + 4) == 1
|| (unsigned __int16)(***(int (__cdecl ****)(_DWORD))v54)(*(_DWORD *)v54) == 84 && *(_WORD *)(v54 + 4) == 5 )
{
LABEL_78:
v52 -= 4;
--v51;
if ( v51 < 0 )
break;
LABEL_79:
v50 = *(_DWORD *)(unit__ + 0x204);
continue;
}
break;
}
if ( (unsigned __int16)(***(int (__cdecl ****)(_DWORD))v54)(*(_DWORD *)v54) == 61 )
{
v185 = *(_DWORD *)(*(_DWORD *)v54 + 0x24);
v497 = *(_DWORD *)v54;
v186 = ((*(_DWORD *)(*(_DWORD *)v54 + 0x28) - v185) >> 2) - 1;
v485 = v186;
if ( v186 >= 0 )
{
v467 = 4 * v186;
v187 = 4 * v186;
while ( 1 )
{
if ( (*(int (__cdecl **)(_DWORD))(**(_DWORD **)(v185 + v187) + 8))(*(_DWORD *)(v185 + v187)) == 10 )
{
v189 = (*(int (__fastcall **)(int))(**(_DWORD **)(*(_DWORD *)(v497 + 0x24) + v467) + 12))(v467);
if ( v189 )
{
if ( (unsigned __int16)(**(int (__cdecl ***)(_DWORD))v189)(v189) == 38 )
{
v191 = unit__ + 12 * *(_WORD *)(unit__ + 0x110);
v190 = sub_88B6B90(*(_DWORD *)(v191 + 0x118), *(_DWORD *)(v191 + 0x114));
if ( v190 != -1 )
*((_BYTE *)v579 + v190) = 1;
}
}
}
v467 -= 4;
v188 = v485-- - 1 < 0;
if ( v188 )
break;
v187 = v467;
v185 = *(_DWORD *)(v497 + 0x24);
}
goto LABEL_75;
}
}
else
{
LABEL_75:
v497 = *(_DWORD *)v54;
}
v56 = *(_DWORD *)(v497 + 0x14);
v58 = unit__ + 12 * *(_WORD *)(unit__ + 0x110);
v57 = *(_DWORD *)(v58 + 0x114);
v55 = (*(_DWORD *)(v58 + 0x118) - v57) >> 2;
if ( v55 && v56 != -1 )
{
v429 = 0;
v477 = v55 - 1;
while ( v429 <= v477 )
{
v430 = (v429 + v477) >> 1;
if ( v56 == *(_DWORD *)(v57 + 4 * v430) )
{
*((_BYTE *)v579 + v430) = 1;
goto LABEL_78;
}
if ( v56 >= *(_DWORD *)(v57 + 4 * v430) )
v429 = v430 + 1;
else
v477 = v430 - 1;
}
}
sub_8062200(v56, unit__ + 0x154);
goto LABEL_78;
}
if ( v439 <= 0 )
{
v13 = v579;
}
else
{
v13 = v579;
v59 = 0;
do
{
if ( !*((_BYTE *)v13 + v59) )
{
v60 = *(_DWORD *)(unit__ + 0x14C);
if ( v60 == *(_DWORD *)(unit__ + 0x150) )
{
v51 = *(_DWORD *)(unit__ + 12 * *(_WORD *)(unit__ + 0x110) + 0x114);
sub_8052120(unit__ + 0x148, v60, v51 + 4 * v59);
v13 = v579;
}
else
{
if ( v60 )
*(_DWORD *)v60 = *(_DWORD *)(v51 + 4 * v59);
*(_DWORD *)(unit__ + 0x14C) = v60 + 4;
}
}
++v59;
}
while ( v59 < v439 );
}
*(_DWORD *)(unit__ + 0x144) &= 0xFFFFFFFEu;
if ( v13 )
operator delete(v13);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment