// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool

main()
{
    level.shark_functions = [];
    level.shark_functions["init"] = animscripts\shark\shark_init::main;
    level.shark_functions["move"] = animscripts\shark\shark_move::main;
    level.shark_functions["stop"] = animscripts\shark\shark_stop::main;
    level.shark_functions["pain"] = animscripts\shark\shark_pain::main;
    level.shark_functions["scripted"] = animscripts\shark\shark_scripted::main;
    level.shark_functions["scripted_init"] = animscripts\shark\shark_scripted::init;
    level.shark_functions["reactions"] = animscripts\shark\shark_reactions::main;
    level.shark_functions["flashed"] = animscripts\shark\shark_flashed::main;
    level.shark_functions["death"] = animscripts\shark\shark_death::main;
    level.shark_functions["combat"] = animscripts\shark\shark_combat::main;
    maps\ship_graveyard_util::shark_collision_setup();
    maps\_player_rig::init_player_rig( "viewhands_player_us_udt" );
    maps\_utility::intro_screen_create( &"SHIP_GRAVEYARD_INTROSCREEN_LINE_1", &"SHIP_GRAVEYARD_INTROSCREEN_LINE_2", &"SHIP_GRAVEYARD_INTROSCREEN_LINE_5" );
    maps\_utility::intro_screen_custom_func( ::custom_intro_screen_func );
    level.debris = [ "shpg_machinery_baggage_container_dmg" ];

    foreach ( var_1 in level.debris )
        precachemodel( var_1 );

    precacheitem( "remote_torpedo_tablet" );
    precacheitem( "underwater_torpedo" );
    precachemodel( "vehicle_boat_underneath_1" );
    precachemodel( "vehicle_boat_underneath_2" );
    precachemodel( "vehicle_mini_sub_iw6" );
    precachemodel( "body_seal_udt_dive_a" );
    precachemodel( "vehicle_lcs" );
    precachemodel( "vehicle_lcs_flir" );
    precachemodel( "vehicle_lcs_destroyed_front" );
    precachemodel( "vehicle_lcs_destroyed_back" );
    precachemodel( "shpg_udt_headgear_player_a" );
    precachemodel( "fullbody_tigershark" );
    precachemodel( "vehicle_mi_28_destroyed" );
    precachemodel( "weapon_parabolic_knife" );
    precachemodel( "viewmodel_knife" );
    precachemodel( "com_barrel_benzin2" );
    precachemodel( "shpg_wrkdoor_a1_obj" );
    precachemodel( "shpg_lighthouse_top" );
    precachemodel( "shpg_lighthouse_glass" );
    precachemodel( "shpg_lighthouse_glass_broken" );
    precachemodel( "weapon_underwater_torch" );
    precachemodel( "props_scuba_hose_a" );
    precachemodel( "viewmodel_torpedo" );
    precachemodel( "shpg_dbreach_pipe_a" );
    precachemodel( "shpg_viewmodel_scuba_mask_cr01" );
    precachemodel( "shpg_viewmodel_scuba_mask_cr02" );
    precachemodel( "shpg_viewmodel_scuba_mask_cr03" );
    precachemodel( "viewmodel_underwater_torch" );
    precachemodel( "shpg_wrkdoor_a1_normal" );
    precachemodel( "shpg_wrkdoor_a1_broken01" );
    precachemodel( "shpg_wrkdoor_a1_broken02" );
    precachemodel( "torpedo_crtplane" );
    precachemodel( "shpg_bang_stick" );
    precachemodel( "body_fed_udt_assault_a_ally_trailer" );
    precacheshellshock( "depth_charge_hit" );
    precacheshellshock( "sonar_ping" );
    precacheshellshock( "sonar_ping_light" );
    precacheshellshock( "nearby_crash_underwater" );
    precacheshellshock( "shipg_player_drown" );
    precacherumble( "damage_light" );
    precacherumble( "damage_heavy" );
    precacherumble( "tank_rumble_fading" );
    precacherumble( "subtle_tank_rumble" );
    precacherumble( "littoral_ship_rumble" );
    precacherumble( "heavy_3s" );
    precacherumble( "light_1s" );
    precachestring( &"SHIP_GRAVEYARD_HINT_TORPEDO" );
    precachestring( &"SHIP_GRAVEYARD_HINT_DROWN" );
    precachestring( &"SHIP_GRAVEYARD_HINT_X" );
    precachestring( &"SHIP_GRAVEYARD_HINT_RT" );
    precachestring( &"SHIP_GRAVEYARD_HINT_SPRINT" );
    precachestring( &"SHIP_GRAVEYARD_HINT_DOWN_GAMEPAD" );
    precachestring( &"SHIP_GRAVEYARD_HINT_DOWN_STANCE" );
    precachestring( &"SHIP_GRAVEYARD_HINT_DOWN_CROUCH" );
    precachestring( &"SHIP_GRAVEYARD_HINT_DOWN_HOLD_CROUCH" );
    precachestring( &"SHIP_GRAVEYARD_HINT_UP_GAMEPAD" );
    precachestring( &"SHIP_GRAVEYARD_HINT_UP_STAND" );
    precachestring( &"SHIP_GRAVEYARD_HINT_TRENCH" );
    precachestring( &"SHIP_GRAVEYARD_E3_TIME" );
    precachestring( &"SHIP_GRAVEYARD_HINT_FLASHLIGHT" );
    precachestring( &"SHIP_GRAVEYARD_HINT_WELD" );
    precachestring( &"SHIP_GRAVEYARD_HINT_DIVE" );
    precachestring( &"SHIP_GRAVEYARD_HINT_TGT_NOTFOUND" );
    precachestring( &"SHIP_GRAVEYARD_HINT_TGT_BLOCKED" );
    precacheshader( "gasmask_overlay" );
    precacheshader( "halo_overlay_scuba_steam" );
    precacheshader( "halo_overlay_water" );
    precacheshader( "blank" );
    precacheshader( "overlay_grain" );
    precacheshader( "torpedo_center" );
    precacheshader( "torpedo_centerbox" );
    precacheshader( "torpedo_centerline" );
    precacheshader( "torpedo_databit_1" );
    precacheshader( "torpedo_databit_2" );
    precacheshader( "torpedo_databit_3" );
    precacheshader( "torpedo_frame_center" );
    precacheshader( "torpedo_frame_center_bottom" );
    precacheshader( "torpedo_frame_edge" );
    precacheshader( "torpedo_frame_edge_l" );
    precacheshader( "torpedo_frame_edge_r" );
    precacheshader( "torpedo_frame_lines_ll" );
    precacheshader( "torpedo_frame_lines_lr" );
    precacheshader( "torpedo_frame_lines_ul" );
    precacheshader( "torpedo_frame_lines_ur" );
    precacheshader( "torpedo_horizonline" );
    precacheshader( "torpedo_sidebracket_l" );
    precacheshader( "torpedo_sidebracket_r" );
    precacheshader( "torpedo_connection_bar" );
    precacheshader( "torpedo_connection_frame" );
    precacheshader( "torpedo_connection_text" );
    precacheshader( "apache_targeting_circle" );
    precacheshader( "white" );
    maps\_swim_player::init_player_swim();
    maps\_swim_ai::init_ai_swim();
    maps\_drone_ai::init();
    maps\_utility::template_level( "ship_graveyard" );
    maps\_utility::add_hint_string( "hint_down_gamepad", &"SHIP_GRAVEYARD_HINT_DOWN_GAMEPAD", maps\ship_graveyard_util::hintdown_test );
    maps\_utility::add_hint_string( "hint_down_stance", &"SHIP_GRAVEYARD_HINT_DOWN_STANCE", maps\ship_graveyard_util::hintdown_test );
    maps\_utility::add_hint_string( "hint_down_crouch", &"SHIP_GRAVEYARD_HINT_DOWN_CROUCH", maps\ship_graveyard_util::hintdown_test );
    maps\_utility::add_hint_string( "hint_down_hold_crouch", &"SHIP_GRAVEYARD_HINT_DOWN_HOLD_CROUCH", maps\ship_graveyard_util::hintdown_test );
    maps\_utility::add_hint_string( "hint_up_gamepad", &"SHIP_GRAVEYARD_HINT_UP_GAMEPAD", maps\ship_graveyard_util::hintup_test );
    maps\_utility::add_hint_string( "hint_up_stand", &"SHIP_GRAVEYARD_HINT_UP_STAND", maps\ship_graveyard_util::hintup_test );
    maps\_utility::add_hint_string( "hint_sprint", &"SHIP_GRAVEYARD_HINT_SPRINT", maps\ship_graveyard_util::hintsprint_test );
    maps\_utility::add_hint_string( "hint_flashlight", &"SHIP_GRAVEYARD_HINT_FLASHLIGHT", maps\ship_graveyard_util::hintflashlight_test );
    maps\_utility::add_hint_string( "hint_notfound", &"SHIP_GRAVEYARD_HINT_TGT_NOTFOUND" );
    maps\_utility::add_hint_string( "hint_blocked", &"SHIP_GRAVEYARD_HINT_TGT_BLOCKED" );
    maps\_utility::add_start( "start_tutorial", ::start_tutorial, undefined, ::tutorial_setup );
    maps\_utility::add_start( "start_swim", ::start_swim, undefined, ::intro_setup );
    maps\_utility::add_start( "start_wreck_approach", ::start_wreck_approach, undefined, ::wreck_approach_setup );
    maps\_utility::add_start( "start_small_wreck", ::start_small_wreck, undefined, ::small_wreck_setup );
    maps\_utility::add_start( "start_stealth_1", ::start_stealth_1, undefined, ::stealth_area_1_setup );
    maps\_utility::add_start( "start_stealth_2", ::start_stealth_2, undefined, ::stealth_area_2_setup );
    maps\_utility::add_start( "start_cave", ::start_cave, undefined, ::cave_setup );
    maps\_utility::add_start( "start_sonar", ::start_sonar, undefined, ::sonar_setup );
    maps\_utility::add_start( "start_sonar_mines", ::start_sonar_mines, undefined, ::sonar_mine_setup );
    maps\_utility::add_start( "start_new_trench", ::start_new_trench, undefined, ::new_trench_setup );
    maps\_utility::add_start( "start_new_canyon", ::start_new_canyon, undefined, ::new_canyon_setup );
    maps\_utility::add_start( "start_depth_charges", ::start_depth_charges, undefined, ::depth_charges_setup );
    maps\_utility::add_start( "start_big_wreck", ::start_big_wreck, undefined, ::big_wreck_setup );
    maps\_utility::add_start( "start_big_wreck_2", ::start_big_wreck_2, undefined, ::big_wreck_2_setup );
    maps\_utility::add_start( "end_tunnel_swim", ::start_end_tunnel_swim, undefined, maps\ship_graveyard_code::end_tunnel_swim );
    maps\_utility::add_start( "test_area_1", ::start_test_1, undefined );
    maps\_utility::add_start( "test_area_2", ::start_test_2, undefined );
    maps\_utility::set_default_start( "start_tutorial" );
    maps\ship_graveyard_anim::main();
    maps\_utility::setsaveddvar_cg_ng( "r_specularColorScale", 2.5, 3.5 );

    if ( maps\_utility::is_gen4() )
    {

    }

    if ( getdvar( "createfx", "" ) == "on" )
    {
        level.struct_class_names = undefined;
        common_scripts\utility::struct_class_init();
        var_3 = common_scripts\utility::getstruct( "lighthouse_node", "targetname" );
        var_4 = spawn( "script_model", ( 0, 0, 0 ) );
        var_4 setmodel( "vehicle_lcs_destroyed_front" );
        var_4.animname = "lcs_front";
        var_4 maps\_anim::setanimtree();
        var_5 = spawn( "script_model", ( 0, 0, 0 ) );
        var_5 setmodel( "vehicle_lcs_destroyed_back" );
        var_5.animname = "lcs_back";
        var_5 maps\_anim::setanimtree();
        var_3 maps\_anim::anim_first_frame( [ var_4, var_5 ], "lighthouse_fall" );
        level.struct_class_names = undefined;
    }

    maps\createart\ship_graveyard_art::main();
    maps\ship_graveyard_fx::main();
    maps\ship_graveyard_precache::main();
    thread maps\ship_graveyard_fx::mask_interactives();
    maps\_load::main();

    if ( level.xenon )
        setsaveddvar( "r_texFilterProbeBilinear", 1 );

    if ( !maps\_utility::is_gen4() )
        setsaveddvar( "sm_sunshadowscale", 0.55 );

    if ( maps\_utility::is_gen4() )
    {
        maps\_art::disable_ssao_over_time( 40 );
        setsaveddvar( "r_tessellationFactor", 40 );
    }

    maps\ship_graveyard_audio::main();
    init_level_flags();
    maps\ship_graveyard_util::paired_death_restart();
    thread set_dof_for_player_mask();
    maps\_swim_player::init_player_swim_anims();
    level.water_level_z = common_scripts\utility::get_target_ent( "water_level_org" );
    level.water_level_z = level.water_level_z.origin[2];
    level.default_goalradius = 64;
    maps\ship_graveyard_stealth::stealth_init();
    level.player thread maps\ship_graveyard_stealth::player_stealth();
    level.balloon_count = 0;
    common_scripts\utility::array_thread( getentarray( "salvage_cargo", "script_noteworthy" ), maps\ship_graveyard_util::salvage_cargo_setup );
    common_scripts\utility::array_thread( getentarray( "moveup_when_clear", "targetname" ), maps\ship_graveyard_util::move_up_when_clear );
    common_scripts\utility::array_thread( getentarray( "trigger_depth_charges", "targetname" ), maps\ship_graveyard_util::trigger_depth_charges );
    common_scripts\utility::array_thread( getentarray( "dyn_balloon", "targetname" ), maps\ship_graveyard_util::dyn_balloon_think );
    common_scripts\utility::array_thread( getentarray( "dyn_balloon_new", "targetname" ), maps\ship_graveyard_util::new_dyn_balloon_think );
    common_scripts\utility::array_thread( getentarray( "shark_go", "targetname" ), maps\ship_graveyard_util::shark_go_trig );
    common_scripts\utility::array_thread( getentarray( "trigger_multiple_fx_volume_off", "classname" ), maps\ship_graveyard_util::trigger_multiple_fx_volume_off_target );
    common_scripts\utility::array_thread( getentarray( "cull_trigger", "targetname" ), maps\ship_graveyard_util::cull_trigger_logic );
    maps\_utility::array_spawn_function( vehicle_getspawnerarray(), maps\ship_graveyard_util::vehicle_setup );
    maps\_utility::array_spawn_function( getspawnerarray(), maps\ship_graveyard_util::make_swimmer );
    maps\_utility::array_spawn_function( getspawnerarray(), maps\ship_graveyard_util::add_headlamp );
    maps\_utility::array_spawn_function( getspawnerarray(), maps\ship_graveyard_stealth::ai_stealth_init );
    maps\_utility::array_spawn_function( getspawnerarray(), maps\ship_graveyard_util::track_death );
    maps\_utility::array_spawn_function( getspawnerarray(), maps\ship_graveyard_util::read_parameters );
    maps\_utility::array_spawn_function( getentarray( "actor_test_enemy_shark_dog", "classname" ), maps\ship_graveyard_util::teleport_to_target );
    maps\_utility::array_spawn_function( getentarray( "actor_test_enemy_shark_dog", "classname" ), maps\_swim_ai::underwater_blood );
    maps\_utility::array_spawn_function_noteworthy( "jumper", maps\ship_graveyard_util::jump_into_water );
    maps\_utility::array_spawn_function_noteworthy( "ground_hug_sdv", maps\ship_graveyard_util::sdv_silt_kickup );
    maps\_utility::array_spawn_function_targetname( "sdv_follow", maps\ship_graveyard_code::sdv_follow_spotted_react );
    maps\_utility::array_spawn_function_targetname( "sdv_follow", maps\ship_graveyard_util::sdv_patrol_setup );
    maps\_utility::array_spawn_function_targetname( "sdv_follow", common_scripts\utility::flag_set, "small_wreck_sdv_spawned" );
    maps\_utility::array_spawn_function_targetname( "sdv_follow", maps\ship_graveyard_util::sdv_play_sound_on_entity );
    maps\_utility::array_spawn_function_targetname( "sdv_follow_2", maps\ship_graveyard_util::sdv_patrol_setup );
    maps\_utility::array_spawn_function_targetname( "sdv_follow_2", maps\ship_graveyard_code::sdv_follow_2_passby_audio );
    maps\_utility::array_spawn_function_targetname( "stealth_2_sub_1", maps\ship_graveyard_code::sdv_stealth_2_sub_1_passby_audio );
    maps\_utility::array_spawn_function_targetname( "stealth_2_sub_2", maps\ship_graveyard_code::sdv_stealth_2_sub_2_passby_audio );
    maps\_utility::array_spawn_function_targetname( "a1_patrol_1", maps\ship_graveyard_code::a1_patrol_1_setup );
    maps\_utility::array_spawn_function_targetname( "a1_patrol_2", maps\ship_graveyard_code::a1_patrol_1_setup );
    maps\_utility::array_spawn_function_targetname( "stealth_1_riser", maps\ship_graveyard_util::teleport_to_target );
    maps\_utility::array_spawn_function_targetname( "stealth_1_zodiac", maps\ship_graveyard_code::stealth_1_zodiac_setup );
    maps\_utility::array_spawn_function_targetname( "stealth_1_riser", maps\_utility::set_moveplaybackrate, 0.85 );
    maps\_utility::array_spawn_function_targetname( "stealth_2_guys", maps\ship_graveyard_util::teleport_to_target );
    maps\_utility::array_spawn_function_targetname( "stealth_2_guys_b", maps\ship_graveyard_util::teleport_to_target );
    maps\_utility::array_spawn_function_targetname( "stealth_2_guys_b", maps\ship_graveyard_util::stop_path_on_damage );
    maps\_utility::array_spawn_function_targetname( "stealth_2_backup", maps\ship_graveyard_util::teleport_to_target );
    maps\_utility::array_spawn_function_targetname( "sonar_boat_cave", maps\ship_graveyard_util::littoral_ship_lights );
    maps\_utility::array_spawn_function_targetname( "sonar_boat_cave", maps\ship_graveyard_code::sonar_ping_light_think );
    maps\_utility::array_spawn_function_targetname( "sonar_boat_cave", maps\ship_graveyard_code::sonar_boat_cave_think );
    maps\_utility::array_spawn_function_targetname( "sonar_boat_cave", maps\ship_graveyard_code::sonar_boat_cave_quake );
    maps\_utility::array_spawn_function_targetname( "sonar_boat_cave", maps\ship_graveyard_code::sonar_boat_think );
    maps\_utility::array_spawn_function_targetname( "sonar_boat", maps\ship_graveyard_code::sonar_boat_audio_e3 );
    maps\_utility::array_spawn_function_targetname( "lcs_abovewater", maps\ship_graveyard_util::lcs_intro_setup );
    maps\_utility::array_spawn_function_targetname( "sonar_boat", maps\ship_graveyard_util::lcs_setup );
    maps\_utility::array_spawn_function_targetname( "sonar_boat_cave", maps\ship_graveyard_util::lcs_setup );
    maps\_utility::array_spawn_function_targetname( "sonar_boat_late", maps\ship_graveyard_util::lcs_setup );
    maps\_utility::array_spawn_function_targetname( "intro_shark_model_veh", maps\ship_graveyard_util::shark_vehicle );
    maps\_utility::array_spawn_function_targetname( "big_wreck_shark_model_veh", maps\ship_graveyard_util::shark_vehicle );
    maps\_utility::array_spawn_function_targetname( "nc_enemies_1", maps\ship_graveyard_util::teleport_to_target );
    maps\_utility::array_spawn_function_targetname( "nc_enemies_2", maps\ship_graveyard_util::go_to_nodes_off_sub );
    maps\_utility::array_spawn_function_targetname( "new_canyon_jump_1", maps\ship_graveyard_code::canyon_jumper_setup );
    maps\_utility::array_spawn_function_targetname( "dc_enemies_1", maps\ship_graveyard_util::teleport_to_target );
    maps\_utility::add_earthquake( "small", 0.3, 0.6, 2048 );
    maps\_utility::add_earthquake( "med", 0.6, 0.7, 2048 );
    maps\_utility::add_earthquake( "large", 0.7, 1.4, 2048 );
    maps\ship_graveyard_util::spawn_baker();
    maps\ship_graveyard_util::underwater_setup();
    createthreatbiasgroup( "ignoring_baker" );
    createthreatbiasgroup( "baker" );
    setignoremegroup( "baker", "ignoring_baker" );
    level.baker setthreatbiasgroup( "baker" );
    thread maps\ship_graveyard_code::sonar_wreck_think();
    thread maps\ship_graveyard_code::stealth_2_middle_boat_think();
    thread maps\ship_graveyard_code::baker_weld_door();
    thread maps\ship_graveyard_code::cave_flashlight_logic();
    level.sonar_wreck_crash_after = getentarray( "sonar_wreck_crash_after", "targetname" );
    common_scripts\utility::array_call( level.sonar_wreck_crash_after, ::hide );
    maps\_colors::add_cover_node( "Path 3D" );
    maps\_colors::add_cover_node( "Cover Stand 3D" );
    maps\_colors::add_cover_node( "Cover Right 3D" );
    maps\_colors::add_cover_node( "Cover Left 3D" );
    maps\_colors::add_cover_node( "Cover Up 3D" );
    createthreatbiasgroup( "easy_kills" );
    setthreatbias( "easy_kills", "allies", 500 );
    createthreatbiasgroup( "not_a_threat" );
    setthreatbias( "not_a_threat", "axis", 10 );
    maps\_utility::battlechatter_off( "axis" );
    maps\_utility::battlechatter_off( "allies" );
    level.player notifyonplayercommand( "fire weapon", "+attack" );
    level.player notifyonplayercommand( "fire weapon", "+attack_akimbo_accessible" );
    level.player notifyonplayercommand( "used ads", "+toggleads_throw" );
    level.player notifyonplayercommand( "used ads", "+speed_throw" );
    level.oldff_block = getdvar( "ai_friendlyFireBlockDuration" );
    level.player notifyonplayercommand( "melee_button_pressed", "+melee" );
    level.player notifyonplayercommand( "melee_button_pressed", "+melee_breath" );
    level.player notifyonplayercommand( "melee_button_pressed", "+melee_zoom" );
    level.shark_attack_playbackrate = 6;
    level.player.gs.custombreathingtime = 0.85;
    var_6 = getent( "grab_torpedo", "targetname" );
    var_6 common_scripts\utility::trigger_off();
    setsaveddvar( "r_hudOutlineWidth", 2 );
    setsaveddvar( "r_hudOutlineEnable", 1 );
    common_scripts\utility::create_dvar( "demo_mode", 0 );
    thread objectives();
    level.weld_use_trigger = common_scripts\utility::get_target_ent( "weld_use_trigger" );
    level.weld_use_trigger common_scripts\utility::trigger_off();
    setsaveddvar( "fx_alphathreshold", 5 );
    setdvar( "shpg_torpedo_tries", 0 );

    if ( !maps\_utility::is_gen4() )
    {
        var_7 = getentarray( "trigger_multiple_depthoffield", "classname" );
        common_scripts\utility::array_thread( var_7, common_scripts\utility::trigger_off );
    }
}

objectives()
{
    objective_add( maps\_utility::obj( "1" ), "current", &"SHIP_GRAVEYARD_OBJ_1" );
    common_scripts\utility::flag_wait( "sonar_boat_explode" );
    objective_state( maps\_utility::obj( "1" ), "done" );
    common_scripts\utility::flag_wait( "drown_unlink_player" );
    objective_add( maps\_utility::obj( "2" ), "current", &"SHIP_GRAVEYARD_OBJ_2" );
    common_scripts\utility::flag_wait( "the_end" );
    objective_state( maps\_utility::obj( "2" ), "done" );
}

set_motion_blur()
{
    if ( maps\_utility::is_gen4() )
    {
        setsaveddvar( "r_mbEnable", 2 );
        setsaveddvar( "r_mbCameraRotationInfluence", 2 );
        setsaveddvar( "r_mbCameraTranslationInfluence", 0.01 );
        setsaveddvar( "r_mbModelVelocityScalar", 0.7 );
        setsaveddvar( "r_mbStaticVelocityScalar", 0.2 );
    }
}

set_dof_for_player_mask()
{
    if ( maps\_utility::is_gen4() )
    {
        level.player setviewmodeldepthoffield( 0, 17.0112 );
        level.player enableforceviewmodeldof();
    }
}

custom_intro_screen_func()
{
    common_scripts\utility::flag_wait( "start_swim" );
    wait 6;
    maps\_introscreen::introscreen( 1 );
}

init_level_flags()
{
    common_scripts\utility::flag_init( "pause_dynamic_dof" );
    common_scripts\utility::flag_init( "greenlight_next_phase" );
    common_scripts\utility::flag_init( "start_swim" );
    common_scripts\utility::flag_init( "baker_at_wreck" );
    common_scripts\utility::flag_init( "wreck_approach_guys_dead" );
    common_scripts\utility::flag_init( "clear_to_enter_wreck" );
    common_scripts\utility::flag_init( "small_wreck_sdv_spawned" );
    common_scripts\utility::flag_init( "baker_at_small_wreck" );
    common_scripts\utility::flag_init( "move_to_stealth_1" );
    common_scripts\utility::flag_init( "clear_to_enter_cave" );
    common_scripts\utility::flag_init( "cave_sonar" );
    common_scripts\utility::flag_init( "start_sonar_pings" );
    common_scripts\utility::flag_init( "sonar_clear_to_go" );
    common_scripts\utility::flag_init( "welding_done" );
    common_scripts\utility::flag_init( "start_trench" );
    common_scripts\utility::flag_init( "start_big_wreck" );
    common_scripts\utility::flag_init( "depth_charge_muffle" );
    common_scripts\utility::flag_init( "sonar_boat_explode" );
    common_scripts\utility::flag_init( "mine_moveup" );
    common_scripts\utility::flag_init( "first_damage_state" );
    common_scripts\utility::flag_init( "wreck_tilt" );
    common_scripts\utility::flag_init( "pause_sonar_pings" );
    common_scripts\utility::flag_init( "baker_ready_at_sharks" );
    common_scripts\utility::flag_init( "start_new_trench" );
    common_scripts\utility::flag_init( "trench_allow_things_to_crash" );
    common_scripts\utility::flag_init( "shark_a_clear" );
    common_scripts\utility::flag_init( "shark_b_clear" );
    common_scripts\utility::flag_init( "shark_a_clear_comeback" );
    common_scripts\utility::flag_init( "shark_b_clear_comeback" );
    common_scripts\utility::flag_init( "shark_b_clear_2" );
    common_scripts\utility::flag_init( "shark_room_player_can_go" );
    common_scripts\utility::flag_init( "shark_eating_player" );
    common_scripts\utility::flag_init( "shark_always_eat_front" );
    common_scripts\utility::flag_init( "player_can_rise" );
    common_scripts\utility::flag_init( "player_can_fall" );
    common_scripts\utility::flag_init( "player_can_sprint" );
    common_scripts\utility::flag_init( "ai_ready_to_weld" );
    common_scripts\utility::flag_init( "player_ready_to_weld" );
    common_scripts\utility::flag_init( "player_on_torpedo" );
    common_scripts\utility::flag_init( "player_holding_torpedo" );
    common_scripts\utility::flag_init( "go_to_surface" );
    common_scripts\utility::flag_init( "baker_past_sharks" );
    common_scripts\utility::flag_init( "baker_prepare_to_leave_flag" );
    common_scripts\utility::flag_init( "player_warp_hesh" );
    common_scripts\utility::flag_init( "grabbed_torpedo" );
    common_scripts\utility::flag_init( "go_into_cave_vo" );
    common_scripts\utility::flag_init( "to_cave_vo_begin" );
    common_scripts\utility::flag_init( "stop_npc_weld_sfx_loop" );
    common_scripts\utility::flag_init( "stop_player_weld_sfx_loop" );
    common_scripts\utility::flag_init( "fade_sound_player_torch1" );
    common_scripts\utility::flag_init( "fade_sound_player_torch2" );
    common_scripts\utility::flag_init( "fade_sound_player_torch3" );
    common_scripts\utility::flag_init( "fade_sound_player_torch4" );
    common_scripts\utility::flag_init( "fade_sound_player_torch5" );
    common_scripts\utility::flag_init( "big_wreck_wait_turnaround" );
    common_scripts\utility::flag_init( "turn_on_bubbles_after_torpedo" );
    common_scripts\utility::flag_init( "torpedo_out" );
    common_scripts\utility::flag_init( "player_chose_auto" );
    common_scripts\utility::flag_init( "picked_torpedo_mode" );
    common_scripts\utility::flag_init( "wreck_jumpers_alive" );
    common_scripts\utility::flag_init( "wreck_patrol_in" );
    common_scripts\utility::flag_init( "exiting_to_end" );
    common_scripts\utility::flag_init( "spotted_at_wreck" );
    common_scripts\utility::flag_init( "end_of_cave_path" );
    common_scripts\utility::flag_init( "stealth2_approach_guys_damaged" );
    level.deadly_sharks = [];
}

start_test_1()
{
    maps\ship_graveyard_util::set_start_positions( "test_area_1" );
    common_scripts\utility::flag_set( "start_swim" );
    maps\_vehicle::spawn_vehicle_from_targetname_and_drive( "test_sub" );
}

start_test_2()
{
    maps\ship_graveyard_util::set_start_positions( "shoot_mines" );
    common_scripts\utility::flag_set( "start_swim" );
    level.player maps\_utility::vision_set_fog_changes( "shpg_lcs_detonation", 1 );
    thread lcs_exploder_loop();
}

lcs_exploder_loop()
{
    for (;;)
    {
        common_scripts\utility::exploder( "lighthouse_lcs_detonation" );
        wait 5;
    }
}

start_test_above_1()
{
    maps\ship_graveyard_util::set_start_positions( "test_abovewater_start" );
}

start_test_above_2()
{
    maps\ship_graveyard_util::set_start_positions( "test_abovewater_start" );
    level.player disableweapons();
    level.player allowcrouch( 0 );
    level.player allowprone( 0 );
    level.player allowjump( 0 );
    level.player maps\_utility::player_speed_percent( 10, 0.1 );
    level.baker maps\_utility::set_generic_idle_anim( "surface_swim_idle" );
    level.player_view_pitch_down = getdvar( "player_view_pitch_down" );
    level.player maps\_underwater::player_scuba_mask();
    setsaveddvar( "player_view_pitch_down", 5 );
    level.player enableslowaim( 0.5, 0.5 );
    var_0 = getentarray( "bobbing_object", "targetname" );
    common_scripts\utility::array_thread( var_0, maps\ship_graveyard_surface::pitch_and_roll );
    level.ground_ref_ent = common_scripts\utility::spawn_tag_origin();
    level.player playersetgroundreferenceent( level.ground_ref_ent );
    level.ground_ref_ent.script_max_left_angle = 8;
    level.ground_ref_ent.script_duration = 2;
    level.ground_ref_ent thread maps\ship_graveyard_surface::pitch_and_roll();
    var_1 = common_scripts\utility::get_target_ent( "start_fishing_boat" );
    var_1.script_max_left_angle = 8;
    var_1.script_duration = 4;
    var_1 thread maps\ship_graveyard_surface::pitch_and_roll();
    wait 0.1;
    level.player freezecontrols( 0 );
}

start_greenlight()
{
    maps\_hud_util::start_overlay( "black" );
    setdvar( "greenlight", 1 );
    maps\ship_graveyard_util::set_start_positions( "start_tutorial" );
    common_scripts\utility::flag_set( "start_swim" );
}

start_tutorial()
{
    maps\_hud_util::start_overlay( "white" );
    setdvar( "greenlight", 0 );
    maps\ship_graveyard_util::set_start_positions( "start_tutorial" );
    common_scripts\utility::flag_set( "start_swim" );
}

start_swim()
{
    maps\ship_graveyard_util::set_start_positions( "start_swim" );
    common_scripts\utility::flag_set( "start_swim" );
}

start_wreck_approach()
{
    maps\ship_graveyard_util::set_start_positions( "start_wreck_approach" );
    common_scripts\utility::flag_set( "start_swim" );
    thread maps\ship_graveyard_code::wreck_zodiac_event();
    wait 1;

    while ( distance2d( level.player.origin, level.baker.origin ) < 300 )
        wait 0.05;

    common_scripts\utility::flag_set( "baker_at_wreck" );
}

start_small_wreck()
{
    maps\ship_graveyard_util::set_start_positions( "start_small_wreck" );
    common_scripts\utility::flag_set( "start_swim" );
    common_scripts\utility::flag_set( "clear_to_enter_wreck" );
}

start_stealth_1()
{
    maps\ship_graveyard_util::set_start_positions( "stealth_area_1" );
    common_scripts\utility::flag_set( "start_swim" );
    common_scripts\utility::flag_set( "move_to_stealth_1" );
    level.baker thread maps\_utility::follow_path_and_animate( common_scripts\utility::get_target_ent( "baker_stealth_1_path" ) );
}

start_stealth_2()
{
    maps\ship_graveyard_util::set_start_positions( "stealth_area_2" );
    common_scripts\utility::flag_set( "start_swim" );
    thread maps\ship_graveyard_code::baker_move_to_stealth_2();
}

start_cave()
{
    maps\ship_graveyard_util::set_start_positions( "cave_event" );
    common_scripts\utility::flag_set( "start_swim" );
    common_scripts\utility::flag_set( "clear_to_enter_cave" );
}

start_sonar()
{
    maps\ship_graveyard_util::set_start_positions( "sonar_event" );
    common_scripts\utility::flag_set( "start_swim" );
    common_scripts\utility::flag_set( "inside_cave" );
    common_scripts\utility::flag_set( "end_of_cave_path" );
    thread maps\ship_graveyard_code::sonar_boat_e3();
}

start_sonar_mines()
{
    maps\ship_graveyard_util::set_start_positions( "shoot_mines" );
    common_scripts\utility::flag_set( "start_swim" );
    common_scripts\utility::flag_set( "sonar_clear_to_go" );
    maps\_utility::delaythread( 1, common_scripts\utility::flag_clear, "sonar_clear_to_go" );
    var_0 = maps\_vehicle::spawn_vehicle_from_targetname( "sonar_boat_late" );
    var_0 thread maps\ship_graveyard_util::littoral_ship_lights();
    level.sonar_boat = var_0;
}

start_trench()
{
    maps\ship_graveyard_util::set_start_positions( "trench" );
    common_scripts\utility::flag_set( "start_swim" );
    thread maps\_hud_util::fade_out( 0 );
    maps\_utility::delaythread( 0.2, common_scripts\utility::flag_set, "start_trench" );
}

start_canyon()
{
    maps\ship_graveyard_util::set_start_positions( "canyon" );
    common_scripts\utility::flag_set( "start_swim" );
    maps\ship_graveyard_stealth::stealth_disable();
}

start_big_wreck()
{
    maps\ship_graveyard_util::set_start_positions( "big_wreck" );
    common_scripts\utility::flag_set( "start_swim" );
    maps\ship_graveyard_stealth::stealth_disable();
    level.baker.moveplaybackrate = 1.5;
    level.baker.movetransitionrate = level.baker.moveplaybackrate;
    level.baker thread maps\_utility::follow_path_and_animate( common_scripts\utility::get_target_ent( "baker_enter_big_wreck_middle" ) );
}

start_big_wreck_2()
{
    maps\ship_graveyard_util::set_start_positions( "big_wreck_2" );
    common_scripts\utility::flag_set( "start_swim" );
    common_scripts\utility::flag_set( "inside_big_wreck" );
    maps\ship_graveyard_stealth::stealth_disable();
    level.baker.moveplaybackrate = 1;
    level.baker.movetransitionrate = level.baker.moveplaybackrate;
    var_0 = common_scripts\utility::get_target_ent( "dead_body_spawner" );
    var_0 thread maps\ship_graveyard_util::dead_body_spawner();
    thread maps\ship_graveyard_code::big_wreck_fake_shake();
}

start_new_trench()
{
    maps\ship_graveyard_util::set_start_positions( "new_trench" );
    common_scripts\utility::flag_set( "start_swim" );
    thread maps\_hud_util::fade_out( 0 );
    maps\_utility::delaythread( 0.2, common_scripts\utility::flag_set, "start_new_trench" );
}

start_new_canyon()
{
    maps\ship_graveyard_util::set_start_positions( "new_canyon" );
    common_scripts\utility::flag_set( "start_swim" );
    maps\ship_graveyard_stealth::stealth_disable();
    level.baker thread maps\_utility::follow_path_and_animate( common_scripts\utility::get_target_ent( "new_canyon_start_path" ), 0 );
}

start_depth_charges()
{
    maps\ship_graveyard_util::set_start_positions( "depth_charges" );
    common_scripts\utility::flag_set( "start_swim" );
    maps\ship_graveyard_stealth::stealth_disable();
    level.baker maps\_utility::set_force_color( "r" );
}

start_end_tunnel_swim()
{
    maps\ship_graveyard_util::set_start_positions( "end_tunnel_swim" );
    common_scripts\utility::flag_set( "start_swim" );
    maps\ship_graveyard_stealth::stealth_disable();
    thread maps\_utility::music_play( "mus_shipgrave_collapse_travel" );
    level.baker.goalradius = 128;
    level.baker.moveplaybackrate = 1.1;
    level.baker.movetransitionrate = level.baker.moveplaybackrate;
    level.baker.pathrandompercent = 0;
    level.baker maps\_utility::disable_exits();
    level.baker thread maps\_anim::anim_generic_run( level.baker, "swimming_idle_to_aiming_move_180" );
    wait 0.5;
    level.baker thread maps\ship_graveyard_util::dyn_swimspeed_enable();
    level.baker thread maps\_utility::follow_path_and_animate( common_scripts\utility::get_target_ent( "baker_end_level_path_start" ) );
    level.baker maps\_utility::delaythread( 2, maps\_utility::enable_exits );
    thread maps\ship_graveyard_code::end_dialogue();
    thread maps\ship_graveyard_code::depth_charge_death();
}

start_end_surface()
{
    maps\ship_graveyard_util::set_start_positions( "end_tunnel_above_surface" );
    maps\ship_graveyard_stealth::stealth_disable();
    common_scripts\utility::flag_set( "go_to_surface" );
}

above_water_start_setup()
{
    maps\ship_graveyard_surface::main();
}

tutorial_setup()
{
    common_scripts\utility::flag_wait( "start_swim" );
    level.player maps\_utility::vision_set_fog_changes( "", 0.1 );
    thread common_scripts\utility::play_sound_in_space( "scn_player_dive_in_e3", level.player.origin );
    level.player unlink();
    level.baker unlink();
    level.baker maps\_utility::anim_stopanimscripted();
    level.baker notify( "kill surface unlink" );

    if ( isdefined( level.player_rig ) )
        level.player_rig delete();

    setsaveddvar( "player_swimSpeed", 75 );
    level.player disableweapons();
    wait 0.1;
    thread maps\ship_graveyard_code::wreck_zodiac_event();
    thread give_back_aim_over_time();
    wait 0.1;
    thread maps\ship_graveyard_code::tutorial_player_recover();
    wait 0.1;
    thread maps\ship_graveyard_code::intro_track_player_gunfire();
    thread maps\ship_graveyard_util::sardines_path_sound( "sardines_first_path" );
    level.player setwatersheeting( 1, 2 );
    maps\_hud_util::fade_in( 1, "white" );
    level.baker.goalradius = 128;
    level.baker.goalheight = 128;
    level.baker.moveplaybackrate = 1;
    level.baker thread maps\_utility::follow_path_and_animate( common_scripts\utility::get_target_ent( "tutorial_path" ) );
    wait 3;
    maps\_utility::smart_radio_dialogue( "shipg_hsh_descending" );
    wait 1.5;
    level.baker.moveplaybackrate = 0.8;
    maps\_utility::smart_radio_dialogue( "shipg_hsh_fiftymeters" );
    wait 3;
    maps\ship_graveyard_util::baker_glint_on();
    maps\_utility::smart_radio_dialogue( "shipg_bkr_approach" );
    thread maps\_utility::music_play( "mus_shipgrave_stealth1" );
    level.baker.moveplaybackrate = 1;
    level notify( "disable_tutorial_slow_aim" );
    level.player disableslowaim();
    level.shark_heartbeat_distances = [ 650, 250, 200, 150 ];
}

give_back_aim_over_time()
{
    level endon( "disable_tutorial_slow_aim" );
    level.player enableslowaim( 0.1, 0.1 );
    wait 3;
    var_0 = 0;

    while ( var_0 < 1 )
    {
        level.player enableslowaim( var_0, var_0 );
        var_0 = var_0 + 0.01;
        wait 0.15;
    }
}

fade_in_blue( var_0, var_1 )
{
    var_2 = maps\_hud_util::get_optional_overlay( var_1 );
    var_2 fadeovertime( var_0 );
    var_2.color = ( 0, 0, 0.4 );
    var_2.alpha = 0;
}

intro_setup()
{
    common_scripts\utility::flag_wait( "start_intro" );
    level.baker.moveplaybackrate = 1;
    level.baker.movetransitionrate = level.baker.moveplaybackrate;
    level.baker thread maps\ship_graveyard_util::dyn_swimspeed_enable();
    thread maps\ship_graveyard_code::intro_dialgue();
    thread maps\ship_graveyard_code::baker_path_to_wreck();
}

wreck_approach_setup()
{
    level endon( "stop_for_e3" );
    common_scripts\utility::flag_wait( "start_small_wreck" );

    if ( maps\_utility::is_gen4() )
        thread maps\_utility::lerp_saveddvar( "r_tessellationFactor", 60, 8 );

    common_scripts\utility::flag_clear( "allow_killfirms" );
    thread maps\ship_graveyard_util::delete_fish_in_volume( "fish_start_area" );
    level.shark_heartbeat_distances = [ 400, 250, 200, 150 ];
    thread maps\ship_graveyard_code::baker_approach();
    thread maps\ship_graveyard_code::baker_wreck_cleanup();
    thread maps\ship_graveyard_code::baker_enter_wreck();
    thread maps\ship_graveyard_code::wreck_hint_up();
}

small_wreck_setup()
{
    level endon( "stop_for_e3" );
    common_scripts\utility::flag_wait( "entering_small_wreck" );
    thread maps\ship_graveyard_code::wreck_spotted_reaction();
    thread maps\ship_graveyard_code::wreck_cargo_surprise();
    thread maps\ship_graveyard_code::transition_to_stealth_1();
}

stealth_area_1_setup()
{
    level endon( "stop_for_e3" );

    if ( maps\ship_graveyard_util::greenlight_check() )
        return;

    common_scripts\utility::flag_wait( "start_stealth_area_1" );
    level.baker maps\ship_graveyard_util::dyn_swimspeed_disable();
    common_scripts\utility::flag_set( "allow_killfirms" );
    maps\_utility::delaythread( 1, common_scripts\utility::flag_clear, "no_shark_heartbeat" );
    maps\_vehicle::spawn_vehicle_from_targetname_and_drive( "sdv_follow_2" );
    thread maps\ship_graveyard_code::stealth_1_encounter();
    thread maps\ship_graveyard_code::stealth_1_dialogue();
}

stealth_area_2_setup()
{
    level endon( "stop_for_e3" );

    if ( maps\ship_graveyard_util::greenlight_check() )
        return;

    common_scripts\utility::flag_wait( "start_stealth_area_2" );
    maps\_utility::autosave_stealth();
    thread maps\ship_graveyard_code::stealth_2_encounter();
    thread maps\ship_graveyard_code::stealth_2_dialogue();
}

cave_setup()
{
    level endon( "stop_for_e3" );

    if ( maps\ship_graveyard_util::greenlight_check() )
        return;

    common_scripts\utility::flag_wait_any( "clear_to_enter_cave", "cave_sonar" );
    maps\_utility::autosave_stealth();

    if ( common_scripts\utility::flag( "cave_sonar" ) )
    {
        var_0 = getaiarray( "axis" );

        foreach ( var_2 in var_0 )
            var_2 kill();
    }

    level.baker.moveplaybackrate = 1;
    level.baker.movetransitionrate = level.baker.moveplaybackrate;
    thread maps\ship_graveyard_code::cave_dialogue();
    thread maps\ship_graveyard_code::sonar_approach();
    thread maps\ship_graveyard_code::cave_dust();
    thread setup_lcs_audio();
}

setup_lcs_audio()
{
    common_scripts\utility::flag_wait( "cave_sonar" );
    thread maps\ship_graveyard_code::sonar_boat_audio();
    thread maps\ship_graveyard_code::sonar_boat_one_shot_audio();
}

sonar_setup()
{
    common_scripts\utility::flag_wait( "start_sonar" );

    foreach ( var_1 in level.deadly_sharks )
        var_1 delete();

    var_3 = maps\_utility::getvehiclearray();

    foreach ( var_5 in var_3 )
    {
        if ( var_5.vehicletype != "lcs" )
            var_5 delete();
    }

    level.baker.pathrandompercent = 0;
    setsaveddvar( "glass_linear_vel", "100 300" );
    thread maps\ship_graveyard_code::first_sonar_ping();
    thread maps\ship_graveyard_code::weaponized_sonar_pings();
    thread maps\ship_graveyard_code::sonar_door_think();
    thread maps\ship_graveyard_util::sardines_path_sound( "lighthouse_sardines", "scn_fish_swim_away_lighthouse" );
}

sonar_mine_setup()
{
    common_scripts\utility::flag_wait( "start_sonar_mines" );
    setdvar( "shpg_torpedo_tries", 0 );
    common_scripts\utility::array_thread( getentarray( "dyn_balloon", "targetname" ), maps\ship_graveyard_util::dyn_balloon_delete );
    thread maps\ship_graveyard_code::torpedo_the_ship();
    common_scripts\utility::waitframe();

    if ( maps\ship_graveyard_code::player_safe_from_sonar() )
    {
        level.sonar_times_hit = 0;
        maps\_utility::autosave_by_name( "sonar_mines" );
    }
}

new_trench_setup()
{
    common_scripts\utility::flag_wait( "start_new_trench" );
    thread maps\ship_graveyard_util::delete_fish_in_volume( "area_1_fx_vol" );
    level.player setclienttriggeraudiozone( "ship_graveyard_rescue", 6 );
    setsaveddvar( "ai_friendlyFireBlockDuration", 0 );
    thread maps\ship_graveyard_new_trench::main();
    thread maps\ship_graveyard_code::base_alarm();
    thread maps\ship_graveyard_util::sardines_path_sound( "sardines_after_helicrash", "scn_fish_swim_away_silent" );
}

new_canyon_setup()
{
    common_scripts\utility::flag_wait( "start_new_canyon" );
    setsaveddvar( "ai_friendlyFireBlockDuration", level.oldff_block );
    thread maps\ship_graveyard_new_trench::canyon_main();
}

depth_charges_setup()
{
    common_scripts\utility::flag_wait( "start_depth_charges" );
    setsaveddvar( "ai_friendlyFireBlockDuration", 0 );
    level.baker.baseaccuracy = 3;
    thread maps\ship_graveyard_code::depth_charges();
    thread maps\ship_graveyard_code::boat_fall_trigs();
    thread maps\ship_graveyard_util::sardines_path_sound( "sardines_depthcharges_path", "scn_fish_swim_away_silent" );
}

big_wreck_setup()
{
    common_scripts\utility::flag_wait( "start_big_wreck" );

    foreach ( var_1 in level.deadly_sharks )
        var_1 delete();

    level.deadly_sharks = [];
    setsaveddvar( "glass_linear_vel", "20 40" );
    common_scripts\utility::flag_clear( "_stealth_spotted" );
    setsaveddvar( "player_swimSpeed", 75 );
    common_scripts\utility::flag_set( "depth_charge_muffle" );
    common_scripts\utility::flag_set( "shark_always_eat_front" );
    level.baker.moveplaybackrate = 1;
    level.baker.movetransitionrate = level.baker.moveplaybackrate;
    var_3 = common_scripts\utility::get_target_ent( "dead_body_spawner" );
    var_3 thread maps\ship_graveyard_util::dead_body_spawner();

    if ( maps\_utility::is_gen4() )
    {
        thread maps\_utility::lerp_saveddvar( "r_tessellationFactor", 25, 10 );
        thread maps\_art::tess_set_goal( 300, 300, 1 );
    }

    thread maps\ship_graveyard_code::big_wreck_dialogue();
    thread maps\ship_graveyard_code::big_wreck_fake_shake();
    thread maps\ship_graveyard_code::big_wreck_kill_when_outside();
    thread maps\ship_graveyard_code::big_wreck_baker_stealth();
}

big_wreck_2_setup()
{
    level.baker maps\_utility::set_battlechatter( 0 );
    thread maps\ship_graveyard_code::big_wreck_shark();
    thread maps\ship_graveyard_code::shark_room();
    common_scripts\utility::flag_wait( "start_big_wreck_2" );
    common_scripts\utility::flag_set( "shark_always_eat_front" );
    maps\_utility::autosave_stealth();
    setsaveddvar( "player_swimVerticalSpeed", 55 );
    thread maps\ship_graveyard_code::big_wreck_2_dialogue();
    thread maps\ship_graveyard_code::big_wreck_collapse();
    common_scripts\utility::flag_wait( "player_past_sharks" );
    setsaveddvar( "glass_linear_vel", "100 300" );
    common_scripts\utility::flag_clear( "depth_charge_muffle" );
    wait 1;
    thread maps\ship_graveyard_code::random_depth_charges( "depth_charge_constant_2", 4, 8 );
}
