diff --git a/.drone.yml b/.drone.yml index 290a101b249..86a43d08e3c 100644 --- a/.drone.yml +++ b/.drone.yml @@ -52,7 +52,7 @@ steps: image: node:10-buster commands: - cd vueui - - npm install # TODO: Cache that shit + - npm install - (npm run lint | tee lint.log) - grep "No lint errors found!" lint.log - npm run build @@ -119,6 +119,9 @@ kind: pipeline type: docker name: dm-aurora +node: + k: y + clone: depth: 50 @@ -146,6 +149,9 @@ kind: pipeline type: docker name: dm-exodus +node: + k: y + clone: depth: 50 @@ -170,6 +176,6 @@ steps: - echo "Unit Tests Completed" --- kind: signature -hmac: 786139dfd954616bf68bb0f31c69be9b93b2440468056be8a4a7c36704733890 +hmac: cec2335f99d83072683a7556eedb55e3c2e54463d9263e01ad72d8312ec90c24 ... diff --git a/.github/workflows/maintenance.yml b/.github/workflows/maintenance.yml new file mode 100644 index 00000000000..a1ef3a8fe44 --- /dev/null +++ b/.github/workflows/maintenance.yml @@ -0,0 +1,20 @@ +name: "Maintenance" +on: + # So that PRs touching the same files as the push are updated + push: + # So that the `dirtyLabel` is removed if conflicts are resolve + # We recommend `pull_request_target` so that github secrets are available. + # In `pull_request` we wouldn't be able to change labels of fork PRs + pull_request_target: + types: [synchronize] + +jobs: + main: + runs-on: ubuntu-latest + steps: + - name: check if prs are dirty + uses: eps1lon/actions-label-merge-conflict@releases/2.x + with: + dirtyLabel: "Merge Conflict" + repoToken: "${{ secrets.GITHUB_TOKEN }}" + commentOnDirty: "This pull request has conflicts, please resolve those before we can evaluate the pull request." diff --git a/.gitignore b/.gitignore index a233a2a2a2b..20e6a5b53aa 100644 --- a/.gitignore +++ b/.gitignore @@ -17,4 +17,4 @@ __pycache__/ *$py.class /.atom-build.json .vscode/ -.vs/ +.vs/ \ No newline at end of file diff --git a/SQL/migrate/V064__notification_length_update.sql b/SQL/migrate/V064__notification_length_update.sql new file mode 100644 index 00000000000..98a6b3afbe5 --- /dev/null +++ b/SQL/migrate/V064__notification_length_update.sql @@ -0,0 +1,6 @@ +-- +-- Increase the message length of the ss13_player_notifications +-- + +ALTER TABLE `ss13_player_notifications` + CHANGE COLUMN `message` `message` MEDIUMTEXT NOT NULL COLLATE 'utf8mb4_unicode_ci' AFTER `type`; diff --git a/SQL/migrate/V065__plural_pronouns.sql b/SQL/migrate/V065__plural_pronouns.sql new file mode 100644 index 00000000000..20bcaa0d123 --- /dev/null +++ b/SQL/migrate/V065__plural_pronouns.sql @@ -0,0 +1,7 @@ +-- +-- Implemented in PR #11207. +-- Adds the ability for players to select their character's pronouns, only affects what gender they appear as when examined and in visible messages. +-- + +ALTER TABLE `ss13_characters` + ADD COLUMN `pronouns` varchar(12) DEFAULT NULL AFTER `gender` \ No newline at end of file diff --git a/SQL/migrate/V066__preference_hotkey_on.sql b/SQL/migrate/V066__preference_hotkey_on.sql new file mode 100644 index 00000000000..dc9636f260e --- /dev/null +++ b/SQL/migrate/V066__preference_hotkey_on.sql @@ -0,0 +1,5 @@ +-- +-- Set default 'On' for 'HOTKEY_DEFAULT in toggles_secondary' +-- + +UPDATE `ss13_player_preferences` SET `toggles_secondary` = `toggles_secondary` | 32; \ No newline at end of file diff --git a/SpacemanDMM.toml b/SpacemanDMM.toml new file mode 100644 index 00000000000..dce31e0d22b --- /dev/null +++ b/SpacemanDMM.toml @@ -0,0 +1,2 @@ +[debugger] +engine = "auxtools" diff --git a/aurorastation.dme b/aurorastation.dme index d4ffabf8571..18ea3776d91 100644 --- a/aurorastation.dme +++ b/aurorastation.dme @@ -24,6 +24,7 @@ #include "code\__defines\antagonist.dm" #include "code\__defines\armor.dm" #include "code\__defines\atmos.dm" +#include "code\__defines\auxtools.dm" #include "code\__defines\battle_monsters.dm" #include "code\__defines\callback.dm" #include "code\__defines\chemistry.dm" @@ -119,6 +120,8 @@ #include "code\_onclick\hud\_defines.dm" #include "code\_onclick\hud\action.dm" #include "code\_onclick\hud\ai.dm" +#include "code\_onclick\hud\borer_hud.dm" +#include "code\_onclick\hud\captive_brain_hud.dm" #include "code\_onclick\hud\fullscreen.dm" #include "code\_onclick\hud\gun_mode.dm" #include "code\_onclick\hud\hud.dm" @@ -134,6 +137,7 @@ #include "code\_onclick\hud\screen_objects.dm" #include "code\_onclick\hud\spell_screen_objects.dm" #include "code\_onclick\hud\screen_object_types\ai_screen_objs.dm" +#include "code\_onclick\hud\screen_object_types\borer.dm" #include "code\_onclick\hud\screen_object_types\internals.dm" #include "code\_onclick\hud\screen_object_types\vampire.dm" #include "code\ATMOSPHERICS\_atmos_setup.dm" @@ -235,7 +239,6 @@ #include "code\controllers\subsystems\ticker.dm" #include "code\controllers\subsystems\timer.dm" #include "code\controllers\subsystems\trade.dm" -#include "code\controllers\subsystems\traumas.dm" #include "code\controllers\subsystems\virtual_reality.dm" #include "code\controllers\subsystems\vote.dm" #include "code\controllers\subsystems\zcopy.dm" @@ -282,13 +285,6 @@ #include "code\datums\records.dm" #include "code\datums\statistic.dm" #include "code\datums\weakref.dm" -#include "code\datums\brain_damage\brain_trauma.dm" -#include "code\datums\brain_damage\imaginary_friend.dm" -#include "code\datums\brain_damage\mild.dm" -#include "code\datums\brain_damage\phobia.dm" -#include "code\datums\brain_damage\schizo.dm" -#include "code\datums\brain_damage\severe.dm" -#include "code\datums\brain_damage\special_ed.dm" #include "code\datums\components\_component.dm" #include "code\datums\components\armor\armor.dm" #include "code\datums\components\multitool\_multitool.dm" @@ -314,8 +310,12 @@ #include "code\datums\observation\_debug.dm" #include "code\datums\observation\destroyed.dm" #include "code\datums\observation\equipped.dm" +#include "code\datums\observation\helpers.dm" #include "code\datums\observation\moved.dm" #include "code\datums\observation\observation.dm" +#include "code\datums\observation\see_in_dark_set.dm" +#include "code\datums\observation\see_invisible_set.dm" +#include "code\datums\observation\sight_set.dm" #include "code\datums\outfits\outfit.dm" #include "code\datums\outfits\outfit_admin.dm" #include "code\datums\outfits\outfit_antag.dm" @@ -331,6 +331,7 @@ #include "code\datums\outfits\event\outfit_killers.dm" #include "code\datums\outfits\event\outfit_megacorps.dm" #include "code\datums\outfits\event\outfit_nanotrasen.dm" +#include "code\datums\outfits\event\outfit_scc.dm" #include "code\datums\outfits\event\outfit_tfcl.dm" #include "code\datums\radio\frequency.dm" #include "code\datums\radio\signal.dm" @@ -367,7 +368,6 @@ #include "code\datums\uplink\martial_arts.dm" #include "code\datums\uplink\medical.dm" #include "code\datums\uplink\ninja_modules.dm" -#include "code\datums\uplink\ninja_rigs.dm" #include "code\datums\uplink\revolution.dm" #include "code\datums\uplink\specialty.dm" #include "code\datums\uplink\stealth and camouflage items.dm" @@ -380,6 +380,7 @@ #include "code\datums\wires\apc.dm" #include "code\datums\wires\autolathe.dm" #include "code\datums\wires\camera.dm" +#include "code\datums\wires\disposals.dm" #include "code\datums\wires\explosive.dm" #include "code\datums\wires\ipc_tag_scanner.dm" #include "code\datums\wires\mulebot.dm" @@ -435,7 +436,6 @@ #include "code\game\antagonist\outsider\raider_mage.dm" #include "code\game\antagonist\outsider\revenant.dm" #include "code\game\antagonist\outsider\wizard.dm" -#include "code\game\antagonist\station\changeling.dm" #include "code\game\antagonist\station\cultist.dm" #include "code\game\antagonist\station\highlander.dm" #include "code\game\antagonist\station\loyalist.dm" @@ -446,6 +446,8 @@ #include "code\game\antagonist\station\traitor.dm" #include "code\game\antagonist\station\vampire.dm" #include "code\game\antagonist\station\wizard_golem.dm" +#include "code\game\antagonist\station\changeling\changeling.dm" +#include "code\game\antagonist\station\changeling\morph.dm" #include "code\game\area\ai_monitored.dm" #include "code\game\area\areas.dm" #include "code\game\dna\dna2.dm" @@ -605,8 +607,6 @@ #include "code\game\machinery\alarm.dm" #include "code\game\machinery\anti_bluespace.dm" #include "code\game\machinery\atmo_control.dm" -#include "code\game\machinery\autolathe.dm" -#include "code\game\machinery\autolathe_datums.dm" #include "code\game\machinery\Beacon.dm" #include "code\game\machinery\biogenerator.dm" #include "code\game\machinery\bioprinter.dm" @@ -683,6 +683,8 @@ #include "code\game\machinery\atmoalter\portable_atmospherics.dm" #include "code\game\machinery\atmoalter\pump.dm" #include "code\game\machinery\atmoalter\scrubber.dm" +#include "code\game\machinery\autolathe\autolathe.dm" +#include "code\game\machinery\autolathe\autolathe_datums.dm" #include "code\game\machinery\bots\bots.dm" #include "code\game\machinery\bots\mulebot.dm" #include "code\game\machinery\camera\camera.dm" @@ -854,6 +856,7 @@ #include "code\game\objects\items\devices\lighting\flashlight.dm" #include "code\game\objects\items\devices\lighting\glowstick.dm" #include "code\game\objects\items\devices\lighting\lamp.dm" +#include "code\game\objects\items\devices\lighting\survival.dm" #include "code\game\objects\items\devices\PDA\radio.dm" #include "code\game\objects\items\devices\radio\_radio_defines.dm" #include "code\game\objects\items\devices\radio\beacon.dm" @@ -902,6 +905,7 @@ #include "code\game\objects\items\weapons\paiwire.dm" #include "code\game\objects\items\weapons\policetape.dm" #include "code\game\objects\items\weapons\power_cells.dm" +#include "code\game\objects\items\weapons\research_slip.dm" #include "code\game\objects\items\weapons\RFD.dm" #include "code\game\objects\items\weapons\scrolls.dm" #include "code\game\objects\items\weapons\shields.dm" @@ -984,6 +988,7 @@ #include "code\game\objects\items\weapons\storage\bible.dm" #include "code\game\objects\items\weapons\storage\boxes.dm" #include "code\game\objects\items\weapons\storage\briefcase.dm" +#include "code\game\objects\items\weapons\storage\business_card.dm" #include "code\game\objects\items\weapons\storage\cell_backpack.dm" #include "code\game\objects\items\weapons\storage\fancy.dm" #include "code\game\objects\items\weapons\storage\field_ration.dm" @@ -1430,6 +1435,7 @@ #include "code\modules\clothing\spacesuits\spacesuits.dm" #include "code\modules\clothing\spacesuits\syndi.dm" #include "code\modules\clothing\spacesuits\rig\_defines.dm" +#include "code\modules\clothing\spacesuits\rig\hardsuit_token.dm" #include "code\modules\clothing\spacesuits\rig\rig.dm" #include "code\modules\clothing\spacesuits\rig\rig_attackby.dm" #include "code\modules\clothing\spacesuits\rig\rig_construction.dm" @@ -1570,6 +1576,14 @@ #include "code\modules\effects\map_effects\screen_shaker.dm" #include "code\modules\effects\map_effects\sound_emitter.dm" #include "code\modules\effects\map_effects\window_spawner.dm" +#include "code\modules\effects\maze_generation\maze_generator.dm" +#include "code\modules\effects\maze_generation\maze_generator_blockwise.dm" +#include "code\modules\effects\maze_generation\maze_helper_atoms.dm" +#include "code\modules\effects\maze_generation\helper_modules\_helper_module_base.dm" +#include "code\modules\effects\maze_generation\helper_modules\entry_exit.dm" +#include "code\modules\effects\maze_generation\loot_modules\_loot_module_base.dm" +#include "code\modules\effects\maze_generation\loot_modules\trash_module.dm" +#include "code\modules\effects\maze_generation\loot_modules\turf_painter.dm" #include "code\modules\effects\sparks\procs.dm" #include "code\modules\effects\sparks\spawner.dm" #include "code\modules\effects\sparks\visuals.dm" @@ -1630,18 +1644,17 @@ #include "code\modules\ghostroles\spawner\base.dm" #include "code\modules\ghostroles\spawner\antagonist\revenant.dm" #include "code\modules\ghostroles\spawner\atom\borer.dm" +#include "code\modules\ghostroles\spawner\atom\cult_construct.dm" #include "code\modules\ghostroles\spawner\atom\diona_nymph.dm" #include "code\modules\ghostroles\spawner\atom\golem.dm" -#include "code\modules\ghostroles\spawner\atom\imaginary_friend.dm" #include "code\modules\ghostroles\spawner\atom\living_plant.dm" #include "code\modules\ghostroles\spawner\atom\mining_drone.dm" #include "code\modules\ghostroles\spawner\atom\posibrain.dm" +#include "code\modules\ghostroles\spawner\atom\shade.dm" #include "code\modules\ghostroles\spawner\atom\skeleton.dm" -#include "code\modules\ghostroles\spawner\atom\split_personality.dm" #include "code\modules\ghostroles\spawner\atom\syndicate_cyborg.dm" #include "code\modules\ghostroles\spawner\atom\wizard_familiar.dm" #include "code\modules\ghostroles\spawner\atom\wizardapprentice.dm" -#include "code\modules\ghostroles\spawner\human\admin.dm" #include "code\modules\ghostroles\spawner\human\emergencypod.dm" #include "code\modules\ghostroles\spawner\human\human.dm" #include "code\modules\ghostroles\spawner\human\kataphract.dm" @@ -1649,6 +1662,8 @@ #include "code\modules\ghostroles\spawner\human\pra.dm" #include "code\modules\ghostroles\spawner\human\visitor.dm" #include "code\modules\ghostroles\spawner\human\zenghu.dm" +#include "code\modules\ghostroles\spawner\human\admin\admin.dm" +#include "code\modules\ghostroles\spawner\human\admin\ccia.dm" #include "code\modules\ghostroles\spawner\human\responseteams\deathsquad.dm" #include "code\modules\ghostroles\spawner\human\responseteams\iac.dm" #include "code\modules\ghostroles\spawner\human\responseteams\kataphracts.dm" @@ -1980,6 +1995,7 @@ #include "code\modules\mob\living\carbon\brain\robot.dm" #include "code\modules\mob\living\carbon\brain\say.dm" #include "code\modules\mob\living\carbon\human\appearance.dm" +#include "code\modules\mob\living\carbon\human\damage_menu.dm" #include "code\modules\mob\living\carbon\human\death.dm" #include "code\modules\mob\living\carbon\human\devour.dm" #include "code\modules\mob\living\carbon\human\diona_gestalt.dm" @@ -2158,7 +2174,6 @@ #include "code\modules\mob\living\simple_animal\hostile\creature.dm" #include "code\modules\mob\living\simple_animal\hostile\faithless.dm" #include "code\modules\mob\living\simple_animal\hostile\giant_spider.dm" -#include "code\modules\mob\living\simple_animal\hostile\hivebot.dm" #include "code\modules\mob\living\simple_animal\hostile\hostile.dm" #include "code\modules\mob\living\simple_animal\hostile\icarus_drone.dm" #include "code\modules\mob\living\simple_animal\hostile\krampus.dm" @@ -2180,6 +2195,12 @@ #include "code\modules\mob\living\simple_animal\hostile\commanded\commanded.dm" #include "code\modules\mob\living\simple_animal\hostile\commanded\guard_dog.dm" #include "code\modules\mob\living\simple_animal\hostile\commanded\ives.dm" +#include "code\modules\mob\living\simple_animal\hostile\hivebots\hivebot.dm" +#include "code\modules\mob\living\simple_animal\hostile\hivebots\hivebot_beacon.dm" +#include "code\modules\mob\living\simple_animal\hostile\hivebots\hivebot_beacon_projectiles.dm" +#include "code\modules\mob\living\simple_animal\hostile\hivebots\hivebot_harvester.dm" +#include "code\modules\mob\living\simple_animal\hostile\hivebots\hivebot_harvester_projectiles.dm" +#include "code\modules\mob\living\simple_animal\hostile\hivebots\hivebot_projectiles.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\cavern.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\clown.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\retaliate.dm" @@ -2393,6 +2414,7 @@ #include "code\modules\power\port_gen.dm" #include "code\modules\power\power.dm" #include "code\modules\power\powernet.dm" +#include "code\modules\power\radial_floodlight.dm" #include "code\modules\power\rtg.dm" #include "code\modules\power\smes.dm" #include "code\modules\power\smes_construction.dm" @@ -2646,26 +2668,13 @@ #include "code\modules\research\xenoarchaeology\artifact\artifact_replicator.dm" #include "code\modules\research\xenoarchaeology\artifact\artifact_unknown.dm" #include "code\modules\research\xenoarchaeology\artifact\effect.dm" -#include "code\modules\research\xenoarchaeology\artifact\effects\unknown_affect_cold.dm" -#include "code\modules\research\xenoarchaeology\artifact\effects\unknown_effect_badfeeling.dm" +#include "code\modules\research\xenoarchaeology\artifact\effects\unknown_effect_atmospheric.dm" #include "code\modules\research\xenoarchaeology\artifact\effects\unknown_effect_cellcharge.dm" #include "code\modules\research\xenoarchaeology\artifact\effects\unknown_effect_celldrain.dm" #include "code\modules\research\xenoarchaeology\artifact\effects\unknown_effect_emp.dm" #include "code\modules\research\xenoarchaeology\artifact\effects\unknown_effect_forcefield.dm" -#include "code\modules\research\xenoarchaeology\artifact\effects\unknown_effect_gasco2.dm" -#include "code\modules\research\xenoarchaeology\artifact\effects\unknown_effect_gasnitro.dm" -#include "code\modules\research\xenoarchaeology\artifact\effects\unknown_effect_gasoxy.dm" -#include "code\modules\research\xenoarchaeology\artifact\effects\unknown_effect_gasplasma.dm" -#include "code\modules\research\xenoarchaeology\artifact\effects\unknown_effect_gassleeping.dm" -#include "code\modules\research\xenoarchaeology\artifact\effects\unknown_effect_goodfeeling.dm" -#include "code\modules\research\xenoarchaeology\artifact\effects\unknown_effect_heal.dm" -#include "code\modules\research\xenoarchaeology\artifact\effects\unknown_effect_heat.dm" -#include "code\modules\research\xenoarchaeology\artifact\effects\unknown_effect_hurt.dm" -#include "code\modules\research\xenoarchaeology\artifact\effects\unknown_effect_radiate.dm" -#include "code\modules\research\xenoarchaeology\artifact\effects\unknown_effect_roboheal.dm" -#include "code\modules\research\xenoarchaeology\artifact\effects\unknown_effect_robohurt.dm" -#include "code\modules\research\xenoarchaeology\artifact\effects\unknown_effect_sleepy.dm" -#include "code\modules\research\xenoarchaeology\artifact\effects\unknown_effect_stun.dm" +#include "code\modules\research\xenoarchaeology\artifact\effects\unknown_effect_mental.dm" +#include "code\modules\research\xenoarchaeology\artifact\effects\unknown_effect_physical.dm" #include "code\modules\research\xenoarchaeology\artifact\effects\unknown_effect_teleport.dm" #include "code\modules\research\xenoarchaeology\finds\finds.dm" #include "code\modules\research\xenoarchaeology\finds\finds_defines.dm" diff --git a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm index a3485917896..665bc8ef211 100644 --- a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm +++ b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm @@ -60,8 +60,8 @@ var/turf/T = get_turf(src) if(!istype(T)) return - add_underlay(T, node1, turn(dir, 180), node1.icon_connect_type) - add_underlay(T, node2, dir, node2.icon_connect_type) + add_underlay(T, node1, turn(dir, 180), node1?.icon_connect_type) + add_underlay(T, node2, dir, node2?.icon_connect_type) /obj/machinery/atmospherics/binary/passive_gate/hide(var/i) update_underlays() diff --git a/code/__defines/_layers.dm b/code/__defines/_layers.dm index 44011bcee2e..a018e75bff0 100644 --- a/code/__defines/_layers.dm +++ b/code/__defines/_layers.dm @@ -11,6 +11,7 @@ #define CABLE_LAYER 2.44 #define ABOVE_CABLE_LAYER (CABLE_LAYER + 0.1) #define DOOR_OPEN_LAYER 2.7 //Under all objects if opened. 2.7 due to tables being at 2.6 +#define ABOVE_OBJ_LAYER 3.01 #define UNDERDOOR 3.09 //Just barely under a closed door. #define DOOR_CLOSED_LAYER 3.1 //Above most items if closed #define BELOW_MOB_LAYER 3.7 diff --git a/code/__defines/_macros.dm b/code/__defines/_macros.dm index b578242fbed..7a35338a68d 100644 --- a/code/__defines/_macros.dm +++ b/code/__defines/_macros.dm @@ -16,6 +16,12 @@ #define SPAN_SUBTLE(X) "[X]" #define SPAN_SOGHUN(X) "[X]" +#define FONT_SIZE_SMALL 1 +#define FONT_SIZE_NORMAL 2 +#define FONT_SIZE_LARGE 3 +#define FONT_SIZE_HUGE 4 +#define FONT_SIZE_GIANT 5 + #define FONT_SMALL(X) "[X]" #define FONT_NORMAL(X) "[X]" #define FONT_LARGE(X) "[X]" diff --git a/code/__defines/armor.dm b/code/__defines/armor.dm index ddba38187b1..83d64039f61 100644 --- a/code/__defines/armor.dm +++ b/code/__defines/armor.dm @@ -1,22 +1,25 @@ // Armor will turn attacks into less dangerous (e.g. turning cut into bruise), so keep that in mind when decided what armor value to use. // Some levels are marked with what they intend to block in such way. -#define ARMOR_TYPE_STANDARD 1 -#define ARMOR_TYPE_EXOSUIT 2 -#define ARMOR_TYPE_RIG 4 +#define ARMOR_TYPE_STANDARD 1 +#define ARMOR_TYPE_EXOSUIT 2 +#define ARMOR_TYPE_RIG 4 #define ARMOR_BALLISTIC_MINOR 10 #define ARMOR_BALLISTIC_SMALL 25 -#define ARMOR_BALLISTIC_PISTOL 50 //Blocks holdout and normal pistol ammo -#define ARMOR_BALLISTIC_RESISTANT 65 -#define ARMOR_BALLISTIC_RIFLE 80 //Blocks rifle rounds -#define ARMOR_BALLISTIC_AP 95 -#define ARMOR_BALLISTIC_HEAVY 110 +#define ARMOR_BALLISTIC_PISTOL 30 //Blocks holdout and normal pistol ammo +#define ARMOR_BALLISTIC_MEDIUM 40 +#define ARMOR_BALLISTIC_REVOLVER 50 //Blocks antag revolver rounds. +#define ARMOR_BALLISTIC_RIFLE 60 //Blocks rifle rounds. +#define ARMOR_BALLISTIC_AP 75 //Blocks basically almost every caliber except superheavy ones. +#define ARMOR_BALLISTIC_HEAVY 100 #define ARMOR_LASER_MINOR 10 -#define ARMOR_LASER_SMALL 25 //Blocks small e-guns -#define ARMOR_LASER_HANDGUNS 40 //Blocks normal e-guns -#define ARMOR_LASER_MAJOR 50 -#define ARMOR_LASER_RIFLES 70 //Blocks laser rifles +#define ARMOR_LASER_SMALL 25 +#define ARMOR_LASER_PISTOL 35 //Minimum required to block e-pistols. +#define ARMOR_LASER_MEDIUM 40 +#define ARMOR_LASER_RIFLE 45 //Minimum required to block las-rifles. +#define ARMOR_LASER_MAJOR 55 +#define ARMOR_LASER_AP 70 #define ARMOR_LASER_HEAVY 100 #define ARMOR_MELEE_MINOR 5 diff --git a/code/__defines/auxtools.dm b/code/__defines/auxtools.dm new file mode 100644 index 00000000000..c46fbb2067d --- /dev/null +++ b/code/__defines/auxtools.dm @@ -0,0 +1,18 @@ +/proc/auxtools_stack_trace(msg) + CRASH(msg) + +/proc/enable_debugging(mode, port) + CRASH("auxtools not loaded") + +/world/New() + var/debug_server = world.GetConfig("env", "AUXTOOLS_DEBUG_DLL") + if (debug_server) + call(debug_server, "auxtools_init")() + enable_debugging() + . = ..() + +/world/Del() + var/debug_server = world.GetConfig("env", "AUXTOOLS_DEBUG_DLL") + if (debug_server) + call(debug_server, "auxtools_shutdown")() + . = ..() diff --git a/code/__defines/chemistry.dm b/code/__defines/chemistry.dm index 63a9d076c3b..17b08aff5e4 100644 --- a/code/__defines/chemistry.dm +++ b/code/__defines/chemistry.dm @@ -65,10 +65,11 @@ #define CE_PAINKILLER "painkiller" #define CE_PULSE "xcardic" // increases or decreases heartrate #define CE_UNDEXTROUS "undextrous" // arms no work right -#define CE_HALLUCINATE "hallucinogen" //Makes hallucinations stronger or weaker +#define CE_HALLUCINATE "hallucinogen" // Makes hallucinations stronger or weaker #define CE_CRYO "cryogenic" // Prevents damage from being frozen #define CE_CLEARSIGHT "clearsight" // prevents the blurry eye chem side effect #define CE_STRAIGHTWALK "straightwalk" // prevents the confused walking chem side effect +#define CE_NOSTUTTER "nostutter" // helps alleviate stuttering // Apply healing effects #define CE_ANTIBIOTIC "antibiotic" // Thetamycin diff --git a/code/__defines/dna.dm b/code/__defines/dna.dm index 27c8e95fa3a..fa32bb055cc 100644 --- a/code/__defines/dna.dm +++ b/code/__defines/dna.dm @@ -36,11 +36,10 @@ #define TOURETTES 8 #define STUTTERING 16 #define DUMB 32 -#define MONKEYLIKE 64 //sets IsAdvancedToolUser to FALSE -#define PACIFIST 128 -#define UNINTELLIGIBLE 256 -#define GERTIE 512 -#define ASTHMA 1024 +#define PACIFIST 64 +#define UNINTELLIGIBLE 128 +#define GERTIE 128 +#define ASTHMA 256 // sdisabilities #define BLIND 0x1 diff --git a/code/__defines/gamemode.dm b/code/__defines/gamemode.dm index 67bc6e53baa..6fc676694aa 100644 --- a/code/__defines/gamemode.dm +++ b/code/__defines/gamemode.dm @@ -50,6 +50,7 @@ #define MODE_LONER "loner" #define MODE_WIZARD "wizard" #define MODE_CHANGELING "changeling" +#define MODE_MORPH "morph" #define MODE_CULTIST "cultist" #define MODE_HIGHLANDER "highlander" #define MODE_MONKEY "monkey" @@ -62,7 +63,7 @@ #define MODE_REVENANT "revenant" #define MODE_GOLEM "golem" -#define DEFAULT_TELECRYSTAL_AMOUNT 25 +#define DEFAULT_TELECRYSTAL_AMOUNT 15 // Defines (NOT FLAGS) for making secret, random, and mixed secret less snowflake-string // and number dependant. @@ -121,4 +122,4 @@ #define VAMP_PRESENCE 0x4 #define VAMP_FRENZIED 0x8 #define VAMP_ISTHRALL 0x10 -#define VAMP_FULLPOWER 0x20 \ No newline at end of file +#define VAMP_FULLPOWER 0x20 diff --git a/code/__defines/misc.dm b/code/__defines/misc.dm index f22cee6970d..374191c81b1 100644 --- a/code/__defines/misc.dm +++ b/code/__defines/misc.dm @@ -63,6 +63,7 @@ #define PROGRESS_BARS 0x4 #define PARALLAX_IS_STATIC 0x8 #define FLOATING_MESSAGES 0x10 +#define HOTKEY_DEFAULT 0x20 #define TOGGLES_DEFAULT (SOUND_ADMINHELP|SOUND_MIDI|SOUND_AMBIENCE|SOUND_LOBBY|CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO|CHAT_ATTACKLOGS|CHAT_LOOC) diff --git a/code/__defines/mobs.dm b/code/__defines/mobs.dm index f609c842c85..2411d32bd84 100644 --- a/code/__defines/mobs.dm +++ b/code/__defines/mobs.dm @@ -146,17 +146,24 @@ #define BP_AUG_PEN "retractable combipen" #define BP_AUG_LIGHTER "retractable lighter" #define BP_AUG_HEALTHSCAN "integrated health scanner" +#define BP_AUG_GUSTATORIAL "integrated gustatorial centre" #define BP_AUG_TESLA "tesla spine" #define BP_AUG_EYE_SENSORS "integrated eyes sensors" #define BP_AUG_HAIR "synthetic hair extensions" -#define BP_AUG_SUSPENSION "calf suspension" +#define BP_AUG_CORDS "synthetic vocal cords" +#define BP_AUG_COCHLEAR "cochlear implant" +#define BP_AUG_SUSPENSION "calf suspension" #define BP_AUG_TASTE_BOOSTER "taste booster" -#define BP_AUG_RADIO "integrated radio" -#define BP_AUG_FUEL_CELL "integrated fuel cell" -#define BP_AUG_AIR_ANALYZER "integrated air analyzer" -#define BP_AUG_LANGUAGE "integrated language processor" -#define BP_AUG_PSI "psionic receiver" -#define BP_AUG_CALF_OVERRIDE "calf overdrive" +#define BP_AUG_RADIO "integrated radio" +#define BP_AUG_FUEL_CELL "integrated fuel cell" +#define BP_AUG_AIR_ANALYZER "integrated air analyzer" +#define BP_AUG_LANGUAGE "integrated language processor" +#define BP_AUG_PSI "psionic receiver" +#define BP_AUG_CALF_OVERRIDE "calf overdrive" +#define BP_AUG_MEMORY "memory inhibitor" +#define BP_AUG_EMOTION "emotional manipulator" +#define BP_AUG_ENCHANED_VISION "vision enhanced retinas" +#define BP_AUG_SIGHTLIGHTS "ocular installed sightlights" //Organ defines #define PROCESS_ACCURACY 10 @@ -377,10 +384,6 @@ #define BRAIN_DAMAGE_MILD 10 #define BRAIN_DAMAGE_SEVERE 40 -#define BRAIN_TRAUMA_MILD /datum/brain_trauma/mild -#define BRAIN_TRAUMA_SEVERE /datum/brain_trauma/severe -#define BRAIN_TRAUMA_SPECIAL /datum/brain_trauma/special - #define CURE_CRYSTAL "crystal" #define CURE_SOLITUDE "solitude" #define CURE_HYPNOSIS "hypnosis" diff --git a/code/_helpers/maths.dm b/code/_helpers/maths.dm index 86443852787..617d61b223b 100644 --- a/code/_helpers/maths.dm +++ b/code/_helpers/maths.dm @@ -74,11 +74,8 @@ /proc/IsMultiple(x, y) return x % y == 0 -/proc/IsEven(x) - return !(x & 0x1) - -/proc/IsOdd(x) - return (x & 0x1) +#define ISEVEN(x) (x % 2 == 0) +#define ISODD(x) (x % 2 != 0) // Performs a linear interpolation between a and b. // Note: weight=0 returns a, weight=1 returns b, and weight=0.5 returns the mean of a and b. diff --git a/code/_helpers/sanitize_values.dm b/code/_helpers/sanitize_values.dm index f3dd6ec1531..4922f3502dc 100644 --- a/code/_helpers/sanitize_values.dm +++ b/code/_helpers/sanitize_values.dm @@ -21,6 +21,12 @@ var/datum/species/S = all_species[species_name] return sanitize_inlist(gender, (valid_player_genders & S.default_genders), pick(S.default_genders)) +/proc/sanitize_pronouns(pronoun, var/species_name, var/current_gender) + var/datum/species/S = all_species[species_name] + if(length(S.selectable_pronouns) && (pronoun in S.selectable_pronouns)) + return pronoun + return current_gender + /proc/sanitize_hexcolor(color, default="#000000") if(!istext(color)) return default var/len = length(color) diff --git a/code/_helpers/time.dm b/code/_helpers/time.dm index f6d21a45b1f..522cfa584df 100644 --- a/code/_helpers/time.dm +++ b/code/_helpers/time.dm @@ -59,3 +59,16 @@ var/real_round_start_time if(!timevar) timevar = world.realtime return time2text(timevar, "YYYY-MM-DD hh:mm:ss") + +/** + * Returns "watch handle" (really just a timestamp :V) + */ +/proc/start_watch() + return REALTIMEOFDAY + +/** + * Returns number of seconds elapsed. + * @param wh number The "Watch Handle" from start_watch(). (timestamp) + */ +/proc/stop_watch(wh) + return round(0.1 * (REALTIMEOFDAY - wh), 0.1) \ No newline at end of file diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm index 67847656e9c..f2fb8cf740c 100644 --- a/code/_helpers/unsorted.dm +++ b/code/_helpers/unsorted.dm @@ -719,6 +719,21 @@ Turf and target are seperate in case you want to teleport some distance from a t else if (zone == BP_R_FOOT) return "right foot" else return zone +/proc/reverse_parse_zone(zone) + if(zone == "right hand") return BP_R_HAND + else if (zone == "left hand") return BP_L_HAND + else if (zone == "left arm") return BP_L_ARM + else if (zone == "right arm") return BP_R_ARM + else if (zone == "left leg") return BP_L_LEG + else if (zone == "right leg") return BP_R_LEG + else if (zone == "left foot") return BP_L_FOOT + else if (zone == "right foot") return BP_R_FOOT + else if (zone == "left hand") return BP_L_HAND + else if (zone == "right hand") return BP_R_HAND + else if (zone == "left foot") return BP_L_FOOT + else if (zone == "right foot") return BP_R_FOOT + else return zone + /proc/get(atom/loc, type) while(loc) if(istype(loc, type)) diff --git a/code/_onclick/hud/borer_hud.dm b/code/_onclick/hud/borer_hud.dm new file mode 100644 index 00000000000..407ffb559c5 --- /dev/null +++ b/code/_onclick/hud/borer_hud.dm @@ -0,0 +1,13 @@ +/mob/living/simple_animal/borer/instantiate_hud(var/datum/hud/HUD) + HUD.borer_hud() + +/datum/hud/proc/borer_hud() + src.adding = list() + + var/obj/screen/borer/chemicals/C = new /obj/screen/borer/chemicals() + adding += C + + var/mob/living/simple_animal/borer/B = mymob + B.chem_hud = C + + mymob.client.screen += src.adding \ No newline at end of file diff --git a/code/_onclick/hud/captive_brain_hud.dm b/code/_onclick/hud/captive_brain_hud.dm new file mode 100644 index 00000000000..8a25ab24dbc --- /dev/null +++ b/code/_onclick/hud/captive_brain_hud.dm @@ -0,0 +1,15 @@ +/mob/living/captive_brain/instantiate_hud(var/datum/hud/HUD) + HUD.captive_brain_hud() + +/datum/hud/proc/captive_brain_hud() + src.adding = list() + + var/obj/screen/resist = new /obj/screen() + resist.name = "resist" + resist.icon = 'icons/mob/screen/captive_brain.dmi' + resist.icon_state = "resist" + resist.screen_loc = "EAST-8,BOTTOM:8" + resist.layer = SCREEN_LAYER + adding += resist + + mymob.client.screen += src.adding \ No newline at end of file diff --git a/code/_onclick/hud/screen_object_types/borer.dm b/code/_onclick/hud/screen_object_types/borer.dm new file mode 100644 index 00000000000..73888dbc65a --- /dev/null +++ b/code/_onclick/hud/screen_object_types/borer.dm @@ -0,0 +1,14 @@ +/obj/screen/borer + icon = 'icons/mob/screen/borer.dmi' + maptext_x = 5 + maptext_y = 16 + +/obj/screen/borer/chemicals + name = "chemicals" + icon_state = "chemicals" + screen_loc = ui_alien_toxin + +/obj/screen/borer/chemicals/Click(var/location, var/control, var/params) + if(istype(usr, /mob/living/simple_animal/borer)) + var/mob/living/simple_animal/borer/B = usr + to_chat(usr, SPAN_NOTICE("You have [B.chemicals]u of chemicals to use for your abilities.")) \ No newline at end of file diff --git a/code/controllers/master/subsystem.dm b/code/controllers/master/subsystem.dm index f6c0d74df51..81a7ae49def 100644 --- a/code/controllers/master/subsystem.dm +++ b/code/controllers/master/subsystem.dm @@ -178,7 +178,7 @@ return time //hook for printing stats to the "MC" statuspanel for admins to see performance and related stats etc. -/datum/controller/subsystem/stat_entry(msg) +/datum/controller/subsystem/stat_entry(var/msg) if(!statclick) statclick = new/obj/effect/statclick/debug(null, "Initializing...", src) diff --git a/code/controllers/subsystems/explosives.dm b/code/controllers/subsystems/explosives.dm index 25c206fe89a..ebbad2cb581 100644 --- a/code/controllers/subsystems/explosives.dm +++ b/code/controllers/subsystems/explosives.dm @@ -150,17 +150,16 @@ var/datum/controller/subsystem/explosives/SSexplosives continue var/dist = get_dist(M_turf, epicenter) + var/explosion_dir = get_dir(M_turf, epicenter) if (reception == 2 && (M.ear_deaf <= 0 || !M.ear_deaf))//Dont play sounds to deaf people // If inside the blast radius + world.view - 2 if(dist <= closedist) + to_chat(M, FONT_LARGE(SPAN_WARNING("You hear the sound of a nearby explosion coming from \the [dir2text(explosion_dir)]."))) M.playsound_simple(epicenter, get_sfx(/decl/sound_category/explosion_sound), min(100, volume), use_random_freq = TRUE, falloff = 5) - //You hear a far explosion if you're outside the blast radius. Small bombs shouldn't be heard all over the station. - - else - volume = M.playsound_simple(epicenter, 'sound/effects/explosionfar.ogg', volume, use_random_freq = TRUE, falloff = 1000, use_pressure = FALSE) - //Playsound local will return the final volume the sound is actually played at - //It will return 0 if the sound volume falls to 0 due to falloff or pressure - //Also return zero if sound playing failed for some other reason + else //You hear a far explosion if you're outside the blast radius. Small bombs shouldn't be heard all over the station. + volume = M.playsound_simple(epicenter, 'sound/effects/explosionfar.ogg', volume, use_random_freq = TRUE, falloff = 1000, use_pressure = TRUE) + if(volume) + to_chat(M, FONT_LARGE(SPAN_NOTICE("You hear the sound of a distant explosion coming from \the [dir2text(explosion_dir)]."))) //Deaf people will feel vibrations though if (volume > 0)//Only shake camera if someone was close enough to hear it diff --git a/code/controllers/subsystems/initialization/misc_early.dm b/code/controllers/subsystems/initialization/misc_early.dm index 10ddceee366..2e0bfc6b703 100644 --- a/code/controllers/subsystems/initialization/misc_early.dm +++ b/code/controllers/subsystems/initialization/misc_early.dm @@ -21,9 +21,6 @@ global_hud.holomap ) - // Create autolathe recipes, as above. - populate_lathe_recipes() - // Create robolimbs for chargen. populate_robolimb_list() diff --git a/code/controllers/subsystems/initialization/misc_late.dm b/code/controllers/subsystems/initialization/misc_late.dm index fe6cf768b8a..b678515d6a4 100644 --- a/code/controllers/subsystems/initialization/misc_late.dm +++ b/code/controllers/subsystems/initialization/misc_late.dm @@ -44,6 +44,9 @@ else if(istype(thing, /mob/living/silicon/robot/drone/mining)) var/mob/living/silicon/robot/drone/mining/MD = thing MD.request_player() + else if(istype(thing, /obj/effect/mazegen/generator)) + var/obj/effect/mazegen/generator/MG = thing + MG.run_generator() LAZYREMOVE(SSatoms.late_misc_firers, thing) if (config.use_forumuser_api) diff --git a/code/controllers/subsystems/lighting.dm b/code/controllers/subsystems/lighting.dm index fc1478c5f27..83c2e78e33b 100644 --- a/code/controllers/subsystems/lighting.dm +++ b/code/controllers/subsystems/lighting.dm @@ -80,7 +80,7 @@ var/datum/controller/subsystem/lighting/SSlighting if (!A.dynamic_lighting) continue - new /atom/movable/lighting_overlay(T) + T.lighting_build_overlay() overlaycount++ CHECK_TICK diff --git a/code/controllers/subsystems/materials.dm b/code/controllers/subsystems/materials.dm index 24793f48536..d4e6d5591b3 100644 --- a/code/controllers/subsystems/materials.dm +++ b/code/controllers/subsystems/materials.dm @@ -8,6 +8,9 @@ var/datum/controller/subsystem/materials/SSmaterials var/list/materials var/list/materials_by_name + var/list/autolathe_recipes + var/list/autolathe_categories + /datum/controller/subsystem/materials/New() NEW_SS_GLOBAL(SSmaterials) diff --git a/code/controllers/subsystems/statistics.dm b/code/controllers/subsystems/statistics.dm index a7e16d228ec..49cb670c154 100644 --- a/code/controllers/subsystems/statistics.dm +++ b/code/controllers/subsystems/statistics.dm @@ -65,8 +65,7 @@ for(var/mob/M in player_list) if(M.client) playercount += 1 - establish_db_connection(dbcon) - if(!dbcon.IsConnected()) + if(!establish_db_connection(dbcon)) log_game("SQL ERROR during population polling. Failed to connect.") else var/sqltime = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss") @@ -163,8 +162,7 @@ return round_end_data_gathering() //round_end time logging and some other data processing - establish_db_connection(dbcon) - if(!dbcon.IsConnected()) + if(!establish_db_connection(dbcon)) return for(var/datum/feedback_variable/FV in feedback) @@ -250,8 +248,7 @@ var/area/placeofdeath = get_area(H) var/podname = placeofdeath ? "[placeofdeath]" : "Unknown area" - establish_db_connection(dbcon) - if(!dbcon.IsConnected()) + if(!establish_db_connection(dbcon)) log_game("SQL ERROR during death reporting. Failed to connect.") else var/DBQuery/query = dbcon.NewQuery("INSERT INTO ss13_death (name, ckey, char_id, job, special, pod, tod, laname, lackey, gender, bruteloss, fireloss, brainloss, oxyloss, coord) VALUES \ diff --git a/code/controllers/subsystems/traumas.dm b/code/controllers/subsystems/traumas.dm deleted file mode 100644 index 024cd769631..00000000000 --- a/code/controllers/subsystems/traumas.dm +++ /dev/null @@ -1,125 +0,0 @@ -var/datum/controller/subsystem/traumas/SStraumas - -/datum/controller/subsystem/traumas - name = "Traumas" - flags = SS_NO_FIRE - init_order = SS_INIT_MISC - var/list/phobia_types - var/list/phobia_words - var/list/phobia_mobs - var/list/phobia_objs - var/list/phobia_turfs - var/list/phobia_species - -#define PHOBIA_FILE "phobia.json" - -/datum/controller/subsystem/traumas/New() - NEW_SS_GLOBAL(SStraumas) - -/datum/controller/subsystem/traumas/Initialize() - phobia_types = list("spiders", "space", "security", "doctors", "clowns", "lizards", "cats", "humans", "skrell", "robots", "pests", "nanotrasen", "filth", "paranormals", "death", "darkness") - - phobia_words = list("spiders" = strings(PHOBIA_FILE, "spiders"), - "space" = strings(PHOBIA_FILE, "space"), - "security" = strings(PHOBIA_FILE, "security"), - "clowns" = strings(PHOBIA_FILE, "clowns"), - "doctors"= strings(PHOBIA_FILE, "doctors"), - "lizards" = strings(PHOBIA_FILE, "unathi"), - "cats" = strings(PHOBIA_FILE, "cats"), - "humans" = strings(PHOBIA_FILE, "humans"), - "skrell" = strings(PHOBIA_FILE, "skrell"), - "robots" = strings(PHOBIA_FILE, "robots"), - "pests" = strings(PHOBIA_FILE, "pests"), - "nanotrasen"= strings(PHOBIA_FILE, "nanotrasen"), - "filth" = strings(PHOBIA_FILE, "filth"), - "paranormals"= strings(PHOBIA_FILE, "paranormals"), - "death" = strings(PHOBIA_FILE, "death"), - "darkness" = strings(PHOBIA_FILE, "darkness") - ) - - phobia_mobs = list("spiders" = typecacheof(list(/mob/living/simple_animal/spiderbot, /mob/living/simple_animal/hostile/giant_spider)), - "security" = typecacheof(list(/mob/living/bot/secbot)), - "lizards" = typecacheof(list(/mob/living/simple_animal/lizard)), - "cats" = typecacheof(list(/mob/living/simple_animal/cat, /mob/living/simple_animal/familiar/pet/cat, /mob/living/simple_animal/cat/kitten)), - "robots" = typecacheof(list(/mob/living/silicon,/mob/living/bot, /mob/living/simple_animal/hostile/icarus_drone)), - "pests" = typecacheof(list(/mob/living/simple_animal/hostile/carp, /mob/living/simple_animal/rat, /mob/living/carbon/alien/diona)), - "paranormals" = typecacheof(list(/mob/living/simple_animal/hostile/scarybat, /mob/living/simple_animal/hostile/true_changeling, - /mob/living/simple_animal/hostile/mimic, /mob/living/simple_animal/hostile/faithless, - /mob/living/simple_animal/construct)), - "death" = typecacheof(list(/mob/abstract/observer)) - ) - - phobia_objs = list("spiders" = typecacheof(list(/obj/effect/spider,/obj/item/toy/plushie/spider, /obj/effect/decal/cleanable/spiderling_remains)), - - "security" = typecacheof(list(/obj/item/clothing/under/rank/security, /obj/item/clothing/under/rank/warden, /obj/item/clothing/head/beret/security, - /obj/item/clothing/under/rank/head_of_security, /obj/item/clothing/under/det, /obj/item/clothing/glasses/hud/security, - /obj/item/melee/baton, /obj/item/gun/energy/taser, /obj/item/handcuffs, /obj/item/clothing/glasses/sunglasses/sechud, - /obj/machinery/door/airlock/security, /obj/item/clothing/under/rank/cadet, /obj/structure/sign/directions/security, - /obj/item/clothing/head/bio_hood/security, /obj/item/clothing/head/bomb_hood/security, /obj/item/clothing/head/helmet/space/void/security, - /obj/item/clothing/head/softcap/security, /obj/item/clothing/suit/security, /obj/item/clothing/suit/bio_suit/security, - /obj/item/clothing/suit/bomb_suit/security, /obj/item/clothing/suit/security/officer, /obj/item/clothing/suit/space/void/security, - /obj/item/clothing/suit/storage/hooded/wintercoat/security, /obj/item/device/magnetic_lock/security,/obj/item/toy/figure/secofficer, - /obj/item/gun/bang/sec, /obj/item/gun/projectile/sec, /obj/item/book/manual/wiki/security_space_law)), - - "clowns" = typecacheof(list(/obj/item/clothing/under/rank/clown, /obj/item/clothing/shoes/clown_shoes, - /obj/item/clothing/mask/gas/clown_hat, /obj/item/bananapeel, - /obj/item/bikehorn, /obj/item/modular_computer/handheld/pda/civilian/clown)), - - "cats" = typecacheof(list(/obj/item/clothing/head/tajaran, /obj/item/clothing/suit/storage/tajaran, - /obj/item/clothing/suit/storage/toggle/labcoat/tajaran, /obj/item/clothing/suit/storage/tajaran, - /obj/item/stack/material/animalhide/cat, /obj/item/holder/cat, /obj/item/toy/plushie/kitten)), - - "lizards" = typecacheof(list(/obj/item/toy/plushie/lizard,/obj/item/material/hatchet/unathiknife,/obj/item/rig/unathi, - /obj/item/clothing/suit/unathi/robe, /obj/structure/sign/flag/hegemony, /obj/item/stack/material/animalhide/lizard, - /obj/item/toy/plushie/lizard)), - - "skrell" = typecacheof(list(/obj/structure/sign/flag/jargon, /obj/item/clothing/ears/skrell, /obj/item/clothing/suit/space/void/skrell, - /obj/item/clothing/head/helmet/space/void/skrell, /obj/item/organ/internal/brain/skrell, /obj/item/organ/internal/eyes/skrell, - /obj/item/organ/internal/heart/skrell, /obj/item/organ/internal/kidneys/skrell, /obj/item/organ/internal/liver/skrell, /obj/item/organ/internal/lungs/skrell, - /obj/item/reagent_containers/food/snacks/skrellsnacks)), - - "robots" = typecacheof(list(/obj/item/device/electronic_assembly/drone, /obj/item/holder/drone, /obj/item/device/mmi/digital, - /obj/item/organ/internal/ipc_tag, /obj/machinery/computer/borgupload, /obj/item/clothing/suit/cyborg_suit, - /obj/machinery/cryopod/robot, /obj/machinery/robotic_fabricator, /obj/effect/decal/cleanable/blood/gibs/robot, /obj/effect/decal/remains/robot, - /obj/item/robot_parts, /obj/item/organ/internal/cell, /obj/item/organ/internal/data, /obj/item/toy/figure/borg)), - - "nanotrasen" = typecacheof(list(/obj/item/toy/balloon/nanotrasen, /obj/item/soap/nanotrasen, /obj/structure/sign/flag/nanotrasen, - /obj/item/clothing/suit/storage/toggle/leather_jacket/nanotrasen, /obj/item/clothing/suit/storage/toggle/brown_jacket/nanotrasen, /obj/item/storage/toolbox/lunchbox/nt, - /obj/structure/banner, /obj/structure/bed/chair/office/bridge, /obj/item/clothing/head/collectable/captain, - /obj/item/clothing/head/helmet/space/void/captain, /obj/item/clothing/suit/space/void/captain, /obj/item/clothing/suit/storage/hooded/wintercoat/captain, - /obj/item/clothing/under/captainformal, /obj/item/clothing/under/rank/captain, /obj/item/toy/figure/captain, /obj/item/card/id/captains_spare, - /obj/item/gun/energy/captain, /obj/item/stamp/captain, /obj/item/storage/backpack/captain, /obj/item/clothing/suit/security)), - - "filth" = typecacheof(list(/obj/effect/decal/cleanable,/obj/effect/decal/remains,/obj/item/trash, /obj/machinery/portable_atmospherics/hydroponics)), - - "paranormals" = typecacheof(list(/obj/item/book/tome,/obj/item/nullrod,/obj/structure/constructshell, - /obj/structure/cult, /obj/structure/girder/cult, /obj/structure/grille/cult, /obj/effect/forcefield/cult, - /obj/effect/gateway, /obj/item/clothing/head/culthood, /obj/item/clothing/head/helmet/space/cult, /obj/item/clothing/shoes/cult, - /obj/item/clothing/suit/cultrobes, /obj/item/clothing/suit/space/cult, /obj/item/toy/cultsword, /obj/item/melee/cultblade, - /obj/item/storage/backpack/cultpack, /obj/item/storage/bible, /obj/effect/rune, /obj/item/spirit_board)), - - "doctors" = typecacheof(list(/obj/item/gun/launcher/syringe, /obj/item/reagent_containers/syringe, /obj/item/clothing/suit/storage/toggle/labcoat, - /obj/item/toy/figure/md, /obj/item/bedsheet/medical, /obj/item/rig/medical, /obj/item/storage/backpack/duffel/med, - /obj/item/storage/backpack/medic, /obj/item/storage/backpack/messenger/med, /obj/item/storage/belt/medical, - /obj/machinery/vending/medical, /obj/structure/closet/crate/medical, /obj/structure/closet/medical_wall, - /obj/structure/sign/greencross, /obj/item/clothing/accessory/armband/med, /obj/item/clothing/head/helmet/space/void/medical, /obj/item/clothing/mask/breath/medical, - /obj/item/clothing/under/rank/medical, /obj/item/surgery/scalpel, /obj/machinery/clonepod, /obj/item/storage/firstaid, /obj/machinery/optable, - /obj/item/clothing/accessory/armband/science, /obj/item/clothing/under/rank/scientist, /obj/machinery/door/airlock/science, /obj/machinery/door/airlock/medical)) - - ) - phobia_turfs = list("space" = typecacheof(list(/turf/space, /turf/simulated/open)), - "paranormals" = typecacheof(list(/turf/simulated/wall/cult, /turf/simulated/floor/cult)), - "filth" = typecacheof(list(/turf/simulated/floor/grass, /turf/simulated/mineral)), - "darkness" = typecacheof(list(/turf/unsimulated/mask)) //fuck this is so dangerously snowflake lohikar is going to eat my ass - ) - - phobia_species = list("lizards" = typecacheof(list(/datum/species/unathi)), - "cats" = typecacheof(list(/datum/species/tajaran)), - "skrell" = typecacheof(list(/datum/species/skrell)), - "robots" = typecacheof(list(/datum/species/machine)), - "pests" = typecacheof(list(/datum/species/diona, /datum/species/bug)), - "paranormals" = typecacheof(list(/datum/species/revenant, /datum/species/skeleton, /datum/species/golem)), - "humans" = typecacheof(list(/datum/species/human)) - ) - -#undef PHOBIA_FILE diff --git a/code/controllers/verbs.dm b/code/controllers/verbs.dm index 6353813fc59..2928d9e6a0a 100644 --- a/code/controllers/verbs.dm +++ b/code/controllers/verbs.dm @@ -8,30 +8,19 @@ usr.client.debug_variables(antag) message_admins("Admin [key_name_admin(usr)] is debugging the [antag.role_text] template.") -/var/list/controller_debug_list = list( - "Configuration", - "Cameras", - "Gas Data", - "Observation" -) - -/client/proc/debug_controller(controller in controller_debug_list) +/client/proc/debug_controller() set category = "Debug" set name = "Debug Controller" set desc = "Debug the various periodic loop controllers for the game (be careful!)" - if(!holder) return - switch(controller) - if("Configuration") - debug_variables(config) - feedback_add_details("admin_verb","DConf") - if("Cameras") - debug_variables(cameranet) - feedback_add_details("admin_verb","DCameras") - if("Gas Data") - debug_variables(gas_data) - feedback_add_details("admin_verb","DGasdata") - if("Observation") - debug_variables(all_observable_events) - feedback_add_details("admin_verb", "DObservation") - message_admins("Admin [key_name_admin(usr)] is debugging the [controller] controller.") + if(!holder) + return + var/list/available_controllers = list() + for(var/datum/controller/subsystem/SS in Master.subsystems) + if (!Master.initializing && SS.flags & SS_NO_DISPLAY) + continue + available_controllers[SS.name] = SS + var/css = input("What controller would you like to debug?", "Controllers") as null|anything in available_controllers + debug_variables(available_controllers[css]) + + message_admins("Admin [key_name_admin(usr)] is debugging the [css] controller.") diff --git a/code/datums/brain_damage/brain_trauma.dm b/code/datums/brain_damage/brain_trauma.dm deleted file mode 100644 index 379d94a38c8..00000000000 --- a/code/datums/brain_damage/brain_trauma.dm +++ /dev/null @@ -1,59 +0,0 @@ -//Brain Traumas are the new actual brain damage. Brain damage itself acts as a way to acquire traumas: every time brain damage is dealt, there's a chance of receiving a trauma. -//This chance gets higher the higher the mob's brainloss is. Removing traumas is a separate thing from removing brain damage: you can get restored to full brain operativity, -//but keep the quirks, until repaired by Cataleptinol (for mild/special ones) or brain surgery (for severe ones). -/datum/brain_trauma - var/name = "Brain Trauma" - var/desc = "A trauma caused by brain damage, which causes issues to the patient." - var/scan_desc = "a generic brain trauma" //description when detected by a health scanner - var/mob/living/carbon/owner //the poor bastard - var/obj/item/organ/internal/brain/brain //the poor bastard's brain - var/gain_text = "You feel traumatized." - var/lose_text = "You no longer feel traumatized." - var/can_gain = TRUE //can this be gained through random traumas? - var/permanent = FALSE //can this be cured? - var/suppressed = 0 //currently being suppressed - var/cure_type //type of therapy that cures the trauma - //current cures: - //CURE_HYPNOSIS - cures traumas that alter behavior - //CURE_SOLITUDE - cures traumas that produce hallucination - //CURE_CRYSTAL - cures traumas that have physical effects - //CURE_SURGERY - cures traumas not covered above - -/datum/brain_trauma/New(obj/item/organ/internal/brain/B, _permanent) - brain = B - owner = B.owner - permanent = _permanent - if(owner) - on_gain() - -/datum/brain_trauma/Destroy() - brain.traumas -= src - if(owner) - on_lose() - brain = null - owner = null - return ..() - -//Called on life ticks -/datum/brain_trauma/proc/on_life() - if(owner.getBrainLoss() < brain.traumas.len) - owner.setBrainLoss(brain.traumas.len) - return - -//Called when given to a mob -/datum/brain_trauma/proc/on_gain() - to_chat(owner, gain_text) - -//Called when removed from a mob -/datum/brain_trauma/proc/on_lose(silent) - if(!silent) - to_chat(owner, lose_text) - owner.adjustBrainLoss(-1) - -//Called when hearing a spoken message -/datum/brain_trauma/proc/on_hear(message, speaker, message_language, raw_message, radio_freq) - return message - -//Called when speaking -/datum/brain_trauma/proc/on_say(message) - return message \ No newline at end of file diff --git a/code/datums/brain_damage/imaginary_friend.dm b/code/datums/brain_damage/imaginary_friend.dm deleted file mode 100644 index eb87a3eb891..00000000000 --- a/code/datums/brain_damage/imaginary_friend.dm +++ /dev/null @@ -1,122 +0,0 @@ -/datum/brain_trauma/special/imaginary_friend - name = "Imaginary Friend" - desc = "Patient can see and hear an imaginary person." - scan_desc = "partial schizophrenia" - gain_text = "You feel in good company, for some reason." - lose_text = "You feel lonely again." - cure_type = CURE_SOLITUDE - var/mob/abstract/mental/friend/friend - -/datum/brain_trauma/special/imaginary_friend/on_gain() - ..() - make_friend() - -/datum/brain_trauma/special/imaginary_friend/on_life() - if(get_dist(owner, friend) > 9) - friend.yank() - if(!friend) - qdel(src) - -/datum/brain_trauma/special/imaginary_friend/on_lose() - ..() - QDEL_NULL(friend) - -/datum/brain_trauma/special/imaginary_friend/proc/make_friend() - friend = new(get_turf(src), src) - SSghostroles.add_spawn_atom("imaginary_friend", friend) - -/datum/brain_trauma/special/imaginary_friend/proc/reset_search() - if(src.friend && src.friend.key) - return - else - qdel(src) - -/mob/abstract/mental - universal_understand = 1 - incorporeal_move = INCORPOREAL_GHOST - density = 0 - -/mob/abstract/mental/friend - name = "imaginary friend" - real_name = "imaginary friend" - desc = "A wonderful yet fake friend." - see_in_dark = 0 - see_invisible = SEE_INVISIBLE_LIVING - var/icon/human_image - var/image/current_image - var/mob/living/carbon/owner - var/datum/brain_trauma/special/imaginary_friend/trauma - -/mob/abstract/mental/friend/LateLogin() - ..() - to_chat(src, "You are the imaginary friend of [owner]!") - to_chat(src, "You are absolutely loyal to your friend, no matter what.") - to_chat(src, "You cannot directly influence the world around you, but you can see what [owner] cannot.") - -/mob/abstract/mental/friend/Initialize(mapload, _trauma) - . = ..() - trauma = _trauma - owner = trauma.owner - var/gender = pick(MALE, FEMALE) - real_name = owner.species.get_random_name(gender) - name = real_name - var/list/candidates = list() - for(var/mob/living/L in living_mob_list) - candidates += L - var/mob/abstract/buddy = pick(candidates) - human_image = getFlatIcon(buddy) - Show() - -/mob/abstract/mental/friend/proc/Show() - if(owner.client) - owner.client.images.Remove(current_image) - if(client) - client.images.Remove(current_image) - current_image = image(human_image, src, null, MOB_LAYER) - current_image.override = TRUE - current_image.name = name - if(owner.client) - owner.client.images |= current_image - if(client) - client.images |= current_image - -/mob/abstract/mental/friend/Destroy() - if(owner.client) - owner.client.images.Remove(human_image) - if(client) - client.images.Remove(human_image) - SSghostroles.remove_spawn_atom("imaginary_friend", src) - return ..() - -/mob/abstract/mental/friend/proc/yank() - if(!client) //don't bother the user with a braindead ghost every few steps - return - forceMove(get_turf(owner)) - -/mob/abstract/mental/friend/say(message) - if (!message) - return - - message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN)) - - if(!message) - return - - var/rendered = "[name] says, \"[message]\"" - - to_chat(owner, "[rendered]") - to_chat(src, "[rendered]") - -/mob/abstract/mental/friend/emote(act,m_type=1,message = null) - return - -/mob/abstract/mental/friend/Move(NewLoc, Dir = 0) - loc = NewLoc - dir = Dir - if(get_dist(src, owner) > 9) - yank() - return TRUE - return TRUE - -/mob/abstract/mental/friend/movement_delay() - return 2 diff --git a/code/datums/brain_damage/mild.dm b/code/datums/brain_damage/mild.dm deleted file mode 100644 index 4a0c1bc15ea..00000000000 --- a/code/datums/brain_damage/mild.dm +++ /dev/null @@ -1,288 +0,0 @@ -//Mild traumas are the most common; they are generally minor annoyances. -//They can be suppressed with minaphobin, but not chemically cured, although brain surgery still works. -//Most of the old brain damage effects have been transferred to the dumbness trauma. - -/datum/brain_trauma/mild - -/datum/brain_trauma/mild/hallucinations - name = "Hallucinations" - desc = "Patient suffers constant hallucinations." - scan_desc = "schizophrenia" - gain_text = "You feel your grip on reality slipping..." - lose_text = "You feel more grounded." - cure_type = CURE_SOLITUDE - -/datum/brain_trauma/mild/hallucinations/on_life() - owner.hallucination = min(owner.hallucination + 10, 50) - ..() - -/datum/brain_trauma/mild/hallucinations/on_lose() - owner.hallucination = 0 - ..() - -/datum/brain_trauma/mild/stuttering - name = "Stuttering" - desc = "Patient can't speak properly." - scan_desc = "reduced mouth coordination" - gain_text = "Speaking clearly is getting harder." - lose_text = "You feel in control of your speech." - cure_type = CURE_CRYSTAL - -/datum/brain_trauma/mild/stuttering/on_life() - owner.stuttering = min(owner.stuttering + 5, 25) - ..() - -/datum/brain_trauma/mild/stuttering/on_lose() - owner.stuttering = 0 - ..() - -/datum/brain_trauma/mild/dumbness - name = "Dumbness" - desc = "Patient has reduced brain activity, making them less intelligent." - scan_desc = "reduced brain activity" - gain_text = "You feel dumber." - lose_text = "You feel smart again." - cure_type = CURE_CRYSTAL - -/datum/brain_trauma/mild/dumbness/on_gain() - owner.disabilities |= DUMB - ..() - -/datum/brain_trauma/mild/dumbness/on_life() - owner.tarded = min(owner.slurring + 5, 25) - if(prob(3)) - owner.emote("drool") - ..() - -/datum/brain_trauma/mild/dumbness/on_lose() - owner.disabilities &= ~DUMB - owner.tarded = 0 - ..() - -/datum/brain_trauma/mild/speech_impediment - name = "Speech Impediment" - desc = "Patient is unable to form coherent sentences." - scan_desc = "communication disorder" - gain_text = "You feel lost for words!" - lose_text = "You regain your bearing!" - cure_type = CURE_CRYSTAL - -/datum/brain_trauma/mild/speech_impediment/on_gain() - owner.disabilities |= UNINTELLIGIBLE - ..() - -/datum/brain_trauma/mild/speech_impediment/on_lose() - owner.disabilities &= ~UNINTELLIGIBLE - ..() - -/datum/brain_trauma/mild/tourettes - name = "Tourettes Syndrome" - desc = "Patient is compelled to vulgarity." - scan_desc = "vulgarity problem" - gain_text = "Your mind fills with foul language!" - lose_text = "Your mind returns to decency." - cure_type = CURE_CRYSTAL - can_gain = FALSE - -/datum/brain_trauma/mild/tourettes/on_gain() - owner.disabilities |= TOURETTES - ..() - -/datum/brain_trauma/mild/tourettes/on_lose() - owner.disabilities &= ~TOURETTES - ..() - -/datum/brain_trauma/mild/gertie - name = "Gerstmann Syndrome" - desc = "Patient displays severe left right disorientation." - scan_desc = "left-right disorientation" - gain_text = "You wonder to yourself, does three rights really make a left?!" - lose_text = "You remember that you can just turn left directly!" - cure_type = CURE_HYPNOSIS - -/datum/brain_trauma/mild/gertie/on_gain() - owner.disabilities |= GERTIE - ..() - -/datum/brain_trauma/mild/gertie/on_lose() - owner.disabilities &= ~GERTIE - ..() - -/datum/brain_trauma/mild/concussion - name = "Concussion" - desc = "Patient's brain is concussed." - scan_desc = "a concussion" - gain_text = "Your head hurts!" - lose_text = "The pressure inside your head starts fading." - cure_type = CURE_SURGERY - -/datum/brain_trauma/mild/concussion/on_life() - if(prob(25)) - switch(rand(1,9)) - if(1) - if(ishuman(owner)) - var/mob/living/carbon/human/H = owner - to_chat(owner, "Your stomach writhes with pain.") - H.vomit() - if(2,3) - to_chat(owner, "You feel light-headed.") - owner.dizziness = max(owner.slurring, 10) - if(4,5) - to_chat(owner, "it becomes hard to see for some reason.") - owner.confused = max(owner.slurring, 10) - owner.apply_effect(10,EYE_BLUR) - if(6 to 9) - to_chat(owner, "Your tongue feels thick in your mouth.") - owner.slurring = max(owner.slurring, 30) - - ..() - -/datum/brain_trauma/mild/concussion/on_lose() - owner.dizziness = 0 - owner.slurring = 0 - owner.confused = 0 - ..() - -/datum/brain_trauma/mild/muscle_weakness - name = "Muscle Weakness" - desc = "Patient experiences occasional bouts of muscle weakness." - scan_desc = "weak motor nerve signal" - gain_text = "Your muscles feel oddly faint." - lose_text = "You feel in control of your muscles again." - cure_type = CURE_CRYSTAL - -/datum/brain_trauma/mild/muscle_weakness/on_life() - var/fall_chance = 5 - if(owner.m_intent == M_RUN) - fall_chance += 15 - if(prob(fall_chance) && !owner.lying && !owner.buckled_to) - to_chat(owner, "Your leg gives out!") - owner.Weaken(5) - - else if(owner.get_active_hand()) - var/drop_chance = 15 - var/obj/item/I = owner.get_active_hand() - drop_chance += I.w_class - if(prob(drop_chance) && owner.drop_from_inventory(I)) - to_chat(owner, "You drop [I]!") - - else if(prob(3)) - to_chat(owner, "You feel a sudden weakness in your muscles!") - owner.adjustHalLoss(25) - ..() - -/datum/brain_trauma/mild/muscle_spasms - name = "Muscle Spasms" - desc = "Patient has occasional muscle spasms, causing them to move unintentionally." - scan_desc = "nervous fits" - gain_text = "Your muscles feel oddly faint." - lose_text = "You feel in control of your muscles again." - cure_type = CURE_CRYSTAL - -/datum/brain_trauma/mild/muscle_spasms/on_life() - if(prob(25)) - switch(rand(1,5)) - if(1) - if(owner.canmove) - to_chat(owner, "Your leg spasms!") - step(owner, pick(cardinal)) - if(2) - if(owner.incapacitated()) - return - var/obj/item/I = owner.get_active_hand() - if(I) - to_chat(owner, "Your fingers spasm!") - I.attack_self(owner) - if(3) - var/prev_intent = owner.a_intent - owner.set_intent(I_HURT) - - var/list/mob/living/targets = list() - var/range = 1 - if(istype(owner.get_active_hand(), /obj/item/gun)) //get targets to shoot at - range = 7 - for(var/turf/T in oview(owner, range)) - targets += T - - else - for(var/mob/M in oview(owner, range)) - if(isliving(M)) - targets += M - if(LAZYLEN(targets)) - to_chat(owner, "Your arm spasms!") - owner.ClickOn(pick(targets)) - owner.set_intent(prev_intent) - if(4) - var/prev_intent = owner.a_intent - owner.set_intent(I_HURT) - to_chat(owner, "Your arm spasms!") - owner.ClickOn(owner) - owner.set_intent(prev_intent) - if(5) - if(owner.incapacitated()) - return - var/obj/item/I =owner.get_active_hand() - var/list/turf/targets = list() - for(var/turf/T in oview(owner, 3)) - targets += T - if(LAZYLEN(targets) && I) - to_chat(owner, "Your arm spasms!") - owner.throw_item(pick(targets)) - ..() - -/datum/brain_trauma/mild/nearsightedness - name = "Cerebral Near-Blindness" - desc = "Patient's brain is loosely connected to its eyes." - scan_desc = "minor damage to the brain's occipital lobe" - gain_text = "You can barely see!" - lose_text = "Your vision returns." - cure_type = CURE_SURGERY - -/datum/brain_trauma/mild/nearsightedness/on_gain() - owner.disabilities |= NEARSIGHTED - ..() - -//no fiddling with genetics to get out of this one -/datum/brain_trauma/mild/nearsightedness/on_life() - if(!(owner.disabilities & NEARSIGHTED)) - on_gain() - ..() - -/datum/brain_trauma/mild/nearsightedness/on_lose() - if(owner.disabilities & NEARSIGHTED) - owner.disabilities &= ~NEARSIGHTED - ..() - -/datum/brain_trauma/mild/colorblind - name = "Partial Colorblindedness" - desc = "Patient's brain is loosely connected to ocular cones." - scan_desc = "minor damage to the brain's occipital lobe" - gain_text = "Your perception of color distorts!" - lose_text = "Your vision returns." - cure_type = CURE_SURGERY - var/colorblindedness - -/datum/brain_trauma/mild/colorblind/on_gain() - colorblindedness = pick("deuteranopia", "protanopia", "tritanopia") - switch(colorblindedness) - if("deuteranopia") - owner.add_client_color(/datum/client_color/deuteranopia) - if("protanopia") - owner.add_client_color(/datum/client_color/protanopia) - if("tritanopia") - owner.add_client_color(/datum/client_color/tritanopia) - ..() - -/datum/brain_trauma/mild/colorblind/on_life() - if(owner.client && !owner.client.color) - on_gain() - -/datum/brain_trauma/mild/colorblind/on_lose() - switch(colorblindedness) - if("deuteranopia") - owner.remove_client_color(/datum/client_color/deuteranopia) - if("protanopia") - owner.remove_client_color(/datum/client_color/protanopia) - if("tritanopia") - owner.remove_client_color(/datum/client_color/tritanopia) - ..() \ No newline at end of file diff --git a/code/datums/brain_damage/phobia.dm b/code/datums/brain_damage/phobia.dm deleted file mode 100644 index 962cf3277ff..00000000000 --- a/code/datums/brain_damage/phobia.dm +++ /dev/null @@ -1,125 +0,0 @@ -/datum/brain_trauma/mild/phobia - name = "Phobia" - desc = "Patient is unreasonably afraid of something." - scan_desc = "phobia" - gain_text = "" - lose_text = "" - var/phobia_type - var/next_check = 0 - var/next_scare = 0 - var/list/trigger_words - //instead of cycling every atom, only cycle the relevant types - var/list/trigger_mobs - var/list/trigger_objs //also checked in mob equipment - var/list/trigger_turfs - var/list/trigger_species - cure_type = CURE_HYPNOSIS - -/datum/brain_trauma/mild/phobia/New(mob/living/carbon/C, _permanent, specific_type) - phobia_type = specific_type - if(!phobia_type) - phobia_type = pick(SStraumas.phobia_types) - - gain_text = "You start finding [phobia_type] very unnerving..." - lose_text = "You no longer feel afraid of [phobia_type]." - scan_desc += " of [phobia_type]" - trigger_words = SStraumas.phobia_words[phobia_type] - trigger_mobs = SStraumas.phobia_mobs[phobia_type] - trigger_objs = SStraumas.phobia_objs[phobia_type] - trigger_turfs = SStraumas.phobia_turfs[phobia_type] - trigger_species = SStraumas.phobia_species[phobia_type] - ..() - -/datum/brain_trauma/mild/phobia/on_life() - ..() - if(owner.eye_blind) - if(phobia_type == "darkness" && prob(25)) - freak_out() //rip - return - if(world.time > next_check && world.time > next_scare) - next_check = world.time + 50 - var/list/seen_atoms = view(7, owner) - - if(LAZYLEN(trigger_objs)) - for(var/obj/O in seen_atoms) - if(is_type_in_typecache(O, trigger_objs)) - freak_out(O) - return - - if(LAZYLEN(trigger_turfs)) - for(var/turf/T in seen_atoms) - if(is_type_in_typecache(T, trigger_turfs)) - freak_out(T) - return - if((T.get_lumcount(0,1) <= 0.25) && phobia_type == "darkness") //probably snowflake but can't think of a better way without creating a new trauma type entirely - freak_out(T) - return - - if(LAZYLEN(trigger_mobs) || LAZYLEN(trigger_objs)) - for(var/mob/M in seen_atoms) - if(is_type_in_typecache(M, trigger_mobs)) - freak_out(M) - return - - if((M.stat == DEAD) && phobia_type == "death") //probably snowflake but can't think of a better way without creating a new trauma type entirely - freak_out(M) - return - - else if(ishuman(M)) //check their equipment for trigger items - var/mob/living/carbon/human/H = M - - if(LAZYLEN(trigger_species) && H.species && is_type_in_typecache(H.species, trigger_species) && H != owner) - freak_out(H) - - for(var/X in H.contents) - var/obj/I = X - if(!QDELETED(I) && is_type_in_typecache(I, trigger_objs)) - freak_out(I) - return - -/datum/brain_trauma/mild/phobia/on_hear(message, speaker, message_language, raw_message, radio_freq) - if(owner.disabilities & DEAF || world.time < next_scare) //words can't trigger you if you can't hear them *taps head* - return message - for(var/word in trigger_words) - if(findtext(message, word)) - addtimer(CALLBACK(src, .proc/freak_out, null, word), 10) //to react AFTER the chat message - break - return message - -/datum/brain_trauma/mild/phobia/on_say(message) - for(var/word in trigger_words) - if(findtext(message, word)) - to_chat(owner, "You can't bring yourself to say the word \"[word]\"!") - return "" - return message - -/datum/brain_trauma/mild/phobia/proc/freak_out(atom/reason, trigger_word) - next_scare = world.time + 120 - var/message = pick("spooks you to the bone", "shakes you up", "terrifies you", "sends you into a panic", "sends chills down your spine") - if(reason) - to_chat(owner, "Seeing [reason] [message]!") - else if(trigger_word) - to_chat(owner, "Hearing \"[trigger_word]\" [message]!") - else - to_chat(owner, "Something [message]!") - var/reaction = rand(1,4) - owner.emote("scream") - switch(reaction) - if(1) - to_chat(owner, "You are paralyzed with fear!") - owner.Stun(3) - owner.Jitter(15) - if(2) - owner.Jitter(5) - owner.say("AAARRRGGGH!!") - if(reason) - owner.pointed(reason) - if(3) - to_chat(owner, "You shut your eyes in terror!") - owner.Jitter(5) - owner.eye_blind += 10 - if(4) - owner.dizziness += 10 - owner.confused += 10 - owner.Jitter(10) - owner.stuttering += 10 \ No newline at end of file diff --git a/code/datums/brain_damage/schizo.dm b/code/datums/brain_damage/schizo.dm deleted file mode 100644 index 47af1953176..00000000000 --- a/code/datums/brain_damage/schizo.dm +++ /dev/null @@ -1,205 +0,0 @@ -#define OWNER 0 -#define STRANGER 1 - -/datum/brain_trauma/severe/split_personality - name = "Split Personality" - desc = "Patient's brain is split into two personalities, which randomly switch control of the body." - scan_desc = "conflicting neuroimaging reports" - gain_text = "You feel like your mind was split in two." - lose_text = "You feel alone again." - cure_type = CURE_SOLITUDE - var/current_controller = OWNER - var/initialized = FALSE //to prevent personalities deleting themselves while we wait for ghosts - var/mob/living/mental/split_personality/stranger_backseat //there's two so they can swap without overwriting - var/mob/living/mental/split_personality/owner_backseat - -/datum/brain_trauma/severe/split_personality/on_gain() - ..() - make_backseats() - -/datum/brain_trauma/severe/split_personality/proc/make_backseats() - stranger_backseat = new(owner, src) - SSghostroles.add_spawn_atom("split_personality", stranger_backseat) - owner_backseat = new(owner, src) - -/datum/brain_trauma/severe/split_personality/on_life() - if(owner.stat == DEAD) - if(current_controller != OWNER) - switch_personalities() - qdel(src) - else if(prob(3)) - switch_personalities() - ..() - -/datum/brain_trauma/severe/split_personality/on_lose() - if(current_controller != OWNER) //it would be funny to cure a guy only to be left with the other personality, but it seems too cruel - switch_personalities() - QDEL_NULL(stranger_backseat) - QDEL_NULL(owner_backseat) - ..() - -/datum/brain_trauma/severe/split_personality/proc/switch_personalities() - if(QDELETED(owner) || owner.stat == DEAD || QDELETED(stranger_backseat) || QDELETED(owner_backseat)) - return - - var/mob/living/mental/split_personality/current_backseat - var/mob/living/mental/split_personality/free_backseat - if(current_controller == OWNER) - current_backseat = stranger_backseat - free_backseat = owner_backseat - else - current_backseat = owner_backseat - free_backseat = stranger_backseat - - log_game("[current_backseat]/([current_backseat.ckey]) assumed control of [owner]/([owner.ckey]) due to [src]. (Original owner: [current_controller == OWNER ? owner.ckey : current_backseat.ckey])") - to_chat(owner, "You feel your control being taken away... your other personality is in charge now!") - to_chat(current_backseat, "You manage to take control of your body!") - - //Body to backseat - - var/h2b_id = owner.computer_id - var/h2b_ip= owner.lastKnownIP - owner.computer_id = null - owner.lastKnownIP = null - - free_backseat.ckey = owner.ckey - - free_backseat.name = owner.name - - if(owner.mind) - free_backseat.mind = owner.mind - - if(!free_backseat.computer_id) - free_backseat.computer_id = h2b_id - - if(!free_backseat.lastKnownIP) - free_backseat.lastKnownIP = h2b_ip - - //Backseat to body - - var/s2h_id = current_backseat.computer_id - var/s2h_ip= current_backseat.lastKnownIP - current_backseat.computer_id = null - current_backseat.lastKnownIP = null - - owner.ckey = current_backseat.ckey - owner.mind = current_backseat.mind - - if(!owner.computer_id) - owner.computer_id = s2h_id - - if(!owner.lastKnownIP) - owner.lastKnownIP = s2h_ip - - current_controller = !current_controller - - -/mob/living/mental/split_personality - name = "split personality" - real_name = "unknown conscience" - var/mob/living/carbon/body - var/datum/brain_trauma/severe/split_personality/trauma - -/mob/living/mental/split_personality/Initialize(mapload, _trauma) - if(iscarbon(loc)) - body = loc - name = body.real_name - real_name = body.real_name - trauma = _trauma - return ..() - -/mob/living/mental/split_personality/Life() - if(QDELETED(body)) - qdel(src) //in case trauma deletion doesn't already do it - - if((body.stat == DEAD && trauma.owner_backseat == src)) - trauma.switch_personalities() - qdel(trauma) - - //if one of the two ghosts, the other one stays permanently - if(!body.client && trauma.initialized) - trauma.switch_personalities() - qdel(trauma) - - ..() - -/mob/living/mental/split_personality/LateLogin() - ..() - to_chat(src, "As a split personality, you cannot do anything but observe. However, you will eventually gain control of your body, switching places with the current personality.") - -/mob/living/mental/split_personality/say(message) - to_chat(src, "You cannot speak, your other self is controlling your body!") - return FALSE - -/mob/living/mental/split_personality/emote(message) - return - -/mob/living/mental/split_personality/Destroy() - SSghostroles.remove_spawn_atom("split_personality", src) - return ..() - -///////////////BRAINWASHING//////////////////// - -/datum/brain_trauma/severe/split_personality/brainwashing - name = "Split Personality" - desc = "Patient's brain is split into two personalities, which randomly switch control of the body." - scan_desc = "complete lobe separation" - gain_text = "" - lose_text = "You are free of your brainwashing." - can_gain = FALSE - var/codeword - var/objective - -/datum/brain_trauma/severe/split_personality/brainwashing/New(obj/item/organ/internal/brain/B, _permanent, _codeword, _objective) - ..() - if(_codeword) - codeword = _codeword - else - codeword = pick(strings("ion_laws.json", "ionabstract")\ - | strings("ion_laws.json", "ionobjects")\ - | strings("ion_laws.json", "ionadjectives")\ - | strings("ion_laws.json", "ionthreats")\ - | strings("ion_laws.json", "ionfood")\ - | strings("ion_laws.json", "iondrinks")) - -/datum/brain_trauma/severe/split_personality/brainwashing/on_gain() - ..() - var/mob/living/mental/split_personality/traitor/traitor_backseat = stranger_backseat - traitor_backseat.codeword = codeword - traitor_backseat.objective = objective - -/datum/brain_trauma/severe/split_personality/brainwashing/make_backseats() - stranger_backseat = new /mob/living/mental/split_personality/traitor(owner, src, codeword, objective) - owner_backseat = new(owner, src) - -/datum/brain_trauma/severe/split_personality/brainwashing/on_life() - return //no random switching - -/datum/brain_trauma/severe/split_personality/brainwashing/on_hear(message, speaker, message_language, raw_message, radio_freq) - if(owner.disabilities & DEAF || owner == speaker) - return message - if(findtext(message, codeword)) - message = replacetext(message, codeword, "[codeword]") - addtimer(CALLBACK(src, /datum/brain_trauma/severe/split_personality.proc/switch_personalities), 10) - return message - -/datum/brain_trauma/severe/split_personality/brainwashing/on_say(message) - if(findtext(message, codeword)) - return "" //oh hey did you want to tell people about the secret word to bring you back? - return message - -/mob/living/mental/split_personality/traitor - name = "split personality" - real_name = "unknown conscience" - var/objective - var/codeword - -/mob/living/mental/split_personality/traitor/LateLogin() - ..() - to_chat(src, "As a brainwashed personality, you cannot do anything yet but observe. However, you may gain control of your body if you hear the special codeword, switching places with the current personality.") - to_chat(src, "Your activation codeword is: [codeword]") - if(objective) - to_chat(src, "Your master left you an objective: [objective]. Follow it at all costs when in control.") - -#undef OWNER -#undef STRANGER diff --git a/code/datums/brain_damage/severe.dm b/code/datums/brain_damage/severe.dm deleted file mode 100644 index 1aa599898d8..00000000000 --- a/code/datums/brain_damage/severe.dm +++ /dev/null @@ -1,249 +0,0 @@ -//Severe traumas, when your brain gets abused way too much. -//These range from very annoying to completely debilitating. - -/datum/brain_trauma/severe - -/datum/brain_trauma/severe/mute - name = "Mutism" - desc = "Patient is completely unable to speak." - scan_desc = "extensive damage to the brain's language center" - gain_text = "You forget how to speak!" - lose_text = "You suddenly remember how to speak." - cure_type = CURE_CRYSTAL - -/datum/brain_trauma/severe/mute/on_gain() - owner.sdisabilities |= MUTE - ..() - -//no fiddling with genetics to get out of this one -/datum/brain_trauma/severe/mute/on_life() - if(!(owner.sdisabilities & MUTE)) - on_gain() - ..() - -/datum/brain_trauma/severe/mute/on_lose() - owner.sdisabilities &= ~MUTE - ..() - -/datum/brain_trauma/severe/blindness - name = "Cerebral Blindness" - desc = "Patient's brain is no longer connected to its eyes." - scan_desc = "extensive damage to the brain's occipital lobe" - gain_text = "You can't see!" - lose_text = "Your vision returns." - cure_type = CURE_SURGERY - -/datum/brain_trauma/severe/blindness/on_gain() - owner.sdisabilities |= BLIND - ..() - -//no fiddling with genetics to get out of this one -/datum/brain_trauma/severe/blindness/on_life() - if(!(owner.sdisabilities & BLIND)) - on_gain() - ..() - -/datum/brain_trauma/severe/blindness/on_lose() - if(owner.sdisabilities & BLIND) - owner.sdisabilities &= ~BLIND - ..() - -/datum/brain_trauma/severe/paralysis - name = "Paralysis" - desc = "Patient's brain can no longer control its motor functions." - scan_desc = "cerebral paralysis" - gain_text = "You can't feel your body anymore!" - lose_text = "You can feel your limbs again!" - cure_type = CURE_SURGERY - can_gain = FALSE - -/datum/brain_trauma/severe/paralysis/on_life() - owner.Weaken(200) - ..() - -/datum/brain_trauma/severe/paralysis/on_lose() - owner.SetWeakened(0) - ..() - -/datum/brain_trauma/severe/narcolepsy - name = "Narcolepsy" - desc = "Patient may involuntarily fall asleep during normal activities." - scan_desc = "traumatic narcolepsy" - gain_text = "You have a constant feeling of drowsiness..." - lose_text = "You feel awake and aware again." - cure_type = CURE_HYPNOSIS - can_gain = FALSE - -/datum/brain_trauma/severe/narcolepsy/on_life() - ..() - if(owner.stat == UNCONSCIOUS || owner.sleeping > 0) - return - var/sleep_chance = 5 - if(owner.m_intent == M_RUN) - sleep_chance += 15 - if(owner.drowsyness) - sleep_chance += owner.drowsyness + 5 - if(owner.drowsyness >= 66) - owner.drowsyness = 0 - if(prob(sleep_chance)) - to_chat(owner, "You fall asleep.") - owner.Sleeping(60) - else if(prob(sleep_chance * 2)) - to_chat(owner, "You feel tired...") - owner.drowsyness += 10 - -/datum/brain_trauma/severe/monophobia - name = "Monophobia" - desc = "Patient feels sick and distressed when not around other people, leading to potentially lethal levels of stress." - scan_desc = "severe monophobia" - gain_text = "" - lose_text = "You feel like you could be safe on your own." - var/stress = 0 - cure_type = CURE_HYPNOSIS - -/datum/brain_trauma/severe/monophobia/on_gain() - ..() - if(check_alone()) - to_chat(owner, "You feel really lonely...") - else - to_chat(owner, "You feel safe, as long as you have people around you.") - -/datum/brain_trauma/severe/monophobia/on_life() - ..() - if(check_alone()) - stress = min(stress + 0.5, 100) - if(stress > 10 && (prob(5))) - stress_reaction() - else - stress -= 4 - -/datum/brain_trauma/severe/monophobia/proc/check_alone() - if(owner.disabilities & BLIND) - return TRUE - for(var/mob/M in oview(owner, 7)) - if(!isliving(M)) //ghosts ain't people - continue - if((istype(M, /mob/living/simple_animal)) || M.ckey) - return FALSE - return TRUE - -/datum/brain_trauma/severe/monophobia/proc/stress_reaction() - if(owner.stat != CONSCIOUS) - return - - var/high_stress = (stress > 60) //things get psychosomatic from here on - switch(rand(1,6)) - if(1) - if(!high_stress) - to_chat(owner, "You feel sick...") - else - to_chat(owner, "You feel really sick at the thought of being alone!") - addtimer(CALLBACK(owner, /mob/living/carbon/human.proc/vomit, high_stress), 50) //blood vomit if high stress - if(2) - if(!high_stress) - to_chat(owner, "You can't stop shaking...") - owner.dizziness += 20 - owner.confused += 20 - owner.Jitter(20) - else - to_chat(owner, "You feel weak and scared! If only you weren't alone...") - owner.dizziness += 20 - owner.confused += 20 - owner.Jitter(20) - owner.adjustHalLoss(50) - - if(3, 4) - if(!high_stress) - to_chat(owner, "You feel really lonely...") - else - to_chat(owner, "You're going mad with loneliness!") - owner.hallucination += 20 - - if(5) - if(!high_stress) - to_chat(owner, "Your heart skips a beat.") - owner.adjustOxyLoss(8) - else - if(prob(15) && ishuman(owner)) - var/mob/living/carbon/human/H = owner - var/obj/item/organ/internal/heart/heart = H.internal_organs_by_name[BP_HEART] - heart.take_damage(heart.min_bruised_damage) - to_chat(H, "You feel a stabbing pain in your heart!") - else - to_chat(owner, "You feel your heart lurching in your chest...") - owner.adjustOxyLoss(8) - -/datum/brain_trauma/severe/discoordination - name = "Discoordination" - desc = "Patient is unable to use complex tools or machinery." - scan_desc = "extreme discoordination" - gain_text = "You can barely control your hands!" - lose_text = "You feel in control of your hands again." - cure_type = CURE_CRYSTAL - -/datum/brain_trauma/severe/discoordination/on_gain() - owner.disabilities |= MONKEYLIKE - ..() - -/datum/brain_trauma/severe/discoordination/on_lose() - owner.disabilities &= ~MONKEYLIKE - ..() - -/datum/brain_trauma/severe/aphasia - name = "Aphasia" - desc = "Patient is unable to speak or understand any language." - scan_desc = "extensive damage to the brain's language center" - gain_text = "You have trouble forming words in your head..." - lose_text = "You suddenly remember how languages work." - var/list/prev_languages = list() - var/datum/language_holder/mob_language - cure_type = CURE_SURGERY - -/datum/brain_trauma/severe/aphasia/on_gain() - for(var/datum/language/L in owner.languages) - prev_languages.Add(L) - owner.remove_language(L.name) - owner.add_language(LANGUAGE_GIBBERING) - ..() - -/datum/brain_trauma/severe/aphasia/on_lose() - for(var/datum/language/L in prev_languages) - owner.add_language(L.name) - prev_languages.Remove(L) - owner.remove_language(LANGUAGE_GIBBERING) - ..() - -/datum/brain_trauma/severe/pacifism - name = "Traumatic Non-Violence" - desc = "Patient is extremely unwilling to harm others in violent ways." - scan_desc = "pacific syndrome" - gain_text = "You feel oddly peaceful." - lose_text = "You no longer feel compelled to not harm." - cure_type = CURE_HYPNOSIS - -/datum/brain_trauma/severe/pacifism/on_gain() - owner.disabilities |= PACIFIST - ..() - -/datum/brain_trauma/severe/pacifism/on_lose() - owner.disabilities &= ~PACIFIST - ..() - -/datum/brain_trauma/severe/total_colorblind - name = "Total Colorblindedness" - desc = "Patient's brain is loosely connected to ocular cones." - scan_desc = "minor damage to the brain's occipital lobe" - gain_text = "Your perception of color vanishes!" - lose_text = "Your vision returns." - -/datum/brain_trauma/severe/total_colorblind/on_gain() - owner.add_client_color(/datum/client_color/monochrome) - ..() - -/datum/brain_trauma/severe/total_colorblind/on_life() - if(owner.client && !owner.client.color) - on_gain() - -/datum/brain_trauma/severe/total_colorblind/on_lose() - owner.remove_client_color(/datum/client_color/monochrome) - ..() \ No newline at end of file diff --git a/code/datums/brain_damage/special_ed.dm b/code/datums/brain_damage/special_ed.dm deleted file mode 100644 index d19033e8c12..00000000000 --- a/code/datums/brain_damage/special_ed.dm +++ /dev/null @@ -1,184 +0,0 @@ -//Brain traumas that are rare and/or somewhat beneficial; -//they are the easiest to cure, which means that if you want -//to keep them, you can't cure your other traumas -/datum/brain_trauma/special - -/datum/brain_trauma/special/bluespace_prophet - name = "Bluespace Prophecy" - desc = "Patient can sense the bob and weave of bluespace around them, showing them passageways no one else can see." - scan_desc = "bluespace attunement" - gain_text = "You feel the bluespace pulsing around you..." - lose_text = "The faint pulsing of bluespace fades into silence." - var/next_portal = 0 - cure_type = CURE_SURGERY - -/datum/brain_trauma/special/bluespace_prophet/on_life() - if(world.time > next_portal) - next_portal = world.time + 100 - var/list/turf/possible_turfs = list() - for(var/turf/T in range(owner, 8)) - if(!T.density) - var/clear = TRUE - for(var/obj/O in T) - if(O.density) - clear = FALSE - break - if(clear) - possible_turfs += T - - if(!LAZYLEN(possible_turfs)) - return - - var/turf/first_turf = pick(possible_turfs) - if(!first_turf) - return - - possible_turfs -= (possible_turfs & range(first_turf, 3)) - - var/turf/second_turf = pick(possible_turfs) - if(!second_turf) - return - - var/obj/effect/bluespace_stream/first = new(first_turf, owner) - var/obj/effect/bluespace_stream/second = new(second_turf, owner) - - first.linked_to = second - second.linked_to = first - first.seer = owner - second.seer = owner - -/obj/effect/bluespace_stream - name = "bluespace stream" - desc = "You see a hidden pathway through bluespace..." - var/image_icon = 'icons/effects/effects.dmi' - var/image_state = "bluestream" - var/image_layer = 4.1 - invisibility = INVISIBILITY_OBSERVER - var/obj/effect/bluespace_stream/linked_to - var/mob/living/carbon/seer - var/mob/living/carbon/target = null - var/image/current_image = null - -/obj/effect/bluespace_stream/Initialize(mapload, var/mob/living/carbon/T) - . = ..() - target = T - current_image = GetImage() - if(target.client) - target.client.images |= current_image - QDEL_IN(src, 300) - -/obj/effect/bluespace_stream/proc/GetImage() - var/image/I = image(image_icon,src,image_state,image_layer,dir=src.dir) - return I - -/obj/effect/overlay/temp/bluespace_fissure - name = "bluespace fissure" - icon_state = "bluestream_fade" - duration = 9 - -/obj/effect/bluespace_stream/attack_hand(mob/user) - if(user != seer || !linked_to) - return - var/slip_in_message = pick("slides sideways in an odd way, and disappears", "jumps into an unseen dimension",\ - "sticks one leg straight out, wiggles their foot, and is suddenly gone", "stops, then blinks out of reality", \ - "is pulled into an invisible vortex, vanishing from sight") - var/slip_out_message = pick("silently fades in", "leaps out of thin air","appears", "walks out of an invisible doorway",\ - "slides out of a fold in spacetime") - to_chat(user, "You try to align with the bluespace stream...") - if(do_after(user, 20)) - new /obj/effect/overlay/temp/bluespace_fissure(get_turf(src)) - new /obj/effect/overlay/temp/bluespace_fissure(get_turf(linked_to)) - user.forceMove(get_turf(linked_to)) - user.visible_message(SPAN_WARNING("[user] [slip_in_message]."), SPAN_NOTICE("You enter \the [src]...")) - user.visible_message(SPAN_WARNING("[user] [slip_out_message]."), SPAN_NOTICE("...and find your way to the other side.")) - -/datum/brain_trauma/special/love - name = "Hyper-dependency" - desc = "Patient feels lovesick and is emotionally dependent to a specific person." - scan_desc = "severe dependency" - gain_text = "" - lose_text = "You feel love leave your heart." - var/stress = 0 - var/datum/weakref/beloved = null - cure_type = CURE_HYPNOSIS - -/datum/brain_trauma/special/love/on_gain() - ..() - for(var/mob/living/L in view(7,owner)) - if(L != owner) - beloved = L - break - if(beloved) - to_chat(owner, "You can't help but love [beloved]. You can't bear to be apart from them, and would do anything they say.") - - else - to_chat(owner, "You feel a brief burst of passion, but it quickly fades.") - qdel() - -/datum/brain_trauma/special/love/on_life() - ..() - if(check_alone()) - stress = min(stress + 0.5, 100) - if(stress > 10 && (prob(10))) - stress_reaction() - else - stress = max(0, stress - 4) - if(prob(5) && stress > 0) - var/mushy = pick("You feel so good when [beloved] is with you.","You can't believe you ever lived without [beloved].","You'd do anything for [beloved].","[beloved] makes everything better.","You can never let [beloved] leave again.") - to_chat(owner, "[mushy]") - -/datum/brain_trauma/special/love/proc/check_alone() - if(owner.disabilities & BLIND) - return TRUE - - for(var/mob/living/L in view(owner, 7)) - if(L == beloved) - return FALSE - - return TRUE - -/datum/brain_trauma/special/love/proc/stress_reaction() - if(owner.stat != CONSCIOUS) - return - - var/high_stress = (stress > 60) //things get psychosomatic from here on - switch(rand(1,6)) - if(1) - if(!high_stress) - to_chat(owner, "You feel sick...") - else - to_chat(owner, "You feel really sick at the thought of being seperated from [beloved]!") - addtimer(CALLBACK(owner, /mob/living/carbon/human.proc/vomit, high_stress), 50) //blood vomit if high stress - if(2) - if(!high_stress) - to_chat(owner, "You can't stop shaking...") - owner.dizziness += 20 - owner.confused += 20 - owner.Jitter(20) - else - to_chat(owner, "You feel weak and scared! If only [beloved] was here!") - owner.dizziness += 20 - owner.confused += 20 - owner.Jitter(20) - owner.adjustHalLoss(50) - - if(3, 4) - if(!high_stress) - to_chat(owner, "You feel really lonely without [beloved]...") - else - to_chat(owner, "You're going mad with loneliness! You need [beloved]!") - owner.hallucination += 20 - - if(5) - if(!high_stress) - to_chat(owner, "Your heart skips a beat. Oh, [beloved]!") - owner.adjustOxyLoss(8) - else - if(prob(15) && ishuman(owner)) - var/mob/living/carbon/human/H = owner - var/obj/item/organ/internal/heart/heart = H.internal_organs_by_name[BP_HEART] - heart.take_damage(heart.min_bruised_damage) - to_chat(H, "You feel a stabbing pain in your heart!") - else - to_chat(owner, "You feel your heart lurching in your chest... Oh, [beloved]!") - owner.adjustOxyLoss(8) diff --git a/code/datums/components/armor/armor.dm b/code/datums/components/armor/armor.dm index 1c5b7ed24f7..89949a1b9ac 100644 --- a/code/datums/components/armor/armor.dm +++ b/code/datums/components/armor/armor.dm @@ -36,6 +36,7 @@ if(damage <= 0) return args.Copy() + var/blocked = get_blocked(damage_type, damage_flags, armor_pen, damage) on_blocking(damage, damage_type, damage_flags, armor_pen, blocked) diff --git a/code/datums/observation/equipped.dm b/code/datums/observation/equipped.dm index db3311994bc..06dc5a8b013 100644 --- a/code/datums/observation/equipped.dm +++ b/code/datums/observation/equipped.dm @@ -34,7 +34,10 @@ var/datum/observ/item_equipped/item_equipped_event = new() * Equipped Handling * ********************/ -/obj/item/equipped(var/mob/user, var/slot) +/obj/item/equipped(var/mob/user, var/slot, var/assisted_equip = FALSE) . = ..() mob_equipped_event.raise_event(user, src, slot) item_equipped_event.raise_event(src, user, slot) + +/obj/item/proc/check_equipped(var/mob/user, var/slot, var/assisted_equip = FALSE) + return TRUE \ No newline at end of file diff --git a/code/datums/observation/helpers.dm b/code/datums/observation/helpers.dm new file mode 100644 index 00000000000..298896b5693 --- /dev/null +++ b/code/datums/observation/helpers.dm @@ -0,0 +1,14 @@ +/atom/movable/proc/move_to_turf(var/atom/movable/am, var/old_loc, var/new_loc) + var/turf/T = get_turf(new_loc) + if(T && T != loc) + forceMove(T) + +// Similar to above but we also follow into nullspace +/atom/movable/proc/move_to_turf_or_null(var/atom/movable/am, var/old_loc, var/new_loc) + var/turf/T = get_turf(new_loc) + if(T != loc) + forceMove(T) + +/atom/movable/proc/move_to_loc_or_null(var/atom/movable/am, var/old_loc, var/new_loc) + if(new_loc != loc) + forceMove(new_loc) \ No newline at end of file diff --git a/code/datums/observation/see_in_dark_set.dm b/code/datums/observation/see_in_dark_set.dm new file mode 100644 index 00000000000..ae678ff6ce9 --- /dev/null +++ b/code/datums/observation/see_in_dark_set.dm @@ -0,0 +1,25 @@ +// Observer Pattern Implementation: See In Dark Set +// Registration type: /mob +// +// Raised when: A mob's see_in_dark value changes. +// +// Arguments that the called proc should expect: +// /mob/sightee: The mob that had its see_in_dark set +// /old_see_in_dark: see_in_dark before the change +// /new_see_in_dark: see_in_dark after the change + +var/datum/observ/see_in_dark_set/see_in_dark_set_event = new() + +/datum/observ/see_in_dark_set + name = "See In Dark Set" + expected_type = /mob + +/*************************** +* See In Dark Set Handling * +***************************/ + +/mob/proc/set_see_in_dark(var/new_see_in_dark) + var/old_see_in_dark = sight + if(old_see_in_dark != new_see_in_dark) + see_in_dark = new_see_in_dark + see_in_dark_set_event.raise_event(src, old_see_in_dark, new_see_in_dark) \ No newline at end of file diff --git a/code/datums/observation/see_invisible_set.dm b/code/datums/observation/see_invisible_set.dm new file mode 100644 index 00000000000..8d9f1f0dd38 --- /dev/null +++ b/code/datums/observation/see_invisible_set.dm @@ -0,0 +1,25 @@ +// Observer Pattern Implementation: See Invisible Set +// Registration type: /mob +// +// Raised when: A mob's see_invisible value changes. +// +// Arguments that the called proc should expect: +// /mob/sightee: The mob that had its sight set +// /old_see_invisible: see_invisible before the change +// /new_see_invisible: see_invisible after the change + +var/datum/observ/see_invisible_set/see_invisible_set_event = new() + +/datum/observ/see_invisible_set + name = "See Invisible Set" + expected_type = /mob + +/***************************** +* See Invisible Set Handling * +*****************************/ + +/mob/proc/set_see_invisible(var/new_see_invisible) + var/old_see_invisible = see_invisible + if(old_see_invisible != new_see_invisible) + see_invisible = new_see_invisible + see_invisible_set_event.raise_event(src, old_see_invisible, new_see_invisible) \ No newline at end of file diff --git a/code/datums/observation/sight_set.dm b/code/datums/observation/sight_set.dm new file mode 100644 index 00000000000..2863c8d9340 --- /dev/null +++ b/code/datums/observation/sight_set.dm @@ -0,0 +1,25 @@ +// Observer Pattern Implementation: Sight Set +// Registration type: /mob +// +// Raised when: A mob's sight value changes. +// +// Arguments that the called proc should expect: +// /mob/sightee: The mob that had its sight set +// /old_sight: sight before the change +// /new_sight: sight after the change + +var/datum/observ/sight_set/sight_set_event = new() + +/datum/observ/sight_set + name = "Sight Set" + expected_type = /mob + +/********************* +* Sight Set Handling * +*********************/ + +/mob/proc/set_sight(var/new_sight) + var/old_sight = sight + if(old_sight != new_sight) + sight = new_sight + sight_set_event.raise_event(src, old_sight, new_sight) \ No newline at end of file diff --git a/code/datums/outfits/event/outfit_events.dm b/code/datums/outfits/event/outfit_events.dm index 19ba1523328..d27093fb002 100644 --- a/code/datums/outfits/event/outfit_events.dm +++ b/code/datums/outfits/event/outfit_events.dm @@ -4,13 +4,25 @@ uniform = /obj/item/clothing/under/lance back = /obj/item/gun/energy/rifle/pulse gloves = /obj/item/clothing/gloves/force/basic - shoes = /obj/item/clothing/shoes/magboots belt = /obj/item/storage/belt/military l_ear = /obj/item/device/radio/headset/ert - id = /obj/item/card/id/syndicate - suit_store = /obj/item/tank/oxygen - suit = /obj/item/clothing/suit/space/void/lancer + head = /obj/item/clothing/head/helmet/space/void/lancer + species_head = list( + SPECIES_UNATHI = /obj/item/clothing/head/helmet/space/void/lancer/unathi + ) + + suit = /obj/item/clothing/suit/space/void/lancer + species_suit = list( + SPECIES_UNATHI = /obj/item/clothing/suit/space/void/lancer/unathi + ) + suit_store = /obj/item/tank/oxygen + + shoes = /obj/item/clothing/shoes/jackboots + species_shoes = list( + SPECIES_UNATHI = /obj/item/clothing/shoes/jackboots/toeless + ) + belt_contents = list( /obj/item/plastique = 1, /obj/item/grenade/frag = 1, @@ -21,60 +33,61 @@ /obj/item/melee/baton/loaded = 1, /obj/item/grenade/empgrenade = 1 ) + + id = /obj/item/card/id/syndicate var/id_access = "Lancer" +/datum/outfit/admin/event/lance/post_equip(mob/living/carbon/human/H, visualsOnly) + organize_voidsuit(H) + /datum/outfit/admin/event/lance/get_id_access() return get_syndicate_access(id_access) /datum/outfit/admin/event/lance/engineer name = "Lance Engineer" - uniform = /obj/item/clothing/under/lance back = /obj/item/gun/projectile/shotgun/pump/combat/sol + gloves = /obj/item/clothing/gloves/yellow - shoes = /obj/item/clothing/shoes/magboots - belt = /obj/item/storage/belt/utility/full - l_ear = /obj/item/device/radio/headset/ert - id = /obj/item/card/id/syndicate - suit_store = /obj/item/tank/oxygen - suit = /obj/item/clothing/suit/space/void/lancer - head = /obj/item/clothing/head/helmet/space/void/lancer + species_gloves = list( + SPECIES_UNATHI = /obj/item/clothing/gloves/yellow/specialu + ) + + belt = /obj/item/storage/belt/utility/very_full + belt_contents = null + accessory = /obj/item/clothing/accessory/storage/brown_vest accessory_contents = list( /obj/item/plastique = 3, /obj/item/grenade/frag = 1, /obj/item/device/flash = 1 ) - belt_contents = list( - /obj/item/device/multitool = 1 - ) id_access = "Lance Engineer" /datum/outfit/admin/event/lance/medic name = "Lance Medic" - uniform = /obj/item/clothing/under/lance gloves = /obj/item/clothing/gloves/latex/nitrile - shoes = /obj/item/clothing/shoes/magboots + species_gloves = list( + SPECIES_UNATHI = /obj/item/clothing/gloves/latex/nitrile/unathi + ) + belt = /obj/item/storage/belt/medical mask = /obj/item/clothing/mask/surgical - l_ear = /obj/item/device/radio/headset/ert - id = /obj/item/card/id/syndicate - suit_store = /obj/item/tank/oxygen - suit = /obj/item/clothing/suit/space/void/lancer - head = /obj/item/clothing/head/helmet/space/void/lancer + + l_pocket = /obj/item/reagent_containers/glass/bottle/inaprovaline + r_pocket = /obj/item/reagent_containers/glass/bottle/thetamycin + accessory = /obj/item/clothing/accessory/holster/thigh + accessory_contents = list(/obj/item/gun/energy/pulse/pistol = 1) belt_contents = list( /obj/item/device/healthanalyzer = 1, /obj/item/reagent_containers/hypospray/combat = 1, /obj/item/reagent_containers/syringe = 1, /obj/item/personal_inhaler/combat = 1, /obj/item/reagent_containers/personal_inhaler_cartridge/large = 2, - /obj/item/reagent_containers/glass/bottle/dexalin_plus = 1, - /obj/item/reagent_containers/glass/bottle/inaprovaline = 1, - /obj/item/reagent_containers/glass/bottle/thetamycin = 1 + /obj/item/reagent_containers/glass/bottle/dexalin_plus = 1 ) - accessory_contents = list(/obj/item/gun/energy/pulse/pistol = 1) id_access = "Lance Medic" /datum/outfit/admin/event/lance/operative @@ -84,12 +97,7 @@ back = /obj/item/storage/backpack/satchel gloves = /obj/item/clothing/gloves/latex shoes = /obj/item/clothing/shoes/laceup - belt = /obj/item/storage/belt/utility/full - l_ear = /obj/item/device/radio/headset/ert - id = /obj/item/card/id/syndicate - suit_store = /obj/item/tank/oxygen - suit = /obj/item/clothing/suit/space/void/lancer - head = /obj/item/clothing/head/helmet/space/void/lancer + belt = /obj/item/storage/belt/utility/very_full accessory = /obj/item/clothing/accessory/holster/thigh accessory_contents = list(/obj/item/gun/energy/pulse/pistol = 1) @@ -97,11 +105,11 @@ /obj/item/device/flash = 1, /obj/item/clothing/gloves/yellow = 1 ) - belt_contents = list( - /obj/item/device/multitool = 1 - ) id_access = "Lance Operative" +/datum/outfit/admin/event/lance/operative/post_equip(mob/living/carbon/human/H, visualsOnly) + return + /datum/outfit/admin/event/sol_marine name = "Solarian Marine" diff --git a/code/datums/outfits/event/outfit_scc.dm b/code/datums/outfits/event/outfit_scc.dm new file mode 100644 index 00000000000..bedea30cc05 --- /dev/null +++ b/code/datums/outfits/event/outfit_scc.dm @@ -0,0 +1,57 @@ +/datum/outfit/admin/scc + name = "SCC Agent" + + uniform = /obj/item/clothing/under/rank/scc + back = /obj/item/storage/backpack/satchel + shoes = /obj/item/clothing/shoes/laceup + l_ear = /obj/item/device/radio/headset/ert/ccia + glasses = /obj/item/clothing/glasses/sunglasses + wrist = /obj/item/modular_computer/handheld/wristbound/preset/advanced/command + + l_pocket = /obj/item/reagent_containers/spray/pepper + r_pocket = /obj/item/device/taperecorder/cciaa + + id = /obj/item/card/id + + backpack_contents = list( + /obj/item/storage/box/engineer = 1 + ) + + id_icon = "centcom" + var/id_access = "SCC Agent" + +/datum/outfit/admin/scc/get_id_access() + return get_all_station_access() | get_centcom_access(id_access) + +/datum/outfit/admin/scc/executive + name = "SCC Executive" + + uniform = /obj/item/clothing/under/rank/scc/executive + + id_access = "SCC Executive" + +/datum/outfit/admin/scc/bodyguard + name = "SCC Bodyguard" + + head = /obj/item/clothing/head/helmet/merc/scc + uniform = /obj/item/clothing/under/tactical + suit = /obj/item/clothing/suit/armor/carrier/heavy/scc + shoes = /obj/item/clothing/shoes/jackboots + wrist = /obj/item/modular_computer/handheld/wristbound/preset/advanced/security + + l_pocket = /obj/item/shield/energy + r_pocket = /obj/item/device/radio + + accessory = /obj/item/clothing/accessory/holster/armpit + accessory_contents = list(/obj/item/gun/energy/repeater) + + backpack_contents = list( + /obj/item/storage/box/engineer = 1, + /obj/item/reagent_containers/spray/pepper = 1, + /obj/item/melee/baton/loaded = 1, + /obj/item/grenade/chem_grenade/gas = 1, + /obj/item/device/flash = 1, + /obj/item/handcuffs/ziptie = 2 + ) + + id_access = "SCC Bodyguard" \ No newline at end of file diff --git a/code/datums/outfits/outfit.dm b/code/datums/outfits/outfit.dm index 11d281fc2af..d8db3d8dde5 100644 --- a/code/datums/outfits/outfit.dm +++ b/code/datums/outfits/outfit.dm @@ -28,6 +28,7 @@ var/back = null // Mutually exclusive with and will override backpack choices below. Use for RIGs, tanks, etc. var/belt = null var/gloves = null + var/wrist = null var/shoes = null var/head = null var/mask = null @@ -40,6 +41,14 @@ var/accessory = null var/suit_accessory = null + // species specific item paths, in the form of + // thing = list(SPECIES_NAME = /type/path/here) + // if no path is found, the default fallback (var without the species_ prefix) will be used + var/list/species_head + var/list/species_suit + var/list/species_gloves + var/list/species_shoes + //The following vars must be paths var/l_hand = null var/r_hand = null @@ -179,17 +188,45 @@ equip_item(H, uniform, slot_w_uniform) if(accessory) equip_uniform_accessory(H) - if(suit) + var/got_suit = FALSE + if(length(species_suit)) + var/path = species_suit[H.species.name] + if(path) + got_suit = TRUE + equip_item(H, path, slot_wear_suit) + if(suit_accessory) + equip_suit_accessory(H) + if(suit && !got_suit) equip_item(H, suit, slot_wear_suit) if(suit_accessory) equip_suit_accessory(H) if(belt) equip_item(H, belt, slot_belt) - if(gloves) + var/got_gloves = FALSE + if(length(species_gloves)) + var/path = species_gloves[H.species.name] + if(path) + got_gloves = TRUE + equip_item(H, path, slot_gloves) + if(gloves && !got_gloves) equip_item(H, gloves, slot_gloves) - if(shoes) + if(wrist) + equip_item(H, wrist, slot_wrists) + var/got_shoes = FALSE + if(length(species_shoes)) + var/path = species_shoes[H.species.name] + if(path) + got_shoes = TRUE + equip_item(H, path, slot_shoes) + if(shoes && !got_shoes) equip_item(H, shoes, slot_shoes) - if(head) + var/got_head = FALSE + if(length(species_head)) + var/path = species_head[H.species.name] + if(path) + got_head = TRUE + equip_item(H, path, slot_head) + if(head && !got_head) equip_item(H, head, slot_head) if(mask) equip_item(H, mask, slot_wear_mask) @@ -204,9 +241,9 @@ equip_item(H, suit_store, slot_s_store) if(l_hand) - H.put_in_l_hand(new l_hand(H)) + equip_item(H, l_hand, slot_l_hand) if(r_hand) - H.put_in_r_hand(new r_hand(H)) + equip_item(H, r_hand, slot_r_hand) if(allow_pda_choice) switch(H.pda_choice) @@ -284,6 +321,27 @@ H.update_body() return 1 +// this proc takes all the scattered voidsuit pieces and reassembles them into one piece +/datum/outfit/proc/organize_voidsuit(mob/living/carbon/human/H, var/add_magboots = TRUE) + var/obj/item/tank/T = H.s_store + H.unEquip(T, TRUE) + + var/obj/item/clothing/suit/space/void/VS = H.wear_suit + H.unEquip(VS, TRUE) + + var/obj/item/clothing/head/helmet/VH = H.head + H.unEquip(VH, TRUE, VS) + VS.helmet = VH + + T.forceMove(VS) + VS.tank = T + + if(add_magboots) + var/obj/item/clothing/shoes/magboots/M = new /obj/item/clothing/shoes/magboots(VH) + VS.boots = M + + H.equip_to_slot_if_possible(VS, slot_wear_suit) + /datum/outfit/proc/apply_fingerprints(mob/living/carbon/human/H) if(!istype(H)) return @@ -305,6 +363,8 @@ H.shoes.add_fingerprint(H, 1) if(H.gloves) H.gloves.add_fingerprint(H, 1) + if(H.wrists) + H.wrists.add_fingerprint(H, 1) if(H.l_ear) H.l_ear.add_fingerprint(H, 1) if(H.r_ear) diff --git a/code/datums/outfits/outfit_antag.dm b/code/datums/outfits/outfit_antag.dm index 898f925d594..c5fa191e642 100644 --- a/code/datums/outfits/outfit_antag.dm +++ b/code/datums/outfits/outfit_antag.dm @@ -110,6 +110,7 @@ allow_backbag_choice = FALSE uniform = /obj/item/clothing/under/syndicate/ninja + l_hand = /obj/item/hardsuit_token back = null belt = /obj/item/storage/belt/ninja shoes = /obj/item/clothing/shoes/swat/ert @@ -138,10 +139,6 @@ if(visualsOnly) return - var/obj/item/rig/light/ninja/rig = new /obj/item/rig/light/ninja(src) - rig.dnaLock = H.dna - H.equip_to_slot_or_del(rig, slot_l_hand) - H.equip_to_slot_or_del(new /obj/item/device/special_uplink/ninja(H, H.mind), slot_l_store) /datum/outfit/admin/syndicate/mercenary @@ -506,7 +503,7 @@ uniform = /obj/item/clothing/under/chameleon/wizard back = /obj/item/storage/backpack/chameleon/wizard suit = /obj/item/clothing/suit/chameleon/wizard - head = /obj/item/clothing/head/softcap/chameleon/wizard + head = /obj/item/clothing/head/chameleon/wizard shoes = /obj/item/clothing/shoes/chameleon/wizard l_ear = /obj/item/device/radio/headset/bluespace r_pocket = /obj/item/teleportation_scroll diff --git a/code/datums/progressbar.dm b/code/datums/progressbar.dm index 1abbedec4a6..1227f6bd3c6 100644 --- a/code/datums/progressbar.dm +++ b/code/datums/progressbar.dm @@ -3,6 +3,7 @@ /datum/progressbar var/goal = 1 + var/destroy_on_full = FALSE var/last_progress = 0 var/image/bar var/shown = 0 @@ -46,6 +47,8 @@ if (!shown) user.client.images += bar shown = TRUE + if(destroy_on_full && progress == goal) + QDEL_IN(src, 5) /datum/progressbar/proc/shiftDown() --listindex @@ -76,5 +79,8 @@ client.images -= bar client = null +/datum/progressbar/autocomplete + destroy_on_full = TRUE + #undef PROGRESSBAR_ANIMATION_TIME #undef PROGRESSBAR_HEIGHT \ No newline at end of file diff --git a/code/datums/records.dm b/code/datums/records.dm index 73aa506357d..d82abadc18f 100644 --- a/code/datums/records.dm +++ b/code/datums/records.dm @@ -148,7 +148,7 @@ age = H.age fingerprint = md5(H.dna.uni_identity) sex = H.gender - species = H.get_species() + species = H.get_species(FALSE, TRUE) citizenship = H.citizenship employer = H.employer_faction religion = SSrecords.get_religion_record_name(H.religion) diff --git a/code/datums/trading/goods.dm b/code/datums/trading/goods.dm index 913d6a44a56..596f4715d41 100644 --- a/code/datums/trading/goods.dm +++ b/code/datums/trading/goods.dm @@ -190,7 +190,7 @@ /obj/item/clothing/head/bomb_hood = TRADER_BLACKLIST_ALL, /obj/item/clothing/head/caphat = TRADER_BLACKLIST_ALL, /obj/item/clothing/head/centhat = TRADER_BLACKLIST, - /obj/item/clothing/head/softcap/chameleon = TRADER_BLACKLIST, + /obj/item/clothing/head/chameleon = TRADER_BLACKLIST, /obj/item/clothing/head/collectable = TRADER_BLACKLIST, /obj/item/clothing/head/culthood = TRADER_BLACKLIST_ALL, /obj/item/clothing/head/helmet = TRADER_BLACKLIST_ALL, @@ -353,6 +353,8 @@ Sells devices, odds and ends, and medical stuff /obj/item/gun/energy/plasmacutter = TRADER_THIS_TYPE, /obj/item/clothing/head/helmet/space/void/mining = TRADER_THIS_TYPE, /obj/item/clothing/suit/space/void/mining = TRADER_THIS_TYPE, + /obj/item/clothing/head/helmet/space/void/mining/fluff = TRADER_BLACKLIST, //No custom items + /obj/item/clothing/suit/space/void/mining/fluff = TRADER_BLACKLIST, //No custom items /obj/machinery/mining/drill = TRADER_THIS_TYPE, /obj/machinery/mining/brace = TRADER_THIS_TYPE, /mob/living/heavy_vehicle/premade/ripley = TRADER_THIS_TYPE, diff --git a/code/datums/underwear/bottom.dm b/code/datums/underwear/bottom.dm index 91e1585efbf..4972834b3ae 100644 --- a/code/datums/underwear/bottom.dm +++ b/code/datums/underwear/bottom.dm @@ -70,6 +70,10 @@ name = "Shorts, Expedition" icon_state = "shorts_expedition" +/datum/category_item/underwear/bottom/shorts_scc + name = "Shorts, SCC" + icon_state = "shorts_scc" + /datum/category_item/underwear/bottom/shorts_fleet name = "Shorts, Fleet" icon_state = "shorts_fleet" diff --git a/code/datums/underwear/undershirt.dm b/code/datums/underwear/undershirt.dm index d6cf7e103b1..cf0b401eaf8 100644 --- a/code/datums/underwear/undershirt.dm +++ b/code/datums/underwear/undershirt.dm @@ -194,6 +194,14 @@ name = "Shirt, Meat" icon_state = "shirt_meat" +/datum/category_item/underwear/undershirt/shirt_scc + name = "Shirt, SCC" + icon_state = "shirt_scc" + +/datum/category_item/underwear/undershirt/shirt_scc_fem + name = "Shirt, SCC feminine" + icon_state = "shirt_scc_fem" + /datum/category_item/underwear/undershirt/shirt_nt name = "Shirt, NT" icon_state = "shirt_nano" diff --git a/code/datums/uplink/ammunition.dm b/code/datums/uplink/ammunition.dm index 477f1e69a0b..2149de5bc48 100644 --- a/code/datums/uplink/ammunition.dm +++ b/code/datums/uplink/ammunition.dm @@ -2,59 +2,52 @@ * Ammunition * *************/ /datum/uplink_item/item/ammo - item_cost = 4 + item_cost = 1 category = /datum/uplink_category/ammunition /datum/uplink_item/item/ammo/mc9mm name = "9mm Magazine" - item_cost = 1 path = /obj/item/ammo_magazine/mc9mm desc = "Contains ten rounds of 9mm bullets." /datum/uplink_item/item/ammo/darts name = "Chemical Darts" - item_cost = 1 path = /obj/item/ammo_magazine/chemdart desc = "Contains five chemical darts for use with a dart gun." /datum/uplink_item/item/ammo/fourty_five name = ".45 Pistol Magazine" - item_cost = 2 path = /obj/item/ammo_magazine/c45m desc = "Contains seven rounds of .45 bullets." /datum/uplink_item/item/ammo/submachinegundrum name = "Submachine Gun Drum Magazine (.45)" - item_cost = 4 + item_cost = 2 path = /obj/item/ammo_magazine/submachinedrum desc = "Contains fifty rounds of .45 bullets, for use with the vintage submachine gun." /datum/uplink_item/item/ammo/submachinegunmag name = "Submachine Gun Magazine (.45)" - item_cost = 2 path = /obj/item/ammo_magazine/submachinemag desc = "Contains twenty rounds of .45 bullets, for use with the vintage submachine gun." /datum/uplink_item/item/ammo/a357 name = ".357 Speedloader" - item_cost = 2 path = /obj/item/ammo_magazine/a357 desc = "Contains eight rounds of .357 bullets." /datum/uplink_item/item/ammo/shotgun_shells name = "Box of Shells" - item_cost = 3 path = /obj/item/storage/box/shotgunshells desc = "Contains eight shotgun buckshot shells." /datum/uplink_item/item/ammo/plasma_mag name = "Plasma Shotgun Magazine" - item_cost = 3 + item_cost = 2 path = /obj/item/ammo_magazine/plasma desc = "Contains ten plasma cells." /datum/uplink_item/item/ammo/rifle_mag name = "7.62mm clip" - item_cost = 2 path = /obj/item/ammo_magazine/boltaction - desc = "Contains five rounds of 7.62mm bullets." \ No newline at end of file + desc = "Contains five rounds of 7.62mm bullets." diff --git a/code/datums/uplink/announcements.dm b/code/datums/uplink/announcements.dm index b7b63fef46b..9e7acaa7dc2 100644 --- a/code/datums/uplink/announcements.dm +++ b/code/datums/uplink/announcements.dm @@ -12,7 +12,7 @@ /datum/uplink_item/abstract/announcements/fake_centcom/New() ..() name = "[current_map.boss_name] Update Announcement" - item_cost = round(DEFAULT_TELECRYSTAL_AMOUNT / 3) + item_cost = 5 desc = "Causes a falsified [current_map.boss_name] Update. Triggers immediately after supplying additional data." /datum/uplink_item/abstract/announcements/fake_centcom/extra_args(var/mob/user) @@ -32,7 +32,7 @@ name = "Crew Arrival Announcement/Records" desc = "Creates a fake crew arrival announcement as well as fake crew records, using your current appearance (including held items!) and worn id card. Trigger with care!" antag_roles = list(MODE_MERCENARY) - item_cost = 8 + item_cost = 4 /datum/uplink_item/abstract/announcements/fake_crew_arrival/get_goods(var/obj/item/device/uplink/U, var/loc, var/mob/user, var/list/args) if(!user) @@ -98,7 +98,7 @@ /datum/uplink_item/abstract/announcements/fake_radiation name = "Radiation Storm Announcement" desc = "Interferes with the station's radiation sensors. Triggers immediately upon investment." - item_cost = 4 + item_cost = 3 /datum/uplink_item/abstract/announcements/fake_radiation/get_goods(var/obj/item/device/uplink/U, var/loc) var/static/cooldown = 0 diff --git a/code/datums/uplink/corporate_equipment.dm b/code/datums/uplink/corporate_equipment.dm index 546efeb20f0..3ecd095c49c 100644 --- a/code/datums/uplink/corporate_equipment.dm +++ b/code/datums/uplink/corporate_equipment.dm @@ -3,24 +3,24 @@ /datum/uplink_item/item/corporate_equipment/suit/zavodskoi name = "Revenant Combat Suit" - item_cost = 10 + item_cost = 5 path = /obj/structure/closet/crate/gear_loadout/zavodskoi desc = "A full spaceworthy kit of a Zavodskoi Interstellar Revenant-type combat suit. Heavily resistant against fast projectiles and backpack-portable. Only wearable by Humans and Humanoid IPCs." /datum/uplink_item/item/corporate_equipment/suit/zenghu name = "Dragon Biohazard Control Suit" - item_cost = 10 + item_cost = 5 path = /obj/structure/closet/crate/gear_loadout/zenghu desc = "A full spaceworthy kit of a Zeng-Hu Pharmaceuticals Dragon-type biohazard containment suit. Entirely resistant against radiation in most circumstances. Only wearable by Humans and Humanoid IPCs." /datum/uplink_item/item/corporate_equipment/suit/hephaestus name = "Caiman Drop Suit" - item_cost = 10 + item_cost = 5 path = /obj/structure/closet/crate/gear_loadout/hephaestus desc = "A full spaceworthy kit of a Hephaestus Industries Caiman-type terraforming suit. Very resistant against slow-moving blunt force, but heavy. Only wearable by Humans and Humanoid IPCs." /datum/uplink_item/item/corporate_equipment/suit/einstein name = "Banshee Combat Suit" - item_cost = 10 + item_cost = 5 path = /obj/structure/closet/crate/gear_loadout/einstein - desc = "A full spaceworthy kit of an Einstein Engines Banshee-type infiltration suit. Resistant against lasers, but made of paper against anything else. Only wearable by Humans and Humanoid IPCs." \ No newline at end of file + desc = "A full spaceworthy kit of an Einstein Engines Banshee-type infiltration suit. Resistant against lasers, but made of paper against anything else. Only wearable by Humans and Humanoid IPCs." diff --git a/code/datums/uplink/devices and tools.dm b/code/datums/uplink/devices and tools.dm index 0e85f0da17b..cae29a14615 100644 --- a/code/datums/uplink/devices and tools.dm +++ b/code/datums/uplink/devices and tools.dm @@ -12,25 +12,25 @@ /datum/uplink_item/item/tools/toolbelt name = "Fully Loaded Tool-belt" - item_cost = 2 + item_cost = 1 path = /obj/item/storage/belt/utility/very_full desc = "A fully loaded tool-belt even Nanotrasen's top Chief Engineer would be proud to wear." /datum/uplink_item/item/tools/money name = "Operations Funding" - item_cost = 2 + item_cost = 1 path = /obj/item/storage/secure/briefcase/money desc = "A briefcase with 10,000 untraceable credits for funding your sneaky activities." /datum/uplink_item/item/tools/firingpin //todo, make this a special syndicate one instead of just a normal one? name = "Firing Pin" - item_cost = 2 + item_cost = 1 path = /obj/item/device/firing_pin desc = "A Syndicate-branded Firing pin - It should be compatible with nearly every weapon onboard." /datum/uplink_item/item/tools/surge name = "IPC surge prevention module" - item_cost = 10 + item_cost = 3 path = /obj/item/stack/nanopaste/surge desc = "An internal module that allow operative IPC frames to be protected from EMP pulse. The device has limited use that varies between two to five pulses" @@ -41,42 +41,42 @@ /datum/uplink_item/item/tools/plastique name = "C-4 (Destroys walls)" - item_cost = 2 + item_cost = 1 path = /obj/item/plastique desc = "A single block of C4, enough to breach any wall." /datum/uplink_item/item/tools/heavy_vest name = "Heavy Armor Kit" - item_cost = 3 + item_cost = 2 path = /obj/item/storage/box/syndie_kit/armor desc = "A heavy armor set consisting of a full kit. Not EVA capable." /datum/uplink_item/item/tools/encryptionkey_radio name = "Encrypted Radio Channel Key" - item_cost = 3 + item_cost = 1 path = /obj/item/device/encryptionkey/syndicate desc = "An encryption key for use in a headset, intercepts all frequencies and grants access to a secure syndicate frequency." /datum/uplink_item/item/tools/encryptionkey_binary name = "Binary Translator Key" - item_cost = 2 + item_cost = 1 path = /obj/item/device/encryptionkey/binary desc = "An encryption key for use in a headset, capable of intercepting stationbound binary communications." /datum/uplink_item/item/tools/emag name = "Cryptographic Sequencer" - item_cost = 5 + item_cost = 1 path = /obj/item/card/emag /datum/uplink_item/item/tools/personal_shield name = "Personal Shield" desc = "A personal shield that, when kept in your hand and activated, will protect its user from five projectile shots." - item_cost = 4 + item_cost = 1 path = /obj/item/device/personal_shield /datum/uplink_item/item/tools/hacking_tool name = "Door Hacking Tool" - item_cost = 4 + item_cost = 1 path = /obj/item/device/multitool/hacktool desc = "Appears and functions as a standard multitool until the mode is toggled by applying a screwdriver appropriately. \ When in hacking mode this device will grant full access to any standard airlock within 7 to 13 seconds. \ @@ -89,12 +89,12 @@ /datum/uplink_item/item/tools/thermal name = "Thermal Imaging Glasses" - item_cost = 6 + item_cost = 2 path = /obj/item/clothing/glasses/thermal/syndi /datum/uplink_item/item/tools/powersink name = "Powersink (DANGER!)" - item_cost = 10 + item_cost = 6 path = /obj/item/device/powersink /datum/uplink_item/item/tools/teleporter/New() @@ -103,56 +103,56 @@ /datum/uplink_item/item/tools/ai_module name = "Hacked AI Upload Module" - item_cost = 12 + item_cost = 4 path = /obj/item/aiModule/syndicate /datum/uplink_item/item/tools/supply_beacon name = "Hacked Supply Beacon (DANGER!)" - item_cost = 10 + item_cost = 4 path = /obj/item/supply_beacon desc = "A hacked supply beacon that will call in a random supply pod when deployed and activated. Steer clear of the area afterwards." /datum/uplink_item/item/tools/advancedpinpointer name = "Advanced pinpointer" - item_cost = 15 + item_cost = 5 path = /obj/item/pinpointer/advpinpointer desc = "An advanced pinpointer that can find any target with DNA along with various other items." /datum/uplink_item/item/tools/syndieborg name = "Syndicate Cyborg Teleporter" - item_cost = 35 + item_cost = 20 path = /obj/item/antag_spawner/borg_tele /datum/uplink_item/item/tools/thermal_drill name = "Thermal Safe Drill" - item_cost = 8 + item_cost = 3 path = /obj/item/thermal_drill /datum/uplink_item/item/tools/heatpatch name = "HUDPatch, Thermal" - item_cost = 6 + item_cost = 2 path = /obj/item/clothing/glasses/eyepatch/hud/thermal /datum/uplink_item/item/tools/nightpatch name = "HUDPatch, Night-Vision" - item_cost = 2 + item_cost = 1 path = /obj/item/clothing/glasses/eyepatch/hud/night /datum/uplink_item/item/tools/aviatortherm name = "Aviators, Thermal" - item_cost = 6 + item_cost = 2 path = /obj/item/clothing/glasses/thermal/aviator desc = "A pair of thermal-vision glasses disguised as aviator shades." /datum/uplink_item/item/tools/aviatornight name = "Aviators, Night-Vision" - item_cost = 2 + item_cost = 1 path = /obj/item/clothing/glasses/night/aviator desc = "A pair of night-vision glasses disguised as aviator shades." /datum/uplink_item/item/tools/suit_cooling_unit name = "Portable suit cooling unit" - item_cost = 2 + item_cost = 1 path = /obj/item/device/suit_cooling_unit desc = "A suit cooling unit with a high capacity power cell." @@ -170,24 +170,24 @@ /datum/uplink_item/item/tools/pin_extractor name = "Firing Pin Extractor" - item_cost = 2 + item_cost = 1 path = /obj/item/device/pin_extractor desc = "An extractor tool capable of extracting firing pins from most firearms." /datum/uplink_item/item/tools/radio_jammer name = "Radio Jammer" - item_cost = 5 + item_cost = 2 path = /obj/item/device/radiojammer desc = "A small jammer that can fit inside a pocket. Capable of disrupting nearby radios and hivenet transmitters." /datum/uplink_item/item/tools/jetpack name = "Jetpack" - item_cost = 3 + item_cost = 1 path = /obj/item/tank/jetpack/oxygen /datum/uplink_item/item/tools/electropack name = "Electropack" - item_cost = 3 + item_cost = 1 path = /obj/item/device/radio/electropack desc = "A backpack wired with electrodes. Sync up with a signaller, attach to an unwilling host and pulse the signal to shock them." @@ -199,17 +199,17 @@ /datum/uplink_item/item/tools/mesons_glasses name = "Mesons Scanners" desc = "These glasses make use of meson-scanning technology to allow the wearer to see through solid walls and floors." - item_cost = 2 + item_cost = 1 path = /obj/item/clothing/glasses/meson /datum/uplink_item/item/tools/materials_glasses name = "Optical Material Scanner" desc = "These glasses make use of scanning technology to allow the wearer to see objects through solid walls and floors." - item_cost = 2 + item_cost = 1 path = /obj/item/clothing/glasses/material /datum/uplink_item/item/tools/earmuff_headset name = "Earmuff Headset" desc = "This set of earmuffs has a secret compartment housing radio gear, allowing it to function as a standard headset." - item_cost = 2 - path = /obj/item/device/radio/headset/earmuff \ No newline at end of file + item_cost = 1 + path = /obj/item/device/radio/headset/earmuff diff --git a/code/datums/uplink/exosuit.dm b/code/datums/uplink/exosuit.dm index 54a58e58ba0..69442c9fcce 100644 --- a/code/datums/uplink/exosuit.dm +++ b/code/datums/uplink/exosuit.dm @@ -4,23 +4,23 @@ /datum/uplink_item/item/exosuit/combat name = "Combat Exosuit Dropper" desc = "A device that can be used to drop in a combat exosuit. Can only be used outside station areas, unless emagged, which is hazardous." - item_cost = 40 + item_cost = 25 path = /obj/item/device/orbital_dropper/mecha/combat /datum/uplink_item/item/exosuit/heavy name = "Heavy Exosuit Dropper" desc = "A device that can be used to drop in a heavy exosuit. Can only be used outside station areas, unless emagged, which is hazardous." - item_cost = 35 + item_cost = 20 path = /obj/item/device/orbital_dropper/mecha/heavy /datum/uplink_item/item/exosuit/light name = "Light Exosuit Dropper" desc = "A device that can be used to drop in a light exosuit. Can only be used outside station areas, unless emagged, which is hazardous." - item_cost = 25 + item_cost = 15 path = /obj/item/device/orbital_dropper/mecha /datum/uplink_item/item/exosuit/powerloader name = "Powerloader Exosuit Dropper" desc = "A device that can be used to drop in a powerloader exosuit. Can only be used outside station areas, unless emagged, which is hazardous." - item_cost = 20 - path = /obj/item/device/orbital_dropper/mecha/powerloader \ No newline at end of file + item_cost = 10 + path = /obj/item/device/orbital_dropper/mecha/powerloader diff --git a/code/datums/uplink/exosuit_equipment.dm b/code/datums/uplink/exosuit_equipment.dm index fb009c1c0b4..97cac824b6c 100644 --- a/code/datums/uplink/exosuit_equipment.dm +++ b/code/datums/uplink/exosuit_equipment.dm @@ -6,31 +6,31 @@ /datum/uplink_item/item/exosuit_equipment/mounted_gun name = "Mounted Electrolaser Carbine" desc = "A dual fire mode electrolaser system connected to the exosuit's targetting system." - item_cost = 4 + item_cost = 2 path = /obj/item/mecha_equipment/mounted_system/combat/taser /datum/uplink_item/item/exosuit_equipment/mounted_gun/ion name = "Mounted Ion Rifle" desc = "An exosuit-mounted ion rifle. Handle with care." - item_cost = 12 + item_cost = 7 path = /obj/item/mecha_equipment/mounted_system/combat/ion /datum/uplink_item/item/exosuit_equipment/mounted_gun/laser name = "Mounted Laser Rifle" desc = "An exosuit-mounted laser rifle. Handle with care." - item_cost = 8 + item_cost = 3 path = /obj/item/mecha_equipment/mounted_system/combat/laser /datum/uplink_item/item/exosuit_equipment/mounted_gun/smg name = "Mounted Machine Gun" desc = "An exosuit-mounted automatic weapon. Handle with care." - item_cost = 8 + item_cost = 3 path = /obj/item/mecha_equipment/mounted_system/combat/smg /datum/uplink_item/item/exosuit_equipment/mounted_launcher name = "Mounted Missile Rack" desc = "An SRM-8 missile rack loaded with explosive missiles." - item_cost = 20 + item_cost = 10 path = /obj/item/mecha_equipment/mounted_system/combat/missile // UTILITY // @@ -38,31 +38,31 @@ /datum/uplink_item/item/exosuit_equipment/mounted_tool name = "Mounted RFD-C" desc = "A RFD, modified to construct walls and floors. This one can be mounted on an exosuit." - item_cost = 10 + item_cost = 5 path = /obj/item/mecha_equipment/mounted_system/rfd /datum/uplink_item/item/exosuit_equipment/mounted_tool/clamp name = "Mounted Clamp" desc = "A large, heavy industrial cargo loading clamp." - item_cost = 3 + item_cost = 1 path = /obj/item/mecha_equipment/clamp /datum/uplink_item/item/exosuit_equipment/mounted_tool/catapult name = "Mounted Gravitational Catapult" desc = "An exosuit-mounted gravitational catapult." - item_cost = 8 + item_cost = 2 path = /obj/item/mecha_equipment/catapult /datum/uplink_item/item/exosuit_equipment/mounted_tool/drill name = "Mounted Drill" desc = "An exosuit-mounted drill." - item_cost = 4 + item_cost = 1 path = /obj/item/mecha_equipment/drill /datum/uplink_item/item/exosuit_equipment/mounted_tool/passenger name = "Mounted Passenger Compartment" desc = "An exosuit-mounted passenger compartment." - item_cost = 3 + item_cost = 1 path = /obj/item/mecha_equipment/sleeper/passenger_compartment // MEDICAL // @@ -70,11 +70,11 @@ /datum/uplink_item/item/exosuit_equipment/mounted_medical name = "Mounted Sleeper" desc = "An exosuit-mounted sleeper designed to maintain patients stabilized on their way to medical facilities." - item_cost = 6 + item_cost = 1 path = /obj/item/mecha_equipment/sleeper /datum/uplink_item/item/exosuit_equipment/mounted_medical/drone name = "Mounted Crisis Dronebay" desc = "A small shoulder-mounted dronebay containing a rapid response drone capable of moderately stabilizing a patient near the exosuit." - item_cost = 5 - path = /obj/item/mecha_equipment/crisis_drone \ No newline at end of file + item_cost = 1 + path = /obj/item/mecha_equipment/crisis_drone diff --git a/code/datums/uplink/gear loadout.dm b/code/datums/uplink/gear loadout.dm index e8a26a3b253..f8a1f66bc0f 100644 --- a/code/datums/uplink/gear loadout.dm +++ b/code/datums/uplink/gear loadout.dm @@ -1,6 +1,6 @@ /datum/uplink_item/item/gear_loadout category = /datum/uplink_category/gear_loadout - item_cost = 70 + item_cost = 35 /datum/uplink_item/item/gear_loadout/coalition name = "Coalition of Colonies Assets (Group)" @@ -9,7 +9,7 @@ /datum/uplink_item/item/gear_loadout/coalition_single name = "Coalition of Colonies Assets (Single)" path = /obj/structure/closet/crate/secure/gear_loadout/coalition_single - item_cost = 15 + item_cost = 10 /datum/uplink_item/item/gear_loadout/eridani name = "Eridani Corporate Federation Assets (Group)" @@ -18,7 +18,7 @@ /datum/uplink_item/item/gear_loadout/eridani_single name = "Eridani Corporate Federation Assets (Single)" path = /obj/structure/closet/crate/secure/gear_loadout/eridani_single - item_cost = 15 + item_cost = 10 /datum/uplink_item/item/gear_loadout/elyra name = "Serene Republic of Elyra Assets (Group)" @@ -27,7 +27,7 @@ /datum/uplink_item/item/gear_loadout/elyra_single name = "Serene Republic of Elyra Assets (Single)" path = /obj/structure/closet/crate/secure/gear_loadout/elyra_single - item_cost = 15 + item_cost = 10 /datum/uplink_item/item/gear_loadout/elyra name = "Serene Republic of Elyra Assets (Group)" @@ -36,7 +36,7 @@ /datum/uplink_item/item/gear_loadout/elyra_single name = "Serene Republic of Elyra Assets (Single)" path = /obj/structure/closet/crate/secure/gear_loadout/elyra_single - item_cost = 15 + item_cost = 10 /datum/uplink_item/item/gear_loadout/sol name = "Sol Alliance Assets (Group)" @@ -45,7 +45,7 @@ /datum/uplink_item/item/gear_loadout/sol_single name = "Sol Alliance Assets (Single)" path = /obj/structure/closet/crate/secure/gear_loadout/sol_single - item_cost = 15 + item_cost = 10 /datum/uplink_item/item/gear_loadout/dominia name = "Empire of Dominia Assets (Group)" @@ -54,12 +54,12 @@ /datum/uplink_item/item/gear_loadout/dominia_single name = "Empire of Dominia Assets (Single)" path = /obj/structure/closet/crate/secure/gear_loadout/dominia/single - item_cost = 15 + item_cost = 10 /datum/uplink_item/item/gear_loadout/cowboys name = "Frontier Cowboys (Group)" path = /obj/structure/closet/crate/secure/gear_loadout/ram_ranch - item_cost = 50 + item_cost = 35 /datum/uplink_item/item/gear_loadout/cowboy_single name = "Frontier Cowboy (Single)" @@ -75,4 +75,4 @@ name = "Kosmostrelki Assets (Single)" desc = "A crate containing gear for a single individual.The voidsuit is only usable by Tajara." path = /obj/structure/closet/crate/secure/gear_loadout/kosmostrelki/single - item_cost = 15 \ No newline at end of file + item_cost = 10 diff --git a/code/datums/uplink/grenades.dm b/code/datums/uplink/grenades.dm index 33ff1c7bcf7..c5ca626be53 100644 --- a/code/datums/uplink/grenades.dm +++ b/code/datums/uplink/grenades.dm @@ -6,41 +6,41 @@ /datum/uplink_item/item/grenades/manhack name = "Viscerator Delivery Grenade" - item_cost = 3 + item_cost = 2 path = /obj/item/grenade/spawnergrenade/manhacks desc = "A grenade that deploys five viscerator combat drones. Deadly in numbers, will not attack you or your allies." /datum/uplink_item/item/grenades/lubed_manhack name = "Lubed Viscerator Delivery Grenade" - item_cost = 8 + item_cost = 4 path = /obj/item/grenade/spawnergrenade/manhacks/lubed desc = "A grenade that deploys five lubed viscerator combat drones. Deadly in numbers, will not attack you or your allies. Works best when killed." /datum/uplink_item/item/grenades/anti_photon name = "5xPhoton Disruption Grenades" - item_cost = 2 + item_cost = 1 path = /obj/item/storage/box/anti_photons desc = "A box of five grenades that cause total darkness in the area they explode in. Circumvented by vision altering headgear. Useful for get-aways." /datum/uplink_item/item/grenades/smoke name = "5xSmoke Grenades" - item_cost = 2 + item_cost = 1 path = /obj/item/storage/box/smokes desc = "A box of five grenades that deploy smoke in the thrown area. Targets hidden in smoke are much harder to hit with ranged weaponry." /datum/uplink_item/item/grenades/emp name = "5xEMP Grenades" - item_cost = 5 + item_cost = 2 path = /obj/item/storage/box/emps desc = "A box of five grenades that cause a risky EMP explosion, capable of toggling headsets off, permanently destroying IPC units and draining a stationbound completely." /datum/uplink_item/item/grenades/frag name = "5xFrag Grenades" - item_cost = 12 + item_cost = 6 path = /obj/item/storage/box/frags /datum/uplink_item/item/grenades/cardox name = "5xCardox Grenades" - item_cost = 5 + item_cost = 2 path = /obj/item/storage/box/cardox - desc = "A box of five grenades that deploy cardox smoke in the thrown area. This smoke is incredibly toxic, especially to vaurca. It can also clear K'ois outbreaks with ease." \ No newline at end of file + desc = "A box of five grenades that deploy cardox smoke in the thrown area. This smoke is incredibly toxic, especially to vaurca. It can also clear K'ois outbreaks with ease." diff --git a/code/datums/uplink/hardsuit_modules.dm b/code/datums/uplink/hardsuit_modules.dm index 9d28710c91c..35a90951d21 100644 --- a/code/datums/uplink/hardsuit_modules.dm +++ b/code/datums/uplink/hardsuit_modules.dm @@ -6,41 +6,41 @@ /datum/uplink_item/item/hardsuit_modules/thermal name = "Thermal Scanner" - item_cost = 4 + item_cost = 1 path = /obj/item/rig_module/vision/thermal /datum/uplink_item/item/hardsuit_modules/energy_net name = "Net Projector" - item_cost = 5 + item_cost = 3 path = /obj/item/rig_module/fabricator/energy_net /datum/uplink_item/item/hardsuit_modules/ewar_voice name = "Electrowarfare Suite and Voice Synthesiser" - item_cost = 5 + item_cost = 1 path = /obj/item/storage/box/syndie_kit/ewar_voice /datum/uplink_item/item/hardsuit_modules/maneuvering_jets name = "Maneuvering Jets" - item_cost = 6 + item_cost = 1 path = /obj/item/rig_module/maneuvering_jets /datum/uplink_item/item/hardsuit_modules/egun name = "Mounted Energy Gun" - item_cost = 10 + item_cost = 6 path = /obj/item/rig_module/mounted/egun /datum/uplink_item/item/hardsuit_modules/power_sink name = "Power Sink" - item_cost = 8 + item_cost = 2 path = /obj/item/rig_module/power_sink /datum/uplink_item/item/hardsuit_modules/laser_canon name = "Mounted Laser Cannon" - item_cost = 14 + item_cost = 8 path = /obj/item/rig_module/mounted /datum/uplink_item/item/tools/rig_cooling_unit name = "mounted suit cooling unit" - item_cost = 6 + item_cost = 1 path = /obj/item/rig_module/cooling_unit - desc = "A mounted suit cooling unit for use with hardsuits." \ No newline at end of file + desc = "A mounted suit cooling unit for use with hardsuits." diff --git a/code/datums/uplink/highly visible and dangerous weapons.dm b/code/datums/uplink/highly visible and dangerous weapons.dm index a171b2f4b25..1125d93fda0 100644 --- a/code/datums/uplink/highly visible and dangerous weapons.dm +++ b/code/datums/uplink/highly visible and dangerous weapons.dm @@ -6,125 +6,125 @@ /datum/uplink_item/item/visible_weapons/dartgun name = "Dart Gun" - item_cost = 5 + item_cost = 3 path = /obj/item/gun/projectile/dartgun /datum/uplink_item/item/visible_weapons/crossbow name = "Energy Crossbow" - item_cost = 6 + item_cost = 3 path = /obj/item/gun/energy/crossbow /datum/uplink_item/item/visible_weapons/forcegloves name = "Force Gloves" - item_cost = 5 + item_cost = 3 path = /obj/item/clothing/gloves/force/syndicate /datum/uplink_item/item/visible_weapons/energy_sword name = "Energy Sword" - item_cost = 8 + item_cost = 4 path = /obj/item/melee/energy/sword /datum/uplink_item/item/visible_weapons/g9mm name = "Silenced 9mm" - item_cost = 6 + item_cost = 2 path = /obj/item/storage/box/syndie_kit/g9mm /datum/uplink_item/item/visible_weapons/hammer name = "Kneebreaker Hammer" - item_cost = 5 + item_cost = 3 path = /obj/item/melee/hammer /datum/uplink_item/item/visible_weapons/revolver name = "Revolver" - item_cost = 8 + item_cost = 4 path = /obj/item/gun/projectile/revolver /datum/uplink_item/item/visible_weapons/submachinegun name = "Submachine Gun" - item_cost = 14 + item_cost = 8 path = /obj/item/gun/projectile/automatic/tommygun /datum/uplink_item/item/visible_weapons/landmine name = "Land Mine" - item_cost = 5 + item_cost = 3 path = /obj/item/landmine /datum/uplink_item/item/visible_weapons/emplandmine name = "EMP Land Mine" - item_cost = 4 + item_cost = 3 path = /obj/item/landmine/emp /datum/uplink_item/item/visible_weapons/sleepylandmine name = "N2O Land Mine" - item_cost = 7 + item_cost = 3 path = /obj/item/landmine/n2o /datum/uplink_item/item/visible_weapons/caltrops name = "Caltrops" - item_cost = 4 + item_cost = 1 path = /obj/item/material/caltrops /datum/uplink_item/item/visible_weapons/powerfist name = "Power Fist" - item_cost = 4 + item_cost = 2 path = /obj/item/clothing/gloves/powerfist /datum/uplink_item/item/visible_weapons/clawedgloves name = "Clawed Gauntlets" - item_cost = 5 + item_cost = 3 path = /obj/item/clothing/gloves/claws /datum/uplink_item/item/visible_weapons/ballisticgauntlet name = "Ballistic Gauntlet" - item_cost = 10 + item_cost = 6 path = /obj/item/clothing/gloves/ballistic /datum/uplink_item/item/visible_weapons/gatling name = "Gatling Machine Gun" - item_cost = 50 + item_cost = 30 path = /obj/item/minigunpack /datum/uplink_item/item/visible_weapons/chainsaw name = "Chainsaw" - item_cost = 10 + item_cost = 6 path = /obj/item/material/twohanded/chainsaw/fueled /datum/uplink_item/item/visible_weapons/throwing_star name = "Steel Throwing Star" - item_cost = 2 + item_cost = 1 path = /obj/item/material/star /datum/uplink_item/item/visible_weapons/plasma_shotty name = "Plasma Shotgun" - item_cost = 15 + item_cost = 9 path = /obj/item/gun/projectile/plasma /datum/uplink_item/item/visible_weapons/icelance name = "Icelance Rifle" - item_cost = 6 + item_cost = 3 path = /obj/item/gun/energy/rifle/icelance /datum/uplink_item/item/visible_weapons/boltaction name = "Bolt-Action Rifle" - item_cost = 8 + item_cost = 3 path = /obj/item/gun/projectile/shotgun/pump/rifle /datum/uplink_item/item/visible_weapons/colt name = "Vintage .45 Pistol" - item_cost = 6 + item_cost = 2 path = /obj/item/gun/projectile/colt /datum/uplink_item/item/visible_weapons/custom_ka name = "Kinetic Laser Assembly" - item_cost = 8 + item_cost = 3 path = /obj/item/gun/custom_ka/frame01/illegal /datum/uplink_item/item/visible_weapons/teslagauntlet - name = "Tesla Gauntlet" - item_cost = 10 + name = "Tesla Glove" + item_cost = 6 path = /obj/item/clothing/gloves/tesla /datum/uplink_item/item/visible_weapons/random_weapon name = "Random Gun" - item_cost = 10 + item_cost = 3 path = /obj/item/storage/box/syndie_kit/random_weapon diff --git a/code/datums/uplink/implants.dm b/code/datums/uplink/implants.dm index 4ae8df168fc..3f5d8a67e9c 100644 --- a/code/datums/uplink/implants.dm +++ b/code/datums/uplink/implants.dm @@ -6,24 +6,24 @@ /datum/uplink_item/item/implants/imp_freedom name = "Freedom Implant" - item_cost = 5 + item_cost = 1 path = /obj/item/storage/box/syndie_kit/imp_freedom /datum/uplink_item/item/implants/imp_compress name = "Compressed Matter Implant" desc = "A box containing a single implanter and matter cartridge. To remove an unintended target, use the implanter in-hand then open the cartridge with a screwdriver." - item_cost = 6 + item_cost = 1 path = /obj/item/storage/box/syndie_kit/imp_compress /datum/uplink_item/item/implants/imp_explosive name = "Explosive Implant (DANGER!)" - item_cost = 8 + item_cost = 4 desc = "A box containing an explosive implant and implanter. Use the implant in-hand to set the explosion size and trigger phrase." path = /obj/item/storage/box/syndie_kit/imp_explosive /datum/uplink_item/item/implants/imp_deadman name = "Deadman Implant (DANGER!)" - item_cost = 6 + item_cost = 3 desc = "A box containing an explosive implant and implanter. The implant monitors vitals and will detonate when the subject dies." path = /obj/item/storage/box/syndie_kit/imp_deadman diff --git a/code/datums/uplink/martial_arts.dm b/code/datums/uplink/martial_arts.dm index ea995a9d182..b86ad7199d4 100644 --- a/code/datums/uplink/martial_arts.dm +++ b/code/datums/uplink/martial_arts.dm @@ -3,21 +3,21 @@ /datum/uplink_item/item/martial_arts/solcom name = "SolCom" - item_cost = 6 + item_cost = 2 path = /obj/item/martial_manual /datum/uplink_item/item/martial_arts/wrestling name = "Wrestling" - item_cost = 6 + item_cost = 2 path = /obj/item/martial_manual/wrestling /datum/uplink_item/item/martial_arts/swordsmanship name = "Swordsmanship" - item_cost = 5 + item_cost = 2 path = /obj/item/martial_manual/swordsmanship /datum/uplink_item/item/martial_arts/gun_kata name = "Gun-Kata" desc = "A manual containing basic Gun-Kata instruction and techniques. This is for projectile weapons, allowing you to reload by using a gun on a magazine, and automatically ejecting the magazine when it's empty." - item_cost = 4 - path = /obj/item/martial_manual/gun_kata \ No newline at end of file + item_cost = 1 + path = /obj/item/martial_manual/gun_kata diff --git a/code/datums/uplink/medical.dm b/code/datums/uplink/medical.dm index 014c1a8c043..999260c3469 100644 --- a/code/datums/uplink/medical.dm +++ b/code/datums/uplink/medical.dm @@ -11,30 +11,30 @@ /datum/uplink_item/item/medical/combathypo name = "Combat Hypospray" - item_cost = 4 + item_cost = 1 path = /obj/item/reagent_containers/hypospray/combat /datum/uplink_item/item/medical/surgery name = "Surgery Kit" - item_cost = 5 + item_cost = 1 path = /obj/item/storage/firstaid/surgery /datum/uplink_item/item/medical/combat name = "Combat Medical Kit" - item_cost = 4 + item_cost = 1 path = /obj/item/storage/firstaid/combat /datum/uplink_item/item/medical/stimulants name = "Box of Combat Stimulants" - item_cost = 4 + item_cost = 1 path = /obj/item/storage/box/syndie_kit/stimulants /datum/uplink_item/item/medical/sideeffectbegone name = "Box of Sideeffect-Be-Gone Injectors" - item_cost = 3 + item_cost = 1 path = /obj/item/storage/box/syndie_kit/sideeffectbegone /datum/uplink_item/item/medical/firstaid name = "Standard First-Aid Kit" - item_cost = 2 + item_cost = 1 path = /obj/item/storage/firstaid/regular diff --git a/code/datums/uplink/ninja_modules.dm b/code/datums/uplink/ninja_modules.dm index 71d714aaca4..2529ac6fc29 100644 --- a/code/datums/uplink/ninja_modules.dm +++ b/code/datums/uplink/ninja_modules.dm @@ -7,65 +7,65 @@ /datum/uplink_item/item/ninja_modules/energency_generator name = "Emergency Power Generator" desc = "An emergency use power generator that gives 1000 power to the suits battery. Has a long cooldown." - item_cost = 4 + item_cost = 2 path = /obj/item/rig_module/emergency_powergenerator /datum/uplink_item/item/ninja_modules/energy_net name = "Energy Net" desc = "An unlimited use net, if the user has enough power, that can be thrown at others causing them to be trapped. The net can be broken with brute force.." - item_cost = 4 + item_cost = 3 path = /obj/item/rig_module/fabricator/energy_net /datum/uplink_item/item/ninja_modules/stealth_field name = "Stealth Field" desc = "A module that allows the user to go invisible. Consumes power when active." - item_cost = 6 + item_cost = 5 path = /obj/item/rig_module/stealth_field /datum/uplink_item/item/ninja_modules/normal_grenade_lancher name = "Standard Grenade Launcher" desc = "A shoulder mounted grenade launcher with 3 EMP, Smoke, and flashbang grenades.It can be refilled with more grenades." - item_cost = 6 + item_cost = 5 path = /obj/item/rig_module/grenade_launcher /datum/uplink_item/item/ninja_modules/enery_blade name = "Energy Blade and dart launcher." desc = "A module that can produce a powerful energy blade in the users hand. It can also shoot stun-darts." - item_cost = 8 + item_cost = 4 path = /obj/item/rig_module/mounted/energy_blade /datum/uplink_item/item/ninja_modules/matter_fab name = "Matter Fabricator" desc = "A hardsuit matter fabricator that can produce sharp steel ninja stars used for throwing." - item_cost = 4 + item_cost = 3 path = /obj/item/rig_module/fabricator /datum/uplink_item/item/ninja_modules/emag_hand name = "EMAG Hand Module" desc = "A module that allows the user to apply an EMAG effect to the targeted item." - item_cost = 5 + item_cost = 1 path = /obj/item/rig_module/device/emag_hand /datum/uplink_item/item/ninja_modules/chem_injector name = "Chemical Injector" desc = "A chemical injector that allows the user to inject themsleves with medical chemicals." - item_cost = 3 + item_cost = 1 path = /obj/item/rig_module/chem_dispenser /datum/uplink_item/item/ninja_modules/EMP_Shield name = "Active EMP Shielding" desc = "A very complicated module for a hardsuit that protects it to some degree from EMPs." - item_cost = 4 + item_cost = 1 path = /obj/item/rig_module/emp_shielding /datum/uplink_item/item/ninja_modules/combat_injector name = "Combat Injector" desc = "A chemical injector that allows the user to inject themsleves with combat chemicals." - item_cost = 4 + item_cost = 2 path = /obj/item/rig_module/chem_dispenser/combat /datum/uplink_item/item/ninja_modules/self_destruct name = "Self-destruct Module" desc = "A Self-destruct Module that causes an explosion when the user dies or presses the switch." - item_cost = 8 + item_cost = 5 path = /obj/item/rig_module/self_destruct diff --git a/code/datums/uplink/ninja_rigs.dm b/code/datums/uplink/ninja_rigs.dm deleted file mode 100644 index ae7e23524e8..00000000000 --- a/code/datums/uplink/ninja_rigs.dm +++ /dev/null @@ -1,71 +0,0 @@ -/*************** -* Special Ninja RIGs * -***************/ -/datum/uplink_item/item/ninja_rigs - category = /datum/uplink_category/ninja_rigs - -/datum/uplink_item/item/ninja_rigs/sol - name = "Solarian Military Hardsuit" - desc = "A Sheridan-type military hardsuit utilized by Solarian armed forces. Beefy. Only wearable by Humans." - item_cost = DEFAULT_TELECRYSTAL_AMOUNT - path = /obj/structure/closet/crate/secure/gear_loadout/ninja_sol - -/datum/uplink_item/item/ninja_rigs/gunslinger - name = "Coalition Gunslinger Suit" - desc = "A gunslinger suit popular among Coalition rangers. Only wearable by Humans." - item_cost = DEFAULT_TELECRYSTAL_AMOUNT - path = /obj/structure/closet/crate/secure/gear_loadout/ninja_gunslinger - -/datum/uplink_item/item/ninja_rigs/breacher - name = "Hegemony Breacher Suit" - desc = "A walking tank, one of the most armored suits in existence. Only wearable by Unathi." - item_cost = DEFAULT_TELECRYSTAL_AMOUNT - path = /obj/structure/closet/crate/secure/gear_loadout/ninja_breacher - -/datum/uplink_item/item/ninja_rigs/tesla - name = "People's Republic Tesla Suit" - desc = "A Tajaran hardsuit built for use by the Tesla Brigade. Only wearable by Tajara." - item_cost = DEFAULT_TELECRYSTAL_AMOUNT - path = /obj/structure/closet/crate/secure/gear_loadout/ninja_tesla - -/datum/uplink_item/item/ninja_rigs/strike - name = "Eridani PMC Strike Suit" - desc = "A powerful brawling suit which often spearheads police raids. Only wearable by Humans." - item_cost = DEFAULT_TELECRYSTAL_AMOUNT - path = /obj/structure/closet/crate/secure/gear_loadout/ninja_strike - -/datum/uplink_item/item/ninja_rigs/jinxiang - name = "Jinxiang Pattern Combat Suit" - desc = "A Dominian take on the infamous Bunker Suit. Only wearable by Humans." - item_cost = DEFAULT_TELECRYSTAL_AMOUNT - path = /obj/structure/closet/crate/secure/gear_loadout/ninja_jinxiang - -/datum/uplink_item/item/ninja_rigs/elyra - name = "Elyran Battlesuit" - desc = "An Elyran battlesuit which is nigh-impervious to heat. Only wearable by Humans." - item_cost = DEFAULT_TELECRYSTAL_AMOUNT - path = /obj/structure/closet/crate/secure/gear_loadout/ninja_elyra - -/datum/uplink_item/item/ninja_rigs/hacker - name = "Cyberwarfare Suit" - desc = "A less sturdy, but more agile cyberwarfare suit. Perfect for espionage. No species restrictions." - item_cost = DEFAULT_TELECRYSTAL_AMOUNT - path = /obj/structure/closet/crate/secure/gear_loadout/ninja_hacker - -/datum/uplink_item/item/ninja_rigs/techno - name = "Technoconglomerate Mobility Suit" - desc = "A thin suit with speed-boosting actuators. Only wearable by Offworlders." - item_cost = DEFAULT_TELECRYSTAL_AMOUNT - path = /obj/structure/closet/crate/secure/gear_loadout/ninja_techno - -/datum/uplink_item/item/ninja_rigs/crimson - name = "Crimson Hardsuit" - desc = "A powerful hardsuit with an excess of powerful, illegal modules. No species restrictions." - item_cost = DEFAULT_TELECRYSTAL_AMOUNT - path = /obj/structure/closet/crate/secure/gear_loadout/ninja_crimson - -/datum/uplink_item/item/ninja_rigs/rhino - name = "Rhino Suit" - desc = "The crimson hardsuit's ugly cousin, plated heavily with ballistic armor. No species restrictions." - item_cost = DEFAULT_TELECRYSTAL_AMOUNT - path = /obj/structure/closet/crate/secure/gear_loadout/ninja_rhino \ No newline at end of file diff --git a/code/datums/uplink/revolution.dm b/code/datums/uplink/revolution.dm index 900a9eee948..f337a0d7469 100644 --- a/code/datums/uplink/revolution.dm +++ b/code/datums/uplink/revolution.dm @@ -4,23 +4,23 @@ /datum/uplink_item/item/revolution/armory name = "Armory Dropper" desc = "A device that can be used to drop in an armory-worth of guns. Can only be used outside station areas, unless emagged, which is hazardous." - item_cost = 40 + item_cost = 25 path = /obj/item/device/orbital_dropper/armory/syndicate /datum/uplink_item/item/revolution/implants name = "Box of Aggression Implants" desc = "A box containing implants that will make their owners increasingly aggressive." - item_cost = 6 + item_cost = 2 path = /obj/item/storage/box/aggression /datum/uplink_item/item/revolution/encryption_keys name = "Box of Encryption Keys" desc = "A box of encryption keys that gives the user a safe channel to chatter in. Access safe channel with :x." - item_cost = 12 + item_cost = 3 path = /obj/item/storage/box/encryption_key /datum/uplink_item/item/revolution/softsuits name = "Crate of Softsuits" desc = "A crate containing six softsuits, their helmets, and oxygen tanks. Useful for getting out of a pinch." - item_cost = 6 - path = /obj/structure/closet/crate/secure/gear_loadout/syndicate_softsuits \ No newline at end of file + item_cost = 3 + path = /obj/structure/closet/crate/secure/gear_loadout/syndicate_softsuits diff --git a/code/datums/uplink/stealth and camouflage items.dm b/code/datums/uplink/stealth and camouflage items.dm index b5cc17dae4e..f57768b3884 100644 --- a/code/datums/uplink/stealth and camouflage items.dm +++ b/code/datums/uplink/stealth and camouflage items.dm @@ -11,34 +11,34 @@ /datum/uplink_item/item/stealth_items/spy name = "Bug Kit" - item_cost = 2 + item_cost = 1 path = /obj/item/storage/box/syndie_kit/spy /datum/uplink_item/item/stealth_items/id name = "Agent ID card" - item_cost = 4 + item_cost = 1 path = /obj/item/card/id/syndicate /datum/uplink_item/item/stealth_items/chameleon_kit name = "Chameleon Kit" - item_cost = 5 + item_cost = 1 path = /obj/item/storage/box/syndie_kit/chameleon /datum/uplink_item/item/stealth_items/voice name = "Voice Changer" - item_cost = 5 + item_cost = 1 path = /obj/item/clothing/mask/gas/voice /datum/uplink_item/item/stealth_items/chameleon_projector name = "Chameleon-Projector" desc = "A device that can be used to mimic common items by scanning, then transforming into them." - item_cost = 7 + item_cost = 2 path = /obj/item/device/chameleon /datum/uplink_item/item/stealth_items/venenum name = "Vial of Venenum" desc = "A vial that contains 30u of venemum. Changes DNA structure randomly, effectively masking your appearance until it wears off. Good for 15 minutes of appearance changes." - item_cost = 3 + item_cost = 1 path = /obj/item/reagent_containers/glass/beaker/vial/venenum /datum/uplink_item/item/stealth_items/balaclava @@ -56,5 +56,5 @@ /datum/uplink_item/item/stealth_items/closet_teleporter name = "Closet Teleportation Set-up" desc = "A box of closet teleporters, devices that can be inserted into closets to set up a teleportation network. Has a one minute cooldown after a batch teleport." - item_cost = 3 - path = /obj/item/storage/box/closet_teleporter \ No newline at end of file + item_cost = 1 + path = /obj/item/storage/box/closet_teleporter diff --git a/code/datums/uplink/stealthy and inconspicuous weapons.dm b/code/datums/uplink/stealthy and inconspicuous weapons.dm index 0cae034bedb..f6dea20df5d 100644 --- a/code/datums/uplink/stealthy and inconspicuous weapons.dm +++ b/code/datums/uplink/stealthy and inconspicuous weapons.dm @@ -11,36 +11,36 @@ /datum/uplink_item/item/stealthy_weapons/cigarette_kit name = "Cigarette Kit" - item_cost = 2 + item_cost = 1 path = /obj/item/storage/box/syndie_kit/cigarette /datum/uplink_item/item/stealthy_weapons/random_toxin name = "Random Toxin - Beaker" - item_cost = 2 + item_cost = 1 path = /obj/item/storage/box/syndie_kit/toxin /datum/uplink_item/item/stealthy_weapons/pens name = "Pen-jector Kit" desc = "A kit that contains four differently coloured pens. A blue pacifying pen, a green pen containing healing chemicals, and a yellow hyperzine pen." - item_cost = 4 + item_cost = 2 path = /obj/item/storage/box/syndie_kit/special_pens /datum/uplink_item/item/stealthy_weapons/parapen name = "Paralysis pen" - item_cost = 6 + item_cost = 3 path = /obj/item/pen/reagent/paralysis /datum/uplink_item/item/stealthy_weapons/concealed_cane name = "Concealed Cane Sword" - item_cost = 4 + item_cost = 1 path = /obj/item/cane/concealed /datum/uplink_item/item/stealthy_weapons/sleepy_ring name = "Sleepy Ring" - item_cost = 5 + item_cost = 3 path = /obj/item/clothing/ring/reagent/sleepy /datum/uplink_item/item/stealthy_weapons/bear_trap name = "Sharpened Bear Trap" - item_cost = 5 - path = /obj/item/trap/sharpened \ No newline at end of file + item_cost = 2 + path = /obj/item/trap/sharpened diff --git a/code/datums/uplink/uplink_categories.dm b/code/datums/uplink/uplink_categories.dm index 55a783d2a4d..b348a7e2ab2 100644 --- a/code/datums/uplink/uplink_categories.dm +++ b/code/datums/uplink/uplink_categories.dm @@ -84,10 +84,6 @@ name = "Infiltration Items" antag_roles = list(MODE_NINJA) -/datum/uplink_category/ninja_rigs - name = "Equipped Hardsuits" - antag_roles = list(MODE_NINJA) - /datum/uplink_category/gear_loadout name = "Gear Loadout" antag_roles = list(MODE_MERCENARY) diff --git a/code/datums/wires/disposals.dm b/code/datums/wires/disposals.dm new file mode 100644 index 00000000000..73ba69619ee --- /dev/null +++ b/code/datums/wires/disposals.dm @@ -0,0 +1,37 @@ +/datum/wires/disposal + random = TRUE + holder_type = /obj/machinery/disposal + wire_count = 3 + +var/const/DISPOSAL_WIRE_FLUSH = 1 + +/datum/wires/disposal/GetInteractWindow() + . = ..() + + var/obj/machinery/disposal/D = holder + . += "
\nThe light indicator inserted within the flush handle is [D.can_flush ? "on" : "off"]." + return . + +/datum/wires/disposal/UpdateCut(var/index, var/mended) + var/obj/machinery/disposal/D = holder + switch(index) + if(DISPOSAL_WIRE_FLUSH) + if(!mended) + D.can_flush = FALSE + D.visible_message(SPAN_WARNING("\The [D] whines loudly."), range = 3) + else + D.can_flush = TRUE + D.visible_message(SPAN_NOTICE("\The [D] hums soothingly."), range = 3) + +/datum/wires/disposal/UpdatePulsed(var/index) + var/obj/machinery/disposal/D = holder + switch(index) + if(DISPOSAL_WIRE_FLUSH) + if(D.air_contents.return_pressure() >= (700 + ONE_ATMOSPHERE) || !D.uses_air) + D.flush() + +/datum/wires/disposal/CanUse(var/mob/living/L) + var/obj/machinery/disposal/D = holder + if(D.mode <= 0) + return TRUE + return FALSE \ No newline at end of file diff --git a/code/datums/wires/wires.dm b/code/datums/wires/wires.dm index 5f1c07332aa..f7044c59e82 100644 --- a/code/datums/wires/wires.dm +++ b/code/datums/wires/wires.dm @@ -129,7 +129,6 @@ var/list/wireColours = list("red", "blue", "green", "darkred", "orange", "brown" var/obj/item/O = Detach(colour) if(O) L.put_in_hands(O) - return if(href_list["cut"]) // Toggles the cut/mend status var/obj/item/I = L.get_active_hand() diff --git a/code/game/antagonist/antagonist_factions.dm b/code/game/antagonist/antagonist_factions.dm index 3531699f491..286c8cfcf4d 100644 --- a/code/game/antagonist/antagonist_factions.dm +++ b/code/game/antagonist/antagonist_factions.dm @@ -1,5 +1,5 @@ /mob/living/proc/convert_to_rev(mob/M as mob in oview(src)) - set name = "Invite to the Contenders" + set name = "Invite to the Revolutionaries" set category = "Abilities" if(!M.mind) return @@ -47,13 +47,9 @@ to_chat(src, "\The [player.current] does not support the [faction.faction_descriptor]!") /mob/living/proc/convert_to_loyalist(mob/M as mob in oview(src)) - set name = "Invite to the Fellowship" + set name = "Invite to the Loyalists" set category = "Abilities" if(!M.mind) return - for (var/obj/item/implant/mindshield/I in M) - if (I.implanted) - to_chat(src, "[M] is too loyal to be subverted!") - return convert_to_faction(M.mind, loyalists) diff --git a/code/game/antagonist/antagonist_update.dm b/code/game/antagonist/antagonist_update.dm index 50f2aad1928..4bc91e95990 100644 --- a/code/game/antagonist/antagonist_update.dm +++ b/code/game/antagonist/antagonist_update.dm @@ -15,8 +15,8 @@ if(!preserve_appearance && (flags & ANTAG_SET_APPEARANCE)) spawn(3) var/mob/living/carbon/human/H = player.current - if(istype(H)) - H.change_appearance(APPEARANCE_ALL, H.loc, H, valid_species, state = z_state) + if(istype(H)) + H.change_appearance(APPEARANCE_ALL, H, valid_species) H.rejuvenate() //So that things like disabilities and stuff get cleared. if((flags & ANTAG_NO_FLAVORTEXT) && ishuman(player.current)) var/mob/living/carbon/human/H = player.current diff --git a/code/game/antagonist/station/changeling.dm b/code/game/antagonist/station/changeling/changeling.dm similarity index 97% rename from code/game/antagonist/station/changeling.dm rename to code/game/antagonist/station/changeling/changeling.dm index cc20866a979..8d5fb722113 100644 --- a/code/game/antagonist/station/changeling.dm +++ b/code/game/antagonist/station/changeling/changeling.dm @@ -6,7 +6,7 @@ feedback_tag = "changeling_objective" restricted_jobs = list("AI", "Cyborg", "Head of Security", "Captain", "Chief Engineer", "Research Director", "Chief Medical Officer", "Head of Personnel") - protected_jobs = list("Security Officer", "Security Cadet", "Warden", "Detective", "Forensic Technician") + protected_jobs = list("Security Officer", "Security Cadet", "Warden", "Investigator") restricted_species = list( SPECIES_IPC, SPECIES_IPC_SHELL, diff --git a/code/game/antagonist/station/changeling/morph.dm b/code/game/antagonist/station/changeling/morph.dm new file mode 100644 index 00000000000..ca0b33b5cd3 --- /dev/null +++ b/code/game/antagonist/station/changeling/morph.dm @@ -0,0 +1,20 @@ +var/datum/antagonist/morph/morphs = null + +/datum/antagonist/morph + id = MODE_MORPH + role_text = "Morph" + role_text_plural = "Morphs" + welcome_text = "You have been released as a morph. Help your changeling achieve their goals!" + antaghud_indicator = "hudchangeling" + faction = "Changeling" + antag_sound = 'sound/effects/antag_notice/ling_alert.ogg' + +/datum/antagonist/morph/New() + ..() + + morphs = src + +/datum/antagonist/morph/greet(datum/mind/player) + . = ..() + to_chat(player.current, SPAN_DANGER("As a morph, you can disguise as objects by alt-clicking on them.")) + to_chat(player.current, SPAN_DANGER("You can eat people and items by clicking on them, but only if they're dead.")) \ No newline at end of file diff --git a/code/game/antagonist/station/cultist.dm b/code/game/antagonist/station/cultist.dm index f29b02d7942..5506431838b 100644 --- a/code/game/antagonist/station/cultist.dm +++ b/code/game/antagonist/station/cultist.dm @@ -18,7 +18,7 @@ var/datum/antagonist/cultist/cult role_text_plural = "Cultists" bantype = "cultist" restricted_jobs = list("Chaplain","AI", "Cyborg", "Head of Security", "Captain", "Chief Engineer", "Research Director", "Chief Medical Officer", "Head of Personnel") - protected_jobs = list("Security Officer", "Security Cadet", "Warden", "Detective", "Forensic Technician") + protected_jobs = list("Security Officer", "Security Cadet", "Warden", "Investigator") feedback_tag = "cult_objective" antag_indicator = "cult" welcome_text = "You have a talisman in your possession; one that will help you start the cult on this station. Use it well and remember - there are others." diff --git a/code/game/antagonist/station/loyalist.dm b/code/game/antagonist/station/loyalist.dm index 64dfb7a12ce..2cf8ec68eeb 100644 --- a/code/game/antagonist/station/loyalist.dm +++ b/code/game/antagonist/station/loyalist.dm @@ -2,33 +2,33 @@ var/datum/antagonist/loyalists/loyalists /datum/antagonist/loyalists id = MODE_LOYALIST - role_text = "Head Fellow" - role_text_plural = "Fellowship" + role_text = "Head Loyalist" + role_text_plural = "Loyalists" bantype = "loyalist" feedback_tag = "loyalist_objective" antag_indicator = "fellowshiphead" - welcome_text = "You are one of the Fellowship leaders! Your goal is your choosing but you are a subversion of the Aurora Crew, you must lead your branch of the Fellowship and progress a story. Use the uplink disguised as a station-bounced radio in your backpack to help start your story!" - victory_text = "The Contenders failed in their goals! You won!" - loss_text = "The Contenders put an end to your Fellowship in one fell swoop." - victory_feedback_tag = "You thwarted the Contenders in their devious ends." - loss_feedback_tag = "You were thwarted by the Contenders." + welcome_text = "You are one of the Loyalist leaders! You are seeking to protect the establishment at all costs. Give your hearts for the Company! Use the uplink disguised as a station-bounced radio in your backpack to help start your story!" + victory_text = "The Revolutionaries failed in their goals! You won!" + loss_text = "The Revolutionaries put an end to your Loyalists in one fell swoop." + victory_feedback_tag = "You thwarted the Revolutionaries in their devious ends." + loss_feedback_tag = "You were thwarted by the Revolutionaries." antaghud_indicator = "fellowship" hard_cap = 3 - hard_cap_round = 3 + hard_cap_round = 4 initial_spawn_req = 3 initial_spawn_target = 8 // Inround loyalists. - faction_role_text = "Fellow" - faction_descriptor = "Fellowship" + faction_role_text = "Loyalist" + faction_descriptor = "Loyalists" faction_verb = /mob/living/proc/convert_to_loyalist - faction_welcome = "You have joined a budding fellowship under the forward-thinking lead of a Fellowship leader. Follow their instructions and try to achieve the Fellowship's goals." + faction_welcome = "You have decided to defend the establishment, no matter what it takes.. Follow your leaders' instructions and try to achieve the Loyalists' goals." faction_indicator = "fellowship" faction_invisible = FALSE restricted_jobs = list("AI", "Cyborg") - protected_jobs = list("Lab Assistant", "Medical Intern", "Engineering Apprentice", "Assistant", "Security Cadet", "Captain", "Head of Security") + protected_jobs = list("Lab Assistant", "Medical Intern", "Engineering Apprentice", "Assistant", "Security Cadet") required_age = 31 /datum/antagonist/loyalists/New() @@ -47,14 +47,6 @@ var/datum/antagonist/loyalists/loyalists loyal_obj.explanation_text = "Protect [player.real_name], the [player.mind.assigned_role]." global_objectives += loyal_obj -/datum/antagonist/loyalists/can_become_antag(var/datum/mind/player) - if(!..()) - return FALSE - for(var/obj/item/implant/mindshield/L in player.current) - if(L?.imp_in == player.current) - return FALSE - return TRUE - /datum/antagonist/loyalists/equip(var/mob/living/carbon/human/player) if(!..()) @@ -66,11 +58,11 @@ var/datum/antagonist/loyalists/loyalists player.equip_to_slot_or_del(new /obj/item/device/special_uplink/rev(player, player.mind), slot_in_backpack) give_codewords(player) - INVOKE_ASYNC(src, .proc/alert_fellow_status, player) + INVOKE_ASYNC(src, .proc/alert_loyalist_status, player) return TRUE -/datum/antagonist/loyalists/proc/alert_fellow_status(var/mob/living/carbon/human/player) //This is still dumb but it works - alert(player, "As a Head Fellow you are given an uplink with a lot of telecrystals. \ +/datum/antagonist/loyalists/proc/alert_loyalist_status(var/mob/living/carbon/human/player) //This is still dumb but it works + alert(player, "As a Head Loyalist you are given an uplink with a lot of telecrystals. \ Your goal is to create and progress a story. Use the announcement device you spawn with to whip people into a frenzy, \ and the uplink disguised as a radio to equip them. DO NOT PLAY THIS ROLE AS A SUPER TRAITOR. \ Doing so may lead to administrative action being taken.", diff --git a/code/game/antagonist/station/revolutionary.dm b/code/game/antagonist/station/revolutionary.dm index a70f7ae436b..d70142c81ef 100644 --- a/code/game/antagonist/station/revolutionary.dm +++ b/code/game/antagonist/station/revolutionary.dm @@ -2,27 +2,27 @@ var/datum/antagonist/revolutionary/revs /datum/antagonist/revolutionary id = MODE_REVOLUTIONARY - role_text = "Head Contender" - role_text_plural = "Contenders" + role_text = "Head Revolutionary" + role_text_plural = "Revolutionaries" bantype = "revolutionary" feedback_tag = "rev_objective" antag_indicator = "contenderhead" - welcome_text = "You, as a subversive leader belonging to an element of the NanoTrasen Crew, have caught wind of a hostile Fellowship forming. Whatever your reasons, you fervently stand against its goals. Recruit from the Crew and lead your efforts against them." - victory_text = "You eliminated the Fellowship in one fell swoop." - loss_text = "The Fellowship threw a wrench into your plans -- permanently." - victory_feedback_tag = "You eliminated the Fellows in one fell swoop." + welcome_text = "You are a subversive seeking to demolish the current order on the station by whatever means possible. Recruit friends and strangers alike to bring Nanotrasen's tyranny to an end! Or whatever your objective is." + victory_text = "You eliminated the Loyalists in one fell swoop." + loss_text = "The Loyalists threw a wrench into your plans -- permanently." + victory_feedback_tag = "You eliminated the Loyalists in one fell swoop." loss_feedback_tag = "No matter your efforts, you failed to thwart them." flags = ANTAG_SUSPICIOUS | ANTAG_VOTABLE antaghud_indicator = "contender" hard_cap = 3 - hard_cap_round = 3 + hard_cap_round = 4 initial_spawn_req = 3 - initial_spawn_target = 8 + initial_spawn_target = 4 // Inround revs. - faction_role_text = "Contender" - faction_descriptor = "Contenders" + faction_role_text = "Revolutionary" + faction_descriptor = "Revolutionaries" faction_verb = /mob/living/proc/convert_to_rev faction_welcome = "You joined a subversive organization in the Aurora Crew, united under a forward-thinking leader, you must achieve their goals." faction_indicator = "contender" @@ -67,11 +67,11 @@ var/datum/antagonist/revolutionary/revs player.equip_to_slot_or_del(new /obj/item/device/special_uplink/rev(player, player.mind), slot_in_backpack) give_codewords(player) - INVOKE_ASYNC(src, .proc/alert_contender_status, player) + INVOKE_ASYNC(src, .proc/alert_revolutionary_status, player) return TRUE -/datum/antagonist/revolutionary/proc/alert_contender_status(var/mob/living/carbon/human/player) //This is so dumb. - alert(player, "As a Head Contender you are given an uplink with a lot of telecrystals. \ +/datum/antagonist/revolutionary/proc/alert_revolutionary_status(var/mob/living/carbon/human/player) //This is so dumb. + alert(player, "As a Head Revolutionary you are given an uplink with a lot of telecrystals. \ Your goal is to create and progress a story. Use the announcement device you spawn with to whip people into a frenzy, \ and the uplink disguised as a radio to equip them. DO NOT PLAY THIS ROLE AS A SUPER TRAITOR. \ Doing so may lead to administrative action being taken.", diff --git a/code/game/antagonist/station/traitor.dm b/code/game/antagonist/station/traitor.dm index c8d1748dc00..b48639a84f5 100644 --- a/code/game/antagonist/station/traitor.dm +++ b/code/game/antagonist/station/traitor.dm @@ -4,7 +4,7 @@ var/datum/antagonist/traitor/traitors /datum/antagonist/traitor id = MODE_TRAITOR restricted_jobs = list("Head of Security", "Captain", "Chief Engineer", "Research Director", "Chief Medical Officer", "Head of Personnel") - protected_jobs = list("Security Officer", "Security Cadet", "Warden", "Detective", "Forensic Technician") + protected_jobs = list("Security Officer", "Security Cadet", "Warden", "Investigator") flags = ANTAG_SUSPICIOUS | ANTAG_RANDSPAWN | ANTAG_VOTABLE required_age = 10 diff --git a/code/game/antagonist/station/vampire.dm b/code/game/antagonist/station/vampire.dm index 07c2c7d4643..180107ddd71 100644 --- a/code/game/antagonist/station/vampire.dm +++ b/code/game/antagonist/station/vampire.dm @@ -8,7 +8,7 @@ var/datum/antagonist/vampire/vamp = null feedback_tag = "vampire_objective" restricted_jobs = list("AI", "Cyborg", "Chaplain", "Head of Security", "Captain", "Chief Engineer", "Research Director", "Chief Medical Officer", "Head of Personnel") - protected_jobs = list("Security Officer", "Security Cadet", "Warden", "Detective", "Forensic Technician") + protected_jobs = list("Security Officer", "Security Cadet", "Warden", "Investigator") restricted_species = list( SPECIES_IPC, SPECIES_IPC_SHELL, diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 31db9f84adb..555eca31262 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -11,6 +11,7 @@ var/atmosalm = 0 var/poweralm = 1 var/party = null + var/radiation_active = null level = null name = "Unknown" icon = 'icons/turf/areas.dmi' @@ -218,10 +219,15 @@ #define DO_PARTY(COLOR) animate(color = COLOR, time = 0.5 SECONDS, easing = QUAD_EASING) /area/update_icon() - if ((fire || eject || party) && (!requires_power||power_environ) && !istype(src, /area/space)) //If it doesn't require power, can still activate this proc. - if(fire && !eject && !party) // FIRE - color = "#ff9292" + if ((fire || eject || party || radiation_active) && (!requires_power||power_environ) && !istype(src, /area/space)) //If it doesn't require power, can still activate this proc. + if(radiation_active) + color = "#30e63f" animate(src) // stop any current animations. + animate(src, color = "#2ea138", time = 1 SECOND, loop = -1, easing = SINE_EASING) + animate(color ="#30e63f", time = 1 SECOND, easing = SINE_EASING) + else if(fire && !eject && !party) // FIRE + color = "#ff9292" + animate(src) animate(src, color = "#ffa5b2", time = 1 SECOND, loop = -1, easing = SINE_EASING) animate(color = "#ff9292", time = 1 SECOND, easing = SINE_EASING) else if(!fire && eject && !party) // EJECT diff --git a/code/game/gamemodes/changeling/implements/hivemind.dm b/code/game/gamemodes/changeling/implements/hivemind.dm index 550b4d36ab3..44198743cd4 100644 --- a/code/game/gamemodes/changeling/implements/hivemind.dm +++ b/code/game/gamemodes/changeling/implements/hivemind.dm @@ -64,11 +64,9 @@ var/mob/living/simple_animal/hostile/morph/M = new /mob/living/simple_animal/hostile/morph(get_turf(changeling_mob)) M.stop_thinking = TRUE // prevent the AI from taking over when the player ghosts M.ckey = ckey + morphs.add_antagonist(M.mind, TRUE, TRUE, FALSE, TRUE, TRUE) + var/datum/changeling/changeling = changeling_mob.mind.antag_datums[MODE_CHANGELING] changeling.hivemind_members -= src - to_chat(M, SPAN_DANGER(FONT_LARGE("You are a morph, released by [changeling_mob]!"))) - to_chat(M, SPAN_DANGER("As a morph, you can disguise as objects by alt-clicking on them.")) - to_chat(M, SPAN_DANGER("You can eat people and items by clicking on them, but only if they're dead.")) - qdel(src) \ No newline at end of file diff --git a/code/game/gamemodes/cult/runes/armor.dm b/code/game/gamemodes/cult/runes/armor.dm index efd0fcadf7b..cf47fe95007 100644 --- a/code/game/gamemodes/cult/runes/armor.dm +++ b/code/game/gamemodes/cult/runes/armor.dm @@ -22,6 +22,7 @@ var/construct_path = construct_types[construct_class] var/mob/living/simple_animal/construct/Z = new construct_path(get_turf(C)) + Z.health = Z.health * (C.health / C.maxHealth) Z.key = C.key if(iscultist(C)) cult.add_antagonist(Z.mind) diff --git a/code/game/gamemodes/cult/runes/convert.dm b/code/game/gamemodes/cult/runes/convert.dm index 9e2a188ad7c..55d37a9c825 100644 --- a/code/game/gamemodes/cult/runes/convert.dm +++ b/code/game/gamemodes/cult/runes/convert.dm @@ -70,20 +70,37 @@ if(!waiting_for_input[target]) //so we don't spam them with dialogs if they hesitate waiting_for_input[target] = TRUE - if(!cult.can_become_antag(target.mind) || jobban_isbanned(target, "cultist") || player_is_antag(target.mind))//putting jobban check here because is_convertable uses mind as argument - //waiting_for_input ensures this is only shown once, so they basically auto-resist from here on out. They still need to find a way to get off the freaking rune if they don't want to burn to death, though. - to_chat(target, SPAN_CULT("Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible truth. The veil of reality has been ripped away and in the festering wound left behind, something sinister takes root.")) - to_chat(target, SPAN_CULT("And you were able to force it out of your mind. Though the memory of that dark, horrible vision will surely haunt you for decades to come.")) - target.visible_message(SPAN_WARNING("The markings below [target] lose their glow, this unworthy offering has been rejected!")) + if(!cult.can_become_antag(target.mind) || player_is_antag(target.mind)) + if(jobban_isbanned(target.mind, "cultist")) + shard_player(target, A) + else + //waiting_for_input ensures this is only shown once, so they basically auto-resist from here on out. They still need to find a way to get off the freaking rune if they don't want to burn to death, though. + to_chat(target, SPAN_CULT("Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible truth. The veil of reality has been ripped away and in the festering wound left behind, something sinister takes root.")) + to_chat(target, SPAN_CULT("And you were able to force it out of your mind. Though the memory of that dark, horrible vision will surely haunt you for decades to come.")) + target.visible_message(SPAN_WARNING("The markings below [target] lose their glow, this unworthy offering has been rejected!")) else - var/choice = alert(target,"Do you want to join the cult?", "Submit to Nar'Sie", "Resist", "Submit") + var/choice = alert(target,"Do you want to join the cult? (Choosing ghost will ghost you and spawn a shade)", "Submit to Nar'Sie", "Resist", "Submit", "Ghost") waiting_for_input[target] = FALSE - if(choice == "Submit") //choosing 'Resist' does nothing of course. - cult.add_antagonist(target.mind) - converting -= target - target.hallucination = 0 //sudden clarity - target.setBrainLoss(0) // nar'sie heals you - sound_to(target, 'sound/effects/bloodcult.ogg') + switch(choice) + if("Submit") + cult.add_antagonist(target.mind) + converting -= target + target.hallucination = 0 //sudden clarity + target.setBrainLoss(0) // nar'sie heals you + sound_to(target, 'sound/effects/bloodcult.ogg') + if("Ghost") + shard_player(target, A) + sleep(100) //proc once every 10 seconds LAZYCLEARLIST(converting) return TRUE + +/datum/rune/convert/proc/shard_player(var/mob/living/target, atom/movable/A) + converting -= target + var/obj/item/device/soulstone/stone = new /obj/item/device/soulstone(get_turf(A)) + target.death() + stone.transfer_human(target) + var/mob/living/simple_animal/shade/shade = locate() in stone + announce_ghost_joinleave(shade) + shade.ghostize(FALSE) + target.dust() \ No newline at end of file diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index 87f97988c45..66badda2fca 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -2,12 +2,11 @@ name = "Revolution" config_tag = "revolution" round_description = "Some crewmembers are attempting to start a movement!" - extended_round_description = "A fellowship is in the early stages of formation, and a group of contenders are rallying to oppose them." + extended_round_description = "A revolution is in the early stages of formation, and a group of loyalists are rallying to oppose them." required_players = 22 required_enemies = 6 auto_recall_shuttle = 0 end_on_antag_death = 0 -// shuttle_delay = 3 antag_tags = list(MODE_REVOLUTIONARY, MODE_LOYALIST) require_all_templates = 1 ert_disabled = TRUE diff --git a/code/game/gamemodes/vampire/vampire_powers.dm b/code/game/gamemodes/vampire/vampire_powers.dm index d6491404946..d8a5674f4da 100644 --- a/code/game/gamemodes/vampire/vampire_powers.dm +++ b/code/game/gamemodes/vampire/vampire_powers.dm @@ -11,7 +11,7 @@ if(vampire.stealth) to_chat(src, SPAN_NOTICE("Your victims will now forget your interactions, and get paralyzed when you do them.")) else - to_chat(src, SPAN_NOTICE("Your victims will now remember your interactions, and stay completely mobile during them.")) + to_chat(src, SPAN_NOTICE("Your victims will now remember your interactions.")) // Drains the target's blood. /mob/living/carbon/human/proc/vampire_drain_blood() @@ -580,39 +580,49 @@ if(tox_loss) to_heal = min(10, tox_loss) adjustToxLoss(0 - to_heal) - blood_used += round(to_heal * 1.2) + blood_used += round(to_heal * 0.25) if(oxy_loss) to_heal = min(10, oxy_loss) adjustOxyLoss(0 - to_heal) - blood_used += round(to_heal * 1.2) + blood_used += round(to_heal * 0.25) if(ext_loss) to_heal = min(20, ext_loss) heal_overall_damage(min(10, getBruteLoss()), min(10, getFireLoss())) - blood_used += round(to_heal * 1.2) + blood_used += round(to_heal * 0.25) if(clone_loss) to_heal = min(10, clone_loss) adjustCloneLoss(0 - to_heal) - blood_used += round(to_heal * 1.2) + blood_used += round(to_heal * 0.25) - var/list/organs = get_damaged_organs(1, 1) - if(length(organs)) + adjustHalLoss(-20) + + var/list/damaged_organs = get_damaged_organs(TRUE, TRUE, FALSE) + if(length(damaged_organs)) // Heal an absurd amount, basically regenerate one organ. - heal_organ_damage(50, 50) - blood_used += 12 + heal_organ_damage(50, 50, FALSE) + blood_used += 3 + + var/missing_blood = species.blood_volume - REAGENT_VOLUME(vessel, /decl/reagent/blood) + if(missing_blood) + to_heal = min(20, missing_blood) + vessel.add_reagent(/decl/reagent/blood, to_heal) + blood_used += round(to_heal * 0.1) // gonna need to regen a shitton of blood, since human mobs have around 560 normally for(var/A in organs) var/healed = FALSE var/obj/item/organ/external/E = A + if(BP_IS_ROBOTIC(E)) + continue if(E.status & ORGAN_ARTERY_CUT) E.status &= ~ORGAN_ARTERY_CUT - blood_used += 12 + blood_used += 2 if(E.status & ORGAN_TENDON_CUT) E.status &= ~ORGAN_TENDON_CUT - blood_used += 12 + blood_used += 2 if(E.status & ORGAN_BROKEN) E.status &= ~ORGAN_BROKEN E.stage = 0 - blood_used += 12 + blood_used += 3 healed = TRUE if(healed) @@ -643,6 +653,8 @@ vampire.status &= ~VAMP_HEALING to_chat(src, SPAN_NOTICE("Your body has finished healing. You are ready to continue.")) break + else + vampire.blood_usable -= blood_used // We broke out of the loop naturally. Gotta catch that. if(vampire.status & VAMP_HEALING) diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm index 6f233017497..22c1279793f 100644 --- a/code/game/jobs/access.dm +++ b/code/game/jobs/access.dm @@ -42,6 +42,8 @@ /proc/get_centcom_access(job) switch(job) + if("SCC Agent", "SCC Executive", "SCC Bodyguard") + return list(access_cent_general, access_cent_captain, access_cent_living) if("CCIA Agent") return list(access_cent_general, access_cent_captain, access_cent_living) if("Emergency Response Team") diff --git a/code/game/jobs/faction/eridani.dm b/code/game/jobs/faction/eridani.dm index 36788deae9f..525a39ac4b1 100644 --- a/code/game/jobs/faction/eridani.dm +++ b/code/game/jobs/faction/eridani.dm @@ -26,7 +26,7 @@ /datum/job/visitor, /datum/job/officer, /datum/job/warden, - /datum/job/forensics, + /datum/job/investigator, /datum/job/med_tech, /datum/job/representative ) @@ -43,8 +43,7 @@ titles_to_loadout = list( "Security Officer" = /datum/outfit/job/officer/eridani, "Warden" = /datum/outfit/job/warden/eridani, - "Forensic Technician" = /datum/outfit/job/forensics/eridani, - "Crime Scene Investigator" = /datum/outfit/job/forensics/eridani, + "Investigator" = /datum/outfit/job/forensics/eridani, "Paramedic" = /datum/outfit/job/med_tech/paramed/eridani, "First Responder" = /datum/outfit/job/med_tech/paramed/eridani, "Corporate Liaison" = /datum/outfit/job/representative/eridani diff --git a/code/game/jobs/faction/idris.dm b/code/game/jobs/faction/idris.dm index 66662045ae6..7c216af91f1 100644 --- a/code/game/jobs/faction/idris.dm +++ b/code/game/jobs/faction/idris.dm @@ -34,8 +34,7 @@ allowed_role_types = list( /datum/job/visitor, /datum/job/officer, - /datum/job/detective, - /datum/job/forensics, + /datum/job/investigator, /datum/job/bartender, /datum/job/chef, /datum/job/hydro, @@ -52,12 +51,10 @@ titles_to_loadout = list( "Security Officer" = /datum/outfit/job/officer/idris, - "Forensic Technician" = /datum/outfit/job/forensics/idris, - "Crime Scene Investigator" = /datum/outfit/job/forensics/idris, + "Investigator" = /datum/outfit/job/forensics/idris, "Bartender" = /datum/outfit/job/bartender/idris, "Chef" = /datum/outfit/job/chef/idris, "Cook" = /datum/outfit/job/chef/idris, - "Detective" = /datum/outfit/job/detective/idris, "Gardener" = /datum/outfit/job/hydro/idris, "Hydroponicist" = /datum/outfit/job/hydro/idris, "Corporate Liaison" = /datum/outfit/job/representative/idris diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm index 6c1a10678b2..862809bb9ad 100644 --- a/code/game/jobs/job/medical.dm +++ b/code/game/jobs/job/medical.dm @@ -114,7 +114,11 @@ uniform = /obj/item/clothing/under/rank/medical/blue suit = /obj/item/clothing/suit/storage/toggle/labcoat/surgeon shoes = /obj/item/clothing/shoes/surgeon - head = /obj/item/clothing/head/surgery/blue + +/datum/outfit/job/doctor/surgeon/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + . = ..() + if(!isskrell(H)) + H.equip_to_slot_or_del(new /obj/item/clothing/head/surgery/blue(H), slot_head) /datum/outfit/job/doctor/nurse name = "Nurse" @@ -275,4 +279,4 @@ tab_pda = /obj/item/modular_computer/handheld/pda/medical wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/medical - tablet = /obj/item/modular_computer/handheld/preset/medical \ No newline at end of file + tablet = /obj/item/modular_computer/handheld/preset/medical diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index 0ecc6923356..6031e4bf815 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -116,60 +116,14 @@ else H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves) - -/datum/job/detective - title = "Detective" - flag = DETECTIVE - departments = SIMPLEDEPT(DEPARTMENT_SECURITY) - department_flag = ENGSEC - faction = "Station" - total_positions = 1 - spawn_positions = 1 - supervisors = "the head of security" - selection_color = "#991818" - economic_modifier = 5 - - minimum_character_age = 25 - - access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_detective, access_weapons) - minimal_access = list(access_security, access_sec_doors, access_morgue, access_detective, access_weapons) - minimal_player_age = 7 - outfit = /datum/outfit/job/detective - -/datum/outfit/job/detective - name = "Detective" - jobtype = /datum/job/detective - - uniform = /obj/item/clothing/under/det - shoes = /obj/item/clothing/shoes/laceup - headset = /obj/item/device/radio/headset/headset_sec - bowman = /obj/item/device/radio/headset/headset_sec/alt - tab_pda = /obj/item/modular_computer/handheld/pda/security/detective - wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/security/detective - tablet = /obj/item/modular_computer/handheld/preset/security/detective - - backpack_contents = list( - /obj/item/storage/box/evidence = 1 - ) - -/datum/outfit/job/detective/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - . = ..() - if(istajara(H)) - H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black/tajara(H), slot_gloves) - else if(isunathi(H)) - H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black/unathi(H), slot_gloves) - else - H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves) - - -/datum/job/forensics - title = "Forensic Technician" +/datum/job/investigator + title = "Investigator" flag = FORENSICS departments = SIMPLEDEPT(DEPARTMENT_SECURITY) department_flag = ENGSEC faction = "Station" - total_positions = 1 - spawn_positions = 1 + total_positions = 2 + spawn_positions = 2 supervisors = "the head of security" selection_color = "#991818" economic_modifier = 5 @@ -178,14 +132,12 @@ access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_weapons) minimal_access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_weapons) - alt_titles = list("Crime Scene Investigator") minimal_player_age = 3 outfit = /datum/outfit/job/forensics - alt_outfits = list("Crime Scene Investigator"=/datum/outfit/job/forensics/csi) /datum/outfit/job/forensics - name = "Forensic Technician" - jobtype = /datum/job/forensics + name = "Investigator" + jobtype = /datum/job/investigator uniform = /obj/item/clothing/under/det/forensics shoes = /obj/item/clothing/shoes/laceup @@ -208,13 +160,6 @@ else H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves) - -/datum/outfit/job/forensics/csi - name = "Crime Scene Investigator" - jobtype = /datum/job/forensics - - suit = /obj/item/clothing/suit/storage/toggle/labcoat - /datum/job/officer title = "Security Officer" flag = OFFICER diff --git a/code/game/jobs/jobs.dm b/code/game/jobs/jobs.dm index a504d40706e..67c6a0738e7 100644 --- a/code/game/jobs/jobs.dm +++ b/code/game/jobs/jobs.dm @@ -4,7 +4,7 @@ var/const/ENGSEC =(1<<0) var/const/CAPTAIN =(1<<0) var/const/HOS =(1<<1) var/const/WARDEN =(1<<2) -var/const/DETECTIVE =(1<<3) +var/const/FORENSICS =(1<<3) var/const/OFFICER =(1<<4) var/const/CHIEF =(1<<5) var/const/ENGINEER =(1<<6) @@ -13,8 +13,6 @@ var/const/AI =(1<<8) var/const/CYBORG =(1<<9) var/const/INTERN_SEC =(1<<10) var/const/INTERN_ENG =(1<<11) -var/const/FORENSICS =(1<<12) - var/const/MEDSCI =(1<<1) @@ -116,8 +114,7 @@ var/list/civilian_positions = list( var/list/security_positions = list( "Head of Security", "Warden", - "Detective", - "Forensic Technician", + "Investigator", "Security Officer", "Security Cadet" ) diff --git a/code/game/jobs/whitelist.dm b/code/game/jobs/whitelist.dm index 972729b252b..60401d09e41 100644 --- a/code/game/jobs/whitelist.dm +++ b/code/game/jobs/whitelist.dm @@ -27,9 +27,7 @@ var/list/whitelist_jobconfig = list() /proc/load_whitelist() if (config.sql_whitelists) - establish_db_connection(dbcon) - - if (!dbcon.IsConnected()) + if (!establish_db_connection(dbcon)) //Continue with the old code if we have no database. error("Database connection failed while loading whitelists. Reverting to legacy system.") config.sql_whitelists = 0 @@ -146,7 +144,7 @@ var/list/whitelist_jobconfig = list() if (!istype(C) || C.holder) return 0 - if(!dbcon.IsConnected()) + if(!establish_db_connection(dbcon)) return 0 var/age_to_beat = 0 diff --git a/code/game/machinery/atmoalter/portable_atmospherics.dm b/code/game/machinery/atmoalter/portable_atmospherics.dm index 89770d0c50e..e24aa5dabdf 100644 --- a/code/game/machinery/atmoalter/portable_atmospherics.dm +++ b/code/game/machinery/atmoalter/portable_atmospherics.dm @@ -26,7 +26,7 @@ var/obj/machinery/atmospherics/portables_connector/port = locate() in loc if(port) connect(port) - + /obj/machinery/portable_atmospherics/canister/Initialize() ..() @@ -41,6 +41,7 @@ air_contents.react() else update_icon() + SSvueui.check_uis_for_change(src) /obj/machinery/portable_atmospherics/Destroy() qdel(air_contents) @@ -113,6 +114,7 @@ user.drop_from_inventory(T,src) src.holding = T update_icon() + SSvueui.check_uis_for_change(src) return else if (W.iswrench()) @@ -120,6 +122,7 @@ disconnect() to_chat(user, "You disconnect \the [src] from the port.") update_icon() + SSvueui.check_uis_for_change(src) return else var/obj/machinery/atmospherics/portables_connector/possible_port = locate(/obj/machinery/atmospherics/portables_connector/) in loc @@ -127,6 +130,7 @@ if(connect(possible_port)) to_chat(user, "You connect \the [src] to the port.") update_icon() + SSvueui.check_uis_for_change(src) return else to_chat(user, "\The [src] failed to connect to the port.") @@ -170,6 +174,7 @@ cell = C user.visible_message("[user] opens the panel on [src] and inserts [C].", "You open the panel on [src] and insert [C].") power_change() + SSvueui.check_uis_for_change(src) return if(I.isscrewdriver()) @@ -182,6 +187,7 @@ cell.forceMove(src.loc) cell = null power_change() + SSvueui.check_uis_for_change(src) return ..() @@ -206,4 +212,4 @@ if(air_contents.gas.len == 0) return - message_admins("'[src.name]' was opened[cause ? " by [cause]" : ""], containing [english_list(air_contents.gas)]. (JMP)") \ No newline at end of file + message_admins("'[src.name]' was opened[cause ? " by [cause]" : ""], containing [english_list(air_contents.gas)]. (JMP)") diff --git a/code/game/machinery/atmoalter/pump.dm b/code/game/machinery/atmoalter/pump.dm index dee8f8e52a1..26da0601ecf 100644 --- a/code/game/machinery/atmoalter/pump.dm +++ b/code/game/machinery/atmoalter/pump.dm @@ -61,6 +61,7 @@ target_pressure = rand(0,1300) update_icon() + SSvueui.check_uis_for_change(src) ..(severity) @@ -111,6 +112,7 @@ update_icon() src.updateDialog() + SSvueui.check_uis_for_change(src) /obj/machinery/portable_atmospherics/powered/pump/return_air() return air_contents @@ -127,8 +129,8 @@ /obj/machinery/portable_atmospherics/powered/pump/attack_hand(var/mob/user) ui_interact(user) -/obj/machinery/portable_atmospherics/powered/pump/ui_interact(mob/user, ui_key = "rcon", datum/nanoui/ui=null, force_open=1) - var/list/data[0] +/obj/machinery/portable_atmospherics/powered/pump/vueui_data_change(list/data, mob/user, datum/vueui/ui) + data = ..() || list() data["portConnected"] = connected_port ? 1 : 0 data["tankPressure"] = round(air_contents.return_pressure() > 0 ? air_contents.return_pressure() : 0) data["targetpressure"] = round(target_pressure) @@ -143,13 +145,13 @@ data["hasHoldingTank"] = holding ? 1 : 0 if (holding) data["holdingTank"] = list("name" = holding.name, "tankPressure" = round(holding.air_contents.return_pressure() > 0 ? holding.air_contents.return_pressure() : 0)) + return data - ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open) +/obj/machinery/portable_atmospherics/powered/pump/ui_interact(mob/user) + var/datum/vueui/ui = SSvueui.get_open_ui(user, src) if (!ui) - ui = new(user, src, ui_key, "portpump.tmpl", "Portable Pump", 480, 410, state = physical_state) - ui.set_initial_data(data) + ui = new(user, src, "machinery-atmospherics-portpump", 480, 410, "Portable Pump") ui.open() - ui.set_auto_update(1) /obj/machinery/portable_atmospherics/powered/pump/Topic(href, href_list) if(..()) @@ -166,10 +168,10 @@ holding.forceMove(loc) holding = null . = 1 - if (href_list["pressure_adj"]) - var/diff = text2num(href_list["pressure_adj"]) - target_pressure = min(10*ONE_ATMOSPHERE, max(0, target_pressure+diff)) + if (href_list["pressure_set"]) + target_pressure = between(pressuremin, text2num(href_list["pressure_set"]), pressuremax) . = 1 if(.) update_icon() + SSvueui.check_uis_for_change(src) diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe/autolathe.dm similarity index 89% rename from code/game/machinery/autolathe.dm rename to code/game/machinery/autolathe/autolathe.dm index 5cfcd344000..2f6550d4b9a 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe/autolathe.dm @@ -11,7 +11,7 @@ clickvol = 30 var/print_loc - var/list/machine_recipes + var/list/stored_material = list(DEFAULT_WALL_MATERIAL = 0, MATERIAL_GLASS = 0) var/list/storage_capacity = list(DEFAULT_WALL_MATERIAL = 0, MATERIAL_GLASS = 0) var/show_category = "All" @@ -46,21 +46,37 @@ does_flick = FALSE /obj/machinery/autolathe/Initialize() - . = ..() + ..() wires = new(src) print_loc = src + return INITIALIZE_HINT_LATELOAD + +/obj/machinery/autolathe/LateInitialize() + populate_lathe_recipes() /obj/machinery/autolathe/Destroy() QDEL_NULL(wires) return ..() -/obj/machinery/autolathe/proc/update_recipe_list() - if(!machine_recipes) - machine_recipes = autolathe_recipes +/obj/machinery/autolathe/proc/populate_lathe_recipes() + if(SSmaterials.autolathe_recipes && SSmaterials.autolathe_categories) + return + + SSmaterials.autolathe_recipes = list() + SSmaterials.autolathe_categories = list() + for(var/R in subtypesof(/datum/autolathe/recipe)) + var/datum/autolathe/recipe/recipe = new R + SSmaterials.autolathe_recipes += recipe + SSmaterials.autolathe_categories |= recipe.category + + var/obj/item/I = new recipe.path + if(I.matter && !recipe.resources) //This can be overidden in the datums. + recipe.resources = list() + for(var/material in I.matter) + recipe.resources[material] = I.matter[material]*1.25 // More expensive to produce than they are to recycle. + qdel(I) /obj/machinery/autolathe/interact(mob/user) - update_recipe_list() - if(..() || (disabled && !panel_open)) to_chat(user, SPAN_DANGER("\The [src] is disabled!")) return @@ -83,7 +99,7 @@ dat += "

Printable Designs

Showing: [show_category]

" var/index = 0 - for(var/recipe in machine_recipes) + for(var/recipe in SSmaterials.autolathe_recipes) var/datum/autolathe/recipe/R = recipe index++ if(R.hidden && !hacked || (show_category != "All" && show_category != R.category)) @@ -222,23 +238,25 @@ usr.set_machine(src) add_fingerprint(usr) + if(href_list["change_category"]) + var/choice = input("Which category do you wish to display?") as null|anything in SSmaterials.autolathe_categories+"All" + if(!choice) + return + show_category = choice + updateUsrDialog() + return + if(busy) to_chat(usr, SPAN_WARNING("The autolathe is busy. Please wait for the completion of previous operation.")) return - if(href_list["change_category"]) - var/choice = input("Which category do you wish to display?") as null|anything in autolathe_categories+"All" - if(!choice) - return - show_category = choice - - if(href_list["make"] && machine_recipes) + if(href_list["make"] && SSmaterials.autolathe_recipes) var/index = text2num(href_list["make"]) var/multiplier = text2num(href_list["multiplier"]) build_item = null - if(index > 0 && index <= machine_recipes.len) - build_item = machine_recipes[index] + if(index > 0 && index <= length(SSmaterials.autolathe_recipes)) + build_item = SSmaterials.autolathe_recipes[index] //Exploit detection, not sure if necessary after rewrite. if(!build_item || multiplier < 0 || multiplier > 100) diff --git a/code/game/machinery/autolathe_datums.dm b/code/game/machinery/autolathe/autolathe_datums.dm similarity index 93% rename from code/game/machinery/autolathe_datums.dm rename to code/game/machinery/autolathe/autolathe_datums.dm index 74a5499dbd5..45a1c5322c4 100644 --- a/code/game/machinery/autolathe_datums.dm +++ b/code/game/machinery/autolathe/autolathe_datums.dm @@ -1,27 +1,3 @@ -/var/global/list/autolathe_recipes -/var/global/list/autolathe_categories - -/proc/populate_lathe_recipes() - - //Create global autolathe recipe list if it hasn't been made already. - autolathe_recipes = list() - autolathe_categories = list() - for(var/R in subtypesof(/datum/autolathe/recipe)) - var/datum/autolathe/recipe/recipe = new R - autolathe_recipes += recipe - autolathe_categories |= recipe.category - - var/obj/item/I = new recipe.path - // Since this runs before SSatoms runs, we've got to force initialization manually. - if (!I.initialized) - SSatoms.InitAtom(I, list(TRUE)) - - if(I.matter && !recipe.resources) //This can be overidden in the datums. - recipe.resources = list() - for(var/material in I.matter) - recipe.resources[material] = I.matter[material]*1.25 // More expensive to produce than they are to recycle. - qdel(I) - /datum/autolathe/recipe var/name = "object" var/path diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 8ba0d9b29c1..9a7e2db31d7 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -169,6 +169,7 @@ var/global/list/frozen_crew = list() desc = "A bewildering tangle of machinery and pipes." icon = 'icons/obj/sleeper.dmi' icon_state = "cryo_rear" + density = TRUE anchored = TRUE dir = WEST diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index f7f46ef75aa..6f91600d528 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -407,6 +407,8 @@ /obj/machinery/door/firedoor/can_close() if(locate(/obj/effect/blob) in get_turf(src)) return FALSE + if(locate(/mob/living) in get_turf(src)) + return FALSE return ..() /obj/machinery/door/firedoor/close() diff --git a/code/game/machinery/doppler_array.dm b/code/game/machinery/doppler_array.dm index 24c90b72af7..d6ad82de4db 100644 --- a/code/game/machinery/doppler_array.dm +++ b/code/game/machinery/doppler_array.dm @@ -2,7 +2,7 @@ var/list/doppler_arrays = list() /obj/machinery/doppler_array name = "tachyon-doppler array" - desc = "A highly precise directional sensor array which measures the release of quants from decaying tachyons. The doppler shifting of the mirror-image formed by these quants can reveal the size, location and temporal affects of energetic disturbances within a large radius ahead of the array." + desc = "A highly precise sensor array which measures the release of quants from decaying tachyons. The doppler shifting of the mirror-image formed by these quants can reveal the size, location and temporal affects of energetic disturbances within a large radius ahead of the array." icon = 'icons/obj/computer.dmi' icon_state = "computer" @@ -39,32 +39,41 @@ var/list/doppler_arrays = list() add_overlay(image(icon, src, "teleport")) /obj/machinery/doppler_array/proc/sense_explosion(var/x0,var/y0,var/z0,var/devastation_range,var/heavy_impact_range,var/light_impact_range) - if(!active || (stat & NOPOWER) || z != z0) + if(!active) + return + if(stat & NOPOWER) + return + if(z != z0) return var/dx = abs(x0-x) var/dy = abs(y0-y) var/distance - var/direct if(dx > dy) distance = dx - if(x0 > x) direct = EAST - else direct = WEST else distance = dy - if(y0 > y) direct = NORTH - else direct = SOUTH if(distance > 100) return - if(!(direct & dir)) - return - var/message = "Explosive disturbance detected - Epicenter at: grid ([x0],[y0],[z0]). Epicenter radius: [devastation_range]. Outer radius: [heavy_impact_range]. Shockwave radius: [light_impact_range]." global_announcer.autosay(message, "Tachyon-Doppler Array", "Science") + var/list/gained_tech + switch(devastation_range) + if(-INFINITY to 1) // minimum + gained_tech = list(TECH_BLUESPACE = 1, TECH_COMBAT = 2, TECH_MATERIAL = 2) + if(1 to 2) // starter bombs + gained_tech = list(TECH_BLUESPACE = 2, TECH_PHORON = 2, TECH_COMBAT = 3, TECH_MATERIAL = 3) + if(2 to 4) // max toxins can get + gained_tech = list(TECH_BLUESPACE = 3, TECH_PHORON = 3, TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_ENGINEERING = 3) + else + gained_tech = list(TECH_BLUESPACE = 4, TECH_PHORON = 4, TECH_COMBAT = 4, TECH_MATERIAL = 4, TECH_ENGINEERING = 4) + + new /obj/item/research_slip(get_turf(src), gained_tech) + /obj/machinery/doppler_array/power_change() ..() update_icon() diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index 228083fb19e..ef65f72c673 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -107,7 +107,7 @@ // Take blood else var/amount = REAGENTS_FREE_SPACE(beaker.reagents) - amount = min(amount, 4) + amount = min(amount, transfer_amount) // If the beaker is full, ping if(amount == 0) if(prob(5)) diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index 975e0851cfb..558ba11f2cd 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -19,7 +19,8 @@ /obj/item/melee/baton, /obj/item/cell, /obj/item/modular_computer, - /obj/item/computer_hardware/battery_module + /obj/item/computer_hardware/battery_module, + /obj/item/device/flashlight/survival ) var/icon_state_charged = "recharger100" var/icon_state_charging = "recharger" diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index b1126a6e867..a7b5bc60098 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -60,7 +60,7 @@ var/list/obj/machinery/requests_console/allConsoles = list() //Form intregration var/SQLquery - var/paperstock = 10 + var/paperstock = 20 var/lid = 0 //End Form Integration var/datum/announcement/announcement = new @@ -240,20 +240,19 @@ var/list/obj/machinery/requests_console/allConsoles = list() if( href_list["department"] && message ) var/log_msg = message - var/pass = 0 + var/pass = FALSE screen = RCS_SENTFAIL - for (var/obj/machinery/message_server/MS in SSmachinery.processing_machines) - if(!MS.active) continue - MS.send_rc_message(ckey(href_list["department"]),department,log_msg,msgStamped,msgVerified,priority) - pass = 1 - for (var/obj/item/modular_computer/P in alert_pdas) - P.get_notification(log_msg, 1, "[href_list["department"]] ([src])") - pass = 1 + for(var/obj/machinery/message_server/MS in SSmachinery.processing_machines) + if(!MS.active) + continue + MS.send_rc_message(ckey(href_list["department"]), department, log_msg, msgStamped, msgVerified, priority) + pass = TRUE if(pass) screen = RCS_SENTPASS message_log += "Message sent to [recipient]
[message]" else - audible_message(text("[icon2html(src, viewers(get_turf(src)))] *The Requests Console beeps: 'NOTICE: No server detected!'"),,4) + var/msg = "NOTICE: No server detected!" + audible_message("The Requests Console beeps, [SPAN_WARNING(msg)]") //Handle screen switching if(href_list["setScreen"]) @@ -307,9 +306,8 @@ var/list/obj/machinery/requests_console/allConsoles = list() // Print a form. if(href_list["print"]) var/printid = sanitizeSQL(href_list["print"]) - establish_db_connection(dbcon) - if(!dbcon.IsConnected()) + if(!establish_db_connection(dbcon)) alert("Connection to the database lost. Aborting.") if(!printid) alert("Invalid query. Try again.") @@ -334,8 +332,8 @@ var/list/obj/machinery/requests_console/allConsoles = list() // Get extra information about the form. if(href_list["whatis"]) var/whatisid = sanitizeSQL(href_list["whatis"]) - establish_db_connection(dbcon) - if(!dbcon.IsConnected()) + + if(!establish_db_connection(dbcon)) alert("Connection to the database lost. Aborting.") if(!whatisid) alert("Invalid query. Try again.") @@ -387,78 +385,71 @@ var/list/obj/machinery/requests_console/allConsoles = list() msgStamped = text("Stamped with the [T.name]") updateUsrDialog() else if (istype(O, /obj/item/paper_bundle)) - if(lid) //More of that restocking business - var/obj/item/paper_bundle/C = O + var/obj/item/paper_bundle/C = O + if(lid) + if(alert(user, "Do you want to restock \the [src] with \the [O]?", "Paper Restocking", "Yes", "No") == "No") + to_chat(user, SPAN_NOTICE("You decide against restocking \the [src], noting that the lid is still open.")) + return paperstock += C.amount user.drop_from_inventory(C,get_turf(src)) qdel(C) - for (var/mob/U in hearers(4, src.loc)) - U.show_message(text("[icon2html(src, viewers(get_turf(src)))] *The Requests Console beeps: 'Paper added.'")) - else - to_chat(user, "I should open the lid to add more paper, or try faxing one paper at a time.") + audible_message("The Requests Console beeps, \"Paper added.\"") + else if(screen == RCS_MAINMENU) //Faxing them papers + fax_send(O, user) else if (istype(O, /obj/item/paper)) - if(lid) //Stocking them papers + if(lid) + if(alert(user, "Do you want to restock \the [src] with \the [O]?", "Paper Restocking", "Yes", "No") == "No") + to_chat(user, SPAN_NOTICE("You decide against restocking \the [src], noting that the lid is still open.")) + return var/obj/item/paper/C = O user.drop_from_inventory(C,get_turf(src)) qdel(C) paperstock++ - for (var/mob/U in hearers(4, src.loc)) - U.show_message(text("[icon2html(src, viewers(get_turf(src)))] *The Requests Console beeps: 'Paper added.'")) - else if(screen == 0) //Faxing them papers - var/pass = 0 - var/sendto = input("Select department.", "Send Fax", null, null) in allConsoles - for (var/obj/machinery/message_server/MS in SSmachinery.processing_machines) - if(!MS.active) continue - pass = 1 - if(pass) - var/sent = 0 - for(var/cc in allConsoles) - var/obj/machinery/requests_console/Console = cc - if(Console == sendto) - if(Console.paperstock == 0) - alert("Error! Receiving console out of paper! Aborting!") - return - if(!sent) - sent = 1 - var/obj/item/paper/C = O - var/obj/item/paper/P = new /obj/item/paper() - var/info = "" - var/copied = html_decode(C.info) - copied = replacetext(copied, "" - var/pname = C.name - P.color = "#fff9e8" - P.fields = C.fields - P.stamps = C.stamps - P.stamped = C.stamped - P.ico = C.ico - P.offset_x = C.offset_x - P.offset_y = C.offset_y - var/list/temp_overlays = C.overlays - var/image/img - for (var/j = 1, j <= temp_overlays.len, j++) - if (findtext(C.ico[j], "cap") || findtext(C.ico[j], "cent")) - img = image('icons/obj/bureaucracy.dmi', "paper_stamp-circle") - else if (findtext(C.ico[j], "deny")) - img = image('icons/obj/bureaucracy.dmi', "paper_stamp-x") - else - img = image('icons/obj/bureaucracy.dmi', "paper_stamp-dots") - img.pixel_x = C.offset_x[j] - img.pixel_y = C.offset_y[j] - P.add_overlay(img) - P.set_content_unsafe(pname, info) - Console.print(P, 0, 'sound/machines/twobeep.ogg') - for (var/mob/player in hearers(4, Console.loc)) - player.show_message(text("[icon2html(Console, viewers(get_turf(Console)))] *The Requests Console beeps: 'Fax received'")) - Console.paperstock-- - if(sent == 1) - user.show_message(text("[icon2html(src, viewers(get_turf(src)))] *The Requests Console beeps: 'Message Sent.'")) - else - user.show_message(text("[icon2html(src, viewers(get_turf(src)))] *The Requests Console beeps: 'NOTICE: No server detected!'")) + audible_message("The Requests Console beeps, \"Paper added.\"") + else if(screen == RCS_MAINMENU) //Faxing them papers + fax_send(O, user) - return +/obj/machinery/requests_console/proc/can_send() + for(var/obj/machinery/message_server/MS in SSmachinery.processing_machines) + if(!MS.active) + continue + return TRUE + return FALSE + +/obj/machinery/requests_console/proc/fax_send(var/obj/item/O, var/mob/user) + var/sendto = input("Select department.", "Send Fax", null, null) as null|anything in allConsoles + if(!sendto) + return + if(!can_send()) + var/msg = "NOTICE: No server detected!" + audible_message("The Requests Console beeps, [SPAN_WARNING(msg)]") + return + for(var/cc in allConsoles) + var/obj/machinery/requests_console/Console = cc + if(Console == sendto) + var/paperstock_usage = 1 + var/is_paper_bundle = istype(O, /obj/item/paper_bundle) + if(is_paper_bundle) + var/obj/item/paper_bundle/OPB = O + paperstock_usage = OPB.amount + if(Console.paperstock < paperstock_usage) + audible_message("The Requests Console beeps, \"Error! Receiving console out of paper! Aborting!\"") + return + playsound(Console.loc, 'sound/machines/twobeep.ogg') + playsound(Console.loc, 'sound/items/polaroid1.ogg') + if(!is_paper_bundle) + var/obj/item/paper/P = copy(Console, O, FALSE, FALSE, 0, 15) + P.forceMove(Console.loc) + else + var/obj/item/paper_bundle/PB = bundlecopy(Console, O, FALSE, 15, FALSE) + PB.forceMove(Console.loc) + Console.audible_message("The Requests Console beeps, \"Fax received.\"") + for(var/obj/item/modular_computer/pda in Console.alert_pdas) + var/message = "A fax has arrived!" + pda.get_notification(message, 1, "[Console.department] Requests Console") + Console.paperstock -= paperstock_usage + audible_message("The Requests Console beeps, \"Fax sent.\"") + return /obj/machinery/requests_console/proc/reset_message(var/mainmenu = 0) message = "" diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index e02dca43877..37896982c81 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -1,25 +1,24 @@ /obj/machinery/teleport name = "teleport" - icon = 'icons/obj/stationobjs.dmi' + icon = 'icons/obj/teleporter.dmi' density = TRUE anchored = TRUE /obj/machinery/teleport/pad - name = "teleporter hub" - desc = "It's the hub of a teleporting machine." - icon_state = "tele0" - dir = EAST + name = "teleporter pad" + desc = "It's the pad of a teleporting machine." + icon_state = "pad" use_power = 1 idle_power_usage = 10 active_power_usage = 2000 var/obj/machinery/teleport/station/station + light_color = "#02d1c7" /obj/machinery/teleport/pad/Initialize() . = ..() station = locate() in range(2, src) - underlays.Cut() - underlays += image('icons/obj/stationobjs.dmi', icon_state = "tele-wires") + queue_icon_update() /obj/machinery/teleport/pad/Destroy() station = null @@ -45,16 +44,23 @@ station.calibration = min(station.calibration + 5, 100) /obj/machinery/teleport/pad/update_icon() - if(station?.engaged) - icon_state = "tele1" + cut_overlays() + if (station?.engaged) + var/image/I = image(icon, src, "[initial(icon_state)]_active_overlay") + I.layer = EFFECTS_ABOVE_LIGHTING_LAYER + add_overlay(I) + set_light(4, 0.4) else - icon_state = "tele0" + set_light(0) + if (operable()) + var/image/I = image(icon, src, "[initial(icon_state)]_idle_overlay") + I.layer = EFFECTS_ABOVE_LIGHTING_LAYER + add_overlay(I) /obj/machinery/teleport/station name = "teleportation station" desc = "A teleportation hub that can be used to lock onto beacons and implants and relaying the coordinates precisely to a nearby teleportation pad." - icon_state = "controller" - dir = EAST + icon_state = "station" use_power = 1 idle_power_usage = 10 active_power_usage = 2000 @@ -72,8 +78,21 @@ /obj/machinery/teleport/station/Initialize() . = ..() pad = locate() in range(2, src) + set_dir(get_dir(src, pad)) id = "[rand(1000, 9999)]" - set_overlays("controller-wires") + queue_icon_update() + +/obj/machinery/teleport/station/update_icon() + . = ..() + cut_overlays() + if (engaged) + var/image/I = image(icon, src, "[initial(icon_state)]_active_overlay") + I.layer = EFFECTS_ABOVE_LIGHTING_LAYER + add_overlay(I) + else if (operable()) + var/image/I = image(icon, src, "[initial(icon_state)]_idle_overlay") + I.layer = EFFECTS_ABOVE_LIGHTING_LAYER + add_overlay(I) /obj/machinery/teleport/station/attack_hand(mob/user) var/datum/vueui/ui = SSvueui.get_open_ui(user, src) @@ -187,7 +206,8 @@ visible_message(SPAN_NOTICE("Teleporter engaged!")) add_fingerprint(usr) engaged = TRUE - pad.update_icon() + pad.queue_icon_update() + queue_icon_update() /obj/machinery/teleport/station/proc/disengage() if(stat & (BROKEN|NOPOWER)) @@ -200,16 +220,14 @@ visible_message(SPAN_NOTICE("Teleporter disengaged!")) add_fingerprint(usr) engaged = FALSE - pad.update_icon() + pad.queue_icon_update() + queue_icon_update() /obj/machinery/teleport/station/power_change() ..() - if(stat & NOPOWER) - icon_state = "controller-p" - if(pad) - pad.update_icon() - else - icon_state = "controller" + queue_icon_update() + if(pad) + pad.queue_icon_update() /obj/machinery/teleport/station/proc/start_recalibration() audible_message(SPAN_NOTICE("Recalibrating...")) @@ -221,4 +239,4 @@ /obj/machinery/teleport/station/Destroy() pad = null - return ..() \ No newline at end of file + return ..() diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 3813abe5143..8816dc87a15 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -100,6 +100,7 @@ emagged = 0 //Ignores if somebody doesn't have card access to that machine. var/seconds_electrified = 0 //Shock customers like an airlock. var/shoot_inventory = 0 //Fire items at customers! We're broken! + var/shoot_inventory_chance = 1 var/scan_id = 1 var/obj/item/coin/coin @@ -758,7 +759,7 @@ src.speak(slogan) src.last_slogan = world.time - if(src.shoot_inventory && prob(2)) + if(src.shoot_inventory && prob(shoot_inventory_chance)) src.throw_item() return @@ -811,12 +812,12 @@ //Somebody cut an important wire and now we're following a new definition of "pitch." /obj/machinery/vending/proc/throw_item() - var/obj/throw_item = null + var/obj/item/throw_item = null var/mob/living/target = locate() in view(7,src) if(!target) return 0 - for(var/datum/data/vending_product/R in src.product_records) + for(var/datum/data/vending_product/R in shuffle(product_records)) if (R.amount <= 0) //Try to use a record that actually has something to dump. continue var/dump_path = R.product_path @@ -827,9 +828,9 @@ SSvueui.check_uis_for_change(src) throw_item = new dump_path(src.loc) break - if (!throw_item) - return 0 - spawn(0) - throw_item.throw_at(target, 16, 3, src) + if(!throw_item) + return FALSE + throw_item.vendor_action(src) + INVOKE_ASYNC(throw_item, /atom/movable.proc/throw_at, target, rand(3, 10), rand(1, 3), src) src.visible_message("[src] launches [throw_item.name] at [target.name]!") - return 1 + return 1 \ No newline at end of file diff --git a/code/game/machinery/vending_types.dm b/code/game/machinery/vending_types.dm index ffbc64a38e6..8bc73b6ba84 100644 --- a/code/game/machinery/vending_types.dm +++ b/code/game/machinery/vending_types.dm @@ -376,8 +376,8 @@ /obj/item/storage/box/fancy/cigarettes/dromedaryco = 5, /obj/item/storage/box/fancy/cigarettes/nicotine = 3, /obj/item/storage/box/fancy/cigarettes/pra = 6, - /obj/item/storage/chewables/rollable/bad = 6, /obj/item/storage/chewables/rollable = 8, + /obj/item/storage/chewables/rollable/unathi = 6, /obj/item/storage/chewables/rollable/fine = 5, /obj/item/storage/chewables/rollable/nico = 3, /obj/item/storage/chewables/tobacco/bad = 6, @@ -406,8 +406,8 @@ /obj/item/storage/box/fancy/cigarettes/dromedaryco = 82, /obj/item/storage/box/fancy/cigarettes/nicotine = 89, /obj/item/storage/box/fancy/cigarettes/pra = 79, - /obj/item/storage/chewables/rollable/bad = 56, /obj/item/storage/chewables/rollable = 63, + /obj/item/storage/chewables/rollable/unathi = 65, /obj/item/storage/chewables/rollable/fine = 69, /obj/item/storage/chewables/rollable/nico = 86, /obj/item/storage/chewables/tobacco/bad = 55, @@ -473,7 +473,8 @@ /obj/item/reagent_containers/pill/cetahydramine = 6, /obj/item/reagent_containers/pill/perconol = 6, /obj/item/reagent_containers/food/drinks/medcup = 4, - /obj/item/storage/pill_bottle = 4 + /obj/item/storage/pill_bottle = 4, + /obj/item/reagent_containers/spray/sterilizine = 2 ) contraband = list( /obj/item/reagent_containers/inhaler/space_drugs = 2, diff --git a/code/game/objects/effects/decals/Cleanable/robots.dm b/code/game/objects/effects/decals/Cleanable/robots.dm index dc683e79e14..20a4bb272bf 100644 --- a/code/game/objects/effects/decals/Cleanable/robots.dm +++ b/code/game/objects/effects/decals/Cleanable/robots.dm @@ -48,3 +48,7 @@ /obj/effect/decal/cleanable/blood/oil/streak random_icon_states = list("mgibbl1", "mgibbl2", "mgibbl3", "mgibbl4", "mgibbl5") amount = 2 + +/obj/effect/decal/cleanable/blood/drip/oil + name = "drips of motor oil" + desc = "It's black and greasy." \ No newline at end of file diff --git a/code/game/objects/effects/projectile/projectile_impact.dm b/code/game/objects/effects/projectile/projectile_impact.dm index 84d7c03183d..f4b925f6def 100644 --- a/code/game/objects/effects/projectile/projectile_impact.dm +++ b/code/game/objects/effects/projectile/projectile_impact.dm @@ -7,8 +7,11 @@ icon_state = "impact_laser" light_color = LIGHT_COLOR_RED +/obj/effect/projectile/impact/laser/scc + icon_state = "impact_scc" + light_color = COLOR_INDIGO + /obj/effect/projectile/impact/laser/blue - name = "laser impact" icon_state = "impact_blue" light_color = LIGHT_COLOR_BLUE diff --git a/code/game/objects/effects/projectile/projectile_muzzle.dm b/code/game/objects/effects/projectile/projectile_muzzle.dm index 48409e77d21..3be5873bb8a 100644 --- a/code/game/objects/effects/projectile/projectile_muzzle.dm +++ b/code/game/objects/effects/projectile/projectile_muzzle.dm @@ -6,6 +6,10 @@ icon_state = "muzzle_laser" light_color = LIGHT_COLOR_RED +/obj/effect/projectile/muzzle/laser/scc + icon_state = "muzzle_scc" + light_color = COLOR_INDIGO + /obj/effect/projectile/muzzle/laser/blue icon_state = "muzzle_blue" light_color = LIGHT_COLOR_BLUE diff --git a/code/game/objects/effects/projectile/projectile_tracer.dm b/code/game/objects/effects/projectile/projectile_tracer.dm index 9c7246cdff5..46e29638bc8 100644 --- a/code/game/objects/effects/projectile/projectile_tracer.dm +++ b/code/game/objects/effects/projectile/projectile_tracer.dm @@ -19,6 +19,10 @@ icon_state = "beam" light_color = LIGHT_COLOR_RED +/obj/effect/projectile/tracer/laser/scc + icon_state = "beam_scc" + light_color = COLOR_INDIGO + /obj/effect/projectile/tracer/laser/blue icon_state = "beam_blue" diff --git a/code/game/objects/explosion.dm b/code/game/objects/explosion.dm index 4cf749bd899..bd0fd5a72e3 100644 --- a/code/game/objects/explosion.dm +++ b/code/game/objects/explosion.dm @@ -17,13 +17,9 @@ SSexplosives.queue(data) //Machines which report explosions. - for(var/i,i<=doppler_arrays.len,i++) - var/obj/machinery/doppler_array/Array = doppler_arrays[i] - if(Array) - var/x0 = epicenter.x - var/y0 = epicenter.y - var/z0 = epicenter.z - Array.sense_explosion(x0,y0,z0,devastation_range,heavy_impact_range,light_impact_range) + for(var/thing in doppler_arrays) + var/obj/machinery/doppler_array/Array = thing + Array.sense_explosion(epicenter.x,epicenter.y,epicenter.z,devastation_range,heavy_impact_range,light_impact_range) // == Recursive Explosions stuff == diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 18a4ec3b383..658102a4e3f 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -733,6 +733,10 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. if(!cannotzoom) M.visible_message("[zoomdevicename ? "[M] looks up from \the [src.name]" : "[M] lowers \the [src.name]"].") + if(ishuman(M)) + var/mob/living/carbon/human/H = M + H.handle_vision() + /obj/item/proc/pwr_drain() return 0 // Process Kill @@ -877,4 +881,8 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. . += "Throw Force: [throwforce]
" /obj/item/proc/use_resource(var/mob/user, var/use_amount) - return \ No newline at end of file + return + +// this gets called when the item gets chucked by the vending machine +/obj/item/proc/vendor_action(var/obj/machinery/vending/V) + return diff --git a/code/game/objects/items/devices/dociler.dm b/code/game/objects/items/devices/dociler.dm index b8b8a4ff50e..48ac455275a 100644 --- a/code/game/objects/items/devices/dociler.dm +++ b/code/game/objects/items/devices/dociler.dm @@ -50,6 +50,7 @@ H.LoseTarget() H.attack_same = 0 H.friends += user + H.hostile_nameable = TRUE L.desc += "
It looks especially docile." var/name = input(user, "Would you like to rename \the [L]?", "Dociler", L.name) as text diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm index 5d0b8e7db70..8a1dfbe0ab8 100644 --- a/code/game/objects/items/devices/laserpointer.dm +++ b/code/game/objects/items/devices/laserpointer.dm @@ -40,6 +40,7 @@ /obj/item/device/laser_pointer/attack(mob/living/M, mob/user) laser_act(M, user) + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) /obj/item/device/laser_pointer/attackby(obj/item/W, mob/user) if(istype(W, /obj/item/stock_parts/micro_laser)) @@ -64,12 +65,13 @@ if(flag) //we're placing the object on a table or in backpack return laser_act(target, user) + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) /obj/item/device/laser_pointer/proc/laser_act(var/atom/target, var/mob/living/user) if( !(user in (viewers(7,target))) ) return if (!diode) - to_chat(user, "You point [src] at [target], but nothing happens!") + to_chat(user, "You point \the [src] at \the [target], but nothing happens!") return if (!user.IsAdvancedToolUser()) to_chat(user, "You don't have the dexterity to do this!") @@ -78,7 +80,8 @@ add_fingerprint(user) - var/outmsg + var/selfmsg + var/othermsg var/turf/targloc = get_turf(target) if(istype(target, /obj/machinery/camera)) @@ -86,21 +89,24 @@ if(prob(25)) C.emp_act(28) - outmsg = "You hit the lens of [C] with [src], temporarily disabling the camera!" + selfmsg = "You hit the lens of \the [C] with \the [src], temporarily disabling the camera!" admin_attack_log(user, src,"hits the camera with a laser pointer", "EMPd a camera with a laser pointer") else - outmsg = "You fail to hit the lens of [C] with [src]." + selfmsg = "You fail to hit the lens of \the [C] with \the [src]." + othermsg = "[user] shines \the [src] at \the [C]." if(iscarbon(target)) if(user.zone_sel.selecting == BP_EYES) var/mob/living/carbon/C = target if(C.eyecheck() <= 0 && prob(30)) - outmsg = "You blind [C] with [src]" + selfmsg = "You blind \the [C] with \the [src]." + othermsg = "[user] shines \the [src] at \the [C]'s eyes'." C.eye_blind = 3 else - outmsg = "You fail to blind [C] with [src]" + selfmsg = "You fail to blind \the [C] with \the [src]." + othermsg = "[user] fails to blind \the [C] with \the [src]." //laser pointer image icon_state = "pointer_[pointer_icon_state]" @@ -112,13 +118,13 @@ I.pixel_x = target.pixel_x + rand(-5,5) I.pixel_y = target.pixel_y + rand(-5,5) - if(outmsg) - to_chat(user, outmsg) + if(selfmsg) + user.visible_message(othermsg, selfmsg) else - to_chat(user, "You point [src] at [target].") + user.visible_message("[user] points \the [src] at \the [target].", "You point \the [src] at \the [target].") - flick_overlay(I, showto, 10) + flick_overlay(I, showto, 15) icon_state = "pointer" /obj/item/device/laser_pointer/Destroy() diff --git a/code/game/objects/items/devices/lighting/flashlight.dm b/code/game/objects/items/devices/lighting/flashlight.dm index 1eea20fa1f4..823747bf291 100644 --- a/code/game/objects/items/devices/lighting/flashlight.dm +++ b/code/game/objects/items/devices/lighting/flashlight.dm @@ -51,12 +51,18 @@ if(!isturf(user.loc)) to_chat(user, "You cannot turn the light on while in this [user.loc].") //To prevent some lighting anomalities.) return 0 + toggle() + user.update_action_buttons() + return 1 + +/obj/item/device/flashlight/proc/toggle() on = !on if(on && activation_sound) playsound(src.loc, activation_sound, 75, 1) update_icon() - user.update_action_buttons() - return 1 + +/obj/item/device/flashlight/vendor_action(var/obj/machinery/vending/V) + toggle() /obj/item/device/flashlight/examine(mob/user, distance) . = ..() diff --git a/code/game/objects/items/devices/lighting/survival.dm b/code/game/objects/items/devices/lighting/survival.dm new file mode 100644 index 00000000000..a887f7e281a --- /dev/null +++ b/code/game/objects/items/devices/lighting/survival.dm @@ -0,0 +1,52 @@ +/obj/item/device/flashlight/survival + name = "survival flashlight" + desc = "A hand-held emergency light. This one has been modified with a larger bulb pointing inwards." + icon_state = "survival_flashlight" + item_state = "survival_flashlight" + light_wedge = null + + uv_intensity = 255 + light_power = 2 + brightness_on = 2 + light_color = LIGHT_COLOR_GREEN + + var/obj/item/cell/cell + var/last_drain = 0 + var/drain_per_second = 4 // should last about four minutes + +/obj/item/device/flashlight/survival/Initialize() + . = ..() + cell = new /obj/item/cell/device(src) + +/obj/item/device/flashlight/survival/Destroy() + QDEL_NULL(cell) + return ..() + +/obj/item/device/flashlight/survival/examine(mob/user, distance) + . = ..() + to_chat(user, SPAN_NOTICE("\The [src]'s power cell is at [round(cell.percent())]%.")) + +/obj/item/device/flashlight/survival/attack_self(mob/user) + if(!on && !cell.check_charge(1)) + to_chat(user, SPAN_WARNING("\The [src] doesn't have any charge!")) + return + return ..() + +/obj/item/device/flashlight/survival/toggle() + if(!on && !cell.check_charge(1)) + return + ..() + if(on) + last_drain = world.time + START_PROCESSING(SSprocessing, src) + else + STOP_PROCESSING(SSprocessing, src) + +/obj/item/device/flashlight/survival/process() + var/cell_drain = ((world.time - last_drain) / 10) * drain_per_second + if(!cell.use(cell_drain) && on) + toggle() + last_drain = world.time + +/obj/item/device/flashlight/survival/get_cell() + return cell \ No newline at end of file diff --git a/code/game/objects/items/devices/modkit.dm b/code/game/objects/items/devices/modkit.dm index c4ed79d2e64..a09c13951a3 100644 --- a/code/game/objects/items/devices/modkit.dm +++ b/code/game/objects/items/devices/modkit.dm @@ -68,5 +68,79 @@ /obj/item/device/modkit/tajaran name = "tajaran hardsuit modification kit" - desc = "A kit containing all the needed tools and parts to modify a voidsuit for another user. This one looks like it's meant for Tajarans." + desc = "A kit containing all the needed tools and parts to modify a voidsuit for another user. This one looks like it's meant for Tajara." target_species = BODYTYPE_TAJARA + +/obj/item/voidsuit_modkit + name = "voidsuit kit" + icon = 'icons/obj/device.dmi' + icon_state = "modkit" + desc = "A simple cardboard box containing the requisition forms, permits, and decal kits a Himean voidsuit." + desc_info = "In order to convert a voidsuit simply click on voidsuit or helmet with this item\ + The same process can be used to convert the voidsuit back into a regular voidsuit. Make sure not to have a helmet or tank in the suit\ + or else it will be deleted." + w_class = ITEMSIZE_SMALL + var/list/suit_options = list( + /obj/item/clothing/suit/space/void/mining = /obj/item/clothing/suit/space/void/mining/himeo, + /obj/item/clothing/head/helmet/space/void/mining = /obj/item/clothing/head/helmet/space/void/mining/himeo, + + /obj/item/clothing/suit/space/void/engineering = /obj/item/clothing/suit/space/void/engineering/himeo, + /obj/item/clothing/head/helmet/space/void/engineering = /obj/item/clothing/head/helmet/space/void/engineering/himeo, + + /obj/item/clothing/suit/space/void/atmos = /obj/item/clothing/suit/space/void/atmos/himeo, + /obj/item/clothing/head/helmet/space/void/atmos = /obj/item/clothing/head/helmet/space/void/atmos/himeo + ) + var/parts = MODKIT_FULL + +/obj/item/voidsuit_modkit/afterattack(obj/item/W as obj, mob/user as mob, proximity) + if(!proximity) + return + + if(!parts) + to_chat(user, "This kit has no parts for this modification left.") + user.drop_from_inventory(src,W) + qdel(src) + return + + var/reconverting = FALSE + var/voidsuit_product = suit_options[W.type] + if(!voidsuit_product) + for(var/thing in suit_options) + if(suit_options[thing] == W.type) + voidsuit_product = thing + reconverting = TRUE + break + if(voidsuit_product) + if(istype(W, /obj/item/clothing/suit/space/void) && W.contents.len) + to_chat(user, SPAN_NOTICE("Remove any accessories, helmets, magboots, or oxygen tanks before attempting to convert this voidsuit.")) + return + + playsound(src.loc, 'sound/weapons/blade_open.ogg', 50, 1) + var/obj/item/P = new voidsuit_product(W.loc) + + if(!reconverting) + to_chat(user, SPAN_NOTICE("Your permit for a [P] has been processed. Enjoy!")) + else + to_chat(user, SPAN_NOTICE("Your voidsuit part has been reconverted into [P].")) + + if (istype(W, /obj/item/clothing/head/helmet)) + parts &= ~MODKIT_HELMET + if (istype(W, /obj/item/clothing/suit)) + parts &= ~MODKIT_SUIT + + qdel(W) + + if(!parts) + user.drop_from_inventory(src) + qdel(src) + +/obj/item/voidsuit_modkit/himeo + name = "himeo voidsuit kit" + contained_sprite = TRUE + icon = 'icons/obj/mining_contained.dmi' + icon_state = "himeo_kit" + item_state = "himeo_kit" + desc = "A simple cardboard box containing the requisition forms, permits, and decal kits for a Himean voidsuit." + desc_fluff = "As part of a cost-cutting and productivity-enhancing initiative, NanoTrasen has authorized a number of Himean Type-76 'Fish Fur'\ + for use by miners originating from the planet. Most of these suits are assembled in Cannington and painstakingly optimized on-site by their\ + individual operator leading to a large trail of red tape as NanoTrasen is forced to inspect these suits to ensure their safety." \ No newline at end of file diff --git a/code/game/objects/items/devices/uplink.dm b/code/game/objects/items/devices/uplink.dm index e509c148a22..0487e352b7f 100644 --- a/code/game/objects/items/devices/uplink.dm +++ b/code/game/objects/items/devices/uplink.dm @@ -409,6 +409,7 @@ A list of items and costs is stored under the datum of every game mode, alongsid /obj/item/device/special_uplink/ninja name = "infiltrator uplink" + starting_telecrystals = 15 /obj/item/device/special_uplink/burglar name = "sponsored uplink" diff --git a/code/game/objects/items/shooting_range.dm b/code/game/objects/items/shooting_range.dm index 2126940f2ef..62c4f20c01a 100644 --- a/code/game/objects/items/shooting_range.dm +++ b/code/game/objects/items/shooting_range.dm @@ -1,115 +1,76 @@ +#define DECAL_SCORCH 1 +#define DECAL_BULLET 2 + // Targets, the things that actually get shot! /obj/item/target name = "shooting target" desc = "A shooting target." icon = 'icons/obj/target_stake.dmi' icon_state = "target_h" - density = 0 + var/obj/structure/target_stake/stake var/hp = 1800 - var/icon/virtualIcon - var/list/bulletholes = list() + var/icon/virtual_icon + var/list/bullet_holes - Destroy() - // if a target is deleted and associated with a stake, force stake to forget - for(var/obj/structure/target_stake/T in view(3,src)) - if(T.pinned_target == src) - T.pinned_target = null - T.density = 1 - break - return ..() // delete target +/obj/item/target/Destroy() + if(stake) + stake.set_target(null) + return ..() - Move() - ..() - // After target moves, check for nearby stakes. If associated, move to target - for(var/obj/structure/target_stake/M in view(3,src)) - if(M.density == 0 && M.pinned_target == src) - M.forceMove(loc) +/obj/item/target/attackby(var/obj/item/W, var/mob/user) + if(W.iswelder()) + if(hp == initial(hp)) + to_chat(user, SPAN_NOTICE("\The [src] is fully repaired.")) + return + var/obj/item/weldingtool/WT = W + if(WT.remove_fuel(0, user)) + cut_overlays() + LAZYCLEARLIST(bullet_holes) + icon = initial(icon) + hp = initial(hp) + to_chat(user, SPAN_NOTICE("You slice off \the [src]'s uneven chunks of steel and scorch marks.")) + return - // This may seem a little counter-intuitive but I assure you that's for a purpose. - // Stakes are the ones that carry targets, yes, but in the stake code we set - // a stake's density to 0 meaning it can't be pushed anymore. Instead of pushing - // the stake now, we have to push the target. +/obj/item/target/attack_hand(var/mob/user) + // taking pinned targets off! + if(stake) + stake.attack_hand(user) + else + return ..() +/obj/item/target/syndicate + icon_state = "target_s" + desc = "A shooting target that looks like a hostile agent." + hp = 2600 // i guess syndie targets are sturdier? - - attackby(obj/item/W as obj, mob/user as mob) - if (W.iswelder()) - var/obj/item/weldingtool/WT = W - if(WT.remove_fuel(0, user)) - cut_overlays() - to_chat(usr, "You slice off [src]'s uneven chunks of aluminum and scorch marks.") - return - - - attack_hand(mob/user as mob) - // taking pinned targets off! - var/obj/structure/target_stake/stake - for(var/obj/structure/target_stake/T in view(3,src)) - if(T.pinned_target == src) - stake = T - break - - if(stake) - if(stake.pinned_target) - stake.density = 1 - density = 0 - layer = OBJ_LAYER - - loc = user.loc - if(ishuman(user)) - if(!user.get_active_hand()) - user.put_in_hands(src) - to_chat(user, "You take the target out of the stake.") - else - src.forceMove(get_turf(user)) - to_chat(user, "You take the target out of the stake.") - - stake.pinned_target = null - return - - else - ..() - - syndicate - icon_state = "target_s" - desc = "A shooting target that looks like a hostile agent." - hp = 2600 // i guess syndie targets are sturdier? - alien - icon_state = "target_q" - desc = "A shooting target with a threatening silhouette." - hp = 2350 // alium onest too kinda +/obj/item/target/alien + icon_state = "target_q" + desc = "A shooting target with a threatening silhouette." + hp = 2350 // alium onest too kinda /obj/item/target/bullet_act(var/obj/item/projectile/Proj) var/p_x = Proj.p_x + pick(0,0,0,0,0,-1,1) // really ugly way of coding "sometimes offset Proj.p_x!" var/p_y = Proj.p_y + pick(0,0,0,0,0,-1,1) - var/decaltype = 1 // 1 - scorch, 2 - bullet + var/decaltype = (Proj.damage_flags & DAM_BULLET) ? DECAL_BULLET : DECAL_SCORCH - if(istype(/obj/item/projectile/bullet, Proj)) - decaltype = 2 - - - virtualIcon = new(icon, icon_state) - - if( virtualIcon.GetPixel(p_x, p_y) ) // if the located pixel isn't blank (null) + virtual_icon = new(icon, icon_state) + if(virtual_icon.GetPixel(p_x, p_y)) // if the located pixel isn't blank (null) hp -= Proj.damage if(hp <= 0) - for(var/mob/O in oviewers()) - if ((O.client && !( O.blinded ))) - to_chat(O, "\The [src] breaks into tiny pieces and collapses!") + visible_message(SPAN_WARNING("\The [src] breaks into tiny pieces and collapses!")) qdel(src) + return // Create a temporary object to represent the damage var/obj/bmark = new bmark.pixel_x = p_x bmark.pixel_y = p_y bmark.icon = 'icons/effects/effects.dmi' - bmark.layer = 3.5 + bmark.layer = ABOVE_OBJ_LAYER bmark.icon_state = "scorch" - if(decaltype == 1) - // Energy weapons are hot. they scorch! - + if(decaltype == DECAL_SCORCH) // Energy weapons are hot. they scorch! // offset correction bmark.pixel_x-- bmark.pixel_y-- @@ -117,33 +78,27 @@ if(Proj.damage >= 20 || istype(Proj, /obj/item/projectile/beam/practice)) bmark.icon_state = "scorch" bmark.set_dir(pick(NORTH,SOUTH,EAST,WEST)) // random scorch design - - else bmark.icon_state = "light_scorch" - else - - // Bullets are hard. They make dents! + else // Bullets are hard. They make dents! bmark.icon_state = "dent" - if(Proj.damage >= 10 && bulletholes.len <= 35) // maximum of 35 bullet holes - if(decaltype == 2) // bullet + if(Proj.damage >= 10 && length(bullet_holes) <= 35) // maximum of 35 bullet holes + if(decaltype == DECAL_BULLET) if(prob(Proj.damage+30)) // bullets make holes more commonly! - new/datum/bullethole(src, bmark.pixel_x, bmark.pixel_y) // create new bullet hole + new /datum/bullethole(src, bmark.pixel_x, bmark.pixel_y) // create new bullet hole else // Lasers! if(prob(Proj.damage-10)) // lasers make holes less commonly - new/datum/bullethole(src, bmark.pixel_x, bmark.pixel_y) // create new bullet hole + new /datum/bullethole(src, bmark.pixel_x, bmark.pixel_y) // create new bullet hole // draw bullet holes - for(var/datum/bullethole/B in bulletholes) + for(var/datum/bullethole/B in bullet_holes) + virtual_icon.DrawBox(null, B.b1x1, B.b1y, B.b1x2, B.b1y) // horizontal line, left to right + virtual_icon.DrawBox(null, B.b2x, B.b2y1, B.b2x, B.b2y2) // vertical line, top to bottom - virtualIcon.DrawBox(null, B.b1x1, B.b1y, B.b1x2, B.b1y) // horizontal line, left to right - virtualIcon.DrawBox(null, B.b2x, B.b2y1, B.b2x, B.b2y2) // vertical line, top to bottom add_overlay(bmark) // add the decal - - icon = virtualIcon // apply bulletholes over decals - + icon = virtual_icon // apply bullet_holes over decals return return PROJECTILE_CONTINUE // the bullet/projectile goes through the target! @@ -161,21 +116,25 @@ var/b2y1 = 0 var/b2y2 = 0 - New(var/obj/item/target/Target, var/pixel_x = 0, var/pixel_y = 0) - if(!Target) return +/datum/bullethole/New(var/obj/item/target/Target, var/pixel_x = 0, var/pixel_y = 0) + if(!Target) + return - // Randomize the first box - b1x1 = pixel_x - pick(1,1,1,1,2,2,3,3,4) - b1x2 = pixel_x + pick(1,1,1,1,2,2,3,3,4) - b1y = pixel_y - if(prob(35)) - b1y += rand(-4,4) + // Randomize the first box + b1x1 = pixel_x - pick(1,1,1,1,2,2,3,3,4) + b1x2 = pixel_x + pick(1,1,1,1,2,2,3,3,4) + b1y = pixel_y + if(prob(35)) + b1y += rand(-4,4) - // Randomize the second box - b2x = pixel_x - if(prob(35)) - b2x += rand(-4,4) - b2y1 = pixel_y + pick(1,1,1,1,2,2,3,3,4) - b2y2 = pixel_y - pick(1,1,1,1,2,2,3,3,4) + // Randomize the second box + b2x = pixel_x + if(prob(35)) + b2x += rand(-4,4) + b2y1 = pixel_y + pick(1,1,1,1,2,2,3,3,4) + b2y2 = pixel_y - pick(1,1,1,1,2,2,3,3,4) - Target.bulletholes.Add(src) + LAZYADD(Target.bullet_holes, src) + +#undef DECAL_SCORCH +#undef DECAL_BULLET \ No newline at end of file diff --git a/code/game/objects/items/stacks/wrap.dm b/code/game/objects/items/stacks/wrap.dm index 6ec95ba7bd9..c88545de817 100644 --- a/code/game/objects/items/stacks/wrap.dm +++ b/code/game/objects/items/stacks/wrap.dm @@ -14,6 +14,18 @@ /obj/item/stack/wrapping_paper/attackby(obj/item/W, mob/user) ..() + if (isrobot(user)) + if(istype(W.loc, /obj/item/gripper)) + var/obj/item/gripper/G = W.loc + if(!is_type_in_list(G, list(/obj/item/gripper/service, /obj/item/gripper/paperwork))) + to_chat(user, SPAN_WARNING("\The [G] isn't deft enough to wrap up \the [G.wrapped].")) + return + else if(istype(W, /obj/item/gripper)) + return + else + to_chat(user, SPAN_WARNING("You can't wrap up a cyborg module!")) + // Prevent robots from accidentally wrapping any of their internal tools, and non-service borgs from wrapping up parcels + return if (!isturf(loc)) to_chat(user, SPAN_WARNING("The paper must be set down for you to wrap a gift!")) return diff --git a/code/game/objects/items/tajara.dm b/code/game/objects/items/tajara.dm index 74c4a800681..3ef88f94bc2 100644 --- a/code/game/objects/items/tajara.dm +++ b/code/game/objects/items/tajara.dm @@ -160,7 +160,7 @@ current_day += 59 + isLeap(text2num(time2text(world.realtime, "YYYY"))) // we can conveniently use the result of `isLeap` to add 1 when we are in a leap year var/real_time = text2num(time2text(world.time + (roundstart_hour HOURS), "hh")) var/adhomian_time = real_time - if(IsEven(current_day)) + if(ISEVEN(current_day)) adhomian_time = real_time + 24 adhomian_day = Floor(current_day / 2) to_chat(usr, "You check your [src.name], glancing over at the watch face, reading the time to be '[adhomian_time]'. Today's date is the '[adhomian_day]th day of [adhomian_month], [adhomian_year]'.") diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index c1d1e20d0f9..1ed89d65183 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -958,6 +958,28 @@ desc = "A bear plushie. Only you can stop phoron fires!" icon_state = "bearplushie_fire" +/obj/item/toy/plushie/schlorrgo + name = "schlorrgo plush" + desc = "A schlorrgo plushie, ready to roll his way into your heart!" + icon_state = "schlorrgoplushie" + phrase = "Eough!" + +/obj/item/toy/plushie/coolschlorrgo + name = "Cool Schlorrgo plush" + desc = "A plushie of the popular cartoon character, Cool Schlorrgo. Hadii's grace!" + icon_state = "coolerschlorrgoplushie" + phrase = "Eough!" + +/obj/item/toy/plushie/slime + name = "slime plush" + desc = "A beanbag-filled slime plushie. Relaxing!" + icon_state = "slimeplushie" + +/obj/item/toy/plushie/bee + name = "bee plush" + desc = "A chunky plushie bee. Your new buzz-t friend!" + icon_state = "beeplushie" + //Squid Plushies /obj/item/toy/plushie/squid @@ -977,6 +999,13 @@ item_state = "[colorvar]squid" desc = "A small, cute and loveable squid friend. This one is in [colorvar]." +/obj/item/toy/plushie/squidcolour + name = "squid plushie" + desc = "A small, cute, and loveable squid friend. This one comes in a wide variety of colours." + icon_state = "squidplushie_colour" + // slot_flags = SLOT_HEAD - head sprite may come someday, but not today. + phrase = "Blub!" + //Toy cult sword /obj/item/toy/cultsword name = "foam sword" diff --git a/code/game/objects/items/trash.dm b/code/game/objects/items/trash.dm index 2b994554431..ce38beea550 100644 --- a/code/game/objects/items/trash.dm +++ b/code/game/objects/items/trash.dm @@ -208,18 +208,23 @@ /obj/item/trash/ricetub name = "empty rice tub" icon_state = "ricetub" + var/has_chopsticks = FALSE /obj/item/trash/ricetub/attackby(obj/item/W, mob/living/user) if(istype(W, /obj/item/material/kitchen/utensil/fork/chopsticks)) - var/obj/item/trash/ricetub_s/T = new() to_chat(user, SPAN_NOTICE("You reattach the [W] to \the [src]")) - src.Destroy() - W.Destroy() - user.put_in_inactive_hand(T) //Because the chopsticks are in the active hand + qdel(W) + has_chopsticks = TRUE + update_icon() -/obj/item/trash/ricetub_s - name = "empty rice tub" - icon_state = "ricetub_s" +/obj/item/trash/ricetub/update_icon() + if(has_chopsticks) + icon_state = "ricetub_s" + else + icon_state = "ricetub" + +/obj/item/trash/ricetub/sticks + has_chopsticks = TRUE /obj/item/trash/seaweed name = "empty moss pack" diff --git a/code/game/objects/items/weapons/chaplain_items.dm b/code/game/objects/items/weapons/chaplain_items.dm index bd6b87b7bdc..f0b998cfc5a 100644 --- a/code/game/objects/items/weapons/chaplain_items.dm +++ b/code/game/objects/items/weapons/chaplain_items.dm @@ -123,12 +123,6 @@ else to_chat(user, SPAN_DANGER("The [src] appears to do nothing.")) M.visible_message(SPAN_DANGER("\The [user] waves \the [src] over \the [M]'s head.")) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(prob(25)) - H.cure_all_traumas(cure_type = CURE_SOLITUDE) - else if(prob(20)) - H.cure_all_traumas(cure_type = CURE_CRYSTAL) return else if(user.a_intent != I_HURT) // to prevent the chaplain from hurting peoples accidentally to_chat(user, SPAN_NOTICE("The [src] appears to do nothing.")) @@ -193,3 +187,56 @@ A.dropInto(loc) user.visible_message("[user] pours \the [A] out from \the [src].", "You pour \the [A] out from \the [src].") desc = "A vase used to store the ashes of the deceased." + +/obj/item/assunzioneorb + name = "warding sphere" + desc = "A religious artefact commonly associated with Luceism, this transparent globe gives off a faint ghostly white light at all times." + desc_fluff = "Luceian warding spheres are made on the planet of Assunzione in the great domed city of Guelma, and are carried by followers of the faith heading abroad. \ + Constructed out of glass and a luce vine bulb these spheres can burn for years upon years, and it is said that the lights in the truly faithful's warding sphere will always \ + point towards Assunzione. It is considered extremely bad luck to have one's warding sphere break, to extinguish its flame, or to relinquish it (permanently) to an unbeliever." + icon = 'icons/obj/weapons.dmi' + icon_state = "assunzioneorb" + item_state = "assunzioneorb" + throwforce = 5 + force = 5 + light_range = 1.4 + light_power = 1.4 + light_color = LIGHT_COLOR_BLUE + w_class = ITEMSIZE_SMALL + drop_sound = 'sound/items/drop/glass.ogg' + pickup_sound = 'sound/items/pickup/glass.ogg' + +/obj/item/assunzioneorb/proc/shatter() + visible_message(SPAN_WARNING("\The [src] shatters!"), SPAN_WARNING("You hear a small glass object shatter!")) + playsound(get_turf(src), 'sound/effects/glass_hit.ogg', 75, TRUE) + new /obj/item/material/shard(get_turf(src)) + qdel(src) + +/obj/item/assunzioneorb/throw_impact(atom/hit_atom) + ..() + shatter() + +/obj/item/assunzioneorb/afterattack(atom/target, mob/user, proximity) + if(!proximity) + return + if(user.a_intent != I_HURT) + return + + shatter() + +/obj/item/storage/assunzionesheath + name = "warding sphere casing" + desc = "A small metal shell designed to protect the warding sphere inside. The all-seeing eye of Ennoia, a common symbol of Luceism, is engraved upon the front of the casing." + icon = 'icons/obj/weapons.dmi' + icon_state = "assunzionesheath_empty" + can_hold = list(/obj/item/assunzioneorb) + storage_slots = 1 + drop_sound = 'sound/items/drop/axe.ogg' + pickup_sound = 'sound/items/pickup/axe.ogg' + +/obj/item/storage/assunzionesheath/update_icon() + if(contents.len) + icon_state = "assunzionesheath" + else + icon_state = "assunzionesheath_empty" + diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm index bbbe3f88e32..e952da9391b 100644 --- a/code/game/objects/items/weapons/cigs_lighters.dm +++ b/code/game/objects/items/weapons/cigs_lighters.dm @@ -355,10 +355,12 @@ CIGARETTE PACKETS ARE IN FANCY.DM to_chat(user, SPAN_NOTICE("[src] is full.")) /obj/item/clothing/mask/smokable/cigarette/attack_self(mob/user as mob) - if(lit == TRUE) - user.visible_message(SPAN_NOTICE("[user] calmly drops and treads on the lit [src], putting it out instantly.")) + if(lit) + user.visible_message(SPAN_NOTICE("[user] calmly drops and treads on the lit [src], putting it out instantly."), SPAN_NOTICE("You calmly drop and tread on the lit [src], putting it out instantly.")) playsound(src.loc, 'sound/items/cigs_lighters/cig_snuff.ogg', 50, 1) die(TRUE) + else // Cigarette packing. For compulsive smokers. + user.visible_message(SPAN_NOTICE("[user] taps \the [src] against their palm."), SPAN_NOTICE("You tap \the [src] against your palm.")) return ..() @@ -674,6 +676,19 @@ CIGARETTE PACKETS ARE IN FANCY.DM drop_sound = 'sound/items/drop/accessory.ogg' pickup_sound = 'sound/items/pickup/accessory.ogg' +/obj/item/flame/lighter/zippo/augment + name = "retractable lighter" + desc = "An augmented lighter, implanted directly into the hand, popping through the finger." + icon_state = "lighter-aug" + item_state = "lighter-aug" + +/obj/item/flame/lighter/zippo/augment/throw_at(atom/target, range, speed, mob/thrower) + thrower.drop_from_inventory(src) + +/obj/item/flame/lighter/zippo/augment/dropped() + loc = null + qdel(src) + /obj/item/flame/lighter/zippo/dominia name = "\improper Dominian Zippo lighter" desc = "A zippo lighter with a depiction of the Imperial standard of Dominia." @@ -783,9 +798,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM base_state = icon_state if(user.r_hand == src || user.l_hand == src) if(!lit) - lit = TRUE - update_icon() - playsound(src.loc, pick(activation_sound), 75, 1) + handle_lighting() if(istype(src, /obj/item/flame/lighter/zippo)) if(last_open <= world.time - 20) //Spam limiter. last_open = world.time @@ -806,8 +819,6 @@ CIGARETTE PACKETS ARE IN FANCY.DM if(last_open <= world.time - 20) //Spam limiter. last_open = world.time user.visible_message(SPAN_DANGER("After a few attempts, [user] manages to light \the [src], they however burn their finger in the process."), range = 3) - set_light(flame_light_power, flame_light_range, l_color = flame_light_color) - START_PROCESSING(SSprocessing, src) else lit = FALSE update_icon() @@ -825,6 +836,15 @@ CIGARETTE PACKETS ARE IN FANCY.DM return ..() return +/obj/item/flame/lighter/proc/handle_lighting() + lit = TRUE + update_icon() + playsound(src.loc, pick(activation_sound), 75, 1) + set_light(flame_light_power, flame_light_range, l_color = flame_light_color) + START_PROCESSING(SSprocessing, src) + +/obj/item/flame/lighter/vendor_action(var/obj/machinery/vending/V) + handle_lighting() /obj/item/flame/lighter/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) if(!istype(M, /mob)) diff --git a/code/game/objects/items/weapons/cosmetics.dm b/code/game/objects/items/weapons/cosmetics.dm index 4ab4be2dbee..8ec42b47ed0 100644 --- a/code/game/objects/items/weapons/cosmetics.dm +++ b/code/game/objects/items/weapons/cosmetics.dm @@ -23,15 +23,67 @@ name = "black lipstick" colour = "black" +/obj/item/lipstick/amberred + name = "amberred lipstick" + colour = "amberred" + +/obj/item/lipstick/cherry + name = "cherry lipstick" + colour = "cherry" + +/obj/item/lipstick/orange + name = "orange lipstick" + colour = "orange" + +/obj/item/lipstick/gold + name = "gold lipstick" + colour = "gold" + +/obj/item/lipstick/purple + name = "purple lipstick" + colour = "purple" + +/obj/item/lipstick/deepred + name = "deepred lipstick" + colour = "deepred" + /obj/item/lipstick/pink name = "pink lipstick" colour = "pink" +/obj/item/lipstick/rosepink + name = "rosepink lipstick" + colour = "rosepink" + +/obj/item/lipstick/nude + name = "nude lipstick" + colour = "nude" + +/obj/item/lipstick/wine + name = "wine lipstick" + colour = "wine" + +/obj/item/lipstick/peach + name = "peach lipstick" + colour = "peach" + +/obj/item/lipstick/forestgreen + name = "forestgreen lipstick" + colour = "forestgreen" + +/obj/item/lipstick/skyblue + name = "skyblue lipstick" + colour = "skyblue" + +/obj/item/lipstick/teal + name = "teal lipstick" + colour = "teal" + /obj/item/lipstick/random name = "lipstick" /obj/item/lipstick/random/New() - colour = pick("red","purple","jade","pink","black") + colour = pick("red","purple","jade","black","amberred","cherry","orange","gold","purple","deepred","pink","rosepink","nude","wine","peach","forestgreen","skyblue","teal") name = "[colour] lipstick" diff --git a/code/game/objects/items/weapons/gift_wrappaper.dm b/code/game/objects/items/weapons/gift_wrappaper.dm index b4b98b1b1c1..1cc50d49dd7 100644 --- a/code/game/objects/items/weapons/gift_wrappaper.dm +++ b/code/game/objects/items/weapons/gift_wrappaper.dm @@ -30,7 +30,7 @@ user.drop_item() playsound(src.loc, 'sound/items/package_unwrap.ogg', 50,1) if(src.gift) - user.put_in_active_hand(gift) + user.put_in_hands(gift) src.gift.add_fingerprint(user) else to_chat(user, "The gift was empty!") @@ -244,7 +244,6 @@ /obj/item/xmasgift/medium/get_gift_type() var/picked_gift_type = pick( - /obj/item/sord, /obj/random/booze, /obj/random/random_flag, /obj/item/storage/belt/champion, diff --git a/code/game/objects/items/weapons/grenades/grenade.dm b/code/game/objects/items/weapons/grenades/grenade.dm index 7f740f9de09..6c49168197d 100644 --- a/code/game/objects/items/weapons/grenades/grenade.dm +++ b/code/game/objects/items/weapons/grenades/grenade.dm @@ -59,21 +59,21 @@ return -/obj/item/grenade/proc/activate(mob/user as mob) +/obj/item/grenade/proc/activate(var/atom/user) if(active) return - if(user) - msg_admin_attack("[user.name] ([user.ckey]) primed \a [fake ? ("fake ") : ("")][src] (JMP)",ckey=key_name(user)) + if(ismob(user)) + var/mob/M = user + msg_admin_attack("[M.name] ([M.ckey]) primed \a [fake ? ("fake ") : ("")][src] (JMP)",ckey=key_name(M)) + else + message_admins("[user.name] primed \a [fake ? ("fake ") : ("")][src] (JMP)") icon_state = initial(icon_state) + "_active" active = 1 playsound(loc, activation_sound, 75, 1, -3) - spawn(det_time) - prime() - return - + addtimer(CALLBACK(src, .proc/prime), det_time) /obj/item/grenade/proc/prime() var/turf/T = get_turf(src) @@ -84,3 +84,6 @@ walk(src, null, null) ..() return + +/obj/item/grenade/vendor_action(var/obj/machinery/vending/V) + activate(V) \ No newline at end of file diff --git a/code/game/objects/items/weapons/material/ashtray.dm b/code/game/objects/items/weapons/material/ashtray.dm index efa3911323c..00630002558 100644 --- a/code/game/objects/items/weapons/material/ashtray.dm +++ b/code/game/objects/items/weapons/material/ashtray.dm @@ -18,15 +18,17 @@ return /obj/item/material/ashtray/shatter() + ..() if(emptyout(get_turf(src))) visible_message(SPAN_DANGER("The contents of [src] spill everywhere!")) /obj/item/material/ashtray/proc/emptyout(atom/dest) - var/count = 0 - for (var/obj/item/clothing/mask/smokable/cigarette/O in contents) - count++ + if(!contents.len) + return FALSE + for (var/obj/O in contents) O.forceMove(dest) - return count > 0 + update_icon() + return TRUE /obj/item/material/ashtray/attack_self(mob/user) var/turf/dest = get_turf(src) @@ -68,7 +70,7 @@ if (istype(W,/obj/item/clothing/mask/smokable/cigarette)) var/obj/item/clothing/mask/smokable/cigarette/cig = W if (cig.lit == TRUE) - user.visible_message("[user] crushes [cig] in \the [src], putting it out.", SPAN_NOTICE("")) + user.visible_message("[user] crushes [cig] in [src], putting it out.", SPAN_NOTICE("You crush [cig] in [src], putting it out.")) playsound(src.loc, 'sound/items/cigs_lighters/cig_snuff.ogg', 50, 1) STOP_PROCESSING(SSprocessing, cig) var/obj/item/butt = new cig.type_butt(src) @@ -82,8 +84,9 @@ "[user] places [cig] in [src] without even smoking it.", SPAN_NOTICE("You place [cig] in [src] without even smoking it. Why would you do that?") ) + else + user.visible_message("[user] places [W] in [src].", SPAN_NOTICE("You place [W] in [src].")) - src.visible_message("[user] places [W] in [src].") user.update_inv_l_hand() user.update_inv_r_hand() add_fingerprint(user) diff --git a/code/game/objects/items/weapons/material/knives.dm b/code/game/objects/items/weapons/material/knives.dm index d761f93d972..32750320b7d 100644 --- a/code/game/objects/items/weapons/material/knives.dm +++ b/code/game/objects/items/weapons/material/knives.dm @@ -12,7 +12,7 @@ desc = "A general purpose Chef's Knife made by SpaceCook Incorporated. Guaranteed to stay sharp for years to come." flags = CONDUCT sharp = 1 - edge = 1 + edge = TRUE var/active = 1 // For butterfly knives force_divisor = 0.15 // 9 when wielded with hardness 60 (steel) matter = list(DEFAULT_WALL_MATERIAL = 12000) @@ -122,7 +122,7 @@ /obj/item/material/knife/butterfly/update_force() if(active) - edge = 1 + edge = TRUE sharp = 1 ..() //Updates force. throwforce = max(3,force-3) @@ -133,7 +133,7 @@ attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") else force = 3 - edge = 0 + edge = FALSE sharp = 0 hitsound = initial(hitsound) icon_state = initial(icon_state) diff --git a/code/game/objects/items/weapons/material/material_weapons.dm b/code/game/objects/items/weapons/material/material_weapons.dm index f33926f68aa..b85055ad098 100644 --- a/code/game/objects/items/weapons/material/material_weapons.dm +++ b/code/game/objects/items/weapons/material/material_weapons.dm @@ -8,7 +8,7 @@ throw_range = 7 w_class = ITEMSIZE_NORMAL sharp = 0 - edge = 0 + edge = FALSE icon = 'icons/obj/weapons.dmi' var/use_material_name = TRUE // Does the finished item put the material name in front of it? diff --git a/code/game/objects/items/weapons/material/misc.dm b/code/game/objects/items/weapons/material/misc.dm index 9e0cb3e7d79..17ceb3b6320 100644 --- a/code/game/objects/items/weapons/material/misc.dm +++ b/code/game/objects/items/weapons/material/misc.dm @@ -1,7 +1,7 @@ /obj/item/material/harpoon name = "harpoon" sharp = 1 - edge = 1 + edge = TRUE desc = "Tharr she blows!" icon_state = "harpoon" item_state = "harpoon" @@ -38,7 +38,7 @@ thrown_force_divisor = 0.75 // 15 with weight 20 (steel) w_class = ITEMSIZE_SMALL sharp = 1 - edge = 1 + edge = TRUE origin_tech = list(TECH_MATERIAL = 2, TECH_COMBAT = 1) attack_verb = list("chopped", "torn", "cut") applies_material_colour = 0 @@ -81,7 +81,7 @@ slot_r_hand_str = 'icons/mob/items/righthand_kitchen.dmi', ) sharp = 1 - edge = 1 + edge = TRUE force_divisor = 0.25 /obj/item/material/minihoe // -- Numbers @@ -110,7 +110,7 @@ force_divisor = 0.275 // 16 with hardness 60 (steel) thrown_force_divisor = 0.25 // 5 with weight 20 (steel) sharp = 1 - edge = 1 + edge = TRUE throw_speed = 1 throw_range = 3 w_class = ITEMSIZE_LARGE diff --git a/code/game/objects/items/weapons/material/shards.dm b/code/game/objects/items/weapons/material/shards.dm index 8abf573e902..4e899117a14 100644 --- a/code/game/objects/items/weapons/material/shards.dm +++ b/code/game/objects/items/weapons/material/shards.dm @@ -7,7 +7,7 @@ icon_state = "large" randpixel = 8 sharp = 1 - edge = 1 + edge = TRUE recyclable = TRUE w_class = ITEMSIZE_SMALL force_divisor = 0.2 // 6 with hardness 30 (glass) diff --git a/code/game/objects/items/weapons/material/swords.dm b/code/game/objects/items/weapons/material/swords.dm index 4deada6e5bb..16dec2374aa 100644 --- a/code/game/objects/items/weapons/material/swords.dm +++ b/code/game/objects/items/weapons/material/swords.dm @@ -11,7 +11,7 @@ force_divisor = 0.7 // 42 when wielded with hardnes 60 (steel) thrown_force_divisor = 0.5 // 10 when thrown with weight 20 (steel) sharp = 1 - edge = 1 + edge = TRUE attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") hitsound = 'sound/weapons/bladeslice.ogg' can_embed = 0 diff --git a/code/game/objects/items/weapons/material/thrown.dm b/code/game/objects/items/weapons/material/thrown.dm index 186a213e338..313e6389ec5 100644 --- a/code/game/objects/items/weapons/material/thrown.dm +++ b/code/game/objects/items/weapons/material/thrown.dm @@ -8,7 +8,7 @@ throw_speed = 10 throw_range = 15 sharp = 1 - edge = 1 + edge = TRUE w_class = ITEMSIZE_SMALL /obj/item/material/star/New() diff --git a/code/game/objects/items/weapons/material/twohanded.dm b/code/game/objects/items/weapons/material/twohanded.dm index dc7c0df3ced..c704c2ded0f 100644 --- a/code/game/objects/items/weapons/material/twohanded.dm +++ b/code/game/objects/items/weapons/material/twohanded.dm @@ -194,7 +194,7 @@ unwielded_force_divisor = 0.25 force_divisor = 0.7 // 10/42 with hardness 60 (steel) and 0.25 unwielded divisor sharp = 1 - edge = 1 + edge = TRUE w_class = ITEMSIZE_LARGE slot_flags = SLOT_BACK force_wielded = 30 @@ -236,7 +236,7 @@ force_divisor = 0.35 // 21 damage for steel (hardness 60) unwielded_force_divisor = 0.2 // 12 damage for steel (hardness 60) thrown_force_divisor = 1.2 // 24 damage for steel (weight 20) - edge = 1 + edge = TRUE sharp = 0 mob_throw_hit_sound = 'sound/weapons/pierce.ogg' attack_verb = list("attacked", "poked", "jabbed", "torn", "gored") @@ -530,7 +530,7 @@ force = 5 unwielded_force_divisor = 0.2 force_divisor = 0.3 - edge = 1 + edge = TRUE w_class = ITEMSIZE_LARGE slot_flags = SLOT_BACK attack_verb = list("attacked", "poked", "jabbed", "gored", "stabbed") @@ -624,7 +624,7 @@ force_wielded = 30 unwielded_force_divisor = 1 thrown_force_divisor = 0.75 - edge = 1 + edge = TRUE sharp = 1 attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut") default_material = "steel" diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm index eb2733a5ab6..1c3c49cf533 100644 --- a/code/game/objects/items/weapons/melee/energy.dm +++ b/code/game/objects/items/weapons/melee/energy.dm @@ -4,7 +4,7 @@ var/active_throwforce var/active_w_class sharp = 0 - edge = 0 + edge = FALSE armor_penetration = 10 flags = NOBLOODY can_embed = 0//No embedding pls @@ -24,7 +24,7 @@ force = active_force throwforce = active_throwforce sharp = 1 - edge = 1 + edge = TRUE w_class = active_w_class playsound(user, 'sound/weapons/saberon.ogg', 50, 1) @@ -147,7 +147,7 @@ origin_tech = list(TECH_COMBAT = 6, TECH_PHORON = 4, TECH_MATERIAL = 7, TECH_ILLEGAL = 4) attack_verb = list("stabbed", "chopped", "sliced", "cleaved", "slashed", "cut") sharp = 1 - edge = 1 + edge = TRUE slot_flags = SLOT_BACK base_reflectchance = 0 base_block_chance = 0 //cannot be used to block guns @@ -196,7 +196,7 @@ origin_tech = list(TECH_MAGNET = 3, TECH_COMBAT = 4) attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut") sharp = 1 - edge = 1 + edge = TRUE base_reflectchance = 0 base_block_chance = 0 //cannot be used to block guns shield_power = 0 @@ -235,7 +235,7 @@ flags = NOBLOODY origin_tech = list(TECH_MAGNET = 3, TECH_ILLEGAL = 4) sharp = 1 - edge = 1 + edge = TRUE var/blade_color shield_power = 75 @@ -363,7 +363,7 @@ active_force = 40 //Normal attacks deal very high damage - about the same as wielded fire axe armor_penetration = 100 sharp = 1 - edge = 1 + edge = TRUE anchored = 1 // Never spawned outside of inventory, should be fine. throwforce = 1 //Throwing or dropping the item deletes it. throw_speed = 1 diff --git a/code/game/objects/items/weapons/melee/misc.dm b/code/game/objects/items/weapons/melee/misc.dm index 85626b31267..6057cc710f3 100644 --- a/code/game/objects/items/weapons/melee/misc.dm +++ b/code/game/objects/items/weapons/melee/misc.dm @@ -30,7 +30,7 @@ throwforce = 7 w_class = ITEMSIZE_LARGE sharp = 1 - edge = 1 + edge = TRUE origin_tech = list(TECH_COMBAT = 5) attack_verb = list("chopped", "sliced", "shredded", "slashed", "cut", "ripped") hitsound = 'sound/weapons/bladeslice.ogg' @@ -175,7 +175,7 @@ throwforce = 5 w_class = ITEMSIZE_LARGE sharp = 1 - edge = 1 + edge = TRUE can_embed = 0 origin_tech = list(TECH_COMBAT = 4) attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") diff --git a/code/game/objects/items/weapons/research_slip.dm b/code/game/objects/items/weapons/research_slip.dm new file mode 100644 index 00000000000..514c09f5c79 --- /dev/null +++ b/code/game/objects/items/weapons/research_slip.dm @@ -0,0 +1,12 @@ +/obj/item/research_slip + name = "research slip" + desc = "A small slip of plastic with an embedded chip. It is commonly used to store small amounts of research data." + desc_info = "This item is to be used in the destructive analyzer to gain research points." + icon = 'icons/obj/contained_items/tools/research_slip.dmi' + icon_state = "slip" + contained_sprite = TRUE + +/obj/item/research_slip/Initialize(mapload, var/list/research_levels) + . = ..() + if(length(research_levels)) + origin_tech = research_levels \ No newline at end of file diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index 51453d59cc7..10cb5f6a871 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -34,7 +34,7 @@ if (!..()) return 0 - if(species_restricted && istype(M,/mob/living/carbon/human)) + if(species_restricted && ishuman(M) && !(slot in list(slot_l_hand, slot_r_hand))) var/exclusive = null var/wearable = null var/mob/living/carbon/human/H = M diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index 2b353f08392..172fd6790e3 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -330,3 +330,19 @@ w_class = ITEMSIZE_NORMAL can_hold = list(/obj/item/book, /obj/item/spellbook) + // ----------------------------- + // Chemistry Bag + // ----------------------------- +/obj/item/storage/bag/chemistry + name = "chemistry bag" + icon = 'icons/obj/chemical.dmi' + item_icons = list( + slot_l_hand_str = 'icons/mob/items/lefthand_medical.dmi', + slot_r_hand_str = 'icons/mob/items/righthand_medical.dmi', + ) + icon_state = "chembag" + desc = "A bag for storing pills and bottles of medicine." + max_storage_space = 200 + w_class = ITEMSIZE_LARGE + slowdown = 1 + can_hold = list(/obj/item/reagent_containers/pill,/obj/item/reagent_containers/glass/beaker,/obj/item/reagent_containers/glass/bottle) diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index 7686c0d5bb5..6827fc354f5 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -83,7 +83,8 @@ /obj/item/pipewrench, /obj/item/powerdrill, /obj/item/device/radio, - /obj/item/device/debugger + /obj/item/device/debugger, + /obj/item/device/eftpos ) @@ -481,4 +482,5 @@ desc = "Only useful for holding up your pants." // Useless belt is useless. icon_state = "belt" item_state = "belt" - storage_slots = 0 + storage_slots = 1 + max_w_class = ITEMSIZE_TINY diff --git a/code/game/objects/items/weapons/storage/business_card.dm b/code/game/objects/items/weapons/storage/business_card.dm new file mode 100644 index 00000000000..12b13795b3b --- /dev/null +++ b/code/game/objects/items/weapons/storage/business_card.dm @@ -0,0 +1,36 @@ +/obj/item/storage/business_card_holder + name = "business card holder" + desc = "A sleek holster for your business card. You wouldn't want it getting damaged in any way." + storage_slots = 5 + icon = 'icons/obj/office_supplies.dmi' + icon_state = "holder" + w_class = ITEMSIZE_TINY + max_w_class = ITEMSIZE_TINY + can_hold = list(/obj/item/paper/business_card) + +/obj/item/storage/business_card_holder/update_icon() + cut_overlays() + if(length(contents)) + var/mutable_appearance/card_overlay = mutable_appearance(icon, "holder-overlay") + card_overlay.appearance_flags = RESET_COLOR + add_overlay(card_overlay) + +/obj/item/paper/business_card + name = "business card" + desc = "A small slip of paper, capable of elevating your status on the social hierachy between you and your co-workers, provided you picked the right font." + icon = 'icons/obj/office_supplies.dmi' + icon_state = "generic_card1" + +/obj/item/paper/business_card/attack_self(mob/living/user) + user.examinate(src) + +/obj/item/paper/business_card/alt + icon_state = "generic_card2" + +/obj/item/paper/business_card/rounded + icon_state = "rounded_corners" + +/obj/item/paper/business_card/glass + name = "glass business card" + desc = "A fancy variant of the classic business card. This one immediately indicates that you're serious about your business, but the contents of the card will seal the deal." + icon_state = "glass_card" \ No newline at end of file diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm index ffe09af1f9e..1a710e4963e 100644 --- a/code/game/objects/items/weapons/storage/fancy.dm +++ b/code/game/objects/items/weapons/storage/fancy.dm @@ -303,8 +303,10 @@ reagents.trans_to_obj(W, (reagents.total_volume/contents.len)) user.equip_to_slot_if_possible(W, slot_wear_mask) reagents.maximum_volume = 15 * contents.len - user.visible_message("[user] casually pulls out a [icon_type] from \the [src] with their mouth.", range = 3) + user.visible_message(SPAN_NOTICE("[user] casually pulls out a [icon_type] from \the [src] with their mouth."), SPAN_NOTICE("You casually pull out a [icon_type] from \the [src] with your mouth."), range = 3) update_icon() + if(M == user && target_zone == BP_R_HAND || target_zone == BP_L_HAND) // Cig packing. Because obsessive smokers do it. + user.visible_message(SPAN_NOTICE("[user] taps \the [src] against their palm."), SPAN_NOTICE("You tap \the [src] against your palm.")) else ..() diff --git a/code/game/objects/items/weapons/storage/internal.dm b/code/game/objects/items/weapons/storage/internal.dm index e4d07ace7f6..50b933e1b8d 100644 --- a/code/game/objects/items/weapons/storage/internal.dm +++ b/code/game/objects/items/weapons/storage/internal.dm @@ -48,10 +48,10 @@ switch(over_object.name) if("right hand") user.u_equip(master_item) - user.put_in_r_hand(master_item) + user.equip_to_slot_if_possible(master_item, slot_r_hand) if("left hand") user.u_equip(master_item) - user.put_in_l_hand(master_item) + user.equip_to_slot_if_possible(master_item, slot_l_hand) master_item.add_fingerprint(user) return 0 return 0 diff --git a/code/game/objects/items/weapons/storage/misc.dm b/code/game/objects/items/weapons/storage/misc.dm index b8184c3ed32..c8efe6c2f37 100644 --- a/code/game/objects/items/weapons/storage/misc.dm +++ b/code/game/objects/items/weapons/storage/misc.dm @@ -171,13 +171,6 @@ //loose leaf -/obj/item/storage/chewables/rollable/bad - name = "box of S'th Kasavakh tobacco leaves" - desc = "A box of coarse gritty tobacco which still manages to grow against the desertification of Moghes." - starts_with = list(/obj/item/reagent_containers/food/snacks/grown/dried_tobacco/bad = 8) - icon_state = "roll_bad" - item_state = "Fpacket" - /obj/item/storage/chewables/rollable name = "box of Agyre Lake tobacco leaves" desc = "Advertised to be grown using fresh water pumped directly from the titular Martian lake." @@ -193,6 +186,13 @@ pickup_sound = 'sound/items/pickup/cardboardbox.ogg' use_sound = 'sound/items/storage/box.ogg' +/obj/item/storage/chewables/rollable/unathi + name = "box of S'th Kasavakh tobacco leaves" + desc = "A box of coarse gritty tobacco which still manages to grow against the desertification of Moghes." + starts_with = list(/obj/item/reagent_containers/food/snacks/grown/dried_tobacco = 8) + icon_state = "roll_unathi" + item_state = "Fpacket" + /obj/item/storage/chewables/rollable/fine name = "box of Excelsior Epsilon tobacco leaves" desc = "Quality tobacco favored by the Corporates of Eridani - just don't read the label at the bottom." diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm index d136d2dca49..6bbd8181d58 100644 --- a/code/game/objects/items/weapons/storage/secure.dm +++ b/code/game/objects/items/weapons/storage/secure.dm @@ -23,9 +23,9 @@ var/l_hacking = 0 var/emagged = 0 var/open = 0 - w_class = ITEMSIZE_NORMAL - max_w_class = ITEMSIZE_SMALL - max_storage_space = 14 + w_class = ITEMSIZE_LARGE + max_w_class = ITEMSIZE_NORMAL + max_storage_space = 16 use_sound = 'sound/items/storage/briefcase.ogg' examine(mob/user) diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index aeb717bccbe..800d751b448 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -86,10 +86,10 @@ switch(over_object.name) if("right hand") usr.u_equip(src) - usr.put_in_r_hand(src,FALSE) + usr.equip_to_slot_if_possible(src, slot_r_hand) if("left hand") usr.u_equip(src) - usr.put_in_l_hand(src,FALSE) + usr.equip_to_slot_if_possible(src, slot_l_hand) src.add_fingerprint(usr) /obj/item/storage/proc/return_inv() @@ -195,7 +195,7 @@ if(display_contents_with_number) for(var/datum/numbered_display/ND in display_contents) ND.sample_object.screen_loc = "[cx]:16,[cy]:16" - ND.sample_object.maptext = "[(ND.number > 1)? "[ND.number]" : ""]" + ND.sample_object.maptext = SMALL_FONTS(7, "[(ND.number > 1)? "[ND.number]" : ""]") ND.sample_object.layer = SCREEN_LAYER+0.01 cx++ if (cx > (4+cols)) @@ -534,7 +534,7 @@ /obj/item/storage/dropped(mob/user as mob) return -/obj/item/storage/attack_hand(mob/user as mob) +/obj/item/storage/attack_hand(mob/user) if(ishuman(user)) var/mob/living/carbon/human/H = user if(H.l_store == src && !H.get_active_hand()) //Prevents opening if it's in a pocket. @@ -550,7 +550,7 @@ src.open(user) else ..() - for(var/mob/M in range(1)) + for(var/mob/M in range(1, get_turf(src)) - user) if (M.s_active == src) src.close(M) src.add_fingerprint(user) diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm index d7446f4d364..10aa4a22ba6 100644 --- a/code/game/objects/items/weapons/storage/toolbox.dm +++ b/code/game/objects/items/weapons/storage/toolbox.dm @@ -232,3 +232,13 @@ /obj/item/storage/toolbox/lunchbox/schlorrgo/filled filled = TRUE + +/obj/item/storage/toolbox/lunchbox/scc + name = "Stellar Corporate Conglomerate lunchbox" + desc = "A little lunchbox. This one is branded with the Stellar Corporate Conglomerate logo." + desc_fluff = "The Stellar Corporate Conglomerate, also known as Chainlink, is a joint alliance between the NanoTrasen Corporation, Hephaestus Industries, Idris Incorporated, Zeng-Hu Pharmaceuticals and Zavodskoi Interstellar to exercise an undisputed economic dominance over the Orion Spur." + icon_state = "lunchbox_scc" + item_state = "lunchbox_scc" + +/obj/item/storage/toolbox/lunchbox/scc/filled + filled = TRUE \ No newline at end of file diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index d630e4e3570..f02655c0796 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -123,7 +123,7 @@ desc = "Comes with all the clothes you need to impersonate most people. Acting lessons sold seperately." starts_with = list( /obj/item/clothing/under/chameleon = 1, - /obj/item/clothing/head/softcap/chameleon = 1, + /obj/item/clothing/head/chameleon = 1, /obj/item/clothing/suit/chameleon = 1, /obj/item/clothing/shoes/chameleon = 1, /obj/item/storage/backpack/chameleon = 1, diff --git a/code/game/objects/items/weapons/storage/wallets.dm b/code/game/objects/items/weapons/storage/wallets.dm index c87098bcda2..79990e8fa09 100644 --- a/code/game/objects/items/weapons/storage/wallets.dm +++ b/code/game/objects/items/weapons/storage/wallets.dm @@ -35,13 +35,18 @@ /obj/item/stamp, /obj/item/device/paicard, /obj/item/device/encryptionkey, - /obj/item/fluff) + /obj/item/fluff, + /obj/item/storage/business_card_holder, + /obj/item/clothing/head/bandana, + /obj/item/sample + ) slot_flags = SLOT_ID var/obj/item/card/id/front_id = null var/flipped = null var/flippable = 1 var/wear_over_suit = 0 + var/base_name = "" /obj/item/storage/wallet/remove_from_storage(obj/item/W as obj, atom/new_location) @@ -49,7 +54,7 @@ if(.) if(W == front_id) front_id = null - name = initial(name) + name = base_name update_icon() /obj/item/storage/wallet/handle_item_insertion(obj/item/W as obj, prevent_warning = 0) @@ -57,6 +62,7 @@ if(.) if(!front_id && istype(W, /obj/item/card/id)) front_id = W + base_name = name name = "[name] ([front_id])" update_icon() diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index a81b454672f..bc1b5631f4c 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -10,7 +10,7 @@ slot_flags = SLOT_BELT force = 5 sharp = 0 - edge = 0 + edge = FALSE throwforce = 7 w_class = ITEMSIZE_NORMAL drop_sound = 'sound/items/drop/metalweapon.ogg' diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm index 242a5a4770e..6fafaa70a54 100644 --- a/code/game/objects/items/weapons/surgery_tools.dm +++ b/code/game/objects/items/weapons/surgery_tools.dm @@ -88,7 +88,7 @@ flags = CONDUCT force = 10.0 sharp = 1 - edge = 1 + edge = TRUE w_class = ITEMSIZE_TINY slot_flags = SLOT_EARS throwforce = 5.0 @@ -148,7 +148,7 @@ matter = list(DEFAULT_WALL_MATERIAL = 20000, MATERIAL_GLASS = 10000) attack_verb = list("attacked", "slashed", "sawed", "cut") sharp = 1 - edge = 1 + edge = TRUE drop_sound = 'sound/items/drop/accessory.ogg' pickup_sound = 'sound/items/pickup/accessory.ogg' diff --git a/code/game/objects/items/weapons/traps.dm b/code/game/objects/items/weapons/traps.dm index f23f512003a..cecf65ce47c 100644 --- a/code/game/objects/items/weapons/traps.dm +++ b/code/game/objects/items/weapons/traps.dm @@ -227,6 +227,7 @@ AM.forceMove(loc) captured = WEAKREF(L) buckle(L) + layer = L.layer + 0.1 playsound(src, 'sound/weapons/beartrap_shut.ogg', 100, 1) deployed = FALSE src.shake_animation() @@ -368,6 +369,7 @@ shake_animation() update_icon() release_time = world.time + layer = initial(layer) /obj/item/trap/animal/attackby(obj/item/W, mob/user) if(istype(W, /obj/item/grab)) @@ -585,7 +587,7 @@ return user.visible_message("[user] begins [anchored ? "un" : "" ]securing \the [src]!", - "You beign [anchored ? "un" : "" ]securing \the [src]!") + "You begin [anchored ? "un" : "" ]securing \the [src]!") playsound(src.loc, W.usesound, 50, 1) if(do_after(user, 30/W.toolspeed, act_target = src)) diff --git a/code/game/objects/items/weapons/vaurca_items.dm b/code/game/objects/items/weapons/vaurca_items.dm index 0515fa3bd8a..c9bb8211998 100644 --- a/code/game/objects/items/weapons/vaurca_items.dm +++ b/code/game/objects/items/weapons/vaurca_items.dm @@ -90,7 +90,7 @@ flags = CONDUCT | NOBLOODY attack_verb = list("stabbed", "chopped", "sliced", "cleaved", "slashed", "cut") sharp = 1 - edge = 1 + edge = TRUE contained_sprite = 1 @@ -294,7 +294,7 @@ species_restricted = list(BODYTYPE_VAURCA) armor = list( melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_RESISTANT, + bullet = ARMOR_BALLISTIC_MEDIUM, laser = ARMOR_LASER_MAJOR, bomb = ARMOR_BOMB_PADDED, bio = ARMOR_BIO_SHIELDED, @@ -311,7 +311,7 @@ species_restricted = list(BODYTYPE_VAURCA) armor = list( melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_RESISTANT, + bullet = ARMOR_BALLISTIC_MEDIUM, laser = ARMOR_LASER_MAJOR, bomb = ARMOR_BOMB_PADDED, bio = ARMOR_BIO_SHIELDED, @@ -360,7 +360,7 @@ flags = CONDUCT | NOBLOODY attack_verb = list("stabbed", "chopped", "sliced", "cleaved", "slashed", "cut") sharp = 1 - edge = 1 + edge = TRUE contained_sprite = 1 base_reflectchance = 40 base_block_chance = 60 diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index 387e00b723c..050f469e41d 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -120,7 +120,7 @@ throwforce = 5 w_class = ITEMSIZE_LARGE sharp = 1 - edge = 1 + edge = TRUE attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") hitsound = 'sound/weapons/bladeslice.ogg' contained_sprite = TRUE @@ -128,24 +128,6 @@ pickup_sound = /decl/sound_category/sword_pickup_sound equip_sound = /decl/sound_category/sword_equip_sound -/obj/item/sord - name = "\improper SORD" - desc = "This thing is so unspeakably shitty you are having a hard time even holding it." - icon = 'icons/obj/sword.dmi' - icon_state = "sord" - item_state = "sord" - slot_flags = SLOT_BELT - force = 2 - throwforce = 1 - sharp = 1 - edge = 1 - w_class = ITEMSIZE_NORMAL - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - hitsound = 'sound/weapons/bladeslice.ogg' - contained_sprite = TRUE - drop_sound = 'sound/items/drop/card.ogg' - pickup_sound = 'sound/items/pickup/card.ogg' - /obj/item/banhammer desc = "banhammer" name = "banhammer" diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 9b7a8d06825..52c922a963f 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -11,7 +11,7 @@ var/throwforce = 1 var/list/attack_verb //Used in attackby() to say how something was attacked "[x] has been [z.attack_verb] by [y] with [z]" var/sharp = 0 // whether this object cuts - var/edge = 0 // whether this object is more likely to dismember + var/edge = FALSE // whether this object is more likely to dismember var/in_use = 0 // If we have a user using us, this will be set on. We will check if the user has stopped using us, and thus stop updating and LAGGING EVERYTHING! var/damtype = BRUTE var/force = 0 diff --git a/code/game/objects/random/random.dm b/code/game/objects/random/random.dm index 811f88e72bf..0d65db0ab38 100644 --- a/code/game/objects/random/random.dm +++ b/code/game/objects/random/random.dm @@ -960,11 +960,11 @@ /obj/item/clothing/gloves/chameleon = 1, /obj/item/clothing/gloves/black = 10, - /obj/item/clothing/head/softcap/chameleon = 0.5, + /obj/item/clothing/head/chameleon = 0.5, /obj/item/clothing/head/softcap = 5, /obj/item/clothing/mask/chameleon = 1, - /obj/item/clothing/mask/gas/ = 10, + /obj/item/clothing/mask/gas = 10, /obj/item/clothing/shoes/chameleon = 0.5, /obj/item/clothing/shoes/black = 5, @@ -979,7 +979,7 @@ /obj/item/gun/bang/deagle = 0.1, /obj/item/storage/backpack/chameleon = 1, - /obj/item/storage/backpack/ = 10, + /obj/item/storage/backpack = 10, /obj/item/clothing/glasses/chameleon = 1 diff --git a/code/game/objects/structures/banner.dm b/code/game/objects/structures/banner.dm index caffef3fcfc..5b7b5861a6d 100644 --- a/code/game/objects/structures/banner.dm +++ b/code/game/objects/structures/banner.dm @@ -121,4 +121,11 @@ name = "new gibson banner" desc = "A banner depicting the flag of New Gibson." icon_state = "newgibson_down" - icon_up = "newgibson_up" \ No newline at end of file + icon_up = "newgibson_up" + +/obj/structure/banner/scc + name = "Stellar Corporate Conglomerate banner" + desc = "A deep blue banner adorned with the logo of the Stellar Corporate Conglomerate." + desc_fluff = "The Stellar Corporate Conglomerate, also known as Chainlink, is a joint alliance between the NanoTrasen Corporation, Hephaestus Industries, Idris Incorporated, Zeng-Hu Pharmaceuticals and Zavodskoi Interstellar to exercise an undisputed economic dominance over the Orion Spur." + icon_state = "scc_banner_down" + icon_up = "scc_banner_up" \ No newline at end of file diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index e9e9bd2e142..9258989753d 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -155,9 +155,12 @@ if(linked_teleporter) if(linked_teleporter.last_use + 600 > world.time) return + var/did_teleport = FALSE for(var/mob/M in contents) + did_teleport = TRUE linked_teleporter.do_teleport(M) - linked_teleporter.last_use = world.time + if(did_teleport) + linked_teleporter.last_use = world.time playsound(get_turf(src), close_sound, 25, 0, -3) density = initial(density) diff --git a/code/game/objects/structures/crates_lockers/closets/l3closet.dm b/code/game/objects/structures/crates_lockers/closets/l3closet.dm index 34e28887995..fc684bfda48 100644 --- a/code/game/objects/structures/crates_lockers/closets/l3closet.dm +++ b/code/game/objects/structures/crates_lockers/closets/l3closet.dm @@ -11,8 +11,9 @@ icon_opened = "bio_generalopen" /obj/structure/closet/l3closet/general/fill() - new /obj/item/clothing/suit/bio_suit/general( src ) - new /obj/item/clothing/head/bio_hood/general( src ) + new /obj/item/clothing/suit/bio_suit/general(src) + new /obj/item/clothing/head/bio_hood/general(src) + new /obj/item/clothing/mask/gas/half(src) /obj/structure/closet/l3closet/virology @@ -21,9 +22,9 @@ icon_opened = "bio_virologyopen" /obj/structure/closet/l3closet/virology/fill() - new /obj/item/clothing/suit/bio_suit/virology( src ) - new /obj/item/clothing/head/bio_hood/virology( src ) - new /obj/item/clothing/mask/breath(src) + new /obj/item/clothing/suit/bio_suit/virology(src) + new /obj/item/clothing/head/bio_hood/virology(src) + new /obj/item/clothing/mask/gas/half(src) new /obj/item/tank/oxygen(src) @@ -33,8 +34,9 @@ icon_opened = "bio_securityopen" /obj/structure/closet/l3closet/security/fill() - new /obj/item/clothing/suit/bio_suit/security( src ) - new /obj/item/clothing/head/bio_hood/security( src ) + new /obj/item/clothing/suit/bio_suit/security(src) + new /obj/item/clothing/head/bio_hood/security(src) + new /obj/item/clothing/mask/gas/half(src) /obj/structure/closet/l3closet/janitor @@ -43,8 +45,8 @@ icon_opened = "bio_janitoropen" /obj/structure/closet/l3closet/janitor/fill() - new /obj/item/clothing/suit/bio_suit/janitor( src ) - new /obj/item/clothing/head/bio_hood/janitor( src ) + new /obj/item/clothing/suit/bio_suit/janitor(src) + new /obj/item/clothing/head/bio_hood/janitor(src) /obj/structure/closet/l3closet/scientist @@ -53,5 +55,6 @@ icon_opened = "bio_scientistopen" /obj/structure/closet/l3closet/scientist/fill() - new /obj/item/clothing/suit/bio_suit/scientist( src ) - new /obj/item/clothing/head/bio_hood/scientist( src ) + new /obj/item/clothing/suit/bio_suit/scientist(src) + new /obj/item/clothing/head/bio_hood/scientist(src) + new /obj/item/clothing/mask/gas/half(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm index d01ccde3c0b..f417066ffed 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -31,6 +31,7 @@ new /obj/item/storage/toolbox/mechanical(src) new /obj/item/clothing/suit/storage/hazardvest(src) new /obj/item/clothing/mask/gas(src) + new /obj/item/clothing/mask/gas/half(src) new /obj/item/device/multitool(src) new /obj/item/device/flash(src) new /obj/item/taperoll/engineering(src) @@ -129,6 +130,7 @@ new /obj/item/device/radio/headset/headset_eng/alt(src) new /obj/item/clothing/suit/storage/hazardvest(src) new /obj/item/clothing/mask/gas(src) + new /obj/item/clothing/mask/gas/half(src) new /obj/item/taperoll/engineering(src) new /obj/item/clothing/accessory/storage/overalls/engineer(src) @@ -159,6 +161,7 @@ new /obj/item/device/radio/headset/headset_eng/alt(src) new /obj/item/clothing/suit/storage/hazardvest/blue/atmos(src) new /obj/item/clothing/mask/gas(src) + new /obj/item/clothing/mask/gas/half(src) new /obj/item/taperoll/engineering(src) new /obj/item/clothing/accessory/storage/overalls/engineer(src) new /obj/item/rfd/piping(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm index 7d5699806c2..7a120cbd810 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm @@ -54,6 +54,7 @@ new /obj/item/wirecutters/clippers(src) new /obj/item/reagent_containers/spray/plantbgone(src) new /obj/item/clothing/mask/gas/alt(src) + new /obj/item/clothing/mask/gas/half(src) new /obj/item/watertank(src) new /obj/item/storage/belt/hydro(src) new /obj/item/clothing/gloves/botanic_leather(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm index 37b0b48fb88..a447e5fe03f 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm @@ -120,8 +120,8 @@ new /obj/item/device/radio(src) new /obj/item/roller(src) new /obj/item/crowbar/red(src) - - + new /obj/item/clothing/mask/gas/alt(src) + new /obj/item/clothing/mask/gas/half(src) /obj/structure/closet/secure_closet/CMO name = "chief medical officer's locker" @@ -217,6 +217,8 @@ new /obj/item/storage/box/syringes(src) new /obj/item/storage/box/beakers(src) new /obj/item/storage/box/beakers(src) + new /obj/item/storage/bag/chemistry(src) + new /obj/item/storage/bag/chemistry(src) /obj/structure/closet/secure_closet/medical_wall name = "first aid closet" diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index 3d9e871bf11..9e823c59d85 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -136,7 +136,7 @@ new /obj/item/clothing/head/beret/security/hos/corp(src) new /obj/item/clothing/head/hos/corp(src) new /obj/item/clothing/head/helmet/hos(src) - new /obj/item/clothing/suit/security/hos(src) + new /obj/item/clothing/suit/storage/security/hos(src) new /obj/item/clothing/accessory/badge/hos(src) new /obj/item/clothing/gloves/black_leather(src) new /obj/item/clothing/suit/storage/toggle/armor/hos(src) @@ -190,7 +190,7 @@ new /obj/item/clothing/head/beret/security/corp(src) new /obj/item/clothing/head/hos/corp(src) new /obj/item/clothing/head/helmet/hos(src) - new /obj/item/clothing/suit/security/hos(src) + new /obj/item/clothing/suit/storage/security/hos(src) //Tools new /obj/item/clothing/glasses/sunglasses/sechud/aviator(src) new /obj/item/device/radio/headset/heads/hos(src) @@ -236,7 +236,7 @@ new /obj/item/clothing/head/beret/security/corp(src) new /obj/item/clothing/head/warden/corp(src) new /obj/item/clothing/head/helmet/security(src) - new /obj/item/clothing/suit/security/warden(src) + new /obj/item/clothing/suit/storage/security/warden(src) new /obj/item/clothing/accessory/badge/warden(src) new /obj/item/clothing/gloves/black_leather(src) //Tools @@ -323,9 +323,10 @@ new /obj/item/clothing/head/beret/security/corp(src) new /obj/item/clothing/head/softcap/security/corp(src) new /obj/item/clothing/head/helmet/security(src) - new /obj/item/clothing/suit/security/officer(src) + new /obj/item/clothing/suit/storage/security/officer(src) new /obj/item/clothing/accessory/badge/officer(src) new /obj/item/clothing/mask/gas/alt(src) + new /obj/item/clothing/mask/gas/half(src) //Tools new /obj/item/device/radio/headset/headset_sec(src) new /obj/item/device/radio/headset/headset_sec/alt(src) @@ -369,36 +370,8 @@ new /obj/item/device/encryptionkey/headset_med(src) -/obj/structure/closet/secure_closet/detective - name = "detective's locker" - req_access = list(access_detective) - icon_state = "sec1" - icon_closed = "sec" - icon_locked = "sec1" - icon_opened = "secopen" - icon_broken = "secbroken" - icon_off = "secoff" - -/obj/structure/closet/secure_closet/detective/fill() - //Appearance - new /obj/item/clothing/suit/storage/det_jacket(src) - new /obj/item/clothing/under/det(src) - new /obj/item/clothing/under/det/black(src) - new /obj/item/clothing/under/det/classic(src) - new /obj/item/clothing/accessory/badge/dia(src) - new /obj/item/clothing/gloves/black(src) - new /obj/item/clothing/shoes/brown(src) - //Tools - new /obj/item/device/radio/headset/headset_sec(src) - new /obj/item/device/radio/headset/headset_sec/alt(src) - new /obj/item/clothing/suit/armor/carrier/generic(src) - new /obj/item/gun/energy/disruptorpistol/miniature/security(src) - new /obj/item/taperoll/police(src) - //Belts - new /obj/item/clothing/accessory/holster/waist(src) - -/obj/structure/closet/secure_closet/csi - name = "forensic technician's locker" +/obj/structure/closet/secure_closet/investigator + name = "investigator's locker" req_access = list(access_forensics_lockers) icon_state = "sec1" icon_closed = "sec" @@ -407,24 +380,28 @@ icon_broken = "secbroken" icon_off = "secoff" -/obj/structure/closet/secure_closet/csi/fill() +/obj/structure/closet/secure_closet/investigator/fill() //Appearance - new /obj/item/clothing/gloves/black(src) - new /obj/item/clothing/suit/storage/toggle/forensics(src) - new /obj/item/clothing/suit/armor/carrier/generic(src) - new /obj/item/clothing/under/det/forensics(src) + new /obj/item/clothing/suit/storage/det_jacket(src) + new /obj/item/clothing/under/det(src) + new /obj/item/clothing/suit/storage/toggle/labcoat(src) new /obj/item/clothing/under/det/black(src) new /obj/item/clothing/under/det/classic(src) new /obj/item/clothing/accessory/badge/dia(src) + new /obj/item/clothing/suit/storage/toggle/forensics(src) new /obj/item/clothing/gloves/black(src) + new /obj/item/clothing/shoes/brown(src) new /obj/item/clothing/shoes/laceup(src) - new /obj/item/gun/energy/disruptorpistol/miniature/security(src) //Tools new /obj/item/device/radio/headset/headset_sec(src) new /obj/item/device/radio/headset/headset_sec/alt(src) - new /obj/item/storage/box/evidence(src) - new /obj/item/device/flash(src) + new /obj/item/clothing/suit/armor/carrier/generic(src) + new /obj/item/gun/energy/disruptorpistol/miniature/security(src) new /obj/item/taperoll/police(src) + new /obj/item/device/flash(src) + new /obj/item/device/laser_pointer/blue(src) + //Belts + new /obj/item/clothing/accessory/holster/waist(src) /obj/structure/closet/secure_closet/injection name = "lethal injections locker" diff --git a/code/game/objects/structures/crates_lockers/closets/statue.dm b/code/game/objects/structures/crates_lockers/closets/statue.dm index 7092445ed3d..c2ed18f3288 100644 --- a/code/game/objects/structures/crates_lockers/closets/statue.dm +++ b/code/game/objects/structures/crates_lockers/closets/statue.dm @@ -75,6 +75,7 @@ /obj/structure/closet/statue/proc/create_icon(var/mob/living/L) appearance = L + appearance_flags |= KEEP_TOGETHER dir = L.dir color = list( 0.30, 0.3, 0.25, diff --git a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm index 7671856ac9c..3b9f1c6f209 100644 --- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm @@ -44,6 +44,7 @@ new /obj/item/clothing/mask/gas/alt(src) new /obj/item/tank/emergency_oxygen/engi(src) new /obj/item/clothing/mask/gas/alt(src) + new /obj/item/clothing/mask/gas/half(src) new /obj/item/device/oxycandle(src) new /obj/item/device/oxycandle(src) new /obj/item/airbubble(src) @@ -61,6 +62,8 @@ new /obj/item/storage/toolbox/emergency(src) new /obj/item/tank/emergency_oxygen/engi(src) new /obj/item/clothing/mask/breath(src) + new /obj/item/clothing/mask/gas/alt(src) + new /obj/item/clothing/mask/gas/half(src) new /obj/item/storage/firstaid/o2(src) new /obj/item/clothing/suit/space/emergency(src) new /obj/item/clothing/suit/space/emergency(src) diff --git a/code/game/objects/structures/crates_lockers/crates/gear_loadout.dm b/code/game/objects/structures/crates_lockers/crates/gear_loadout.dm index d8a128de1a2..76ae7d28a3d 100644 --- a/code/game/objects/structures/crates_lockers/crates/gear_loadout.dm +++ b/code/game/objects/structures/crates_lockers/crates/gear_loadout.dm @@ -344,118 +344,124 @@ new /obj/item/ammo_magazine/mc9mm(src) //ninja stuff +/obj/structure/closet/crate/secure/gear_loadout/ninja + var/associated_hardsuit = /obj/item/rig/light/ninja -/obj/structure/closet/crate/secure/gear_loadout/ninja_sol/fill() - new /obj/item/rig/military/ninja(src) +/obj/structure/closet/crate/secure/gear_loadout/ninja/fill() + new associated_hardsuit(src) + +/obj/structure/closet/crate/secure/gear_loadout/ninja/stealth/fill() + ..() + new /obj/item/gun/projectile/pistol(src) + new /obj/item/silencer(src) + new /obj/item/ammo_magazine/mc9mm(src) + new /obj/item/ammo_magazine/mc9mm(src) + +/obj/structure/closet/crate/secure/gear_loadout/ninja/sol + associated_hardsuit = /obj/item/rig/military/ninja + +/obj/structure/closet/crate/secure/gear_loadout/ninja/sol/fill() + ..() new /obj/item/clothing/under/rank/fatigues/marine(src) new /obj/item/clothing/accessory/holster/armpit/brown(src) - new /obj/item/gun/projectile/automatic/rifle/sol(src) - new /obj/item/ammo_magazine/c762/sol(src) - new /obj/item/ammo_magazine/c762/sol(src) - new /obj/item/ammo_magazine/c762/sol(src) - new /obj/item/ammo_magazine/c762/sol(src) new /obj/item/gun/projectile/pistol/sol(src) new /obj/item/ammo_magazine/mc9mm(src) new /obj/item/ammo_magazine/mc9mm(src) -/obj/structure/closet/crate/secure/gear_loadout/ninja_gunslinger/fill() - new /obj/item/rig/gunslinger/ninja(src) - new /obj/item/clothing/accessory/holster/armpit/brown(src) - new /obj/item/gun/projectile/gauss(src) - new /obj/item/ammo_magazine/gauss(src) - new /obj/item/ammo_magazine/gauss(src) - new /obj/item/ammo_magazine/gauss(src) - new /obj/item/ammo_magazine/gauss(src) - new /obj/item/ammo_magazine/gauss/emp(src) - new /obj/item/gun/projectile/colt(src) - new /obj/item/ammo_magazine/c45m(src) - new /obj/item/ammo_magazine/c45m(src) +/obj/structure/closet/crate/secure/gear_loadout/ninja/gunslinger + associated_hardsuit = /obj/item/rig/gunslinger/ninja -/obj/structure/closet/crate/secure/gear_loadout/ninja_breacher/fill() - new /obj/item/rig/unathi/fancy/ninja(src) - new /obj/item/melee/energy/sword/hegemony(src) - new /obj/item/shield/energy/hegemony(src) +/obj/structure/closet/crate/secure/gear_loadout/ninja/gunslinger/fill() + ..() + new /obj/item/clothing/accessory/holster/armpit/brown(src) + new /obj/item/gun/projectile/revolver/detective(src) + new /obj/item/ammo_magazine/c38(src) + new /obj/item/ammo_magazine/c38(src) + +/obj/structure/closet/crate/secure/gear_loadout/ninja/breacher + associated_hardsuit = /obj/item/rig/unathi/fancy/ninja + +/obj/structure/closet/crate/secure/gear_loadout/ninja/breacher/fill() + ..() new /obj/item/gun/energy/pistol/hegemony(src) -/obj/structure/closet/crate/secure/gear_loadout/ninja_tesla/fill() - new /obj/item/rig/tesla/ninja(src) +/obj/structure/closet/crate/secure/gear_loadout/ninja/tesla + associated_hardsuit = /obj/item/rig/tesla/ninja + +/obj/structure/closet/crate/secure/gear_loadout/ninja/tesla/fill() + ..() + new /obj/item/device/augment_implanter/advanced_tesla(src) new /obj/item/clothing/accessory/holster/armpit/brown(src) - new /obj/item/gun/projectile/automatic/rifle/adhomian(src) - new /obj/item/ammo_magazine/boltaction(src) - new /obj/item/ammo_magazine/boltaction(src) - new /obj/item/ammo_magazine/boltaction(src) - new /obj/item/ammo_magazine/boltaction(src) - new /obj/item/ammo_magazine/boltaction(src) new /obj/item/gun/projectile/pistol/adhomai(src) new /obj/item/ammo_magazine/mc9mm(src) new /obj/item/ammo_magazine/mc9mm(src) - new /obj/item/device/augment_implanter/advanced_tesla(src) -/obj/structure/closet/crate/secure/gear_loadout/ninja_strike/fill() - new /obj/item/rig/strike/ninja(src) +/obj/structure/closet/crate/secure/gear_loadout/ninja/strike + associated_hardsuit = /obj/item/rig/strike/ninja + +/obj/structure/closet/crate/secure/gear_loadout/ninja/strike/fill() + ..() new /obj/item/clothing/accessory/holster/armpit/brown(src) - new /obj/item/gun/energy/rifle(src) new /obj/item/gun/projectile/automatic/x9(src) new /obj/item/ammo_magazine/c45x(src) new /obj/item/ammo_magazine/c45x(src) -/obj/structure/closet/crate/secure/gear_loadout/ninja_jinxiang/fill() - new /obj/item/rig/jinxiang/ninja(src) +/obj/structure/closet/crate/secure/gear_loadout/ninja/jinxiang + associated_hardsuit = /obj/item/rig/jinxiang/ninja + +/obj/structure/closet/crate/secure/gear_loadout/ninja/jinxiang/fill() + ..() new /obj/item/melee/energy/sword/pirate(src) new /obj/item/shield/energy/dominia(src) new /obj/item/clothing/accessory/holster/armpit/brown(src) new /obj/item/gun/projectile/tanto(src) new /obj/item/ammo_magazine/mc10mm(src) - new /obj/item/ammo_magazine/mc10mm(src) -/obj/structure/closet/crate/secure/gear_loadout/ninja_elyra/fill() - new /obj/item/rig/elyran/ninja(src) +/obj/structure/closet/crate/secure/gear_loadout/ninja/elyra + associated_hardsuit = /obj/item/rig/elyran/ninja + +/obj/structure/closet/crate/secure/gear_loadout/ninja/elyra/fill() + ..() new /obj/item/gun/projectile/plasma(src) new /obj/item/ammo_magazine/plasma(src) new /obj/item/ammo_magazine/plasma(src) - new /obj/item/ammo_magazine/plasma(src) - new /obj/item/clothing/accessory/holster/armpit/brown(src) - new /obj/item/gun/projectile/pistol(src) - new /obj/item/ammo_magazine/mc9mm(src) - new /obj/item/ammo_magazine/mc9mm(src) -/obj/structure/closet/crate/secure/gear_loadout/ninja_hacker/fill() - new /obj/item/rig/light/hacker/ninja(src) +/obj/structure/closet/crate/secure/gear_loadout/ninja/hacker/fill() + associated_hardsuit = /obj/item/rig/light/hacker/ninja + +/obj/structure/closet/crate/secure/gear_loadout/ninja/hacker/fill() + ..() new /obj/item/gun/energy/xray(src) new /obj/item/clothing/accessory/holster/armpit/brown(src) new /obj/item/gun/energy/crossbow/largecrossbow(src) -/obj/structure/closet/crate/secure/gear_loadout/ninja_techno/fill() - new /obj/item/rig/light/offworlder/techno/ninja(src) - new /obj/item/gun/projectile/automatic/rifle/sts35(src) - new /obj/item/ammo_magazine/c762(src) - new /obj/item/ammo_magazine/c762(src) - new /obj/item/ammo_magazine/c762(src) - new /obj/item/ammo_magazine/c762(src) +/obj/structure/closet/crate/secure/gear_loadout/ninja/techno + associated_hardsuit = /obj/item/rig/light/offworlder/techno/ninja + +/obj/structure/closet/crate/secure/gear_loadout/ninja/techno/fill() + ..() new /obj/item/clothing/accessory/holster/armpit/brown(src) new /obj/item/gun/projectile/pistol(src) new /obj/item/ammo_magazine/mc9mm(src) new /obj/item/ammo_magazine/mc9mm(src) -/obj/structure/closet/crate/secure/gear_loadout/ninja_crimson/fill() - new /obj/item/rig/merc/ninja(src) - new /obj/item/gun/projectile/automatic/c20r(src) - new /obj/item/ammo_magazine/a10mm(src) - new /obj/item/ammo_magazine/a10mm(src) - new /obj/item/ammo_magazine/a10mm(src) - new /obj/item/ammo_magazine/a10mm(src) +/obj/structure/closet/crate/secure/gear_loadout/ninja/crimson + associated_hardsuit = /obj/item/rig/merc/ninja + +/obj/structure/closet/crate/secure/gear_loadout/ninja/crimson/fill() + ..() new /obj/item/clothing/accessory/holster/armpit/brown(src) new /obj/item/gun/projectile/revolver(src) new /obj/item/ammo_magazine/a357(src) new /obj/item/ammo_magazine/a357(src) -/obj/structure/closet/crate/secure/gear_loadout/ninja_rhino/fill() - new /obj/item/rig/merc/distress/ninja(src) +/obj/structure/closet/crate/secure/gear_loadout/ninja/rhino + associated_hardsuit = /obj/item/rig/merc/distress/ninja + +/obj/structure/closet/crate/secure/gear_loadout/ninja/rhino/fill() + ..() new /obj/item/gun/projectile/automatic/rifle/sts35(src) new /obj/item/ammo_magazine/c762(src) - new /obj/item/ammo_magazine/c762(src) - new /obj/item/ammo_magazine/c762(src) - new /obj/item/ammo_magazine/c762(src) new /obj/item/clothing/accessory/holster/armpit/brown(src) new /obj/item/gun/projectile/pistol(src) new /obj/item/ammo_magazine/mc9mm(src) diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index 97936455986..9bc9c4cb105 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -7,7 +7,6 @@ density = 0 anchored = 1 var/shattered = 0 - var/list/ui_users = list() /obj/structure/mirror/attack_hand(mob/user as mob) if(shattered) @@ -19,12 +18,8 @@ to_chat(user, "Your reflection appears distorted on the surface of \the [src].") if(ishuman(user)) - var/datum/nano_module/appearance_changer/AC = ui_users[user] - if(!AC) - AC = new(src, user) - AC.name = "SalonPro Nano-Mirror™" - ui_users[user] = AC - AC.ui_interact(user) + var/mob/living/carbon/human/H = user + H.change_appearance(APPEARANCE_HAIR, H, FALSE, ui_state = default_state, state_object = src) /obj/structure/mirror/proc/shatter() if(shattered) return @@ -69,19 +64,11 @@ user.visible_message("[user] hits [src] and bounces off!") return 1 -/obj/structure/mirror/Destroy() - for(var/user in ui_users) - var/datum/nano_module/appearance_changer/AC = ui_users[user] - qdel(AC) - ui_users.Cut() - return ..() - /obj/item/mirror name = "mirror" desc = "A SalonPro Nano-Mirror(TM) brand mirror! Now a portable version." icon = 'icons/obj/cosmetics.dmi' icon_state = "mirror" - var/list/ui_users = list() /obj/item/mirror/attack_self(mob/user as mob) if(user.mind) @@ -90,17 +77,5 @@ to_chat(user, "Your reflection appears distorted on the surface of \the [src].") if(ishuman(user)) - var/datum/nano_module/appearance_changer/AC = ui_users[user] - if(!AC) - AC = new(src, user) - AC.name = "SalonPro Nano-Mirror™" - AC.flags = APPEARANCE_HAIR - ui_users[user] = AC - AC.ui_interact(user) - -/obj/item/mirror/Destroy() - for(var/user in ui_users) - var/datum/nano_module/appearance_changer/AC = ui_users[user] - qdel(AC) - ui_users.Cut() - return ..() + var/mob/living/carbon/human/H = user + H.change_appearance(APPEARANCE_HAIR, H, FALSE, ui_state = default_state, state_object = src) \ No newline at end of file diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm index 1a32fa34053..22c20d70d44 100644 --- a/code/game/objects/structures/signs.dm +++ b/code/game/objects/structures/signs.dm @@ -324,6 +324,7 @@ flag_path = "solgov" /obj/item/flag/sol/l + name = "Large Sol Alliance flag" flag_size = 1 /obj/structure/sign/flag/dominia @@ -343,6 +344,7 @@ flag_path = "dominia" /obj/item/flag/dominia/l + name = "Large Dominian Empire flag" flag_size = 1 /obj/structure/sign/flag/elyra @@ -362,6 +364,7 @@ flag_path = "elyra" /obj/item/flag/elyra/l + name = "Large Elyran flag" flag_size = 1 /obj/structure/sign/flag/hegemony @@ -381,6 +384,7 @@ flag_path = "izweski" /obj/item/flag/hegemony/l + name = "Large Hegemony flag" flag_size = 1 /obj/structure/sign/flag/jargon @@ -400,6 +404,7 @@ flag_path = "jargon" /obj/item/flag/jargon/l + name = "Large Jargon Federation flag" flag_size = 1 /obj/structure/sign/flag/nanotrasen @@ -419,6 +424,7 @@ flag_path = "nanotrasen" /obj/item/flag/nanotrasen/l + name = "Large NanoTrasen Corporation flag" flag_size = 1 /obj/structure/sign/flag/eridani @@ -438,6 +444,7 @@ flag_path = "eridani" /obj/item/flag/eridani/l + name = "Large Eridani Corporate Federation flag" flag_size = 1 /obj/structure/sign/flag/coalition @@ -457,6 +464,7 @@ flag_path = "coalition" /obj/item/flag/coalition/l + name = "Large Coalition of Colonies flag" flag_size = 1 /obj/structure/sign/flag/vaurca @@ -476,6 +484,7 @@ flag_path = "sedantis" /obj/item/flag/vaurca/l + name = "Large Sedantis flag" flag_size = 1 /obj/structure/sign/flag/america @@ -495,6 +504,7 @@ flag_path = "oldglory" /obj/item/flag/america/l + name = "Large Old World flag" flag_size = 1 /obj/item/flag/dpra @@ -507,6 +517,7 @@ nation they were fighting for the Democratic People's Republic of Adhomai." /obj/item/flag/dpra/l + name = "Large Democratic People's Republic of Adhomai flag" flag_size = 1 /obj/structure/sign/flag/dpra @@ -536,6 +547,7 @@ /obj/item/flag/pra/l flag_size = 1 + name = "Large People's Republic of Adhomai flag" /obj/structure/sign/flag/pra name = "People's Republic of Adhomai flag" @@ -565,6 +577,7 @@ /obj/item/flag/nka/l flag_size = 1 + name = "Large New Kingdom of Adhomai flag" /obj/structure/sign/flag/nka name = "New Kingdom of Adhomai flag" @@ -588,6 +601,7 @@ flag_path = "heph" /obj/item/flag/heph/l + name = "Large Hephaestus Industries flag" flag_size = 1 /obj/structure/sign/flag/heph @@ -607,6 +621,7 @@ flag_path = "zenghu" /obj/item/flag/zenghu/l + name = "Large Zeng-Hu Pharmaceuticals flag" flag_size = 1 /obj/structure/sign/flag/zenghu @@ -645,6 +660,7 @@ flag_path = "zavodskoi" /obj/item/flag/zavodskoi/l + name = "Large Zavodskoi Interstellar flag" flag_size = 1 /obj/structure/sign/flag/idris @@ -664,6 +680,7 @@ flag_path = "idris" /obj/item/flag/idris/l + name = "Large Idris Incorporated flag" flag_size = 1 /obj/structure/sign/flag/trinaryperfection @@ -686,6 +703,7 @@ flag_path = "trinaryperfection" /obj/item/flag/trinaryperfection/l + name = "Large Trinary Perfection flag" flag_size = 1 /obj/item/flag/diona @@ -698,6 +716,65 @@ desc = "A green Dominian standard which represents the dionae within the Empire." icon_state = "diona" +/obj/item/flag/strelitz + name = "House Strelitz standard" + desc = "A red-and-dark standard with a gold trim that represents House Strelitz, one of the great houses of the Empire of Dominia. \ + They are known for their military service and emphasis on personal bravery." + flag_path = "strelitz" + +/obj/structure/sign/flag/strelitz + name = "House Strelitz standard" + desc = "A red-and-dark standard with a gold trim that represents House Strelitz, one of the great houses of the Empire of Dominia. \ + They are known for their military service and emphasis on personal bravery." + icon_state = "strelitz" + +/obj/item/flag/volvalaad + name = "House Volvalaad standard" + desc = "A blue-and-black standard which represents House Volvalaad, one of the great houses of the Empire of Dominia. \ + They are known for their reformist ideals, and scientific prowess." + flag_path = "volvalaad" + +/obj/structure/sign/flag/volvalaad + name = "House Volvalaad standard" + desc = "A blue-and-black standard which represents House Volvalaad, one of the great houses of the Empire of Dominia. \ + They are known for their Habsburgian inbreeding, reformist ideals, and scientific prowess." + icon_state = "volvalaad" + +/obj/item/flag/kazkhz + name = "House Kazkhz standard" + desc = "A red-and-orange standard with a circular chevron which represents House Kazhkz, one of the great houses of the \ + Empire of Dominia. They are known for their conservative nature and aversion to augmentation." + flag_path = "kazkhz" + +/obj/structure/sign/flag/kazkhz + name = "House Kazkhz standard" + desc = "A red-and-orange standard with a circular chevron which represents House Kazhkz, one of the great houses of the \ + Empire of Dominia. They are known for their conservative nature and aversion to augmentation." + icon_state = "kazkhz" + +/obj/item/flag/caladius + name = "House Caladius standard" + desc = "A purple standard which represensts House Caladius, one of the great houses of the Empire of Dominia. They are \ + known for their support of the Dominian clergy as well as the skill of their bureaucrats and economists." + flag_path = "caladius" + +/obj/structure/sign/flag/caladius + name = "House Caladius standard" + desc = "A purple standard which represensts House Caladius, one of the great houses of the Empire of Dominia. They are \ + known for their support of the Dominian clergy as well as the skill of their bureaucrats and economists." + icon_state = "caladius" + +/obj/item/flag/zhao + name = "House Zhao standard" + desc = "A white Dominian standard with a prominent grey circle which represents House Zhao, one of the great houses of \ + known for its naval officers and patronage of the Dominian shipbuilding industry." + flag_path = "zhao" + +/obj/structure/sign/flag/zhao + name = "House Zhao standard" + desc = "A white Dominian standard with a prominent grey circle which represents House Zhao, one of the great houses of \ + known for its naval officers and patronage of the Dominian shipbuilding and naval industries." + icon_state = "zhao" /obj/structure/sign/flag/biesel name = "Republic of Biesel flag" @@ -719,6 +796,80 @@ name = "Large Republic of Biesel flag" flag_size = 1 +/obj/structure/sign/flag/scc + name = "Stellar Corporate Conglomerate flag" + desc = "The colours and logo of the Stellar Corporate Conglomerate." + desc_fluff = "The Stellar Corporate Conglomerate, also known as Chainlink, is a joint alliance between the NanoTrasen Corporation, Hephaestus Industries, Idris Incorporated, Zeng-Hu Pharmaceuticals and Zavodskoi Interstellar to exercise an undisputed economic dominance over the Orion Spur." + icon_state = "scc" + +/obj/structure/sign/flag/scc/left + icon_state = "scc_l" + +/obj/structure/sign/flag/scc/right + icon_state = "scc_r" + +/obj/item/flag/scc + name = "Stellar Corporate Conglomerate flag" + desc = "The flag representing the Stellar Corporate Conglomerate." + desc_fluff = "The Stellar Corporate Conglomerate, also known as Chainlink, is a joint alliance between the NanoTrasen Corporation, Hephaestus Industries, Idris Incorporated, Zeng-Hu Pharmaceuticals and Zavodskoi Interstellar to exercise an undisputed economic dominance over the Orion Spur." + flag_path = "scc" + +/obj/item/flag/scc/l + name = "Large Stellar Corporate Conglomerate flag" + flag_size = 1 + +/obj/item/flag/fisanduh + name = "Confederated States of Fisanduh flag" + desc = "A flag of the fallen Confederated States of Fisanduh." + desc_fluff = "The red-gold-white flag of the Confederated States of Fisanduh and, by extention, the Fisanduh Freedom Front. Due to its origins, possession of such a flag in the Empire outside of Fisanduh itself can carry an extremely harsh punishment if one is an Imperial citizen or \ + subject. This has not stopped it from becoming a symbol of resistance, and reproductions are extremely common in more rebellious areas of the Empire. Even if they are beaten-down and run ragged by war, the spirit of Fisanduh will live forever in the hearts of its people." + flag_path = "fisanduh" + +/obj/structure/sign/flag/fisanduh + name = "Confederated States of Fisanduh flag" + desc = "A flag of the fallen Confederated States of Fisanduh." + desc_fluff = "The red-gold-white flag of the Confederated States of Fisanduh and, by extention, the Fisanduh Freedom Front. Due to its origins, possession of such a flag in the Empire outside of Fisanduh itself can carry an extremely harsh punishment if one is an Imperial citizen or \ + subject. This has not stopped it from becoming a symbol of resistance, and reproductions are extremely common in more rebellious areas of the Empire. Even if they are beaten-down and run ragged by war, the spirit of Fisanduh will live forever in the hearts of its people." + icon_state = "fisanduh" + +/obj/item/flag/fisanduh/l + name = "large Confederated States of Fisanduh flag" + flag_size = 1 + +/obj/structure/sign/flag/fisanduh/left + icon_state = "fisanduh_l" + +/obj/structure/sign/flag/fisanduh/right + icon_state = "fisanduh_r" + +/obj/item/flag/gadpathur + name = "United Planetary Defense Council of Gadpathur flag" + desc = "The black and brown flag of Gadpathur, featuring the planet's commonly-seen sun iconography in the centre. The Gadpathurian flag is a common sight in the Coalition's military, and can be seen everywhere on Gadpathur -- from lighters to ID card to government buildings. \ + It is uncommonly seen outside of the Coalition as a symbol of anti-Solarian sentiment." + desc_fluff = "The Gadpathurian flag is, surprisingly, a variation of the common flag of its hated enemy: the Alliance of Sovereign Solarian Nations. The reason for this is simple: in the immediate aftermath of the planet's orbital bombardment by the Solarian \ + Navy the most common flags available for the various successor states were the ASSN flags still flying over the ruins of government buildings. The black-brown flag of Ashia Patvardhan's Gadpathurian Reunification League that is now Gadpathur's flag was simply one of many of \ + these variant flags before the League's reunification. The black and brown represent the plant itself, while the red-and-gold sun represents that the people of the plant are still alive and burning with a desire to never again fall." + flag_path = "gadpathur" + +/obj/structure/sign/flag/gadpathur + name = "United Planetary Defense Council of Gadpathur flag" + desc = "The black and brown flag of Gadpathur, featuring the planet's commonly-seen sun iconography in the centre. The Gadpathurian flag is a common sight in the Coalition's military, and can be seen everywhere on Gadpathur -- from lighters to ID card to government buildings. \ + It is uncommonly seen outside of the Coalition as a symbol of anti-Solarian sentiment." + desc_fluff = "The Gadpathurian flag is, surprisingly, a variation of the common flag of its hated enemy: the Alliance of Sovereign Solarian Nations. The reason for this is simple: in the immediate aftermath of the planet's orbital bombardment by the Solarian \ + Navy the most common flags available for the various successor states were the ASSN flags still flying over the ruins of government buildings. The black-brown flag of Ashia Patvardhan's Gadpathurian Reunification League that is now Gadpathur's flag was simply one of many of \ + these variant flags before the League's reunification. The black and brown represent the plant itself, while the red-and-gold sun represents that the people of the plant are still alive and burning with a desire to never again fall." + icon_state = "gadpathur" + +/obj/item/flag/gadpathur/l + name = "large United Planetary Defense Council of Gadpathur flag" + flag_size = 1 + +/obj/structure/sign/flag/gadpathur/left + icon_state = "gadpathur_l" + +/obj/structure/sign/flag/gadpathur/right + icon_state = "gadpathur_r" + /obj/item/flag/afterattack(var/atom/A, var/mob/user, var/adjacent, var/clickparams) if (!adjacent) return @@ -765,10 +916,14 @@ P2.pixel_y = 32 P2.name = name P2.desc = desc + P2.desc_info = desc_info + P2.desc_fluff = desc_fluff else P.icon_state = "[flag_path]" P.name = name P.desc = desc + P.desc_info = desc_info + P.desc_fluff = desc_fluff qdel(src) diff --git a/code/game/objects/structures/target_stake.dm b/code/game/objects/structures/target_stake.dm index f9bcd547088..dbfa15da412 100644 --- a/code/game/objects/structures/target_stake.dm +++ b/code/game/objects/structures/target_stake.dm @@ -1,53 +1,62 @@ -// Basically they are for the firing range +// Target stakes for the firing range. /obj/structure/target_stake name = "target stake" desc = "A thin platform with negatively-magnetized wheels." icon = 'icons/obj/target_stake.dmi' icon_state = "target_stake" - density = 1 - w_class = ITEMSIZE_HUGE - flags = CONDUCT - var/obj/item/target/pinned_target // the current pinned target + density = TRUE + w_class = ITEMSIZE_IMMENSE + build_amt = 10 + var/obj/item/target/pinned_target - Move() - ..() - // Move the pinned target along with the stake - if(pinned_target in view(3, src)) - pinned_target.forceMove(loc) +/obj/structure/target_stake/Initialize(mapload) + . = ..() + material = SSmaterials.get_material_by_name(MATERIAL_STEEL) - else // Sanity check: if the pinned target can't be found in immediate view - pinned_target = null - density = 1 - - attackby(obj/item/W as obj, mob/user as mob) - // Putting objects on the stake. Most importantly, targets +/obj/structure/target_stake/attackby(var/obj/item/W, var/mob/user) + if(istype(W, /obj/item/target)) if(pinned_target) - return // get rid of that pinned target first! - - if(istype(W, /obj/item/target)) - density = 0 - W.density = 1 - user.remove_from_mob(W) - W.forceMove(loc) - W.layer = 3.1 - pinned_target = W - to_chat(user, "You slide the target into the stake.") + to_chat(user, SPAN_WARNING("\The [src] already has a target.")) + return + if(user.unEquip(W, FALSE, get_turf(src))) + to_chat(user, SPAN_NOTICE("You slide \the [W] into the stake.")) + set_target(W) return - - attack_hand(mob/user as mob) - // taking pinned targets off! + if(W.iswrench()) if(pinned_target) - density = 1 - pinned_target.density = 0 + to_chat(user, SPAN_WARNING("You cannot dismantle \the [src] while it has a target attached.")) + return + dismantle() + +/obj/structure/target_stake/attack_hand(var/mob/user) + . = ..() + if(pinned_target && ishuman(user)) + var/obj/item/target/T = pinned_target + to_chat(user, SPAN_NOTICE("You take \the [T] out of the stake.")) + set_target(null) + user.put_in_hands(T) + +/obj/structure/target_stake/proc/set_target(var/obj/item/target/T) + if(T) + density = FALSE + T.density = TRUE + T.pixel_x = 0 + T.pixel_y = 0 + T.layer = ABOVE_OBJ_LAYER + moved_event.register(T, src, /atom/movable/proc/move_to_turf) + moved_event.register(src, T, /atom/movable/proc/move_to_turf) + T.stake = src + pinned_target = T + else + density = TRUE + if(pinned_target) + pinned_target.density = FALSE pinned_target.layer = OBJ_LAYER + moved_event.unregister(pinned_target, src) + moved_event.unregister(src, pinned_target) + pinned_target.stake = null + pinned_target = null - pinned_target.forceMove(user.loc) - if(ishuman(user)) - if(!user.get_active_hand()) - user.put_in_hands(pinned_target) - to_chat(user, "You take the target out of the stake.") - else - pinned_target.forceMove(get_turf(user)) - to_chat(user, "You take the target out of the stake.") - - pinned_target = null +/obj/structure/target_stake/Destroy() + set_target(null) + return ..() \ No newline at end of file diff --git a/code/game/objects/structures/therapy.dm b/code/game/objects/structures/therapy.dm index a59d60a4e5a..90a3220cf0b 100644 --- a/code/game/objects/structures/therapy.dm +++ b/code/game/objects/structures/therapy.dm @@ -132,6 +132,7 @@ matter = list(MATERIAL_GLASS = 150, MATERIAL_GOLD = 50) recyclable = TRUE w_class = ITEMSIZE_TINY + flags = NOBLUDGEON var/datum/weakref/thrall = null var/time_counter = 0 var/closed = FALSE @@ -205,7 +206,6 @@ var/thrall_response = alert(H, "Do you believe in hypnosis?", "Willpower", "Yes", "No") if(thrall_response == "Yes") to_chat(H, "... [text] ...") - H.cure_all_traumas(cure_type = CURE_HYPNOSIS) else thrall = null @@ -290,8 +290,7 @@ ticktock = "Tick" to_chat(H, "[ticktock]. . .") sound_to(H, 'sound/effects/singlebeat.ogg') - if(prob(1)) - H.cure_all_traumas(cure_type = CURE_SOLITUDE) + /obj/machinery/chakrapod name = "Crystal Therapy Pod" @@ -635,20 +634,13 @@ break var/obj/item/organ/internal/brain/sponge = H.internal_organs_by_name[BP_BRAIN] - if (!istype(sponge) || !sponge.traumas.len) + if (!istype(sponge)) if(get_dist(user,src) <= 1) to_chat(user, "Error: Subject not recognized. Terminating operation.") playsound(src, 'sound/machines/buzz-two.ogg', 50, 1) visible_message("[connected] buzzes harshly.", "You hear a sharp buzz.") break - for(var/X in sponge.traumas) - var/datum/brain_trauma/trauma = X - if(trauma.cure_type == CURE_CRYSTAL) - if(!trauma.permanent) - qdel(trauma) - electroshock_trauma = 1 - break if(electroshock_trauma) visible_message("[connected] pings cheerfully.", "You hear a ping.") diff --git a/code/game/objects/structures/trash_pile.dm b/code/game/objects/structures/trash_pile.dm index bbafe855c85..8d2c27c6dc0 100644 --- a/code/game/objects/structures/trash_pile.dm +++ b/code/game/objects/structures/trash_pile.dm @@ -155,6 +155,7 @@ /obj/item/clothing/gloves/latex = 2, /obj/item/clothing/head/welding = 2, /obj/item/clothing/mask/gas/alt = 2, + /obj/item/clothing/mask/gas/half = 2, /obj/item/clothing/shoes/galoshes = 2, /obj/item/clothing/under/pants/camo = 2, /obj/item/clothing/under/syndicate/tacticool = 2, diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 0a66c80d5ff..6d1d7d64a4f 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -459,8 +459,6 @@ // Filling/emptying open reagent containers var/obj/item/reagent_containers/RG = O - if (istype(RG, /obj/item/reagent_containers/glass/rag)) - return if (istype(RG) && RG.is_open_container()) var/atype = alert(usr, "Do you want to fill or empty \the [RG] at \the [src]?", "Fill or Empty", "Fill", "Empty", "Cancel") @@ -534,7 +532,7 @@ // Short of a rewrite, this is necessary to stop monkeycubes being washed. else if(istype(O, /obj/item/reagent_containers/food/snacks/monkeycube)) return - else if(istype(O, /obj/item/mop) || istype(O, /obj/item/reagent_containers/glass/rag)) + else if(istype(O, /obj/item/mop)) O.reagents.add_reagent(/decl/reagent/water, 5) to_chat(user, SPAN_NOTICE("You wet \the [O] in \the [src].")) playsound(loc, 'sound/effects/slosh.ogg', 25, 1) diff --git a/code/game/sound.dm b/code/game/sound.dm index 14c7ef8b139..e77352430ae 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -229,8 +229,7 @@ /mob/proc/playsound_simple(source, soundin, volume, use_random_freq = FALSE, frequency = 0, falloff = 0, use_pressure = TRUE, required_preferences = 0, required_asfx_toggles = 0) var/sound/S = playsound_get_sound(soundin, volume, falloff, frequency) - - playsound_to(source ? get_turf(source) : null, S, use_random_freq, use_pressure = use_pressure, required_preferences = required_preferences, required_asfx_toggles = required_asfx_toggles) + return playsound_to(source ? get_turf(source) : null, S, use_random_freq, use_pressure = use_pressure, required_preferences = required_preferences, required_asfx_toggles = required_asfx_toggles) /client/proc/playtitlemusic() if(!SSticker.login_music) diff --git a/code/game/turfs/flooring/flooring_decals.dm b/code/game/turfs/flooring/flooring_decals.dm index 2c27b649634..22ebf9cb461 100644 --- a/code/game/turfs/flooring/flooring_decals.dm +++ b/code/game/turfs/flooring/flooring_decals.dm @@ -26,7 +26,7 @@ qdel(src) -/obj/effect/floor_decal/Initialize(mapload, var/newdir, var/newcolour, bypass = FALSE) +/obj/effect/floor_decal/Initialize(mapload, var/newdir, var/newcolour, bypass = FALSE, var/set_icon_state) if (bypass && !mapload) return ..(mapload) @@ -39,6 +39,9 @@ if (supplied_dir) set_dir(supplied_dir) + if(set_icon_state) + icon_state = set_icon_state + ..() return INITIALIZE_HINT_LATELOAD @@ -618,4 +621,32 @@ icon_state = "white_c2" /obj/effect/floor_decal/sign/srg - icon_state = "white_srg" \ No newline at end of file + icon_state = "white_srg" + +// the big SCC logo +/obj/effect/floor_decal/scc_full + icon = 'icons/turf/flooring/scc_decal_preview.dmi' + icon_state = "scc_decal_preview" + + var/list/decals = list( + "0,0", "1,0", "2,0", "3,0", "4,0", + "0,1", "1,1", "2,1", "3,1", "4,1", + "0,2", "1,2", "2,2", "3,2","4,2", + "0,3", "2,3", "4,3" + ) + +/obj/effect/floor_decal/scc_full/Initialize() + ..() + for(var/coordinate in decals) + var/list/split_coordinate = splittext(coordinate, ",") + var/turf/decal_turf = loc + for(var/i = 1 to text2num(split_coordinate[1])) + decal_turf = get_step(decal_turf, EAST) + for(var/i = 1 to text2num(split_coordinate[2])) + decal_turf = get_step(decal_turf, NORTH) + new /obj/effect/floor_decal/scc(decal_turf, null, null, FALSE, coordinate) + return INITIALIZE_HINT_QDEL + +/obj/effect/floor_decal/scc + icon = 'icons/turf/flooring/scc_decals.dmi' + icon_state = "0,0" \ No newline at end of file diff --git a/code/modules/acting/acting_items.dm b/code/modules/acting/acting_items.dm index b40569d01c6..14c281c96e9 100644 --- a/code/modules/acting/acting_items.dm +++ b/code/modules/acting/acting_items.dm @@ -27,7 +27,7 @@ /obj/machinery/acting/changer/attack_hand(var/mob/user as mob) if(ishuman(user)) var/mob/living/carbon/human/H = user - H.change_appearance(APPEARANCE_ALL, H.loc, H, H.generate_valid_species(), state = z_state) + H.change_appearance(APPEARANCE_ALL, H, TRUE, H.generate_valid_species(), null, default_state, src) var/getName = sanitize(input(H, "Would you like to change your name to something else?", "Name change") as null|text, MAX_NAME_LEN) if(getName) H.real_name = getName diff --git a/code/modules/admin/DB ban/ban_mirroring.dm b/code/modules/admin/DB ban/ban_mirroring.dm index 41d5adb7a2a..2357e2e469a 100644 --- a/code/modules/admin/DB ban/ban_mirroring.dm +++ b/code/modules/admin/DB ban/ban_mirroring.dm @@ -6,9 +6,7 @@ if (!ckey || !address || !computer_id || !ban_id) return - establish_db_connection(dbcon) - - if (!dbcon.IsConnected()) + if (!establish_db_connection(dbcon)) error("Ban database connection failure while attempting to mirror. Key passed for mirror handling: [ckey].") log_misc("Ban database connection failure while attempting to mirror. Key passed for mirror handling: [ckey].") return @@ -59,9 +57,7 @@ if (!ckey || !address || !computer_id) return null - establish_db_connection(dbcon) - - if (!dbcon.IsConnected()) + if (!establish_db_connection(dbcon)) error("Ban database connection failure while attempting to check mirrors. Key passed for mirror checking: [ckey].") log_misc("Ban database connection failure while attempting to check mirrors. Key passed for mirror checking: [ckey].") return null @@ -111,9 +107,7 @@ if (!ban_id) return null - establish_db_connection(dbcon) - - if (!dbcon.IsConnected()) + if (!establish_db_connection(dbcon)) return null var/DBQuery/query = dbcon.NewQuery("SELECT id, ckey, ip, computerid, date(datetime) as datetime, source, extra_info, deleted_at FROM ss13_ban_mirrors WHERE ban_id = :ban_id:") diff --git a/code/modules/admin/DB ban/functions.dm b/code/modules/admin/DB ban/functions.dm index b670b18fb5d..f347009de1f 100644 --- a/code/modules/admin/DB ban/functions.dm +++ b/code/modules/admin/DB ban/functions.dm @@ -12,8 +12,7 @@ if (!holder) return - establish_db_connection(dbcon) - if(!dbcon.IsConnected()) + if(!establish_db_connection(dbcon)) return var/serverip = "[world.internet_address]:[world.port]" @@ -139,8 +138,7 @@ if(job) sql += " AND job = '[job]'" - establish_db_connection(dbcon) - if(!dbcon.IsConnected()) + if(!establish_db_connection(dbcon)) return var/ban_id @@ -234,8 +232,7 @@ var/sql = "SELECT ckey, bantype, job FROM ss13_ban WHERE id = [id]" - establish_db_connection(dbcon) - if(!dbcon.IsConnected()) + if(!establish_db_connection(dbcon)) return var/reason = input("Please specify an unban reason.", "Unban Reason", "Unbanned as per appeal.") @@ -306,8 +303,7 @@ if(!check_rights(R_BAN)) return - establish_db_connection(dbcon) - if(!dbcon.IsConnected()) + if(!establish_db_connection(dbcon)) to_chat(usr, "Failed to establish database connection") return diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index ffd797bea64..dc24ecc611f 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -1337,21 +1337,22 @@ proc/admin_notice(var/message, var/rights) set name = "Toggle Wind" set desc = "Paralyzes a player. Or unparalyses them." + toggle_wind_paralysis(H, usr) + +/proc/toggle_wind_paralysis(var/mob/living/target, var/mob/user) var/msg - - if(check_rights(R_ADMIN|R_MOD)) - if (H.paralysis == 0) - msg = "has paralyzed [key_name_admin(H)]." - H.visible_message("OOC Information: [H] has been winded by a member of staff! Please freeze all roleplay involving their character until the matter is resolved! Adminhelp if you have further questions.", "You have been winded by a member of staff! Please stand by until they contact you!") - H.paralysis = 8000 + if(check_rights(R_ADMIN|R_MOD, user)) + if (target.paralysis == 0) + msg = "has paralyzed [key_name_admin(target)]." + target.visible_message("OOC Information: [user] has been winded by a member of staff! Please freeze all roleplay involving their character until the matter is resolved! Adminhelp if you have further questions.", "You have been winded by a member of staff! Please stand by until they contact you!") + target.paralysis = 8000 else - if (alert("The player is currently winded. Do you want to unwind him?", "Unwind player?", "Yes", "No") == "No") + if (alert(user, "The player is currently winded. Do you want to unwind him?", "Unwind player?", "Yes", "No") == "No") return - - H.paralysis = 0 - msg = "has unparalyzed [key_name_admin(H)]." - H.visible_message("OOC Information: [H] has been unwinded by a member of staff!", "You have been unwinded by a member of staff!") - log_and_message_admins(msg) + target.paralysis = 0 + msg = "has unparalyzed [key_name_admin(target)]." + target.visible_message("OOC Information: [user] has been unwinded by a member of staff!", "You have been unwinded by a member of staff!") + log_and_message_admins(msg, user) feedback_add_details("admin_verb", "WIND") /datum/admins/proc/toggle_round_spookyness() diff --git a/code/modules/admin/admin_ranks.dm b/code/modules/admin/admin_ranks.dm index 295f71fd6ca..8e0e81c8dfc 100644 --- a/code/modules/admin/admin_ranks.dm +++ b/code/modules/admin/admin_ranks.dm @@ -113,9 +113,7 @@ var/list/forum_groupids_to_ranks = list() else //The current admin system uses SQL - - establish_db_connection(dbcon) - if(!dbcon.IsConnected()) + if(!establish_db_connection(dbcon)) error("AdminRanks: Failed to connect to database in load_admins(). Reverting to legacy system.") log_misc("AdminRanks: Failed to connect to database in load_admins(). Reverting to legacy system.") config.admin_legacy_system = 1 diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index cf412ea740c..384949c3f91 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -72,6 +72,7 @@ var/list/admin_verbs_admin = list( /client/proc/toggleghostwriters, /client/proc/toggledrones, /datum/admins/proc/show_skills, + /client/proc/damage_menu, /client/proc/man_up, /client/proc/global_man_up, /client/proc/response_team, // Response Teams admin verb, @@ -135,8 +136,6 @@ var/list/admin_verbs_fun = list( /client/proc/show_tip, /client/proc/fab_tip, /client/proc/apply_sunstate, - /client/proc/cure_traumas, - /client/proc/add_traumas, /datum/admins/proc/ccannoucment ) @@ -263,6 +262,7 @@ var/list/admin_verbs_hideable = list( /client/proc/toggledrones, /datum/admins/proc/show_skills, /client/proc/restart_sql, + /client/proc/damage_menu, /client/proc/man_up, /client/proc/global_man_up, /client/proc/connect_ntsl, @@ -350,8 +350,6 @@ var/list/admin_verbs_hideable = list( /datum/admins/proc/spawn_plant, /client/proc/show_plant_genes, /datum/admins/proc/spawn_atom, - /client/proc/cure_traumas, - /client/proc/add_traumas, /client/proc/respawn_character, /client/proc/spawn_chemdisp_cartridge, /client/proc/jobbans, @@ -710,52 +708,6 @@ var/list/admin_verbs_cciaa = list( message_admins("[ckey] creating an admin explosion at [epicenter.loc].") feedback_add_details("admin_verb","DB") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/client/proc/cure_traumas(mob/T as mob in mob_list) - set category = "Fun" - set name = "Cure Traumas" - set desc = "Cure the traumas of a given mob." - - if(!istype(T,/mob/living/carbon/human)) - to_chat(usr, "This can only be done to instances of type /mob/living/carbon/human") - return - - var/mob/living/carbon/human/C = T - - C.cure_all_traumas(TRUE, CURE_ADMIN) - log_and_message_admins("cured [key_name(C)]'s traumas.") - feedback_add_details("admin_verb","TB") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/proc/add_traumas(mob/T as mob in mob_list) - set category = "Fun" - set name = "Add Traumas" - set desc = "Induces traumas on a given mob." - - if(!istype(T,/mob/living/carbon/human)) - to_chat(usr, "This can only be done to instances of type /mob/living/carbon/human") - return - - var/mob/living/carbon/human/C = T - - var/list/traumas = subtypesof(/datum/brain_trauma) - var/result = input(usr, "Choose the brain trauma to apply","Traumatize") as null|anything in traumas - if(!result) return - var/permanent = alert("Do you want to make the trauma unhealable?", "Permanently Traumatize", "Yes", "No") - if(permanent == "Yes") - permanent = TRUE - else - permanent = FALSE - if(!usr) - return - if(!C) - to_chat(usr, "Mob doesn't exist anymore") - return - - if(result) - C.gain_trauma(result, permanent) - - log_and_message_admins("gave [key_name(C)] [result].") - feedback_add_details("admin_verb","BT") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - /client/proc/make_sound(var/obj/O in range(world.view)) // -- TLE set category = "Special Verbs" set name = "Make Sound" @@ -905,7 +857,7 @@ var/list/admin_verbs_cciaa = list( if(!H) return log_and_message_admins("is altering the appearance of [H].") - H.change_appearance(APPEARANCE_ALL, usr, usr, check_species_whitelist = 0, state = admin_state) + H.change_appearance(APPEARANCE_ALL, usr, FALSE) feedback_add_details("admin_verb","CHAA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/change_human_appearance_self() @@ -925,10 +877,10 @@ var/list/admin_verbs_cciaa = list( switch(alert("Do you wish for [H] to be allowed to select non-whitelisted races?","Alter Mob Appearance","Yes","No","Cancel")) if("Yes") log_and_message_admins("has allowed [H] to change [H.get_pronoun("his")] appearance, without whitelisting of races.") - H.change_appearance(APPEARANCE_ALL, H.loc, check_species_whitelist = 0) + H.change_appearance(APPEARANCE_ALL, H, FALSE) if("No") log_and_message_admins("has allowed [H] to change [H.get_pronoun("his")] appearance, with whitelisting of races.") - H.change_appearance(APPEARANCE_ALL, H.loc, check_species_whitelist = 1) + H.change_appearance(APPEARANCE_ALL, H, TRUE) feedback_add_details("admin_verb","CMAS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/change_security_level() @@ -1094,6 +1046,13 @@ var/list/admin_verbs_cciaa = list( else to_chat(usr, "You now won't get debug log messages") +/client/proc/damage_menu(mob/living/carbon/human/H as null|mob in human_mob_list) + set name = "Damage Menu" + set desc = "Access a human mob's damage menu, allowing you to make their life hell." + set category = "Fun" + + if(H) + new /datum/vueui_module/damage_menu(WEAKREF(H), usr) /client/proc/man_up(mob/T as mob in mob_list) set category = "Fun" diff --git a/code/modules/admin/player_notes_sql.dm b/code/modules/admin/player_notes_sql.dm index dbf4d690ef2..1f64068e503 100644 --- a/code/modules/admin/player_notes_sql.dm +++ b/code/modules/admin/player_notes_sql.dm @@ -12,8 +12,7 @@ else query_details["a_ckey"] = user.ckey - establish_db_connection(dbcon) - if (!dbcon.IsConnected()) + if (!establish_db_connection(dbcon)) alert("SQL connection failed while trying to add a note!") return @@ -36,8 +35,7 @@ if (!note_id || !note_edit) return - establish_db_connection(dbcon) - if (!dbcon.IsConnected()) + if (!establish_db_connection(dbcon)) error("SQL connection failed while attempting to delete a note!") return @@ -93,8 +91,7 @@ player_ckey = ckey(player_ckey) admin_ckey = ckey(admin_ckey) - establish_db_connection(dbcon) - if (!dbcon.IsConnected()) + if (!establish_db_connection(dbcon)) error("SQL connection failed while attempting to view a player's notes!") return @@ -185,9 +182,7 @@ if (!ckey) return "No ckey given!" - establish_db_connection(dbcon) - - if (!dbcon.IsConnected()) + if (!establish_db_connection(dbcon)) return "Unable to establish database connection! Aborting!" var/DBQuery/info_query = dbcon.NewQuery("SELECT ip, computerid FROM ss13_player WHERE ckey = :ckey:") diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index f27e7c54be4..633e69227a0 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -315,6 +315,7 @@ outfit_catagories["Kataphracts"] = typesof(/datum/outfit/admin/ert/kataphract) outfit_catagories["IAC"] = typesof(/datum/outfit/admin/ert/iac) if("Admin") + outfit_catagories["Stellar Corporate Conglomerate"] = typesof(/datum/outfit/admin/scc) outfit_catagories["NanoTrasen"] = typesof(/datum/outfit/admin/nt) outfit_catagories["Antagonist"] = typesof(/datum/outfit/admin/syndicate) outfit_catagories["Event"] = typesof(/datum/outfit/admin/event) diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 9fd0ab912a4..3ca96528586 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -585,8 +585,7 @@ Traitors and the like can also be revived with the previous role mostly intact. return switch(reporttype) if("Template") - establish_db_connection(dbcon) - if (!dbcon.IsConnected()) + if (!establish_db_connection(dbcon)) to_chat(src, "Unable to connect to the database.") return var/DBQuery/query = dbcon.NewQuery("SELECT title, message FROM ss13_ccia_general_notice_list WHERE deleted_at IS NULL") diff --git a/code/modules/admin/verbs/warning.dm b/code/modules/admin/verbs/warning.dm index 6c38754e26c..ca51f713991 100644 --- a/code/modules/admin/verbs/warning.dm +++ b/code/modules/admin/verbs/warning.dm @@ -9,8 +9,7 @@ if (!warned_ckey || !istext(warned_ckey)) return - establish_db_connection(dbcon) - if (!dbcon.IsConnected()) + if (!establish_db_connection(dbcon)) to_chat(usr, "Error: warn(): Database Connection failed, reverting to legacy systems.") usr.client.warn_legacy(warned_ckey) return @@ -110,8 +109,7 @@ var/dcolor = "#ffaaaa" //dark colour, severity = 1 var/ecolor = "#e3e3e3" //gray colour, expired = 1 - establish_db_connection(dbcon) - if (!dbcon.IsConnected()) + if (!establish_db_connection(dbcon)) alert("Connection to the SQL database lost. Aborting. Please alert an Administrator or a member of staff.") return @@ -213,8 +211,7 @@ if (!warning_id) return - establish_db_connection(dbcon) - if (!dbcon.IsConnected()) + if (!establish_db_connection(dbcon)) alert("Connection to SQL database failed while attempting to update your warning's status!") return @@ -249,8 +246,7 @@ var/count = 0 var/count_expire = 0 - establish_db_connection(dbcon) - if (!dbcon.IsConnected()) + if (!establish_db_connection(dbcon)) return var/list/client_details = list("ckey" = ckey, "computer_id" = computer_id, "address" = address) @@ -280,16 +276,24 @@ * A proc used to gather if someone has Unacknowledged Warnings */ /client/proc/fetch_unacked_warning_count() - establish_db_connection(dbcon) if (!dbcon) return - if (!dbcon.IsConnected()) + if (!establish_db_connection(dbcon)) return + var/count = 0 + var/DBQuery/warning_count_query = dbcon.NewQuery("SELECT COUNT(*) FROM ss13_warnings WHERE (visible = 1 AND acknowledged = 0 AND expired = 0) AND (ckey = :ckey: OR computerid = :computer_id: OR ip = :address:)") warning_count_query.Execute(list("ckey" = ckey, "computer_id" = computer_id, "address" = address)) if(warning_count_query.NextRow()) - unacked_warning_count = text2num(warning_count_query.item[1]) - return unacked_warning_count + count += text2num(warning_count_query.item[1]) + + var/DBQuery/notification_count_query = dbcon.NewQuery("SELECT COUNT(*) FROM ss13_player_notifications WHERE ckey = :ckey: AND acked_at is NULL and type IN ('player_greeting','player_greeting_chat')") + notification_count_query.Execute(list("ckey" = ckey)) + if(notification_count_query.NextRow()) + count += text2num(notification_count_query.item[1]) + + unacked_warning_count = count + return unacked_warning_count /* * A proc for an admin/moderator to look up a member's warnings. @@ -459,8 +463,7 @@ if(!warning_id || !warning_edit) return - establish_db_connection(dbcon) - if(!dbcon.IsConnected()) + if(!establish_db_connection(dbcon)) alert("Connection to the SQL database lost. Aborting. Please alert the database admin!") return diff --git a/code/modules/background/accent/human.dm b/code/modules/background/accent/human.dm index 6157ff8fc73..a6a74b2f460 100644 --- a/code/modules/background/accent/human.dm +++ b/code/modules/background/accent/human.dm @@ -43,12 +43,19 @@ individual ships, most of which have their own unique variations upon the standard Scarab accent." tag_icon = "scarabs" -/datum/accent/silversun - name = ACCENT_SILVERSUN - description = "The native accent of Silversun is a sing-songy take on standard Sol Common that has, since massive investment into the planet by Idris Incorporated, come to be \ - associated with the planet's renowned tourism industry. Many native residents of Silversun are bitter that their accent - and planet - are seen as nothing more than an enormous \ - vacation retreat by the greater Orion Spur." - tag_icon = "silversun" +/datum/accent/silversun_original + name = ACCENT_SILVERSUN_ORIGINAL + description = "The native accent of Silversun is a sing-song take on standard Sol Common that has, since massive investment into the planet by Idris Incorporated, come to be associated with the planet’s renowned tourism industry. \ + Many native residents of Silversun are bitter that their accent - and planet - are seen as nothing more than an enormous vacation retreat by the greater Orion Spur. This accent is commonly used by Idris Incorporated shell positronic \ + frames, much to the consternation of Silversun's Originals." + tag_icon = "silversun_original" + +/datum/accent/silversun_expatriate + name = ACCENT_SILVERSUN_EXPATRIATE + description = "The accent of Silversun's wealthy Idris Incorporated-aligned minority population is rooted in Tradeband dialects from Eridani and Luna rather than the Sol Common dialect of the Originals, making it audibly distinctive \ + compared to the 'native' accent of the planet. This accent is most commonly associated with Idris Incorporated employees from Silversun, which tend to be overwhelmingly from the Expatriate population. Many Idris Incorporated positronics \ + are programmed with this accent, and it is often regarded as the unofficial accent of the megacorporation." + tag_icon = "silversun_expatriate" /datum/accent/phong name = ACCENT_PHONG @@ -162,4 +169,17 @@ description = "The Gadpathurian accent, otherwise known as Gadpathurian Common, is an older dialect of Sol Common that is often regarded as dated-sounding by other speakers due to the \ isolation of the planet during its period of reunification. Due to the government's tight control over Gadpathur, and push for unity in the face of the Sol Alliance, Gadpathurians have \ been described as sounding relatively similar no matter which area of the planet they hail from." - tag_icon = "gadpathur" \ No newline at end of file + tag_icon = "gadpathur" + +/datum/accent/pluto + name = ACCENT_PLUTO + description = "The Plutonian accent is one of many Sol Common accents found throughout the Sol System itself, though it is almost undoubtedly the furthest one out from the Sun itself. Rooted in a combination \ + of Central Asian and Eastern European dialects, the Plutonian accent is notable for its slow, methodical method of speech. Very few positronics can be found with this accent, due to Pluto's unusual relationship with corporations." + tag_icon = "pluto" + +/datum/accent/assunzione + name = ACCENT_ASSUNZIONE + description = "The Assunzionii accent is one of the most unusual found in the Coalition of Colonies, due to the planet's colonial roots in the Mediterranean. Heavily influenced by Romance languages the Assunzionii dialect is \ + most notable for its elegant-sounding and evenly-paced method of speaking compared to rougher-sounding Coalition and frontier dialects. Liturgical Assunzionii is a small subset of this dialect, and is generally only spoken during \ + Luceian services and can be distinguished by its use of archaic language." + tag_icon = "assunzione" diff --git a/code/modules/background/accent/tajara.dm b/code/modules/background/accent/tajara.dm index ab802bc0843..37729c3904f 100644 --- a/code/modules/background/accent/tajara.dm +++ b/code/modules/background/accent/tajara.dm @@ -69,7 +69,7 @@ /datum/accent/northrasnrr name = ACCENT_NORTHRASNRR - description = "While similar to the Republican Siik'maas, Northern Ras'nrr Siik’maas is relatively free from the Hadiist additions. It is known for its \ + description = "While similar to the Republican Siik'maas, Northern Ras'nrr Siik'maas is relatively free from the Hadiist additions. It is known for its \ short, sharp vowel sounds and clear pronunciation. Most speakers are found in the DPRA controlled area of the region, but some do exist within the PRA borders." tag_icon = "tajara_northrasnrr" diff --git a/code/modules/background/defines.dm b/code/modules/background/defines.dm index 5a255a53c69..13afa020745 100644 --- a/code/modules/background/defines.dm +++ b/code/modules/background/defines.dm @@ -31,6 +31,7 @@ #define RELIGION_TRINARY "Trinary Perfection" #define RELIGION_SCARAB "Scarab Folk Beliefs" #define RELIGION_TAOISM "Taoism" +#define RELIGION_LUCEISM "Luceism" #define RELIGION_THAKH "Th'akh" #define RELIGION_SKAKH "Sk'akh" @@ -59,7 +60,8 @@ #define ACCENT_ERIDANIDREG "Eridanian Dreg" #define ACCENT_SOL "Solarian" #define ACCENT_SCARAB "Scarab Fleets" -#define ACCENT_SILVERSUN "Silversun" +#define ACCENT_SILVERSUN_ORIGINAL "Silversun Original" +#define ACCENT_SILVERSUN_EXPATRIATE "Silversun Expatriate" #define ACCENT_PHONG "New Hai Phongese" #define ACCENT_MARTIAN "Martian" #define ACCENT_KONYAN "Konyanger" @@ -77,6 +79,8 @@ #define ACCENT_NCF "Non-Coalition Frontier" #define ACCENT_FISANDUH "Fisanduhian" #define ACCENT_GADPATHUR "Gadpathurian" +#define ACCENT_PLUTO "Plutonian" +#define ACCENT_ASSUNZIONE "Assunzionii" #define ACCENT_REPUBICLANSIIK "Republican Siik'maas" #define ACCENT_NAZIRASIIK "Nazira Siik'maas" diff --git a/code/modules/background/religion/human.dm b/code/modules/background/religion/human.dm index 285bdfa8fa6..64a4e1f7548 100644 --- a/code/modules/background/religion/human.dm +++ b/code/modules/background/religion/human.dm @@ -64,3 +64,13 @@ description = "A Chinese nontheistic religion and philosophical tradition which emphasises living in harmony with the Tao. Someone who practices Taoism is called a Taoist." book_name = "tao te ching" book_sprite = "scroll" + +/datum/religion/luceism + name = RELIGION_LUCEISM + description = "An unusual syncretic religion originating upon the planet of Assunzione, Luceism is a quasi-Abrahamic religion descended from a variety of faiths \ + held by the original colonists that first emerged following the unexpected extinguishing of Assunzione’s star in 2274. While arguably a branch of \ + modern Abrahamic religions, Luceism is a hard-to-define religion dedicated to the worship of an abstract representation of light referred to as \ + the Ennoia. Though it is, unsurprisingly, strongest on Assunzione, followers of the faith can be found throughout the Orion Spur alongside their \ + houses of worship." + book_name = "Luceian Book of Scripture and Prayers" + book_sprite = "luce" diff --git a/code/modules/cargo/random_stock/t2_uncommon.dm b/code/modules/cargo/random_stock/t2_uncommon.dm index 32d5b81355c..64d2908830d 100644 --- a/code/modules/cargo/random_stock/t2_uncommon.dm +++ b/code/modules/cargo/random_stock/t2_uncommon.dm @@ -144,9 +144,6 @@ STOCK_ITEM_UNCOMMON(advwelder, 2) else new /obj/item/weldingtool/hugetank(L) -STOCK_ITEM_UNCOMMON(sord, 1) - new /obj/item/sord(L) - STOCK_ITEM_UNCOMMON(policebaton, 1.5) new /obj/item/melee/classic_baton(L) diff --git a/code/modules/cargo/random_stock/t3_rare.dm b/code/modules/cargo/random_stock/t3_rare.dm index 647e9de57ec..924a1363f6e 100644 --- a/code/modules/cargo/random_stock/t3_rare.dm +++ b/code/modules/cargo/random_stock/t3_rare.dm @@ -132,8 +132,8 @@ STOCK_ITEM_RARE(rare_clothing, 1) /obj/item/clothing/suit/acapjacket, /obj/item/clothing/head/acapcap, /obj/item/clothing/suit/storage/toggle/himeo, - /obj/item/clothing/suit/storage/vysoka_f, - /obj/item/clothing/suit/storage/vysoka_m, + /obj/item/clothing/suit/storage/vysoka/f, + /obj/item/clothing/suit/storage/vysoka, /obj/item/clothing/under/rank/iacjumpsuit, /obj/item/clothing/under/rank/fatigues/marine, /obj/item/clothing/under/rank/dress/subofficer, diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index b5ed07b7244..32263789444 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -134,8 +134,7 @@ var/list/localhost_addresses = list( var/request_id = text2num(href_list["linkingrequest"]) - establish_db_connection(dbcon) - if (!dbcon.IsConnected()) + if (!establish_db_connection(dbcon)) to_chat(src, "Action failed! Database link could not be established!") return @@ -483,8 +482,7 @@ var/list/localhost_addresses = list( // Returns null if no DB connection can be established, or -1 if the requested key was not found in the database /proc/get_player_age(key) - establish_db_connection(dbcon) - if(!dbcon.IsConnected()) + if(!establish_db_connection(dbcon)) return null var/DBQuery/query = dbcon.NewQuery("SELECT datediff(Now(),firstseen) as age FROM ss13_player WHERE ckey = :ckey:") @@ -618,8 +616,7 @@ var/list/localhost_addresses = list( if (!config.webint_url || !config.sql_enabled) return - establish_db_connection(dbcon) - if (!dbcon.IsConnected()) + if (!establish_db_connection(dbcon)) return var/list/requests = list() @@ -656,8 +653,7 @@ var/list/localhost_addresses = list( if (!config.webint_url || !config.sql_enabled) return - establish_db_connection(dbcon) - if (!dbcon.IsConnected()) + if (!establish_db_connection(dbcon)) return var/DBQuery/select_query = dbcon.NewQuery("SELECT COUNT(*) AS request_count FROM ss13_player_linking WHERE status = 'new' AND player_ckey = :ckey: AND deleted_at IS NULL") @@ -776,4 +772,4 @@ var/list/localhost_addresses = list( var/obj/item/rfd/mining/RFDM = I RFDM.afterattack(over_object, M, proximity, params, FALSE) - CHECK_TICK \ No newline at end of file + CHECK_TICK diff --git a/code/modules/client/client_color.dm b/code/modules/client/client_color.dm index 3b0ab70f2b4..21f558fbd88 100644 --- a/code/modules/client/client_color.dm +++ b/code/modules/client/client_color.dm @@ -2,7 +2,7 @@ var/client_color = "" //Any client.color-valid value var/priority = 1 var/override = FALSE //If set to override we will stop multiplying the moment we get here. NOTE: Priority remains, if your override is on position 4, the other 3 will still have a say. - + var/disability = FALSE /mob var/list/client_colors = list() @@ -22,9 +22,10 @@ return TRUE return FALSE -/mob/proc/add_client_color(color_type) +/mob/proc/add_client_color(color_type, set_disability = FALSE) if(!has_client_color(color_type)) var/datum/client_color/CC = new color_type() + CC.disability = set_disability client_colors |= CC sortTim(client_colors, /proc/cmp_clientcolor_priority) update_client_color() @@ -35,7 +36,7 @@ color_type - a typepath (subtyped from /datum/client_color) returns true if instance was found, false otherwise */ -/mob/proc/remove_client_color(color_type) +/mob/proc/remove_client_color(color_type, remove_disability = FALSE) if(!ispath(/datum/client_color)) return FALSE @@ -43,6 +44,8 @@ for(var/cc in client_colors) var/datum/client_color/CC = cc if(CC.type == color_type) + if(CC.disability && !remove_disability) + continue result = TRUE client_colors -= CC qdel(CC) diff --git a/code/modules/client/preference_setup/general/01_basic.dm b/code/modules/client/preference_setup/general/01_basic.dm index dd26ddd1ba7..91fb66db38d 100644 --- a/code/modules/client/preference_setup/general/01_basic.dm +++ b/code/modules/client/preference_setup/general/01_basic.dm @@ -5,6 +5,7 @@ /datum/category_item/player_setup_item/general/basic/load_character(var/savefile/S) S["real_name"] >> pref.real_name S["gender"] >> pref.gender + S["pronouns"] >> pref.pronouns S["age"] >> pref.age S["species"] >> pref.species S["spawnpoint"] >> pref.spawnpoint @@ -17,6 +18,7 @@ /datum/category_item/player_setup_item/general/basic/save_character(var/savefile/S) S["real_name"] << pref.real_name S["gender"] << pref.gender + S["pronouns"] << pref.pronouns S["age"] << pref.age S["species"] << pref.species S["spawnpoint"] << pref.spawnpoint @@ -34,6 +36,7 @@ "vars" = list( "name" = "real_name", "gender", + "pronouns", "age", "metadata", "spawnpoint", @@ -64,6 +67,7 @@ "ss13_characters" = list( "name", "gender", + "pronouns", "age", "metadata", "spawnpoint", @@ -83,6 +87,7 @@ return list( "name" = pref.real_name, "gender" = pref.gender, + "pronouns" = pref.pronouns, "age" = pref.age, "metadata" = pref.metadata, "spawnpoint" = pref.spawnpoint, @@ -129,6 +134,7 @@ pref.age = sanitize_integer(text2num(pref.age), pref.getMinAge(), pref.getMaxAge(), initial(pref.age)) pref.gender = sanitize_gender(pref.gender, pref.species) + pref.pronouns = sanitize_pronouns(pref.pronouns, pref.species, pref.gender) pref.real_name = sanitize_name(pref.real_name, pref.species) if(!pref.real_name) pref.real_name = random_name(pref.gender, pref.species) @@ -144,10 +150,13 @@ if (pref.can_edit_name) dat += "(Random Name)" dat += "
" - dat += "Gender: [capitalize(lowertext(pref.gender))]
" + dat += "Sex: [capitalize(lowertext(pref.gender))]
" + var/datum/species/S = all_species[pref.species] + if(length(S.selectable_pronouns)) + dat += "Pronouns: [capitalize_first_letters(pref.pronouns)]
" dat += "Age: [pref.age]
" dat += "Spawn Point: [pref.spawnpoint]
" - if(istype(all_species[pref.species], /datum/species/machine)) + if(istype(S, /datum/species/machine)) if(pref.can_edit_ipc_tag) dat += "Has Tag: [pref.machine_tag_status ? "Yes" : "No"]
" else @@ -214,11 +223,23 @@ else if(href_list["gender"]) var/datum/species/S = all_species[pref.species] pref.gender = next_in_list(pref.gender, valid_player_genders & S.default_genders) + pref.pronouns = pref.gender var/datum/category_item/player_setup_item/general/equipment/equipment_item = category.items[4] equipment_item.sanitize_character() // sanitize equipment return TOPIC_REFRESH_UPDATE_PREVIEW + else if(href_list["pronouns"]) + var/datum/species/S = all_species[pref.species] + var/selectable_pronouns = list() // this only exists to uppercase the first letters, otherwise it is uggo + for(var/pronoun in S.selectable_pronouns) + selectable_pronouns += capitalize_first_letters(pronoun) + var/new_pronouns = input(usr, "Select how your characters will appear to others when examined.", "Pronoun Selection") as null|anything in selectable_pronouns + if(!new_pronouns) + return + pref.pronouns = lowertext(new_pronouns) + return TOPIC_REFRESH_UPDATE_PREVIEW + else if(href_list["age"]) var/new_age = input(user, "Choose your character's age:\n([pref.getMinAge()]-[pref.getMaxAge()])", "Character Preference", pref.age) as num|null if(new_age && CanUseTopic(user)) diff --git a/code/modules/client/preference_setup/general/06_flavor.dm b/code/modules/client/preference_setup/general/06_flavor.dm index 89b374c8c1e..d490438fcfc 100644 --- a/code/modules/client/preference_setup/general/06_flavor.dm +++ b/code/modules/client/preference_setup/general/06_flavor.dm @@ -137,7 +137,7 @@ switch(href_list["flavor_text"]) if("open") if("general") - var/msg = sanitize(input(usr,"Give a general description of your character. This will be shown regardless of clothing, and may include OOC notes and preferences.","Flavor Text",html_decode(pref.flavor_texts[href_list["flavor_text"]])) as message, extra = 0) + var/msg = sanitize(input(usr,"Give a general description of your character. This will be shown regardless of clothing.","Flavor Text",html_decode(pref.flavor_texts[href_list["flavor_text"]])) as message, extra = 0) if(CanUseTopic(user)) pref.flavor_texts[href_list["flavor_text"]] = msg else diff --git a/code/modules/client/preference_setup/global/02_settings.dm b/code/modules/client/preference_setup/global/02_settings.dm index 0c960b1e75a..d2cfac7c439 100644 --- a/code/modules/client/preference_setup/global/02_settings.dm +++ b/code/modules/client/preference_setup/global/02_settings.dm @@ -95,7 +95,8 @@ "Space Dust: [(pref.toggles_secondary & PARALLAX_DUST) ? "Yes" : "No"]
", "Progress Bars: [(pref.toggles_secondary & PROGRESS_BARS) ? "Yes" : "No"]
", "Floating Messages: [(pref.toggles_secondary & FLOATING_MESSAGES) ? "Yes" : "No"]
", - "Static Space: [(pref.toggles_secondary & PARALLAX_IS_STATIC) ? "Yes" : "No"]
" + "Static Space: [(pref.toggles_secondary & PARALLAX_IS_STATIC) ? "Yes" : "No"]
", + "Hotkey Mode Default: [(pref.toggles_secondary & HOTKEY_DEFAULT) ? "On" : "Off"]
" ) . = dat.Join() diff --git a/code/modules/client/preference_setup/loadout/_defines.dm b/code/modules/client/preference_setup/loadout/_defines.dm index a1692bfb053..3d02a32ec09 100644 --- a/code/modules/client/preference_setup/loadout/_defines.dm +++ b/code/modules/client/preference_setup/loadout/_defines.dm @@ -1,4 +1,5 @@ #define GEAR_NO_SELECTION 0 #define GEAR_HAS_COLOR_SELECTION 1 #define GEAR_HAS_NAME_SELECTION 2 -#define GEAR_HAS_DESC_SELECTION 4 \ No newline at end of file +#define GEAR_HAS_DESC_SELECTION 4 +#define GEAR_HAS_COLOR_ROTATION_SELECTION 8 \ No newline at end of file diff --git a/code/modules/client/preference_setup/loadout/gear_tweaks.dm b/code/modules/client/preference_setup/loadout/gear_tweaks.dm index 2b5767e3397..a1809834fad 100644 --- a/code/modules/client/preference_setup/loadout/gear_tweaks.dm +++ b/code/modules/client/preference_setup/loadout/gear_tweaks.dm @@ -46,6 +46,23 @@ Color adjustment return I.color = sanitize_hexcolor(metadata, I.color) +/* +Color Rotation adjustment +*/ +var/datum/gear_tweak/color_rotation/gear_tweak_color_rotation = new() + +/datum/gear_tweak/color_rotation/get_contents(var/metadata) + return "Color Rotation: [metadata]" + +/datum/gear_tweak/color_rotation/get_default() + return 0 + +/datum/gear_tweak/color_rotation/get_metadata(var/user, var/metadata, var/title = "Color Rotation") + return clamp(input(user, "Choose the amount of degrees to rotate the hue around the color wheel. (-180 - 180)", title, metadata) as num, -180, 180) + +/datum/gear_tweak/color_rotation/tweak_item(var/obj/item/I, var/metadata) + I.color = color_rotation(metadata) + /* Path adjustment */ @@ -206,3 +223,20 @@ var/datum/gear_tweak/custom_desc/gear_tweak_free_desc = new() if(!metadata) return I.desc I.desc = metadata + +/* +Paper Data +*/ +/datum/gear_tweak/paper_data/get_contents(var/metadata) + return "Written Content: [length(metadata) > 15 ? "[copytext_char(metadata, 1, 15)]..." : metadata]" + +/datum/gear_tweak/paper_data/get_default() + return "" + +/datum/gear_tweak/paper_data/get_metadata(var/user, var/metadata) + return sanitize(input(user, "Choose a pre-written message on the item.", "Pre-written Message", metadata) as message|null, MAX_PAPER_MESSAGE_LEN, extra = 0) + +/datum/gear_tweak/paper_data/tweak_item(var/obj/item/paper/P, var/metadata) + if(!metadata || !istype(P)) + return + P.info = P.parsepencode(metadata) \ No newline at end of file diff --git a/code/modules/client/preference_setup/loadout/loadout.dm b/code/modules/client/preference_setup/loadout/loadout.dm index 02c8df84619..61cbb20d69b 100644 --- a/code/modules/client/preference_setup/loadout/loadout.dm +++ b/code/modules/client/preference_setup/loadout/loadout.dm @@ -298,6 +298,8 @@ var/list/gear_datums = list() gear_tweaks += list(gear_tweak_free_name) if(flags & GEAR_HAS_DESC_SELECTION) gear_tweaks += list(gear_tweak_free_desc) + if(flags & GEAR_HAS_COLOR_ROTATION_SELECTION) + gear_tweaks += list(gear_tweak_color_rotation) /datum/gear_data var/path diff --git a/code/modules/client/preference_setup/loadout/loadout_accessories.dm b/code/modules/client/preference_setup/loadout/loadout_accessories.dm index 92cdd878b7f..4d46de882ec 100644 --- a/code/modules/client/preference_setup/loadout/loadout_accessories.dm +++ b/code/modules/client/preference_setup/loadout/loadout_accessories.dm @@ -32,6 +32,7 @@ /datum/gear/accessory/armband/New() ..() var/armbands = list() + armbands["Stellar Corporate Conglomerate armband"] = /obj/item/clothing/accessory/armband/scc armbands["red armband"] = /obj/item/clothing/accessory/armband armbands["security armband"] = /obj/item/clothing/accessory/armband/sec armbands["cargo armband"] = /obj/item/clothing/accessory/armband/cargo @@ -52,7 +53,7 @@ /datum/gear/accessory/holster display_name = "holster selection" path = /obj/item/clothing/accessory/holster/armpit - allowed_roles = list("Captain", "Head of Personnel", "Security Officer", "Warden", "Head of Security","Detective", "Forensic Technician", "Security Cadet", "Corporate Liaison", "Consular Officer") + allowed_roles = list("Captain", "Head of Personnel", "Security Officer", "Warden", "Head of Security","Investigator", "Security Cadet", "Corporate Liaison", "Consular Officer") /datum/gear/accessory/holster/New() ..() @@ -97,7 +98,7 @@ /datum/gear/accessory/black_vest display_name = "webbing, security" path = /obj/item/clothing/accessory/storage/black_vest - allowed_roles = list("Security Officer","Head of Security","Warden", "Security Cadet", "Detective", "Forensic Technician") + allowed_roles = list("Security Officer","Head of Security","Warden", "Security Cadet", "Investigator") /datum/gear/accessory/white_vest display_name = "webbing, medical" @@ -118,7 +119,7 @@ /datum/gear/accessory/black_pouches display_name = "drop pouches, security" path = /obj/item/clothing/accessory/storage/pouches/black - allowed_roles = list("Security Officer","Head of Security", "Warden", "Security Cadet", "Detective", "Forensic Technician") + allowed_roles = list("Security Officer","Head of Security", "Warden", "Security Cadet", "Investigator") /datum/gear/accessory/white_pouches display_name = "drop pouches, medical" @@ -181,6 +182,8 @@ shirt["t-shirt"] = /obj/item/clothing/accessory/tshirt shirt["t-shirt, cropped"] = /obj/item/clothing/accessory/tshirt_crop shirt["blouse"] = /obj/item/clothing/accessory/blouse + shirt["long-sleeved blouse"] = /obj/item/clothing/accessory/longblouse + shirt["puffy blouse"] = /obj/item/clothing/accessory/puffyblouse gear_tweaks += new/datum/gear_tweak/path(shirt) /datum/gear/accessory/silversun @@ -240,9 +243,9 @@ allowed_roles = list("Head of Security") /datum/gear/accessory/detbadge - display_name = "badge, detective" + display_name = "badge, investigations" path = /obj/item/clothing/accessory/badge/dia - allowed_roles = list("Detective", "Forensic Technician") + allowed_roles = list("Investigator") /datum/gear/accessory/badge display_name = "badge selection" @@ -266,6 +269,11 @@ path = /obj/item/clothing/accessory/sleevepatch flags = GEAR_HAS_NAME_SELECTION | GEAR_HAS_DESC_SELECTION | GEAR_HAS_COLOR_SELECTION +/datum/gear/accessory/scc_patch + display_name = "Stellar Corporate Conglomerate sleeve patch" + path = /obj/item/clothing/accessory/sleevepatch/scc + flags = 0 + /datum/gear/accessory/whalebone display_name = "europan bone charm" path = /obj/item/clothing/accessory/whalebone @@ -284,3 +292,60 @@ gadpathur["industrial cadre brassard"] = /obj/item/clothing/accessory/armband/gadpathur/ind gadpathur["medical cadre brassard"] = /obj/item/clothing/accessory/armband/gadpathur/med gear_tweaks += new/datum/gear_tweak/path(gadpathur) + +/datum/gear/accessory/dominia/sash + display_name = "dominian house sash selection" + description = "A selection of sashes representing the Great Houses of Dominia." + path = /obj/item/clothing/accessory/dominia/sash + +/datum/gear/accessory/dominia/sash/New() + ..() + var/dominia = list() + dominia["dominian sash"] = /obj/item/clothing/accessory/dominia/sash + dominia["strelitz sash"] = /obj/item/clothing/accessory/dominia/sash/strelitz + dominia["volvalaad sash"] = /obj/item/clothing/accessory/dominia/sash/volvalaad + dominia["kazhkz sash"] = /obj/item/clothing/accessory/dominia/sash/kazhkz + dominia["caladius sash"] = /obj/item/clothing/accessory/dominia/sash/caladius + dominia["zhao sash"] =/obj/item/clothing/accessory/dominia/sash/zhao + gear_tweaks += new/datum/gear_tweak/path(dominia) + +/datum/gear/accessory/passcard + display_name = "human passcard selection" + path = /obj/item/clothing/accessory/badge/passcard + +/datum/gear/accessory/passcard/New() + ..() + var/passcard = list() + passcard["passcard, tau ceti"] = /obj/item/clothing/accessory/badge/passcard + passcard["passcard, sol"] = /obj/item/clothing/accessory/badge/passcard/sol + passcard["passcard, pluto"] = /obj/item/clothing/accessory/badge/passcard/sol/pluto + passcard["passcard, jovian"] = /obj/item/clothing/accessory/badge/passcard/sol/jupiter + passcard["passcard, luna"] = /obj/item/clothing/accessory/badge/passcard/sol/luna + passcard["passcard, europa"] = /obj/item/clothing/accessory/badge/passcard/sol/europa + passcard["passcard, cytherean"] = /obj/item/clothing/accessory/badge/passcard/sol/cytherean + passcard["passcard, jintarian"] = /obj/item/clothing/accessory/badge/passcard/sol/jintarian + passcard["passcard, eridani"] = /obj/item/clothing/accessory/badge/passcard/eridani + passcard["passcard, elyra"] = /obj/item/clothing/accessory/badge/passcard/elyra + passcard["passcard, dominia"] = /obj/item/clothing/accessory/badge/passcard/dominia + passcard["passcard, coalition"] = /obj/item/clothing/accessory/badge/passcard/coalition + passcard["passcard, himeo"] = /obj/item/clothing/accessory/badge/passcard/himeo + passcard["passcard, vysoka"] = /obj/item/clothing/accessory/badge/passcard/vysoka + passcard["passcard, gadpathur"] = /obj/item/clothing/accessory/badge/passcard/gad + passcard["passcard, assunzione"] = /obj/item/clothing/accessory/badge/passcard/assu + passcard["passcard, techno-conglomerate"] = /obj/item/clothing/accessory/badge/passcard/techno + passcard["passcard, konyang"] = /obj/item/clothing/accessory/badge/passcard/konyang + gear_tweaks += new/datum/gear_tweak/path(passcard) + +/datum/gear/accessory/passport + display_name = "human passport selection" + path = /obj/item/clothing/accessory/badge/passport + +/datum/gear/accessory/passport/New() + ..() + var/passport = list() + passport["passport, biesel"] = /obj/item/clothing/accessory/badge/passport + passport["passport, sol"] = /obj/item/clothing/accessory/badge/passport/sol + passport["passport, elyra"] = /obj/item/clothing/accessory/badge/passport/elyra + passport["passport, dominia"] = /obj/item/clothing/accessory/badge/passport/dominia + passport["passport, coalition"] = /obj/item/clothing/accessory/badge/passport/coc + gear_tweaks += new/datum/gear_tweak/path(passport) diff --git a/code/modules/client/preference_setup/loadout/loadout_augments.dm b/code/modules/client/preference_setup/loadout/loadout_augments.dm index 7e888bb964f..d0730c4f209 100644 --- a/code/modules/client/preference_setup/loadout/loadout_augments.dm +++ b/code/modules/client/preference_setup/loadout/loadout_augments.dm @@ -12,17 +12,20 @@ display_name = "integrated eye sensors" description = "An eye augment that allows the user to deploy medical or security sensors." path = /obj/item/organ/internal/augment/eye_sensors - cost = 4 + cost = 3 whitelisted = list(SPECIES_HUMAN, SPECIES_HUMAN_OFFWORLD, SPECIES_TAJARA, SPECIES_TAJARA_ZHAN, SPECIES_TAJARA_MSAI, SPECIES_UNATHI, SPECIES_SKRELL, SPECIES_IPC, SPECIES_IPC_G1, SPECIES_IPC_G2, SPECIES_IPC_XION, SPECIES_IPC_ZENGHU, SPECIES_IPC_BISHOP, SPECIES_IPC_SHELL, SPECIES_VAURCA_WORKER, SPECIES_VAURCA_WARRIOR) - /datum/gear/augment/cyber_hair display_name = "synthetic hair extensions" description = "A hair augment that allows the user to change the shape and color of their hair." path = /obj/item/organ/internal/augment/cyber_hair - cost = 2 whitelisted = list(SPECIES_HUMAN, SPECIES_HUMAN_OFFWORLD, SPECIES_TAJARA, SPECIES_TAJARA_ZHAN, SPECIES_TAJARA_MSAI, SPECIES_IPC_SHELL) +/datum/gear/augment/synthetic_cords + display_name = "synthetic vocal cords" + description = "Vocal cords of synthetic nature packed into an augment kit. This allows users who are mute due to structural damage of the throat to speak." + path = /obj/item/organ/internal/augment/synthetic_cords + cost = 1 /datum/gear/augment/combitool display_name = "retractable combitool" @@ -37,6 +40,25 @@ augs["retractable combitool, left hand"] = /obj/item/organ/internal/augment/tool/combitool/left gear_tweaks += new /datum/gear_tweak/path(augs) +/datum/gear/augment/lighter + display_name = "retractable lighter" + description = "An augment that allows the user to project a lighter out of their fingertip." + path = /obj/item/organ/internal/augment/tool/combitool/lighter + cost = 2 + +/datum/gear/augment/lighter/New() + ..() + var/list/augs = list() + augs["retractable lighter, right hand"] = /obj/item/organ/internal/augment/tool/combitool/lighter + augs["retractable lighter, left hand"] = /obj/item/organ/internal/augment/tool/combitool/lighter/left + gear_tweaks += new /datum/gear_tweak/path(augs) + +/datum/gear/augment/cochlear + display_name = "cochlear implant" + description = "A synthetic replacement for the structures within the ear, allowing the user to hear without requiring external tools." + path = /obj/item/organ/internal/augment/cochlear + cost = 3 + /datum/gear/augment/health_scanner display_name = "integrated health scanner" description = "An augment that allows the user scan their own health condition." @@ -53,7 +75,6 @@ display_name = "taste booster selection" description = "A selection of augments that modify the user's taste sensitivity." path = /obj/item/organ/internal/augment/taste_booster - cost = 3 /datum/gear/augment/taste_boosters/New() ..() @@ -66,11 +87,47 @@ display_name = "integrated fuel cell" description = "An augment that allows the user to synthetize welding fuel into nutrients." path = /obj/item/organ/internal/augment/fuel_cell - cost = 3 + cost = 2 /datum/gear/augment/psiaug display_name = "psionic receiver" description = "An augment installed into the head that functions as a surrogate for a missing zona bovinae, also functioning as a filter for the psionically-challenged." path = /obj/item/organ/internal/augment/psi - cost = 1 whitelisted = list(SPECIES_HUMAN, SPECIES_HUMAN_OFFWORLD, SPECIES_TAJARA, SPECIES_TAJARA_ZHAN, SPECIES_TAJARA_MSAI, SPECIES_VAURCA_WORKER, SPECIES_VAURCA_WARRIOR, SPECIES_IPC, SPECIES_IPC_G1, SPECIES_IPC_G2, SPECIES_IPC_XION, SPECIES_IPC_ZENGHU, SPECIES_IPC_BISHOP, SPECIES_IPC_SHELL) + +/datum/gear/augment/memory_inhibitor + display_name = "memory inhibitor" + description = "A Zeng Hu implant that allows one to have control over their memories, allowing you to set a timer and remove any memories developed within it." + path = /obj/item/organ/internal/augment/memory_inhibitor + whitelisted = list(SPECIES_HUMAN, SPECIES_HUMAN_OFFWORLD, SPECIES_VAURCA_WORKER, SPECIES_VAURCA_WARRIOR, SPECIES_SKRELL) + faction = "Zeng-Hu Pharmaceuticals" + +/datum/gear/augment/emotional_manipulator + display_name = "emotional manipulator" + description = "A Zeng Hu brain implant to manipulate the brain's chemicals to induce a calming or happy feeling." + path = /obj/item/organ/internal/augment/emotional_manipulator + whitelisted = list(SPECIES_HUMAN, SPECIES_HUMAN_OFFWORLD, SPECIES_VAURCA_WORKER, SPECIES_VAURCA_WARRIOR, SPECIES_SKRELL) + faction = "Zeng-Hu Pharmaceuticals" + +/datum/gear/augment/enhanced_vision + display_name = "vision enhanced retinas" + description = "Zeng Hu implants given to EMTs to assist with finding the injured. These eye implants allow one to see further than you normally could." + path = /obj/item/organ/internal/augment/enhanced_vision + whitelisted = list(SPECIES_HUMAN, SPECIES_HUMAN_OFFWORLD, SPECIES_VAURCA_WORKER, SPECIES_VAURCA_WARRIOR, SPECIES_SKRELL, SPECIES_IPC, SPECIES_IPC_G1, SPECIES_IPC_G2, SPECIES_IPC_XION, SPECIES_IPC_ZENGHU, SPECIES_IPC_BISHOP, SPECIES_IPC_SHELL) + faction = "Zeng-Hu Pharmaceuticals" + cost = 3 + +/datum/gear/augment/sightlights + display_name = "ocular installed sightlights" + description = "Designed to assist Zeng-Hu medical personnel in darker areas or places experiencing periodic power issues, Sightlights will allow one to be able to use their eyes as a flashlight." + path = /obj/item/organ/internal/augment/sightlights + whitelisted = list(SPECIES_HUMAN, SPECIES_HUMAN_OFFWORLD, SPECIES_VAURCA_WORKER, SPECIES_VAURCA_WARRIOR, SPECIES_SKRELL, SPECIES_IPC, SPECIES_IPC_G1, SPECIES_IPC_G2, SPECIES_IPC_XION, SPECIES_IPC_ZENGHU, SPECIES_IPC_BISHOP, SPECIES_IPC_SHELL) + faction = "Zeng-Hu Pharmaceuticals" + cost = 3 + +/datum/gear/augment/zenghu_plate + display_name = "zeng-hu veterancy plate" + description = "A clear sign of Zeng-Hu's best, this plate bearing the company's symbol is installed on those who prove themselves in the hyper-competitive environment" + path = /obj/item/organ/internal/augment/zenghu_plate + whitelisted = list(SPECIES_HUMAN, SPECIES_HUMAN_OFFWORLD, SPECIES_VAURCA_WORKER, SPECIES_VAURCA_WARRIOR, SPECIES_SKRELL, SPECIES_IPC_G1, SPECIES_IPC_G2, SPECIES_IPC_XION, SPECIES_IPC_ZENGHU, SPECIES_IPC_BISHOP, SPECIES_IPC_SHELL) + faction = "Zeng-Hu Pharmaceuticals" diff --git a/code/modules/client/preference_setup/loadout/loadout_computer.dm b/code/modules/client/preference_setup/loadout/loadout_computer.dm index 3b9c43f5bf0..631618e6536 100644 --- a/code/modules/client/preference_setup/loadout/loadout_computer.dm +++ b/code/modules/client/preference_setup/loadout/loadout_computer.dm @@ -36,7 +36,7 @@ /datum/gear/computer/handheld/wristbound/security/investigations display_name = "wristbound computer (Security Investigations)" path = /obj/item/modular_computer/handheld/wristbound/preset/advanced/security/investigations - allowed_roles = list("Detective", "Forensic Technician") + allowed_roles = list("Investigator") /datum/gear/computer/handheld/wristbound/security/research display_name = "wristbound computer (Research)" diff --git a/code/modules/client/preference_setup/loadout/loadout_cosmetics.dm b/code/modules/client/preference_setup/loadout/loadout_cosmetics.dm index 666036f83a7..2747bd59b5f 100644 --- a/code/modules/client/preference_setup/loadout/loadout_cosmetics.dm +++ b/code/modules/client/preference_setup/loadout/loadout_cosmetics.dm @@ -15,6 +15,19 @@ lipsticks["lipstick, jade"] = /obj/item/lipstick/jade lipsticks["lipstick, black"] = /obj/item/lipstick/black lipsticks["lipstick, pink"] = /obj/item/lipstick/pink + lipsticks["lipstick, amberred"] = /obj/item/lipstick/amberred + lipsticks["lipstick, cherry"] = /obj/item/lipstick/cherry + lipsticks["lipstick, orange"] = /obj/item/lipstick/orange + lipsticks["lipstick, gold"] = /obj/item/lipstick/gold + lipsticks["lipstick, deepred"] = /obj/item/lipstick/deepred + lipsticks["lipstick, rosepink"] = /obj/item/lipstick/rosepink + lipsticks["lipstick, nude"] = /obj/item/lipstick/nude + lipsticks["lipstick, wine"] = /obj/item/lipstick/wine + lipsticks["lipstick, peach"] = /obj/item/lipstick/peach + lipsticks["lipstick, forestgreen"] = /obj/item/lipstick/forestgreen + lipsticks["lipstick, skyblue"] = /obj/item/lipstick/skyblue + lipsticks["lipstick, teal"] = /obj/item/lipstick/teal + gear_tweaks += new/datum/gear_tweak/path(lipsticks) /datum/gear/cosmetic/mirror diff --git a/code/modules/client/preference_setup/loadout/loadout_ears.dm b/code/modules/client/preference_setup/loadout/loadout_ears.dm index eedcdf8f1cf..8bae8bd4d6d 100644 --- a/code/modules/client/preference_setup/loadout/loadout_ears.dm +++ b/code/modules/client/preference_setup/loadout/loadout_ears.dm @@ -16,6 +16,11 @@ bandanna["black bandanna"] = /obj/item/clothing/ears/bandanna/black gear_tweaks += new/datum/gear_tweak/path(bandanna) +/datum/gear/ears/bandanna_colorable + display_name = "neck bandanna (colorable)" + path = /obj/item/clothing/ears/bandanna_colorable + flags = GEAR_HAS_NAME_SELECTION | GEAR_HAS_DESC_SELECTION | GEAR_HAS_COLOR_SELECTION + /datum/gear/ears/headphones display_name = "headphones" path = /obj/item/clothing/ears/earmuffs/headphones @@ -51,3 +56,4 @@ hearingaids["hearing aid, white"] = /obj/item/device/hearing_aid/white hearingaids["hearing aid, skrellian"] = /obj/item/device/hearing_aid/skrell gear_tweaks += new/datum/gear_tweak/path(hearingaids) + diff --git a/code/modules/client/preference_setup/loadout/loadout_eyes.dm b/code/modules/client/preference_setup/loadout/loadout_eyes.dm index 04f7b5a252e..75343df996f 100644 --- a/code/modules/client/preference_setup/loadout/loadout_eyes.dm +++ b/code/modules/client/preference_setup/loadout/loadout_eyes.dm @@ -44,7 +44,7 @@ display_name = "flash-proof sunglasses selection (Security/Command)" description = "A selection of flash-proof sunglasses." path = /obj/item/clothing/glasses/sunglasses - allowed_roles = list("Security Officer", "Head of Security", "Warden", "Captain", "Head of Personnel", "Quartermaster", "Internal Affairs Agent", "Detective", "Forensic Technician") + allowed_roles = list("Security Officer", "Head of Security", "Warden", "Captain", "Head of Personnel", "Quartermaster", "Internal Affairs Agent", "Investigator") /datum/gear/eyes/sunglasses/New() ..() @@ -81,20 +81,23 @@ medhud["aviators, medical"] = /obj/item/clothing/glasses/hud/health/aviator medhud["HUD, medical"] = /obj/item/clothing/glasses/hud/health medhud["HUDpatch, medical"] = /obj/item/clothing/glasses/eyepatch/hud/medical + medhud["prescription HUD, medical"] = /obj/item/clothing/glasses/hud/health/prescription gear_tweaks += new/datum/gear_tweak/path(medhud) /datum/gear/eyes/sechuds display_name = "security HUD selection" description = "A selection of security HUDs." path = /obj/item/clothing/glasses/sunglasses/sechud/aviator - allowed_roles = list("Security Officer", "Head of Security", "Warden", "Security Cadet", "Detective", "Forensic Technician") + allowed_roles = list("Security Officer", "Head of Security", "Warden", "Security Cadet", "Investigator") /datum/gear/eyes/sechuds/New() ..() var/sechud = list() + sechud["sunglasses, security"] = /obj/item/clothing/glasses/sunglasses/sechud sechud["aviators, security"] = /obj/item/clothing/glasses/sunglasses/sechud/aviator sechud["HUD, security"] = /obj/item/clothing/glasses/hud/security sechud["HUDpatch, security"] = /obj/item/clothing/glasses/eyepatch/hud/security + sechud["prescription HUD, security"] = /obj/item/clothing/glasses/hud/security/prescription gear_tweaks += new/datum/gear_tweak/path(sechud) /datum/gear/eyes/hudpatch diff --git a/code/modules/client/preference_setup/loadout/loadout_factions.dm b/code/modules/client/preference_setup/loadout/loadout_factions.dm index 657f0718842..dc890f75bd6 100644 --- a/code/modules/client/preference_setup/loadout/loadout_factions.dm +++ b/code/modules/client/preference_setup/loadout/loadout_factions.dm @@ -11,6 +11,11 @@ path = /obj/item/clothing/head/beret/security/idris faction = "Idris Incorporated" +/datum/gear/faction/idris_beret_alt + display_name = "idris beret (alt)" + path = /obj/item/clothing/head/beret/security/idris/alt + faction = "Idris Incorporated" + /datum/gear/faction/idris_uniform_alt display_name = "idris service skirt" description = "Not for security usage." @@ -29,6 +34,11 @@ slot = slot_wear_suit faction = "Idris Incorporated" +/datum/gear/faction/idris_passcard + display_name = "idris silversun passcard" + path = /obj/item/clothing/accessory/badge/passcard/sol/silversun + faction = "Idris Incorporated" + /datum/gear/faction/zavodskoi_beret display_name = "black zavodskoi beret" path = /obj/item/clothing/head/beret/security/zavodskoi @@ -88,11 +98,30 @@ faction = "Zeng-Hu Pharmaceuticals" /datum/gear/faction/zenghu_labcoat - display_name = "zeng-hu labcoat" + display_name = "zeng-hu labcoat selection" path = /obj/item/clothing/suit/storage/toggle/labcoat/zeng slot = slot_wear_suit faction = "Zeng-Hu Pharmaceuticals" +/datum/gear/faction/zenghu_labcoat/New() + ..() + var/masks = list() + masks["zeng-hu labcoat"] = /obj/item/clothing/suit/storage/toggle/labcoat/zeng + masks["zeng-hu labcoat, alt"] = /obj/item/clothing/suit/storage/toggle/labcoat/zeng/alt + gear_tweaks += new/datum/gear_tweak/path(masks) + +/datum/gear/faction/zenghu_apron + display_name = "zeng-hu vinyl apron" + path = /obj/item/clothing/suit/apron/surgery/zeng + slot = slot_wear_suit + faction = "Zeng-Hu Pharmaceuticals" + +/datum/gear/faction/zenghu_gloves + display_name = "zeng-hu vinyl gloves" + path = /obj/item/clothing/gloves/zeng + slot = slot_gloves + faction = "Zeng-Hu Pharmaceuticals" + /datum/gear/faction/zavodskoi_patch display_name = "zavodskoi sleeve patch" path = /obj/item/clothing/accessory/sleevepatch/zavodskoi @@ -104,7 +133,7 @@ path = /obj/item/clothing/accessory/sleevepatch/zavodskoisec slot = slot_tie faction = "Zavodskoi Interstellar" - allowed_roles = list("Security Officer","Forensic Technician","Warden") + allowed_roles = list("Security Officer","Investigator","Warden") /datum/gear/faction/erisec_patch display_name = "EPMC sleeve patch" @@ -116,7 +145,7 @@ display_name = "idris security sleeve patch" path = /obj/item/clothing/accessory/sleevepatch/idrissec faction = "Idris Incorporated" - allowed_roles = list("Security Officer","Detective", "Forensic Technician") + allowed_roles = list("Security Officer","Investigator") /datum/gear/faction/heph_labcoat display_name = "hephaestus labcoat" @@ -129,3 +158,8 @@ path = /obj/item/clothing/head/beret/heph slot = slot_head faction = "Hephaestus Industries" + +/datum/gear/faction/heph_passcard + display_name = "hephaestus burszia passcard" + path = /obj/item/clothing/accessory/badge/passcard/burszia + faction = "Hephaestus Industries" diff --git a/code/modules/client/preference_setup/loadout/loadout_general.dm b/code/modules/client/preference_setup/loadout/loadout_general.dm index 8351c8da170..0189fc00c5e 100644 --- a/code/modules/client/preference_setup/loadout/loadout_general.dm +++ b/code/modules/client/preference_setup/loadout/loadout_general.dm @@ -97,8 +97,10 @@ flags = GEAR_HAS_DESC_SELECTION /datum/gear/banner/New() + ..() var/banners = list() + banners["banner, Stellar Corporate Conglomerate"] = /obj/item/flag/scc banners["banner, SolGov"] = /obj/item/flag/sol banners["banner, Dominia"] = /obj/item/flag/dominia banners["banner, Elyra"] = /obj/item/flag/elyra @@ -118,8 +120,25 @@ banners["banner, Zenghu Pharmaceuticals"] = /obj/item/flag/zenghu banners["banner, Zavodskoi Interstellar"] = /obj/item/flag/zavodskoi banners["banner, Coalition of Colonies"] = /obj/item/flag/coalition + banners["banner, Confederate States of Fisanduh"] = /obj/item/flag/fisanduh + banners["banner, Gadpathur"] = /obj/item/flag/gadpathur gear_tweaks += new/datum/gear_tweak/path(banners) +/datum/gear/standard + display_name = "dominian great house standard selection" + path = /obj/item/flag + flags = GEAR_HAS_DESC_SELECTION + +/datum/gear/standard/New() + ..() + var/standards = list() + standards["standard, Strelitz"] = /obj/item/flag/strelitz + standards["standard, Volvalaad"] = /obj/item/flag/volvalaad + standards["standard, Kazkhz"] = /obj/item/flag/kazkhz + standards["standard, Caladius"] = /obj/item/flag/caladius + standards["standard, Zhao"] = /obj/item/flag/zhao + gear_tweaks += new/datum/gear_tweak/path(standards) + /datum/gear/flag display_name = "flag selection" cost = 2 @@ -129,6 +148,7 @@ /datum/gear/flag/New() ..() var/flags = list() + flags["flag, Stellar Corporate Conglomerate"] = /obj/item/flag/scc/l flags["flag, SolGov"] = /obj/item/flag/sol/l flags["flag, Dominia"] = /obj/item/flag/dominia/l flags["flag, Elyra"] = /obj/item/flag/elyra/l @@ -147,6 +167,8 @@ flags["flag, Zeng-Hu Pharmaceuticals"] = /obj/item/flag/zenghu/l flags["flag, Zavodskoi Interstellar"] = /obj/item/flag/zavodskoi/l flags["flag, Coalition of Colonies"] = /obj/item/flag/coalition/l + flags["flag, Confederate States of Fisanduh"] = /obj/item/flag/fisanduh/l + flags["flag, Gadpathur"] = /obj/item/flag/gadpathur/l gear_tweaks += new/datum/gear_tweak/path(flags) /datum/gear/towel @@ -162,6 +184,34 @@ display_name = "battlemonsters starter deck" path = /obj/item/battle_monsters/wrapped +/datum/gear/squidplushie + display_name = "colourable squid plushie" + path = /obj/item/toy/plushie/squidcolour + flags = GEAR_HAS_NAME_SELECTION | GEAR_HAS_DESC_SELECTION | GEAR_HAS_COLOR_SELECTION + +/datum/gear/plushie + display_name = "plushie selection" + path = /obj/item/toy/plushie + +/datum/gear/plushie/New() + ..() + var/plushies = list() + plushies["plushie, nymph"] = /obj/item/toy/plushie/nymph + plushies["plushie, mouse"] = /obj/item/toy/plushie/mouse + plushies["plushie, kitten"] = /obj/item/toy/plushie/kitten + plushies["plushie, lizard"] = /obj/item/toy/plushie/lizard + plushies["plushie, spider"] = /obj/item/toy/plushie/spider + plushies["plushie, farwa"] = /obj/item/toy/plushie/farwa + plushies["plushie, bear"] = /obj/item/toy/plushie/bear + plushies["plushie, firefighter bear"] = /obj/item/toy/plushie/bearfire + plushies["plushie, random squid"] = /obj/item/toy/plushie/squid //if someone can figure out how to make color work with these, good luck lmao + plushies["plushie, bee"] = /obj/item/toy/plushie/bee + plushies["plushie, schlorrgo"] = /obj/item/toy/plushie/schlorrgo + plushies["plushie, cool schlorrgo"] = /obj/item/toy/plushie/coolschlorrgo + plushies["plushie, slime"] = /obj/item/toy/plushie/slime + plushies["plushie, penny"] = /obj/item/toy/plushie/pennyplush + gear_tweaks += new/datum/gear_tweak/path(plushies) + /datum/gear/toothpaste display_name = "toothpaste and toothbrush" path = /obj/item/storage/box/toothpaste diff --git a/code/modules/client/preference_setup/loadout/loadout_head.dm b/code/modules/client/preference_setup/loadout/loadout_head.dm index e59e7e86da5..3b14802e748 100644 --- a/code/modules/client/preference_setup/loadout/loadout_head.dm +++ b/code/modules/client/preference_setup/loadout/loadout_head.dm @@ -216,6 +216,11 @@ gear_tweaks += new/datum/gear_tweak/path(hijab) +/datum/gear/head/hijab_colorable + display_name = "colorable hijab" + path = /obj/item/clothing/head/hijab/white + flags = GEAR_HAS_NAME_SELECTION | GEAR_HAS_DESC_SELECTION | GEAR_HAS_COLOR_SELECTION + /datum/gear/head/turban display_name = "turban selection" path = /obj/item/clothing/head/turban @@ -238,7 +243,7 @@ /datum/gear/head/surgical display_name = "surgical cap selection" path = /obj/item/clothing/head/surgery/blue - allowed_roles = list("Scientist", "Chief Medical Officer", "Physician", "Surgeon", "Pharmacist", "First Responder", "Medical Intern", "Xenobiologist", "Roboticist", "Research Director", "Forensic Technician") + allowed_roles = list("Scientist", "Chief Medical Officer", "Physician", "Surgeon", "Pharmacist", "First Responder", "Medical Intern", "Xenobiologist", "Roboticist", "Research Director", "Investigator") /datum/gear/head/surgical/New() ..() @@ -322,3 +327,8 @@ display_name = "fisanduhian ushanka" path = /obj/item/clothing/head/ushanka/dominia flags = GEAR_HAS_DESC_SELECTION + +/datum/gear/head/dominia_consular + display_name = "dominian consular cap" + path = /obj/item/clothing/head/dominia + allowed_roles = list("Consular Officer") diff --git a/code/modules/client/preference_setup/loadout/loadout_religion.dm b/code/modules/client/preference_setup/loadout/loadout_religion.dm index 13f041b1b81..d8cf691d9fc 100644 --- a/code/modules/client/preference_setup/loadout/loadout_religion.dm +++ b/code/modules/client/preference_setup/loadout/loadout_religion.dm @@ -68,3 +68,35 @@ /datum/gear/religion/shaman_staff display_name = "shaman staff" path = /obj/item/cane/shaman + +/datum/gear/religion/dominia/robe_consular + display_name = "tribunalist consular uniform" + description = "The traditional red-black-gold uniform of a priestly member of His Majesty's Diplomatic Service." + path = /obj/item/clothing/under/dominia/priest/consular + allowed_roles = list("Consular Officer") + +/datum/gear/religion/dominia/beret_consular + display_name = "tribunalist consular beret" + description = "A n elegant and well-tailored gold-and-red beret worn by priestly members of His Majesty's Diplomatic Service." + path = /obj/item/clothing/head/beret/dominia/consular + allowed_roles = list("Consular Officer") + +/datum/gear/religion/dominia/cape_consular + display_name = "tribunalist cousular cape" + description = "A truly majestic gold and red cape worn by members of the clergy affiliated with His Majesty's Diplomatic Service." + path = /obj/item/clothing/accessory/poncho/dominia/consular + allowed_roles = list("Consular Officer") + +/datum/gear/religion/assunzione/accessory + display_name = "luceian amulet" + path = "/obj/item/clothing/accessory/assunzione" + +/datum/gear/religion/assunzioneorb + display_name = "assunzione warding sphere" + description = "A religious artefact commonly associated with Luceism." + path = "/obj/item/assunzioneorb" + +/datum/gear/religion/assunzionesheath + display_name = "assunzione warding sphere sheath" + description = "A small metal shell designed to hold a warding sphere." + path = "/obj/item/storage/assunzionesheath" diff --git a/code/modules/client/preference_setup/loadout/loadout_smoking.dm b/code/modules/client/preference_setup/loadout/loadout_smoking.dm index d466f9b9ce9..bbc5280c853 100644 --- a/code/modules/client/preference_setup/loadout/loadout_smoking.dm +++ b/code/modules/client/preference_setup/loadout/loadout_smoking.dm @@ -80,7 +80,7 @@ /datum/gear/smoking/leaves/New() ..() var/leaves = list() - leaves["S'th Kasavakh tobacco leaves"] = /obj/item/storage/chewables/rollable/bad + leaves["S'th Kasavakh tobacco leaves"] = /obj/item/storage/chewables/rollable/unathi leaves["Agyre Lake tobacco leaves"] = /obj/item/storage/chewables/rollable leaves["Excelsior Epsilon tobacco leaves"] = /obj/item/storage/chewables/rollable/fine leaves["Golden Sol tobacco leaves"] = /obj/item/storage/chewables/rollable/nico diff --git a/code/modules/client/preference_setup/loadout/loadout_suit.dm b/code/modules/client/preference_setup/loadout/loadout_suit.dm index f335c74b300..7048007c572 100644 --- a/code/modules/client/preference_setup/loadout/loadout_suit.dm +++ b/code/modules/client/preference_setup/loadout/loadout_suit.dm @@ -23,8 +23,9 @@ ..() var/jackets = list() jackets["bomber jacket"] = /obj/item/clothing/suit/storage/toggle/bomber - jackets["corporate black jacket"] = /obj/item/clothing/suit/storage/toggle/leather_jacket/nanotrasen - jackets["corporate brown jacket"] = /obj/item/clothing/suit/storage/toggle/brown_jacket/nanotrasen + jackets["Stellar Corporate Conglomerate jacket"] = /obj/item/clothing/suit/storage/toggle/brown_jacket/scc + jackets["NanoTrasen black jacket"] = /obj/item/clothing/suit/storage/toggle/leather_jacket/nanotrasen + jackets["NanoTrasen brown jacket"] = /obj/item/clothing/suit/storage/toggle/brown_jacket/nanotrasen jackets["black jacket"] = /obj/item/clothing/suit/storage/toggle/leather_jacket jackets["brown jacket"] = /obj/item/clothing/suit/storage/toggle/brown_jacket jackets["biker jacket"] = /obj/item/clothing/suit/storage/toggle/leather_jacket/biker @@ -100,7 +101,7 @@ display_name = "surgical apron" path = /obj/item/clothing/suit/apron/surgery cost = 1 - allowed_roles = list("Scientist", "Chief Medical Officer", "Physician", "Surgeon", "Pharmacist", "First Responder", "Medical Intern", "Xenobiologist", "Roboticist", "Research Director", "Forensic Technician") + allowed_roles = list("Scientist", "Chief Medical Officer", "Physician", "Surgeon", "Pharmacist", "First Responder", "Medical Intern", "Xenobiologist", "Roboticist", "Research Director", "Investigator") /datum/gear/suit/medical_chest_rig display_name = "medic chest-rig" @@ -171,6 +172,8 @@ coat["trenchcoat, grey"] = /obj/item/clothing/suit/storage/toggle/trench/grey coat["trenchcoat, dark brown"] = /obj/item/clothing/suit/storage/toggle/trench/alt coat["trenchcoat, grey alternate"] = /obj/item/clothing/suit/storage/toggle/trench/grey_alt + coat["brown trenchcoat (Detective)"] = /obj/item/clothing/suit/storage/toggle/det_trench + coat["black trenchcoat (Detective)"] = /obj/item/clothing/suit/storage/toggle/det_trench/black gear_tweaks += new/datum/gear_tweak/path(coat) /datum/gear/suit/trenchcoat_colorable @@ -179,20 +182,6 @@ path = /obj/item/clothing/suit/storage/toggle/trench/colorable flags = GEAR_HAS_NAME_SELECTION | GEAR_HAS_DESC_SELECTION | GEAR_HAS_COLOR_SELECTION -/datum/gear/suit/det_trenchcoat - display_name = "detective trenchcoat selection" - description = "A selection of detective trenchcoats." - path = /obj/item/clothing/suit/storage/toggle/det_trench - allowed_roles = list("Detective") - -/datum/gear/suit/det_trenchcoat/New() - ..() - var/coat = list() - coat["brown trenchcoat (Detective)"] = /obj/item/clothing/suit/storage/toggle/det_trench - coat["black trenchcoat (Detective)"] = /obj/item/clothing/suit/storage/toggle/det_trench/black - gear_tweaks += new/datum/gear_tweak/path(coat) - - /datum/gear/suit/ian display_name = "worn shirt" description = "A worn out, curiously comfortable t-shirt with a picture of Ian." @@ -229,47 +218,47 @@ /datum/gear/suit/secjacketofficer display_name = "security jacket selection (Security Officer)" - path = /obj/item/clothing/suit/security/officer + path = /obj/item/clothing/suit/storage/security/officer allowed_roles = list("Security Officer", "Head of Security", "Warden") /datum/gear/suit/secjacketofficer/New() ..() var/secjacket = list() - secjacket["security jacket"] = /obj/item/clothing/suit/security/officer - secjacket["security jacket, blue"] = /obj/item/clothing/suit/security/officer/blue - secjacket["security jacket, dark navy"] = /obj/item/clothing/suit/security/officer/dnavy + secjacket["security jacket"] = /obj/item/clothing/suit/storage/security/officer + secjacket["security jacket, blue"] = /obj/item/clothing/suit/storage/security/officer/blue + secjacket["security jacket, dark navy"] = /obj/item/clothing/suit/storage/security/officer/dnavy gear_tweaks += new/datum/gear_tweak/path(secjacket) /datum/gear/suit/secjacketwarden display_name = "security jacket selection (Warden)" - path = /obj/item/clothing/suit/security/warden + path = /obj/item/clothing/suit/storage/security/warden allowed_roles = list("Head of Security", "Warden") /datum/gear/suit/secjacketwarden/New() ..() var/secjacket = list() - secjacket["security jacket"] = /obj/item/clothing/suit/security/warden - secjacket["security jacket, blue"] = /obj/item/clothing/suit/security/warden/blue - secjacket["security jacket, dark navy"] = /obj/item/clothing/suit/security/warden/dnavy + secjacket["security jacket"] = /obj/item/clothing/suit/storage/security/warden + secjacket["security jacket, blue"] = /obj/item/clothing/suit/storage/security/warden/blue + secjacket["security jacket, dark navy"] = /obj/item/clothing/suit/storage/security/warden/dnavy gear_tweaks += new/datum/gear_tweak/path(secjacket) /datum/gear/suit/secjackethos display_name = "security jacket selection (Head of Security)" - path = /obj/item/clothing/suit/security/hos + path = /obj/item/clothing/suit/storage/security/hos allowed_roles = list("Head of Security") /datum/gear/suit/secjackethos/New() ..() var/secjacket = list() - secjacket["security jacket"] = /obj/item/clothing/suit/security/hos - secjacket["security jacket, blue"] = /obj/item/clothing/suit/security/hos/blue - secjacket["security jacket, dark navy"] = /obj/item/clothing/suit/security/hos/dnavy + secjacket["security jacket"] = /obj/item/clothing/suit/storage/security/hos + secjacket["security jacket, blue"] = /obj/item/clothing/suit/storage/security/hos/blue + secjacket["security jacket, dark navy"] = /obj/item/clothing/suit/storage/security/hos/dnavy gear_tweaks += new/datum/gear_tweak/path(secjacket) /datum/gear/suit/secjacketforensictech display_name = "security jacket selection (Forensic Technician)" path = /obj/item/clothing/suit/storage/toggle/forensics - allowed_roles = list("Forensic Technician") + allowed_roles = list("Investigator") /datum/gear/suit/secjacketforensictech/New() ..() @@ -310,6 +299,12 @@ coat["dominian bomber jacket"] = /obj/item/clothing/suit/storage/toggle/dominia/bomber gear_tweaks += new/datum/gear_tweak/path(coat) +/datum/gear/suit/dominia/consular + display_name = "dominian consular officer greatcoat" + description = "A Dominian great coat belonging to the Diplomatic Service." + path = /obj/item/clothing/suit/storage/dominia/consular + allowed_roles = list("Consular Officer") + /datum/gear/suit/tcfl display_name = "Tau Ceti Foreign Legion jacket selection" description = "A selection of fine, surplus jackets of the Foreign Legion." @@ -383,6 +378,11 @@ cardigan["argyle cardigan"] = /obj/item/clothing/suit/storage/toggle/cardigan/argyle gear_tweaks += new/datum/gear_tweak/path(cardigan) +/datum/gear/suit/asymmetriccoat + display_name = "asymmetric coat" + path = /obj/item/clothing/suit/storage/toggle/asymmetriccoat + flags = GEAR_HAS_NAME_SELECTION | GEAR_HAS_DESC_SELECTION | GEAR_HAS_COLOR_SELECTION + /datum/gear/suit/himeo display_name = "himean coat selection" path = /obj/item/clothing/suit/storage/toggle/himeo @@ -398,15 +398,15 @@ /datum/gear/suit/vysoka display_name = "chokha selection" description = "A selection of Vysokan chokhas." - path = /obj/item/clothing/suit/storage/vysoka_m - flags = GEAR_HAS_DESC_SELECTION + path = /obj/item/clothing/suit/storage/vysoka + flags = GEAR_HAS_DESC_SELECTION | GEAR_HAS_COLOR_SELECTION /datum/gear/suit/vysoka/New() ..() - var/coat = list() - coat["feminine chokha"] = /obj/item/clothing/suit/storage/vysoka_f - coat["masculine chokha"] = /obj/item/clothing/suit/storage/vysoka_m - gear_tweaks += new/datum/gear_tweak/path(coat) + var/list/coat = list() + coat["feminine chokha"] = /obj/item/clothing/suit/storage/vysoka/f + coat["masculine chokha"] = /obj/item/clothing/suit/storage/vysoka + gear_tweaks += new /datum/gear_tweak/path(coat) /datum/gear/suit/submariner display_name = "submariner jacket" @@ -416,4 +416,4 @@ /datum/gear/suit/gadpathur display_name = "gadpathurian overcoat" path = /obj/item/clothing/suit/storage/gadpathur - flags = GEAR_HAS_DESC_SELECTION + flags = GEAR_HAS_DESC_SELECTION \ No newline at end of file diff --git a/code/modules/client/preference_setup/loadout/loadout_uniform.dm b/code/modules/client/preference_setup/loadout/loadout_uniform.dm index 4efbc9620e4..d8bde7020e2 100644 --- a/code/modules/client/preference_setup/loadout/loadout_uniform.dm +++ b/code/modules/client/preference_setup/loadout/loadout_uniform.dm @@ -96,7 +96,7 @@ /datum/gear/uniform/scrubs display_name = "scrubs selection" path = /obj/item/clothing/under/rank/medical/black - allowed_roles = list("Scientist","Chief Medical Officer", "Physician", "Surgeon", "Pharmacist", "First Responder", "Medical Intern", "Xenobiologist", "Roboticist", "Research Director", "Forensic Technician") + allowed_roles = list("Scientist","Chief Medical Officer", "Physician", "Surgeon", "Pharmacist", "First Responder", "Medical Intern", "Xenobiologist", "Roboticist", "Research Director", "Investigator") /datum/gear/uniform/scrubs/New() ..() @@ -176,6 +176,7 @@ pants["athletic shorts, green"] = /obj/item/clothing/under/shorts/green pants["athletic shorts, black"] = /obj/item/clothing/under/shorts/black pants["athletic shorts, grey"] = /obj/item/clothing/under/shorts/grey + pants["Stellar Corporate Conglomerate shorts"] = /obj/item/clothing/under/shorts/scc pants["jean shorts"] = /obj/item/clothing/under/shorts/jeans pants["jean short shorts"] = /obj/item/clothing/under/shorts/jeans/female pants["classic jeans shorts"] = /obj/item/clothing/under/shorts/jeans/classic @@ -239,9 +240,22 @@ suit["[D.name]"] = D.type gear_tweaks += new/datum/gear_tweak/path(suit) +/datum/gear/uniform/dominia_consular + display_name = "dominian consular clothing selection" + description = "A selection of Dominian clothing belonging to the Diplomatic Service." + path = /obj/item/clothing/under/dominia/consular + allowed_roles = list("Consular Officer") + +/datum/gear/uniform/dominia_consular/New() + ..() + var/list/consular = list() + consular["dominian consular officer's uniform, masculine"] = /obj/item/clothing/under/dominia/consular + consular["dominian consular officer's uniform, feminine"] = /obj/item/clothing/under/dominia/consular/dress + gear_tweaks += new/datum/gear_tweak/path(consular) + /datum/gear/uniform/elyra_holo display_name = "elyran holographic suit selection" - description = "A marvel of Elyran technology, uses hardlight fabric and masks to transform a skin-tight, cozy suit into cultural apparel of your choosing. Has a dial for Midenean, Aemaqii and Perispolisean clothes respectively." + description = "A marvel of Elyran technology, uses hardlight fabric and masks to transform a skin-tight, cozy suit into cultural apparel of your choosing. Has a dial for Midenean, Aemaqii and Persepolis clothes respectively." path = /obj/item/clothing/under/elyra_holo flags = GEAR_HAS_DESC_SELECTION @@ -275,7 +289,7 @@ display_name = "uniforms, (Investigations)" description = "A selection of Investigations staff uniforms." path = /obj/item/clothing/under/det - allowed_roles = list("Detective", "Forensic Technician") + allowed_roles = list("Investigator") /datum/gear/uniform/detective/New() ..() diff --git a/code/modules/client/preference_setup/loadout/loadout_utility.dm b/code/modules/client/preference_setup/loadout/loadout_utility.dm index 2cdab346eee..4036c8e850c 100644 --- a/code/modules/client/preference_setup/loadout/loadout_utility.dm +++ b/code/modules/client/preference_setup/loadout/loadout_utility.dm @@ -50,6 +50,7 @@ fountainpens["silver fountain pen"] = /obj/item/pen/fountain/silver fountainpens["white fountain pen"] = /obj/item/pen/fountain/white gear_tweaks += new/datum/gear_tweak/path(fountainpens) + /datum/gear/utility/paicard display_name = "personal AI device" path = /obj/item/device/paicard @@ -73,22 +74,42 @@ /datum/gear/utility/recorder display_name = "universal recorder" - path = /obj/item/device/taperecorder + path = /obj/item/device/taperecorder /datum/gear/utility/camera display_name = "camera" - path = /obj/item/device/camera + path = /obj/item/device/camera /datum/gear/utility/himeo_kit display_name = "himean voidsuit kit" - path = /obj/item/himeo_kit + path = /obj/item/voidsuit_modkit/himeo allowed_roles = list("Cargo Technician", "Shaft Miner", "Quartermaster", "Head of Personnel", "Station Engineer", "Atmospheric Technician", "Chief Engineer", "Engineering Apprentice") /datum/gear/utility/wheelchair/color - display_name = "wheelchair" - path = /obj/item/wheelchair - cost = 4 + display_name = "wheelchair" + path = /obj/item/wheelchair + cost = 4 /datum/gear/utility/wheelchair/color/New() ..() gear_tweaks += gear_tweak_free_color_choice + +/datum/gear/utility/business_card_holder + display_name = "business card holder" + path = /obj/item/storage/business_card_holder + flags = GEAR_HAS_NAME_SELECTION | GEAR_HAS_DESC_SELECTION | GEAR_HAS_COLOR_SELECTION + +/datum/gear/utility/business_card + display_name = "business card" + path = /obj/item/paper/business_card + flags = 0 + +/datum/gear/utility/business_card/New() + ..() + var/list/cards = list() + cards["business card, divided"] = /obj/item/paper/business_card + cards["business card, plain"] = /obj/item/paper/business_card/alt + cards["business card, rounded"] = /obj/item/paper/business_card/rounded + cards["business card, glass"] = /obj/item/paper/business_card/glass + gear_tweaks += new /datum/gear_tweak/path(cards) + gear_tweaks += new /datum/gear_tweak/paper_data() \ No newline at end of file diff --git a/code/modules/client/preference_setup/loadout/loadout_xeno/human.dm b/code/modules/client/preference_setup/loadout/loadout_xeno/human.dm index c333c3fda6e..b70b3b3124d 100644 --- a/code/modules/client/preference_setup/loadout/loadout_xeno/human.dm +++ b/code/modules/client/preference_setup/loadout/loadout_xeno/human.dm @@ -80,4 +80,10 @@ display_name = "exo-stellar skeleton" path = /obj/item/rig/light/offworlder whitelisted = list(SPECIES_HUMAN_OFFWORLD) - sort_category = "Xenowear - Human" \ No newline at end of file + sort_category = "Xenowear - Human" + +/datum/gear/accessory/offworlder_card + display_name = "scarab passblade" + path = /obj/item/clothing/accessory/badge/passcard/scarab + whitelisted = list(SPECIES_HUMAN_OFFWORLD) + sort_category = "Xenowear - Human" diff --git a/code/modules/client/preference_setup/loadout/loadout_xeno/machine.dm b/code/modules/client/preference_setup/loadout/loadout_xeno/machine.dm index f4c84b6f2bf..e6f8ceee433 100644 --- a/code/modules/client/preference_setup/loadout/loadout_xeno/machine.dm +++ b/code/modules/client/preference_setup/loadout/loadout_xeno/machine.dm @@ -103,7 +103,7 @@ path = /obj/item/clothing/suit/armor/vest/idris whitelisted = list(SPECIES_IPC, SPECIES_IPC_G1, SPECIES_IPC_G2, SPECIES_IPC_XION, SPECIES_IPC_ZENGHU, SPECIES_IPC_BISHOP, SPECIES_IPC_SHELL) sort_category = "Xenowear - IPC" - allowed_roles = list("Security Officer", "Warden", "Head of Security","Detective", "Forensic Technician", "Security Cadet") + allowed_roles = list("Security Officer", "Warden", "Head of Security", "Investigator", "Security Cadet") flags = GEAR_HAS_DESC_SELECTION /datum/gear/suit/idris/New() @@ -133,3 +133,24 @@ goldendeep["golden deep suit"] = /obj/item/clothing/under/goldendeep/suit goldendeep["golden deep skirtsuit"] = /obj/item/clothing/under/goldendeep/skirtsuit gear_tweaks += new/datum/gear_tweak/path(goldendeep) + +/datum/gear/augment/machine/gustatorial + display_name = "gustatorial centre (tongue)" + description = "An extremely complex augment, capable of translating taste into binary code, allowing synthetic beings to experience food." + path = /obj/item/organ/internal/augment/gustatorial + cost = 1 + whitelisted = list(SPECIES_IPC_SHELL) + sort_category = "Xenowear - IPC" + +/datum/gear/augment/machine/gustatorial/hands + display_name = "gustatorial centre (hands)" + description = "An extremely complex augment, capable of translating taste into binary code, allowing synthetic beings to experience food." + path = /obj/item/organ/internal/augment/gustatorial/hand + whitelisted = list(SPECIES_IPC, SPECIES_IPC_G1, SPECIES_IPC_G2, SPECIES_IPC_XION, SPECIES_IPC_ZENGHU, SPECIES_IPC_BISHOP, SPECIES_IPC_SHELL) + +/datum/gear/augment/machine/gustatorial/hands/New() + ..() + var/list/handies = list() + handies["gustatorial centre (right hand)"] = /obj/item/organ/internal/augment/gustatorial/hand + handies["gustatorial centre (left hand)"] = /obj/item/organ/internal/augment/gustatorial/hand/left + gear_tweaks += new /datum/gear_tweak/path(handies) \ No newline at end of file diff --git a/code/modules/client/preference_setup/loadout/loadout_xeno/unathi.dm b/code/modules/client/preference_setup/loadout/loadout_xeno/unathi.dm index c289e26a009..aa0adde915b 100644 --- a/code/modules/client/preference_setup/loadout/loadout_xeno/unathi.dm +++ b/code/modules/client/preference_setup/loadout/loadout_xeno/unathi.dm @@ -203,4 +203,10 @@ var/augs = list() augs["farseer eye"] = /obj/item/organ/internal/augment/farseer_eye augs["eye flashlight"] = /obj/item/organ/internal/augment/eye_flashlight - gear_tweaks += new /datum/gear_tweak/path(augs) \ No newline at end of file + gear_tweaks += new /datum/gear_tweak/path(augs) + +/datum/gear/religion/shaman_staff + display_name = "shaman staff" + path = /obj/item/cane/shaman + sort_category = "Xenowear - Unathi" + whitelisted = list(SPECIES_UNATHI) \ No newline at end of file diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index dbe0c5c4059..bcaffb62bc2 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -37,6 +37,7 @@ datum/preferences var/can_edit_name = TRUE //Whether or not a character's name can be edited. Used with SQL saving. var/can_edit_ipc_tag = TRUE var/gender = MALE //gender of character (well duh) + var/pronouns = NEUTER //what the character will appear as to others when examined var/age = 30 //age of character var/spawnpoint = "Arrivals Shuttle" //where this character will spawn (0-2). var/b_type = "A+" //blood type (not-chooseable) @@ -149,7 +150,7 @@ datum/preferences // SPAAAACE var/parallax_speed = 2 - var/toggles_secondary = PARALLAX_SPACE | PARALLAX_DUST | PROGRESS_BARS | FLOATING_MESSAGES + var/toggles_secondary = PARALLAX_SPACE | PARALLAX_DUST | PROGRESS_BARS | FLOATING_MESSAGES | HOTKEY_DEFAULT var/clientfps = 0 var/list/pai = list() // A list for holding pAI related data. @@ -424,6 +425,7 @@ datum/preferences character.exploit_record = exploit_record character.gender = gender + character.pronouns = pronouns character.age = age character.b_type = b_type @@ -506,8 +508,7 @@ datum/preferences for(var/ckey in preferences_datums) var/datum/preferences/D = preferences_datums[ckey] if(D == src) - establish_db_connection(dbcon) - if(!dbcon.IsConnected()) + if(!establish_db_connection(dbcon)) return open_load_dialog_file(user) var/DBQuery/query = dbcon.NewQuery("SELECT id, name FROM ss13_characters WHERE ckey = :ckey: AND deleted_at IS NULL ORDER BY id ASC") diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm index 77375eb085f..bbea9f1284c 100644 --- a/code/modules/clothing/chameleon.dm +++ b/code/modules/clothing/chameleon.dm @@ -103,27 +103,27 @@ //**Chameleon Hat** //***************** -/obj/item/clothing/head/softcap/chameleon +/obj/item/clothing/head/chameleon name = "grey cap" desc = "It looks like a plain hat, but upon closer inspection, there's an advanced holographic array installed inside. It seems to have a small dial inside." origin_tech = list(TECH_ILLEGAL = 3) body_parts_covered = 0 var/global/list/clothing_choices -/obj/item/clothing/head/softcap/chameleon/Initialize() +/obj/item/clothing/head/chameleon/Initialize() . = ..() if(!clothing_choices) var/blocked = list(src.type, /obj/item/clothing/head/justice,)//Prevent infinite loops and bad hats. clothing_choices = generate_chameleon_choices(/obj/item/clothing/head, blocked) -/obj/item/clothing/head/softcap/chameleon/emp_act(severity) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown. +/obj/item/clothing/head/chameleon/emp_act(severity) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown. name = initial(name) desc = "It's a baseball hat in a tasteful grey colour." icon_state = initial(icon_state) update_icon() update_clothing_icon() -/obj/item/clothing/head/softcap/chameleon/verb/change(picked in clothing_choices) +/obj/item/clothing/head/chameleon/verb/change(picked in clothing_choices) set name = "Change Hat/Helmet Appearance" set category = "Chameleon Items" set src in usr @@ -134,14 +134,14 @@ disguise(clothing_choices[picked]) update_clothing_icon() //so our overlays update. -/obj/item/clothing/head/softcap/chameleon/wizard +/obj/item/clothing/head/chameleon/wizard wizard_garb = TRUE -/obj/item/clothing/head/softcap/chameleon/wizard/Initialize() +/obj/item/clothing/head/chameleon/wizard/Initialize() . = ..() disguise(/obj/item/clothing/head/wizard) -/obj/item/clothing/head/softcap/chameleon/wizard/change(picked in clothing_choices) +/obj/item/clothing/head/chameleon/wizard/change(picked in clothing_choices) set name = "Change Hat/Helmet Appearance" set category = "Chameleon Items" set src in usr @@ -153,7 +153,7 @@ return to_chat(usr, SPAN_WARNING("You touch \the [src], but nothing happens.")) -/obj/item/clothing/head/softcap/chameleon/wizard/emp_act() +/obj/item/clothing/head/chameleon/wizard/emp_act() return //****************** diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 4b76e1a205e..7dd26257961 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -39,6 +39,7 @@ for(var/T in starting_accessories) var/obj/item/clothing/accessory/tie = new T(src) src.attach_accessory(null, tie) + update_icon() /obj/item/clothing/Destroy() STOP_PROCESSING(SSprocessing, src) @@ -58,13 +59,13 @@ return 0 //BS12: Species-restricted clothing check. -/obj/item/clothing/mob_can_equip(M as mob, slot, disable_warning = FALSE) +/obj/item/clothing/mob_can_equip(M as mob, slot, disable_warning = FALSE, bypass_blocked_check = FALSE) //if we can't equip the item anyway, don't bother with species_restricted (cuts down on spam) if (!..()) return 0 - if(species_restricted && istype(M,/mob/living/carbon/human)) + if(species_restricted && ishuman(M) && !(slot in list(slot_l_hand, slot_r_hand))) var/exclusive = null var/wearable = null var/mob/living/carbon/human/H = M @@ -81,7 +82,8 @@ wearable = 1 if(!wearable && !(slot in list(slot_l_store, slot_r_store, slot_s_store))) - to_chat(H, SPAN_DANGER("Your species cannot wear [src].")) + if(!disable_warning) + to_chat(H, SPAN_DANGER("Your species cannot wear [src].")) return 0 return 1 @@ -533,7 +535,6 @@ return our_image /obj/item/clothing/head/update_icon(var/mob/user) - cut_overlays() var/mob/living/carbon/human/H if(istype(user,/mob/living/carbon/human)) @@ -551,6 +552,8 @@ var/use_icon = 'icons/mob/light_overlays.dmi' SSicon_cache.light_overlay_cache[cache_key] = image("icon" = use_icon, "icon_state" = "[light_overlay]") + ..() + if(H) H.update_inv_head() @@ -882,7 +885,9 @@ H = src.loc var/icon/under_icon - if(icon_override) + if(contained_sprite) + under_icon = icon + else if(icon_override) under_icon = icon_override else if(H && sprite_sheets && sprite_sheets[H.species.get_bodytype()]) under_icon = sprite_sheets[H.species.get_bodytype()] @@ -892,7 +897,7 @@ under_icon = INV_W_UNIFORM_DEF_ICON // The _s is because the icon update procs append it. - if(("[worn_state]_d_s") in icon_states(under_icon)) + if(("[worn_state]_d[contained_sprite ? "_un" : "_s"]") in icon_states(under_icon)) if(rolled_down != 1) rolled_down = 0 else @@ -905,7 +910,9 @@ H = src.loc var/icon/under_icon - if(icon_override) + if(contained_sprite) + under_icon = icon + else if(icon_override) under_icon = icon_override else if(H && sprite_sheets && sprite_sheets[H.species.get_bodytype(H)]) under_icon = sprite_sheets[H.species.get_bodytype(H)] @@ -915,7 +922,7 @@ under_icon = INV_W_UNIFORM_DEF_ICON // The _s is because the icon update procs append it. - if(("[worn_state]_r_s") in icon_states(under_icon)) + if(("[worn_state]_r[contained_sprite ? "_un" : "_s"]") in icon_states(under_icon)) if(rolled_sleeves != 1) rolled_sleeves = 0 else diff --git a/code/modules/clothing/clothing_accessories.dm b/code/modules/clothing/clothing_accessories.dm index c9f7725f657..6d72a7743ef 100644 --- a/code/modules/clothing/clothing_accessories.dm +++ b/code/modules/clothing/clothing_accessories.dm @@ -66,11 +66,11 @@ if("right hand") if(istype(src, /obj/item/clothing/ears)) C = check_two_ears(usr) - usr.put_in_r_hand(C) + usr.equip_to_slot_if_possible(C, slot_r_hand) if("left hand") if(istype(src, /obj/item/clothing/ears)) C = check_two_ears(usr) - usr.put_in_l_hand(C) + usr.equip_to_slot_if_possible(C, slot_l_hand) src.add_fingerprint(usr) /obj/item/clothing/proc/check_two_ears(var/mob/user) diff --git a/code/modules/clothing/ears/bandanna.dm b/code/modules/clothing/ears/bandanna.dm index c8b2025f163..4d566f4f178 100644 --- a/code/modules/clothing/ears/bandanna.dm +++ b/code/modules/clothing/ears/bandanna.dm @@ -22,3 +22,11 @@ desc = "A plain black bandanna." icon_state = "band_bk" item_state = "band_bk" + +/obj/item/clothing/ears/bandanna_colorable + name = "neck bandanna" + desc = "A bandanna in 16,777,216 designer colors that goes around the neck." + icon_state = "band_wh" + item_state = "band_wh" + w_class = ITEMSIZE_TINY + slot_flags = SLOT_EARS \ No newline at end of file diff --git a/code/modules/clothing/factions/dominia.dm b/code/modules/clothing/factions/dominia.dm index 9802762074c..ef9ce82e515 100644 --- a/code/modules/clothing/factions/dominia.dm +++ b/code/modules/clothing/factions/dominia.dm @@ -79,6 +79,15 @@ icon_state = "zhao_cape" item_state = "zhao_cape" +/obj/item/clothing/suit/storage/dominia/consular + name = "Dominian consular officer's greatcoat" + desc = "A Dominian greatcoat issued to members of His Majesty's Diplomatic Service, designed in the typical Dominian fashion." + desc_fluff = "His Majesty's Diplomatic Service - as with much of the Empire tends to be dominated by the great houses, though \ + the Service also employs many commoners - as long as they can pass the rigorous examinations required to become a full member." + icon = 'icons/clothing/suits/coats/dominia_consular_coat.dmi' + icon_state = "dominia_consular_coat" + item_state = "dominia_consular_coat" + /obj/item/clothing/suit/storage/toggle/dominia name = "dominia great coat" desc = "This is a great coat in the style of Dominia nobility. It's the latest fashion across Dominian space." @@ -111,62 +120,9 @@ icon_state = "dominia_uniform_red" item_state = "dominia_uniform_red" contained_sprite = TRUE + rolled_sleeves = FALSE rolled_down = FALSE - var/has_down_and_sleeves = TRUE - -/obj/item/clothing/under/dominia/rollsuit() - set name = "Roll Down Jumpsuit" - set category = "Object" - set src in usr - - if(use_check_and_message(usr)) - return - if(has_down_and_sleeves == FALSE) - to_chat(usr, SPAN_NOTICE("You cannot roll down the [src]!")) - return - - if((rolled_sleeves == TRUE) && !(rolled_down)) - rolled_sleeves = FALSE - - if(rolled_down) - body_parts_covered = initial(body_parts_covered) - item_state = "[initial(item_state)]" // REMINDER!: Contained Sprites automatically take out the _un after the spritename, somehow. - to_chat(usr, SPAN_NOTICE("You roll up your [src].")) - rolled_down = FALSE - else - body_parts_covered &= LOWER_TORSO|LEGS|FEET - item_state = "[initial(item_state)]_d" - to_chat(usr, SPAN_NOTICE("You roll down your [src].")) - rolled_down = TRUE - update_clothing_icon() - -/obj/item/clothing/under/dominia/rollsleeves() - set name = "Roll Up Sleeves" - set category = "Object" - set src in usr - - if(use_check_and_message(usr)) - return - if(has_down_and_sleeves == FALSE) - to_chat(usr, SPAN_NOTICE("You cannot roll up your [src]'s sleeves!")) - return - - if(rolled_down == TRUE) - to_chat(usr, SPAN_NOTICE("You must roll up your [src] first!")) - return - - if(rolled_sleeves) - body_parts_covered = initial(body_parts_covered) - item_state = "[initial(item_state)]" // REMINDER!: Contained Sprites automatically take out the _un after the spritename, somehow. - to_chat(usr, SPAN_NOTICE("You roll down your [src]'s sleeves.")) - rolled_sleeves = FALSE - else - body_parts_covered &= ~(ARMS|HANDS) - item_state = "[initial(item_state)]_r" - to_chat(usr, SPAN_NOTICE("You roll up your [src]'s sleeves.")) - rolled_sleeves = TRUE - update_clothing_icon() /obj/item/clothing/under/dominia/black icon = 'icons/clothing/under/uniforms/dominia_uniform_black.dmi' @@ -357,6 +313,35 @@ update_icon() update_clothing_icon() +/obj/item/clothing/accessory/poncho/dominia/consular + name = "tribunalist consular's cape" + desc = "A truly majestic gold and red cape worn by members of the clergy affiliated with His Majesty's Diplomatic Service." + desc_fluff = "His Majesty's Diplomatic Service - as with much of the Empire tends to be dominated by the great houses, though the Service also \ + employs may commoners - as long as they can pass the rigorous examinations required to become a full member of the Diplomatic Service." + icon = 'icons/clothing/suits/capes/dominia_consular_cape.dmi' + icon_state = "dominia_cape_consular" + item_state = "dominia_cape_consular" + overlay_state = "dominia_cape_consular" + contained_sprite = TRUE + icon_override = null + var/rolled = FALSE + +/obj/item/clothing/under/dominia/consular + name = "dominian consular officer's uniform" + desc = "The traditional red-black-gold uniform of a member of His Majesty's Diplomatic Service." + desc_fluff = "His Majesty's Diplomatic Service - as with much of the Empire tends to be dominated by the great houses, though the Service also employs many \ + commoners - as long as they can pass the rigorous examinations required to become a full member of the Diplomatic Service." + icon = 'icons/clothing/under/uniforms/dominia_consular.dmi' + icon_state = "dominia_consular" + item_state = "dominia_consular" + +/obj/item/clothing/under/dominia/consular/dress + name = "dominian consular officer's uniform" + desc = "The traditional red-black-gold uniform of a member of His Majesty's Diplomatic Service. This variant has a skirt, for the female diplomat on the go." + icon = 'icons/clothing/under/uniforms/dominia_consular.dmi' + icon_state = "dominia_consular_fem" + item_state = "dominia_consular_fem" + /obj/item/clothing/under/dominia/initiate name = "tribunal initiate's robe" desc = "A simple white robe with red trim and a red sash to fasten it. It's commonly worn by initiates of the Moroz Holy Tribunal." @@ -380,8 +365,28 @@ item_state = "dominia_priest" slot_flags = SLOT_OCLOTHING | SLOT_ICLOTHING +/obj/item/clothing/under/dominia/priest/consular + name = "tribunalist consular's uniform" + desc = "The traditional red-black-gold uniform of a priestly member of His Majesty's Diplomatic Service." + desc_fluff = "His Majesty's Diplomatic Service - as with much of the Empire tends to be dominated by the great houses, though the Service also employs many commoners \ + - as long as they can pass the rigorous examinations required to become a full member of the Diplomatic Service." + icon = 'icons/clothing/under/uniforms/dominia_consular_priest.dmi' + icon_state = "dominia_consular_priest" + item_state = "dominia_consular_priest" + slot_flags = SLOT_OCLOTHING | SLOT_ICLOTHING + +/obj/item/clothing/head/dominia + name = "dominian consular officer's dress cap" + desc = "A quite fashionable cap issued to the members of His Majesty's Diplomatic Service." + desc_fluff = "His Majesty's Diplomatic Service - as with much of the Empire tends to be dominated by the great houses, though the Service also employs many \ + commoners - as long as they can pass the rigorous examinations required to become a full member of the Diplomatic Service." + icon = 'icons/clothing/head/dominia_consular_cap.dmi' + icon_state = "dominia_consular_cap" + item_state = "dominia_consular_cap" + contained_sprite = TRUE + /obj/item/clothing/head/beret/dominia - name = "tribunal initiate’s beret" + name = "tribunal initiate's beret" desc = "A simple red beret with a golden badge marking its wearer as an initiate of the Moroz Holy Tribunal." desc_fluff = " While initiates dress humbly in white and red clothing, this does not mean that House Caladius - the primary source of the Holy Tribunal's \ funding - spares any expenses funding them, and these berets are made of luxurious velvet." @@ -390,14 +395,23 @@ item_state = "dominia_beret" /obj/item/clothing/head/beret/dominia/priest - name = "tribunalist’s beret" - desc = " black beret bearing the sigil of the Moroz Holy Tribunal on its front. Worn by full members of the Tribunal’s clergy." + name = "tribunalist's beret" + desc = " black beret bearing the sigil of the Moroz Holy Tribunal on its front. Worn by full members of the Tribunal's clergy." desc_fluff = "With their black and gold clothing designed to resemble that of their noble counterparts, the full clergy of the Moroz Holy Tribunal \ are a sight to behold both inside and outside of the Empire of Dominia. This beret features an emblem luxuriously and painstakingly crafted out of real gold." icon = 'icons/clothing/head/dominia_beret_priest.dmi' icon_state = "dominia_beret_priest" item_state = "dominia_beret_priest" +/obj/item/clothing/head/beret/dominia/consular + name = "tribunalist’s beret" + desc = "A beret in gold and red worn by members of the clergy affiliated with His Majesty's Diplomatic Service." + desc_fluff = "His Majesty's Diplomatic Service - as with much of the Empire tends to be dominated by the great houses, though the Service also employs may commoners - \ + as long as they can pass the rigorous examinations required to become a full member of the Diplomatic Service." + icon = 'icons/clothing/head/dominia_beret_consular.dmi' + icon_state = "dominia_beret_consular_priest" + item_state = "dominia_beret_consular_priest" + /obj/item/clothing/accessory/dominia name = "tribunal necklace" desc = "An amulet depicting 'The Eye', a prominent symbol of the Moroz Holy Tribunal worn by its clergy and layfolk alike." @@ -419,8 +433,8 @@ name = "Morozi dress" desc = "Feminine commoner's fashion from the Empire of Dominia. This particular variant has sleeves." desc_fluff = "Dresses such as this one are a common sight in the more developed colonies of the Empire of Dominia, and their origins can be traced back to \ - the fashion houses of Nova Luxembourg. While both sleeved and sleeveless variants exist, the sleeved one is far more common \ - due to the often frigid temperatures of Moroz." + the fashion houses of Nova Luxembourg. While both sleeved and sleeveless variants exist, the sleeved one is far more common \ + due to the often frigid temperatures of Moroz." icon = 'icons/clothing/under/uniforms/dominia_dresses.dmi' icon_state = "morozi_dress" item_state = "morozi_dress" @@ -494,4 +508,42 @@ name = "sleeveless house kazhkz Morozi dress" house = "kazhkz" +/obj/item/clothing/accessory/dominia/sash + name = "dominian sash" + desc = "A sash worn by commoners affiliated with a Dominian great house, intended for use when a cape is impractical. This one seems to represent Dominia as a whole, however." + desc_fluff = "Sashes such as this one are a common sight throughout the Empire of Dominia, though they are hardly as fashionable as the typical cape. While they are \ + often used in formal uniforms - such as for attendants and domestic staff - these sashes can also be found used in positions where wearing a cape is impractical, such as the medical field." + icon = 'icons/clothing/accessories/dominia_sash.dmi' + item_state = "dominia_sash" + icon_state = "dominia_sash" + contained_sprite = TRUE +/obj/item/clothing/accessory/dominia/sash/strelitz + name = "strelitz sash" + desc = "A sash worn by commoners affiliated with a Dominian great house, intended for use when a cape is impractical. This one marks its wearer as an affiliate of House Strelitz." + item_state = "strelitz_sash" + icon_state = "strelitz_sash" + +/obj/item/clothing/accessory/dominia/sash/volvalaad + name = "volvalaad sash" + desc = "A sash worn by commoners affiliated with a Dominian great house, intended for use when a cape is impractical. This one marks its wearer as an affiliate of House Volvalaad." + item_state = "volvalaad_sash" + icon_state = "volvalaad_sash" + +/obj/item/clothing/accessory/dominia/sash/kazhkz + name = "kazhkz sash" + desc = "A sash worn by commoners affiliated with a Dominian great house, intended for use when a cape is impractical. This one marks its wearer as an affiliate of House Kazhkz." + item_state = "kazhkz_sash" + icon_state = "kazhkz_sash" + +/obj/item/clothing/accessory/dominia/sash/caladius + name = "caladius sash" + desc = "A sash worn by commoners affiliated with a Dominian great house, intended for use when a cape is impractical. This one marks its wearer as an affiliate of House Caladius." + item_state = "caladius_sash" + icon_state = "caladius_sash" + +/obj/item/clothing/accessory/dominia/sash/zhao + name = "zhao sash" + desc = "A sash worn by commoners affiliated with a Dominian great house, intended for use when a cape is impractical. This one marks its wearer as an affiliate of House Zhao." + item_state = "zhao_sash" + icon_state = "zhao_sash" \ No newline at end of file diff --git a/code/modules/clothing/factions/elyra.dm b/code/modules/clothing/factions/elyra.dm index a9ae302e54e..a7cfe6a9508 100644 --- a/code/modules/clothing/factions/elyra.dm +++ b/code/modules/clothing/factions/elyra.dm @@ -1,6 +1,6 @@ /obj/item/clothing/under/elyra_holo name = "elyran holographic suit" - desc = "A marvel of Elyran technology, uses hardlight fabric and masks to transform a skin-tight, cozy suit into cultural apparel of your choosing. Has a dial for Midenean, Aemaqii and Perispolisean clothes respectively." + desc = "A marvel of Elyran technology, uses hardlight fabric and masks to transform a skin-tight, cozy suit into cultural apparel of your choosing. Has a dial for Midenean, Aemaqii and Persepolisean clothes respectively." icon = 'icons/clothing/under/uniforms/elyra_holoclothes.dmi' icon_state = "holosuit_fem" item_state = "holosuit_fem" @@ -12,13 +12,13 @@ "base holographic suit", "medinean artisans holo-dress", "aemaqii ocean holo-dress", - "perispolisean desert holo-dress" + "persepolisean desert holo-dress" ) var/list/descriptions = list( "A form-fitting holographic dress with striking purple and white coloration. It possesses high-fidelity, artistic representation of Elyran Medinean culture markers coating its tightly-woven hardlight fabric.", "A fine holo-dress which owes its overall design to the chemical seas of Aemaqq, with itself flowing gently in waves. It looks particularly cozy, and protective against a cold ocean breeze.", - "A loose, airy holo-dress with clashing earthen and bright colors. The design is iconic among the Elyran Perispolisean native populations due to its expressive contrast and the hot climate." + "A loose, airy holo-dress with clashing earthen and bright colors. The design is iconic among the Elyran Persepolisean native populations due to its expressive contrast and the hot climate." ) /obj/item/clothing/under/elyra_holo/masc @@ -28,12 +28,12 @@ "base holographic suit", "medinean artisans holo-suit", "aemaqii fur outfit", - "perispolisean nomads outfit" + "persepolisean nomads outfit" ) descriptions = list( "A tight-fitting hardlight suit decorated with golden highlights to contrast its red, purplish overshirt and jet black pants. A favorite among the Elyran planet of Medina.", "High quality, and colorful fur derived from the colder regions of Aemaqq's chemical seas. Were this outfit real, you'd probably assume the thick, stump and even branch-like fur to be extracted from one of its countless sea leviathans. Even the holographic variant is excellent at trapping heat.", - "A loose holographic outfit, sturdy, baggy and cool with plentiful pockets. The baggy over-wear is a trend on the Elyran world Perispolis due to its hot climate, and this particular style has spread like wildfire across other warm worlds as well. " + "A loose holographic outfit, sturdy, baggy and cool with plentiful pockets. The baggy over-wear is a trend on the Elyran world Persepolis due to its hot climate, and this particular style has spread like wildfire across other warm worlds as well. " ) /obj/item/clothing/under/elyra_holo/Initialize() diff --git a/code/modules/clothing/factions/vysoka.dm b/code/modules/clothing/factions/vysoka.dm index b7d71d7e06a..24a2723bb87 100644 --- a/code/modules/clothing/factions/vysoka.dm +++ b/code/modules/clothing/factions/vysoka.dm @@ -1,16 +1,15 @@ -/obj/item/clothing/suit/storage/vysoka_m +/obj/item/clothing/suit/storage/vysoka name = "chokha" - desc = " A woolen coat with a high neck commonly worn on Vysoka." + desc = "A woolen coat with a high neck commonly worn on Vysoka." desc_fluff = "Chokhas are a common choice of outerwear for men and women on Vysoka, and are often colored differently based on their city - or host - of origin. The chokha has become something of a cultural symbol of Vysoka, and is often worn off-world by its citizens." icon = 'icons/clothing/suits/coats/vysoka_chokha_male.dmi' icon_state = "chokha_vysoka_m" item_state = "chokha_vysoka_m" contained_sprite = TRUE + build_from_parts = TRUE + worn_overlay = "accessories" -/obj/item/clothing/suit/storage/vysoka_f - name = "chokha" - desc = " A woolen coat with a high neck commonly worn on Vysoka." - desc_fluff = "Chokhas are a common choice of outerwear for men and women on Vysoka, and are often colored differently based on their city - or host - of origin. The chokha has become something of a cultural symbol of Vysoka, and is often worn off-world by its citizens." +/obj/item/clothing/suit/storage/vysoka/f icon = 'icons/clothing/suits/coats/vysoka_chokha_female.dmi' icon_state = "chokha_vysoka_f" item_state = "chokha_vysoka_f" diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index 7153eab79d5..bfd9708fbe1 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -563,6 +563,7 @@ BLIND // can't see anything /obj/item/clothing/glasses/sunglasses/sechud/aviator name = "HUD aviators" desc = "Modified aviator glasses that can be switched between HUD and flash protection modes. Comes with bonus prescription overlay." + flash_protection = FLASH_PROTECTION_NONE icon_state = "aviator_sec" off_state = "aviator_sec_off" item_state_slots = list(slot_r_hand_str = "sunglasses", slot_l_hand_str = "sunglasses") @@ -589,12 +590,12 @@ BLIND // can't see anything on = !on if(on) flash_protection = FLASH_PROTECTION_NONE - active = 1 + active = TRUE src.hud = hud_holder to_chat(user, "You switch \the [src] to HUD mode.") else - flash_protection = initial(flash_protection) - active = 0 + flash_protection = FLASH_PROTECTION_MODERATE + active = TRUE src.hud = null to_chat(user, "You switch \the [src] to flash protection mode.") update_icon() diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index b8ce8e3e78f..32e4ad11dc8 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -193,3 +193,10 @@ /obj/item/clothing/gloves/fingerless/colour icon_state = "fingerlessgloves_colour" item_state = "fingerlessgloves_colour" + +/obj/item/clothing/gloves/zeng + name = "zeng-hu vinyl gloves" + desc = "A key design element in the labwear was utility and compatibility with the Zeng-Hu positronic chassis workers that are ubiquitous throughout the corporation. \ + As a result they are breathable yet non-porous, allowing for ample airflow while retaining the cleanroom standards expected of a medical and scientific uniform." + icon_state = "zeng_gloves" + item_state = "zeng_gloves" \ No newline at end of file diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 66602e01617..5c1c92abb6f 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -231,7 +231,7 @@ punch_force = 10 clipped = 1 sharp = 1 - edge = 1 + edge = TRUE drop_sound = 'sound/items/drop/toolbox.ogg' pickup_sound = 'sound/items/pickup/toolbox.ogg' @@ -316,7 +316,7 @@ mounted.switch_firemodes() /obj/item/clothing/gloves/tesla - name = "tesla gauntlet" + name = "tesla glove" desc = "A weaponized gauntlet capable of firing lightning bolts." desc_fluff = "A tesla-based weapon created by the People's Republic of Adhomai as part of their Tesla Brigade program. Because of its long recharge time, the gauntlet is commonly \ used as an ancillary weapon." @@ -337,19 +337,32 @@ return if(user.a_intent == I_HURT) - var/turf/T = get_turf(user) - user.visible_message(SPAN_DANGER("\The [user] crackles with energy!")) - var/obj/item/projectile/beam/tesla/LE = new (T) - playsound(usr.loc, 'sound/magic/LightningShock.ogg', 75, 1) - LE.launch_projectile(A, user.zone_sel? user.zone_sel.selecting : null, user) - charged = FALSE - update_icon() - user.update_inv_gloves() - addtimer(CALLBACK(src, .proc/rearm), 30 SECONDS) + if(proximity) + if(iscarbon(A)) + var/mob/living/carbon/L = A + L.electrocute_act(20,src, 1, user.zone_sel.selecting) + spark(src, 3, alldirs) + charged = FALSE + update_icon() + user.update_inv_gloves() + addtimer(CALLBACK(src, .proc/rearm), 10 SECONDS) + + else + var/turf/T = get_turf(user) + user.visible_message(SPAN_DANGER("\The [user] crackles with energy!")) + var/obj/item/projectile/beam/tesla/LE = new (T) + LE.launch_projectile(A, user.zone_sel? user.zone_sel.selecting : null, user) + spark(src, 3, alldirs) + playsound(user.loc, 'sound/magic/LightningShock.ogg', 75, 1) + charged = FALSE + update_icon() + user.update_inv_gloves() + addtimer(CALLBACK(src, .proc/rearm), 30 SECONDS) /obj/item/clothing/gloves/tesla/proc/rearm() visible_message(SPAN_NOTICE("\The [src] surges back with energy!")) charged = TRUE + update_icon() /obj/item/clothing/gloves/tesla/update_icon() if(charged) @@ -357,4 +370,7 @@ item_state = "tesla_glove_on" else icon_state = "tesla_glove" - item_state = "tesla_glove" \ No newline at end of file + item_state = "tesla_glove" + if(ismob(src.loc)) + var/mob/M = src.loc + M.update_inv_gloves() diff --git a/code/modules/clothing/head/berets.dm b/code/modules/clothing/head/berets.dm index f2d66884833..51213e56f1a 100644 --- a/code/modules/clothing/head/berets.dm +++ b/code/modules/clothing/head/berets.dm @@ -124,11 +124,17 @@ item_state = "corp" /obj/item/clothing/head/beret/security/idris - name = "idris security beret" - desc = "A beret with the Idris Incorporated insignia emblazoned on it." + name = "idris beret" + desc = "A beret with the Idris Incorporated insignia emblazoned on it in a gold finish." icon_state = "idris" item_state = "idris" +/obj/item/clothing/head/beret/security/idris/alt + name = "idris beret" + desc = "A beret with the Idris Incorporated insignia emblazoned on it in a cyan finish." + icon_state = "idrisalt" + item_state = "idrisalt" + /obj/item/clothing/head/beret/security/zavodskoi name = "zavodskoi interstellar security beret" desc = "A black beret with the Zavodskoi Interstellar insignia emblazoned on it." diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index b603d7b1805..a84fb95de3d 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -9,8 +9,8 @@ item_flags = THICKMATERIAL armor = list( melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_HANDGUNS, + bullet = ARMOR_BALLISTIC_MEDIUM, + laser = ARMOR_LASER_PISTOL, energy = ARMOR_ENERGY_SMALL, bomb = ARMOR_BOMB_PADDED ) @@ -93,8 +93,8 @@ desc = "It's a helmet specifically designed to protect against close range attacks." icon = 'icons/clothing/kit/modular_armor.dmi' contained_sprite = TRUE - icon_state = "helm_riot_up" - item_state = "helm_riot_up" + icon_state = "helm_riot" + item_state = "helm_riot" body_parts_covered = HEAD|FACE|EYES //face shield armor = list( melee = ARMOR_MELEE_VERY_HIGH, @@ -134,7 +134,7 @@ armor = list( melee = ARMOR_MELEE_SMALL, bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_RIFLES, + laser = ARMOR_LASER_RIFLE, energy = ARMOR_ENERGY_RESISTANT ) siemens_coefficient = 0 @@ -165,12 +165,18 @@ armor = list( melee = ARMOR_MELEE_VERY_HIGH, bullet = ARMOR_BALLISTIC_RIFLE, - laser = ARMOR_LASER_HANDGUNS, + laser = ARMOR_LASER_MEDIUM, energy = ARMOR_ENERGY_RESISTANT, bomb = ARMOR_BOMB_PADDED ) siemens_coefficient = 0.35 +/obj/item/clothing/head/helmet/merc/scc + name = "heavy SCC helmet" + desc = "A blue helmet made from advanced ceramic. If corporate drones had brains, this would be protecting it." + icon_state = "helm_blue" + item_state = "helm_blue" + /obj/item/clothing/head/helmet/swat name = "\improper SWAT helmet" desc = "They're often used by highly trained Swat Members." @@ -178,8 +184,8 @@ item_state = "swat" armor = list( melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_HANDGUNS, + bullet = ARMOR_BALLISTIC_MEDIUM, + laser = ARMOR_LASER_PISTOL, energy = ARMOR_ENERGY_RESISTANT, bomb = ARMOR_BOMB_PADDED ) @@ -217,8 +223,8 @@ icon_state = "thunderdome" armor = list( melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_HANDGUNS, + bullet = ARMOR_BALLISTIC_MEDIUM, + laser = ARMOR_LASER_PISTOL, energy = ARMOR_ENERGY_RESISTANT, bomb = ARMOR_BOMB_PADDED ) @@ -246,7 +252,7 @@ armor = list( melee = ARMOR_MELEE_MAJOR, bullet = ARMOR_BALLISTIC_RIFLE, - laser = ARMOR_LASER_HANDGUNS, + laser = ARMOR_LASER_PISTOL, energy = ARMOR_ENERGY_RESISTANT, bomb = ARMOR_BOMB_PADDED ) @@ -259,8 +265,8 @@ icon_state = "v62" armor = list( melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_HANDGUNS, + bullet = ARMOR_BALLISTIC_MEDIUM, + laser = ARMOR_LASER_PISTOL, energy = ARMOR_ENERGY_RESISTANT, bomb = ARMOR_BOMB_PADDED ) @@ -293,7 +299,7 @@ armor = list( melee = ARMOR_MELEE_MAJOR, bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_HANDGUNS, + laser = ARMOR_LASER_PISTOL, energy = ARMOR_ENERGY_MINOR, bomb = ARMOR_BOMB_PADDED ) @@ -307,7 +313,7 @@ armor = list( melee = ARMOR_MELEE_VERY_HIGH, bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_HANDGUNS, + laser = ARMOR_LASER_PISTOL, energy = ARMOR_ENERGY_MINOR, bomb = ARMOR_BOMB_PADDED, rad = ARMOR_RAD_MINOR @@ -323,7 +329,7 @@ armor = list( melee = ARMOR_MELEE_RESISTANT, bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_HANDGUNS, + laser = ARMOR_LASER_PISTOL, energy = ARMOR_ENERGY_RESISTANT, bomb = ARMOR_BOMB_PADDED, rad = ARMOR_RAD_RESISTANT @@ -362,7 +368,7 @@ armor = list( melee = ARMOR_MELEE_MAJOR, bullet = ARMOR_BALLISTIC_RIFLE, - laser = ARMOR_LASER_HANDGUNS, + laser = ARMOR_LASER_PISTOL, energy = ARMOR_ENERGY_RESISTANT, bomb = ARMOR_BIO_MINOR ) diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 24d79abca03..5d24c2aa367 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -291,6 +291,7 @@ flags_inv = BLOCKHAIR body_parts_covered = 0 contained_sprite = 1 + slot_flags = SLOT_EARS | SLOT_HEAD /obj/item/clothing/head/hijab/grey name = "grey hijab" @@ -594,7 +595,7 @@ item_state = "helmet_tac_sol" armor = list( melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_RESISTANT, + bullet = ARMOR_BALLISTIC_MEDIUM, laser = ARMOR_LASER_MAJOR, energy = ARMOR_ENERGY_SMALL, bomb = ARMOR_BOMB_PADDED diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index 2d2a5591a16..99b1ccf0fe2 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -35,6 +35,17 @@ item_state = "gas_alt_alt" icon_state = "gas_alt_alt" +/obj/item/clothing/mask/gas/half + name = "face mask" + desc = "A respirator that covers the mouth and nose. It can be connected to an air supply. Filters harmful gases from the air." + item_state = "halfgas" + icon_state = "halfgas" + w_class = ITEMSIZE_SMALL + flags_inv = null + body_parts_covered = FACE + down_body_parts_covered = null + adjustable = TRUE + /obj/item/clothing/mask/gas/old desc = "A face-covering mask that can be connected to an air supply. Seems to be an old, outdated design." filtered_gases = list(GAS_N2O) @@ -112,7 +123,7 @@ /obj/item/clothing/mask/gas/tactical name = "tactical mask" - desc = "A compact carbon-fiber respirator covering the mouth and nose to protect against the inhalation of smoke and other harmful gasses. " + desc = "A compact carbon-fiber respirator covering the mouth and nose to protect against the inhalation of smoke and other harmful gasses." icon_state = "fullgas" item_state = "fullgas" w_class = ITEMSIZE_SMALL @@ -121,4 +132,4 @@ bullet = ARMOR_BALLISTIC_SMALL, laser = ARMOR_LASER_MINOR, bio = ARMOR_BIO_STRONG - ) \ No newline at end of file + ) diff --git a/code/modules/clothing/sets/laser_tag.dm b/code/modules/clothing/sets/laser_tag.dm index 61069d2be82..e5de5d5469c 100644 --- a/code/modules/clothing/sets/laser_tag.dm +++ b/code/modules/clothing/sets/laser_tag.dm @@ -38,7 +38,8 @@ if(ishuman(user)) var/mob/living/carbon/human/H = user var/obj/item/card/id/ID = H.GetIdCard() - user_name = ID.registered_name + if(ID) + user_name = ID.registered_name var/list/num_to_word = list("one", "two", "three", "four", "five") visible_message("[capitalize_first_letters(name)] says, \"[SPAN_NOTICE("[user_name] armor health set to [num_to_word[set_health]].")]\".") return diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm index f028de1fc0b..33084ed2dfc 100644 --- a/code/modules/clothing/shoes/magboots.dm +++ b/code/modules/clothing/shoes/magboots.dm @@ -58,8 +58,10 @@ return 0 /obj/item/clothing/shoes/magboots/mob_can_equip(mob/user, slot, disable_warning = FALSE) - var/mob/living/carbon/human/H = user + if(slot != slot_shoes) + return ..() + var/mob/living/carbon/human/H = user if(H.shoes) shoes = H.shoes if(shoes.overshoes) diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 8015178fc83..e9771178c3b 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -26,7 +26,7 @@ armor = list( melee = ARMOR_MELEE_VERY_HIGH, bullet = ARMOR_BALLISTIC_RIFLE, - laser = ARMOR_LASER_HANDGUNS, + laser = ARMOR_LASER_PISTOL, energy = ARMOR_ENERGY_SMALL, bomb = ARMOR_BOMB_RESISTANT, bio = ARMOR_BIO_MINOR @@ -48,7 +48,7 @@ armor = list( melee = ARMOR_MELEE_VERY_HIGH, bullet = ARMOR_BALLISTIC_RIFLE, - laser = ARMOR_LASER_HANDGUNS, + laser = ARMOR_LASER_PISTOL, energy = ARMOR_ENERGY_SMALL, bomb = ARMOR_BOMB_RESISTANT, bio = ARMOR_BIO_MINOR diff --git a/code/modules/clothing/shoes/xeno/tajara.dm b/code/modules/clothing/shoes/xeno/tajara.dm index e449841cbb1..746439823d9 100644 --- a/code/modules/clothing/shoes/xeno/tajara.dm +++ b/code/modules/clothing/shoes/xeno/tajara.dm @@ -127,7 +127,7 @@ armor = list( melee = ARMOR_MELEE_VERY_HIGH, bullet = ARMOR_BALLISTIC_RIFLE, - laser = ARMOR_LASER_HANDGUNS, + laser = ARMOR_LASER_PISTOL, energy = ARMOR_ENERGY_SMALL, bomb = ARMOR_BOMB_RESISTANT, bio = ARMOR_BIO_MINOR diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm index 400acf3a15a..550291d0d1a 100644 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ b/code/modules/clothing/spacesuits/miscellaneous.dm @@ -10,8 +10,8 @@ ) armor = list( melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_HANDGUNS, + bullet = ARMOR_BALLISTIC_MEDIUM, + laser = ARMOR_LASER_PISTOL, energy = ARMOR_ENERGY_SMALL, bomb = ARMOR_BOMB_PADDED, bio = ARMOR_BIO_SHIELDED, diff --git a/code/modules/clothing/spacesuits/rig/hardsuit_token.dm b/code/modules/clothing/spacesuits/rig/hardsuit_token.dm new file mode 100644 index 00000000000..b25ce8a6c4b --- /dev/null +++ b/code/modules/clothing/spacesuits/rig/hardsuit_token.dm @@ -0,0 +1,43 @@ +/obj/item/hardsuit_token + name = "hardsuit token" + desc = "A coin infused with telecrystals. Using it will allow you to summon a hardsuit of your choice." + icon = 'icons/obj/hardsuit_token.dmi' + icon_state = "hardsuit_token" + +/obj/item/hardsuit_token/attack_self(mob/living/carbon/human/user) + if(!ishuman(user)) + to_chat(user, SPAN_WARNING("You can't use \the [src].")) + return + var/list/hardsuit_options = list( + "Stealth Suit" = /obj/structure/closet/crate/secure/gear_loadout/ninja/stealth, + "Solarian Military Hardsuit" = /obj/structure/closet/crate/secure/gear_loadout/ninja/sol, + "Coalition Gunslinger Suit" = /obj/structure/closet/crate/secure/gear_loadout/ninja/gunslinger, + "Hegemony Breacher Suit" = /obj/structure/closet/crate/secure/gear_loadout/ninja/breacher, + "People's Republic Tesla Suit" = /obj/structure/closet/crate/secure/gear_loadout/ninja/tesla, + "Eridani PMC Strike Suit" = /obj/structure/closet/crate/secure/gear_loadout/ninja/strike, + "Jinxiang Pattern Combat Suit" = /obj/structure/closet/crate/secure/gear_loadout/ninja/jinxiang, + "Elyran Battlesuit" = /obj/structure/closet/crate/secure/gear_loadout/ninja/elyra, + "Cyberwarfare Suit" = /obj/structure/closet/crate/secure/gear_loadout/ninja/hacker, + "Technoconglomerate Mobility Suit" = /obj/structure/closet/crate/secure/gear_loadout/ninja/techno, + "Crimson Hardsuit" = /obj/structure/closet/crate/secure/gear_loadout/ninja/crimson, + "Rhino Suit" = /obj/structure/closet/crate/secure/gear_loadout/ninja/rhino + ) + for(var/hardsuit_option in hardsuit_options) + var/crate_path = hardsuit_options[hardsuit_option] + var/obj/structure/closet/crate/secure/gear_loadout/ninja/N = crate_path + var/hardsuit_path = initial(N.associated_hardsuit) + var/obj/item/rig/R = new hardsuit_path + if(!(user.species.bodytype in R.species_restricted)) + hardsuit_options -= hardsuit_option + var/list/options = list() + for(var/hardsuit in hardsuit_options) + var/image/radial_button = image(icon = src.icon, icon_state = hardsuit) + options[hardsuit] = radial_button + var/chosen_rig = show_radial_menu(user, user, options, radius = 42, tooltips = TRUE) + if(chosen_rig) + spark(loc, 2, alldirs) + var/crate_path = hardsuit_options[chosen_rig] + var/obj/structure/closet/crate/secure/gear_loadout/ninja/N = new crate_path(get_turf(src)) + var/obj/item/rig/R = locate(N.associated_hardsuit) in N + R.dnaLock = user.dna + qdel(src) \ No newline at end of file diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index 22b4ae74261..210b221e697 100644 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -622,23 +622,19 @@ to_chat(module.integrated_ai, "[message]") . = 1 -/obj/item/rig/equipped(mob/living/carbon/human/M) - ..() +/obj/item/rig/check_equipped(mob/living/carbon/human/M, slot, assisted_equip = FALSE) + if(istype(M) && slot == slot_back) + if(!assisted_equip && seal_delay > 0) + M.visible_message(SPAN_NOTICE("[M] starts putting on \the [src]..."), SPAN_NOTICE("You start putting on \the [src]...")) + if(!do_after(M, seal_delay)) + return FALSE - if(seal_delay > 0 && istype(M) && M.back == src) - M.visible_message("[M] starts putting on \the [src]...", "You start putting on \the [src]...") - if(!do_after(M,seal_delay)) - if(M && M.back == src) - if(!M.unEquip(src)) - return - M.put_in_hands(src) - return - - if(istype(M) && M.back == src) - M.visible_message("[M] struggles into \the [src].", "You struggle into \the [src].") + M.visible_message(SPAN_NOTICE("[M] struggles into \the [src]."), SPAN_NOTICE("You struggle into \the [src].")) wearer = M wearer.wearing_rig = src update_icon() + return TRUE + return TRUE /obj/item/rig/proc/toggle_piece(var/piece, var/mob/initiator, var/deploy_mode) diff --git a/code/modules/clothing/spacesuits/rig/suits/alien.dm b/code/modules/clothing/spacesuits/rig/suits/alien.dm index 014b7e310df..85bdf727d27 100644 --- a/code/modules/clothing/spacesuits/rig/suits/alien.dm +++ b/code/modules/clothing/spacesuits/rig/suits/alien.dm @@ -6,7 +6,7 @@ armor = list( melee = ARMOR_MELEE_MAJOR, bullet = ARMOR_BALLISTIC_RIFLE, - laser = ARMOR_LASER_HANDGUNS, + laser = ARMOR_LASER_PISTOL, energy = ARMOR_ENERGY_RESISTANT, bomb = ARMOR_BOMB_RESISTANT, bio = ARMOR_BIO_SHIELDED, @@ -33,7 +33,7 @@ armor = list( melee = ARMOR_MELEE_VERY_HIGH, bullet = ARMOR_BALLISTIC_AP, - laser = ARMOR_LASER_RIFLES, + laser = ARMOR_LASER_RIFLE, energy = ARMOR_ENERGY_STRONG, bomb = ARMOR_BOMB_RESISTANT, bio = ARMOR_BIO_SHIELDED, diff --git a/code/modules/clothing/spacesuits/rig/suits/combat.dm b/code/modules/clothing/spacesuits/rig/suits/combat.dm index 5c4006ad900..a9660d66410 100644 --- a/code/modules/clothing/spacesuits/rig/suits/combat.dm +++ b/code/modules/clothing/spacesuits/rig/suits/combat.dm @@ -6,7 +6,7 @@ armor = list( melee = ARMOR_MELEE_VERY_HIGH, bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_HANDGUNS, + laser = ARMOR_LASER_PISTOL, energy = ARMOR_ENERGY_MINOR, bomb = ARMOR_BOMB_PADDED, bio = ARMOR_BIO_SHIELDED, @@ -45,7 +45,7 @@ suit_type = "military hardsuit" armor = list( melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_RESISTANT, + bullet = ARMOR_BALLISTIC_MEDIUM, laser = ARMOR_LASER_MAJOR, energy = ARMOR_ENERGY_MINOR, bomb = ARMOR_BOMB_SHIELDED, @@ -106,7 +106,7 @@ armor = list( melee = ARMOR_MELEE_MAJOR, bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_HANDGUNS, + laser = ARMOR_LASER_PISTOL, energy = ARMOR_ENERGY_MINOR, bomb = ARMOR_BOMB_RESISTANT, bio = ARMOR_BIO_SHIELDED, @@ -157,8 +157,8 @@ suit_type = "gunslinger hardsuit" armor = list( melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_HANDGUNS, + bullet = ARMOR_BALLISTIC_MEDIUM, + laser = ARMOR_LASER_PISTOL, energy = ARMOR_ENERGY_SMALL, bomb = ARMOR_BOMB_PADDED, bio = ARMOR_BIO_SHIELDED, @@ -206,7 +206,7 @@ armor = list( melee = ARMOR_MELEE_VERY_HIGH, bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_HANDGUNS, + laser = ARMOR_LASER_PISTOL, energy = ARMOR_ENERGY_SMALL, bomb = ARMOR_BOMB_PADDED, bio = ARMOR_BIO_SHIELDED, @@ -306,7 +306,7 @@ armor = list( melee = ARMOR_MELEE_VERY_HIGH, bullet = ARMOR_BALLISTIC_RIFLE, - laser = ARMOR_LASER_RIFLES, + laser = ARMOR_LASER_RIFLE, energy = ARMOR_ENERGY_SHIELDED, bomb = ARMOR_BOMB_PADDED, bio = ARMOR_BIO_SHIELDED, @@ -343,7 +343,7 @@ armor = list( melee = ARMOR_MELEE_VERY_HIGH, bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_HANDGUNS, + laser = ARMOR_LASER_PISTOL, energy = ARMOR_ENERGY_SMALL, bomb = ARMOR_BOMB_MINOR, bio = ARMOR_BIO_SHIELDED, diff --git a/code/modules/clothing/spacesuits/rig/suits/ert.dm b/code/modules/clothing/spacesuits/rig/suits/ert.dm index 1ee53080951..ad1e7b181de 100644 --- a/code/modules/clothing/spacesuits/rig/suits/ert.dm +++ b/code/modules/clothing/spacesuits/rig/suits/ert.dm @@ -97,7 +97,7 @@ armor = list( melee = ARMOR_MELEE_MAJOR, bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_HANDGUNS, + laser = ARMOR_LASER_PISTOL, energy = ARMOR_ENERGY_SMALL, bomb = ARMOR_BOMB_PADDED, bio = ARMOR_BIO_SHIELDED, @@ -121,7 +121,7 @@ armor = list( melee = ARMOR_MELEE_SHIELDED, bullet = ARMOR_BALLISTIC_RIFLE, - laser = ARMOR_LASER_RIFLES, + laser = ARMOR_LASER_RIFLE, energy = ARMOR_ENERGY_STRONG, bomb = ARMOR_BOMB_PADDED, bio = ARMOR_BIO_SHIELDED, diff --git a/code/modules/clothing/spacesuits/rig/suits/light.dm b/code/modules/clothing/spacesuits/rig/suits/light.dm index 4dbb77ffdf4..c8c9071f20e 100644 --- a/code/modules/clothing/spacesuits/rig/suits/light.dm +++ b/code/modules/clothing/spacesuits/rig/suits/light.dm @@ -101,7 +101,7 @@ armor = list( melee = ARMOR_MELEE_MAJOR, bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_HANDGUNS, + laser = ARMOR_LASER_PISTOL, energy = ARMOR_ENERGY_SMALL, bomb = ARMOR_BOMB_PADDED, bio = ARMOR_BIO_SHIELDED, diff --git a/code/modules/clothing/spacesuits/rig/suits/station.dm b/code/modules/clothing/spacesuits/rig/suits/station.dm index 2c3d1a9cd9a..9a98955e3d9 100644 --- a/code/modules/clothing/spacesuits/rig/suits/station.dm +++ b/code/modules/clothing/spacesuits/rig/suits/station.dm @@ -207,7 +207,7 @@ armor = list( melee = ARMOR_MELEE_RESISTANT, bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_HANDGUNS, + laser = ARMOR_LASER_PISTOL, energy = ARMOR_ENERGY_STRONG, bomb = ARMOR_BOMB_RESISTANT, bio = ARMOR_BIO_SHIELDED, diff --git a/code/modules/clothing/spacesuits/rig/suits/terminator.dm b/code/modules/clothing/spacesuits/rig/suits/terminator.dm index f50c7c2c1ce..7d60b106b3f 100644 --- a/code/modules/clothing/spacesuits/rig/suits/terminator.dm +++ b/code/modules/clothing/spacesuits/rig/suits/terminator.dm @@ -6,7 +6,7 @@ armor = list( melee = ARMOR_MELEE_VERY_HIGH, bullet = ARMOR_BALLISTIC_RIFLE, - laser = ARMOR_LASER_RIFLES, + laser = ARMOR_LASER_RIFLE, energy = ARMOR_MELEE_MINOR, bomb = ARMOR_BOMB_SHIELDED, bio = ARMOR_BIO_SHIELDED, diff --git a/code/modules/clothing/spacesuits/syndi.dm b/code/modules/clothing/spacesuits/syndi.dm index 0954ce7a668..375eb402884 100644 --- a/code/modules/clothing/spacesuits/syndi.dm +++ b/code/modules/clothing/spacesuits/syndi.dm @@ -6,8 +6,8 @@ desc = "A crimson helmet sporting clean lines and durable plating. Engineered to look menacing." armor = list( melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_HANDGUNS, + bullet = ARMOR_BALLISTIC_MEDIUM, + laser = ARMOR_LASER_PISTOL, energy = ARMOR_ENERGY_MINOR, bomb = ARMOR_BOMB_PADDED, bio = ARMOR_BIO_SMALL, @@ -26,8 +26,8 @@ slowdown = 1 armor = list( melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_HANDGUNS, + bullet = ARMOR_BALLISTIC_MEDIUM, + laser = ARMOR_LASER_PISTOL, energy = ARMOR_ENERGY_MINOR, bomb = ARMOR_BOMB_PADDED, bio = ARMOR_BIO_SMALL, diff --git a/code/modules/clothing/spacesuits/void/alien.dm b/code/modules/clothing/spacesuits/void/alien.dm index cbf1b0fe402..76bc3a876d6 100644 --- a/code/modules/clothing/spacesuits/void/alien.dm +++ b/code/modules/clothing/spacesuits/void/alien.dm @@ -57,7 +57,7 @@ armor = list( melee = ARMOR_MELEE_MAJOR, bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_HANDGUNS, + laser = ARMOR_LASER_PISTOL, energy = ARMOR_ENERGY_MINOR, bomb = ARMOR_BOMB_PADDED, bio = ARMOR_BIO_SHIELDED, @@ -78,7 +78,7 @@ armor = list( melee = ARMOR_MELEE_MAJOR, bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_HANDGUNS, + laser = ARMOR_LASER_PISTOL, energy = ARMOR_ENERGY_MINOR, bomb = ARMOR_BOMB_PADDED, bio = ARMOR_BIO_SHIELDED, diff --git a/code/modules/clothing/spacesuits/void/captain.dm b/code/modules/clothing/spacesuits/void/captain.dm index d255f748201..0d66553501a 100644 --- a/code/modules/clothing/spacesuits/void/captain.dm +++ b/code/modules/clothing/spacesuits/void/captain.dm @@ -7,7 +7,7 @@ armor = list( melee = ARMOR_MELEE_MAJOR, bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_HANDGUNS, + laser = ARMOR_LASER_PISTOL, energy = ARMOR_ENERGY_SMALL, bomb = ARMOR_BOMB_RESISTANT, bio = ARMOR_BIO_SHIELDED, @@ -30,7 +30,7 @@ armor = list( melee = ARMOR_MELEE_MAJOR, bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_HANDGUNS, + laser = ARMOR_LASER_PISTOL, energy = ARMOR_ENERGY_SMALL, bomb = ARMOR_BOMB_RESISTANT, bio = ARMOR_BIO_SHIELDED, diff --git a/code/modules/clothing/spacesuits/void/merc.dm b/code/modules/clothing/spacesuits/void/merc.dm index 7b72b4313ab..f0d35a1ee35 100644 --- a/code/modules/clothing/spacesuits/void/merc.dm +++ b/code/modules/clothing/spacesuits/void/merc.dm @@ -10,8 +10,8 @@ ) armor = list( melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_MAJOR, + bullet = ARMOR_BALLISTIC_MEDIUM, + laser = ARMOR_LASER_PISTOL, energy = ARMOR_ENERGY_MINOR, bomb = ARMOR_BOMB_PADDED, bio = ARMOR_BIO_SHIELDED, @@ -37,8 +37,8 @@ w_class = ITEMSIZE_NORMAL armor = list( melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_MAJOR, + bullet = ARMOR_BALLISTIC_MEDIUM, + laser = ARMOR_LASER_PISTOL, energy = ARMOR_ENERGY_MINOR, bomb = ARMOR_BOMB_PADDED, bio = ARMOR_BIO_SHIELDED, diff --git a/code/modules/clothing/spacesuits/void/misc.dm b/code/modules/clothing/spacesuits/void/misc.dm index 8f2cb1925f3..3d9b625c06e 100644 --- a/code/modules/clothing/spacesuits/void/misc.dm +++ b/code/modules/clothing/spacesuits/void/misc.dm @@ -4,13 +4,13 @@ icon_state = "sol_helmet" item_state = "sol_helmet" armor = list( - melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_SMALL, + melee = ARMOR_MELEE_RESISTANT, + bullet = ARMOR_BALLISTIC_MEDIUM, + laser = ARMOR_LASER_PISTOL, energy = ARMOR_ENERGY_MINOR, bomb = ARMOR_BOMB_PADDED, bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_RESISTANT + rad = ARMOR_RAD_SMALL ) siemens_coefficient = 0.35 species_restricted = list(BODYTYPE_HUMAN) @@ -23,16 +23,16 @@ desc = "A sleek black space suit designed for combat. Looks to have seamless composite plating. Painted in Sol Alliance colors." icon_state = "sol_suit" item_state = "sol_suit" - slowdown = 1 armor = list( - melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_SMALL, + melee = ARMOR_MELEE_RESISTANT, + bullet = ARMOR_BALLISTIC_MEDIUM, + laser = ARMOR_LASER_PISTOL, energy = ARMOR_ENERGY_MINOR, bomb = ARMOR_BOMB_PADDED, bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_RESISTANT + rad = ARMOR_RAD_SMALL ) + slowdown = 1 allowed = list(/obj/item/device/flashlight,/obj/item/tank,/obj/item/device/suit_cooling_unit,/obj/item/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/melee/energy/sword,/obj/item/handcuffs) siemens_coefficient = 0.35 species_restricted = list(BODYTYPE_HUMAN) @@ -44,13 +44,13 @@ icon_state = "vulture" item_state = "vulture" armor = list( - melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_SMALL, + melee = ARMOR_MELEE_RESISTANT, + bullet = ARMOR_BALLISTIC_MEDIUM, + laser = ARMOR_LASER_PISTOL, energy = ARMOR_ENERGY_MINOR, bomb = ARMOR_BOMB_PADDED, bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_RESISTANT + rad = ARMOR_RAD_SMALL ) siemens_coefficient = 0.35 species_restricted = list(BODYTYPE_HUMAN) @@ -63,15 +63,15 @@ desc = "An iconic Coalition of Colonies standard-issue voidsuit, designed after the Interstellar War and seen in use to this day." icon_state = "vulture" item_state = "vulture" - slowdown = 3 + slowdown = 1 armor = list( - melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_SMALL, + melee = ARMOR_MELEE_RESISTANT, + bullet = ARMOR_BALLISTIC_MEDIUM, + laser = ARMOR_LASER_PISTOL, energy = ARMOR_ENERGY_MINOR, bomb = ARMOR_BOMB_PADDED, bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_RESISTANT + rad = ARMOR_RAD_SMALL ) allowed = list(/obj/item/device/flashlight,/obj/item/tank,/obj/item/device/suit_cooling_unit,/obj/item/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/melee/energy/sword,/obj/item/handcuffs) siemens_coefficient = 0.35 @@ -85,13 +85,13 @@ icon_state = "eridani_suit" item_state = "eridani_suit" armor = list( - melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_HANDGUNS, + melee = ARMOR_MELEE_RESISTANT, + bullet = ARMOR_BALLISTIC_MEDIUM, + laser = ARMOR_LASER_PISTOL, energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_RESISTANT, + bomb = ARMOR_BOMB_PADDED, bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_RESISTANT + rad = ARMOR_RAD_SMALL ) siemens_coefficient = 0.35 species_restricted = list(BODYTYPE_HUMAN) @@ -105,14 +105,15 @@ icon_state = "eridani_suit" item_state = "eridani_suit" armor = list( - melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_HANDGUNS, + melee = ARMOR_MELEE_RESISTANT, + bullet = ARMOR_BALLISTIC_MEDIUM, + laser = ARMOR_LASER_PISTOL, energy = ARMOR_ENERGY_MINOR, bomb = ARMOR_BOMB_PADDED, - bio = ARMOR_BOMB_RESISTANT, - rad = ARMOR_RAD_RESISTANT + bio = ARMOR_BIO_SHIELDED, + rad = ARMOR_RAD_SMALL ) + slowdown = 1 allowed = list(/obj/item/tank,/obj/item/device/flashlight,/obj/item/device/suit_cooling_unit,/obj/item/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/melee/energy/sword,/obj/item/handcuffs) siemens_coefficient = 0.35 species_restricted = list(BODYTYPE_HUMAN) @@ -124,13 +125,13 @@ icon_state = "valkyrie" item_state = "valkyrie" armor = list( - melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_HANDGUNS, + melee = ARMOR_MELEE_RESISTANT, + bullet = ARMOR_BALLISTIC_MEDIUM, + laser = ARMOR_LASER_PISTOL, energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_SHIELDED, + bomb = ARMOR_BOMB_PADDED, bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SHIELDED + rad = ARMOR_RAD_SMALL ) siemens_coefficient = 0.35 species_restricted = list(BODYTYPE_HUMAN) @@ -143,14 +144,15 @@ desc = "A pricey specialist voidsuit designed for atmospheric long jumping and combat. Colored in Elyran military camouflage." icon_state = "valkyrie" item_state = "valkyrie" + slowdown = 1 armor = list( - melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_HANDGUNS, + melee = ARMOR_MELEE_RESISTANT, + bullet = ARMOR_BALLISTIC_MEDIUM, + laser = ARMOR_LASER_PISTOL, energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_SHIELDED, + bomb = ARMOR_BOMB_PADDED, bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SHIELDED + rad = ARMOR_RAD_SMALL ) allowed = list(/obj/item/tank,/obj/item/device/flashlight,/obj/item/device/suit_cooling_unit,/obj/item/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/melee/energy/sword,/obj/item/handcuffs) siemens_coefficient = 0.35 @@ -164,18 +166,23 @@ icon_state = "lancer_suit" item_state = "lancer_suit" armor = list( - melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_HANDGUNS, + melee = ARMOR_MELEE_RESISTANT, + bullet = ARMOR_BALLISTIC_MEDIUM, + laser = ARMOR_LASER_PISTOL, energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_RESISTANT, + bomb = ARMOR_BOMB_PADDED, bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_RESISTANT + rad = ARMOR_RAD_SMALL ) siemens_coefficient = 0.35 species_restricted = list(BODYTYPE_HUMAN) refittable = FALSE +/obj/item/clothing/head/helmet/space/void/lancer/unathi + desc = "A sleek helmet with a bright yellow visor, expertly made in and colored in the iconic branding of Ceres' Lance. This one is fitted to Unathi." + icon_override = 'icons/mob/species/unathi/helmet.dmi' + species_restricted = list(BODYTYPE_UNATHI) + /obj/item/clothing/suit/space/void/lancer name = "lancer voidsuit" desc = "A bulky void suit with heavy plating. Looks to be colored in the branding of Ceres' Lance." @@ -184,19 +191,24 @@ slowdown = 1 w_class = ITEMSIZE_NORMAL armor = list( - melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_HANDGUNS, + melee = ARMOR_MELEE_RESISTANT, + bullet = ARMOR_BALLISTIC_MEDIUM, + laser = ARMOR_LASER_PISTOL, energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_RESISTANT, + bomb = ARMOR_BOMB_PADDED, bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_RESISTANT + rad = ARMOR_RAD_SMALL ) allowed = list(/obj/item/device/flashlight,/obj/item/tank,/obj/item/device/suit_cooling_unit,/obj/item/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/melee/energy/sword,/obj/item/handcuffs) siemens_coefficient = 0.35 species_restricted = list(BODYTYPE_HUMAN) refittable = FALSE +/obj/item/clothing/suit/space/void/lancer/unathi + desc = "A bulky void suit with heavy plating. Looks to be colored in the branding of Ceres' Lance. This one is fitted to Unathi." + icon_override = 'icons/mob/species/unathi/suit.dmi' + species_restricted = list(BODYTYPE_UNATHI) + //Einstein Engines espionage voidsuit /obj/item/clothing/head/helmet/space/void/einstein name = "banshee combat suit helmet" @@ -208,12 +220,12 @@ armor = list( melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_RIFLES, - energy = ARMOR_ENERGY_SMALL, + bullet = ARMOR_BALLISTIC_MEDIUM, + laser = ARMOR_LASER_PISTOL, + energy = ARMOR_ENERGY_MINOR, bomb = ARMOR_BOMB_PADDED, bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_MINOR + rad = ARMOR_RAD_SMALL ) siemens_coefficient = 0.35 species_restricted = list(BODYTYPE_HUMAN, BODYTYPE_IPC_INDUSTRIAL, BODYTYPE_IPC_ZENGHU, BODYTYPE_IPC_BISHOP) @@ -234,12 +246,12 @@ slowdown = 1 armor = list( melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_RIFLES, - energy = ARMOR_ENERGY_SMALL, + bullet = ARMOR_BALLISTIC_MEDIUM, + laser = ARMOR_LASER_PISTOL, + energy = ARMOR_ENERGY_MINOR, bomb = ARMOR_BOMB_PADDED, bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_MINOR + rad = ARMOR_RAD_SMALL ) allowed = list(/obj/item/device/flashlight,/obj/item/tank,/obj/item/device/suit_cooling_unit,/obj/item/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/melee/energy/sword,/obj/item/handcuffs) siemens_coefficient = 0.35 @@ -257,13 +269,13 @@ contained_sprite = 1 armor = list( - melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_RESISTANT, + melee = ARMOR_MELEE_RESISTANT, + bullet = ARMOR_BALLISTIC_MEDIUM, + laser = ARMOR_LASER_PISTOL, + energy = ARMOR_ENERGY_MINOR, + bomb = ARMOR_BOMB_PADDED, bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SHIELDED + rad = ARMOR_RAD_SMALL ) siemens_coefficient = 0.35 species_restricted = list(BODYTYPE_HUMAN, BODYTYPE_IPC_INDUSTRIAL, BODYTYPE_IPC_ZENGHU, BODYTYPE_IPC_BISHOP) @@ -283,13 +295,13 @@ slowdown = 1 armor = list( - melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_RESISTANT, + melee = ARMOR_MELEE_RESISTANT, + bullet = ARMOR_BALLISTIC_MEDIUM, + laser = ARMOR_LASER_PISTOL, + energy = ARMOR_ENERGY_MINOR, + bomb = ARMOR_BOMB_PADDED, bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_SHIELDED + rad = ARMOR_RAD_SMALL ) allowed = list(/obj/item/device/flashlight,/obj/item/tank,/obj/item/device/suit_cooling_unit,/obj/item/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/melee/energy/sword,/obj/item/handcuffs) siemens_coefficient = 0.35 @@ -307,13 +319,13 @@ contained_sprite = 1 armor = list( - melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_RESISTANT, + melee = ARMOR_MELEE_RESISTANT, + bullet = ARMOR_BALLISTIC_MEDIUM, + laser = ARMOR_LASER_PISTOL, + energy = ARMOR_ENERGY_MINOR, + bomb = ARMOR_BOMB_PADDED, bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_MINOR + rad = ARMOR_RAD_SMALL ) siemens_coefficient = 0.35 species_restricted = list(BODYTYPE_HUMAN) @@ -331,15 +343,15 @@ item_state = "caiman" contained_sprite = 1 - slowdown = 2 + slowdown = 1 armor = list( - melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_RESISTANT, + melee = ARMOR_MELEE_RESISTANT, + bullet = ARMOR_BALLISTIC_MEDIUM, + laser = ARMOR_LASER_PISTOL, + energy = ARMOR_ENERGY_MINOR, + bomb = ARMOR_BOMB_PADDED, bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_MINOR + rad = ARMOR_RAD_SMALL ) allowed = list(/obj/item/device/flashlight,/obj/item/tank,/obj/item/device/suit_cooling_unit,/obj/item/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/melee/energy/sword,/obj/item/handcuffs) siemens_coefficient = 0.35 @@ -358,12 +370,12 @@ armor = list( melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_RESISTANT, + bullet = ARMOR_BALLISTIC_MEDIUM, + laser = ARMOR_LASER_PISTOL, + energy = ARMOR_ENERGY_MINOR, + bomb = ARMOR_BOMB_PADDED, bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_MINOR + rad = ARMOR_RAD_SMALL ) siemens_coefficient = 0.35 species_restricted = list(BODYTYPE_HUMAN) @@ -383,13 +395,14 @@ w_class = ITEMSIZE_NORMAL armor = list( melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_RESISTANT, + bullet = ARMOR_BALLISTIC_MEDIUM, + laser = ARMOR_LASER_PISTOL, + energy = ARMOR_ENERGY_MINOR, + bomb = ARMOR_BOMB_PADDED, bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_MINOR + rad = ARMOR_RAD_SMALL ) + slowdown = 1 allowed = list(/obj/item/device/flashlight,/obj/item/tank,/obj/item/device/suit_cooling_unit,/obj/item/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/melee/energy/sword,/obj/item/handcuffs) siemens_coefficient = 0.35 species_restricted = list(BODYTYPE_HUMAN) @@ -513,13 +526,13 @@ contained_sprite = 1 armor = list( - melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_MINOR, + melee = ARMOR_MELEE_RESISTANT, + bullet = ARMOR_BALLISTIC_MEDIUM, + laser = ARMOR_LASER_PISTOL, + energy = ARMOR_ENERGY_MINOR, + bomb = ARMOR_BOMB_PADDED, bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_MINOR + rad = ARMOR_RAD_SMALL ) siemens_coefficient = 0.35 species_restricted = list(BODYTYPE_HUMAN) @@ -532,16 +545,17 @@ icon_state = "prejoroub" item_state = "prejoroub" contained_sprite = 1 + slowdown = 1 w_class = ITEMSIZE_NORMAL armor = list( - melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_MINOR, + melee = ARMOR_MELEE_RESISTANT, + bullet = ARMOR_BALLISTIC_MEDIUM, + laser = ARMOR_LASER_PISTOL, + energy = ARMOR_ENERGY_MINOR, + bomb = ARMOR_BOMB_PADDED, bio = ARMOR_BIO_SHIELDED, - rad = ARMOR_RAD_MINOR + rad = ARMOR_RAD_SMALL ) allowed = list(/obj/item/device/flashlight,/obj/item/tank,/obj/item/device/suit_cooling_unit,/obj/item/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/melee/energy/sword,/obj/item/handcuffs) siemens_coefficient = 0.35 diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index de02afc1f23..71af76981a9 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -112,7 +112,7 @@ slowdown = 1 armor = list( melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_RESISTANT, + bullet = ARMOR_BALLISTIC_MEDIUM, laser = ARMOR_LASER_MAJOR, energy = ARMOR_ENERGY_MINOR, bomb = ARMOR_BOMB_PADDED, @@ -197,7 +197,7 @@ slowdown = 1 armor = list( melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_RESISTANT, + bullet = ARMOR_BALLISTIC_MEDIUM, laser = ARMOR_LASER_MAJOR, energy = ARMOR_ENERGY_SMALL, bomb = ARMOR_BOMB_PADDED @@ -553,7 +553,7 @@ item_state = "solwebvest" armor = list( melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_RESISTANT, + bullet = ARMOR_BALLISTIC_MEDIUM, laser = ARMOR_LASER_MAJOR, energy = ARMOR_ENERGY_RESISTANT, bomb = ARMOR_BOMB_PADDED diff --git a/code/modules/clothing/suits/hoodies.dm b/code/modules/clothing/suits/hoodies.dm index 1f36930c9ee..e43518cf2ed 100644 --- a/code/modules/clothing/suits/hoodies.dm +++ b/code/modules/clothing/suits/hoodies.dm @@ -248,23 +248,13 @@ item_state = "coatwinter_w" build_from_parts = TRUE hoodtype = /obj/item/clothing/head/winterhood/colorable - worn_overlay = "collar_su" - -/obj/item/clothing/suit/storage/hooded/wintercoat/colorable/Initialize() - . = ..() - update_icon() - -/obj/item/clothing/suit/storage/hooded/wintercoat/colorable/update_icon() - . = ..() - cut_overlays() - add_overlay(overlay_image(icon, "[icon_state]_collar", flags=RESET_COLOR)) + worn_overlay = "collar" /obj/item/clothing/head/winterhood/colorable icon_state = "coatwinter_w_hood" build_from_parts = TRUE - worn_overlay = "collar_he" + worn_overlay = "collar" -/obj/item/clothing/head/winterhood/colorable/update_icon() +/obj/item/clothing/head/winterhood/colorable/update_icon(mob/user) . = ..() - cut_overlays() - add_overlay(overlay_image(icon, "[icon_state]_collar", flags=RESET_COLOR)) \ No newline at end of file + \ No newline at end of file diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index 64c3d952398..aaf22fef08d 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -41,6 +41,13 @@ obj/item/clothing/suit/apron/overalls/blue allowed = list(/obj/item/stack/medical, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/hypospray, /obj/item/reagent_containers/syringe, \ /obj/item/device/healthanalyzer, /obj/item/device/flashlight, /obj/item/device/radio, /obj/item/tank/emergency_oxygen, /obj/item/device/breath_analyzer, /obj/item/reagent_containers/blood) +/obj/item/clothing/suit/apron/surgery/zeng + name = "zeng-hu vinyl apron" + desc = "A key design element in the labwear was utility and compatibility with the Zeng-Hu positronic chassis workers that are ubiquitous throughout the corporation. As a result \ + they are breathable yet non-porous, allowing for ample airflow while retaining the cleanroom standards expected of a medical and scientific uniform." + icon_state = "zeng_apron" + item_state = "zeng_apron" + //Chaplain /obj/item/clothing/suit/chaplain_hoodie name = "chaplain hoodie" @@ -82,48 +89,48 @@ obj/item/clothing/suit/apron/overalls/blue //Security -/obj/item/clothing/suit/security/officer +/obj/item/clothing/suit/storage/security/officer name = "security officer's jacket" desc = "This jacket is for those special occasions when a security officer actually feels safe." icon_state = "officerjacket" item_state = "officerjacket" body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS -/obj/item/clothing/suit/security/officer/blue +/obj/item/clothing/suit/storage/security/officer/blue icon_state = "officerbluejacket" item_state = "officerbluejacket" -/obj/item/clothing/suit/security/officer/dnavy +/obj/item/clothing/suit/storage/security/officer/dnavy icon_state = "officerdnavyjacket" item_state = "officerdnavyjacket" -/obj/item/clothing/suit/security/warden +/obj/item/clothing/suit/storage/security/warden name = "warden's jacket" desc = "Perfectly suited for the warden that wants to leave an impression of style on those who visit the brig." icon_state = "wardenjacket" item_state = "wardenjacket" body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS -/obj/item/clothing/suit/security/warden/blue +/obj/item/clothing/suit/storage/security/warden/blue icon_state = "wardenbluejacket" item_state = "wardenbluejacket" -/obj/item/clothing/suit/security/warden/dnavy +/obj/item/clothing/suit/storage/security/warden/dnavy icon_state = "wardendnavyjacket" item_state = "wardendnavyjacket" -/obj/item/clothing/suit/security/hos +/obj/item/clothing/suit/storage/security/hos name = "head of security's jacket" desc = "This piece of clothing was specifically designed for asserting superior authority." icon_state = "hosjacket" item_state = "hosjacket" body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS -/obj/item/clothing/suit/security/hos/blue +/obj/item/clothing/suit/storage/security/hos/blue icon_state = "hosbluejacket" item_state = "hosbluejacket" -/obj/item/clothing/suit/security/hos/dnavy +/obj/item/clothing/suit/storage/security/hos/dnavy icon_state = "hosdnavyjacket" item_state = "hosdnavyjacket" diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm index f68cf941d62..f5a93467c21 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -91,6 +91,9 @@ desc = "A suit that protects against minor chemical spills. Offers slightly more protection against biohazards than the standard model. Comes in Zeng-Hu colours." icon_state = "labcoat_zeng" +/obj/item/clothing/suit/storage/toggle/labcoat/zeng/alt + icon_state = "labcoat_zeng_alt" + /obj/item/clothing/suit/storage/toggle/labcoat/zavodskoi name = "Zavodskoi Interstellar labcoat" desc = "A suit that protects against minor chemical spills. Offers slightly more protection against biohazards than the standard model. Comes in Zavodskoi Interstellar colours." diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 6ec996a80e5..b4bc0e60b05 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -291,6 +291,15 @@ desc = "A brown leather coat. A corporate logo is proudly displayed on the back." icon_state = "brown_jacket_nt" +/obj/item/clothing/suit/storage/toggle/brown_jacket/scc + name = "Stellar Corporate Conglomerate jacket" + desc = "A comfortable blue jacket. Tailored upon its back is a large Stellar Corporate Conglomerate logo." + desc_fluff = "The Stellar Corporate Conglomerate, also known as Chainlink, is a joint alliance between the NanoTrasen Corporation, Hephaestus Industries, Idris Incorporated, Zeng-Hu Pharmaceuticals and Zavodskoi Interstellar to excercice an undisputed economic dominance over the Orion Spur." + icon = 'icons/clothing/suits/scc_jacket.dmi' + icon_state = "scc_jacket" + item_state = "scc_jacket" + contained_sprite = TRUE + /obj/item/clothing/suit/storage/toggle/flannel name = "green flannel shirt" desc = "A flannel shirt, for all your space hipster needs." @@ -456,6 +465,13 @@ icon_state = "peacoat" item_state = "peacoat" +/obj/item/clothing/suit/storage/toggle/asymmetriccoat + name = "asymmetric coat" + desc = "A solid sleeveless coat that only covers the upper body and the back of the legs." + icon_state = "asymmetriccoat" + item_state = "asymmetriccoat" + body_parts_covered = UPPER_TORSO + /* * Department Jackets */ diff --git a/code/modules/clothing/suits/modular_armor.dm b/code/modules/clothing/suits/modular_armor.dm index f5776baab91..b98ed61c65e 100644 --- a/code/modules/clothing/suits/modular_armor.dm +++ b/code/modules/clothing/suits/modular_armor.dm @@ -60,6 +60,14 @@ /obj/item/clothing/accessory/arm_guard/heavy ) +/obj/item/clothing/suit/armor/carrier/heavy/scc + starting_accessories = list( + /obj/item/clothing/accessory/armor_plate/heavy/scc, + /obj/item/clothing/accessory/leg_guard/heavy/scc, + /obj/item/clothing/accessory/arm_guard/heavy/scc, + /obj/item/clothing/accessory/sleevepatch/scc + ) + /obj/item/clothing/suit/armor/carrier/heavy/sec starting_accessories = list( /obj/item/clothing/accessory/armor_plate/heavy/sec, @@ -106,11 +114,11 @@ armor = list( melee = ARMOR_MELEE_RESISTANT, bullet = ARMOR_BALLISTIC_AP, - laser = ARMOR_LASER_SMALL, + laser = ARMOR_LASER_MINOR, energy = ARMOR_ENERGY_MINOR, bomb = ARMOR_BOMB_PADDED ) - slowdown = 0.5 + slowdown = 1 /obj/item/clothing/accessory/armor_plate/riot name = "riot armor plate" @@ -119,12 +127,12 @@ item_state = "plate_riot" armor = list( melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_SMALL, + bullet = ARMOR_BALLISTIC_MINOR, + laser = ARMOR_LASER_MINOR, energy = ARMOR_ENERGY_MINOR, bomb = ARMOR_BOMB_PADDED ) - slowdown = 0.5 + slowdown = 1 /obj/item/clothing/accessory/armor_plate/ablative name = "ablative armor plate" @@ -132,12 +140,12 @@ icon_state = "plate_ablative" item_state = "plate_ablative" armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_RIFLES, + melee = ARMOR_MELEE_MINOR, + bullet = ARMOR_BALLISTIC_MINOR, + laser = ARMOR_LASER_AP, energy = ARMOR_ENERGY_RESISTANT ) - slowdown = 0.5 + slowdown = 1 siemens_coefficient = 0 /obj/item/clothing/accessory/armor_plate/military @@ -147,12 +155,12 @@ item_state = "plate_military" armor = list( melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_MAJOR, + bullet = ARMOR_BALLISTIC_PISTOL, + laser = ARMOR_LASER_RIFLE, energy = ARMOR_ENERGY_SMALL, bomb = ARMOR_BOMB_PADDED, ) - slowdown = 0.5 + slowdown = 1 /obj/item/clothing/accessory/armor_plate/heavy name = "heavy armor plate" @@ -161,12 +169,19 @@ item_state = "plate_heavy" armor = list( melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_MAJOR, + bullet = ARMOR_BALLISTIC_REVOLVER, + laser = ARMOR_LASER_MEDIUM, energy = ARMOR_ENERGY_SMALL, bomb = ARMOR_BOMB_PADDED, ) - slowdown = 0.5 + slowdown = 1 + +/obj/item/clothing/accessory/armor_plate/heavy/scc + name = "heavy SCC armor plate" + desc = "A heavy and nondescript armor plate. You really get the idea they wanted these mooks to be unfeeling." + icon_state = "plate_blue" + item_state = "plate_blue" + slowdown = 0 // the SCC is hacking /obj/item/clothing/accessory/armor_plate/heavy/sec name = "heavy corporate armor plate" @@ -175,8 +190,8 @@ item_state = "plate_sec_heavy" armor = list( melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_HANDGUNS, + bullet = ARMOR_BALLISTIC_REVOLVER, + laser = ARMOR_LASER_MEDIUM, energy = ARMOR_ENERGY_SMALL, bomb = ARMOR_BOMB_PADDED ) @@ -196,10 +211,10 @@ item_state = "helm_sec_heavy" armor = list( melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_HANDGUNS, + bullet = ARMOR_BALLISTIC_REVOLVER, + laser = ARMOR_LASER_MEDIUM, energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_PADDED + bomb = ARMOR_BOMB_PADDED, ) /obj/item/clothing/head/helmet/military @@ -211,8 +226,8 @@ item_state = "helm_military" armor = list( melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_MAJOR, + bullet = ARMOR_BALLISTIC_REVOLVER, + laser = ARMOR_LASER_RIFLE, energy = ARMOR_ENERGY_SMALL, bomb = ARMOR_BOMB_PADDED, ) \ No newline at end of file diff --git a/code/modules/clothing/suits/overlay.dm b/code/modules/clothing/suits/overlay.dm index c2b222cfef0..ac032528b58 100644 --- a/code/modules/clothing/suits/overlay.dm +++ b/code/modules/clothing/suits/overlay.dm @@ -2,14 +2,6 @@ // Could possibly make it so clothing has TWO kinds of customisable coloring for contrasting colors, more customisation and other stuff, but that requires loadout code I can't do. -Wezzy -/obj/item/clothing/suit/storage/toggle/overlay/Initialize() - . = ..() - update_icon() - -/obj/item/clothing/suit/storage/toggle/overlay/toggle_open() - . = ..() - update_icon() - /obj/item/clothing/suit/storage/toggle/overlay/submariner name = "submariner's coat" desc = "A leather jacket with a synthetic fur collar. It looks comfortable, if a bit warm for the station." @@ -17,4 +9,4 @@ icon_state = "submariner_coat" item_state = "submariner_coat" build_from_parts = TRUE - worn_overlay = "collar" + worn_overlay = "collar" \ No newline at end of file diff --git a/code/modules/clothing/suits/storage.dm b/code/modules/clothing/suits/storage.dm index b5e6cda29d0..923e75ebfa8 100644 --- a/code/modules/clothing/suits/storage.dm +++ b/code/modules/clothing/suits/storage.dm @@ -55,6 +55,7 @@ playsound(src, /decl/sound_category/rustle_sound, EQUIP_SOUND_VOLUME, TRUE) icon_state = "[initial(icon_state)][opened ? "_open" : ""]" item_state = icon_state + update_icon() update_clothing_icon() /obj/item/clothing/suit/storage/toggle/Initialize() diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm index 0bbc8eb3130..af0595626c7 100644 --- a/code/modules/clothing/under/accessories/accessory.dm +++ b/code/modules/clothing/under/accessories/accessory.dm @@ -178,7 +178,7 @@ name = "tie with a gold clip" build_from_parts = TRUE worn_overlay = "clip" - + /obj/item/clothing/accessory/tie/colourable/clip/silver name = "tie with a silver clip" worn_overlay = "sclip" @@ -221,6 +221,16 @@ drop_sound = 'sound/items/drop/accessory.ogg' pickup_sound = 'sound/items/pickup/accessory.ogg' +/obj/item/clothing/accessory/assunzione + name = "luceian amulent" + desc = "A common symbol of the Luceian faith abroad this amulet featuring the religion's all-seeing eye and eight-pointed crest \ + seems to be made of real gold and gemstones. While not as critical to faithful abroad as a warding sphere, it is considered good form \ + to ensure one's amulet is well-maintained." + icon = 'icons/clothing/accessories/assunzione_amulet.dmi' + item_state = "assunzione_amulet" + icon_state = "assunzione_amulet" + contained_sprite = TRUE + /obj/item/clothing/accessory/suspenders name = "suspenders" desc = "They suspend the illusion of the mime's play." @@ -578,6 +588,13 @@ drop_sound = 'sound/items/drop/gloves.ogg' pickup_sound = 'sound/items/pickup/gloves.ogg' +/obj/item/clothing/accessory/sleevepatch/scc + name = "Stellar Corporate Conglomerate patch" + desc = "An embroidered patch, adorned with the logo of the Stellar Corporate Conglomerate, which can be attached to the shoulder sleeve of clothing." + desc_fluff = "The Stellar Corporate Conglomerate, also known as Chainlink, is a joint alliance between the NanoTrasen Corporation, Hephaestus Industries, Idris Incorporated, Zeng-Hu Pharmaceuticals and Zavodskoi Interstellar to exercise an undisputed economic dominance over the Orion Spur." + icon_state = "scc_patch" + overlay_state = "scc_patch" + /obj/item/clothing/accessory/sleevepatch/zavodskoi name = "\improper Zavodskoi Interstellar sleeve patch" desc = "An embroidered patch which can be attached to the shoulder sleeve of clothing. This one bears the Zavodskoi Interstellar logo." diff --git a/code/modules/clothing/under/accessories/armband.dm b/code/modules/clothing/under/accessories/armband.dm index f8f9976872b..88860ef8c79 100644 --- a/code/modules/clothing/under/accessories/armband.dm +++ b/code/modules/clothing/under/accessories/armband.dm @@ -78,4 +78,10 @@ desc = "An armband tailored to look like the flag of the Republic of Biesel." desc_fluff = "While initially adopted during the early days of the TCFL to account for a sudden increase in volunteers and a lack of uniforms, during the height of the Republic of Biesel's conflicts with the Sol Alliance,\ it has been worn as a symbol of independence and patriotism." - icon_state = "tauceti" \ No newline at end of file + icon_state = "tauceti" + +/obj/item/clothing/accessory/armband/scc + name = "Stellar Corporate Conglomerate armband" + desc = "An armband, tailored with all the colors of the Sellar Corporate Conglomerate." + desc_fluff = "The Stellar Corporate Conglomerate, also known as Chainlink, is a joint alliance between the NanoTrasen Corporation, Hephaestus Industries, Idris Incorporated, Zeng-Hu Pharmaceuticals and Zavodskoi Interstellar to exercise an undisputed economic dominance over the Orion Spur." + icon_state = "scc" \ No newline at end of file diff --git a/code/modules/clothing/under/accessories/armor.dm b/code/modules/clothing/under/accessories/armor.dm index f122803a3d3..73879d579eb 100644 --- a/code/modules/clothing/under/accessories/armor.dm +++ b/code/modules/clothing/under/accessories/armor.dm @@ -27,11 +27,10 @@ icon_state = "legguards_ablative" item_state = "legguards_ablative" armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_RIFLES, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_PADDED + melee = ARMOR_MELEE_MINOR, + bullet = ARMOR_BALLISTIC_MINOR, + laser = ARMOR_LASER_AP, + energy = ARMOR_ENERGY_RESISTANT ) siemens_coefficient = 0 @@ -41,9 +40,9 @@ icon_state = "legguards_ballistic" item_state = "legguards_ballistic" armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_RIFLE, - laser = ARMOR_LASER_SMALL, + melee = ARMOR_MELEE_RESISTANT, + bullet = ARMOR_BALLISTIC_AP, + laser = ARMOR_LASER_MINOR, energy = ARMOR_ENERGY_MINOR, bomb = ARMOR_BOMB_PADDED ) @@ -55,8 +54,8 @@ item_state = "legguards_riot" armor = list( melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_SMALL, + bullet = ARMOR_BALLISTIC_MINOR, + laser = ARMOR_LASER_MINOR, energy = ARMOR_ENERGY_MINOR, bomb = ARMOR_BOMB_PADDED ) @@ -80,23 +79,28 @@ icon_state = "legguards_heavy" item_state = "legguards_heavy" armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_PADDED + melee = ARMOR_MELEE_MAJOR, + bullet = ARMOR_BALLISTIC_REVOLVER, + laser = ARMOR_LASER_MEDIUM, + energy = ARMOR_ENERGY_SMALL, + bomb = ARMOR_BOMB_PADDED, ) +/obj/item/clothing/accessory/leg_guard/heavy/scc + name = "heavy SCC leg guards" + icon_state = "legguards_blue" + item_state = "legguards_blue" + /obj/item/clothing/accessory/leg_guard/heavy/sec name = "heavy corporate leg guards" icon_state = "legguards_sec_heavy" item_state = "legguards_sec_heavy" armor = list( melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_HANDGUNS, + bullet = ARMOR_BALLISTIC_REVOLVER, + laser = ARMOR_LASER_MEDIUM, energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_PADDED + bomb = ARMOR_BOMB_PADDED, ) //Arm guards. @@ -127,9 +131,9 @@ icon_state = "armguards_ablative" item_state = "armguards_ablative" armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_RIFLES, + melee = ARMOR_MELEE_MINOR, + bullet = ARMOR_BALLISTIC_MINOR, + laser = ARMOR_LASER_AP, energy = ARMOR_ENERGY_RESISTANT ) siemens_coefficient = 0 @@ -140,10 +144,11 @@ icon_state = "armguards_ballistic" item_state = "armguards_ballistic" armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_RIFLE, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_MINOR + melee = ARMOR_MELEE_RESISTANT, + bullet = ARMOR_BALLISTIC_AP, + laser = ARMOR_LASER_MINOR, + energy = ARMOR_ENERGY_MINOR, + bomb = ARMOR_BOMB_PADDED ) /obj/item/clothing/accessory/arm_guard/riot @@ -153,9 +158,10 @@ item_state = "armguards_riot" armor = list( melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_MINOR + bullet = ARMOR_BALLISTIC_MINOR, + laser = ARMOR_LASER_MINOR, + energy = ARMOR_ENERGY_MINOR, + bomb = ARMOR_BOMB_PADDED ) /obj/item/clothing/accessory/arm_guard/military @@ -164,11 +170,11 @@ icon_state = "armguards_military" item_state = "armguards_military" armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_PADDED + melee = ARMOR_MELEE_MAJOR, + bullet = ARMOR_BALLISTIC_REVOLVER, + laser = ARMOR_LASER_RIFLE, + energy = ARMOR_ENERGY_SMALL, + bomb = ARMOR_BOMB_PADDED, ) /obj/item/clothing/accessory/arm_guard/heavy @@ -177,21 +183,26 @@ icon_state = "armguards_heavy" item_state = "armguards_heavy" armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_PADDED + melee = ARMOR_MELEE_MAJOR, + bullet = ARMOR_BALLISTIC_REVOLVER, + laser = ARMOR_LASER_MEDIUM, + energy = ARMOR_ENERGY_SMALL, + bomb = ARMOR_BOMB_PADDED, ) +/obj/item/clothing/accessory/arm_guard/heavy/scc + name = "heavy SCC arm guards" + icon_state = "armguards_blue" + item_state = "armguards_blue" + /obj/item/clothing/accessory/arm_guard/heavy/sec name = "heavy corporate arm guards" icon_state = "armguards_sec_heavy" item_state = "armguards_sec_heavy" armor = list( melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_HANDGUNS, + bullet = ARMOR_BALLISTIC_REVOLVER, + laser = ARMOR_LASER_MEDIUM, energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_PADDED - ) + bomb = ARMOR_BOMB_PADDED, + ) \ No newline at end of file diff --git a/code/modules/clothing/under/accessories/badges.dm b/code/modules/clothing/under/accessories/badges.dm index b43b6227190..e4cb95cfd67 100644 --- a/code/modules/clothing/under/accessories/badges.dm +++ b/code/modules/clothing/under/accessories/badges.dm @@ -243,3 +243,236 @@ icon_state = "trinary_badge" overlay_state = "trinary_badge" badge_string = null + +// passcards + +/obj/item/clothing/accessory/badge/passcard + name = "republic of biesel passcard" + desc = "A passcard issued to citizens of the Republic of Biesel, typically from planets in Biesel proper and smaller territories." + desc_fluff = "A passcard is a modern evolution of the state-issued identification card, with all the functionality of a driver's license, birth certificate, passport, or other document, \ + updated as necessary or able by a central government. The concept was pioneered in the early days of the Sol Alliance, and continues in most human stellar nations to this day, owing to the availability \ + and price of consumer plastics and self-powered microholograms." + icon = 'icons/clothing/accessories/passcards.dmi' + icon_state = "passcard_ceti" + item_state = "passcard_ceti" + contained_sprite = TRUE + slot_flags = null + w_class = ITEMSIZE_TINY + flippable = FALSE + v_flippable = FALSE + badge_string = null + + drop_sound = 'sound/items/drop/card.ogg' + pickup_sound = 'sound/items/pickup/card.ogg' + +/obj/item/clothing/accessory/badge/passcard/sol + name = "\improper ASSN passcard" + desc = "A passcard issued to citizens of the Alliance of Sovereign Solarian Nations, typically from planets such as the Jewel Worlds or smaller zones of authority." + desc_fluff = "A passcard is a modern evolution of the state-issued identification card, with all the functionality of a driver's license, birth certificate, passport, or other document, \ + updated as necessary or able by a central government. The concept was pioneered in the early days of the Sol Alliance, and continues in most human stellar nations to this day, owing to the availability \ + and price of consumer plastics and self-powered microholograms." + icon_state = "passcard_sol" + item_state = "passcard_sol" + +/obj/item/clothing/accessory/badge/passcard/sol/pluto + name = "plutonian passcard" + desc = "A passcard issued to citizens of the Solarian planetoid, Pluto." + desc_fluff = "Plutonian passcards, in addition to the features of their cousins in the greater Sol Alliance, include details such as Party membership and occupation, available for viewing by personnel \ + with the appropriate scanning measures." + icon_state = "passcard_pluto" + item_state = "passcard_pluto" + +/obj/item/clothing/accessory/badge/passcard/sol/jupiter + name = "jovian passcard" + desc = "A passcard issued to citizens of Sol Alliance, hailing from Jupiter or its moons." + desc_fluff = "Due to its status as a trading hub for the Jewel Worlds of the Sol system, Jovian Solarians are among the most populous type to exist outside Earth proper, numbering in the billions. \ + Originally given out as a celebration of fifty years of Jovian settlement, these passcards have since been introduced as a display of pride in their mutual orbit." + icon_state = "passcard_jovian" + item_state = "passcard_jovian" + +/obj/item/clothing/accessory/badge/passcard/sol/europa + name = "europan passcard" + desc = "A passcard issued to citizens of the Alliance of Sovereign Solarian Nations, hailing from the murky Jovian moon of Europa." + desc_fluff = "The Europan passcard, boasting a difficult-to-align identification strip, fragile materials, and an unfortunate resemblance to the ZHS Abaddon research vessel legendary for its supposed \ + loss to the Cetus, is almost universally reviled by Europans, border agents, and choking sea creatures alike. To carry one aboard a submarine is said to bring bad luck so foul as to serve as a beacon \ + to the darkest forces known to sailors." + icon_state = "passcard_europa" + item_state = "passcard_europa" + +/obj/item/clothing/accessory/badge/passcard/sol/cytherean + name = "cytherean passcard" + desc = "A passcard issued to citizens of the Alliance of Sovereign Solarian Nations from the Cytherean Venusian cloud-cities." + desc_fluff = "The luxuriant Cytherean lifestyle is represented no better than in its identification cards; gaudy, with built-in neon flashing lights and doubling as a business card. The font is infamous for \ + its illegibility." + icon_state = "passcard_cytherean" + item_state = "passcard_cytherean" + +/obj/item/clothing/accessory/badge/passcard/sol/jintarian + name = "jintarian passcard" + desc = "A... 'passcard' manufactured by a Venusian living on the surface of their hostile Solarian world." + desc_fluff = "In sharp contrast to the passcards wielded in the skies of their world, the common Jintarian passcard is a cobbled-together mess of a stolen corporate identification card with an ID-strip \ + duct taped to the edge. Traditionally worn by free-runners on the back of their clothing, so that the people in their dust may know who it was that just outpaced them." + icon_state = "passcard_jintarian" + item_state = "passcard_jintarian" + +/obj/item/clothing/accessory/badge/passcard/sol/silversun + name = "silversun commemorative passcard" + desc = "A passcard issued to Idris employees currently or formerly employed or residing on the planet Silversun." + desc_fluff = "While Silversun itself is a member of the Sol Alliance, Idris Incorporated has secured a number of obscure patents, permits, and bureaucratic channels that allows them to commemorate \ + faithful employees from the resort world with unique passcards that double as membership cards to some of the cheaper resorts on-world." + icon_state = "passcard_silversun" + item_state = "passcard_silversun" + +/obj/item/clothing/accessory/badge/passcard/sol/luna + name = "lunarian passcard" + desc = "A passcard issued to Solarian citizens from the moon of Earth, Luna." + desc_fluff = "Not only does the Lunarian passcard bring power, prestige, and a heritage of grace; it also brings an invitation to almost every high society open gathering on the planet, and earns priority \ + in most reservations for the world's restaurants. If ever there was a silver spoon, it sits here." + icon_state = "passcard_moon" + item_state = "passcard_moon" + +/obj/item/clothing/accessory/badge/passcard/eridani + name = "eridani passcard" + desc = "A holographic passcard issued to residents of the Free Economic Zone of Epsilon Eridani." + desc_fluff = "Known with a number of unfavorable acronyms across the Republic, Eridani passcards tend to include unhelpful details such as credit score, personal debts, and insurance providers to those \ + equipped with the right equipment. Infamous across the Orion Spur for being the most sought-after passcards for counterfeiting." + icon_state = "passcard_eridani" + item_state = "passcard_eridani" + +/obj/item/clothing/accessory/badge/passcard/elyra + name = "elyran passcard" + desc = "A passcard issued to citizens of the Serene Republic of Elyra." + desc_fluff = "Much like synthetics manufactured in the Serene Republic, Elyran passcards include high-grade anti-counterfeiting through a wafer of borosilicate reinforced with a randomly-chosen alloy. \ + Unlike other nations, however, Elyra allows for heavy personal customization of their passcards, with some of the most expensive government contractors offering brief musical messages or integration with \ + jewelry such as a bracelet or necklace." + icon_state = "passcard_elyra" + item_state = "passcard_elyra" + +/obj/item/clothing/accessory/badge/passcard/dominia + name = "dominian passcard" + desc = "A passcard issued to citizens of the Empire of Dominia." + desc_fluff = "Dominian passcards, aside from the usual information, also include details such as one's House, their remaining Mo'ri'zal debt, their status as an Edict Breaker, or- most uniquely- their most recent \ + testing for status as a synthetic infiltrator." + icon_state = "passcard_dominia" + item_state = "passcard_dominia" + +/obj/item/clothing/accessory/badge/passcard/coalition + name = "coalition passcard" + desc = "A passcard issued to a citizen of the Coalition of Colonies, typically from worlds like Xanu Prime or the 'wilder' frontier-ward planets lacking in strong central government." + desc_fluff = "Due to its terse relations with the Sol Alliance, the Coalition of Colonies has likewise refused to make their passcard software compatible with Alliance verification technology as a \ + whole. Those travelling from the Coalition to Sol space, for whatever reason, are thus likely to carry paper copies of their identity paperwork with them." + icon_state = "passcard_coc" + item_state = "passcard_coc" + +/obj/item/clothing/accessory/badge/passcard/himeo + name = "himean passcard" + desc = "A passcard issued to a citizen of the planet Himeo." + desc_fluff = "Himean passcards are descended from a series of modifications made to the original design, meant to show the user had membership in a worker's syndicate without arousing suspicion from \ + overseers with paper union cards. These 'defaced' Solarian passcards often find their way into planetary museums, or private collections." + icon_state = "passcard_himeo" + item_state = "passcard_himeo" + +/obj/item/clothing/accessory/badge/passcard/gad + name = "gadpathurian passcard" + desc = "A passcard issued to an active member of a Gadpathurian cadre." + desc_fluff = "While identification tabs remain the de facto proof of a Gadpathurian's pride to their cadre and nation, more recent innovations in identification-locked facilities and equipment have demanded \ + a temporary solution to the low-technology tabs until widespread reform can be made to their manufacturing. As such, Gadpathurian passcards are developed from the ground-up, and are notorious for including \ + hostile electronics that overheat Solarian examination equipment and can be easily destroyed in the event of capture." + icon_state = "passcard_gad" + item_state = "passcard_gad" + +/obj/item/clothing/accessory/badge/passcard/vysoka + name = "vysokan passcard" + desc = "A passcard issued to a citizen of the planet Vysoka." + desc_fluff = "Vysokan passcards often include metals and plastics derived from the place of origin for their recipient, and may make small aesthetic changes to reflect family traditions. They are often \ + objects of incredible sentimental value to their bearer." + icon_state = "passcard_vysoka" + item_state = "passcard_vysoka" + +/obj/item/clothing/accessory/badge/passcard/assu + name = "assunzionii passcard" + desc = "A passcard issued to a citizen of the planet Assunzione." + desc_fluff = "Assunzionii passcards, while unable to provide the same light as a warding sphere, are known for having light-absorbing compounds in their assembly, and thus glow in the dark for easy reading." + icon_state = "passcard_assu" + item_state = "passcard_assu" + +/obj/item/clothing/accessory/badge/passcard/scarab + name = "scarab passblade" + desc = "A dagger issued as a writ of passage to Scarabs abroad." + desc_fluff = "By Scarab traditions, one should show their weapon to non-Scarabs upon first meeting. This dagger, sheathed in hakhma chitin, is often given to noncombatants, the Released, or the young, so they \ + may meet with outsiders with at least a blade between them. Despite this, the blade is sealed tightly within the scabbard." + icon_state = "passcard_scarab" + item_state = "passcard_scarab" + slot_flags = SLOT_HOLSTER + w_class = ITEMSIZE_SMALL + + drop_sound = 'sound/items/drop/metalweapon.ogg' + pickup_sound = 'sound/items/pickup/metalweapon.ogg' + +/obj/item/clothing/accessory/badge/passcard/techno + name = "techno-conglomerate passcard" + desc = "A clump of machinery scraps repurposed into a functional passcard, used by the Techno-Conglomerate." + desc_fluff = "In a society that values progress towards perfection, the Techno-Conglomerate has also applied this to their 'governance'. Prospective wayfarers and explorers will often be required to assemble \ + their own cards from scraps left over from the early days of the technology, often leading to outdated or buggy versions. Urban legend claims that some have even found a way to exploit this technology to 'sequence' \ + their way into more secure locales." + icon_state = "passcard_techno" + item_state = "passcard_techno" + +/obj/item/clothing/accessory/badge/passcard/burszia + name = "burszian passcard" + desc = "A passcard issued to Burszian Hephaestus employees and- owned IPCs- working abroad." + desc_fluff = "Despite protest from the Himean representatives in government, Hephaestus Industries- citing their 'Home is where the Hephaestus is' initiative- is permitted to issue up to five thousand \ + sponsored passcards to participating employees on a yearly basis, both to remind them of their home and to save on imported labor costs." + icon_state = "passcard_burs" + item_state = "passcard_burs" + +/obj/item/clothing/accessory/badge/passcard/konyang + name = "konyanger passcard" + desc = "A passcard issued to residents of the planet Konyang." + desc_fluff = "The 'homeworld' of the human positronic intelligence, life on Konyang is a tightly-knit tapestry of organic-synthetic relations. This is even reflected in their passcards, featuring dried moss \ + from the planet's farms in the same plastic casing as a small sigil of the Perfection said to grant safe passage abroad for adherents." + icon_state = "passcard_konyang" + item_state = "passcard_konyang" + +//passports + +/obj/item/clothing/accessory/badge/passport + name = "biesellite passport" + desc = "A passport issued to a citizen of the Republic of Biesel." + icon = 'icons/clothing/accessories/passcards.dmi' + icon_state = "passport_ceti" + item_state = "passport_ceti" + contained_sprite = TRUE + slot_flags = null + w_class = ITEMSIZE_TINY + flippable = FALSE + v_flippable = FALSE + badge_string = null + + drop_sound = 'sound/items/drop/cloth.ogg' + + pickup_sound = 'sound/items/pickup/cloth.ogg' + +/obj/item/clothing/accessory/badge/passport/sol + name = "solarian passport" + desc = "A passport issued to a citizen of the Alliance of Sovereign Solarian Nations, or Sol Alliance. An outdated document for passage abroad." + icon_state = "passport_sol" + item_state = "passport_sol" + +/obj/item/clothing/accessory/badge/passport/coc + name = "coalition passport" + desc = "A passport issued to a citizen of the Coalition of Colonies, typically from worlds like Xanu Prime or the 'wilder' frontier-ward planets lacking in strong central government." + icon_state = "passport_coc" + item_state = "passport_coc" + +/obj/item/clothing/accessory/badge/passport/elyra + name = "elyran passport" + desc = "A passport issued to a citizen of the Serene Republic of Elyra. Vintage!" + icon_state = "passport_elyra" + item_state = "passport_elyra" + +/obj/item/clothing/accessory/badge/passport/dominia + name = "dominian passport" + desc = "A passport issued to a resident of the Empire of Dominia. Popular among those whose debt is great but pockets light." + icon_state = "passport_dominia" + item_state = "passport_dominia" diff --git a/code/modules/clothing/under/accessories/holster.dm b/code/modules/clothing/under/accessories/holster.dm index cf7d43cc2fe..5bb77546b64 100644 --- a/code/modules/clothing/under/accessories/holster.dm +++ b/code/modules/clothing/under/accessories/holster.dm @@ -7,6 +7,7 @@ var/sound_in = 'sound/weapons/holster/holsterin.ogg' var/sound_out = 'sound/weapons/holster/holsterout.ogg' flippable = 1 + var/base_name = "" /obj/item/clothing/accessory/holster/proc/holster(var/obj/item/I, var/mob/living/user) if(holstered && istype(user)) @@ -27,11 +28,12 @@ holstered.add_fingerprint(user) w_class = max(w_class, holstered.w_class) user.visible_message("[user] holsters \the [holstered].", "You holster \the [holstered].") - name = "occupied [initial(name)]" + base_name = name + name = "occupied [base_name]" /obj/item/clothing/accessory/holster/proc/clear_holster() holstered = null - name = initial(name) + name = base_name /obj/item/clothing/accessory/holster/proc/unholster(mob/user as mob) if(!holstered) @@ -39,6 +41,8 @@ if(istype(user.get_active_hand(),/obj) && istype(user.get_inactive_hand(),/obj)) to_chat(user, "You need an empty hand to draw \the [holstered]!") + else if (use_check(user)) + to_chat(user, "You can't draw \the [holstered] in your current state!") else var/sound_vol = 25 if(user.a_intent == I_HURT) diff --git a/code/modules/clothing/under/accessories/shirts.dm b/code/modules/clothing/under/accessories/shirts.dm index 31086c0f6cb..43f66700766 100644 --- a/code/modules/clothing/under/accessories/shirts.dm +++ b/code/modules/clothing/under/accessories/shirts.dm @@ -84,6 +84,18 @@ icon_state = "blouse" item_state = "blouse" +/obj/item/clothing/accessory/longblouse + name = "long-sleeved blouse" + desc = "A long-sleeved, loose fitting garment." + icon_state = "longblouse" + item_state = "longblouse" + +/obj/item/clothing/accessory/puffyblouse + name = "puffy blouse" + desc = "A loose fitting garment with plenty of material around the arms." + icon_state = "puffyblouse" + item_state = "puffyblouse" + //Legacy /obj/item/clothing/accessory/wcoat name = "waistcoat" diff --git a/code/modules/clothing/under/jobs/medsci.dm b/code/modules/clothing/under/jobs/medsci.dm index 51ff3ef0501..19180b890c4 100644 --- a/code/modules/clothing/under/jobs/medsci.dm +++ b/code/modules/clothing/under/jobs/medsci.dm @@ -198,6 +198,7 @@ contained_sprite = TRUE icon_state = "firstresponderjumpsuit" item_state = "firstresponderjumpsuit" + worn_state = "firstresponderjumpsuit" /obj/item/clothing/under/rank/psych desc = "A basic white jumpsuit. It has turqouise markings that denote the wearer as a psychiatrist." diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 32e52852f2d..09c971ad0d4 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -84,6 +84,26 @@ icon_state = "fib_uniform" worn_state = "fib_uniform" +/obj/item/clothing/under/rank/scc + name = "Stellar Corporate Conglomerate agent uniform" + desc = "A formal blue uniform worn by agents of the Stellar Corporate Conglomerate." + desc_fluff = "The Stellar Corporate Conglomerate, also known as Chainlink, is a joint alliance between the NanoTrasen Corporation, Hephaestus Industries, Idris Incorporated, Zeng-Hu Pharmaceuticals and Zavodskoi Interstellar to exercise an undisputed economic dominance over the Orion Spur." + icon = 'icons/clothing/under/uniforms/scc.dmi' + icon_state = "scc_agent" + item_state = "scc_agent" + worn_state = "scc_agent" + contained_sprite = TRUE + + rolled_down = FALSE + rolled_sleeves = FALSE + +/obj/item/clothing/under/rank/scc/executive + name = "Stellar Corporate Conglomerate executive uniform" + desc = "A stylish purple uniform worn by executive agents of the Stellar Corporate Conglomerate." + icon_state = "scc_executive" + item_state = "scc_executive" + worn_state = "scc_executive" + /obj/item/clothing/under/ert name = "ERT tactical uniform" desc = "A short-sleeved black uniform, paired with grey digital-camo cargo pants. It looks very tactical." diff --git a/code/modules/clothing/under/shorts.dm b/code/modules/clothing/under/shorts.dm index b8c99e74185..ade9a6a4af1 100644 --- a/code/modules/clothing/under/shorts.dm +++ b/code/modules/clothing/under/shorts.dm @@ -29,6 +29,13 @@ icon_state = "greyshorts" item_state = "greyshorts" +/obj/item/clothing/under/shorts/scc + name = "Stellar Corporate Conglomerate shorts" + desc = "Shorts displaying the wearer's pride in their assigned corporate entity." + desc_fluff = "The Stellar Corporate Conglomerate, also known as Chainlink, is a joint alliance between the NanoTrasen Corporation, Hephaestus Industries, Idris Incorporated, Zeng-Hu Pharmaceuticals and Zavodskoi Interstellar to exercise an undisputed economic dominance over the Orion Spur." + icon_state = "sccshorts" + item_state = "sccshorts" + /obj/item/clothing/under/shorts/jeans name = "jeans shorts" desc = "Some jeans! Just in short form!" diff --git a/code/modules/clothing/under/xenos/unathi.dm b/code/modules/clothing/under/xenos/unathi.dm index 504cc121fb6..512f286c48b 100644 --- a/code/modules/clothing/under/xenos/unathi.dm +++ b/code/modules/clothing/under/xenos/unathi.dm @@ -4,11 +4,8 @@ icon = 'icons/obj/unathi_items.dmi' icon_state = "tunic" item_state = "tunic" - var/has_down_and_sleeves = TRUE // does this under uniform have down and sleeve sprites? contained_sprite = TRUE -/obj/item/clothing/under/unathi/Initialize() - ..() rolled_down = FALSE rolled_sleeves = FALSE @@ -17,7 +14,6 @@ desc = "A striking, modern dress typically worn by Moghean women of high birth." icon_state = "jizixi" item_state = "jizixi" - has_down_and_sleeves = FALSE /obj/item/clothing/under/unathi/sashes name = "gy'zao sashes" @@ -25,89 +21,30 @@ desc = "An androgynous set of sashes worn by Unathi when they want to bask under the sun. Not appropriate to wear outside of that." icon_state = "gyzao" item_state = "gyzao" - has_down_and_sleeves = FALSE /obj/item/clothing/under/unathi/mogazali name = "mogazali attire" desc = "A traditional Moghean uniform worn by men of high status whether merchants, priests, or nobility." icon_state = "mogazali" item_state = "mogazali" - has_down_and_sleeves = FALSE /obj/item/clothing/under/unathi/zazali name = "zazali garb" desc = "An old fashioned, extremely striking garb for the Unathi man with pointy shoulders. It's typically worn by those in the warrior caste... Or those with something to prove." icon_state = "zazali" item_state = "zazali" - has_down_and_sleeves = FALSE /obj/item/clothing/under/unathi/huytai name = "huytai outfit" desc = "Typically worn by Unathi women who engage in a trade. Popular with fisherwomen and others." icon_state = "huytai" item_state = "huytai" - has_down_and_sleeves = FALSE /obj/item/clothing/under/unathi/zozo name = "zo'zo top" desc = "A modern blend of Ouerean and Moghean style for the Unathi man on the go. Great for sunbathing." icon_state = "zozo" item_state = "zozo" - has_down_and_sleeves = FALSE - -// Turns out normal rolling was pretty shoddy, so I made my own for 'Nathi - geeves -/obj/item/clothing/under/unathi/rollsuit() - set name = "Roll Down Jumpsuit" - set category = "Object" - set src in usr - - if(use_check_and_message(usr)) - return - if(has_down_and_sleeves == FALSE) - to_chat(usr, SPAN_NOTICE("You cannot roll down the [src]!")) - return - - if((rolled_sleeves == TRUE) && !(rolled_down)) - rolled_sleeves = FALSE - - if(rolled_down) - body_parts_covered = initial(body_parts_covered) - item_state = "[initial(item_state)]" // REMINDER!: Contained Sprites automatically take out the _un after the spritename, somehow. - to_chat(usr, SPAN_NOTICE("You roll up your [src].")) - rolled_down = FALSE - else - body_parts_covered &= LOWER_TORSO|LEGS|FEET - item_state = "[initial(item_state)]_d" - to_chat(usr, SPAN_NOTICE("You roll down your [src].")) - rolled_down = TRUE - update_clothing_icon() - -/obj/item/clothing/under/unathi/rollsleeves() - set name = "Roll Up Sleeves" - set category = "Object" - set src in usr - - if(use_check_and_message(usr)) - return - if(has_down_and_sleeves == FALSE) - to_chat(usr, SPAN_NOTICE("You cannot roll up your [src]'s sleeves!")) - return - - if(rolled_down == TRUE) - to_chat(usr, SPAN_NOTICE("You must roll up your [src] first!")) - return - - if(rolled_sleeves) - body_parts_covered = initial(body_parts_covered) - item_state = "[initial(item_state)]" // REMINDER!: Contained Sprites automatically take out the _un after the spritename, somehow. - to_chat(usr, SPAN_NOTICE("You roll down your [src]'s sleeves.")) - rolled_sleeves = FALSE - else - body_parts_covered &= ~(ARMS|HANDS) - item_state = "[initial(item_state)]_r" - to_chat(usr, SPAN_NOTICE("You roll up your [src]'s sleeves.")) - rolled_sleeves = TRUE - update_clothing_icon() /obj/item/clothing/suit/unathi/mantle/wrapping name = "unathi wrappings" diff --git a/code/modules/cooking/recipes/recipes_mix.dm b/code/modules/cooking/recipes/recipes_mix.dm index a8b7964c75d..642d8050b27 100644 --- a/code/modules/cooking/recipes/recipes_mix.dm +++ b/code/modules/cooking/recipes/recipes_mix.dm @@ -1,5 +1,19 @@ // see code/datums/recipe.dm +/decl/recipe/hotdog + items = list( + /obj/item/reagent_containers/food/snacks/bun, + /obj/item/reagent_containers/food/snacks/sausage + ) + result = /obj/item/reagent_containers/food/snacks/hotdog + +/decl/recipe/classichotdog + items = list( + /obj/item/reagent_containers/food/snacks/bun, + /obj/item/reagent_containers/food/snacks/meat/corgi + ) + result = /obj/item/reagent_containers/food/snacks/classichotdog + /decl/recipe/humanburger items = list( /obj/item/reagent_containers/food/snacks/meat/human, @@ -49,20 +63,6 @@ ) result = /obj/item/reagent_containers/food/snacks/burger/tofu -/decl/recipe/hotdog - items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/sausage - ) - result = /obj/item/reagent_containers/food/snacks/hotdog - -/decl/recipe/classichotdog - items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/meat/corgi - ) - result = /obj/item/reagent_containers/food/snacks/classichotdog - /decl/recipe/humankabob items = list( /obj/item/stack/rods, @@ -115,6 +115,13 @@ ) result = /obj/item/reagent_containers/food/snacks/sandwich +/decl/recipe/bunbun + items = list( + /obj/item/reagent_containers/food/snacks/bun, + /obj/item/reagent_containers/food/snacks/bun + ) + result = /obj/item/reagent_containers/food/snacks/bunbun + /decl/recipe/superbiteburger fruit = list("tomato" = 1) reagents = list(/decl/reagent/sodiumchloride = 5, /decl/reagent/blackpepper = 5) diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index d82f160d5f8..12c30f637fb 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -1933,4 +1933,62 @@ All custom items with worn sprites must follow the contained sprite system: http icon_state = "rhasdrimara_veil" item_state = "rhasdrimara_veil" contained_sprite = TRUE + species_restricted = list(BODYTYPE_TAJARA) + +/obj/item/clothing/suit/storage/toggle/fr_jacket/fluff/akila_jacket //Reflective First Responder Jacket - Akila Aksha'Shalwariran - shestrying + name = "reflective first responder jacket" + desc = "A jacket in an eye-blinding yellow, with flourescent green, light-reflective striping along the cuffs and bottom edge. A bright red cross rests on the front, over the heart." + icon = 'icons/obj/custom_items/akila_jacket.dmi' + icon_state = "akila_jacket" + item_state = "akila_jacket" + contained_sprite = TRUE + + +/obj/structure/sign/flag/red_coalition + name = "Red Coalition flag" + desc = "A high-quality copy of an original Red Coalition banner. This variant on the standard was flown by the Zelazny arcology during the Martian World War, Zelazny's origins as a \ + mining colony represented in the center by the alchemical symbol for iron." + icon_state = "redcoalition" + +/obj/structure/sign/flag/red_coalition/left + icon_state = "redcoalition_l" + +/obj/structure/sign/flag/red_coalition/right + icon_state = "redcoalition_r" + +/obj/item/flag/fluff/nikita_flag //Red Coalition Banner - Nikita Yutani - sycmos + name = "Red Coalition flag" + icon = 'icons/obj/custom_items/nikita_flag.dmi' + icon_state = "nikita_flag" + desc = "A high-quality copy of an original Red Coalition banner. This variant on the standard was flown by the Zelazny arcology during the Martian World War, Zelazny's origins as a \ + mining colony represented in the center by the alchemical symbol for iron." + flag_path = "redcoalition" + +/obj/item/flag/fluff/nikita_flag/l + flag_size = 1 + + +/obj/item/voidsuit_modkit/fluff/rajka_suit + name = "HEV-3 voidsuit kit" + desc = "A simple cardboard box containing the requisition forms, permits, and decal kits for a HEV-3 voidsuit." + suit_options = list( + /obj/item/clothing/suit/space/void/mining = /obj/item/clothing/suit/space/void/mining/fluff/rajka_suit, + /obj/item/clothing/head/helmet/space/void/mining = /obj/item/clothing/head/helmet/space/void/mining/fluff/rajka_helm) + +/obj/item/clothing/head/helmet/space/void/mining/fluff/rajka_helm //HEV-3 Helmet - Rajka Kaljurl'zar - abigbear + name = "HEV-3 helmet" + desc = "A Hephaestus Environmental Voidsuit variant tailored to Tajara, complete with temperature-circulation auxiliaries, spacious helmet interior to minimize friction, and complete anti-microbial filtration systems." + icon = 'icons/obj/custom_items/rajka_suit.dmi' + icon_state = "rajka_helm" + item_state = "rajka_helm" + contained_sprite = TRUE + species_restricted = list(BODYTYPE_TAJARA) + +/obj/item/clothing/suit/space/void/mining/fluff/rajka_suit //HEV-3 Voidsuit - Rajka Kaljurl'zar - abigbear + name = "HEV-3 voidsuit" + desc = "A Hephaestus Environmental Voidsuit variant tailored to Tajara, complete with temperature-circulation auxiliaries, heat exchange coils, anti-friction and anti-microbial fabric, and moderate grade external reinforcement for all your industrial EVA activities." + icon = 'icons/obj/custom_items/rajka_suit.dmi' + icon_state = "rajka_suit" + item_state = "rajka_suit" + contained_sprite = TRUE species_restricted = list(BODYTYPE_TAJARA) \ No newline at end of file diff --git a/code/modules/detectivework/microscope/dnascanner.dm b/code/modules/detectivework/microscope/dnascanner.dm index fd3c45f1308..6ce527e22a1 100644 --- a/code/modules/detectivework/microscope/dnascanner.dm +++ b/code/modules/detectivework/microscope/dnascanner.dm @@ -103,7 +103,7 @@ update_icon() if(bloodsamp) var/obj/item/paper/P = new() - var/pname = "[src] report #[++report_num]: [bloodsamp.name]" + var/pname = "[src] report #[++report_num]" var/info P.stamped = list(/obj/item/stamp) P.overlays = list("paper_stamped") diff --git a/code/modules/detectivework/microscope/microscope.dm b/code/modules/detectivework/microscope/microscope.dm index 0fc10dcc9ae..1ce56ba1414 100644 --- a/code/modules/detectivework/microscope/microscope.dm +++ b/code/modules/detectivework/microscope/microscope.dm @@ -48,7 +48,7 @@ if(slide.has_swab) var/obj/item/forensics/swab/swab = slide.has_swab - pname = "GSR report #[++report_num]: [swab.name]" + pname = "GSR report #[report_num]" info = "Scanned item:
[swab.name]

" if(swab.gsr) @@ -58,10 +58,10 @@ else if(slide.has_sample) var/obj/item/sample/fibers/fibers = slide.has_sample - pname = "Fiber report #[++report_num]: [initial(fibers.name)]" + pname = "Fiber report #[report_num]" info = "Scanned item:
[initial(fibers.name)]

" if(fibers.evidence) - info = "Molecular analysis on provided sample has determined the presence of unique fiber strings.

" + info = "Molecular analysis on [fibers.name] has determined the presence of unique fiber strings.

" for(var/fiber in fibers.evidence) info += "Most likely match for fibers: [fiber]

" else @@ -70,7 +70,7 @@ pname = "Empty slide report #[report_num]" info = "Evidence suggests that there's nothing in this slide." else if(istype(sample, /obj/item/sample/print)) - pname = "Fingerprint report #[report_num]: [sample.name]" + pname = "Fingerprint report #[report_num]" info = "Fingerprint analysis report #[report_num]: [sample.name]
" var/obj/item/sample/print/card = sample if(card.evidence && card.evidence.len) diff --git a/code/modules/detectivework/tools/evidencebag.dm b/code/modules/detectivework/tools/evidencebag.dm index d6cd2daaab4..f255edb070e 100644 --- a/code/modules/detectivework/tools/evidencebag.dm +++ b/code/modules/detectivework/tools/evidencebag.dm @@ -8,6 +8,12 @@ item_state = "" w_class = ITEMSIZE_SMALL var/obj/item/stored_item = null + var/label_text = "" + var/base_name = "" + +/obj/item/evidencebag/Initialize() + . = ..() + base_name = name /obj/item/evidencebag/MouseDrop(var/obj/item/I as obj) if (!ishuman(usr)) @@ -53,7 +59,7 @@ to_chat(user, "[src] already has something inside it.") return - user.visible_message("[user] puts [I] into [src]", "You put [I] inside [src].",\ + user.visible_message("[user] puts \the [I] into \the [src].", SPAN_NOTICE("You put \the [I] inside \the [src]."),\ "You hear a rustle as someone puts something into a plastic bag.") icon_state = "evidence" @@ -74,7 +80,7 @@ /obj/item/evidencebag/attack_self(mob/user as mob) if(contents.len) var/obj/item/I = contents[1] - user.visible_message("[user] takes [I] out of [src]", "You take [I] out of [src].",\ + user.visible_message("[user] takes \the [I] out of \the [src].", SPAN_NOTICE("You take \the [I] out of \the [src]."),\ "You hear someone rustle around in a plastic bag, and remove something.") cut_overlays() //remove the overlays @@ -92,3 +98,21 @@ /obj/item/evidencebag/examine(mob/user) ..(user) if (stored_item) user.examinate(stored_item) + +/obj/item/evidencebag/attackby(obj/item/W as obj, mob/user as mob) + if(W.ispen() || istype(W, /obj/item/device/flashlight/pen)) + var/tmp_label = sanitizeSafe(input(user, "Enter a label for [name]", "Label", label_text), MAX_NAME_LEN) + if(length(tmp_label) > 15) + to_chat(user, "The label can be at most 15 characters long.") + else + to_chat(user, "You set the label to \"[tmp_label]\".") + label_text = tmp_label + update_name_label() + return + . = ..() + +/obj/item/evidencebag/proc/update_name_label() + if(label_text == "") + name = base_name + else + name = "[base_name] ([label_text])" diff --git a/code/modules/detectivework/tools/rag.dm b/code/modules/detectivework/tools/rag.dm index e62977e2686..07a7deca815 100644 --- a/code/modules/detectivework/tools/rag.dm +++ b/code/modules/detectivework/tools/rag.dm @@ -182,7 +182,10 @@ if(!proximity) return - if(istype(A, /obj/structure/reagent_dispensers) || istype(A, /obj/structure/mopbucket) || istype(A, /obj/item/reagent_containers/glass) || istype(A, /obj/structure/sink)) + if(istype(A, /obj/structure/sink)) + return + + else if(istype(A, /obj/structure/reagent_dispensers) || istype(A, /obj/structure/mopbucket) || istype(A, /obj/item/reagent_containers/glass)) if(!REAGENTS_FREE_SPACE(reagents)) to_chat(user, SPAN_WARNING("\The [src] is already soaked.")) return @@ -194,7 +197,7 @@ update_icon() return - if(!on_fire && istype(A) && (src in user)) + else if(!on_fire && istype(A) && (src in user)) if(A.is_open_container() && !(A in user)) remove_contents(user, A) else if(!ismob(A)) //mobs are handled in attack() - this prevents us from wiping down people while smothering them. diff --git a/code/modules/effects/maze_generation/helper_modules/_helper_module_base.dm b/code/modules/effects/maze_generation/helper_modules/_helper_module_base.dm new file mode 100644 index 00000000000..a68030cfe8e --- /dev/null +++ b/code/modules/effects/maze_generation/helper_modules/_helper_module_base.dm @@ -0,0 +1,14 @@ +/obj/effect/mazegen/module_helper + name = "maze helper" + +/** + * Helper handler proc + * + * This exists as an overridable method so you can do custom helper logic. + * An example of this is removing all windows on a tile. + * + * Arguments: + * * blockwise - This will be TRUE if the maze this is running on is a blockwise maze + */ +/obj/effect/mazegen/module_helper/proc/helper_run(blockwise = FALSE, obj/effect/mazegen/host) + CRASH("spawn_loot() not overriden for [type]") diff --git a/code/modules/effects/maze_generation/helper_modules/entry_exit.dm b/code/modules/effects/maze_generation/helper_modules/entry_exit.dm new file mode 100644 index 00000000000..ba6f2563c5a --- /dev/null +++ b/code/modules/effects/maze_generation/helper_modules/entry_exit.dm @@ -0,0 +1,12 @@ +// Forces entry and exit points +/obj/effect/mazegen/module_helper/entry_exit + name = "entrance/exit allocator" + +/obj/effect/mazegen/module_helper/entry_exit/helper_run(blockwise = FALSE, obj/effect/mazegen/host) + if(blockwise) + var/turf/T = get_turf(src) + var/obj/effect/mazegen/generator/blockwise/BWG = host + T.ChangeTurf(BWG.floor_material) + else + for(var/obj/structure/window/reinforced/crescent/MG in get_turf(src)) + qdel(MG) \ No newline at end of file diff --git a/code/modules/effects/maze_generation/loot_modules/_loot_module_base.dm b/code/modules/effects/maze_generation/loot_modules/_loot_module_base.dm new file mode 100644 index 00000000000..ea6a996343b --- /dev/null +++ b/code/modules/effects/maze_generation/loot_modules/_loot_module_base.dm @@ -0,0 +1,16 @@ +/obj/effect/mazegen/module_loot + name = "maze loot" + /// Probability for this to spawn in a dead end at all. 0-100%. I dont recommend using values higher than 10 + var/spawn_probability = 0 + +/** + * Loot spawner proc + * + * This exists as an overridable method so you can do more than just spawn objects. + * An example of this is spawning a specific mob based on a condition. + * + * Arguments: + * * T - The turf loot will be spawned on + */ +/obj/effect/mazegen/module_loot/proc/spawn_loot(turf/T) + CRASH("spawn_loot() not overriden for [type]") diff --git a/code/modules/effects/maze_generation/loot_modules/trash_module.dm b/code/modules/effects/maze_generation/loot_modules/trash_module.dm new file mode 100644 index 00000000000..68b42bb0afe --- /dev/null +++ b/code/modules/effects/maze_generation/loot_modules/trash_module.dm @@ -0,0 +1,6 @@ +/obj/effect/mazegen/module_loot/trash + name = "trash" + spawn_probability = 80 + +/obj/effect/mazegen/module_loot/trash/spawn_loot(turf/T) + new /obj/random/junk(T) \ No newline at end of file diff --git a/code/modules/effects/maze_generation/loot_modules/turf_painter.dm b/code/modules/effects/maze_generation/loot_modules/turf_painter.dm new file mode 100644 index 00000000000..4ba39728928 --- /dev/null +++ b/code/modules/effects/maze_generation/loot_modules/turf_painter.dm @@ -0,0 +1,7 @@ +// Debug spawner +/obj/effect/mazegen/module_loot/turf_painter + name = "turf painter" + spawn_probability = 100 + +/obj/effect/mazegen/module_loot/turf_painter/spawn_loot(turf/T) + T.color = "#12a5f4" diff --git a/code/modules/effects/maze_generation/maze_generator.dm b/code/modules/effects/maze_generation/maze_generator.dm new file mode 100644 index 00000000000..d2e929679c3 --- /dev/null +++ b/code/modules/effects/maze_generation/maze_generator.dm @@ -0,0 +1,204 @@ +/* + Everything in this file is related to the actual maze generator itself + This does the brunt of the work and handles the actual calculations of the mazes + + It is very finnicky code and isnt easy to work with since BYOND doesnt like wallwise mazes, and this would be much better being blockwise + + I dont recommend touching the stuff in here, its very finnicky and can be difficult to get your head around if youre not familiar with maze generation algorithms + -AA07 + + This Maze Generator was made by AffectedArc07, and was ported to Aurorastation from Paradise by me + - Geeves + +*/ + +// Nice way to format logs +#define LOG_MAZE_PROGRESS(proc2run, opname) \ +do { \ + var/timer = start_watch(); \ + proc2run ;\ + log_debug("\[MAZE] Operation '[opname]' on maze at [##x],[##y],[##z] took [stop_watch(timer)]s"); \ +} while (FALSE) + + +// These defines are used to mark the cells as explored or not +#define MAZEGEN_TURF_UNSEARCHED "#ff0000" +#define MAZEGEN_TURF_CELL "#00ff00" + +// Dont place this in the very corner of a map. It relies on adjacent turfs, and at the very edges you dont have turfs on all sides +/obj/effect/mazegen/generator + name = "maze generator" + /// List of turfs to iterate in total + var/list/turf_list = list() + /// "Stack" structure to be used while iterating + var/list/working_stack = list() + /// List of all loot modules being used in this maze + var/list/obj/effect/mazegen/module_loot/loot_modules = list() + /// List of all helper modules being used in this maze + var/list/obj/effect/mazegen/module_helper/helper_modules = list() + /// Potential loot spots + var/list/turf/potential_loot_spots = list() + /// Maze width + var/mwidth = 0 + /// Maze height + var/mheight = 0 + +/obj/effect/mazegen/generator/Initialize(mapload) + . = ..() + LAZYADD(SSatoms.late_misc_firers, src) + +/obj/effect/mazegen/generator/Destroy() + LAZYREMOVE(SSatoms.late_misc_firers, src) + return ..() + +// "Push" a turf to the working "stack" +/obj/effect/mazegen/generator/proc/push_turf(turf/T) + working_stack.Add(T) // Add it to the end of the list + +// "Pop" a turf off the working "stack" +/obj/effect/mazegen/generator/proc/pop_turf() + var/turf/T = working_stack[length(working_stack)] // Get the last item in the list + working_stack.Remove(T) // Take it off the top + return T // Send it back + +// Main generator runner. Override on children +/obj/effect/mazegen/generator/proc/run_generator() + ASSERT(ISODD(mwidth)) + ASSERT(ISODD(mheight)) + var/total_time = start_watch() + log_debug("\[MAZE] Started generation on maze at [x],[y],[z] | [mwidth * mheight] turfs total") + LOG_MAZE_PROGRESS(generate_path(), "Path Generation") + LOG_MAZE_PROGRESS(apply_helper_modules(FALSE), "Helper Modules") + if(length(loot_modules)) // Only bother with this if we have some + LOG_MAZE_PROGRESS(calculate_loot_spots(), "Loot Spot Calculation") + LOG_MAZE_PROGRESS(apply_loot_modules(), "Loot Modules") + log_debug("\[MAZE] Generation of maze at [x],[y],[z] complete within [stop_watch(total_time)]s") + qdel(src) + +/obj/effect/mazegen/generator/proc/generate_path() + // Setup our turf list + var/width = clamp(mwidth, 0, (world.maxx - x)) // Make sure they dont loop off the world + var/height = clamp(mheight, 0, (world.maxy - y)) // Make sure they dont loop off the world + + // Generate a turf stack + for(var/target_x in 0 to (width - 1)) // -1 so it spawns on the right tile + for(var/target_y in 0 to (height - 1)) + var/turf/T = locate((x + target_x), (y + target_y), z) + // Mark as unsearched + T.color = MAZEGEN_TURF_UNSEARCHED + // Throw it in the list + turf_list |= T + + // Windows time + var/obj/structure/window/reinforced/crescent/WN = new(T) + WN.dir = NORTH + var/obj/structure/window/reinforced/crescent/WS = new(T) + WS.dir = SOUTH + var/obj/structure/window/reinforced/crescent/WE = new(T) + WE.dir = EAST + var/obj/structure/window/reinforced/crescent/WW = new(T) + WW.dir = WEST + CHECK_TICK + CHECK_TICK + + // Do the actual work + push_turf(turf_list[1]) // Use the first turf as the stack base + while(length(working_stack)) + var/turf/T = pop_turf() + + // If you dont force cast these to strings, stuff cries. A lot. + var/list/cardinals = list("[NORTH]", "[SOUTH]", "[EAST]", "[WEST]") + + // Unvisited turfs + var/list/turf/unvisited_neighbours = list() + + // Check all cardinal turfs + for(var/D in cardinals) + var/turf/T2 = get_step(T, text2num(D)) + if(T2.color == MAZEGEN_TURF_UNSEARCHED) + unvisited_neighbours["[D]"] += T2 + + if(length(unvisited_neighbours)) + push_turf(T) + var/D = pick(unvisited_neighbours) + var/turf/T3 = unvisited_neighbours["[D]"] // Pick random dir turf + + // Remove the window between the two + for(var/obj/structure/window/reinforced/crescent/W in T) + if(W.dir == text2num(D)) + qdel(W) + + // On both tiles + for(var/obj/structure/window/reinforced/crescent/W in T3) + if(W.dir == reverse_dir[text2num(D)]) + qdel(W) + + // Mark as visited + T3.color = MAZEGEN_TURF_CELL + push_turf(T3) + + CHECK_TICK + + // The walls have been generated, now cleanup turfs and gather helpers + for(var/i in turf_list) + var/turf/T = i + // Reset markings + T.color = null + + // Gather loot modules + for(var/obj/effect/mazegen/module_loot/ML in T) + loot_modules |= ML + CHECK_TICK + + // Gather helper modules + for(var/obj/effect/mazegen/module_helper/MH in T) + helper_modules |= MH + CHECK_TICK + + // Make sure we have adequate CPU + CHECK_TICK + +/obj/effect/mazegen/generator/proc/apply_helper_modules(blockwise = FALSE) + // Apply helpers + for(var/i in helper_modules) + var/obj/effect/mazegen/module_helper/MH = i + helper_modules -= MH // Make it happy + MH.helper_run(blockwise, src) + qdel(MH) + +/obj/effect/mazegen/generator/proc/calculate_loot_spots() + for(var/i in turf_list) + var/turf/T = i + // Gather the windows. If a spot has 3 windows on it, its a dead end + var/windowcount = 0 + for(var/obj/structure/window/reinforced/crescent/W in T) + windowcount++ + CHECK_TICK + + // Its a dead end. Mark for loot. + if(windowcount == 3) + potential_loot_spots |= T + + CHECK_TICK + +/obj/effect/mazegen/generator/proc/apply_loot_modules() + for(var/i in potential_loot_spots) + var/turf/T = i + + // Apply loot modules + var/obj/effect/mazegen/module_loot/ML = pick(loot_modules) + if(prob(ML.spawn_probability)) + ML.spawn_loot(T) // Spawn on the turf + + CHECK_TICK + + // Cleanup loot modules + for(var/i in loot_modules) + var/obj/effect/mazegen/module_loot/ML = i + loot_modules -= ML // Take it out to make the GC happy + qdel(ML) + CHECK_TICK + + +#undef MAZEGEN_TURF_UNSEARCHED +#undef MAZEGEN_TURF_CELL diff --git a/code/modules/effects/maze_generation/maze_generator_blockwise.dm b/code/modules/effects/maze_generation/maze_generator_blockwise.dm new file mode 100644 index 00000000000..49cdb8d81cc --- /dev/null +++ b/code/modules/effects/maze_generation/maze_generator_blockwise.dm @@ -0,0 +1,124 @@ +// Everything in this file is related to the blockwise maze generator. +// It uses some components from the standard, but tweaks them to its own needs, since it needs to generate a half size maze then expand it out + +#define MAZEGEN_TURF_UNSEARCHED "#ff0000" +#define MAZEGEN_TURF_CELL "#00ff00" + +/obj/effect/mazegen/generator/blockwise + name = "blockwise maze generator" + /// Material to make the walls out of + var/turf/wall_material = /turf/simulated/wall + /// Material to make the floor out of + var/turf/floor_material = /turf/simulated/floor/plating + /// List of open spots (speeds up calculations) + var/list/turf/open_spots = list() + +// First we need to override the main proc so it only calculates half +/obj/effect/mazegen/generator/blockwise/run_generator() + ASSERT(ISODD(mwidth)) + ASSERT(ISODD(mheight)) + var/total_time = start_watch() + log_debug("\[MAZE] Started generation on maze at [x],[y],[z] | [mwidth * mheight] turfs total") + // First we need to partition the maze out into forced walls and open cells + LOG_MAZE_PROGRESS(generate_path(), "Generate Path") + LOG_MAZE_PROGRESS(apply_helper_modules(TRUE), "Helper Modules") + if(length(loot_modules)) // Only bother with this if we have some + LOG_MAZE_PROGRESS(calculate_loot_spots(), "Loot Spot Calculation") + LOG_MAZE_PROGRESS(apply_loot_modules(), "Loot Modules") + log_debug("\[MAZE] Generation of maze at [x],[y],[z] complete within [stop_watch(total_time)]s") + qdel(src) + + +/obj/effect/mazegen/generator/blockwise/generate_path() + // Setup our turf list + var/width = clamp(mwidth, 0, (world.maxx - x)) // Make sure they dont loop off the world + var/height = clamp(mheight, 0, (world.maxy - y)) // Make sure they dont loop off the world + + // Generate a turf stack + for(var/target_x in 0 to (width - 1)) // -1 so it spawns on the right tile + for(var/target_y in 0 to (height - 1)) + var/turf/T = locate((x + target_x), (y + target_y), z) + // Mark as unsearched + T.color = MAZEGEN_TURF_UNSEARCHED + // Throw it in the list + turf_list |= T + CHECK_TICK + CHECK_TICK + + // Do the actual work + push_turf(turf_list[1]) // Use the first turf as the stack base + while(length(working_stack)) + var/turf/T = pop_turf() + + // If you dont force cast these to strings, stuff cries. A lot. + var/list/cardinals = list("[NORTH]", "[SOUTH]", "[EAST]", "[WEST]") + + // Unvisited turfs + var/list/turf/unvisited_neighbours = list() + + // Check all cardinal turfs + for(var/D in cardinals) + var/turf/T2 = get_step(get_step(T, text2num(D)), text2num(D)) // Get the step TWICE because this is wallwise + if(T2?.color == MAZEGEN_TURF_UNSEARCHED) + unvisited_neighbours["[D]"] += T2 + + if(length(unvisited_neighbours)) + push_turf(T) + var/D = pick(unvisited_neighbours) + var/turf/T3 = unvisited_neighbours["[D]"] // Pick random dir turf + + // Remove the color between the two + var/turf/T4 = get_step(T3, reverse_dir[text2num(D)]) + T4?.color = MAZEGEN_TURF_CELL + + // Mark as visited + T3.color = MAZEGEN_TURF_CELL + push_turf(T3) + + CHECK_TICK + + // The walls have been generated, now cleanup turfs and gather helpers + for(var/i in turf_list) + var/turf/T = i + // Set correct turfs + if(T.color == MAZEGEN_TURF_CELL) + open_spots |= T + T.ChangeTurf(floor_material) + else + T.ChangeTurf(wall_material) + T.color = null + + // Gather loot modules + for(var/obj/effect/mazegen/module_loot/ML in T) + loot_modules |= ML + CHECK_TICK + + // Gather helper modules + for(var/obj/effect/mazegen/module_helper/MH in T) + helper_modules |= MH + CHECK_TICK + + // Make sure we have adequate CPU + CHECK_TICK + +/obj/effect/mazegen/generator/blockwise/calculate_loot_spots() + for(var/i in open_spots) + var/turf/T = i + // Gather amount of dense turfs on each side + var/dense_surrounding_turfs = 0 + // Again, these gotta be casted like this + var/list/cardinals = list("[NORTH]", "[EAST]", "[SOUTH]", "[WEST]") + for(var/D in cardinals) + var/turf/T2 = get_step(T, text2num(D)) + if(T2.density) + dense_surrounding_turfs++ + CHECK_TICK + + // Its a dead end. Mark for loot. + if(dense_surrounding_turfs == 3) + potential_loot_spots |= T + + CHECK_TICK + +#undef MAZEGEN_TURF_UNSEARCHED +#undef MAZEGEN_TURF_CELL diff --git a/code/modules/effects/maze_generation/maze_helper_atoms.dm b/code/modules/effects/maze_generation/maze_helper_atoms.dm new file mode 100644 index 00000000000..5d7469012fd --- /dev/null +++ b/code/modules/effects/maze_generation/maze_helper_atoms.dm @@ -0,0 +1,6 @@ +// Initial declaration +/obj/effect/mazegen + desc = "You should not be seeing this!" + icon = 'icons/mob/screen/generic.dmi' + icon_state = "x2" + color = "#00FF00" \ No newline at end of file diff --git a/code/modules/emotes/definitions/_species.dm b/code/modules/emotes/definitions/_species.dm index 7cd6e2497dc..cdd36082392 100644 --- a/code/modules/emotes/definitions/_species.dm +++ b/code/modules/emotes/definitions/_species.dm @@ -69,7 +69,14 @@ /datum/species/tajaran default_emotes = list( /decl/emote/audible/howl, - /decl/emote/audible/hiss + /decl/emote/audible/hiss, + /decl/emote/human/swish, + /decl/emote/human/wag, + /decl/emote/human/sway, + /decl/emote/human/qwag, + /decl/emote/human/fastsway, + /decl/emote/human/swag, + /decl/emote/human/stopsway ) pain_emotes_with_pain_level = list( list(/decl/emote/audible/scream, /decl/emote/audible/whimper, /decl/emote/audible/moan, /decl/emote/audible/cry, /decl/emote/audible/howl) = 70, diff --git a/code/modules/events/brand_intelligence.dm b/code/modules/events/brand_intelligence.dm index 1bc377811d3..c4515280506 100644 --- a/code/modules/events/brand_intelligence.dm +++ b/code/modules/events/brand_intelligence.dm @@ -49,7 +49,7 @@ "Advertising is legalized lying! But don't let that put you off our great deals!", \ "You don't want to buy anything? Yeah, well I didn't want to buy your mom either.")) -/datum/event/brand_intelligence/end() +/datum/event/brand_intelligence/end(var/faked) for(var/obj/machinery/vending/infectedMachine in infectedVendingMachines) infectedMachine.shut_up = 1 infectedMachine.shoot_inventory = 0 diff --git a/code/modules/events/carp_migration.dm b/code/modules/events/carp_migration.dm index 010f68f5442..1d4ab724353 100644 --- a/code/modules/events/carp_migration.dm +++ b/code/modules/events/carp_migration.dm @@ -90,7 +90,7 @@ CHECK_TICK i++ -/datum/event/carp_migration/end() +/datum/event/carp_migration/end(var/faked) for (var/carp_ref in spawned_carp) var/datum/weakref/carp_weakref = carp_ref var/mob/living/simple_animal/hostile/carp/fish = carp_weakref.resolve() diff --git a/code/modules/events/ccia_general_notice.dm b/code/modules/events/ccia_general_notice.dm index ebf1ca43d8d..5e932b610d2 100644 --- a/code/modules/events/ccia_general_notice.dm +++ b/code/modules/events/ccia_general_notice.dm @@ -5,8 +5,7 @@ no_fake = 1 /datum/event/ccia_general_notice/start() - establish_db_connection(dbcon) - if (!dbcon.IsConnected()) + if (!establish_db_connection(dbcon)) log_debug("CCIA Autoamtic General Notice - Could not establish database connection") return var/DBQuery/query = dbcon.NewQuery("SELECT SQL_NO_CACHE title, message FROM ss13_ccia_general_notice_list WHERE deleted_at IS NULL AND automatic = 1 ORDER BY RAND() LIMIT 1;") diff --git a/code/modules/events/event.dm b/code/modules/events/event.dm index ff167f9b07c..5073eafa9df 100644 --- a/code/modules/events/event.dm +++ b/code/modules/events/event.dm @@ -107,7 +107,8 @@ //the activeFor variable. //For example: if(activeFor == myOwnVariable + 30) doStuff() //Only called once. -/datum/event/proc/end() +//faked indicates this is a false alarm. Used to prevent announcements and other things from happening during false alarms. +/datum/event/proc/end(var/faked) return //Returns the latest point of event processing. diff --git a/code/modules/events/false_alarm.dm b/code/modules/events/false_alarm.dm index 213ee03bb16..d7a2f93872f 100644 --- a/code/modules/events/false_alarm.dm +++ b/code/modules/events/false_alarm.dm @@ -6,15 +6,16 @@ /datum/event/false_alarm announceWhen = 0 endWhen = 90 + no_fake = TRUE //Can't fake itself var/datum/event_meta/EM var/eventname var/datum/event/E = null -/datum/event/false_alarm/end() +/datum/event/false_alarm/end(var/faked) command_announcement.Announce("Error, It appears our previous announcement about [eventname] was a sensor glitch. There is no cause for alarm, please return to your stations.", "False Alarm", new_sound = 'sound/AI/falsealarm.ogg') if(two_part) - E.end() + E.end() //This does not return TRUE for var/faked because two-part events like radiation storms need to do things such as revoking maint access if (EM) qdel(EM) EM = null @@ -31,14 +32,13 @@ var/fake_allowed = 0 while (!fake_allowed) if (E) - E.end() + E.end(TRUE) E.kill() qdel(E) E = null EM = pick(EC.available_events) E = new EM.event_type(EM,1) fake_allowed = !E.no_fake - if (E.ic_name) eventname = E.ic_name else @@ -47,6 +47,6 @@ two_part = 1 E.start() - E.end() + E.end(TRUE) E.kill() E.announce() \ No newline at end of file diff --git a/code/modules/events/ion_storm.dm b/code/modules/events/ion_storm.dm index d65abb0b29b..0afcea4b66f 100644 --- a/code/modules/events/ion_storm.dm +++ b/code/modules/events/ion_storm.dm @@ -92,7 +92,7 @@ if(prob(botEmagChance)) bot.emag_act(1) -/datum/event/ionstorm/end() +/datum/event/ionstorm/end(var/faked) spawn(rand(5000,8000)) if(prob(50)) ion_storm_announcement() diff --git a/code/modules/events/meteors.dm b/code/modules/events/meteors.dm index 65cd85f16fa..6c93ebf59a5 100644 --- a/code/modules/events/meteors.dm +++ b/code/modules/events/meteors.dm @@ -39,7 +39,9 @@ else endWhen = next_wave + wave_delay -/datum/event/meteor_wave/end() +/datum/event/meteor_wave/end(var/faked) + if(faked) + return spawn(100)//We give 10 seconds before announcing, for the last wave of meteors to hit the station command_announcement.Announce("The station has survived the meteor storm, it is now safe to commence repairs.", "Meteor Alert") @@ -61,7 +63,9 @@ command_announcement.Announce("Meteors have reached the station. Please stay away from outer areas until the shower has passed.", "Meteor Alert") -/datum/event/meteor_wave/shower/end() +/datum/event/meteor_wave/shower/end(var/faked) + if(faked) + return spawn(100) command_announcement.Announce("The station has cleared the meteor shower, please return to your stations.", "Meteor Alert") @@ -83,6 +87,8 @@ /datum/event/meteor_wave/downed_ship/start() command_announcement.Announce("Ship debris colliding now, all hands brace for impact.", "Ship Debris Alert") -/datum/event/meteor_wave/downed_ship/end() +/datum/event/meteor_wave/downed_ship/end(var/faked) + if(faked) + return spawn(100)//We give 10 seconds before announcing, for the last wave of meteors to hit the station command_announcement.Announce("The last of the ship debris has hit or passed by the station, it is now safe to commence repairs.", "Ship Debris Alert") \ No newline at end of file diff --git a/code/modules/events/money_hacker.dm b/code/modules/events/money_hacker.dm index d83a3adc998..f32215b91b8 100644 --- a/code/modules/events/money_hacker.dm +++ b/code/modules/events/money_hacker.dm @@ -31,9 +31,9 @@ else endWhen = activeFor + 10 -/datum/event/money_hacker/end() +/datum/event/money_hacker/end(var/faked) var/message - if(affected_account && !affected_account.suspended) + if(affected_account && !affected_account.suspended && !faked) //hacker wins message = "The hack attempt has succeeded." diff --git a/code/modules/events/prison_break.dm b/code/modules/events/prison_break.dm index 916fd3e8ef1..5644bd20949 100644 --- a/code/modules/events/prison_break.dm +++ b/code/modules/events/prison_break.dm @@ -68,6 +68,6 @@ L.flicker(10) -/datum/event/prison_break/end() +/datum/event/prison_break/end(var/faked) for(var/area/A in shuffle(areas)) A.prison_break() diff --git a/code/modules/events/radiation_storm.dm b/code/modules/events/radiation_storm.dm index 76e3785c060..e4370cd78e9 100644 --- a/code/modules/events/radiation_storm.dm +++ b/code/modules/events/radiation_storm.dm @@ -15,6 +15,11 @@ /datum/event/radiation_storm/start() make_maint_all_access() + for(var/area/A in all_areas) + if(A.flags & RAD_SHIELDED) + continue + A.radiation_active = TRUE + A.update_icon() /datum/event/radiation_storm/tick() if(activeFor == enterBelt) @@ -36,8 +41,15 @@ C.apply_radiation_effects() -/datum/event/radiation_storm/end() +/datum/event/radiation_storm/end(var/faked) + if(faked) + return revoke_maint_all_access() + for(var/area/A in all_areas) + if(A.flags & RAD_SHIELDED) + continue + A.radiation_active = null + A.update_icon() /datum/event/radiation_storm/syndicate/radiate() return diff --git a/code/modules/events/rogue_drones.dm b/code/modules/events/rogue_drones.dm index 16f4afc9d27..e3a5bb3b8c2 100644 --- a/code/modules/events/rogue_drones.dm +++ b/code/modules/events/rogue_drones.dm @@ -27,7 +27,7 @@ msg = "Unidentified hackers have targetted a combat drone wing deployed from the NDV Icarus. If any are sighted in the area, approach with caution." command_announcement.Announce(msg, "Rogue drone alert", new_sound = 'sound/AI/combatdrones.ogg') -/datum/event/rogue_drone/end() +/datum/event/rogue_drone/end(var/faked) var/num_recovered = 0 for(var/drone in drones_list) var/mob/living/simple_animal/hostile/icarus_drone/malf/D = drone @@ -35,7 +35,8 @@ D.beam_out() num_recovered++ - if(num_recovered > length(drones_list) * 0.75) - command_announcement.Announce("Icarus drone control reports the malfunctioning wing has been recovered safely.", "Rogue drone alert") - else - command_announcement.Announce("Icarus drone control registers disappointment at the loss of the drones, but the survivors have been recovered.", "Rogue drone alert") + if(!faked) + if(num_recovered > length(drones_list) * 0.75) + command_announcement.Announce("Icarus drone control reports the malfunctioning wing has been recovered safely.", "Rogue drone alert") + else + command_announcement.Announce("Icarus drone control registers disappointment at the loss of the drones, but the survivors have been recovered.", "Rogue drone alert") diff --git a/code/modules/examine/examine.dm b/code/modules/examine/examine.dm index c316c6e91a0..be6ed277426 100644 --- a/code/modules/examine/examine.dm +++ b/code/modules/examine/examine.dm @@ -93,4 +93,9 @@ if(!.) var/atom/our_holder = recursive_loc_turf_check(src, 5) if(isturf(our_holder.loc)) // are we folded in on the ground - return TRUE \ No newline at end of file + return TRUE + +/mob/living/simple_animal/borer/can_examine() + . = ..() + if(!. && iscarbon(loc) && isturf(loc.loc)) // we're inside someone, let us examine still + return TRUE \ No newline at end of file diff --git a/code/modules/ghostroles/spawner/atom/cult_construct.dm b/code/modules/ghostroles/spawner/atom/cult_construct.dm new file mode 100644 index 00000000000..54930bbf15a --- /dev/null +++ b/code/modules/ghostroles/spawner/atom/cult_construct.dm @@ -0,0 +1,14 @@ +/datum/ghostspawner/construct + short_name = "construct" + name = "Cult Construct" + desc = "Get ordered around by cultists, end up dying because you get bodyblocked into laser fire." + tags = list("Antagonist") + + jobban_job = "cultist" + + observers_only = TRUE + + loc_type = GS_LOC_ATOM + atom_add_message = "A cult construct has ghosted!" + + spawn_mob = /mob/living/simple_animal/construct \ No newline at end of file diff --git a/code/modules/ghostroles/spawner/atom/imaginary_friend.dm b/code/modules/ghostroles/spawner/atom/imaginary_friend.dm deleted file mode 100644 index d3e36bf2f4f..00000000000 --- a/code/modules/ghostroles/spawner/atom/imaginary_friend.dm +++ /dev/null @@ -1,10 +0,0 @@ -/datum/ghostspawner/imaginary_friend - short_name = "imaginary_friend" - name = "Imaginary Friend" - desc = "Join in as a Imaginary Friend, help them find their way throughout the round." - tags = list("Mental Trauma") - - loc_type = GS_LOC_ATOM - atom_add_message = "Someone has conjured up an imaginary friend!" - - spawn_mob = /mob/abstract/mental/friend \ No newline at end of file diff --git a/code/modules/ghostroles/spawner/atom/shade.dm b/code/modules/ghostroles/spawner/atom/shade.dm new file mode 100644 index 00000000000..df3e42c96db --- /dev/null +++ b/code/modules/ghostroles/spawner/atom/shade.dm @@ -0,0 +1,14 @@ +/datum/ghostspawner/shade + short_name = "shade" + name = "Cult Shade" + desc = "Get released to attack crewmembers, get stomped. Get turned into a construct, get stomped, but it'll take longer." + tags = list("Antagonist") + + jobban_job = "cultist" + + observers_only = TRUE + + loc_type = GS_LOC_ATOM + atom_add_message = "A cult shade has ghosted!" + + spawn_mob = /mob/living/simple_animal/shade \ No newline at end of file diff --git a/code/modules/ghostroles/spawner/atom/split_personality.dm b/code/modules/ghostroles/spawner/atom/split_personality.dm deleted file mode 100644 index 849e9c43885..00000000000 --- a/code/modules/ghostroles/spawner/atom/split_personality.dm +++ /dev/null @@ -1,10 +0,0 @@ -/datum/ghostspawner/split_personality - short_name = "split_personality" - name = "Split Personality" - desc = "Join in as a Split Personality, play the alter ego of one poor crewmember." - tags = list("Mental Trauma") - - loc_type = GS_LOC_ATOM - atom_add_message = "Someone has developed a split personality!" - - spawn_mob = /mob/living/mental/split_personality \ No newline at end of file diff --git a/code/modules/ghostroles/spawner/human/admin.dm b/code/modules/ghostroles/spawner/human/admin/admin.dm similarity index 61% rename from code/modules/ghostroles/spawner/human/admin.dm rename to code/modules/ghostroles/spawner/human/admin/admin.dm index 3a38e15338d..b6b2b61f353 100644 --- a/code/modules/ghostroles/spawner/human/admin.dm +++ b/code/modules/ghostroles/spawner/human/admin/admin.dm @@ -6,93 +6,6 @@ user.client.verbs += /client/proc/despawn return ..() -/datum/ghostspawner/human/admin/ert_commander - short_name = "ertcommander" - name = "ERT Commander" - desc = "Command the response team from Central Command" - - landmark_name = "ERTCommander" - req_perms = R_CCIAA - - //Vars related to human mobs - outfit = /datum/outfit/admin/nt/ert_commander - possible_species = list(SPECIES_HUMAN) - allow_appearance_change = APPEARANCE_PLASTICSURGERY - - assigned_role = "Emergency Response Team Commander" - special_role = "ERT Commander" - respawn_flag = null - - mob_name = null - mob_name_pick_message = "Pick a name." - -/datum/ghostspawner/human/admin/legion_commander - short_name = "legionlegate" - name = "TCFL Legate" - desc = "Command the TCFL onboard BLV The Tower, a legion patrolship from where Task Force XIII - Fortune operates from." - - landmark_name = "TCFLLegate" - req_perms = R_CCIAA - - //Vars related to human mobs - outfit = /datum/outfit/admin/tcfl - possible_species = list(SPECIES_HUMAN,SPECIES_TAJARA_MSAI,SPECIES_SKRELL, SPECIES_UNATHI,SPECIES_IPC) - allow_appearance_change = APPEARANCE_PLASTICSURGERY - - assigned_role = "Tau Ceti Foreign Legion Legate" - special_role = "TCFL Legate" - respawn_flag = null - - mob_name = null - mob_name_prefix = "Lgt. " - mob_name_pick_message = "Pick a callsign or last-name." - -/datum/ghostspawner/human/admin/cciaagent - short_name = "cciaagent" - name = "CCIA Agent" - desc = "Board the Aurora, annoy crew with your interviews and get squashed by your own shuttle." - - landmark_name = "CCIAAgent" - req_perms = R_CCIAA - - //Vars related to human mobs - outfit = /datum/outfit/admin/nt/cciaa - possible_species = list(SPECIES_HUMAN,SPECIES_SKRELL) - allow_appearance_change = APPEARANCE_PLASTICSURGERY - - assigned_role = "CCIA Agent" - special_role = "CCIA Agent" - respawn_flag = null - - mob_name = null - mob_name_pick_message = "Pick a name." - - -/datum/ghostspawner/human/admin/cciaescort - short_name = "cciaescort" - name = "CCIA Escort" - desc = "Escort a CCIA Agent to the station, watch them annoy the crew and prevent them from throwing themselves under their own shuttle." - - enabled = FALSE - landmark_name = "CCIAEscort" - req_perms = null - req_perms_edit = R_CCIAA - max_count = 1 - - //Vars related to human mobs - outfit = /datum/outfit/admin/nt/protection_detail - possible_species = list(SPECIES_HUMAN,SPECIES_SKRELL) - allow_appearance_change = APPEARANCE_PLASTICSURGERY - - assigned_role = "Civil Protection Officer" - special_role = "Civil Protection Officer" - respawn_flag = null - - mob_name = null - mob_name_prefix = "Ofc. " - mob_name_pick_message = "Pick a callsign or last-name." - - /datum/ghostspawner/human/admin/checkpointsec short_name = "checkpointsec" name = "Odin Checkpoint Security" @@ -117,15 +30,6 @@ mob_name_prefix = "Spec. " mob_name_pick_message = "Pick a callsign or last-name." -/datum/ghostspawner/human/admin/checkpointsec/prepatory - short_name = "checkpointsec_prepatory" - name = "Aurora Prepatory Wing Security" - desc = "Act as an Odin security officer, guide lost newcomers onto the arrivals shuttle if the need arises." - enabled = TRUE - spawnpoints = list("OdinPrepatory") - req_perms = R_CCIAA - max_count = 3 - /datum/ghostspawner/human/admin/odindoc short_name = "odindoc" name = "Odin Medical Doctor" @@ -256,49 +160,6 @@ mob_name_prefix = "Sent. " mob_name_pick_message = "Pick a callsign or last-name." -/datum/ghostspawner/human/admin/fib - short_name = "fib" - name = "FIB Agent" - desc = "Investigate issues related to crimes under the jurisdiction of the Federal Investigations Bureau." - - landmark_name = "CCIAAgent" - req_perms = R_CCIAA - - outfit = /datum/outfit/admin/nt/fib - possible_species = list(SPECIES_HUMAN) - allow_appearance_change = APPEARANCE_PLASTICSURGERY - - assigned_role = "FIB Agent" - special_role = "FIB Agent" - respawn_flag = null - - mob_name = null - mob_name_prefix = "S/Agt. " - mob_name_pick_message = "Pick a name." - -/datum/ghostspawner/human/admin/fib/escort - short_name = "fibescort" - name = "FIB Escort" - desc = "Protect the agents of the Federal Investigations Bureau while on the field." - - landmark_name = "CCIAEscort" - - outfit = /datum/outfit/admin/nt/fib/guard - - req_perms = null - req_perms_edit = R_CCIAA - max_count = 1 - - assigned_role = "FIB Escort" - special_role = "FIB Escort" - respawn_flag = null - - enabled = FALSE - - mob_name = null - mob_name_prefix = "Agt. " - mob_name_pick_message = "Pick a name." - /client/proc/despawn() set name = "Despawn" set desc = "Your work is done. Leave this realm." diff --git a/code/modules/ghostroles/spawner/human/admin/ccia.dm b/code/modules/ghostroles/spawner/human/admin/ccia.dm new file mode 100644 index 00000000000..e4e832b095f --- /dev/null +++ b/code/modules/ghostroles/spawner/human/admin/ccia.dm @@ -0,0 +1,182 @@ +/* + Agents and their Escorts +*/ + +/datum/ghostspawner/human/admin/corporate + short_name = null + name = "Corporate Entity" + desc = "A corporate entity so dull it doesn't even exist. Thrilling!" + + tags = list("CCIA") + landmark_name = "CCIAAgent" + req_perms = R_CCIAA + + possible_species = list(SPECIES_HUMAN, SPECIES_SKRELL) + allow_appearance_change = APPEARANCE_PLASTICSURGERY + + respawn_flag = null + mob_name = null + +/datum/ghostspawner/human/admin/corporate/ccia_agent + short_name = "cciaagent" + name = "CCIA Agent" + desc = "Board the Aurora, annoy crew with your interviews and get squashed by your own shuttle." + + outfit = /datum/outfit/admin/nt/cciaa + + assigned_role = "CCIA Agent" + special_role = "CCIA Agent" + + mob_name_pick_message = "Pick a name." + + +/datum/ghostspawner/human/admin/corporate/ccia_escort + short_name = "cciaescort" + name = "CCIA Escort" + desc = "Escort a CCIA Agent to the station, watch them annoy the crew and prevent them from throwing themselves under their own shuttle." + + enabled = FALSE + landmark_name = "CCIAEscort" + req_perms = null + req_perms_edit = R_CCIAA + max_count = 1 + + //Vars related to human mobs + outfit = /datum/outfit/admin/nt/protection_detail + + assigned_role = "Civil Protection Officer" + special_role = "Civil Protection Officer" + + mob_name_prefix = "Ofc. " + mob_name_pick_message = "Pick a callsign or last-name." + +/datum/ghostspawner/human/admin/corporate/scc_agent + short_name = "sccagent" + name = "SCC Agent" + desc = "Board the Aurora, annoy crew with your interviews and get squashed by your own shuttle. But this time you're blue." + + outfit = /datum/outfit/admin/scc + + //take this block of code out once CCIA moves over to SCC proper + enabled = FALSE + req_perms_edit = R_ADMIN + + assigned_role = "SCC Agent" + special_role = "SCC Agent" + +/datum/ghostspawner/human/admin/corporate/scc_bodyguard + short_name = "sccbodyguard" + name = "SCC Bodyguard" + desc = "Protect the SCC agent you're assigned to with your life. In fact, protect them if you die as well, if possible." + + landmark_name = "CCIAEscort" + + outfit = /datum/outfit/admin/scc/bodyguard + + enabled = FALSE + req_perms = null + req_perms_edit = R_ADMIN // change this to R_CCIAA when CCIA moves to SCC + max_count = 1 + + assigned_role = "SCC Bodyguard" + special_role = "SCC Bodyguard" + + mob_name_prefix = "Spc. " + mob_name_pick_message = "Pick a name." + +/datum/ghostspawner/human/admin/corporate/fib + short_name = "fib" + name = "FIB Agent" + desc = "Investigate issues related to crimes under the jurisdiction of the Federal Investigations Bureau." + + outfit = /datum/outfit/admin/nt/fib + possible_species = list(SPECIES_HUMAN) + + assigned_role = "FIB Agent" + special_role = "FIB Agent" + + mob_name_prefix = "S/Agt. " + mob_name_pick_message = "Pick a name." + +/datum/ghostspawner/human/admin/corporate/fib/escort + short_name = "fibescort" + name = "FIB Escort" + desc = "Protect the agents of the Federal Investigations Bureau while on the field." + + landmark_name = "CCIAEscort" + + outfit = /datum/outfit/admin/nt/fib/guard + + enabled = FALSE + + req_perms = null + req_perms_edit = R_CCIAA + max_count = 1 + + assigned_role = "FIB Escort" + special_role = "FIB Escort" + + mob_name_prefix = "Agt. " + mob_name_pick_message = "Pick a name." + +/* + ERT and Similar Commanders +*/ + +/datum/ghostspawner/human/admin/ert_commander + short_name = "ertcommander" + name = "ERT Commander" + desc = "Command the response team from Central Command" + + tags = list("CCIA") + landmark_name = "ERTCommander" + req_perms = R_CCIAA + + //Vars related to human mobs + outfit = /datum/outfit/admin/nt/ert_commander + possible_species = list(SPECIES_HUMAN) + allow_appearance_change = APPEARANCE_PLASTICSURGERY + + assigned_role = "Emergency Response Team Commander" + special_role = "ERT Commander" + respawn_flag = null + + mob_name = null + mob_name_pick_message = "Pick a name." + +/datum/ghostspawner/human/admin/legion_commander + short_name = "legionlegate" + name = "TCFL Legate" + desc = "Command the TCFL onboard BLV The Tower, a legion patrolship from where Task Force XIII - Fortune operates from." + + tags = list("CCIA") + landmark_name = "TCFLLegate" + req_perms = R_CCIAA + + //Vars related to human mobs + outfit = /datum/outfit/admin/tcfl + possible_species = list(SPECIES_HUMAN,SPECIES_TAJARA_MSAI,SPECIES_SKRELL, SPECIES_UNATHI,SPECIES_IPC) + allow_appearance_change = APPEARANCE_PLASTICSURGERY + + assigned_role = "Tau Ceti Foreign Legion Legate" + special_role = "TCFL Legate" + respawn_flag = null + + mob_name = null + mob_name_prefix = "Lgt. " + mob_name_pick_message = "Pick a callsign or last-name." + +/* + Misc. Odin Roles +*/ + +/datum/ghostspawner/human/admin/checkpointsec/prepatory + short_name = "checkpointsec_prepatory" + name = "Aurora Prepatory Wing Security" + desc = "Act as an Odin security officer, guide lost newcomers onto the arrivals shuttle if the need arises." + + enabled = TRUE + tags = list("CCIA") + spawnpoints = list("OdinPrepatory") + req_perms = R_CCIAA + max_count = 3 \ No newline at end of file diff --git a/code/modules/ghostroles/spawner/human/human.dm b/code/modules/ghostroles/spawner/human/human.dm index 570ee651d4d..fd6b6fc78cb 100644 --- a/code/modules/ghostroles/spawner/human/human.dm +++ b/code/modules/ghostroles/spawner/human/human.dm @@ -109,7 +109,7 @@ //Setup the appearance if(allow_appearance_change) - M.change_appearance(allow_appearance_change, M.loc, check_species_whitelist = 1) + M.change_appearance(allow_appearance_change, M) else //otherwise randomize M.client.prefs.randomize_appearance_for(M, FALSE) diff --git a/code/modules/heavy_vehicle/_mech_setup.dm b/code/modules/heavy_vehicle/_mech_setup.dm index 0e870814e52..2b1f8ade590 100644 --- a/code/modules/heavy_vehicle/_mech_setup.dm +++ b/code/modules/heavy_vehicle/_mech_setup.dm @@ -35,4 +35,9 @@ var/global/list/mecha_damage_overlay_cache = list() #define FRAME_REINFORCED_WELDED 3 #define FRAME_WIRED 1 -#define FRAME_WIRED_ADJUSTED 2 \ No newline at end of file +#define FRAME_WIRED_ADJUSTED 2 + +//POWER! +#define MECH_POWER_OFF 0 +#define MECH_POWER_TRANSITION 1 +#define MECH_POWER_ON 2 \ No newline at end of file diff --git a/code/modules/heavy_vehicle/components/armor.dm b/code/modules/heavy_vehicle/components/armor.dm index b3c2663c895..ac8435f759a 100644 --- a/code/modules/heavy_vehicle/components/armor.dm +++ b/code/modules/heavy_vehicle/components/armor.dm @@ -3,7 +3,7 @@ armor = list( melee = ARMOR_MELEE_MAJOR, bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_HANDGUNS, + laser = ARMOR_LASER_PISTOL, energy = ARMOR_ENERGY_MINOR, bomb = ARMOR_BOMB_PADDED, bio = ARMOR_BIO_SHIELDED, @@ -21,7 +21,7 @@ armor = list( melee = ARMOR_MELEE_RESISTANT, bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_HANDGUNS, + laser = ARMOR_LASER_PISTOL, energy = ARMOR_ENERGY_MINOR, bomb = ARMOR_BOMB_PADDED, bio = ARMOR_BIO_SHIELDED, @@ -48,8 +48,8 @@ desc = "Plating designed to deflect incoming attacks and explosions." armor = list( melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_HANDGUNS, + bullet = ARMOR_BALLISTIC_MEDIUM, + laser = ARMOR_LASER_PISTOL, energy = ARMOR_ENERGY_MINOR, bomb = ARMOR_BOMB_RESISTANT, bio = ARMOR_BIO_SHIELDED diff --git a/code/modules/heavy_vehicle/components/head.dm b/code/modules/heavy_vehicle/components/head.dm index 2148b199758..318deebfa68 100644 --- a/code/modules/heavy_vehicle/components/head.dm +++ b/code/modules/heavy_vehicle/components/head.dm @@ -62,18 +62,18 @@ camera = locate() in src software = locate() in src -/obj/item/mech_component/sensors/proc/get_sight() +/obj/item/mech_component/sensors/proc/get_sight(powered) var/flags = 0 - if(total_damage >= 0.8 * max_damage) + if((total_damage >= 0.8 * max_damage) || !powered) flags |= BLIND - else if(active_sensors) + else if(active_sensors && powered) flags |= vision_flags return flags -/obj/item/mech_component/sensors/proc/get_invisible() +/obj/item/mech_component/sensors/proc/get_invisible(powered) var/invisible = 0 - if((total_damage <= 0.8 * max_damage) && active_sensors) + if((total_damage <= 0.8 * max_damage) && active_sensors && powered) invisible = see_invisible return invisible diff --git a/code/modules/heavy_vehicle/equipment/_equipment.dm b/code/modules/heavy_vehicle/equipment/_equipment.dm index 632804a5640..385fd0ef662 100644 --- a/code/modules/heavy_vehicle/equipment/_equipment.dm +++ b/code/modules/heavy_vehicle/equipment/_equipment.dm @@ -15,6 +15,7 @@ var/passive_power_use = 0 var/active_power_use = 1 KILOWATTS var/require_adjacent = TRUE + var/active = FALSE //For gear that has an active state (ie, floodlights) /obj/item/mecha_equipment/examine(mob/user, distance) . = ..() @@ -59,12 +60,18 @@ else return 0 +/obj/item/mecha_equipment/proc/deactivate() + active = FALSE + return + /obj/item/mecha_equipment/proc/installed(var/mob/living/heavy_vehicle/_owner) owner = _owner //generally attached. Nothing should be able to grab it canremove = FALSE /obj/item/mecha_equipment/proc/uninstalled() + if(active) + deactivate() owner = null canremove = TRUE diff --git a/code/modules/heavy_vehicle/equipment/combat.dm b/code/modules/heavy_vehicle/equipment/combat.dm index 50c0fe6d56a..78b30d161ce 100644 --- a/code/modules/heavy_vehicle/equipment/combat.dm +++ b/code/modules/heavy_vehicle/equipment/combat.dm @@ -295,8 +295,15 @@ START_PROCESSING(SSprocessing, src) else STOP_PROCESSING(SSprocessing, src) + active = aura.active + passive_power_use = active ? 1 KILOWATTS : 0 owner.update_icon() +/obj/item/mecha_equipment/shield/deactivate() + if(active) + toggle() + ..() + /obj/item/mecha_equipment/shield/update_icon() . = ..() if(!aura) @@ -314,7 +321,8 @@ var/obj/item/cell/cell = owner.get_cell() var/actual_required_power = Clamp(max_charge - charge, 0, charging_rate) - charge += cell.use(actual_required_power) + if(cell) + charge += cell.use(actual_required_power) /obj/item/mecha_equipment/shield/get_hardpoint_status_value() return charge / max_charge diff --git a/code/modules/heavy_vehicle/equipment/utility.dm b/code/modules/heavy_vehicle/equipment/utility.dm index 051a2764cd0..2ef3113ac4c 100644 --- a/code/modules/heavy_vehicle/equipment/utility.dm +++ b/code/modules/heavy_vehicle/equipment/utility.dm @@ -202,10 +202,20 @@ /obj/item/mecha_equipment/light/attack_self(var/mob/user) . = ..() if(.) - on = !on + toggle() to_chat(user, "You switch \the [src] [on ? "on" : "off"].") - update_icon() - owner.update_icon() + +/obj/item/mecha_equipment/light/proc/toggle() + on = !on + update_icon() + owner.update_icon() + active = on + passive_power_use = on ? 0.1 KILOWATTS : 0 + +/obj/item/mecha_equipment/light/deactivate() + if(on) + toggle() + ..() /obj/item/mecha_equipment/light/update_icon() if(on) diff --git a/code/modules/heavy_vehicle/interface/_interface.dm b/code/modules/heavy_vehicle/interface/_interface.dm index b9b4a23f673..109a15bdb10 100644 --- a/code/modules/heavy_vehicle/interface/_interface.dm +++ b/code/modules/heavy_vehicle/interface/_interface.dm @@ -21,6 +21,7 @@ i++ var/list/additional_hud_elements = list( + /obj/screen/mecha/toggle/power_control, /obj/screen/mecha/toggle/maint, /obj/screen/mecha/eject, /obj/screen/mecha/toggle/hardpoint, @@ -28,6 +29,7 @@ /obj/screen/mecha/toggle/hatch_open, /obj/screen/mecha/radio, /obj/screen/mecha/toggle/sensor, + /obj/screen/mecha/toggle/megaspeakers, /obj/screen/mecha/rename ) @@ -54,6 +56,7 @@ hud_power = new /obj/screen/mecha/power(src) hud_power.screen_loc = "EAST-1:12,CENTER-4:25" hud_elements |= hud_power + hud_power_control = locate(/obj/screen/mecha/toggle/power_control) in hud_elements refresh_hud() diff --git a/code/modules/heavy_vehicle/interface/screen_objects.dm b/code/modules/heavy_vehicle/interface/screen_objects.dm index 4c37074d9f9..21bfecf3869 100644 --- a/code/modules/heavy_vehicle/interface/screen_objects.dm +++ b/code/modules/heavy_vehicle/interface/screen_objects.dm @@ -69,6 +69,7 @@ var/list/new_overlays = list() if(!owner.get_cell() || (owner.get_cell().charge <= 0)) overlays.Cut() + maptext = "" return maptext = "[holding.get_hardpoint_maptext()]" @@ -223,6 +224,23 @@ maptext = "MAINT" notify_user(usr, SPAN_NOTICE("Maintenance protocols [owner.maintenance_protocols ? "enabled" : "disabled"].")) +/obj/screen/mecha/toggle/power_control + name = "power control" + icon_state = "large_base" + maptext = "POWER" + maptext_x = 1 + maptext_y = 11 + +/obj/screen/mecha/toggle/power_control/toggled() + toggled = !toggled + owner.toggle_power(usr) + var/main_color = toggled ? "#d1d1d1" : "#525252" + maptext = "POWER" + +/obj/screen/mecha/toggle/power_control/update_icon() + toggled = (owner.power == MECH_POWER_ON) + return ..() + /obj/screen/mecha/toggle/hardpoint name = "toggle hardpoint lock" icon_state = "base" @@ -310,4 +328,18 @@ maptext = "SENSOR" notify_user(usr, SPAN_NOTICE("[capitalize_first_letters(owner.head.name)] Advanced Sensor mode is [owner.head.active_sensors ? "now" : "no longer" ] active.")) +/obj/screen/mecha/toggle/megaspeakers + name = "toggle integrated megaspeakers" + icon_state = "base" // based + maptext = "VOLUME" + maptext_x = 1 + maptext_y = 12 + +/obj/screen/mecha/toggle/megaspeakers/toggled() + toggled = !toggled + owner.loudening = toggled + var/main_color = owner.loudening ? "#d1d1d1" : "#525252" + maptext = "VOLUME" + notify_user(usr, SPAN_NOTICE("You [owner.loudening ? "activate" : "deactivate"] \the [owner]'s integrated megaspeakers.")) + #undef BAR_CAP \ No newline at end of file diff --git a/code/modules/heavy_vehicle/mech_interaction.dm b/code/modules/heavy_vehicle/mech_interaction.dm index 8ddd6fc7045..b0087494f9c 100644 --- a/code/modules/heavy_vehicle/mech_interaction.dm +++ b/code/modules/heavy_vehicle/mech_interaction.dm @@ -76,7 +76,8 @@ return if(!(get_cell()?.checked_use(arms.power_use * CELLRATE))) - to_chat(user, "Error: Power levels insufficient.") + to_chat(user, power == MECH_POWER_ON ? SPAN_WARNING("Error: Power levels insufficient.") : SPAN_WARNING("\The [src] is powered off.")) + return if(user != src) set_intent(user.a_intent) @@ -236,7 +237,6 @@ LAZYDISTINCTADD(pilots, user) sync_access() playsound(src, 'sound/machines/windowdoor.ogg', 50, 1) - user << sound('sound/mecha/nominal.ogg',volume=50) if(user.client) user.client.screen |= hud_elements LAZYDISTINCTADD(user.additional_vision_handlers, src) update_icon() @@ -426,6 +426,8 @@ to_chat(user, "You remove \the [body.cell] from \the [src].") playsound(user.loc, thing.usesound, 50, 1) visible_message("\The [user] pries out \the [body.cell] using the \the [thing].") + power = MECH_POWER_OFF + hud_power_control.update_icon() body.cell = null return else if(istype(thing, /obj/item/cell)) diff --git a/code/modules/heavy_vehicle/mech_life.dm b/code/modules/heavy_vehicle/mech_life.dm index e7e22b28e4f..cfd6e07b10d 100644 --- a/code/modules/heavy_vehicle/mech_life.dm +++ b/code/modules/heavy_vehicle/mech_life.dm @@ -21,15 +21,25 @@ UNSETEMPTY(pilots) if(radio) - radio.on = (head?.radio && head.radio.is_functional()) + radio.on = (head?.radio && head.radio.is_functional() && get_cell()) if(camera) camera.status = (head?.camera && head.camera.is_functional()) body.update_air(hatch_closed && use_air) - if((client || LAZYLEN(pilots)) && get_cell()) - get_cell()?.drain_power(0, 0, calc_power_draw()) + var/powered = FALSE + if(get_cell()) + powered = get_cell().drain_power(0, 0, calc_power_draw()) > 0 + + if(!powered) + //Shut down all systems + if(head) + head.active_sensors = FALSE + for(var/hardpoint in hardpoints) + var/obj/item/mecha_equipment/M = hardpoints[hardpoint] + if(istype(M) && M.active && M.passive_power_use) + M.deactivate() updatehealth() if(health <= 0 && stat != DEAD) @@ -38,7 +48,7 @@ ..() lying = 0 // Fuck off, carp. - handle_vision() + handle_vision(powered) handle_hud_icons() /mob/living/heavy_vehicle/think() @@ -60,9 +70,11 @@ else walk(src, 0) // this stops them from moving -/mob/living/heavy_vehicle/get_cell() +/mob/living/heavy_vehicle/get_cell(force) RETURN_TYPE(/obj/item/cell) - return body?.cell + if(power == MECH_POWER_ON || force) //For most intents we can assume that a powered off exosuit acts as if it lacked a cell + return body ? body.cell : null + return null /mob/living/heavy_vehicle/proc/calc_power_draw() var/total_draw = 0 @@ -147,13 +159,18 @@ qdel(src) return -/mob/living/heavy_vehicle/handle_vision() +/mob/living/heavy_vehicle/handle_vision(powered) + var/was_blind = sight & BLIND if(head) - sight = head.get_sight() - see_invisible = head.get_invisible() - if(body && (body.pilot_coverage < 100 || body.transparent_cabin)) + sight = head.get_sight(powered) + see_invisible = head.get_invisible(powered) + if(!hatch_closed || (body && (body.pilot_coverage < 100 || body.transparent_cabin))) sight &= ~BLIND + if(sight & BLIND && !was_blind) + for(var/mob/pilot in pilots) + to_chat(pilot, SPAN_WARNING("The camera sensors flicker out and you lose sight of the outside world!")) + /mob/living/heavy_vehicle/additional_sight_flags() return sight diff --git a/code/modules/heavy_vehicle/mecha.dm b/code/modules/heavy_vehicle/mecha.dm index d7c232a926a..6b357750585 100644 --- a/code/modules/heavy_vehicle/mecha.dm +++ b/code/modules/heavy_vehicle/mecha.dm @@ -66,6 +66,7 @@ var/maintenance_protocols var/lockdown var/entry_speed = 30 + var/loudening = FALSE // whether we're increasing the speech volume of our pilot // Material var/material/material @@ -84,6 +85,9 @@ var/obj/screen/mecha/health/hud_health var/obj/screen/mecha/toggle/hatch_open/hud_open var/obj/screen/mecha/power/hud_power + var/obj/screen/mecha/toggle/power_control/hud_power_control + //POWER + var/power = MECH_POWER_OFF /mob/living/heavy_vehicle/Destroy() unassign_leader() @@ -100,7 +104,7 @@ pilots = null QDEL_NULL_LIST(hud_elements) - + if(remote_network) SSvirtualreality.remove_mech(src, remote_network) @@ -213,7 +217,7 @@ update_icon() add_language(LANGUAGE_TCB) - set_default_language(LANGUAGE_TCB) + set_default_language(all_languages[LANGUAGE_TCB]) . = INITIALIZE_HINT_LATELOAD @@ -228,6 +232,26 @@ /mob/living/heavy_vehicle/GetIdCard() return access_card +/mob/living/heavy_vehicle/proc/toggle_power(var/mob/user) + if(power == MECH_POWER_TRANSITION) + to_chat(user, SPAN_NOTICE("Power transition in progress. Please wait.")) + else if(power == MECH_POWER_ON) //Turning it off is instant + playsound(src, 'sound/mecha/mech-shutdown.ogg', 100, 0) + power = MECH_POWER_OFF + else if(get_cell(TRUE)) + //Start power up sequence + power = MECH_POWER_TRANSITION + playsound(src, 'sound/mecha/powerup.ogg', 50, 0) + if(do_after(user, 1.5 SECONDS) && power == MECH_POWER_TRANSITION) + playsound(src, 'sound/mecha/nominal.ogg', 50, 0) + power = MECH_POWER_ON + else + to_chat(user, SPAN_WARNING("You abort the powerup sequence.")) + power = MECH_POWER_OFF + hud_power_control?.queue_icon_update() + else + to_chat(user, SPAN_WARNING("Error: No power cell was detected.")) + /obj/item/device/radio/exosuit name = "exosuit radio" cell = null @@ -293,4 +317,4 @@ if(does_hardpoint_lock) hardpoints_locked = TRUE force_locked = TRUE - update_icon() \ No newline at end of file + update_icon() diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm index 7e2177b7feb..6f9a6c2ea3f 100644 --- a/code/modules/hydroponics/seed.dm +++ b/code/modules/hydroponics/seed.dm @@ -182,6 +182,7 @@ if(get_trait(TRAIT_BIOLUM_COLOUR)) clr = get_trait(TRAIT_BIOLUM_COLOUR) splat.set_light(get_trait(TRAIT_POTENCY)/10, pwr, clr) + addtimer(CALLBACK(splat, /atom/.proc/set_light, 0), rand(3 MINUTES, 5 MINUTES)) var/flesh_colour = get_trait(TRAIT_FLESH_COLOUR) if(!flesh_colour) flesh_colour = get_trait(TRAIT_PRODUCT_COLOUR) if(flesh_colour) splat.color = get_trait(TRAIT_PRODUCT_COLOUR) @@ -760,6 +761,7 @@ if(get_trait(TRAIT_BIOLUM_COLOUR)) clr = get_trait(TRAIT_BIOLUM_COLOUR) product.set_light(get_trait(TRAIT_POTENCY)/10, pwr, clr) + addtimer(CALLBACK(product, /atom/.proc/set_light, 0), rand(5 MINUTES, 7 MINUTES)) //Handle spawning in living, mobile products (like dionaea). if(istype(product,/mob/living)) diff --git a/code/modules/item_worth/worths_list.dm b/code/modules/item_worth/worths_list.dm index 8349c1f4a21..2040cd0b096 100644 --- a/code/modules/item_worth/worths_list.dm +++ b/code/modules/item_worth/worths_list.dm @@ -494,12 +494,12 @@ var/list/worths = list( /obj/item/clothing/suit/armor/reactive = 5000, /obj/item/clothing/suit/armor/centcomm = 2000, /obj/item/clothing/suit/armor/heavy = 1000, - /obj/item/clothing/suit/security/hos = 100, + /obj/item/clothing/suit/storage/security/hos = 100, /obj/item/clothing/suit/armor/tactical = 1500, /obj/item/clothing/suit/armor = 500, /obj/item/clothing/suit/bio_suit = 150, /obj/item/clothing/suit/captunic/capjacket = 100, - /obj/item/clothing/suit/security/hos/dnavy = 80, + /obj/item/clothing/suit/storage/security/hos/dnavy = 80, /obj/item/clothing/suit/storage/hazardvest = 60, /obj/item/clothing/suit/storage/toggle/labcoat = 55, /obj/item/clothing/suit/armor/riot/laser_tag = 125, diff --git a/code/modules/law/incident.dm b/code/modules/law/incident.dm index ed217343db7..791f5e1305a 100644 --- a/code/modules/law/incident.dm +++ b/code/modules/law/incident.dm @@ -228,8 +228,7 @@ return "Holding until Transfer" /datum/record/char_infraction/proc/saveToDB() - establish_db_connection(dbcon) - if(!dbcon.IsConnected()) + if(!establish_db_connection(dbcon)) error("SQL database connection failed. Infractions Datum failed to save information") return @@ -277,8 +276,7 @@ infraction_insert_query.Execute(sql_args) /datum/record/char_infraction/proc/deleteFromDB(var/deleted_by) - establish_db_connection(dbcon) - if(!dbcon.IsConnected()) + if(!establish_db_connection(dbcon)) error("SQL database connection failed. Infractions Datum failed to save information") return diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm index 26fa50972cc..2f48d58f0f7 100644 --- a/code/modules/library/lib_machines.dm +++ b/code/modules/library/lib_machines.dm @@ -43,8 +43,7 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f Filter by Author: [author]
\[Start Search\]
"} if(1) - establish_db_connection(dbcon) - if(!dbcon.IsConnected()) + if(!establish_db_connection(dbcon)) dat += "ERROR: Unable to contact External Archive. Please contact your system administrator for assistance.
" else if(!SQLquery) dat += "ERROR: Malformed search request. Please contact your system administrator for assistance.
" @@ -190,8 +189,7 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f (Return to main menu)
"} if(4) dat += "

External Archive

" - establish_db_connection(dbcon) - if(!dbcon.IsConnected()) + if(!establish_db_connection(dbcon)) dat += "ERROR: Unable to contact External Archive. Please contact your system administrator for assistance." else dat += {"(Order book by SS13BN)

@@ -334,8 +332,7 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f if(scanner.cache.unique) alert("This book has been rejected from the database. Aborting!") else - establish_db_connection(dbcon) - if(!dbcon.IsConnected()) + if(!establish_db_connection(dbcon)) alert("Connection to Archive has been severed. Aborting.") else /* @@ -359,8 +356,7 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f if(href_list["targetid"]) var/sqlid = sanitizeSQL(href_list["targetid"]) - establish_db_connection(dbcon) - if(!dbcon.IsConnected()) + if(!establish_db_connection(dbcon)) alert("Connection to Archive has been severed. Aborting.") if(bibledelay) for (var/mob/V in hearers(src)) diff --git a/code/modules/materials/material_recipes.dm b/code/modules/materials/material_recipes.dm index 89aa8d138ef..043b557632e 100644 --- a/code/modules/materials/material_recipes.dm +++ b/code/modules/materials/material_recipes.dm @@ -67,6 +67,8 @@ new /datum/stack_recipe("custodial cart", /obj/structure/janitorialcart, BUILD_AMT, time = 120, one_per_turf = 1, on_floor = 1), new /datum/stack_recipe("closet", /obj/structure/closet, BUILD_AMT, time = 15, one_per_turf = 1, on_floor = 1), new /datum/stack_recipe("canister", /obj/machinery/portable_atmospherics/canister, 10, time = 15, one_per_turf = 1, on_floor = 1), + new /datum/stack_recipe("target stake", /obj/structure/target_stake, BUILD_AMT, time = 15, one_per_turf = 1, on_floor = 1), + new /datum/stack_recipe("shooting target", /obj/item/target, 5, time = 10, one_per_turf = 0, on_floor = 1), new /datum/stack_recipe("dark office chair", /obj/structure/bed/chair/office/dark, BUILD_AMT, one_per_turf = 1, on_floor = 1), new /datum/stack_recipe("light office chair", /obj/structure/bed/chair/office/light, BUILD_AMT, one_per_turf = 1, on_floor = 1), new /datum/stack_recipe("plain comfy chair", /obj/structure/bed/chair/comfy, BUILD_AMT, one_per_turf = 1, on_floor = 1), diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index 30e377a1dc5..9301e6bcdd2 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -31,6 +31,7 @@ new /obj/item/book/manual/ka_custom(src) new /obj/item/clothing/accessory/storage/overalls/mining(src) new /obj/item/clothing/head/bandana/miner(src) + new /obj/item/clothing/head/hardhat/orange(src) /******************************Lantern*******************************/ @@ -585,14 +586,13 @@ key = null var/image/I = new(icon = 'icons/obj/cart.dmi', icon_state = "[icon_state]_overlay", layer = src.layer + 0.2) //over mobs add_overlay(I) - turn_off() //so engine verbs are correctly set + turn_off() /obj/vehicle/train/cargo/engine/mining/attackby(obj/item/W, mob/user) if(istype(W, /obj/item/key/minecarts)) if(!key) user.drop_from_inventory(W, src) key = W - verbs += /obj/vehicle/train/cargo/engine/verb/remove_key return ..() @@ -1205,7 +1205,7 @@ var/list/total_extraction_beacons = list() playsound(loc, 'sound/items/screwdriver.ogg', 20, TRUE) else playsound(loc, /decl/sound_category/pickaxe_sound, 20, TRUE) - + var/successfully_sculpted = FALSE while(do_after(user, 2 SECONDS) && sculpture_process_check(choice, user)) if(times_carved <= 9) @@ -1437,54 +1437,3 @@ var/list/total_extraction_beacons = list() if(prob(75)) M.GetDrilled(1) -/****************Himeo Voidsuit Kit*****************/ -/obj/item/himeo_kit - name = "himeo voidsuit kit" - contained_sprite = TRUE - icon = 'icons/obj/mining_contained.dmi' - icon_state = "himeo_kit" - item_state = "himeo_kit" - desc = "A simple cardboard box containing the requisition forms, permits, and decal kits for a Himean voidsuit." - desc_fluff = "As part of a cost-cutting and productivity-enhancing initiative, NanoTrasen has authorized a number of Himean Type-76 'Fish Fur'\ - for use by miners originating from the planet. Most of these suits are assembled in Cannington and painstakingly optimized on-site by their\ - individual operator leading to a large trail of red tape as NanoTrasen is forced to inspect these suits to ensure their safety." - desc_info = "In order to convert a mining voidsuit into a Himean voidsuit, simply click on this box with a voidsuit or helmet in hand.\ - The same process can be used to convert a Himean voidsuit back into a regular voidsuit. Make sure not to have a helmet or tank in the suit\ - or else it will be deleted." - w_class = ITEMSIZE_SMALL - -/obj/item/himeo_kit/attackby(obj/item/W as obj, mob/user as mob) - var/list/suit_options = list( - /obj/item/clothing/suit/space/void/mining = /obj/item/clothing/suit/space/void/mining/himeo, - /obj/item/clothing/head/helmet/space/void/mining = /obj/item/clothing/head/helmet/space/void/mining/himeo, - - /obj/item/clothing/suit/space/void/engineering = /obj/item/clothing/suit/space/void/engineering/himeo, - /obj/item/clothing/head/helmet/space/void/engineering = /obj/item/clothing/head/helmet/space/void/engineering/himeo, - - /obj/item/clothing/suit/space/void/atmos = /obj/item/clothing/suit/space/void/atmos/himeo, - /obj/item/clothing/head/helmet/space/void/atmos = /obj/item/clothing/head/helmet/space/void/atmos/himeo - ) - var/reconverting = FALSE - var/voidsuit_product = suit_options[W.type] - if(!voidsuit_product) - for(var/thing in suit_options) - if(suit_options[thing] == W.type) - voidsuit_product = thing - reconverting = TRUE - break - if(voidsuit_product) - if(istype(W, /obj/item/clothing/suit/space/void) && W.contents.len) - to_chat(user, SPAN_NOTICE("Remove any accessories, helmets, magboots, or oxygen tanks before attempting to convert this voidsuit.")) - return - user.drop_item(W) - qdel(W) - playsound(src.loc, 'sound/weapons/blade_open.ogg', 50, 1) - var/obj/item/P = new voidsuit_product(user.loc) - user.put_in_hands(P) - if(!reconverting) - to_chat(user, SPAN_NOTICE("Your permit for a [P] has been processed. Enjoy!")) - else - to_chat(user, SPAN_NOTICE("Your Himean voidsuit part has been reconverted into [P].")) - return - else - return ..() \ No newline at end of file diff --git a/code/modules/mob/abstract/new_player/character_traits.dm b/code/modules/mob/abstract/new_player/character_traits.dm index bb83a730514..bcd2d317a84 100644 --- a/code/modules/mob/abstract/new_player/character_traits.dm +++ b/code/modules/mob/abstract/new_player/character_traits.dm @@ -26,35 +26,28 @@ desc = "You have difficulty perceiving green." /datum/character_disabilities/deuteranomaly/apply_self(var/mob/living/carbon/human/H) - H.add_client_color(/datum/client_color/deuteranopia) + H.add_client_color(/datum/client_color/deuteranopia, TRUE) /datum/character_disabilities/protanopia name = "Protanopia" desc = "You have difficulty perceiving red." /datum/character_disabilities/protanopia/apply_self(var/mob/living/carbon/human/H) - H.add_client_color(/datum/client_color/protanopia) + H.add_client_color(/datum/client_color/protanopia, TRUE) /datum/character_disabilities/tritanopia name = "Tritanopia" desc = "You have difficulty perceiving green and yellow." /datum/character_disabilities/tritanopia/apply_self(var/mob/living/carbon/human/H) - H.add_client_color(/datum/client_color/tritanopia) + H.add_client_color(/datum/client_color/tritanopia, TRUE) /datum/character_disabilities/total_colorblind name = "Total Colorblindness" desc = "You cannot see color, only black, white, and shades of gray." /datum/character_disabilities/total_colorblind/apply_self(var/mob/living/carbon/human/H) - H.add_client_color(/datum/client_color/monochrome) - -/datum/character_disabilities/mute - name = "Muteness" - desc = "You are unable to form coherent speech." - -/datum/character_disabilities/mute/apply_self(var/mob/living/carbon/human/H) - H.sdisabilities |= MUTE + H.add_client_color(/datum/client_color/monochrome, TRUE) /datum/character_disabilities/deaf name = "Deafness" diff --git a/code/modules/mob/abstract/new_player/menu.dm b/code/modules/mob/abstract/new_player/menu.dm index 4f01ade2c8a..937c8b98310 100644 --- a/code/modules/mob/abstract/new_player/menu.dm +++ b/code/modules/mob/abstract/new_player/menu.dm @@ -156,10 +156,8 @@ sound_to(player, 'sound/effects/menu_click.ogg') if(SSticker.current_state <= GAME_STATE_SETTING_UP) if(player.ready) - player.ready = FALSE player.ready(FALSE) else - player.ready = TRUE player.ready(TRUE) else player.join_game() @@ -230,7 +228,7 @@ alert(src, "You have not saved your character yet. Please do so before readying up.") return if(client.unacked_warning_count > 0) - alert(src, "You can not ready up, because you have unacknowledged warnings. Acknowledge your warnings in OOC->Warnings and Notifications.") + alert(src, "You can not ready up, because you have unacknowledged warnings or notifications. Acknowledge them in OOC->Warnings and Notifications.") return ready = readying diff --git a/code/modules/mob/abstract/new_player/new_player.dm b/code/modules/mob/abstract/new_player/new_player.dm index 6253eb74f96..8726d8e631c 100644 --- a/code/modules/mob/abstract/new_player/new_player.dm +++ b/code/modules/mob/abstract/new_player/new_player.dm @@ -68,7 +68,7 @@ INITIALIZE_IMMEDIATE(/mob/abstract/new_player) alert(src, "You have not saved your character yet. Please do so before readying up.") return if(client.unacked_warning_count > 0) - alert(src, "You can not ready up, because you have unacknowledged warnings. Acknowledge your warnings in OOC->Warnings and Notifications.") + alert(src, "You can not ready up, because you have unacknowledged warnings or notifications. Acknowledge them in OOC->Warnings and Notifications.") return ready = text2num(href_list["ready"]) @@ -121,7 +121,7 @@ INITIALIZE_IMMEDIATE(/mob/abstract/new_player) return if(client.unacked_warning_count > 0) - alert(usr, "You can not join the game, because you have unacknowledged warnings. Acknowledge your warnings in OOC->Warnings and Notifications.") + alert(usr, "You can not join the game, because you have unacknowledged warnings or notifications. Acknowledge them in OOC->Warnings and Notifications.") return var/datum/species/S = all_species[client.prefs.species] diff --git a/code/modules/mob/abstract/new_player/poll.dm b/code/modules/mob/abstract/new_player/poll.dm index 757756c4975..50e625325cf 100644 --- a/code/modules/mob/abstract/new_player/poll.dm +++ b/code/modules/mob/abstract/new_player/poll.dm @@ -4,8 +4,7 @@ var/optiontext /mob/abstract/new_player/proc/handle_player_polling() - establish_db_connection(dbcon) - if(dbcon.IsConnected()) + if(establish_db_connection(dbcon)) var/isadmin = 0 if(src.client && src.client.holder) isadmin = 1 @@ -32,8 +31,7 @@ /mob/abstract/new_player/proc/show_poll_link(var/pollid = -1) if(pollid == -1) return - establish_db_connection(dbcon) - if(dbcon.IsConnected()) + if(establish_db_connection(dbcon)) var/DBQuery/select_query = dbcon.NewQuery("SELECT link FROM ss13_poll_question WHERE id = :pollid:") select_query.Execute(list("pollid"=pollid)) @@ -48,9 +46,8 @@ /mob/abstract/new_player/proc/poll_player(var/pollid = -1) if(pollid == -1) return - establish_db_connection(dbcon) - if(dbcon.IsConnected()) + if(establish_db_connection(dbcon)) var/DBQuery/select_query = dbcon.NewQuery("SELECT starttime, endtime, question, polltype, multiplechoiceoptions, link FROM ss13_poll_question WHERE id = :pollid:") select_query.Execute(list("pollid"=pollid)) @@ -329,8 +326,7 @@ if(!isnum(pollid) || !isnum(optionid)) return - establish_db_connection(dbcon) - if(dbcon.IsConnected()) + if(establish_db_connection(dbcon)) var/DBQuery/select_query = dbcon.NewQuery("SELECT starttime, endtime, question, polltype, multiplechoiceoptions FROM ss13_poll_question WHERE id = [pollid] AND Now() BETWEEN starttime AND endtime") select_query.Execute() @@ -399,8 +395,7 @@ if(!isnum(pollid) || !istext(replytext)) return - establish_db_connection(dbcon) - if(dbcon.IsConnected()) + if(establish_db_connection(dbcon)) var/DBQuery/select_query = dbcon.NewQuery("SELECT starttime, endtime, question, polltype FROM ss13_poll_question WHERE id = [pollid] AND Now() BETWEEN starttime AND endtime") select_query.Execute() @@ -457,8 +452,7 @@ if(!isnum(pollid) || !isnum(optionid)) return - establish_db_connection(dbcon) - if(dbcon.IsConnected()) + if(establish_db_connection(dbcon)) var/DBQuery/select_query = dbcon.NewQuery("SELECT starttime, endtime, question, polltype FROM ss13_poll_question WHERE id = [pollid] AND Now() BETWEEN starttime AND endtime") select_query.Execute() diff --git a/code/modules/mob/abstract/new_player/sprite_accessories.dm b/code/modules/mob/abstract/new_player/sprite_accessories.dm index 5b3bca9f191..7d26c67f6da 100644 --- a/code/modules/mob/abstract/new_player/sprite_accessories.dm +++ b/code/modules/mob/abstract/new_player/sprite_accessories.dm @@ -2723,6 +2723,58 @@ Follow by example and make good judgement based on length which list to include name = "yellow IPC screen" icon_state = "ipc_yellow" + ipc_screen_nanotrasen + name = "nanotrasen IPC screen" + icon_state = "ipc_nt" + + ipc_screen_hephaestus + name = "hephaestus IPC screen" + icon_state = "ipc_heph" + + ipc_screen_idris + name = "idris IPC screen" + icon_state = "ipc_idris" + + ipc_screen_zavodskoi + name = "zavodskoi IPC screen" + icon_state = "ipc_zavod" + + ipc_screen_zenghu + name = "zeng-hu IPC screen" + icon_state = "ipc_zenghu" + + ipc_screen_scc + name = "scc IPC screen" + icon_state = "ipc_scc" + + ipc_screen_biesel + name = "republic of biesel IPC screen" + icon_state = "ipc_biesel" + + ipc_screen_sol + name = "sol alliance IPC screen" + icon_state = "ipc_sol" + + ipc_screen_coalition + name = "coalition of colonies IPC screen" + icon_state = "ipc_coc" + + ipc_screen_elyra + name = "republic of elyra IPC screen" + icon_state = "ipc_elyra" + + ipc_screen_eridani + name = "eridani IPC screen" + icon_state = "ipc_eridani" + + ipc_screen_burzsia + name = "burzsia IPC screen" + icon_state = "ipc_burzsia" + + ipc_screen_tp + name = "trinary perfection IPC screen" + icon_state = "ipc_tp" + diona_eye icon = 'icons/mob/human_face/dionae_hair.dmi' name = "Mono Eye" @@ -2903,7 +2955,7 @@ Follow by example and make good judgement based on length which list to include do_colouration = FALSE body_parts = list(BP_CHEST) species_allowed = list(/datum/species/bug, /datum/species/bug/type_b) - + mecha_abdomen name = "Mecha Abdomen" icon_state = "mecha_abdomen" @@ -3483,7 +3535,7 @@ Follow by example and make good judgement based on length which list to include icon_state = "taj_pawsocks" body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG) species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) - + taj_glovesfull_alt name = "Socks Coloration (Full Gloves Alt)" icon_state = "taj_pawsocks_alternate" diff --git a/code/modules/mob/gender.dm b/code/modules/mob/gender.dm index ca42bf5f6d7..cd410ab8c93 100644 --- a/code/modules/mob/gender.dm +++ b/code/modules/mob/gender.dm @@ -75,4 +75,4 @@ var/list/datum/gender/gender_datums = list() /atom/proc/get_pronoun(var/wordtype) var/gender_to_use = get_gender() - return gender_datums[gender_to_use][wordtype] + return gender_datums[gender_to_use][wordtype] \ No newline at end of file diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm index a19dc27b71b..b7ec8cef3db 100644 --- a/code/modules/mob/hear_say.dm +++ b/code/modules/mob/hear_say.dm @@ -1,6 +1,6 @@ // At minimum every mob has a hear_say proc. -/mob/proc/hear_say(var/message, var/verb = "says", var/datum/language/language = null, var/alt_name = "",var/italics = 0, var/mob/speaker = null, var/sound/speech_sound, var/sound_vol) +/mob/proc/hear_say(var/message, var/verb = "says", var/datum/language/language = null, var/alt_name = "",var/italics = 0, var/mob/speaker = null, var/sound/speech_sound, var/sound_vol, var/font_size = null) if(!istype(src, /mob/living/test) && cant_hear()) return @@ -68,9 +68,15 @@ to_chat(src, "[speaker_name][alt_name] talks but you cannot hear them.") else if(language) - on_hear_say("[track][accent_icon ? accent_icon + " " : ""][speaker_name][alt_name] [language.format_message(message, verb)]") + if(font_size) + on_hear_say("[track][accent_icon ? accent_icon + " " : ""][speaker_name][alt_name] [language.format_message(message, verb)]") + else + on_hear_say("[track][accent_icon ? accent_icon + " " : ""][speaker_name][alt_name] [language.format_message(message, verb)]") else - on_hear_say("[track][speaker_name][alt_name] [verb], \"[message]\"") + if(font_size) + on_hear_say("[track][speaker_name][alt_name] [verb], \"[message]\"") + else + on_hear_say("[track][speaker_name][alt_name] [verb], \"[message]\"") if (speech_sound && (get_dist(speaker, src) <= world.view && src.z == speaker.z)) var/turf/source = speaker? get_turf(speaker) : get_turf(src) playsound_simple(source, speech_sound, sound_vol, use_random_freq = TRUE) diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm index 6bb95cf0b38..167eb194305 100644 --- a/code/modules/mob/holder.dm +++ b/code/modules/mob/holder.dm @@ -74,6 +74,9 @@ var/list/holder_mob_icon_cache = list() if (isalive && contained.stat == DEAD) held_death(1)//If we get here, it means the mob died sometime after we picked it up. We pass in 1 so that we can play its deathmessage +/obj/item/holder/proc/set_contained(var/mob/M) + M.forceMove(src) + contained = M //This function checks if the current location is safe to release inside //it returns 1 if the creature will bug out when released @@ -205,8 +208,7 @@ var/list/holder_mob_icon_cache = list() spawn(2) var/obj/item/holder/H = new holder_type(loc) - src.forceMove(H) - H.contained = src + H.set_contained(src) if (src.stat == DEAD) H.held_death()//We've scooped up an animal that's already dead. use the proper dead icons @@ -463,6 +465,14 @@ var/list/holder_mob_icon_cache = list() slot_flags = SLOT_HEAD w_class = ITEMSIZE_NORMAL +/obj/item/holder/monkey/set_contained(var/mob/living/carbon/human/M) + ..() + M.dir = SOUTH //monkeys look better head-on | source: it was revealed to me in a mirror + if(istype(M.w_uniform, /obj/item/clothing/under)) + var/obj/item/clothing/under/monkey_uniform = M.w_uniform + if(("[item_state]_[monkey_uniform.worn_state]_lh" in icon_states(icon))) // using _lh, because if there's a _lh, there's probably a _rh, right? + item_state = "[item_state]_[monkey_uniform.worn_state]" + /obj/item/holder/monkey/farwa name = "farwa" desc = "It's a farwa." diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index 49c03a1f308..ae9123dfbce 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -21,7 +21,7 @@ //set del_on_fail to have it delete W if it fails to equip //set disable_warning to disable the 'you are unable to equip that' warning. //unset redraw_mob to prevent the mob from being redrawn at the end. -/mob/proc/equip_to_slot_if_possible(obj/item/W as obj, slot, del_on_fail = FALSE, disable_warning = FALSE, redraw_mob = TRUE, ignore_blocked = FALSE) +/mob/proc/equip_to_slot_if_possible(obj/item/W as obj, slot, del_on_fail = FALSE, disable_warning = FALSE, redraw_mob = TRUE, ignore_blocked = FALSE, assisted_equip = FALSE) if(!istype(W)) return 0 if(!W.mob_can_equip(src, slot, disable_warning, ignore_blocked)) @@ -32,12 +32,12 @@ to_chat(src, "You are unable to equip [W].") //Only print if del_on_fail is false return 0 - equip_to_slot(W, slot, redraw_mob) //This proc should not ever fail. + equip_to_slot(W, slot, redraw_mob, assisted_equip) //This proc should not ever fail. return 1 //This is an UNSAFE proc. It merely handles the actual job of equipping. All the checks on whether you can or can't eqip need to be done before! Use mob_can_equip() for that task. //In most cases you will want to use equip_to_slot_if_possible() -/mob/proc/equip_to_slot(obj/item/W as obj, slot) +/mob/proc/equip_to_slot(obj/item/W, slot, redraw_mob, assisted_equip) W.on_slotmove(src) return @@ -146,18 +146,6 @@ var/list/slot_equipment_priority = list( \ return l_hand return -//Puts the item into your l_hand if possible and calls all necessary triggers/updates. returns 1 on success. -/mob/proc/put_in_l_hand(var/obj/item/W) - if(lying || !istype(W)) - return 0 - return 1 - -//Puts the item into your r_hand if possible and calls all necessary triggers/updates. returns 1 on success. -/mob/proc/put_in_r_hand(var/obj/item/W) - if(lying || !istype(W)) - return 0 - return 1 - //Puts the item into our active hand if possible. returns 1 on success. /mob/proc/put_in_active_hand(var/obj/item/W) return 0 // Moved to human procs because only they need to use hands. diff --git a/code/modules/mob/language/language.dm b/code/modules/mob/language/language.dm index 8ea6c062da7..7ebb30a4bd8 100644 --- a/code/modules/mob/language/language.dm +++ b/code/modules/mob/language/language.dm @@ -171,8 +171,11 @@ // Language handling. /mob/proc/add_language(var/language) - - var/datum/language/new_language = all_languages[language] + var/datum/language/new_language + if(istype(language, /datum/language)) + new_language = language + else + new_language = all_languages[language] if (!istype(new_language) || !new_language) CRASH("ERROR: Language [language] not found in list of all languages. The language you're looking for may have been moved, renamed, or removed. Please recheck the spelling of the name.") diff --git a/code/modules/mob/living/bot/bot.dm b/code/modules/mob/living/bot/bot.dm index a0484c9404b..cb5d4a3c50b 100644 --- a/code/modules/mob/living/bot/bot.dm +++ b/code/modules/mob/living/bot/bot.dm @@ -30,7 +30,7 @@ . = ..() update_icon() add_language(LANGUAGE_TCB) - set_default_language(LANGUAGE_TCB) + set_default_language(all_languages[LANGUAGE_TCB]) botcard = new /obj/item/card/id(src) botcard.access = botcard_access.Copy() @@ -209,4 +209,4 @@ qdel(src) /mob/living/bot/get_bullet_impact_effect_type(var/def_zone) - return BULLET_IMPACT_METAL \ No newline at end of file + return BULLET_IMPACT_METAL diff --git a/code/modules/mob/living/carbon/alien/diona/diona_powers.dm b/code/modules/mob/living/carbon/alien/diona/diona_powers.dm index 792da2fd642..32d2be1b3d0 100644 --- a/code/modules/mob/living/carbon/alien/diona/diona_powers.dm +++ b/code/modules/mob/living/carbon/alien/diona/diona_powers.dm @@ -203,7 +203,7 @@ adjustNutritionLoss(-20) else if (types & TYPE_WEIRD) visible_message(SPAN_DANGER("[src] attempts to bite into [donor.name] but passes right through it!."), SPAN_DANGER("You attempt to sink your fangs into [donor.name] but pass right through it!")) - else if (iscarbon(donor)) + else if (ishuman(donor)) var/datum/dionastats/DS = get_dionastats() if(DS) DS.do_blood_suck(src, donor) diff --git a/code/modules/mob/living/carbon/brain/brain_item.dm b/code/modules/mob/living/carbon/brain/brain_item.dm index ee668ccc729..efed214805b 100644 --- a/code/modules/mob/living/carbon/brain/brain_item.dm +++ b/code/modules/mob/living/carbon/brain/brain_item.dm @@ -13,9 +13,6 @@ icon = 'icons/mob/npc/alien.dmi' icon_state = "chitin" -/obj/item/organ/internal/brain/xeno/gain_trauma() - return - /obj/item/organ/internal/brain/slime name = "slime core" desc = "A complex, organic knot of jelly and crystalline particles." diff --git a/code/modules/mob/living/carbon/brain/posibrain.dm b/code/modules/mob/living/carbon/brain/posibrain.dm index 89b7d5d8d55..4a1a6b91c29 100644 --- a/code/modules/mob/living/carbon/brain/posibrain.dm +++ b/code/modules/mob/living/carbon/brain/posibrain.dm @@ -12,7 +12,8 @@ /obj/item/device/mmi/digital/posibrain/Initialize() . = ..() - brainmob.name = "[pick(list("PBU","HIU","SINA","ARMA","OSI"))]-[rand(100, 999)]" + var/datum/language/L = all_languages[LANGUAGE_EAL] + brainmob.name = L.get_random_name() brainmob.real_name = brainmob.name /obj/item/device/mmi/digital/posibrain/attack_self(mob/user) diff --git a/code/modules/mob/living/carbon/diona_base.dm b/code/modules/mob/living/carbon/diona_base.dm index a37a8cce7d0..e150b58441c 100644 --- a/code/modules/mob/living/carbon/diona_base.dm +++ b/code/modules/mob/living/carbon/diona_base.dm @@ -24,7 +24,6 @@ var/list/diona_banned_languages = list( /mob/living/carbon/proc/diona_handle_light(var/datum/dionastats/DS) //Carbon is the highest common denominator between gestalts and nymphs. They will share light code //if light_organ is non null, then we're working with a gestalt. otherwise nymph - var/light_amount = DS.last_lightlevel //If we're not re-fetching the light level then we'll use a recent cached version if (life_tick % 2 == 0) //Only fetch the lightlevel every other proc to save performance @@ -32,7 +31,6 @@ var/list/diona_banned_languages = list( light_amount = get_lightlevel_diona(DS) DS.last_lightlevel = light_amount - DS.stored_energy += light_amount if(DS.stored_energy > DS.max_energy) @@ -50,13 +48,6 @@ var/list/diona_banned_languages = list( DS.last_location = loc if(light_amount) adjustNutritionLoss(-light_amount) // regenerate our nutrition from light. - move_delay_mod = min(initial(move_delay_mod) - light_amount * 1, 0) - sprint_speed_factor = initial(sprint_speed_factor) - sprint_cost_factor = Clamp(initial(sprint_cost_factor) - light_amount * DIONA_LIGHT_COEFICIENT, 0, initial(sprint_cost_factor)) - if (total_radiation) - move_delay_mod = max(move_delay_mod * total_radiation * 3, -4.5) - sprint_speed_factor = 0.65 - sprint_cost_factor = 0 /mob/living/carbon/alien/diona/death() if(client && gestalt && switch_to_gestalt()) @@ -627,36 +618,26 @@ var/list/diona_banned_languages = list( var/regen_limb_progress var/pause_regen = FALSE -/datum/dionastats/proc/do_blood_suck(var/mob/living/carbon/user, var/mob/living/carbon/D) - user.visible_message(SPAN_DANGER("[user] is trying to bite [D.name]."), SPAN_DANGER("You start biting \the [D], you both must stay still!")) - user.face_atom(get_turf(D)) - if(do_mob(user, D, 40, needhand = FALSE)) - //Attempt to find the blood vessel, but don't create a fake one if its not there. - //If the target doesn't have a vessel its probably due to someone not implementing it properly, like xenos - //We'll still allow it - var/newDNA - var/datum/reagents/vessel - - var/total_blood = REAGENT_VOLUME(vessel, /decl/reagent/blood) - var/remove_amount = total_blood * 0.05 - if(ishuman(D)) - var/mob/living/carbon/human/H = D - remove_amount = H.species.blood_volume * 0.05 +/datum/dionastats/proc/do_blood_suck(var/mob/living/carbon/user, var/mob/living/carbon/human/H) + user.visible_message(SPAN_DANGER("[user] is trying to bite [H.name]."), SPAN_DANGER("You start biting \the [H], you both must stay still!")) + user.face_atom(get_turf(H)) + if(do_mob(user, H, 40, needhand = FALSE)) + var/remove_amount = H.species.blood_volume * 0.05 if(remove_amount > 0) - vessel.remove_reagent(/decl/reagent/blood, remove_amount, TRUE) + H.vessel.remove_reagent(/decl/reagent/blood, remove_amount, TRUE) user.adjustNutritionLoss(-remove_amount * 0.5) - var/list/data = REAGENT_DATA(vessel, /decl/reagent/blood) - newDNA = data["blood_DNA"] + var/list/data = REAGENT_DATA(H.vessel, /decl/reagent/blood) + var/newDNA = data["blood_DNA"] if(!newDNA) //Fallback. Adminspawned mobs, and possibly some others, have null dna. - newDNA = md5("\ref[D]") + newDNA = md5("\ref[H]") - D.adjustBruteLoss(4) - user.visible_message(SPAN_NOTICE("[user] sucks some blood from \the [D].") , SPAN_NOTICE("You extract a delicious mouthful of blood from \the [D]!")) - to_chat(D, SPAN_NOTICE("You feel some liquid being injected at the bite site.")) - D.reagents.add_reagent(/decl/reagent/mortaphenyl/aphrodite, 5) - if(D.client) - INVOKE_ASYNC(src, .proc/memory_transfer, user, D) + H.adjustBruteLoss(4) + user.visible_message(SPAN_NOTICE("[user] sucks some blood from \the [H].") , SPAN_NOTICE("You extract a delicious mouthful of blood from \the [H]!")) + to_chat(H, SPAN_NOTICE("You feel some liquid being injected at the bite site.")) + H.reagents.add_reagent(/decl/reagent/mortaphenyl/aphrodite, 5) + if(H.client) + INVOKE_ASYNC(src, .proc/memory_transfer, user, H) if(newDNA in sampled_DNA) to_chat(user, SPAN_DANGER("You have already sampled the DNA of this creature before, you can learn nothing new. Move onto something else.")) return @@ -670,7 +651,7 @@ var/list/diona_banned_languages = list( //2 = We learned something! //Now we sample their languages! - for(var/datum/language/L in D.languages) + for(var/datum/language/L in H.languages) learned = max(learned, 1) if (!(L in user.languages) && !(L in diona_banned_languages)) //We don't know this language, and we can learn it! @@ -687,7 +668,7 @@ var/list/diona_banned_languages = list( update_languages(user) else - to_chat(user, SPAN_WARNING("Something went wrong while trying to sample [D], both you and the target must remain still.")) + to_chat(user, SPAN_WARNING("Something went wrong while trying to sample [H], both you and the target must remain still.")) /datum/dionastats/proc/memory_transfer(var/mob/user, var/mob/donor) var/memory_drain = input(donor, "[user] just drained some of your blood, including some of your memory. What was on your mind?", "Diona Memory Transfer") as null|text diff --git a/code/modules/mob/living/carbon/human/appearance.dm b/code/modules/mob/living/carbon/human/appearance.dm index 803f0605b21..86a76757625 100644 --- a/code/modules/mob/living/carbon/human/appearance.dm +++ b/code/modules/mob/living/carbon/human/appearance.dm @@ -1,7 +1,7 @@ -/mob/living/carbon/human/proc/change_appearance(var/flags = APPEARANCE_ALL_HAIR, var/location = src, var/mob/user = src, var/check_species_whitelist = 1, var/list/species_whitelist = list(), var/list/species_blacklist = list(), var/datum/topic_state/state = default_state) - var/datum/nano_module/appearance_changer/AC = new(location, src, check_species_whitelist, species_whitelist, species_blacklist) +/mob/living/carbon/human/proc/change_appearance(var/flags = APPEARANCE_ALL_HAIR, var/mob/user = src, var/check_species_whitelist = TRUE, var/list/species_whitelist = list(), var/list/species_blacklist = list(), var/datum/topic_state/ui_state = interactive_state, var/datum/state_object = src) + var/datum/vueui_module/appearance_changer/AC = new /datum/vueui_module/appearance_changer(src, check_species_whitelist, species_whitelist, species_blacklist, ui_state, state_object) AC.flags = flags - AC.ui_interact(user, state = state) + AC.ui_interact(user) /mob/living/carbon/human/proc/change_species(var/new_species) if(!new_species) @@ -17,12 +17,13 @@ reset_hair() return 1 -/mob/living/carbon/human/proc/change_gender(var/gender) - if(src.gender == gender) +/mob/living/carbon/human/proc/change_gender(var/set_gender) + if(gender == set_gender) return - src.gender = gender - dna.SetUIState(DNA_UI_GENDER, src.gender != MALE, 1) + gender = set_gender + pronouns = gender + dna.SetUIState(DNA_UI_GENDER, gender != MALE, 1) reset_hair() update_body() species.create_organs(src) @@ -62,13 +63,13 @@ var/list/valid_hairstyles = generate_valid_hairstyles() var/list/valid_facial_hairstyles = generate_valid_facial_hairstyles() - if(valid_hairstyles.len) + if(length(valid_hairstyles)) h_style = pick(valid_hairstyles) else //this shouldn't happen h_style = "Bald" - if(valid_facial_hairstyles.len) + if(length(valid_facial_hairstyles)) f_style = pick(valid_facial_hairstyles) else //this shouldn't happen diff --git a/code/modules/mob/living/carbon/human/damage_menu.dm b/code/modules/mob/living/carbon/human/damage_menu.dm new file mode 100644 index 00000000000..3a0293cbd5a --- /dev/null +++ b/code/modules/mob/living/carbon/human/damage_menu.dm @@ -0,0 +1,151 @@ +// the damage menu is a menu which you can use to damage human mobs +// it's accessible via the drop down list when you VV a human mob + +/datum/vueui_module/damage_menu + var/datum/weakref/target_human + +/datum/vueui_module/damage_menu/New(var/datum/weakref/target, var/mob/user) + var/mob/living/carbon/human/H = target.resolve() + if(istype(H)) + target_human = target + ui_interact(user) + +/datum/vueui_module/damage_menu/ui_interact(mob/user) + if(!user.client.holder) + return + var/datum/vueui/ui = SSvueui.get_open_ui(user, src) + if(!ui) + var/human_name = "Geoff" + var/human_ckey = "None" + var/mob/living/carbon/H = target_human.resolve() + if(H) + human_name = H.real_name + if(H.ckey) + human_ckey = H.ckey + ui = new(user, src, "admin-damage-menu", 600, 600, "Damage Menu | [human_name] | [human_ckey]", state = interactive_state) + ui.header = "minimal" + ui.open() + +/datum/vueui_module/damage_menu/vueui_data_change(var/list/data, var/mob/user, var/datum/vueui/ui) + if(!data) + data = list() + if(!user.client.holder) + return + + var/mob/living/carbon/H = target_human.resolve() + if(!istype(H)) + to_chat(user, SPAN_DANGER("The humanoid target couldn't be found, closing UI.")) + ui.close() + + var/list/limbs = list() + for(var/name in H.species.has_limbs) + limbs[capitalize_first_letters(parse_zone(name))] = !!H.organs_by_name[name] + var/list/organs = list() + for(var/name in H.species.has_organ) + organs[capitalize_first_letters(name)] = !!H.internal_organs_by_name[name] + + data["limbs"] = limbs + data["organs"] = organs + + return data + +/datum/vueui_module/damage_menu/Topic(href, href_list) + if(!check_rights(R_ADMIN)) + return + + var/mob/living/carbon/human/H = target_human.resolve() + if(!istype(H)) + return + + switch(href_list["target"]) + if("limb") + var/obj/item/organ/external/L = H.organs_by_name[reverse_parse_zone(lowertext(href_list["name"]))] + if(!L) + to_chat(usr, SPAN_WARNING("\The [H] doesn't have that limb!")) + return + switch(href_list["action"]) + if("brute") + var/damage_dealt = input(usr, "How much brute damage do you want to deal? (Current Brute: [L.brute_dam] | Current Burn; [L.burn_dam])", "Brute Damage") as null|num + if(damage_dealt) + L.take_damage(damage_dealt, 0) + log_and_message_admins("used the Damage Menu to deploy deal [damage_dealt] [href_list["action"]] to [H]'s [href_list["name"]]", usr, get_turf(H)) + if("burn") + var/damage_dealt = input(usr, "How much burn damage do you want to deal? (Current Brute: [L.brute_dam] | Current Burn; [L.burn_dam])", "Burn Damage") as null|num + if(damage_dealt) + L.take_damage(0, damage_dealt) + log_and_message_admins("used the Damage Menu to deploy deal [damage_dealt] [href_list["action"]] to [H]'s [href_list["name"]]", usr, get_turf(H)) + if("infection") + switch(alert(usr, "Do you want to increase or decrease the infection level? (Current: [L.estimated_infection_level()])", "Infection Level", "Increase", "Decrease", "Cancel")) + if("Increase") + L.increase_germ_level() + log_and_message_admins("used the Damage Menu to increase the infection level of [H]'s [href_list["name"]]", usr, get_turf(H)) + if("Decrease") + L.decrease_germ_level() + log_and_message_admins("used the Damage Menu to decrease the infection level of [H]'s [href_list["name"]]", usr, get_turf(H)) + if("shatter") + if(L.brute_dam < L.min_broken_damage * config.organ_health_multiplier) + L.take_damage(L.brute_dam + ((L.min_broken_damage * config.organ_health_multiplier) - L.brute_dam)) + L.fracture() + log_and_message_admins("used the Damage Menu to shatter [H]'s [href_list["name"]]", usr, get_turf(H)) + if("arterial") + if(L.status & ORGAN_ARTERY_CUT) + if(alert(usr, "Do you want to stop the arterial bleeding?", "Arterial Bleeding", "Yes", "No") == "Yes") + L.status &= ~ORGAN_ARTERY_CUT + L.update_damages() + log_and_message_admins("used the Damage Menu to stop an arterial bleed in [H]'s [href_list["name"]]", usr, get_turf(H)) + else + if(alert(usr, "Do you want to start an arterial bleed?", "Arterial Bleeding", "Yes", "No") == "Yes") + if(L.sever_artery()) + log_and_message_admins("used the Damage Menu to start an arterial bleed in [H]'s [href_list["name"]]", usr, get_turf(H)) + else + to_chat(usr, SPAN_WARNING("For whatever reason, \the [L] cannot gain an arterial bleed!")) + if("sever") + switch(alert(usr, "Do you want to cleanly sever the limb, or gib it into blood and gore?", "Sever Limb", "Cleanly Sever", "Gib", "Cancel")) + if("Cleanly Sever") + L.droplimb(TRUE, DROPLIMB_EDGE) + log_and_message_admins("used the Damage Menu to cleanly sever [H]'s [href_list["name"]]", usr, get_turf(H)) + if("Gib") + L.droplimb(FALSE, DROPLIMB_BLUNT) + log_and_message_admins("used the Damage Menu to gib [H]'s [href_list["name"]]", usr, get_turf(H)) + if("organ") + var/obj/item/organ/internal/O = H.internal_organs_by_name[lowertext(href_list["name"])] + if(!O) + to_chat(usr, SPAN_WARNING("\The [H] doesn't have that organ!")) + return + switch(href_list["action"]) + if("damage") + var/damage_dealt = input(usr, "How much damage do you want to deal? (Current Damage: [O.damage])", "Brute Damage") as null|num + if(damage_dealt) + O.take_internal_damage(damage_dealt) + log_and_message_admins("used the Damage Menu to deal [damage_dealt] [href_list["action"]] to [H]'s [href_list["name"]]", usr, get_turf(H)) + if("infection") + switch(alert(usr, "Do you want to increase or decrease the infection level? (Current: [O.estimated_infection_level()])", "Infection Level", "Increase", "Decrease", "Cancel")) + if("Increase") + O.increase_germ_level() + log_and_message_admins("used the Damage Menu to increase the infection level of [H]'s [href_list["name"]]", usr, get_turf(H)) + if("Decrease") + O.decrease_germ_level() + log_and_message_admins("used the Damage Menu to decrease the infection level of [H]'s [href_list["name"]]", usr, get_turf(H)) + if("bruise") + if(O.damage < O.min_bruised_damage) + O.take_damage(O.damage + (O.min_bruised_damage - O.damage) + 1) + log_and_message_admins("used the Damage Menu to bruise [H]'s [href_list["name"]]", usr, get_turf(H)) + if("break") + if(O.damage < O.min_broken_damage) + O.take_damage(O.damage + (O.min_broken_damage - O.damage) + 1) + log_and_message_admins("used the Damage Menu to break [H]'s [href_list["name"]]", usr, get_turf(H)) + if("remove") + O.removed(H) + qdel(O) + log_and_message_admins("used the Damage Menu to remove and delete [H]'s [href_list["name"]]", usr, get_turf(H)) + if("misc") + log_and_message_admins("used the Damage Menu to deploy [href_list["action"]] on [H]", usr, get_turf(H)) + switch(href_list["action"]) + if("wind") + toggle_wind_paralysis(H, usr) + if("gigashatter") + H.gigashatter() + if("kill") + H.death(FALSE) + if("gib") + H.gib() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index b5a781e4ffd..d534453eb9c 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -5,6 +5,8 @@ icon = 'icons/mob/human.dmi' icon_state = "body_m_s" + var/pronouns = NEUTER + var/species_items_equipped // used so species that need special items (autoinhalers for vaurca/RMT for offworlders) don't get them twice when they shouldn't. var/list/hud_list[10] @@ -174,7 +176,7 @@ return ..() var/obj/item/organ/internal/stomach/stomach = internal_organs_by_name[BP_STOMACH] if(stomach) - return nutrition + (stomach.ingested.total_volume * 10) + return nutrition + stomach.ingested.total_volume return 0 /mob/living/carbon/human/Stat() @@ -198,7 +200,7 @@ stat("Internal Atmosphere Info", internal.name) stat("Tank Pressure", internal.air_contents.return_pressure()) stat("Distribution Pressure", internal.distribute_pressure) - + var/obj/item/organ/internal/cell/IC = internal_organs_by_name[BP_CELL] if(IC && IC.cell) stat("Battery charge:", "[IC.get_charge()]/[IC.cell.maxcharge]") @@ -844,11 +846,6 @@ to_chat(src, SPAN_WARNING("You don't have the dexterity to use that!")) return 0 - if(disabilities & MONKEYLIKE) - if(!silent) - to_chat(src, SPAN_WARNING("You don't have the dexterity to use that!")) - return 0 - return 1 /mob/living/carbon/human/abiotic(var/full_body = 0) @@ -865,13 +862,10 @@ dna.check_integrity(src) return -/mob/living/carbon/human/get_species(var/reference = 0) +/mob/living/carbon/human/get_species(var/reference = FALSE, var/records = FALSE) if(!species) set_species() - if (reference) - return species - else - return species.name + return species.get_species(reference, src, records) /mob/living/carbon/human/proc/play_xylophone() if(!src.xylophone) @@ -899,7 +893,7 @@ var/obj/item/organ/internal/stomach/stomach = internal_organs_by_name[BP_STOMACH] var/nothing_to_puke = FALSE if(should_have_organ(BP_STOMACH)) - if(!istype(stomach) || (stomach.ingested.total_volume <= 5 && stomach.contents.len == 0)) + if(!istype(stomach) || (stomach.ingested.total_volume <= 3 && !length(stomach.contents))) nothing_to_puke = TRUE else if(!(locate(/mob) in contents)) nothing_to_puke = TRUE @@ -1162,10 +1156,10 @@ /mob/living/carbon/human/get_gender() var/skipitems = get_covered_clothes() - var/skipbody = get_covered_body_parts() - . = ..() + var/skipbody = get_covered_body_parts(TRUE) if((skipbody & FACE || (skipitems & (HIDEMASK|HIDEFACE))) && ((skipbody & UPPER_TORSO && skipbody & LOWER_TORSO) || (skipitems & HIDEJUMPSUIT))) //big suits/masks/helmets make it hard to tell their gender - . = PLURAL + return PLURAL + return pronouns /mob/living/carbon/human/proc/increase_germ_level(n) if(gloves) @@ -1757,39 +1751,6 @@ to_chat(src, SPAN_NOTICE("You are now [pulling_punches ? "pulling your punches" : "not pulling your punches"].")) return -/mob/living/carbon/human/proc/get_traumas() - . = list() - var/obj/item/organ/internal/brain/B = internal_organs_by_name[BP_BRAIN] - if(istype(B, /obj/item/organ/internal/borer)) - return - if(B && should_have_organ(BP_BRAIN) && !isipc(src)) - . = B.traumas - -/mob/living/carbon/human/proc/has_trauma_type(brain_trauma_type, consider_permanent = FALSE) - var/obj/item/organ/internal/brain/B = internal_organs_by_name[BP_BRAIN] - if(B && should_have_organ(BP_BRAIN) && !isipc(src)) - . = B.has_trauma_type(brain_trauma_type, consider_permanent) - -/mob/living/carbon/human/proc/gain_trauma(datum/brain_trauma/trauma, permanent = FALSE, list/arguments) - var/obj/item/organ/internal/brain/B = internal_organs_by_name[BP_BRAIN] - if(B && should_have_organ(BP_BRAIN) && !isipc(src)) - . = B.gain_trauma(trauma, permanent, arguments) - -/mob/living/carbon/human/proc/gain_trauma_type(brain_trauma_type = /datum/brain_trauma, permanent = FALSE) - var/obj/item/organ/internal/brain/B = internal_organs_by_name[BP_BRAIN] - if(B && should_have_organ(BP_BRAIN) && !isipc(src)) - . = B.gain_trauma_type(brain_trauma_type, permanent) - -/mob/living/carbon/human/proc/cure_trauma_type(brain_trauma_type, cure_permanent = FALSE) - var/obj/item/organ/internal/brain/B = internal_organs_by_name[BP_BRAIN] - if(B && should_have_organ(BP_BRAIN) && !isipc(src)) - . = B.cure_trauma_type(brain_trauma_type, cure_permanent) - -/mob/living/carbon/human/proc/cure_all_traumas(cure_permanent = FALSE, cure_type = "") - var/obj/item/organ/internal/brain/B = internal_organs_by_name[BP_BRAIN] - if(B && should_have_organ(BP_BRAIN) && !isipc(src)) - . = B.cure_all_traumas(cure_permanent, cure_type) - /mob/living/carbon/human/get_metabolism(metabolism) return ..() * (species ? species.metabolism_mod : 1) @@ -2006,14 +1967,8 @@ return ..(speaking, hearer, used_accent) -/mob/living/carbon/human/proc/generate_valid_accent() - var/list/valid_accents = list() - for(var/current_accents in species.allowed_accents) - valid_accents += current_accents - return valid_accents - /mob/living/carbon/human/proc/generate_valid_languages() - var/list/available_languages = species.secondary_langs.Copy() + var/list/available_languages = species.secondary_langs.Copy() + LANGUAGE_TCB for(var/L in all_languages) var/datum/language/lang = all_languages[L] if(!(lang.flags & RESTRICTED) && (!config.usealienwhitelist || is_alien_whitelisted(src, L) || !(lang.flags & WHITELISTED))) @@ -2036,7 +1991,7 @@ to_chat(src, SPAN_NOTICE("You no longer know [new_language.name].")) return TRUE var/total_alternate_languages = languages.Copy() - total_alternate_languages -= all_languages[LANGUAGE_TCB] + total_alternate_languages -= all_languages[species.language] if(length(total_alternate_languages) >= species.num_alternate_languages) to_chat(src, SPAN_WARNING("You can't add any more languages!")) return TRUE @@ -2066,4 +2021,11 @@ set hidden = 1 set name = "click_suit_storage" if(s_store) - s_store.Click() \ No newline at end of file + s_store.Click() + +/mob/living/carbon/human/proc/disable_organ_night_vision() + var/obj/item/organ/E = internal_organs_by_name[BP_EYES] + if (istype(E, /obj/item/organ/internal/eyes/night)) + var/obj/item/organ/internal/eyes/night/N = E + if(N.night_vision ) + N.disable_night_vision() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index 52dcbe9823c..85f1beb5bb9 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -504,7 +504,7 @@ var/dam_zone = user.zone_sel?.selecting if(!dam_zone) dam_zone = pick(organs) - var/obj/item/organ/external/affecting = get_organ(ran_zone(dam_zone)) + var/obj/item/organ/external/affecting = get_organ(dam_zone) apply_damage(damage, BRUTE, affecting) updatehealth() return TRUE diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index d046d426c88..7dd2ea5c430 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -256,9 +256,11 @@ //////////////////////////////////////////// //Returns a list of damaged organs -/mob/living/carbon/human/proc/get_damaged_organs(var/brute, var/burn) +/mob/living/carbon/human/proc/get_damaged_organs(var/brute, var/burn, var/prosthetic = TRUE) var/list/obj/item/organ/external/parts = list() for(var/obj/item/organ/external/O in organs) + if(!prosthetic && BP_IS_ROBOTIC(O)) + continue if((brute && O.brute_dam) || (burn && O.burn_dam)) parts += O return parts @@ -274,11 +276,12 @@ //Heals ONE external organ, organ gets randomly selected from damaged ones. //It automatically updates damage overlays if necesary //It automatically updates health status -/mob/living/carbon/human/heal_organ_damage(var/brute, var/burn) - var/list/obj/item/organ/external/parts = get_damaged_organs(brute,burn) - if(!parts.len) return +/mob/living/carbon/human/heal_organ_damage(var/brute, var/burn, var/prosthetic = TRUE) + var/list/obj/item/organ/external/parts = get_damaged_organs(brute, burn, prosthetic) + if(!length(parts)) + return var/obj/item/organ/external/picked = pick(parts) - if(picked.heal_damage(brute,burn)) + if(picked.heal_damage(brute, burn, robo_repair = prosthetic)) UpdateDamageIcon() BITSET(hud_updateflag, HEALTH_HUD) updatehealth() diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm index 7cf342d7955..d99627ef629 100644 --- a/code/modules/mob/living/carbon/human/human_helpers.dm +++ b/code/modules/mob/living/carbon/human/human_helpers.dm @@ -160,7 +160,7 @@ return O -/mob/living/carbon/human/proc/awaken_psi_basic(var/source) +/mob/living/carbon/human/proc/awaken_psi_basic(var/source, var/allow_latency = TRUE) var/static/list/psi_operancy_messages = list( "There's something in your skull!", "Something is eating your thoughts!", @@ -176,11 +176,9 @@ var/list/faculties = list(PSI_COERCION, PSI_REDACTION, PSI_ENERGISTICS, PSI_PSYCHOKINESIS) for(var/i = 1 to new_latencies) custom_pain(SPAN_DANGER("[pick(psi_operancy_messages)]"), 25) - set_psi_rank(pick_n_take(faculties), 1) + set_psi_rank(pick_n_take(faculties), allow_latency ? PSI_RANK_LATENT : PSI_RANK_OPERANT) // if set to latent, it spikes anywhere from OPERANT to PARAMOUNT sleep(30) - psi.update() - sleep(45) - psi.check_latency_trigger(100, source, TRUE) + addtimer(CALLBACK(psi, /datum/psi_complexus/.proc/check_latency_trigger, 100, source, TRUE), 4.5 SECONDS) /mob/living/carbon/human/get_resist_power() return species.resist_mod @@ -195,6 +193,8 @@ /mob/living/carbon/human/proc/has_hearing_aid() if(istype(l_ear, /obj/item/device/hearing_aid) || istype(r_ear, /obj/item/device/hearing_aid)) return TRUE + if(has_functioning_augment(BP_AUG_COCHLEAR)) + return TRUE return FALSE /mob/living/carbon/human/proc/is_submerged() @@ -287,4 +287,15 @@ var/datum/changeling/changeling = get_antag_datum(MODE_CHANGELING) if(changeling?.space_adapted) return TRUE - return FALSE \ No newline at end of file + return FALSE + +/mob/living/carbon/human/get_cell() + var/obj/item/organ/internal/cell/C = internal_organs_by_name[BP_CELL] + if(C) + return C.cell + +/mob/living/carbon/human/proc/has_functioning_augment(var/aug_tag) + var/obj/item/organ/internal/augment/aug = internal_organs_by_name[aug_tag] + if(aug && !aug.is_broken()) + return TRUE + return FALSE diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index fb4daec6c3a..de57efba9ba 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -46,9 +46,6 @@ else if(E.status & ORGAN_BROKEN) tally += 1.5 else - if(shoes) - tally += shoes.slowdown - for(var/organ_name in list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG)) var/obj/item/organ/external/E = get_organ(organ_name) if(!E || E.is_stump()) diff --git a/code/modules/mob/living/carbon/human/human_organs.dm b/code/modules/mob/living/carbon/human/human_organs.dm index af58424ca5a..38127aeccfa 100644 --- a/code/modules/mob/living/carbon/human/human_organs.dm +++ b/code/modules/mob/living/carbon/human/human_organs.dm @@ -224,9 +224,9 @@ /mob/living/carbon/human/is_asystole() if(isSynthetic()) var/obj/item/organ/internal/cell/C = internal_organs_by_name[BP_CELL] - if(istype(C)) - if(!C.is_usable() || !C.percent()) - return TRUE + if(istype(C) && C.is_usable() && C.percent()) + return FALSE + return TRUE else if(should_have_organ(BP_HEART)) var/obj/item/organ/internal/heart/heart = internal_organs_by_name[BP_HEART] if(!istype(heart) || !heart.is_working()) diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 2d02b243e69..b60ee2d8e9f 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -194,17 +194,23 @@ This saves us from having to call add_fingerprint() any time something is put in //This is an UNSAFE proc. Use mob_can_equip() before calling this one! Or rather use equip_to_slot_if_possible() or advanced_equip_to_slot_if_possible() //set redraw_mob to 0 if you don't wish the hud to be updated - if you're doing it manually in your own proc. -/mob/living/carbon/human/equip_to_slot(obj/item/W as obj, slot, redraw_mob = 1) +/mob/living/carbon/human/equip_to_slot(obj/item/W, slot, redraw_mob = TRUE, assisted_equip) ..() - if(!slot) return - if(!istype(W)) return - if(!has_organ_for_slot(slot)) return - if(!species || !species.hud || !(slot in species.hud.equip_slots)) return + if(!slot) + return + if(!istype(W)) + return + if(!has_organ_for_slot(slot)) + return + if(!species || !species.hud || !(slot in species.hud.equip_slots)) + return + if(!W.check_equipped(src, slot, assisted_equip)) + return W.forceMove(src) switch(slot) if(slot_back) src.back = W - W.equipped(src, slot) + W.equipped(src, slot, assisted_equip) update_inv_back(redraw_mob) if(slot_wear_mask) src.wear_mask = W @@ -212,30 +218,32 @@ This saves us from having to call add_fingerprint() any time something is put in update_hair(redraw_mob) //rebuild hair update_inv_l_ear(0) update_inv_r_ear(0) - W.equipped(src, slot) + W.equipped(src, slot, assisted_equip) update_inv_wear_mask(redraw_mob) if(slot_handcuffed) src.handcuffed = W update_inv_handcuffed(redraw_mob) if(slot_legcuffed) src.legcuffed = W - W.equipped(src, slot) + W.equipped(src, slot, assisted_equip) update_inv_legcuffed(redraw_mob) if(slot_l_hand) src.l_hand = W - W.equipped(src, slot) + W.equipped(src, slot, assisted_equip) + W.screen_loc = ui_lhand update_inv_l_hand(redraw_mob) if(slot_r_hand) src.r_hand = W - W.equipped(src, slot) + W.equipped(src, slot, assisted_equip) + W.screen_loc = ui_rhand update_inv_r_hand(redraw_mob) if(slot_belt) src.belt = W - W.equipped(src, slot) + W.equipped(src, slot, assisted_equip) update_inv_belt(redraw_mob) if(slot_wear_id) src.wear_id = W - W.equipped(src, slot) + W.equipped(src, slot, assisted_equip) update_inv_wear_id(redraw_mob) if(slot_l_ear) src.l_ear = W @@ -244,7 +252,7 @@ This saves us from having to call add_fingerprint() any time something is put in O.copy_ear(W) src.r_ear = O O.layer = SCREEN_LAYER+0.01 - W.equipped(src, slot) + W.equipped(src, slot, assisted_equip) update_inv_l_ear(redraw_mob) if(slot_r_ear) src.r_ear = W @@ -253,19 +261,19 @@ This saves us from having to call add_fingerprint() any time something is put in O.copy_ear(W) src.l_ear = O O.layer = SCREEN_LAYER+0.01 - W.equipped(src, slot) + W.equipped(src, slot, assisted_equip) update_inv_r_ear(redraw_mob) if(slot_glasses) src.glasses = W - W.equipped(src, slot) + W.equipped(src, slot, assisted_equip) update_inv_glasses(redraw_mob) if(slot_gloves) src.gloves = W - W.equipped(src, slot) + W.equipped(src, slot, assisted_equip) update_inv_gloves(redraw_mob) if(slot_wrists) src.wrists = W - W.equipped(src, slot) + W.equipped(src, slot, assisted_equip) update_inv_wrists(redraw_mob) if(slot_head) src.head = W @@ -274,34 +282,34 @@ This saves us from having to call add_fingerprint() any time something is put in update_inv_l_ear(0) update_inv_r_ear(0) update_inv_wear_mask(0) - W.equipped(src, slot) + W.equipped(src, slot, assisted_equip) update_inv_head(redraw_mob) if(slot_shoes) src.shoes = W - W.equipped(src, slot) + W.equipped(src, slot, assisted_equip) update_inv_shoes(redraw_mob) update_noise_level() if(slot_wear_suit) src.wear_suit = W if(wear_suit.flags_inv & HIDESHOES) update_inv_shoes(0) - W.equipped(src, slot) + W.equipped(src, slot, assisted_equip) update_inv_wear_suit(redraw_mob) if(slot_w_uniform) src.w_uniform = W - W.equipped(src, slot) + W.equipped(src, slot, assisted_equip) update_inv_w_uniform(redraw_mob) if(slot_l_store) src.l_store = W - W.equipped(src, slot) + W.equipped(src, slot, assisted_equip) update_inv_pockets(redraw_mob) if(slot_r_store) src.r_store = W - W.equipped(src, slot) + W.equipped(src, slot, assisted_equip) update_inv_pockets(redraw_mob) if(slot_s_store) src.s_store = W - W.equipped(src, slot) + W.equipped(src, slot, assisted_equip) update_inv_s_store(redraw_mob) if(slot_in_backpack) if(src.get_active_hand() == W) @@ -326,6 +334,13 @@ This saves us from having to call add_fingerprint() any time something is put in update_inv_r_hand() W.layer = SCREEN_LAYER+0.01 + for(var/s in species.hud.gear) + var/list/gear = species.hud.gear[s] + if(gear["slot"] == slot) + W.screen_loc = gear["loc"] + break + if(hud_used) + hud_used.hidden_inventory_update() if(W.action_button_name) update_action_buttons() @@ -409,47 +424,23 @@ This saves us from having to call add_fingerprint() any time something is put in //Puts the item into our active hand if possible. returns 1 on success. -/mob/living/carbon/human/put_in_active_hand(var/obj/item/W) - return (hand ? put_in_l_hand(W) : put_in_r_hand(W)) +/mob/living/carbon/human/put_in_active_hand(var/obj/item/W, set_disable_warning = FALSE) + return (hand ? equip_to_slot_if_possible(W, slot_l_hand, disable_warning = set_disable_warning) : equip_to_slot_if_possible(W, slot_r_hand, disable_warning = set_disable_warning)) //Puts the item into our inactive hand if possible. returns 1 on success. -/mob/living/carbon/human/put_in_inactive_hand(var/obj/item/W) - return (hand ? put_in_r_hand(W) : put_in_l_hand(W)) +/mob/living/carbon/human/put_in_inactive_hand(var/obj/item/W, set_disable_warning = FALSE) + return (hand ? equip_to_slot_if_possible(W, slot_r_hand, disable_warning = set_disable_warning) : equip_to_slot_if_possible(W, slot_l_hand, disable_warning = set_disable_warning)) /mob/living/carbon/human/put_in_hands(var/obj/item/W) if(!W) - return 0 - if(put_in_active_hand(W)) - update_inv_l_hand() - update_inv_r_hand() - return 1 - else if(put_in_inactive_hand(W)) - update_inv_l_hand() - update_inv_r_hand() - return 1 + return FALSE + if(put_in_active_hand(W, TRUE)) + return TRUE + else if(put_in_inactive_hand(W, TRUE)) + return TRUE else return ..() -/mob/living/carbon/human/put_in_l_hand(var/obj/item/W) - if(!..() || l_hand) - return 0 - W.forceMove(src) - l_hand = W - W.equipped(src,slot_l_hand) - W.add_fingerprint(src) - update_inv_l_hand() - return 1 - -/mob/living/carbon/human/put_in_r_hand(var/obj/item/W) - if(!..() || r_hand) - return 0 - W.forceMove(src) - r_hand = W - W.equipped(src,slot_r_hand) - W.add_fingerprint(src) - update_inv_r_hand() - return 1 - /mob/living/carbon/human/proc/update_noise_level() is_noisy = FALSE if (lying || !shoes || !istype(shoes, /obj/item/clothing/shoes)) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 7457a736560..0856ba1f678 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -216,10 +216,12 @@ pixel_x = old_x pixel_y = old_y return - if (disabilities & STUTTERING) - speech_problem_flag = 1 - if (prob(10)) - stuttering = max(10, stuttering) + if(disabilities & STUTTERING) + var/aid = 1 + chem_effects[CE_NOSTUTTER] + if(aid < 3) //NOSTUTTER at 2 or above prevents it completely. + speech_problem_flag = 1 + if(prob(10/aid)) + stuttering = max(10/aid, stuttering) /mob/living/carbon/human/handle_mutations_and_radiation() if(InStasis()) @@ -696,10 +698,7 @@ for(var/_R in chem_doses) if ((_R in bloodstr.reagent_volumes) || (_R in ingested.reagent_volumes) || (_R in breathing.reagent_volumes) || (_R in touching.reagent_volumes)) continue - var/decl/reagent/R = decls_repository.get_decl(_R) - chem_doses[_R] -= R.metabolism - if(chem_doses[_R] <= 0) - chem_doses -= _R + chem_doses -= _R //We're no longer metabolizing this reagent. Remove it from chem_doses updatehealth() @@ -745,7 +744,7 @@ if (species.tail) animate_tail_reset() if(prob(2) && is_asystole() && isSynthetic()) - visible_message("[src] [pick("emits low pitched whirr","beeps urgently")]") + visible_message("[src] [pick("emits low pitched whirr","beeps urgently")].") if(paralysis) AdjustParalysis(-1) @@ -960,7 +959,7 @@ if(isSynthetic()) var/obj/item/organ/internal/cell/IC = internal_organs_by_name[BP_CELL] - if (istype(IC)) + if(istype(IC) && IC.is_usable()) var/chargeNum = Clamp(Ceiling(IC.percent()/25), 0, 4) //0-100 maps to 0-4, but give it a paranoid clamp just in case. cells.icon_state = "charge[chargeNum]" else @@ -1076,16 +1075,22 @@ /mob/living/carbon/human/proc/handle_shock() if(status_flags & GODMODE) return 0 + var/is_asystole = is_asystole() + if(is_asystole && isSynthetic()) + if(!lying && !buckled_to) + to_chat(src, SPAN_WARNING("You don't have enough energy to function!")) + Paralyse(3) + return if(!can_feel_pain()) return - if(is_asystole()) + if(is_asystole) shock_stage = max(shock_stage + 1, 61) var/traumatic_shock = get_shock() if(traumatic_shock >= max(30, 0.8*shock_stage)) shock_stage += 1 - else if (!is_asystole()) + else if (!is_asystole) shock_stage = min(shock_stage, 160) var/recovery = 1 if(traumatic_shock < 0.5 * shock_stage) //lower shock faster if pain is gone completely diff --git a/code/modules/mob/living/carbon/human/npcs.dm b/code/modules/mob/living/carbon/human/npcs.dm index 40f376b4e5e..798a6658440 100644 --- a/code/modules/mob/living/carbon/human/npcs.dm +++ b/code/modules/mob/living/carbon/human/npcs.dm @@ -13,7 +13,8 @@ name = "Pun Pun" real_name = name named = TRUE - w_uniform = new /obj/item/clothing/under/punpun(src) + + equip_to_slot(new /obj/item/clothing/under/punpun(src), slot_w_uniform) /obj/item/clothing/under/nupnup name = "christmas uniform" diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index 704c2386959..2277725c1a2 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -120,9 +120,6 @@ /mob/living/carbon/human/handle_speech_problems(var/message, var/verb, var/message_mode) message = handle_speech_muts(message,verb) - for(var/datum/brain_trauma/trauma in get_traumas()) - if(!trauma.suppressed) - message = trauma.on_say(message) if(silent || (sdisabilities & MUTE)) message = "" speech_problem_flag = 1 @@ -216,13 +213,6 @@ returns = species.handle_speech_sound(src, returns) return returns -/mob/living/carbon/human/hear_say(var/message, var/verb = "says", var/datum/language/language = null, var/alt_name = "",var/italics = 0, var/mob/speaker = null) - for(var/T in get_traumas()) - var/datum/brain_trauma/trauma = T - if(!trauma.suppressed) - message = trauma.on_hear(message, verb, language, alt_name, italics, speaker) - return ..() - /mob/living/carbon/human/proc/handle_speech_muts(var/message, var/verb) if(message) if(disabilities & TOURETTES) diff --git a/code/modules/mob/living/carbon/human/species/outsider/undead.dm b/code/modules/mob/living/carbon/human/species/outsider/undead.dm index 5202b7b91df..bd17b538363 100644 --- a/code/modules/mob/living/carbon/human/species/outsider/undead.dm +++ b/code/modules/mob/living/carbon/human/species/outsider/undead.dm @@ -5,10 +5,9 @@ var/master /mob/living/carbon/human/skeleton/assign_player(var/mob/user) - src.ckey = user.ckey + . = ..() if(master) to_chat(src, "You are a skeleton minion to [master], they are your master. Obey and protect your master at all costs, you have no free will.") - return src /datum/species/skeleton //SPOOKY name = SPECIES_SKELETON diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index 410df6fc645..5aaba150824 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -12,10 +12,11 @@ var/category_name // a name for this overarching species, ie 'Human', 'Skrell', 'IPC'. only used in character creation var/blurb = "A completely nondescript species." // A brief lore summary for use in the chargen screen. var/bodytype - var/age_min = 17 + var/age_min = 18 var/age_max = 85 var/economic_modifier = 0 var/list/default_genders = list(MALE, FEMALE) + var/list/selectable_pronouns = list(MALE, FEMALE, PLURAL) // Icon/appearance vars. var/icobase = 'icons/mob/human_races/human/r_human.dmi' // Normal icon set. @@ -241,10 +242,11 @@ var/default_g_style = "None" var/list/allowed_citizenships = list(CITIZENSHIP_BIESEL, CITIZENSHIP_SOL, CITIZENSHIP_COALITION, CITIZENSHIP_ELYRA, CITIZENSHIP_ERIDANI, CITIZENSHIP_DOMINIA) - var/list/allowed_religions = list(RELIGION_NONE, RELIGION_OTHER, RELIGION_CHRISTIANITY, RELIGION_ISLAM, RELIGION_JUDAISM, RELIGION_HINDU, RELIGION_BUDDHISM, RELIGION_MOROZ, RELIGION_TRINARY, RELIGION_SCARAB, RELIGION_TAOISM) + var/list/allowed_religions = list(RELIGION_NONE, RELIGION_OTHER, RELIGION_CHRISTIANITY, RELIGION_ISLAM, RELIGION_JUDAISM, RELIGION_HINDU, RELIGION_BUDDHISM, RELIGION_MOROZ, RELIGION_TRINARY, RELIGION_SCARAB, RELIGION_TAOISM, RELIGION_LUCEISM) var/default_citizenship = CITIZENSHIP_BIESEL var/list/allowed_accents = list(ACCENT_CETI, ACCENT_GIBSON, ACCENT_SOL, ACCENT_MARTIAN, ACCENT_LUNA, ACCENT_VENUS, ACCENT_VENUSJIN, ACCENT_JUPITER, ACCENT_COC, ACCENT_ELYRA, ACCENT_ERIDANI, - ACCENT_ERIDANIDREG, ACCENT_VYSOKA, ACCENT_HIMEO, ACCENT_PHONG, ACCENT_SILVERSUN, ACCENT_DOMINIA_HIGH, ACCENT_DOMINIA_VULGAR, ACCENT_KONYAN, ACCENT_EUROPA, ACCENT_EARTH, ACCENT_NCF, ACCENT_FISANDUH, ACCENT_GADPATHUR) + ACCENT_ERIDANIDREG, ACCENT_VYSOKA, ACCENT_HIMEO, ACCENT_PHONG, ACCENT_SILVERSUN_ORIGINAL, ACCENT_SILVERSUN_EXPATRIATE, ACCENT_DOMINIA_HIGH, ACCENT_DOMINIA_VULGAR, ACCENT_KONYAN, ACCENT_EUROPA, ACCENT_EARTH, ACCENT_NCF, ACCENT_FISANDUH, ACCENT_GADPATHUR, + ACCENT_PLUTO, ACCENT_ASSUNZIONE) var/default_accent = ACCENT_CETI var/zombie_type //What zombie species they become var/list/character_color_presets @@ -423,6 +425,7 @@ H.dna.SetSEState(MONKEYBLOCK,0) if(!H.client || !H.client.prefs || !H.client.prefs.gender) H.gender = pick(default_genders) + H.pronouns = H.gender /datum/species/proc/handle_death(var/mob/living/carbon/human/H, var/gibbed = 0) //Handles any species-specific death events (such as dionaea nymph spawns). return @@ -519,6 +522,10 @@ for(var/overlay in H.equipment_overlays) H.client.screen |= overlay + var/obj/item/organ/internal/eyes/night/NE = H.internal_organs_by_name[BP_EYES] + if(istype(NE) && NE.night_vision && NE.can_change_invisible()) + H.set_see_invisible(SEE_INVISIBLE_NOLIGHTING) + return 1 /datum/species/proc/get_how_nearsighted(var/mob/living/carbon/human/H) @@ -529,7 +536,9 @@ prescriptions -= H.equipment_prescription return Clamp(prescriptions, 0, 7) -/datum/species/proc/handle_sprint_cost(var/mob/living/carbon/human/H, var/cost) +// pre_move is set to TRUE when the mob checks whether it's even possible to move, so resources aren't drained until after the move completes +// once the mob moves and its loc actually changes, the pre_move is set to FALSE and all the proper resources are drained +/datum/species/proc/handle_sprint_cost(var/mob/living/carbon/human/H, var/cost, var/pre_move) if (!H.exhaust_threshold) return 1 // Handled. @@ -541,44 +550,49 @@ var/obj/item/organ/internal/augment/calf_override/C = H.internal_organs_by_name[BP_AUG_CALF_OVERRIDE] if(C && !C.is_broken()) cost = 0 - C.do_run_act() + if(!pre_move) + C.do_run_act() var/remainder = 0 if (H.stamina > cost) - H.stamina -= cost - H.hud_used.move_intent.update_move_icon(H) + if(!pre_move) + H.stamina -= cost + H.hud_used.move_intent.update_move_icon(H) return 1 else if (H.stamina > 0) remainder = cost - H.stamina - H.stamina = 0 + if(!pre_move) + H.stamina = 0 else remainder = cost - if(H.disabilities & ASTHMA) + if(!pre_move && (H.disabilities & ASTHMA)) H.adjustOxyLoss(remainder*0.15) - if(H.disabilities & COUGHING) + if(!pre_move && (H.disabilities & COUGHING)) H.adjustHalLoss(remainder*0.1) - if (breathing_organ && has_organ[breathing_organ]) + if(!pre_move && breathing_organ && has_organ[breathing_organ]) var/obj/item/organ/O = H.internal_organs_by_name[breathing_organ] if(O.is_bruised()) H.adjustOxyLoss(remainder*0.15) H.adjustHalLoss(remainder*0.25) - H.adjustHalLoss(remainder*0.25) - H.updatehealth() - if((H.get_shock() >= 10) && prob(H.get_shock() *2)) - H.flash_pain(H.get_shock()) + if(!pre_move) + H.adjustHalLoss(remainder*0.25) + H.updatehealth() + if((H.get_shock() >= 10) && prob(H.get_shock() *2)) + H.flash_pain(H.get_shock()) - if ((H.get_shock() + H.getOxyLoss()) >= (exhaust_threshold * 0.8)) + if((H.get_shock() + H.getOxyLoss()) >= (exhaust_threshold * 0.8)) H.m_intent = M_WALK H.hud_used.move_intent.update_move_icon(H) to_chat(H, SPAN_DANGER("You're too exhausted to run anymore!")) H.flash_pain(H.get_shock()) return 0 - H.hud_used.move_intent.update_move_icon(H) + if(!pre_move) + H.hud_used.move_intent.update_move_icon(H) return 1 /datum/species/proc/get_light_color(mob/living/carbon/human/H) @@ -656,6 +670,12 @@ /datum/species/proc/get_injection_modifier() return injection_mod - + /datum/species/proc/is_naturally_insulated() return FALSE + +// the records var is so that untagged shells can appear human +/datum/species/proc/get_species(var/reference, var/mob/living/carbon/human/H, var/records) + if(reference) + return src + return name \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species/species_hud.dm b/code/modules/mob/living/carbon/human/species/species_hud.dm index 8c7e4c0f191..14c8dcade2a 100644 --- a/code/modules/mob/living/carbon/human/species/species_hud.dm +++ b/code/modules/mob/living/carbon/human/species/species_hud.dm @@ -62,6 +62,7 @@ /datum/hud_data/diona has_hydration = FALSE has_internals = FALSE + has_m_intent = FALSE gear = list( "i_clothing" = list("loc" = ui_iclothing, "name" = "uniform", "slot" = slot_w_uniform, "state" = "center", "toggle" = 1), "o_clothing" = list("loc" = ui_shoes, "name" = "suit", "slot" = slot_wear_suit, "state" = "suit", "toggle" = 1), @@ -80,8 +81,12 @@ /datum/hud_data/monkey gear = list( - "mask" = list("loc" = ui_shoes, "name" = "mask", "slot" = slot_wear_mask, "state" = "mask", "toggle" = 1), - "back" = list("loc" = ui_sstore1, "name" = "back", "slot" = slot_back, "state" = "back") + "mask" = list("loc" = ui_shoes, "name" = "mask", "slot" = slot_wear_mask, "state" = "mask", "toggle" = 1), + "i_clothing" = list("loc" = ui_iclothing, "name" = "uniform", "slot" = slot_w_uniform, "state" = "center", "toggle" = 1), + "back" = list("loc" = ui_back, "name" = "back", "slot" = slot_back, "state" = "back"), + "id" = list("loc" = ui_belt, "name" = "id", "slot" = slot_wear_id, "state" = "id"), + "storage1" = list("loc" = ui_storage1, "name" = "left pocket", "slot" = slot_l_store, "state" = "pocket"), + "storage2" = list("loc" = ui_storage2, "name" = "right pocket", "slot" = slot_r_store, "state" = "pocket") ) diff --git a/code/modules/mob/living/carbon/human/species/station/diona/diona.dm b/code/modules/mob/living/carbon/human/species/station/diona/diona.dm index cd134924cb2..c442e9d52e4 100644 --- a/code/modules/mob/living/carbon/human/species/station/diona/diona.dm +++ b/code/modules/mob/living/carbon/human/species/station/diona/diona.dm @@ -8,6 +8,7 @@ age_min = 1 age_max = 1000 default_genders = list(NEUTER) + selectable_pronouns = list(NEUTER, PLURAL) economic_modifier = 3 icobase = 'icons/mob/human_races/diona/r_diona.dmi' deform = 'icons/mob/human_races/diona/r_def_plant.dmi' @@ -26,7 +27,7 @@ /mob/living/carbon/proc/sample ) //primitive_form = "Nymph" - slowdown = 7 + slowdown = 4 rarity_value = 4 hud_type = /datum/hud_data/diona siemens_coefficient = 0.3 @@ -112,9 +113,6 @@ reagent_tag = IS_DIONA - stamina = -1 // Diona sprinting uses energy instead of stamina - sprint_speed_factor = 0.5 //Speed gained is minor - sprint_cost_factor = 0.8 climb_coeff = 1.3 vision_organ = BP_HEAD @@ -128,35 +126,6 @@ alterable_internal_organs = list() -/datum/species/diona/handle_sprint_cost(var/mob/living/carbon/H, var/cost) - var/datum/dionastats/DS = H.get_dionastats() - - if (!DS) - return 0 //Something is very wrong - - var/remainder = cost * H.sprint_cost_factor - - if (H.total_radiation && !DS.regening_organ) - if (H.total_radiation > (cost*0.5))//Radiation counts as double energy - H.apply_radiation(cost*(-0.5)) - return 1 - else - remainder = cost - (H.total_radiation*2) - H.total_radiation = 0 - - if (DS.stored_energy > remainder) - DS.stored_energy -= remainder - return 1 - else - remainder -= DS.stored_energy - DS.stored_energy = 0 - H.adjustHalLoss(remainder*5, 1) - H.updatehealth() - H.m_intent = M_WALK - H.hud_used.move_intent.update_move_icon(H) - to_chat(H, SPAN_DANGER("We have expended our energy reserves, and cannot continue to move at such a pace. We must find light!")) - return 0 - /datum/species/diona/can_understand(var/mob/other) var/mob/living/carbon/alien/diona/D = other if(istype(D)) @@ -199,6 +168,17 @@ if((!D.client && !D.mind) || D.stat == DEAD) qdel(D) +/datum/species/diona/after_equip(mob/living/carbon/human/H, visualsOnly, datum/job/J) + . = ..() + var/obj/item/storage/box/survival/SB = locate() in H + if(!SB) + for(var/obj/item/storage/S in H) + SB = locate() in S + if(SB) + break + if(SB) + SB.handle_item_insertion(new /obj/item/device/flashlight/survival(get_turf(H)), TRUE) + /datum/species/diona/has_psi_potential() return FALSE diff --git a/code/modules/mob/living/carbon/human/species/station/human/human_subspecies.dm b/code/modules/mob/living/carbon/human/species/station/human/human_subspecies.dm index 74617486bcd..5210582378b 100644 --- a/code/modules/mob/living/carbon/human/species/station/human/human_subspecies.dm +++ b/code/modules/mob/living/carbon/human/species/station/human/human_subspecies.dm @@ -21,7 +21,7 @@ hazard_low_pressure = 10 examine_color = "#C2AE95" - allowed_accents = list(ACCENT_SCARAB, ACCENT_CETI, ACCENT_GIBSON, ACCENT_SOL, ACCENT_MARTIAN, ACCENT_JUPITER, ACCENT_COC, ACCENT_ELYRA, ACCENT_ERIDANI, ACCENT_HIMEO, ACCENT_ERIDANIDREG, ACCENT_DOMINIA_HIGH, ACCENT_DOMINIA_VULGAR, ACCENT_NCF) + allowed_accents = list(ACCENT_SCARAB, ACCENT_CETI, ACCENT_GIBSON, ACCENT_SOL, ACCENT_MARTIAN, ACCENT_JUPITER, ACCENT_COC, ACCENT_ELYRA, ACCENT_ERIDANI, ACCENT_HIMEO, ACCENT_ERIDANIDREG, ACCENT_DOMINIA_HIGH, ACCENT_DOMINIA_VULGAR, ACCENT_NCF, ACCENT_ASSUNZIONE) /datum/species/human/offworlder/equip_later_gear(var/mob/living/carbon/human/H) if(istype(H.get_equipped_item(slot_back), /obj/item/storage/backpack) && H.equip_to_slot_or_del(new /obj/item/storage/pill_bottle/rmt(H.back), slot_in_backpack)) diff --git a/code/modules/mob/living/carbon/human/species/station/ipc/ipc.dm b/code/modules/mob/living/carbon/human/species/station/ipc/ipc.dm index b925db62cd9..63472e8029b 100644 --- a/code/modules/mob/living/carbon/human/species/station/ipc/ipc.dm +++ b/code/modules/mob/living/carbon/human/species/station/ipc/ipc.dm @@ -8,6 +8,7 @@ age_max = 60 economic_modifier = 3 default_genders = list(NEUTER) + selectable_pronouns = list(NEUTER, PLURAL) blurb = "IPCs are, quite simply, \"Integrated Positronic Chassis.\" In this scenario, 'positronic' implies that the chassis possesses a positronic processing core (or positronic brain), meaning that an IPC must be positronic to be considered an IPC. The Baseline model is more of a category - the long of the short is that they represent all unbound synthetic units. Baseline models cover anything that is not an Industrial chassis or a Shell chassis. They can be custom made or assembly made. The most common feature of the Baseline model is a simple design, skeletal or semi-humanoid, and ordinary atmospheric diffusion cooling systems." @@ -118,7 +119,7 @@ bodyfall_sound = /decl/sound_category/bodyfall_machine_sound allowed_accents = list(ACCENT_CETI, ACCENT_GIBSON, ACCENT_SOL, ACCENT_COC, ACCENT_ERIDANI, ACCENT_ERIDANIDREG, ACCENT_ELYRA, ACCENT_KONYAN, ACCENT_JUPITER, ACCENT_MARTIAN, ACCENT_LUNA, - ACCENT_HIMEO, ACCENT_VENUS, ACCENT_VENUSJIN, ACCENT_PHONG, ACCENT_TTS, ACCENT_EUROPA, ACCENT_EARTH) + ACCENT_HIMEO, ACCENT_VENUS, ACCENT_VENUSJIN, ACCENT_PHONG, ACCENT_SILVERSUN_EXPATRIATE, ACCENT_TTS, ACCENT_EUROPA, ACCENT_EARTH, ACCENT_PLUTO, ACCENT_ASSUNZIONE) alterable_internal_organs = list() @@ -130,8 +131,8 @@ . = ..() check_tag(H, H.client) -/datum/species/machine/handle_sprint_cost(var/mob/living/carbon/human/H, var/cost) - if (H.stat == CONSCIOUS) +/datum/species/machine/handle_sprint_cost(var/mob/living/carbon/human/H, var/cost, var/pre_move) + if(!pre_move && H.stat == CONSCIOUS) H.bodytemperature += cost * sprint_temperature_factor return TRUE @@ -289,6 +290,45 @@ if ("waiting IPC screen") return "#FFFFFF" + if ("nanotrasen IPC screen") + return LIGHT_COLOR_BLUE + + if ("hephaestus IPC screen") + return LIGHT_COLOR_ORANGE + + if ("idris IPC screen") + return LIGHT_COLOR_CYAN + + if ("zavodskoi IPC screen") + return LIGHT_COLOR_RED + + if ("zeng-hu IPC screen") + return "#FFFFFF" + + if ("scc IPC screen") + return LIGHT_COLOR_BLUE + + if ("republic of biesel IPC screen") + return "#FFFFFF" + + if ("sol alliance IPC screen") + return "#FFFFFF" + + if ("coalition of colonies IPC screen") + return LIGHT_COLOR_BLUE + + if ("republic of elyra IPC screen") + return LIGHT_COLOR_YELLOW + + if ("eridani IPC screen") + return "#FFFFFF" + + if ("burzsia IPC screen") + return LIGHT_COLOR_ORANGE + + if ("trinary perfection IPC screen") + return LIGHT_COLOR_RED + /datum/species/machine/before_equip(var/mob/living/carbon/human/H) . = ..() check_tag(H, H.client) diff --git a/code/modules/mob/living/carbon/human/species/station/ipc/ipc_subspecies.dm b/code/modules/mob/living/carbon/human/species/station/ipc/ipc_subspecies.dm index eb15c7427d3..00741c17844 100644 --- a/code/modules/mob/living/carbon/human/species/station/ipc/ipc_subspecies.dm +++ b/code/modules/mob/living/carbon/human/species/station/ipc/ipc_subspecies.dm @@ -5,6 +5,7 @@ name_plural = "Shells" bodytype = BODYTYPE_HUMAN default_genders = list(MALE, FEMALE) + selectable_pronouns = list(MALE, FEMALE, PLURAL, NEUTER) burn_mod = 1.2 grab_mod = 1 @@ -75,7 +76,15 @@ bodyfall_sound = /decl/sound_category/bodyfall_sound allowed_accents = list(ACCENT_CETI, ACCENT_GIBSON, ACCENT_SOL, ACCENT_COC, ACCENT_ERIDANI, ACCENT_ERIDANIDREG, ACCENT_ELYRA, ACCENT_KONYAN, ACCENT_JUPITER, ACCENT_MARTIAN, ACCENT_LUNA, - ACCENT_HIMEO, ACCENT_VENUS, ACCENT_VENUSJIN, ACCENT_PHONG, ACCENT_SILVERSUN, ACCENT_TTS, ACCENT_EUROPA, ACCENT_EARTH) + ACCENT_HIMEO, ACCENT_VENUS, ACCENT_VENUSJIN, ACCENT_PHONG, ACCENT_SILVERSUN_ORIGINAL, ACCENT_SILVERSUN_EXPATRIATE, ACCENT_TTS, ACCENT_EUROPA, ACCENT_EARTH, ACCENT_PLUTO, ACCENT_ASSUNZIONE) + +/datum/species/machine/shell/get_species(var/reference, var/mob/living/carbon/human/H, var/records) + if(reference) + return src + // it's illegal for shells in Tau Ceti space to not have tags, so their records would have to be falsified + if(records && !H.internal_organs_by_name[BP_IPCTAG]) + return "Human" + return name /datum/species/machine/shell/get_light_color() return @@ -131,6 +140,9 @@ slowdown = 4 + allowed_accents = list(ACCENT_CETI, ACCENT_GIBSON, ACCENT_SOL, ACCENT_COC, ACCENT_ERIDANI, ACCENT_ERIDANIDREG, ACCENT_ELYRA, ACCENT_KONYAN, ACCENT_JUPITER, ACCENT_MARTIAN, ACCENT_LUNA, + ACCENT_HIMEO, ACCENT_VENUS, ACCENT_VENUSJIN, ACCENT_PHONG, ACCENT_SILVERSUN_EXPATRIATE, ACCENT_TTS, ACCENT_EUROPA, ACCENT_EARTH, ACCENT_ASSUNZIONE) + blurb = "The first commercialized attempt Hephaestus Industries made at an industrial-type IPC. Designed for extra durability and increased weight loads, the first generation Industrial was considered a success, though it possessed some issues. A limited power cell and actuators designed for heavy lifting and not locomotion resulted in a slow and frequently charging machine. A special addition to the chassis makes up for these drawbacks - the ability to simply slot a suit cooling unit onto the model's back and make use of its built-in heat transferal conduits, allowing the Industrial to perform EVA without any extra peripherals such as a voidsuit." icobase = 'icons/mob/human_races/ipc/r_industrial.dmi' @@ -320,6 +332,9 @@ examine_color = "#688359" + allowed_accents = list(ACCENT_CETI, ACCENT_GIBSON, ACCENT_SOL, ACCENT_COC, ACCENT_ERIDANI, ACCENT_ERIDANIDREG, ACCENT_ELYRA, ACCENT_KONYAN, ACCENT_JUPITER, ACCENT_MARTIAN, ACCENT_LUNA, + ACCENT_HIMEO, ACCENT_VENUS, ACCENT_VENUSJIN, ACCENT_PHONG, ACCENT_SILVERSUN_EXPATRIATE, ACCENT_TTS, ACCENT_EUROPA, ACCENT_EARTH, ACCENT_ASSUNZIONE) + blurb = "An extremely durable and heavy Industrial model branded by Hephaestus Industries. It is their improved Industrial model, with thicker plating and improved power cell. Its actuators struggle to carry the immense weight, however, making the unit quite slow. This chassis would be seen in roles where it would be dangerous or inefficient to use a less durable unit, such as engineering, security, and mining. While this unit still possesses built-in cooling conduits, the increased plating and thickness of said plating proved a difficult challenge for the engineers to develop good cooling, so the unit suffers somewhat from increased heat loads. Overtaxing its hardware will quickly lead to overheating." has_limbs = list( @@ -336,6 +351,7 @@ BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right/ipc/industrial/hephaestus) ) + /datum/species/machine/industrial/hephaestus/get_light_color(mob/living/carbon/human/H) if (istype(H)) return rgb(H.r_eyes, H.g_eyes, H.b_eyes) @@ -369,6 +385,9 @@ examine_color = "#bc4b00" + allowed_accents = list(ACCENT_CETI, ACCENT_GIBSON, ACCENT_SOL, ACCENT_COC, ACCENT_ERIDANI, ACCENT_ERIDANIDREG, ACCENT_ELYRA, ACCENT_KONYAN, ACCENT_JUPITER, ACCENT_MARTIAN, ACCENT_LUNA, + ACCENT_HIMEO, ACCENT_VENUS, ACCENT_VENUSJIN, ACCENT_PHONG, ACCENT_SILVERSUN_EXPATRIATE, ACCENT_TTS, ACCENT_EUROPA, ACCENT_EARTH, ACCENT_ASSUNZIONE) + blurb = "The Xion Manufacturing Group, being a subsidiary of Hephaestus Industries, saw the original Industrial models and wanted to develop their own chassis based off of the original design. The result is the Xion Industrial model. Sturdy and strong, this chassis is quite powerful and equally durable, with an ample power cell and improved actuators for carrying the increased weight of the body. The Xion model also retains sturdiness without covering the chassis in plating, allowing for the cooling systems to vent heat much easier than the Hephaestus-brand model. This unit can perform EVA without assistance." has_limbs = list( @@ -418,6 +437,9 @@ grab_mod = 1.1 // Smooth, fast resist_mod = 4 // Not super strong, but still rather strong + allowed_accents = list(ACCENT_CETI, ACCENT_GIBSON, ACCENT_SOL, ACCENT_COC, ACCENT_ERIDANI, ACCENT_ERIDANIDREG, ACCENT_ELYRA, ACCENT_KONYAN, ACCENT_JUPITER, ACCENT_MARTIAN, ACCENT_LUNA, + ACCENT_HIMEO, ACCENT_VENUS, ACCENT_VENUSJIN, ACCENT_PHONG, ACCENT_SILVERSUN_EXPATRIATE, ACCENT_TTS, ACCENT_EUROPA, ACCENT_EARTH, ACCENT_ASSUNZIONE) + slowdown = -1.2 appearance_flags = HAS_EYE_COLOR | HAS_UNDERWEAR | HAS_SOCKS @@ -496,7 +518,7 @@ allowed_accents = list(ACCENT_CETI, ACCENT_GIBSON, ACCENT_SOL, ACCENT_COC, ACCENT_ERIDANI, ACCENT_ERIDANIDREG, ACCENT_ELYRA, ACCENT_KONYAN, ACCENT_JUPITER, ACCENT_MARTIAN, ACCENT_LUNA, - ACCENT_HIMEO, ACCENT_VENUS, ACCENT_VENUSJIN, ACCENT_PHONG, ACCENT_SILVERSUN, ACCENT_TTS, ACCENT_EUROPA, ACCENT_EARTH) + ACCENT_HIMEO, ACCENT_VENUS, ACCENT_VENUSJIN, ACCENT_PHONG, ACCENT_SILVERSUN_EXPATRIATE, ACCENT_TTS, ACCENT_EUROPA, ACCENT_EARTH, ACCENT_ASSUNZIONE) /datum/species/machine/bishop/get_light_color(mob/living/carbon/human/H) if (istype(H)) diff --git a/code/modules/mob/living/carbon/human/species/station/monkey.dm b/code/modules/mob/living/carbon/human/species/station/monkey.dm index e268f1c9a8d..928b390e8a6 100644 --- a/code/modules/mob/living/carbon/human/species/station/monkey.dm +++ b/code/modules/mob/living/carbon/human/species/station/monkey.dm @@ -9,13 +9,15 @@ damage_overlays = 'icons/mob/human_races/masks/dam_monkey.dmi' damage_mask = 'icons/mob/human_races/masks/dam_mask_monkey.dmi' blood_mask = 'icons/mob/human_races/masks/blood_monkey.dmi' - language = null + language = LANGUAGE_CHIMPANZEE default_language = LANGUAGE_CHIMPANZEE + secondary_langs = list(LANGUAGE_CHIMPANZEE) greater_form = SPECIES_HUMAN mob_size = MOB_SMALL - has_fine_manipulation = 0 show_ssd = null + bodytype = BODYTYPE_MONKEY + eyes = "blank_eyes" gibbed_anim = "gibbed-m" diff --git a/code/modules/mob/living/carbon/human/species/station/skrell/skrell.dm b/code/modules/mob/living/carbon/human/species/station/skrell/skrell.dm index d0612bd3833..15ef62c2bd5 100644 --- a/code/modules/mob/living/carbon/human/species/station/skrell/skrell.dm +++ b/code/modules/mob/living/carbon/human/species/station/skrell/skrell.dm @@ -4,6 +4,7 @@ name_plural = "Skrell" category_name = "Skrell" bodytype = BODYTYPE_SKRELL + age_min = 30 age_max = 500 default_genders = list(PLURAL) economic_modifier = 12 @@ -78,7 +79,7 @@ default_accent = ACCENT_SKRELL allowed_accents = list(ACCENT_SKRELL, ACCENT_CETI, ACCENT_GIBSON, ACCENT_COC, ACCENT_ERIDANI, ACCENT_ERIDANIDREG, ACCENT_VENUS, ACCENT_JUPITER, ACCENT_MARTIAN, ACCENT_ELYRA, - ACCENT_SILVERSUN, ACCENT_KONYAN, ACCENT_EUROPA) + ACCENT_SILVERSUN_EXPATRIATE, ACCENT_KONYAN, ACCENT_EUROPA) zombie_type = SPECIES_ZOMBIE_SKRELL bodyfall_sound = /decl/sound_category/bodyfall_skrell_sound diff --git a/code/modules/mob/living/carbon/human/species/station/tajara/tajara.dm b/code/modules/mob/living/carbon/human/species/station/tajara/tajara.dm index 2fec36fde61..8cb497293ee 100644 --- a/code/modules/mob/living/carbon/human/species/station/tajara/tajara.dm +++ b/code/modules/mob/living/carbon/human/species/station/tajara/tajara.dm @@ -24,12 +24,15 @@ grab_mod = 1.25 // Fur easy to cling onto + age_max = 80 + num_alternate_languages = 2 secondary_langs = list(LANGUAGE_SIIK_MAAS, LANGUAGE_SIIK_TAJR, LANGUAGE_YA_SSA) name_language = LANGUAGE_SIIK_MAAS ethanol_resistance = 0.8//Gets drunk a little faster rarity_value = 2 economic_modifier = 7 + selectable_pronouns = null stamina = 90 // Tajara evolved to maintain a steady pace in the snow, sprinting wastes energy stamina_recovery = 4 diff --git a/code/modules/mob/living/carbon/human/species/station/vaurca/vaurca.dm b/code/modules/mob/living/carbon/human/species/station/vaurca/vaurca.dm index f28d3ac6d37..bf05310ee30 100644 --- a/code/modules/mob/living/carbon/human/species/station/vaurca/vaurca.dm +++ b/code/modules/mob/living/carbon/human/species/station/vaurca/vaurca.dm @@ -7,6 +7,7 @@ age_min = 1 age_max = 20 default_genders = list(NEUTER) + selectable_pronouns = null economic_modifier = 2 language = LANGUAGE_VAURCA primitive_form = SPECIES_MONKEY_VAURCA diff --git a/code/modules/mob/living/carbon/human/stripping.dm b/code/modules/mob/living/carbon/human/stripping.dm index 57830a9252d..c703057088e 100644 --- a/code/modules/mob/living/carbon/human/stripping.dm +++ b/code/modules/mob/living/carbon/human/stripping.dm @@ -95,7 +95,7 @@ qdel(OE) unEquip(target_slot) else if(user.unEquip(held)) - equip_to_slot_if_possible(held, text2num(slot_to_strip), 0, 1, 1) + equip_to_slot_if_possible(held, text2num(slot_to_strip), FALSE, TRUE, TRUE, FALSE, TRUE) if(held.loc != src) user.put_in_hands(held) return 1 diff --git a/code/modules/mob/living/carbon/human/unarmed_attack.dm b/code/modules/mob/living/carbon/human/unarmed_attack.dm index e3909b694a0..4b6072a52ab 100644 --- a/code/modules/mob/living/carbon/human/unarmed_attack.dm +++ b/code/modules/mob/living/carbon/human/unarmed_attack.dm @@ -9,7 +9,7 @@ var/global/list/sparring_attack_cache = list() var/miss_sound = /decl/sound_category/punchmiss_sound var/shredding = 0 // Calls the old attack_alien() behavior on objects/mobs when on harm intent. var/sharp = 0 - var/edge = 0 + var/edge = FALSE var/damage_type = BRUTE var/sparring_variant_type = /datum/unarmed_attack/light_strike @@ -106,7 +106,11 @@ var/global/list/sparring_attack_cache = list() if(!affecting) return - user.visible_message("[user] [pick(attack_verb)] [target] in the [affecting.name]!") + user.visible_message(SPAN_WARNING("[user] [pick(attack_verb)] [target] in the [affecting.name]!")) + playsound(user.loc, attack_sound, 25, 1, -1) + +/datum/unarmed_attack/proc/show_attack_simple(var/mob/living/carbon/human/user, var/mob/living/target, var/zone) + user.visible_message(SPAN_WARNING("[user] [pick(attack_verb)] [target] in the [zone]!")) playsound(user.loc, attack_sound, 25, 1, -1) /datum/unarmed_attack/proc/handle_eye_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target) @@ -129,7 +133,7 @@ var/global/list/sparring_attack_cache = list() shredding = 0 damage = 0 sharp = 0 - edge = 0 + edge = FALSE attack_name = "bite" /datum/unarmed_attack/bite/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone) @@ -294,5 +298,5 @@ var/global/list/sparring_attack_cache = list() shredding = 0 damage = 0 sharp = 0 - edge = 0 + edge = FALSE attack_name = "light hit" diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 14f00dd3bd8..cb51f7efc61 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -89,13 +89,13 @@ There are several things that need to be remembered: #define DAMAGE_LAYER 2 #define SURGERY_LAYER 3 #define UNDERWEAR_LAYER 4 -#define SHOES_LAYER_ALT 5 -#define UNIFORM_LAYER 6 -#define ID_LAYER 7 -#define SHOES_LAYER 8 -#define GLOVES_LAYER 9 -#define BELT_LAYER 10 -#define TAIL_SOUTH_LAYER 11 +#define TAIL_SOUTH_LAYER 5 +#define SHOES_LAYER_ALT 6 +#define UNIFORM_LAYER 7 +#define ID_LAYER 8 +#define SHOES_LAYER 9 +#define GLOVES_LAYER 10 +#define BELT_LAYER 11 #define SUIT_LAYER 12 #define ID_LAYER_ALT 13 #define TAIL_NORTH_LAYER 14 @@ -248,10 +248,10 @@ There are several things that need to be remembered: //Overlays for the worn overlay so you can overlay while you overlay //eg: ammo counters, primed grenade flashing, etc. //"icon_file" is used automatically for inhands etc. to make sure it gets the correct inhand file -/obj/item/proc/worn_overlays(icon_file) +/obj/item/proc/worn_overlays(icon_file, var/contained_flag = "") . = list() if(build_from_parts) - var/mutable_appearance/M = mutable_appearance(icon_file, "[item_state]_[worn_overlay]") + var/mutable_appearance/M = mutable_appearance(icon_file, "[item_state][contained_flag]_[worn_overlay]") M.appearance_flags = RESET_COLOR|RESET_ALPHA . += M @@ -535,8 +535,6 @@ There are several things that need to be remembered: overlays_raw[UNIFORM_LAYER] = null if(check_draw_underclothing()) - w_uniform.screen_loc = ui_iclothing - //determine the icon to use var/icon/under_icon var/under_state = "" @@ -604,7 +602,6 @@ There are several things that need to be remembered: overlays_raw[ID_LAYER_ALT] = null if(wear_id) var/image/result_layer - wear_id.screen_loc = ui_id //TODO if(w_uniform) if(!w_uniform:displays_id) return @@ -678,7 +675,6 @@ There are several things that need to be remembered: bloodsies.color = gloves.blood_color result_layer = list(result_layer, bloodsies) - gloves.screen_loc = ui_gloves overlays_raw[GLOVES_LAYER] = result_layer else if(blood_DNA) var/image/bloodsies = image(species.blood_mask, "bloodyhands") @@ -726,8 +722,6 @@ There are several things that need to be remembered: if(check_draw_ears()) if(l_ear) - l_ear.screen_loc = ui_l_ear - var/image/result_layer = null //Determine the icon to use @@ -752,7 +746,7 @@ There are several things that need to be remembered: if(l_ear.color) result_layer.color = l_ear.color - var/image/worn_overlays = l_ear.worn_overlays(t_icon) + var/image/worn_overlays = l_ear.worn_overlays(t_icon, l_ear.contained_sprite ? WORN_LEAR : null) if(worn_overlays) result_layer.overlays.Add(worn_overlays) @@ -771,8 +765,6 @@ There are several things that need to be remembered: if(check_draw_ears()) if(r_ear) - r_ear.screen_loc = ui_r_ear - var/image/result_layer = null //Determine the icon to use @@ -797,7 +789,7 @@ There are several things that need to be remembered: if(r_ear.color) result_layer.color = r_ear.color - var/image/worn_overlays = r_ear.worn_overlays(t_icon) + var/image/worn_overlays = r_ear.worn_overlays(t_icon, r_ear.contained_sprite ? WORN_REAR : null) if(worn_overlays) result_layer.overlays.Add(worn_overlays) @@ -814,11 +806,8 @@ There are several things that need to be remembered: if (QDELING(src)) return + var/image/result_layer = null if(check_draw_shoes()) - shoes.screen_loc = ui_shoes - - var/image/result_layer = null - //Determine the icon to use var/t_icon = INV_SHOES_DEF_ICON if(shoes.contained_sprite) @@ -841,20 +830,19 @@ There are several things that need to be remembered: if(shoes.color) result_layer.color = shoes.color - var/image/worn_overlays = shoes.worn_overlays(t_icon) + var/image/worn_overlays = shoes.worn_overlays(t_icon, shoes.contained_sprite ? WORN_SHOES : null) if(worn_overlays) result_layer.overlays.Add(worn_overlays) - if(result_layer) - result_layer.appearance_flags = RESET_ALPHA - var/list/ovr - + result_layer.appearance_flags = RESET_ALPHA if(shoes.blood_DNA) - var/obj/item/clothing/shoes/S = shoes - var/image/bloodsies = image(species.blood_mask, "[S.blood_overlay_type]blood") - bloodsies.color = shoes.blood_color - bloodsies.appearance_flags = RESET_ALPHA - ovr = list(result_layer, bloodsies) + for(var/limb_tag in list(BP_L_FOOT, BP_R_FOOT)) + var/obj/item/organ/external/E = get_organ(limb_tag) + if(E && !E.is_stump()) + var/image/bloodsies = image(species.blood_mask, "shoeblood_[E.limb_name]") + bloodsies.color = shoes.blood_color + bloodsies.appearance_flags = RESET_ALPHA + result_layer.overlays.Add(bloodsies) //Shoe layer stuff from Polaris v1.0333a var/shoe_layer = SHOES_LAYER @@ -863,7 +851,7 @@ There are several things that need to be remembered: if(S.shoes_under_pants == TRUE) shoe_layer = SHOES_LAYER_ALT - overlays_raw[shoe_layer] = ovr || result_layer + overlays_raw[shoe_layer] = result_layer else if(footprint_color) // Handles bloody feet. for(var/limb_tag in list(BP_L_FOOT, BP_R_FOOT)) @@ -872,7 +860,11 @@ There are several things that need to be remembered: var/image/bloodsies = image(species.blood_mask, "shoeblood_[E.limb_name]") bloodsies.color = footprint_color bloodsies.appearance_flags = RESET_ALPHA - overlays_raw[SHOES_LAYER] = bloodsies + if(!result_layer) + result_layer = bloodsies + else + result_layer.overlays.Add(bloodsies) + overlays_raw[SHOES_LAYER] = result_layer else overlays_raw[SHOES_LAYER] = null overlays_raw[SHOES_LAYER_ALT] = null @@ -891,13 +883,11 @@ There are several things that need to be remembered: var/image/s_store_image = image(s_store.icon_override || s_store.icon, state) s_store_image.appearance_flags = RESET_ALPHA overlays_raw[SUIT_STORE_LAYER] = s_store_image - s_store.screen_loc = ui_sstore1 else //s_store.auto_adapt_species(src) var/image/s_store_image = image('icons/mob/belt_mirror.dmi', s_store.item_state || s_store.icon_state) s_store_image.appearance_flags = RESET_ALPHA overlays_raw[SUIT_STORE_LAYER] = s_store_image - s_store.screen_loc = ui_sstore1 //TODO else overlays_raw[SUIT_STORE_LAYER] = null if(update_icons) @@ -909,7 +899,6 @@ There are several things that need to be remembered: overlays_raw[HEAD_LAYER] = null if(head) - head.screen_loc = ui_head //TODO var/image/standing = null //Determine the icon to use var/t_icon = INV_HEAD_DEF_ICON @@ -934,7 +923,7 @@ There are several things that need to be remembered: standing.color = head.color standing.appearance_flags = RESET_ALPHA - var/image/worn_overlays = head.worn_overlays(t_icon) + var/image/worn_overlays = head.worn_overlays(t_icon, head.contained_sprite ? WORN_HEAD : null) if(worn_overlays) standing.overlays.Add(worn_overlays) @@ -968,8 +957,6 @@ There are several things that need to be remembered: return if(belt) - belt.screen_loc = ui_belt - var/image/result_layer = null //Determine the icon to use @@ -992,7 +979,7 @@ There are several things that need to be remembered: result_layer.color = belt.color result_layer.appearance_flags = RESET_ALPHA - var/image/worn_overlays = belt.worn_overlays(t_icon) + var/image/worn_overlays = belt.worn_overlays(t_icon, belt.contained_sprite ? WORN_BELT : null) if(worn_overlays) result_layer.add_overlay(worn_overlays) @@ -1033,8 +1020,6 @@ There are several things that need to be remembered: return if(wear_suit) - wear_suit.screen_loc = ui_oclothing - var/image/result_layer = null //Determine the icon to use @@ -1060,7 +1045,7 @@ There are several things that need to be remembered: result_layer.color = wear_suit.color result_layer.appearance_flags = RESET_ALPHA - var/image/worn_overlays = wear_suit.worn_overlays(t_icon) + var/image/worn_overlays = wear_suit.worn_overlays(t_icon, wear_suit.contained_sprite ? WORN_SUIT : null) if(worn_overlays) result_layer.overlays.Add(worn_overlays) @@ -1100,11 +1085,6 @@ There are several things that need to be remembered: if (QDELING(src)) return - if(l_store) - l_store.screen_loc = ui_storage1 //TODO - if(r_store) - r_store.screen_loc = ui_storage2 //TODO - if(update_icons) update_icon() @@ -1115,7 +1095,6 @@ There are several things that need to be remembered: overlays_raw[FACEMASK_LAYER] = null if(check_draw_mask()) - wear_mask.screen_loc = ui_mask //TODO var/image/standing if(wear_mask.contained_sprite) @@ -1159,8 +1138,6 @@ There are several things that need to be remembered: overlays_raw[BACK_LAYER] = null if(back) - back.screen_loc = ui_back //TODO - //determine the icon to use var/icon/overlay_icon var/overlay_state = "" @@ -1277,8 +1254,6 @@ There are several things that need to be remembered: overlays_raw[L_HAND_LAYER] = null if(l_hand) - l_hand.screen_loc = ui_lhand //TODO - //determine icon state to use var/t_state = l_hand.item_state || l_hand.icon_state @@ -1313,7 +1288,7 @@ There are several things that need to be remembered: if(l_hand.color) result_layer.color = l_hand.color - var/image/worn_overlays = l_hand.worn_overlays(t_icon) + var/image/worn_overlays = l_hand.worn_overlays(t_icon, l_hand.contained_sprite ? WORN_LHAND : null) if(worn_overlays) result_layer.overlays.Add(worn_overlays) @@ -1329,8 +1304,6 @@ There are several things that need to be remembered: overlays_raw[R_HAND_LAYER] = null if(r_hand) - r_hand.screen_loc = ui_rhand //TODO - //determine icon state to use var/t_state = r_hand.item_state || r_hand.icon_state @@ -1365,7 +1338,7 @@ There are several things that need to be remembered: if(r_hand.color) result_layer.color = r_hand.color - var/image/worn_overlays = r_hand.worn_overlays(t_icon) + var/image/worn_overlays = r_hand.worn_overlays(t_icon, r_hand.contained_sprite ? WORN_RHAND : null) if(worn_overlays) result_layer.overlays.Add(worn_overlays) @@ -1381,8 +1354,6 @@ There are several things that need to be remembered: overlays_raw[WRISTS_LAYER] = null if(check_draw_wrists()) - wrists.screen_loc = ui_lhand //TODO - //determine icon state to use var/t_state = wrists.item_state || wrists.icon_state @@ -1417,7 +1388,7 @@ There are several things that need to be remembered: if(wrists.color) result_layer.color = wrists.color - var/image/worn_overlays = wrists.worn_overlays(t_icon) + var/image/worn_overlays = wrists.worn_overlays(t_icon, wrists.contained_sprite ? WORN_WRISTS : null) if(worn_overlays) result_layer.overlays.Add(worn_overlays) diff --git a/code/modules/mob/living/carbon/slime/slime.dm b/code/modules/mob/living/carbon/slime/slime.dm index 40e7b609329..0a68226782b 100644 --- a/code/modules/mob/living/carbon/slime/slime.dm +++ b/code/modules/mob/living/carbon/slime/slime.dm @@ -78,7 +78,7 @@ verbs += /mob/living/proc/ventcrawl add_language(LANGUAGE_TCB) - set_default_language(LANGUAGE_TCB) + set_default_language(all_languages[LANGUAGE_TCB]) src.colour = colour number = rand(1, 1000) diff --git a/code/modules/mob/living/carbon/taste.dm b/code/modules/mob/living/carbon/taste.dm index ddf1e92f8e9..3b057dccd92 100644 --- a/code/modules/mob/living/carbon/taste.dm +++ b/code/modules/mob/living/carbon/taste.dm @@ -14,9 +14,11 @@ catalogue the 'taste strength' of each one calculate text size per text. */ -/datum/reagents/proc/generate_taste_message(mob/living/carbon/taster = null) +/datum/reagents/proc/generate_taste_message(mob/living/carbon/taster = null, var/force_taste_sensitivity) var/minimum_percent = 15 - if(ishuman(taster)) + if(force_taste_sensitivity) + minimum_percent = round(15 / force_taste_sensitivity) + else if(ishuman(taster)) var/mob/living/carbon/human/H = taster var/total_taste_sensitivity diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm index 260e80f4038..f6eeb59ba11 100644 --- a/code/modules/mob/living/damage_procs.dm +++ b/code/modules/mob/living/damage_procs.dm @@ -89,4 +89,4 @@ /mob/living/proc/apply_radiation(var/rads) total_radiation += rads if (total_radiation < 0) - total_radiation = 0 \ No newline at end of file + total_radiation = 0 diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index b49d0cf9e9b..4a9d225341a 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -161,26 +161,32 @@ setEarDamage(-1, max(ear_deaf, 1)) /mob/living/proc/update_sight() + set_sight(0) + set_see_in_dark(0) if(stat == DEAD || eyeobj) update_dead_sight() else - sight &= ~(SEE_TURFS|SEE_MOBS|SEE_OBJS) - if (is_ventcrawling) - sight |= SEE_TURFS|BLIND + update_living_sight() - if (!stop_sight_update) //If true, it won't reset the mob vision flags to the initial ones - see_in_dark = initial(see_in_dark) - see_invisible = initial(see_invisible) - var/list/vision = get_accumulated_vision_handlers() - sight|= vision[1] - see_invisible = (max(vision[2], see_invisible)) + var/list/vision = get_accumulated_vision_handlers() + set_sight(sight | vision[1]) + set_see_invisible(max(vision[2], see_invisible)) + +/mob/living/proc/update_living_sight() + var/set_sight_flags = is_ventcrawling ? (SEE_TURFS) : sight & ~(SEE_TURFS|SEE_MOBS|SEE_OBJS) + if((stat & UNCONSCIOUS) || is_ventcrawling) + set_sight_flags |= BLIND + else + set_sight_flags &= ~BLIND + + set_sight(set_sight_flags) + set_see_in_dark(initial(see_in_dark)) + set_see_invisible(initial(see_invisible)) /mob/living/proc/update_dead_sight() - sight |= SEE_TURFS - sight |= SEE_MOBS - sight |= SEE_OBJS - see_in_dark = 8 - see_invisible = SEE_INVISIBLE_LEVEL_TWO + set_sight(sight|SEE_TURFS|SEE_MOBS|SEE_OBJS) + set_see_in_dark(8) + set_see_invisible(SEE_INVISIBLE_LEVEL_TWO) /mob/living/proc/handle_hud_icons() handle_hud_icons_health() diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index bd056bd74f8..9e96a1afac7 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -671,7 +671,7 @@ default behaviour is: stop_pulling() . = ..() - if (s_active && !( s_active in contents ) && get_turf(s_active) != get_turf(src)) //check !( s_active in contents ) first so we hopefully don't have to call get_turf() so much. + if (s_active && !s_active.Adjacent(src)) //check !( s_active in contents ) first so we hopefully don't have to call get_turf() so much. s_active.close(src) if(update_slimes) diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 0db22628f19..b349ec0dcc4 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -161,6 +161,13 @@ proc/get_radio_key_from_channel(var/channel) return "asks" return verb +/mob/living/proc/get_font_size_modifier() + if(ismech(loc)) + var/mob/living/heavy_vehicle/HV = loc + if(HV.loudening) + return FONT_SIZE_LARGE + return null + /mob/living/say(var/message, var/datum/language/speaking = null, var/verb="says", var/alt_name="", var/ghost_hearing = GHOSTS_ALL_HEAR) if(stat) if(stat == DEAD) @@ -276,11 +283,10 @@ proc/get_radio_key_from_channel(var/channel) get_mobs_and_objs_in_view_fast(T, message_range, listening, listening_obj, ghost_hearing) - var/list/hear_clients = list() for(var/m in listening) var/mob/M = m - var/heard_say = M.hear_say(message, verb, speaking, alt_name, italics, src, speech_sound, sound_vol) + var/heard_say = M.hear_say(message, verb, speaking, alt_name, italics, src, speech_sound, sound_vol, get_font_size_modifier()) if(heard_say && M.client) hear_clients += M.client diff --git a/code/modules/mob/living/silicon/robot/inventory.dm b/code/modules/mob/living/silicon/robot/inventory.dm index dcd5b1f666a..6b1cb6cfbbe 100644 --- a/code/modules/mob/living/silicon/robot/inventory.dm +++ b/code/modules/mob/living/silicon/robot/inventory.dm @@ -231,22 +231,23 @@ to_chat(src, "You need to disable a module first!") /mob/living/silicon/robot/put_in_hands(var/obj/item/W) // Maybe hands. - var/obj/item/gripper/G + var/obj/item/gripper/G = get_active_hand() + if (istype(G)) + if(!G.wrapped && G.grip_item(W, src, TRUE)) + return TRUE if (istype(module_state_1, /obj/item/gripper)) - G = module_state_1 - if (!G.wrapped && G.grip_item(W, src, 1)) + if (!G.wrapped && G.grip_item(W, src, TRUE)) return TRUE else if (istype(module_state_2, /obj/item/gripper)) G = module_state_2 - if (!G.wrapped && G.grip_item(W, src, 0)) + if (!G.wrapped && G.grip_item(W, src, TRUE)) return TRUE else if (istype(module_state_3, /obj/item/gripper)) G = module_state_3 - if (!G.wrapped && G.grip_item(W, src, 0)) + if (!G.wrapped && G.grip_item(W, src, TRUE)) return TRUE - W.forceMove(get_turf(src)) return FALSE @@ -290,4 +291,4 @@ var/selected = get_selected_module() if (selected) result += "\nThe activity light on hardpoint [selected] is on.\n" - return result \ No newline at end of file + return result diff --git a/code/modules/mob/living/silicon/robot/items/gripper.dm b/code/modules/mob/living/silicon/robot/items/gripper.dm index 2ff973d22df..410c109e23f 100644 --- a/code/modules/mob/living/silicon/robot/items/gripper.dm +++ b/code/modules/mob/living/silicon/robot/items/gripper.dm @@ -24,7 +24,9 @@ /obj/item/smes_coil, /obj/item/device/assembly,//Primarily for making improved cameras, but opens many possibilities /obj/item/computer_hardware, - /obj/item/pipe + /obj/item/pipe, + /obj/item/smallDelivery, + /obj/item/gift ) var/obj/item/wrapped @@ -74,6 +76,7 @@ /obj/item/gripper/update_icon() underlays.Cut() + grippersafety(src) if(wrapped && wrapped.icon) var/mutable_appearance/MA = new(wrapped) MA.layer = FLOAT_LAYER @@ -107,14 +110,15 @@ drop(get_turf(src)) -/obj/item/gripper/proc/drop(var/atom/target) +/obj/item/gripper/proc/drop(var/atom/target, var/feedback = TRUE) if(wrapped) if(wrapped.loc == src) if(force_holder) wrapped.force = force_holder wrapped.forceMove(target) force_holder = null - to_chat(loc, SPAN_NOTICE("You release \the [wrapped].")) // loc will always be the cyborg + if(feedback) + to_chat(loc, SPAN_NOTICE("You release \the [wrapped].")) // loc will always be the cyborg wrapped = null update_icon() return TRUE @@ -189,7 +193,9 @@ /obj/item/stock_parts, /obj/item/custom_ka_upgrade, /obj/item/warp_core, - /obj/item/extraction_pack + /obj/item/extraction_pack, + /obj/item/smallDelivery, + /obj/item/gift ) /obj/item/gripper/paperwork @@ -204,7 +210,11 @@ /obj/item/book, /obj/item/newspaper, /obj/item/stamp, - /obj/item/ducttape + /obj/item/ducttape, + /obj/item/smallDelivery, + /obj/item/gift, + /obj/item/stack/packageWrap, + /obj/item/stack/wrapping_paper ) /obj/item/gripper/research //A general usage gripper, used for toxins/robotics/xenobio/etc @@ -238,7 +248,9 @@ /obj/item/slimesteroid2, /obj/item/slimepotion, /obj/item/slimepotion2, - /obj/item/remote_mecha + /obj/item/remote_mecha, + /obj/item/smallDelivery, + /obj/item/gift ) /obj/item/gripper/chemistry //A gripper designed for chemistry, to allow borgs to work efficiently in the lab @@ -258,7 +270,9 @@ /obj/item/stack/material/phoron, /obj/item/reagent_containers/blood, /obj/item/reagent_containers/food/drinks/sillycup, - /obj/item/reagent_containers/food/drinks/medcup + /obj/item/reagent_containers/food/drinks/medcup, + /obj/item/smallDelivery, + /obj/item/gift ) /obj/item/gripper/service //Used to handle food, drinks, and seeds. @@ -274,7 +288,11 @@ /obj/item/trash, /obj/item/reagent_containers/cooking_container, /obj/item/material/kitchen, - /obj/item/reagent_containers/food/snacks + /obj/item/reagent_containers/food/snacks, + /obj/item/smallDelivery, + /obj/item/gift, + /obj/item/stack/packageWrap, + /obj/item/stack/wrapping_paper ) /obj/item/gripper/no_use //Used when you want to hold and put items in other things, but not able to 'use' the item diff --git a/code/modules/mob/living/silicon/robot/items/robot_parts.dm b/code/modules/mob/living/silicon/robot/items/robot_parts.dm index f851bade976..133492bb9ee 100644 --- a/code/modules/mob/living/silicon/robot/items/robot_parts.dm +++ b/code/modules/mob/living/silicon/robot/items/robot_parts.dm @@ -255,7 +255,11 @@ return var/mob/living/carbon/human/new_shell = new(get_turf(src), chest.linked_frame) - forceMove(new_shell) //so people won't mess around with the chassis until it is deleted + // replace the IPC's microbattery cell with the one that was in the robot chest + var/obj/item/organ/internal/cell/C = new_shell.internal_organs_by_name[BP_CELL] + C.replace_cell(chest.cell) + //so people won't mess around with the chassis until it is deleted + forceMove(new_shell) M.brainmob.mind.transfer_to(new_shell) qdel(M) new_shell.add_language(LANGUAGE_EAL) @@ -265,7 +269,9 @@ newname = L.get_random_name() new_shell.real_name = newname new_shell.name = new_shell.real_name - new_shell.change_appearance(APPEARANCE_ALL_HAIR | APPEARANCE_SKIN | APPEARANCE_EYE_COLOR, new_shell.loc, new_shell) + var/obj/item/organ/internal/mmi_holder/posibrain/P = new_shell.internal_organs_by_name[BP_BRAIN] + P.setup_brain() + new_shell.change_appearance(APPEARANCE_ALL_HAIR | APPEARANCE_SKIN | APPEARANCE_EYE_COLOR, new_shell) qdel(src) return @@ -431,4 +437,4 @@ /obj/item/robot_parts/chest/industrial name = "Hephaestus industrial torso" - linked_frame = SPECIES_IPC_G1 \ No newline at end of file + linked_frame = SPECIES_IPC_G1 diff --git a/code/modules/mob/living/silicon/robot/login.dm b/code/modules/mob/living/silicon/robot/login.dm index ec1c643d5da..7620d1a0f24 100644 --- a/code/modules/mob/living/silicon/robot/login.dm +++ b/code/modules/mob/living/silicon/robot/login.dm @@ -3,8 +3,10 @@ regenerate_icons() show_laws(0) - // the fuck - winset(src, null, "mainwindow.macro=borgmacro input.focus=true input.background-color=#D3B5B5") + if(client.prefs.toggles_secondary & HOTKEY_DEFAULT) + winset(src, null, "mainwindow.macro=borghotkeymode hotkey_toggle.is-checked=true mapwindow.map.focus=true input.background-color=#D3B5B5") + else + winset(src, null, "mainwindow.macro=borgmacro hotkey_toggle.is-checked=false input.focus=true input.background-color=#D3B5B5") // Forces synths to select an icon relevant to their module if(module && !icon_selected) diff --git a/code/modules/mob/living/silicon/robot/robot_helpers.dm b/code/modules/mob/living/silicon/robot/robot_helpers.dm index 545099e09df..ad06a3cca93 100644 --- a/code/modules/mob/living/silicon/robot/robot_helpers.dm +++ b/code/modules/mob/living/silicon/robot/robot_helpers.dm @@ -47,4 +47,7 @@ stored_module.loc = module if(client) client.screen -= stored_module - contents -= stored_module \ No newline at end of file + contents -= stored_module + +/mob/living/silicon/robot/get_cell() + return cell \ No newline at end of file diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 2b65499185c..42a6271063d 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -56,7 +56,7 @@ var/id_card_type = /obj/item/card/id/synthetic var/list/possible_accents = list(ACCENT_TTS, ACCENT_CETI, ACCENT_GIBSON, ACCENT_SOL, ACCENT_LUNA, ACCENT_MARTIAN, ACCENT_VENUS, ACCENT_VENUSJIN, ACCENT_JUPITER, ACCENT_COC, ACCENT_ELYRA, ACCENT_ERIDANI, - ACCENT_SILVERSUN, ACCENT_KONYAN, ACCENT_EARTH) + ACCENT_SILVERSUN_EXPATRIATE, ACCENT_KONYAN, ACCENT_EARTH) // Misc uv_intensity = 175 //Lights cast by robots have reduced effect on diona diff --git a/code/modules/mob/living/simple_animal/borer/borer.dm b/code/modules/mob/living/simple_animal/borer/borer.dm index 98cfe3243b2..8219b63f997 100644 --- a/code/modules/mob/living/simple_animal/borer/borer.dm +++ b/code/modules/mob/living/simple_animal/borer/borer.dm @@ -28,11 +28,15 @@ hunger_enabled = FALSE var/used_dominate + var/datum/progressbar/autocomplete/ability_bar + var/ability_start_time = 0 + var/obj/screen/borer/chemicals/chem_hud var/chemicals = 10 // Chemicals used for reproduction and spitting neurotoxin. var/mob/living/carbon/human/host // Human host for the brain worm. var/truename // Name used for brainworm-speak. var/mob/living/captive_brain/host_brain // Used for swapping control of the body back and forth. var/controlling // Used in human death check. + var/list/static/controlling_emotes = list("blink","blink_r","choke","drool","twitch","twitch_v","gasp") var/has_reproduced var/request_player = TRUE @@ -43,6 +47,8 @@ ..() if(mind) borers.add_antagonist(mind) + if(client && host) + client.screen += host.healths /mob/living/simple_animal/borer/Initialize() . = ..() @@ -56,6 +62,11 @@ if(request_player && !ckey && !client) SSghostroles.add_spawn_atom("borer", src) +/mob/living/simple_animal/borer/Destroy() + QDEL_NULL(ability_bar) + QDEL_NULL(host_brain) + return ..() + /mob/living/simple_animal/borer/death(gibbed, deathmessage) SSghostroles.remove_spawn_atom("borer", src) return ..(gibbed,deathmessage) @@ -64,14 +75,28 @@ return FALSE /mob/living/simple_animal/borer/Life() - ..() if(host) if(!stat && host.stat != DEAD) if(chemicals < 250) chemicals++ - if(host && !host.stat) - if(controlling && prob(host.getBrainLoss()/20)) - host.say("*[pick(list("blink","blink_r","choke","drool","twitch","twitch_s","gasp"))]") + if(!host.stat && controlling && prob(2)) + host.emote(pick(controlling_emotes)) + ..() + if(!QDELETED(ability_bar)) + ability_bar.update(world.time - ability_start_time) + +/mob/living/simple_animal/borer/proc/start_ability(var/atom/target, var/time) + if(!QDELETED(ability_bar)) + return FALSE + ability_bar = new /datum/progressbar/autocomplete(src, time, target) + ability_start_time = world.time + ability_bar.update(0) + return TRUE + +/mob/living/simple_animal/borer/handle_regular_hud_updates() + . = ..() + if(chem_hud) + chem_hud.maptext = SMALL_FONTS(7, chemicals) /mob/living/simple_animal/borer/Stat() ..() @@ -89,6 +114,9 @@ if(!host || !controlling) return + if(ability_bar) + QDEL_NULL(ability_bar) + if(istype(host,/mob/living/carbon/human)) var/mob/living/carbon/human/H = host var/obj/item/organ/external/head = H.get_organ(BP_HEAD) @@ -99,12 +127,12 @@ host.remove_language(LANGUAGE_BORER) host.remove_language(LANGUAGE_BORER_HIVEMIND) - to_chat(host, "You feel your nerves again as your control over your own body is restored.") host.verbs -= /mob/living/carbon/proc/release_control host.verbs -= /mob/living/carbon/proc/punish_host host.verbs -= /mob/living/carbon/proc/spawn_larvae if(host_brain) + to_chat(host_brain, FONT_LARGE(SPAN_NOTICE("You feel your nerves again as your control over your own body is restored."))) // these are here so bans and multikey warnings are not triggered on the wrong people when ckey is changed. // computer_id and IP are not updated magically on their own in offline mobs -walter0o @@ -158,12 +186,27 @@ host.machine = null host.status_flags &= ~PASSEMOTES + if(client) + client.screen -= host.healths host = null return -/mob/living/simple_animal/borer/assign_player(var/mob/user) - ckey = user.ckey - return src - /mob/living/simple_animal/borer/cannot_use_vents() return + +/mob/living/simple_animal/borer/UnarmedAttack(atom/A, proximity) + if(iscarbon(A)) + var/mob/living/carbon/C = A + if(C.lying || C.weakened) + do_infest(C) + else + do_paralyze(C) + return + return ..() + +/mob/living/simple_animal/borer/RangedAttack(atom/A, params) + if(iscarbon(A) && get_dist(src, A) <= 2) + var/mob/living/carbon/C = A + do_paralyze(C) + return + return ..() \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/borer/borer_captive.dm b/code/modules/mob/living/simple_animal/borer/borer_captive.dm index a38b3509497..26a52b799f3 100644 --- a/code/modules/mob/living/simple_animal/borer/borer_captive.dm +++ b/code/modules/mob/living/simple_animal/borer/borer_captive.dm @@ -3,6 +3,9 @@ real_name = "host brain" universal_understand = TRUE + var/datum/progressbar/resist_bar + var/resist_start_time = 0 + /mob/living/captive_brain/say(var/message) if(istype(src.loc,/mob/living/simple_animal/borer)) message = sanitize(message) @@ -22,19 +25,36 @@ else if(M.stat == DEAD && M.client.prefs.toggles & CHAT_GHOSTEARS) to_chat(M, "The captive mind of [src] whispers, \"[message]\"") +/mob/living/captive_brain/Destroy() + QDEL_NULL(resist_bar) + return ..() + /mob/living/captive_brain/emote(var/message) return +/mob/living/captive_brain/Life() + if(resist_bar) + resist_bar.update(world.time - resist_start_time) + return ..() + /mob/living/captive_brain/process_resist() //Resisting control by an alien mind. + if(resist_bar) + to_chat(src, SPAN_WARNING("You're already resisting the alien control!")) + return + if(istype(src.loc,/mob/living/simple_animal/borer)) var/mob/living/simple_animal/borer/B = src.loc var/mob/living/captive_brain/H = src - to_chat(H, SPAN_DANGER("You begin doggedly resisting the parasite's control (this will take approximately sixty seconds).")) + to_chat(H, SPAN_DANGER("You begin doggedly resisting the parasite's control.")) to_chat(B.host, SPAN_DANGER("You feel the captive mind of [src] begin to resist your control.")) - addtimer(CALLBACK(src, .proc/eject_borer, B, H), rand(200, 250) + B.host.getBrainLoss()) + var/resist_time = rand(40 SECONDS, 1 MINUTE) + addtimer(CALLBACK(src, .proc/eject_borer, B, H), resist_time) + resist_bar = new /datum/progressbar/autocomplete(src, resist_time, B.host) + resist_start_time = world.time + resist_bar.update(0) return ..() diff --git a/code/modules/mob/living/simple_animal/borer/borer_powers.dm b/code/modules/mob/living/simple_animal/borer/borer_powers.dm index 938ac67432b..e9d27079c73 100644 --- a/code/modules/mob/living/simple_animal/borer/borer_powers.dm +++ b/code/modules/mob/living/simple_animal/borer/borer_powers.dm @@ -10,12 +10,16 @@ to_chat(src, SPAN_NOTICE("You cannot leave your host in your current state.")) return - to_chat(src, SPAN_NOTICE("You begin disconnecting from [host]'s synapses and prodding at their internal ear canal.")) + var/exit_time = 10 SECONDS + if(!start_ability(host, exit_time)) + to_chat(src, SPAN_WARNING("You're busy doing something else, complete that task first.")) + return + to_chat(src, SPAN_NOTICE("You begin disconnecting from [host]'s synapses and prodding at their internal ear canal.")) if(!host.stat) to_chat(host, SPAN_WARNING("An odd, uncomfortable pressure begins to build inside your skull, behind your ear...")) - addtimer(CALLBACK(src, .proc/exit_host), 100) + addtimer(CALLBACK(src, .proc/exit_host), exit_time) /mob/living/simple_animal/borer/proc/exit_host() if(!host || !src) @@ -48,19 +52,28 @@ return var/list/choices = list() - for(var/mob/living/carbon/C in view(1,src)) + for(var/mob/living/carbon/C in view(2, src)) if(src.Adjacent(C)) choices += C - if(!choices.len) + if(!length(choices)) to_chat(src, SPAN_NOTICE("There are no viable hosts within range.")) return var/mob/living/carbon/M = input(src,"Who do you wish to infest?") in null|choices + if(M) + do_infest(M) +/mob/living/simple_animal/borer/proc/do_infest(var/mob/living/carbon/M) + if(host) + to_chat(src, SPAN_NOTICE("You are already within a host.")) + return + if(stat) + to_chat(src, SPAN_NOTICE("You cannot infest a target in your current state.")) + return if(!M || !src) return - if(!(src.Adjacent(M))) + if(!Adjacent(M)) return if(M.has_brain_worms()) to_chat(src, SPAN_WARNING("You cannot infest someone who is already infested!")) @@ -73,8 +86,12 @@ if(!E || E.is_stump()) to_chat(src, SPAN_WARNING("\The [H] does not have a head!")) return - if(!H.species.has_organ[BP_BRAIN]) - to_chat(src, SPAN_WARNING("\The [H] does not seem to have an ear canal to breach.")) + var/obj/item/organ/internal/I = H.species.has_organ[BP_BRAIN] + if(!I) + to_chat(src, SPAN_WARNING("\The [H] doesn't have a brain!")) + return + if(istype(I, /obj/item/organ/internal/borer)) + to_chat(src, SPAN_WARNING("You cannot infest someone who is already infested!")) return if(H.isSynthetic()) to_chat(src, SPAN_NOTICE("You can't affect synthetics.")) @@ -104,6 +121,9 @@ src.host.status_flags |= PASSEMOTES src.forceMove(M) + if(client) + client.screen += host.healths + //Update their traitor status. if(host.mind) borers.add_antagonist_mind(host.mind, 1, borers.faction_role_text, borers.faction_welcome) @@ -236,12 +256,14 @@ if(C.stat != 2) choices += C + var/mob/living/carbon/M = input(src, "Who do you wish to dominate?") in null|choices + if(M) + do_paralyze(M) + +/mob/living/simple_animal/borer/proc/do_paralyze(var/mob/living/carbon/M) if(world.time - used_dominate < 150) to_chat(src, SPAN_NOTICE("You cannot use that ability again so soon.")) return - - var/mob/living/carbon/M = input(src, "Who do you wish to dominate?") in null|choices - if(!M || !src) return if(M.isSynthetic()) @@ -279,10 +301,15 @@ to_chat(src, SPAN_WARNING("\The [host]'s mind is shielded against your powers.")) return + var/takeover_time = 10 SECONDS + (host.getBrainLoss() * 5) + if(!start_ability(host, takeover_time)) + to_chat(src, SPAN_WARNING("You're busy doing something else, complete that task first.")) + return + to_chat(src, SPAN_WARNING("You begin delicately adjusting your connection to the host brain...")) to_chat(host, SPAN_WARNING("You feel a tingling sensation at the back of your head.")) - addtimer(CALLBACK(src, .proc/host_takeover), 100+(host.getBrainLoss()*5)) + addtimer(CALLBACK(src, .proc/host_takeover), takeover_time) /mob/living/simple_animal/borer/proc/host_takeover() if(!host || !src || controlling) @@ -303,8 +330,8 @@ host_brain = new(src) host_brain.ckey = host.ckey - - host_brain.name = host.name + host_brain.name = host.real_name + host_brain.real_name = "[host_brain.name] (captive host)" if(!host_brain.computer_id) host_brain.computer_id = h2b_id @@ -357,7 +384,7 @@ var/mob/living/simple_animal/borer/B = has_brain_worms() if(B?.host_brain) - to_chat(src, SPAN_WARNING("You withdraw your probosci, releasing control of [B.host_brain]")) + to_chat(src, SPAN_WARNING("You withdraw your probosci, releasing control of [B.host_brain].")) B.detach() @@ -437,20 +464,30 @@ to_chat(src, SPAN_WARNING("\The [host]'s mind is shielded against your powers.")) return + var/jumpstart_time = 15 SECONDS + if(!start_ability(host, jumpstart_time)) + to_chat(src, SPAN_WARNING("You're busy doing something else, complete that task first.")) + return + chemicals -= 150 to_chat(src, SPAN_NOTICE("You probe your tendrils deep within your host's zona bovinae, seeking to unleash their potential.")) to_chat(host, SPAN_DANGER("You feel some tendrils probe at the back of your head...")) to_chat(host, FONT_LARGE(SPAN_WARNING("You feel something terrible coming on..."))) - addtimer(CALLBACK(src, .proc/jumpstart_psi), 150) + + addtimer(CALLBACK(src, .proc/jumpstart_psi), jumpstart_time) /mob/living/simple_animal/borer/proc/jumpstart_psi() + if(!host) + return + to_chat(src, SPAN_NOTICE("You succeed in interfacing with the host's zona bovinae, this will be a painful process for them.")) - host.awaken_psi_basic("something in your head") + host.awaken_psi_basic("something in your head", FALSE) + host.add_language(LANGUAGE_TCB) // if we don't have TCB, give them TCB | this allows monkey borers to RP /mob/living/simple_animal/borer/verb/advance_faculty() set category = "Abilities" set name = "Advance Psionic Faculty (75)" - set desc = "Advance one of your host's psionic faculties' by one step." + set desc = "Advance one of your host's psionic faculties by one step." if(!host) to_chat(src, SPAN_NOTICE("You are not inside a host body.")) @@ -475,19 +512,31 @@ if(!selected_faculty) return selected_faculty = lowertext(selected_faculty) - if(host.psi.get_rank(selected_faculty) >= PSI_RANK_GRANDMASTER) + var/max_rank = islesserform(host) ? PSI_RANK_OPERANT : PSI_RANK_MASTER + if(host.psi.get_rank(selected_faculty) >= max_rank) to_chat(src, SPAN_NOTICE("This faculty has already been pushed to the max potential you can achieve!")) return + var/faculty_time = 10 SECONDS + if(!start_ability(host, faculty_time)) + to_chat(src, SPAN_WARNING("You're busy doing something else, complete that task first.")) + return + chemicals -= 75 to_chat(src, SPAN_NOTICE("You probe your tendrils deep within your host's zona bovinae, seeking to upgrade their abilities.")) to_chat(host, SPAN_WARNING("You feel a burning, tingling sensation at the back of your head...")) - addtimer(CALLBACK(src, .proc/faculty_upgrade, selected_faculty), 100) + + addtimer(CALLBACK(src, .proc/faculty_upgrade, selected_faculty), faculty_time) /mob/living/simple_animal/borer/proc/faculty_upgrade(var/selected_faculty) - host.psi.set_rank(selected_faculty, host.psi.get_rank(selected_faculty) + 1) - host.psi.update() - to_chat(src, SPAN_NOTICE("You successfully manage to upgrade your host's [selected_faculty] faculty.")) + if(!host) + return + + var/host_psi_rank = host.psi.get_rank(selected_faculty) + var/next_rank = host_psi_rank > PSI_RANK_BLUNT ? host_psi_rank + 1 : PSI_RANK_OPERANT + host.psi.set_rank(selected_faculty, next_rank) + host.psi.update(TRUE) + to_chat(src, SPAN_NOTICE("You successfully manage to upgrade your host to [psychic_ranks_to_strings[host.psi.ranks[selected_faculty]]] [selected_faculty].")) to_chat(host, SPAN_GOOD("A breeze of fresh air washes over your mind, you feel powerful!")) to_chat(host, SPAN_NOTICE("You have been psionically enlightened. You are now a [psychic_ranks_to_strings[host.psi.ranks[selected_faculty]]] in the [selected_faculty] faculty.")) diff --git a/code/modules/mob/living/simple_animal/borer/say.dm b/code/modules/mob/living/simple_animal/borer/say.dm index cea49f8b01f..c504b285386 100644 --- a/code/modules/mob/living/simple_animal/borer/say.dm +++ b/code/modules/mob/living/simple_animal/borer/say.dm @@ -31,15 +31,14 @@ to_chat(src, SPAN_NOTICE("There are no viable hosts to speak with.")) else var/mob/living/carbon/human/chosen_sayer = pick(viable_sayers) - log_say("[key_name(src)] : ([name]) [message]", ckey=key_name(src)) + log_say("[key_name(src)] : (forcing [key_name(chosen_sayer)]) [message]", ckey=key_name(src)) chosen_sayer.say(message) return to_chat(src, "You drop words into [host]'s mind: \"[message]\"") to_chat(host, "Your own thoughts speak: \"[message]\"") + log_say("[key_name(src)] : (borer whisper -> [key_name(host)]) [message]") - for(var/mob/M in player_list) - if(istype(M, /mob/abstract/new_player)) - continue - else if(M.stat == DEAD && M.client.prefs.toggles & CHAT_GHOSTEARS) - to_chat(M, "[src.truename] whispers to [host], \"[message]\"") + for(var/mob/M in mob_list) + if(M.client && M.stat == DEAD && !isnewplayer(M) && (M.client.prefs.toggles & CHAT_GHOSTEARS)) + to_chat(M, "[src.truename] whispers to [host], \"[message]\"") \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/constructs/constructs/cult_construct.dm b/code/modules/mob/living/simple_animal/constructs/constructs/cult_construct.dm index 5aa22c7e33c..725ec8c9575 100644 --- a/code/modules/mob/living/simple_animal/constructs/constructs/cult_construct.dm +++ b/code/modules/mob/living/simple_animal/constructs/constructs/cult_construct.dm @@ -42,7 +42,7 @@ var/can_repair = FALSE var/health_prefix = "" - appearance_flags = NO_CLIENT_COLOR + appearance_flags = NO_CLIENT_COLOR|KEEP_TOGETHER /mob/living/simple_animal/construct/cultify() @@ -60,12 +60,22 @@ update_icon() add_glow() +/mob/living/simple_animal/construct/LateLogin() + . = ..() + if(!iscultist(src)) + cult.add_antagonist_mind(mind) + /mob/living/simple_animal/construct/death() new /obj/item/ectoplasm(get_turf(src)) ..(null, "collapses in a shattered heap.") ghostize() qdel(src) +/mob/living/simple_animal/construct/ghostize() + . = ..() + if(!QDELETED(src) && stat != DEAD) + SSghostroles.add_spawn_atom("construct", src) + /mob/living/simple_animal/construct/can_name(var/mob/living/M) if(iscultist(M)) return ..() diff --git a/code/modules/mob/living/simple_animal/constructs/soulstone.dm b/code/modules/mob/living/simple_animal/constructs/soulstone.dm index 6719a427162..a4ed59000c9 100644 --- a/code/modules/mob/living/simple_animal/constructs/soulstone.dm +++ b/code/modules/mob/living/simple_animal/constructs/soulstone.dm @@ -105,16 +105,20 @@ if(!istype(T)) return if(src.imprinted != "empty") - to_chat(U, "Capture failed!: The soul stone has already been imprinted with [src.imprinted]'s mind!") + if(U) + to_chat(U, "Capture failed!: The soul stone has already been imprinted with [src.imprinted]'s mind!") return if(T.stat != DEAD && !T.is_asystole()) - to_chat(U, "Capture failed!: Kill or maim the victim first!") + if(U) + to_chat(U, "Capture failed!: Kill or maim the victim first!") return if(T.client == null) - to_chat(U, "Capture failed!: The soul has already fled its mortal frame.") + if(U) + to_chat(U, "Capture failed!: The soul has already fled its mortal frame.") return if(src.contents.len) - to_chat(U, "Capture failed!: The soul stone is full! Use or free an existing soul to make room.") + if(U) + to_chat(U, "Capture failed!: The soul stone is full! Use or free an existing soul to make room.") return for(var/obj/item/W in T) @@ -150,9 +154,10 @@ src.icon_state = "soulstone2" src.name = "Soul Stone: [S.real_name]" - to_chat(S, "Your soul has been captured! You are now bound to [U.name]'s will, help them suceed in their goals at all costs.") - to_chat(U, "Capture successful! : [T.real_name]'s soul has been ripped from their body and stored within the soul stone.") - to_chat(U, "The soulstone has been imprinted with [S.real_name]'s mind, it will no longer react to other souls.") + if(U) + to_chat(S, "Your soul has been captured! You are now bound to [U.name]'s will, help them suceed in their goals at all costs.") + to_chat(U, "Capture successful! : [T.real_name]'s soul has been ripped from their body and stored within the soul stone.") + to_chat(U, "The soulstone has been imprinted with [S.real_name]'s mind, it will no longer react to other souls.") src.imprinted = "[S.name]" qdel(T) @@ -177,6 +182,7 @@ to_chat(T, "Your soul has been recaptured by the soul stone, its arcane energies are reknitting your ethereal form") to_chat(U, "Capture successful! : [T.name]'s has been recaptured and stored within the soul stone.") + /obj/item/device/soulstone/proc/transfer_construct(var/obj/structure/constructshell/T,var/mob/U) var/mob/living/simple_animal/shade/A = locate() in src if(!A) @@ -186,9 +192,11 @@ switch(construct_class) if("Juggernaut") var/mob/living/simple_animal/construct/armored/Z = new /mob/living/simple_animal/construct/armored (get_turf(T.loc)) - Z.key = A.key - if(iscultist(U)) - cult.add_antagonist(Z.mind) + if(A.key) + Z.key = A.key + else + SSghostroles.add_spawn_atom("construct", Z) + SSghostroles.remove_spawn_atom("shade", A) qdel(T) to_chat(Z, "You are playing a Juggernaut. Though slow, you can withstand extreme punishment, and rip apart enemies and walls alike.") to_chat(Z, "You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.") @@ -196,9 +204,11 @@ qdel(src) if("Wraith") var/mob/living/simple_animal/construct/wraith/Z = new /mob/living/simple_animal/construct/wraith (get_turf(T.loc)) - Z.key = A.key - if(iscultist(U)) - cult.add_antagonist(Z.mind) + if(A.key) + Z.key = A.key + else + SSghostroles.add_spawn_atom("construct", Z) + SSghostroles.remove_spawn_atom("shade", A) qdel(T) to_chat(Z, "You are playing a Wraith. Though relatively fragile, you are fast, deadly, and even able to phase through walls.") to_chat(Z, "You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.") @@ -206,14 +216,17 @@ qdel(src) if("Artificer") var/mob/living/simple_animal/construct/builder/Z = new /mob/living/simple_animal/construct/builder (get_turf(T.loc)) - Z.key = A.key - if(iscultist(U)) - cult.add_antagonist(Z.mind) + if(A.key) + Z.key = A.key + else + SSghostroles.add_spawn_atom("construct", Z) + SSghostroles.remove_spawn_atom("shade", A) qdel(T) to_chat(Z, "You are playing an Artificer. You are incredibly weak and fragile, but you are able to construct fortifications, repair allied constructs (by clicking on them), and even create new constructs") to_chat(Z, "You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.") Z.cancel_camera() qdel(src) + /obj/item/device/soulstone/proc/transfer_soul(var/choice as text, var/target, var/mob/U as mob) switch(choice) if("VICTIM") diff --git a/code/modules/mob/living/simple_animal/friendly/carp.dm b/code/modules/mob/living/simple_animal/friendly/carp.dm index 9cd55e4b302..8979020bc5f 100644 --- a/code/modules/mob/living/simple_animal/friendly/carp.dm +++ b/code/modules/mob/living/simple_animal/friendly/carp.dm @@ -57,7 +57,7 @@ blood_overlay_icon = 'icons/mob/npc/blood_overlay.dmi' else blood_overlay_icon = initial(blood_overlay_icon) - handle_blood_overlay(TRUE) + handle_blood(TRUE) /mob/living/simple_animal/carp/fall_impact() src.visible_message(SPAN_NOTICE("\The [src] gently floats to a stop.")) diff --git a/code/modules/mob/living/simple_animal/friendly/slime.dm b/code/modules/mob/living/simple_animal/friendly/slime.dm index 8982ca53017..a6a14e088bb 100644 --- a/code/modules/mob/living/simple_animal/friendly/slime.dm +++ b/code/modules/mob/living/simple_animal/friendly/slime.dm @@ -20,7 +20,7 @@ /mob/living/simple_animal/slime/Initialize() . = ..() add_language(LANGUAGE_TCB) - set_default_language(LANGUAGE_TCB) + set_default_language(all_languages[LANGUAGE_TCB]) /mob/living/simple_animal/slime/can_force_feed(var/feeder, var/food, var/feedback) if(feedback) diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm index eae113d0fe7..77ff8dcf479 100644 --- a/code/modules/mob/living/simple_animal/hostile/carp.dm +++ b/code/modules/mob/living/simple_animal/hostile/carp.dm @@ -53,7 +53,7 @@ blood_overlay_icon = 'icons/mob/npc/blood_overlay.dmi' else blood_overlay_icon = initial(blood_overlay_icon) - handle_blood_overlay(TRUE) + handle_blood(TRUE) /mob/living/simple_animal/hostile/carp/Allow_Spacemove(var/check_drift = 0) return 1 //No drifting in space for space carp! //original comments do not steal diff --git a/code/modules/mob/living/simple_animal/hostile/commanded/ives.dm b/code/modules/mob/living/simple_animal/hostile/commanded/ives.dm index bf81d4cc8a8..d84b13d2e99 100644 --- a/code/modules/mob/living/simple_animal/hostile/commanded/ives.dm +++ b/code/modules/mob/living/simple_animal/hostile/commanded/ives.dm @@ -8,6 +8,8 @@ icon_living = "ives" icon_dead = "ives_dead" + blood_overlay_icon = null + health = 70 maxHealth = 70 diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm index c4b3898a51c..de775d3603f 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -26,6 +26,7 @@ response_help = "pets" response_disarm = "gently pushes aside" response_harm = "pokes" + blood_amount = 150 stop_automated_movement_when_pulled = 0 maxHealth = 200 health = 200 @@ -54,6 +55,7 @@ icon_state = "greimorian_worker" icon_living = "greimorian_worker" icon_dead = "greimorian_worker_dead" + blood_amount = 50 maxHealth = 40 health = 40 melee_damage_lower = 5 @@ -70,6 +72,7 @@ icon_state = "greimorian_hunter" icon_living = "greimorian_hunter" icon_dead = "greimorian_hunter_dead" + blood_amount = 90 maxHealth = 120 health = 120 melee_damage_lower = 10 diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebot.dm deleted file mode 100644 index 07d7bf9faea..00000000000 --- a/code/modules/mob/living/simple_animal/hostile/hivebot.dm +++ /dev/null @@ -1,841 +0,0 @@ -/obj/item/projectile/bullet/pistol/hivebotspike - name = "spike" - damage = 10 - sharp = 1 - embed = 0 - -/obj/item/projectile/bullet/pistol/hivebotspike/needle - name = "needle" - damage = 5 - -/mob/living/simple_animal/hostile/hivebot - name = "Hivebot" - desc = "A primitive in design, hovering robot, with some menacing looking blades jutting out from it. It bears no manufacturer markings of any kind." - icon = 'icons/mob/npc/hivebot.dmi' - icon_state = "hivebot" - blood_type = "#000000" - blood_overlay_icon = 'icons/mob/npc/blood_overlay_hivebot.dmi' - health = 15 - maxHealth = 15 - harm_intent_damage = 3 - melee_damage_lower = 10 - melee_damage_upper = 10 - break_stuff_probability = 25 - attacktext = "slashed" - projectilesound = 'sound/weapons/bladeslice.ogg' - projectiletype = /obj/item/projectile/bullet/pistol/hivebotspike - organ_names = list("head", "core", "side thruster", "bottom thruster") - faction = "hivebot" - min_oxy = 0 - max_oxy = 0 - min_tox = 0 - max_tox = 0 - min_co2 = 0 - max_co2 = 0 - min_n2 = 0 - max_n2 = 0 - minbodytemp = 0 - speed = 4 - tameable = FALSE - flying = TRUE - smart_melee = FALSE - see_in_dark = 8 - pass_flags = PASSTABLE - attack_emote = "focuses on" - var/mob/living/simple_animal/hostile/hivebotbeacon/linked_parent = null - -/mob/living/simple_animal/hostile/hivebot/do_animate_chat(var/message, var/datum/language/language, var/small, var/list/show_to, var/duration, var/list/message_override) - INVOKE_ASYNC(src, /atom/movable/proc/animate_chat, message, language, small, show_to, duration) - -/mob/living/simple_animal/hostile/hivebot/get_bullet_impact_effect_type(var/def_zone) - return BULLET_IMPACT_METAL - -/mob/living/simple_animal/hostile/hivebot/update_icon() - ..() - if(resting || stat == DEAD) - blood_overlay_icon = 'icons/mob/npc/blood_overlay.dmi' - else - blood_overlay_icon = initial(blood_overlay_icon) - handle_blood_overlay(TRUE) - -/mob/living/simple_animal/hostile/hivebot/get_blood_overlay_name() - if(stance == HOSTILE_STANCE_IDLE) - return "blood_overlay" - else - return "blood_overlay_armed" - -/mob/living/simple_animal/hostile/hivebot/guardian - health = 80 - maxHealth = 45 - melee_damage_lower = 20 - melee_damage_upper = 20 - wander = 0 - icon_state = "hivebotguardian" - desc = "A primitive in design, hovering robot, with some menacing looking blades jutting out from it. It bears no manufacturer markings of any kind. This one seems to be of a larger design." - mob_bump_flag = HEAVY - mob_swap_flags = ~HEAVY - mob_push_flags = 0 - - -/mob/living/simple_animal/hostile/hivebot/guardian/Initialize(mapload,mob/living/simple_animal/hostile/hivebot/hivebotbeacon) - .=..() - if(hivebotbeacon && linked_parent) - linked_parent.guard_amt++ - -/mob/living/simple_animal/hostile/hivebot/guardian/think() - . =..() - if(stance != HOSTILE_STANCE_IDLE) - wander = 1 - -/mob/living/simple_animal/hostile/hivebot/guardian/Destroy() - .=..() - if(linked_parent) - linked_parent.guard_amt-- - -/mob/living/simple_animal/hostile/hivebot/bomber - desc = "A primitive in design, hovering robot, with some menacing looking blades jutting out from it. It bears no manufacturer markings of any kind. This one appears round in design and moves slower than its brethren." - health = 100 - maxHealth = 100 - icon_state = "hivebotbomber" - organ_names = list("head", "core", "bottom thruster") - attacktext = "bumped" - move_to_delay = 8 - var/has_exploded = FALSE - -/mob/living/simple_animal/hostile/hivebot/bomber/AttackingTarget() - ..() - LoseTarget() - stance = HOSTILE_STANCE_TIRED - stop_automated_movement = 1 - wander = 0 - if(!has_exploded) - playsound(src.loc, 'sound/items/countdown.ogg', 125, 1) - has_exploded = TRUE - addtimer(CALLBACK(src, .proc/burst), 20) - -/mob/living/simple_animal/hostile/hivebot/bomber/bullet_act(var/obj/item/projectile/Proj) - if(istype(Proj, /obj/item/projectile/bullet/pistol/hivebotspike) || istype(Proj, /obj/item/projectile/beam/hivebot)) - Proj.no_attack_log = 1 - return PROJECTILE_CONTINUE - else if(!has_exploded) - has_exploded = TRUE - burst() - -/mob/living/simple_animal/hostile/hivebot/bomber/proc/burst() - fragem(src,10,30,2,3,5,1,FALSE) - src.gib() - -/mob/living/simple_animal/hostile/hivebot/range - name = "Hivebot" - desc = "A primitive in design, hovering robot, with a simple looking launcher sticking out of it. It bears no manufacturer markings of any kind." - icon_state = "hivebotranged" - ranged = 1 - -/mob/living/simple_animal/hostile/hivebot/range/rapid - projectiletype = /obj/item/projectile/bullet/pistol/hivebotspike/needle - rapid = 1 - -//Creates a reference to its parent beacon on init. -/mob/living/simple_animal/hostile/hivebot/Initialize(mapload,mob/living/simple_animal/hostile/hivebot/hivebotbeacon) - if(hivebotbeacon) - linked_parent = hivebotbeacon - .=..() - if(!mapload) - new /obj/effect/effect/smoke(src.loc,30) - playsound(src.loc, 'sound/effects/EMPulse.ogg', 25, 1) - -/mob/living/simple_animal/hostile/hivebot/bullet_act(var/obj/item/projectile/Proj) - if(istype(Proj, /obj/item/projectile/bullet/pistol/hivebotspike) || istype(Proj, /obj/item/projectile/beam/hivebot)) - Proj.no_attack_log = 1 - return PROJECTILE_CONTINUE - else - return ..(Proj) - -/mob/living/simple_animal/hostile/hivebot/death() - ..(null,"blows apart!") - var/T = get_turf(src) - new /obj/effect/gibspawner/robot(T) - spark(T, 1, alldirs) - qdel(src) - -/mob/living/simple_animal/hostile/hivebot/Destroy() - . = ..() - if(linked_parent) - linked_parent.linked_bots -= src - -/mob/living/simple_animal/hostile/hivebot/think() - . =..() - if(stance == HOSTILE_STANCE_IDLE) - icon_state = "[initial(icon_state)]" - else - icon_state = "[initial(icon_state)]_armed" - -/mob/living/simple_animal/hostile/hivebot/Allow_Spacemove(var/check_drift = 0) - return 1 - -/mob/living/simple_animal/hostile/hivebot/AirflowCanMove(n) - return 0 - -/mob/living/simple_animal/hostile/hivebot/emp_act(severity) - LoseTarget() - stance = HOSTILE_STANCE_TIRED - addtimer(CALLBACK(src, .proc/wakeup), 50) - visible_message(SPAN_DANGER("[src] suffers a teleportation malfunction!")) - playsound(src.loc, 'sound/effects/teleport.ogg', 25, 1) - var/turf/random_turf = get_turf(pick(orange(src,7))) - do_teleport(src, random_turf) - -/mob/living/simple_animal/hostile/hivebot/proc/wakeup() - stance = HOSTILE_STANCE_IDLE - -//---Hivebot Beacon---// - -/obj/item/projectile/beam/hivebot - name = "electrical discharge" - damage = 10 - damage_type = BURN - agony = 30 - armor_penetration = 40 - muzzle_type = /obj/effect/projectile/muzzle/stun - tracer_type = /obj/effect/projectile/tracer/stun - impact_type = /obj/effect/projectile/impact/stun - -/obj/item/projectile/beam/hivebot/harmless - name = "harmless electrical discharge" - damage = 0 - damage_type = PAIN - agony = 0 - -/obj/item/projectile/beam/hivebot/incendiary - name = "archaic energy welder" - damage_type = BURN - damage = 20 - incinerate = 5 - muzzle_type = /obj/effect/projectile/muzzle/laser/blue - tracer_type = /obj/effect/projectile/tracer/laser/blue - impact_type = /obj/effect/projectile/impact/laser/blue - -#define NORMAL 0 -#define RANGED 1 -#define RAPID 2 -#define BOMBER 4 -#define GUARDIAN 8 -#define HARVESTER 16 - -/mob/living/simple_animal/hostile/hivebotbeacon - name = "Hivebot beacon" - desc = "An odd and primitive looking machine. It emanates of strange and powerful energies. It bears no manufacturer markings of any kind." - icon = 'icons/mob/npc/hivebot.dmi' - icon_state = "hivebotbeacon_active" - icon_living = "hivebotbeacon_active" - health = 300 - maxHealth = 300 - blood_type = "#000000" - projectilesound = 'sound/weapons/taser2.ogg' - projectiletype = /obj/item/projectile/beam/hivebot - wander = 0 - stop_automated_movement = 1 - status_flags = 0 - organ_names = list("head", "core", "right fore leg", "left fore leg", "right rear leg", "left rear leg") - faction = "hivebot" - ranged = 1 - rapid = 1 - min_oxy = 0 - max_oxy = 0 - min_tox = 0 - max_tox = 0 - min_co2 = 0 - max_co2 = 0 - min_n2 = 0 - max_n2 = 0 - minbodytemp = 0 - speed = -10 - see_in_dark = 8 - destroy_surroundings = 0 - var/bot_type - var/bot_amt = 160 //Number of total bots that are spawned before the beacon disappears completely. - var/max_bots = 40 //Number of bots linked to this beacon specifically that can exist, before spawning more is halted. - var/list/linked_bots = list() - var/guard_amt = 0 - var/harvester_amt = 0 - var/spawn_delay - var/activated = 0 - var/max_bots_reached - var/list/destinations = list() - var/list/close_destinations = list() - var/area/latest_area - attack_emote = "focuses on" -/mob/living/simple_animal/hostile/hivebotbeacon/incendiary - projectiletype = /obj/item/projectile/beam/hivebot/incendiary - projectilesound = 'sound/weapons/plasma_cutter.ogg' - rapid = 0 - -/mob/living/simple_animal/hostile/hivebotbeacon/Initialize(mapload) - .=..() - if(!mapload) - var/datum/effect/effect/system/smoke_spread/S = new /datum/effect/effect/system/smoke_spread() - S.set_up(5, 0, src.loc) - S.start() - visible_message(SPAN_DANGER("[src] warps in!")) - playsound(src.loc, 'sound/effects/EMPulse.ogg', 25, 1) - addtimer(CALLBACK(src, .proc/activate_beacon), 450) - latest_area = get_area(src) - icon_state = "hivebotbeacon_off" - generate_warp_destinations() - set_light(6,0.5,LIGHT_COLOR_GREEN) - -/mob/living/simple_animal/hostile/hivebotbeacon/proc/generate_warp_destinations() - - destinations.Cut() - for(var/turf/simulated/floor/T in circlerange(src,10)) - if(turf_clear(T)) - destinations += T - var/area/A = get_area(src) - if(!isNotStationLevel(A.z)) - var/list/area_turfs = get_area_turfs(A) - var/list/floor_turfs = list() - for(var/turf/simulated/floor/T in (area_turfs)) - if(turf_clear(T)) - floor_turfs += T - if(floor_turfs.len) - destinations |= floor_turfs - - close_destinations.Cut() - for(var/turf/simulated/floor/T in oview(src,5)) - if(turf_clear(T)) - close_destinations += T - if(!close_destinations.len) - close_destinations += src.loc - - latest_area = get_area(src) - -/mob/living/simple_animal/hostile/hivebotbeacon/death() - ..(null,"blows apart and erupts in a cloud of noxious smoke!") - new /obj/effect/decal/cleanable/greenglow(src.loc) - var/T = get_turf(src) - new /obj/effect/gibspawner/robot(T) - spark(T, 3, alldirs) - qdel(src) - return - -/mob/living/simple_animal/hostile/hivebotbeacon/Destroy() - for (var/mob/living/simple_animal/hostile/hivebot/latest_child in linked_bots) - latest_child.linked_parent = null - linked_bots.Cut() - var/datum/effect/effect/system/smoke_spread/S = new /datum/effect/effect/system/smoke_spread() - S.set_up(5, 0, src.loc) - S.start() - .=..() - -/mob/living/simple_animal/hostile/hivebotbeacon/think() - . =..() - if(stance != HOSTILE_STANCE_IDLE && activated == 0) - activate_beacon() - else if(activated == 1 && icon_state != "hivebotbeacon_active") - icon_state = "hivebotbeacon_active" - -/mob/living/simple_animal/hostile/hivebotbeacon/MoveToTarget() - if(!stop_automated_movement) - stop_automated_movement = 1 - if(QDELETED(target_mob) || SA_attackable(target_mob)) - LoseTarget() - if(!see_target()) - LoseTarget() - if(target_mob in targets) - if(get_dist(src, target_mob) <= 6) - walk(src, 0) - OpenFire(target_mob) - -/mob/living/simple_animal/hostile/hivebotbeacon/proc/activate_beacon() - if(activated != 1) - if(activated == -1) - return - else - visible_message(SPAN_WARNING("[src] suddenly activates!")) - icon_state = "hivebotbeacon_raising" - sleep(16) - icon_state = "hivebotbeacon_active" - sleep(4) - activated = 1 - warpbots() - -/mob/living/simple_animal/hostile/hivebotbeacon/AirflowCanMove(n) - return 0 - -/mob/living/simple_animal/hostile/hivebotbeacon/bullet_act(var/obj/item/projectile/Proj) - if(istype(Proj, /obj/item/projectile/bullet/pistol/hivebotspike) || istype(Proj, /obj/item/projectile/beam/hivebot)) - Proj.no_attack_log = 1 - return PROJECTILE_CONTINUE - else - ..(Proj) - -/mob/living/simple_animal/hostile/hivebotbeacon/emp_act() - if(activated != -1) - LoseTarget() - stance = HOSTILE_STANCE_TIRED - icon_state = "hivebotbeacon_off" - activated = -1 - addtimer(CALLBACK(src, .proc/wakeup), 900) - - var/area/random_area = random_station_area(TRUE) - var/turf/random_turf = random_area.random_space() - var/datum/effect/effect/system/smoke_spread/S = new /datum/effect/effect/system/smoke_spread() - S.set_up(5, 0, src.loc) - S.start() - - if(random_turf) - visible_message(SPAN_DANGER("[src] disappears in a cloud of smoke!")) - playsound(src.loc, 'sound/effects/teleport.ogg', 25, 1) - do_teleport(src, random_turf) - -/mob/living/simple_animal/hostile/hivebotbeacon/proc/wakeup() - stance = HOSTILE_STANCE_IDLE - activated = 0 - activate_beacon() - -/mob/living/simple_animal/hostile/hivebotbeacon/proc/warpbots() - if(!bot_amt) - visible_message(SPAN_DANGER("[src] disappears in a cloud of smoke!")) - playsound(src.loc, 'sound/effects/teleport.ogg', 25, 1) - new /obj/effect/decal/cleanable/greenglow(src.loc) - qdel(src) - return - - if(activated == -1) - return - - if(linked_bots.len < max_bots) - visible_message(SPAN_WARNING("[src] radiates with energy!")) - - if(guard_amt < 4 && prob(50)) - bot_type = GUARDIAN - else - var/selection = rand(1,100) - switch(selection) - if(1 to 70) - bot_type = NORMAL - if(71 to 82) - bot_type = RANGED - if(83 to 92) - bot_type = RAPID - if(93 to 100) - bot_type = BOMBER - - if(guard_amt == 4 && !harvester_amt && stance == HOSTILE_STANCE_IDLE && prob(10)) - bot_type = HARVESTER - - if(latest_area != get_area(src)) - generate_warp_destinations() - - var/turf/Destination - if(stance == HOSTILE_STANCE_IDLE && !(linked_bots.len < 10)) - Destination = pick(destinations) - else - Destination = pick(close_destinations) - - var/mob/living/simple_animal/hostile/hivebot/latest_child - switch(bot_type) - if(NORMAL) - latest_child = new /mob/living/simple_animal/hostile/hivebot(Destination, src) - if(RANGED) - latest_child = new /mob/living/simple_animal/hostile/hivebot/range(Destination, src) - if(RAPID) - latest_child = new /mob/living/simple_animal/hostile/hivebot/range/rapid(Destination, src) - if(BOMBER) - latest_child = new /mob/living/simple_animal/hostile/hivebot/bomber(Destination, src) - if(GUARDIAN) - Destination = null - for(var/check_dir in cardinal) - var/turf/T = get_step(src, check_dir) - if(turf_clear(T)) - Destination = T - break - if(!Destination) - Destination = pick(close_destinations) - latest_child = new /mob/living/simple_animal/hostile/hivebot/guardian(Destination, src) - if(HARVESTER) - Destination = pick(close_destinations) - latest_child = new /mob/living/simple_animal/hostile/retaliate/hivebotharvester(Destination, src) - - linked_bots += latest_child //Adds the spawned hivebot to the list of the beacon's children. - latest_child.faction = faction - bot_amt-- - - if(bot_amt>0 && linked_bots.len < max_bots) - calc_spawn_delay() - addtimer(CALLBACK(src, .proc/warpbots), spawn_delay) - else - max_bots_reached = 1 - -/mob/living/simple_animal/hostile/hivebotbeacon/proc/calc_spawn_delay() - spawn_delay = 80*1.085**(linked_bots.len + 1) - return - -/mob/living/simple_animal/hostile/hivebotbeacon/Life() - ..() - if(wander) - wander = 0 - stop_automated_movement = 1 - if(max_bots_reached && activated == 1 && linked_bots.len < max_bots) - max_bots_reached = 0 - calc_spawn_delay() - addtimer(CALLBACK(src, .proc/warpbots), spawn_delay) - -#undef NORMAL -#undef RANGED -#undef RAPID -#undef BOMBER -#undef GUARDIAN -#undef HARVESTER - - -//---Hivebot Harvester---// - -/obj/item/projectile/beam/hivebot/incendiary/heavy - name = "archaic mining laser" - damage = 25 - incinerate = 10 - -/mob/living/simple_animal/hostile/retaliate/hivebotharvester - name = "Hivebot Harvester" - desc = "An odd and primitive looking machine. It emanates of powerful thermal radiation. It bears no manufacturer markings of any kind." - icon = 'icons/mob/npc/hivebot.dmi' - icon_state = "hivebotharvester" - health = 100 - maxHealth = 100 - blood_type = "#000000" - blood_overlay_icon = 'icons/mob/npc/blood_overlay_hivebot.dmi' - harm_intent_damage = 3 - melee_damage_lower = 30 - melee_damage_upper = 30 - destroy_surroundings = 0 - wander = 0 - ranged = 1 - attacktext = "skewered" - projectilesound = 'sound/weapons/lasercannonfire.ogg' - projectiletype = /obj/item/projectile/beam/hivebot/incendiary/heavy - organ_names = list("head", "core", "side thruster", "harvesting array") - faction = "hivebot" - min_oxy = 0 - max_oxy = 0 - min_tox = 0 - max_tox = 0 - min_co2 = 0 - max_co2 = 0 - min_n2 = 0 - max_n2 = 0 - minbodytemp = 0 - speed = 4 - tameable = FALSE - flying = 1 - mob_size = MOB_LARGE - see_in_dark = 8 - pass_flags = PASSTABLE - attack_emote = "focuses on" - var/mob/living/simple_animal/hostile/hivebotbeacon/linked_parent = null - var/turf/last_processed_turf - var/turf/last_prospect_target - var/turf/last_prospect_loc - var/busy - - mob_bump_flag = HEAVY - mob_swap_flags = ~HEAVY - mob_push_flags = 0 - -/mob/living/simple_animal/hostile/retaliate/hivebotharvester/Initialize(mapload,mob/living/simple_animal/hostile/hivebot/hivebotbeacon) - if(hivebotbeacon) - linked_parent = hivebotbeacon - linked_parent.harvester_amt ++ - .=..() - set_light(3,2,LIGHT_COLOR_RED) - if(!mapload) - new /obj/effect/effect/smoke(src.loc,30) - playsound(src.loc, 'sound/effects/EMPulse.ogg', 25, 1) - -/mob/living/simple_animal/hostile/retaliate/hivebotharvester/death() - ..(null,"teleports away!") - if(linked_parent) - linked_parent.harvester_amt -- - new /obj/effect/effect/smoke(src.loc,30) - playsound(src.loc, 'sound/effects/EMPulse.ogg', 25, 1) - qdel(src) - -/mob/living/simple_animal/hostile/retaliate/hivebotharvester/Destroy() - . = ..() - if(linked_parent) - linked_parent.linked_bots -= src - -/mob/living/simple_animal/hostile/retaliate/hivebotharvester/Allow_Spacemove(var/check_drift = 0) - return 1 - -/mob/living/simple_animal/hostile/retaliate/hivebotharvester/AirflowCanMove(n) - return 0 - -/mob/living/simple_animal/hostile/retaliate/hivebotharvester/bullet_act(var/obj/item/projectile/Proj) - if(istype(Proj, /obj/item/projectile/bullet/pistol/hivebotspike) || istype(Proj, /obj/item/projectile/beam/hivebot)) - Proj.no_attack_log = 1 - return PROJECTILE_CONTINUE - else - return ..(Proj) - -/mob/living/simple_animal/hostile/retaliate/hivebotharvester/emp_act(severity) - LoseTarget() - stance = HOSTILE_STANCE_IDLE - visible_message(SPAN_DANGER("[src] suffers a teleportation malfunction!")) - playsound(src.loc, 'sound/effects/teleport.ogg', 25, 1) - var/turf/random_turf = get_turf(pick(orange(src,7))) - do_teleport(src, random_turf) - -/mob/living/simple_animal/hostile/retaliate/hivebotharvester/think() - ..() - if(!stat) - if(stance == HOSTILE_STANCE_IDLE) - if(last_processed_turf == src.loc) - INVOKE_ASYNC(src, .proc/prospect) - else - INVOKE_ASYNC(src, .proc/process_turf) - else if(busy) - busy = 0 - update_icon() - if(wander) - wander = 0 - -/mob/living/simple_animal/hostile/retaliate/hivebotharvester/proc/process_turf() - if(busy) - return - for(var/obj/O in src.loc) - if(istype(O, /obj/item)) - var/obj/item/I = O - for(I in src.loc) - - if(I.matter) - busy = 1 - update_icon() - src.visible_message(SPAN_NOTICE("[src] begins to harvest \the [I].")) - if(do_after(src, 32)) - src.visible_message(SPAN_WARNING("[src] harvests \the [I].")) - qdel(I) - busy = 0 - update_icon() - continue - - if(istype(O, /obj/item/storage)) - var/obj/item/storage/S = O - src.visible_message(SPAN_NOTICE("[src] begins to rip apart \the [S].")) - busy = 2 - update_icon() - if(do_after(src, 32)) - src.visible_message(SPAN_WARNING("[src] rips \the [S] apart.")) - S.spill(3, src.loc) - qdel(S) - busy = 0 - update_icon() - return - - if(istype(O, /obj/structure/table)) - var/obj/structure/table/TB = O - src.visible_message(SPAN_NOTICE("[src] starts to dismantle \the [TB].")) - busy = 2 - update_icon() - if(do_after(src, 48)) - src.visible_message(SPAN_WARNING("[src] dismantles \the [TB].")) - TB.break_to_parts(1) - busy = 0 - update_icon() - return - - if(istype(O, /obj/structure/bed)) - var/obj/structure/bed/B = O - if(B.can_dismantle) - src.visible_message(SPAN_NOTICE("[src] starts to dismantle \the [B].")) - busy = 2 - update_icon() - if(do_after(src, 48)) - src.visible_message(SPAN_WARNING("[src] dismantles \the [B].")) - B.dismantle() - qdel(B) - busy = 0 - update_icon() - return - - if(istype(O, /obj/item/stool)) - var/obj/item/stool/S = O - src.visible_message(SPAN_NOTICE("[src] starts to dismantle \the [S].")) - busy = 2 - update_icon() - if(do_after(src, 32)) - src.visible_message(SPAN_WARNING("[src] dismantles \the [S].")) - S.dismantle() - busy = 0 - update_icon() - return - - if(istype(O, /obj/effect/decal/cleanable/blood/gibs/robot)) - src.visible_message(SPAN_NOTICE("[src] starts to recycle \the [O].")) - busy = 1 - update_icon() - if(do_after(src, 48)) - src.visible_message(SPAN_WARNING("[src] recycles \the [O].")) - qdel(O) - busy = 0 - update_icon() - continue - - if(istype(O, /obj/structure/cable)) - var/turf/simulated/floor/T = src.loc - if(T.is_plating()) - var/obj/structure/cable/C = O - src.visible_message(SPAN_NOTICE("[src] starts ripping up \the [C].")) - busy = 2 - update_icon() - if(do_after(src, 32)) - src.visible_message(SPAN_WARNING("[src] rips \the [C].")) - if(C.powernet && C.powernet.avail) - spark(src, 3, alldirs) - new/obj/item/stack/cable_coil(T, C.d1 ? 2 : 1, C.color) - qdel(C) - busy = 0 - update_icon() - return - - if(istype(src.loc, /turf/simulated/floor)) - var/turf/simulated/floor/T = src.loc - if(!T.is_plating()) - src.visible_message(SPAN_NOTICE("[src] starts ripping up \the [T].")) - busy = 2 - update_icon() - if(do_after(src, 32)) - src.visible_message(SPAN_WARNING("[src] rips up \the [T].")) - playsound(src.loc, /decl/sound_category/crowbar_sound, 100, 1) - T.make_plating(1) - busy = 0 - update_icon() - return - - last_processed_turf = src.loc - -/mob/living/simple_animal/hostile/retaliate/hivebotharvester/update_icon() - if(busy) - if(busy == 1) - icon_state = "hivebotharvester_harvesting" - else - icon_state = "hivebotharvester_ripping" - else - icon_state = "hivebotharvester" - if(resting || stat == DEAD || busy) - blood_overlay_icon = 'icons/mob/npc/blood_overlay.dmi' - else - blood_overlay_icon = initial(blood_overlay_icon) - handle_blood_overlay(TRUE) - -/mob/living/simple_animal/hostile/retaliate/hivebotharvester/proc/prospect() - - var/destination - var/turf/T - - if((!last_prospect_target) || (last_prospect_loc != src.loc)) - destination = pick(cardinal) - T = get_step(src, destination) - last_prospect_target = T - last_prospect_loc = src.loc - busy = 0 - else - T = last_prospect_target - - if(busy) - return - - if(istype(T, /turf/space) || istype(T, /turf/simulated/mineral)) - last_prospect_target = null - last_prospect_loc = null - return - - if(istype(T, /turf/simulated/wall)) - var/turf/simulated/wall/W = T - rapid = 1 - OpenFire(W) - rapid = 0 - return - - for(var/obj/O in T) - if(istype(O, /obj/structure/girder)) - var/obj/structure/girder/G = O - src.visible_message(SPAN_NOTICE("[src] starts to tear \the [O] apart.")) - busy = 1 - if(do_after(src, 32)) - src.do_attack_animation(G) - src.visible_message(SPAN_WARNING("[src] tears \the [O] apart!")) - G.dismantle() - busy = 0 - continue - - if((istype(O, /obj/machinery/door/firedoor) && O.density) || (istype(O, /obj/machinery/door/airlock) && O.density) || istype(O, /obj/machinery/door/blast) && O.density) - var/obj/machinery/door/D = O - if(D.stat & BROKEN) - src.visible_message(SPAN_NOTICE("[src] starts to tear \the [D] open.")) - busy = 1 - if(do_after(src, 48)) - src.visible_message(SPAN_WARNING("[src] tears \the [D] apart!")) - src.do_attack_animation(D) - new /obj/item/stack/material/steel(get_turf(D)) - new /obj/item/stack/material/steel(get_turf(D)) - new /obj/item/stack/material/steel(get_turf(D)) - new /obj/item/stack/material/steel(get_turf(D)) - new /obj/item/stack/material/steel(get_turf(D)) - qdel(D) - busy = 0 - else if(istype(D, /obj/machinery/door/airlock/multi_tile)) - D.attack_generic(src,rand(melee_damage_lower,melee_damage_upper),attacktext) - else - rapid = 1 - OpenFire(D) - rapid = 0 - return - - if(istype(O, /obj/structure/window)) - var/dir = get_dir(T,src.loc) - var/obj/structure/window/W = O - if(W.dir == reverse_dir[dir]) - W.attack_generic(src,rand(melee_damage_lower,melee_damage_upper),attacktext) - else - W.attack_generic(src,rand(melee_damage_lower,melee_damage_upper),attacktext) - return - - if(istype(O, /obj/structure/grille)) - var/obj/structure/grille/G = O - G.attack_generic(src,rand(melee_damage_lower,melee_damage_upper),attacktext) - return - - if(istype(O, /obj/structure/barricade) || istype(O, /obj/structure/closet) || istype(O, /obj/structure/inflatable)) - var/obj/structure/S = O - rapid = 1 - OpenFire(S) - rapid = 0 - return - - if(istype(O, /obj/structure/reagent_dispensers)) - var/obj/structure/reagent_dispensers/RD = O - src.visible_message(SPAN_NOTICE("[src] starts taking apart \the [RD].")) - busy = 1 - if(do_after(src, 48)) - src.do_attack_animation(RD) - RD.reagents.splash_turf(get_turf(RD.loc), RD.reagents.total_volume) - src.visible_message(SPAN_DANGER("[RD] gets torn open, spreading its contents all over the area!")) - new /obj/item/stack/material/steel(get_turf(RD)) - new /obj/item/stack/material/steel(get_turf(RD)) - qdel(RD) - busy = 0 - return - - if(T) - Move(T) - - last_prospect_target = null - last_prospect_loc = null - -/mob/living/simple_animal/hostile/retaliate/hivebotharvester/shoot_wrapper(target, location, user) - target_mob = target - if(see_target()) - Shoot(target, location, user) - target_mob = null - return diff --git a/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot.dm new file mode 100644 index 00000000000..d73d4a20993 --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot.dm @@ -0,0 +1,179 @@ +/mob/living/simple_animal/hostile/hivebot + name = "Hivebot" + desc = "A primitive in design, hovering robot, with some menacing looking blades jutting out from it. It bears no manufacturer markings of any kind." + icon = 'icons/mob/npc/hivebot.dmi' + icon_state = "hivebot" + blood_type = COLOR_OIL + blood_overlay_icon = 'icons/mob/npc/blood_overlay_hivebot.dmi' + health = 15 + maxHealth = 15 + harm_intent_damage = 3 + melee_damage_lower = 10 + melee_damage_upper = 10 + break_stuff_probability = 25 + attacktext = "slashed" + projectilesound = 'sound/weapons/bladeslice.ogg' + projectiletype = /obj/item/projectile/bullet/pistol/hivebotspike + organ_names = list("head", "core", "side thruster", "bottom thruster") + faction = "hivebot" + min_oxy = 0 + max_oxy = 0 + min_tox = 0 + max_tox = 0 + min_co2 = 0 + max_co2 = 0 + min_n2 = 0 + max_n2 = 0 + minbodytemp = 0 + speed = 4 + tameable = FALSE + flying = TRUE + smart_melee = FALSE + see_in_dark = 8 + pass_flags = PASSTABLE + attack_emote = "focuses on" + var/mob/living/simple_animal/hostile/hivebotbeacon/linked_parent = null + +/mob/living/simple_animal/hostile/hivebot/do_animate_chat(var/message, var/datum/language/language, var/small, var/list/show_to, var/duration, var/list/message_override) + INVOKE_ASYNC(src, /atom/movable/proc/animate_chat, message, language, small, show_to, duration) + +/mob/living/simple_animal/hostile/hivebot/get_bullet_impact_effect_type(var/def_zone) + return BULLET_IMPACT_METAL + +/mob/living/simple_animal/hostile/hivebot/update_icon() + ..() + if(resting || stat == DEAD) + blood_overlay_icon = 'icons/mob/npc/blood_overlay.dmi' + else + blood_overlay_icon = initial(blood_overlay_icon) + handle_blood(TRUE) + +/mob/living/simple_animal/hostile/hivebot/get_blood_overlay_name() + if(stance == HOSTILE_STANCE_IDLE) + return "blood_overlay" + else + return "blood_overlay_armed" + +/mob/living/simple_animal/hostile/hivebot/guardian + health = 80 + maxHealth = 45 + melee_damage_lower = 20 + melee_damage_upper = 20 + wander = 0 + icon_state = "hivebotguardian" + desc = "A primitive in design, hovering robot, with some menacing looking blades jutting out from it. It bears no manufacturer markings of any kind. This one seems to be of a larger design." + mob_bump_flag = HEAVY + mob_swap_flags = ~HEAVY + mob_push_flags = 0 + + +/mob/living/simple_animal/hostile/hivebot/guardian/Initialize(mapload,mob/living/simple_animal/hostile/hivebot/hivebotbeacon) + .=..() + if(hivebotbeacon && linked_parent) + linked_parent.guard_amt++ + +/mob/living/simple_animal/hostile/hivebot/guardian/think() + . =..() + if(stance != HOSTILE_STANCE_IDLE) + wander = 1 + +/mob/living/simple_animal/hostile/hivebot/guardian/Destroy() + .=..() + if(linked_parent) + linked_parent.guard_amt-- + +/mob/living/simple_animal/hostile/hivebot/bomber + desc = "A primitive in design, hovering robot, with some menacing looking blades jutting out from it. It bears no manufacturer markings of any kind. This one appears round in design and moves slower than its brethren." + health = 100 + maxHealth = 100 + icon_state = "hivebotbomber" + organ_names = list("head", "core", "bottom thruster") + attacktext = "bumped" + move_to_delay = 8 + var/has_exploded = FALSE + +/mob/living/simple_animal/hostile/hivebot/bomber/AttackingTarget() + ..() + LoseTarget() + stance = HOSTILE_STANCE_TIRED + stop_automated_movement = 1 + wander = 0 + if(!has_exploded) + playsound(src.loc, 'sound/items/countdown.ogg', 125, 1) + has_exploded = TRUE + addtimer(CALLBACK(src, .proc/burst), 20) + +/mob/living/simple_animal/hostile/hivebot/bomber/bullet_act(var/obj/item/projectile/Proj) + if(istype(Proj, /obj/item/projectile/bullet/pistol/hivebotspike) || istype(Proj, /obj/item/projectile/beam/hivebot)) + Proj.no_attack_log = 1 + return PROJECTILE_CONTINUE + else if(!has_exploded) + has_exploded = TRUE + burst() + +/mob/living/simple_animal/hostile/hivebot/bomber/proc/burst() + fragem(src,10,30,2,3,5,1,FALSE) + src.gib() + +/mob/living/simple_animal/hostile/hivebot/range + name = "Hivebot" + desc = "A primitive in design, hovering robot, with a simple looking launcher sticking out of it. It bears no manufacturer markings of any kind." + icon_state = "hivebotranged" + ranged = 1 + +/mob/living/simple_animal/hostile/hivebot/range/rapid + projectiletype = /obj/item/projectile/bullet/pistol/hivebotspike/needle + rapid = 1 + +//Creates a reference to its parent beacon on init. +/mob/living/simple_animal/hostile/hivebot/Initialize(mapload,mob/living/simple_animal/hostile/hivebot/hivebotbeacon) + if(hivebotbeacon) + linked_parent = hivebotbeacon + .=..() + if(!mapload) + new /obj/effect/effect/smoke(src.loc,30) + playsound(src.loc, 'sound/effects/EMPulse.ogg', 25, 1) + +/mob/living/simple_animal/hostile/hivebot/bullet_act(var/obj/item/projectile/Proj) + if(istype(Proj, /obj/item/projectile/bullet/pistol/hivebotspike) || istype(Proj, /obj/item/projectile/beam/hivebot)) + Proj.no_attack_log = 1 + return PROJECTILE_CONTINUE + else + return ..(Proj) + +/mob/living/simple_animal/hostile/hivebot/death() + ..(null,"blows apart!") + var/T = get_turf(src) + new /obj/effect/gibspawner/robot(T) + spark(T, 1, alldirs) + qdel(src) + +/mob/living/simple_animal/hostile/hivebot/Destroy() + . = ..() + if(linked_parent) + linked_parent.linked_bots -= src + +/mob/living/simple_animal/hostile/hivebot/think() + . =..() + if(stance == HOSTILE_STANCE_IDLE) + icon_state = "[initial(icon_state)]" + else + icon_state = "[initial(icon_state)]_armed" + +/mob/living/simple_animal/hostile/hivebot/Allow_Spacemove(var/check_drift = 0) + return 1 + +/mob/living/simple_animal/hostile/hivebot/AirflowCanMove(n) + return 0 + +/mob/living/simple_animal/hostile/hivebot/emp_act(severity) + LoseTarget() + stance = HOSTILE_STANCE_TIRED + addtimer(CALLBACK(src, .proc/wakeup), 50) + visible_message(SPAN_DANGER("[src] suffers a teleportation malfunction!")) + playsound(src.loc, 'sound/effects/teleport.ogg', 25, 1) + var/turf/random_turf = get_turf(pick(orange(src,7))) + do_teleport(src, random_turf) + +/mob/living/simple_animal/hostile/hivebot/proc/wakeup() + stance = HOSTILE_STANCE_IDLE \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot_beacon.dm b/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot_beacon.dm new file mode 100644 index 00000000000..7783c78adf3 --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot_beacon.dm @@ -0,0 +1,273 @@ +#define NORMAL 0 +#define RANGED 1 +#define RAPID 2 +#define BOMBER 4 +#define GUARDIAN 8 +#define HARVESTER 16 + +/mob/living/simple_animal/hostile/hivebotbeacon + name = "Hivebot beacon" + desc = "An odd and primitive looking machine. It emanates of strange and powerful energies. It bears no manufacturer markings of any kind." + icon = 'icons/mob/npc/hivebot.dmi' + icon_state = "hivebotbeacon_active" + icon_living = "hivebotbeacon_active" + health = 300 + maxHealth = 300 + blood_type = COLOR_OIL + projectilesound = 'sound/weapons/taser2.ogg' + projectiletype = /obj/item/projectile/beam/hivebot + wander = 0 + stop_automated_movement = 1 + status_flags = 0 + organ_names = list("head", "core", "right fore leg", "left fore leg", "right rear leg", "left rear leg") + faction = "hivebot" + ranged = 1 + rapid = 1 + min_oxy = 0 + max_oxy = 0 + min_tox = 0 + max_tox = 0 + min_co2 = 0 + max_co2 = 0 + min_n2 = 0 + max_n2 = 0 + minbodytemp = 0 + speed = -10 + see_in_dark = 8 + destroy_surroundings = 0 + var/bot_type + var/bot_amt = 160 //Number of total bots that are spawned before the beacon disappears completely. + var/max_bots = 40 //Number of bots linked to this beacon specifically that can exist, before spawning more is halted. + var/list/linked_bots = list() + var/guard_amt = 0 + var/harvester_amt = 0 + var/spawn_delay + var/activated = 0 + var/max_bots_reached + var/list/destinations = list() + var/list/close_destinations = list() + var/area/latest_area + attack_emote = "focuses on" + +/mob/living/simple_animal/hostile/hivebotbeacon/incendiary + projectiletype = /obj/item/projectile/beam/hivebot/incendiary + projectilesound = 'sound/weapons/plasma_cutter.ogg' + rapid = 0 + +/mob/living/simple_animal/hostile/hivebotbeacon/Initialize(mapload) + .=..() + if(!mapload) + var/datum/effect/effect/system/smoke_spread/S = new /datum/effect/effect/system/smoke_spread() + S.set_up(5, 0, src.loc) + S.start() + visible_message(SPAN_DANGER("[src] warps in!")) + playsound(src.loc, 'sound/effects/EMPulse.ogg', 25, 1) + addtimer(CALLBACK(src, .proc/activate_beacon), 450) + latest_area = get_area(src) + icon_state = "hivebotbeacon_off" + generate_warp_destinations() + set_light(6,0.5,LIGHT_COLOR_GREEN) + +/mob/living/simple_animal/hostile/hivebotbeacon/proc/generate_warp_destinations() + + destinations.Cut() + for(var/turf/simulated/floor/T in circlerange(src,10)) + if(turf_clear(T)) + destinations += T + var/area/A = get_area(src) + if(!isNotStationLevel(A.z)) + var/list/area_turfs = get_area_turfs(A) + var/list/floor_turfs = list() + for(var/turf/simulated/floor/T in (area_turfs)) + if(turf_clear(T)) + floor_turfs += T + if(floor_turfs.len) + destinations |= floor_turfs + + close_destinations.Cut() + for(var/turf/simulated/floor/T in oview(src,5)) + if(turf_clear(T)) + close_destinations += T + if(!close_destinations.len) + close_destinations += src.loc + + latest_area = get_area(src) + +/mob/living/simple_animal/hostile/hivebotbeacon/death() + ..(null,"blows apart and erupts in a cloud of noxious smoke!") + new /obj/effect/decal/cleanable/greenglow(src.loc) + var/T = get_turf(src) + new /obj/effect/gibspawner/robot(T) + spark(T, 3, alldirs) + qdel(src) + return + +/mob/living/simple_animal/hostile/hivebotbeacon/Destroy() + for (var/mob/living/simple_animal/hostile/hivebot/latest_child in linked_bots) + latest_child.linked_parent = null + linked_bots.Cut() + var/datum/effect/effect/system/smoke_spread/S = new /datum/effect/effect/system/smoke_spread() + S.set_up(5, 0, src.loc) + S.start() + .=..() + +/mob/living/simple_animal/hostile/hivebotbeacon/think() + . =..() + if(stance != HOSTILE_STANCE_IDLE && activated == 0) + activate_beacon() + else if(activated == 1 && icon_state != "hivebotbeacon_active") + icon_state = "hivebotbeacon_active" + +/mob/living/simple_animal/hostile/hivebotbeacon/MoveToTarget() + if(!stop_automated_movement) + stop_automated_movement = 1 + if(QDELETED(target_mob) || SA_attackable(target_mob)) + LoseTarget() + if(!see_target()) + LoseTarget() + if(target_mob in targets) + if(get_dist(src, target_mob) <= 6) + walk(src, 0) + OpenFire(target_mob) + +/mob/living/simple_animal/hostile/hivebotbeacon/proc/activate_beacon() + if(activated != 1) + if(activated == -1) + return + else + visible_message(SPAN_WARNING("[src] suddenly activates!")) + icon_state = "hivebotbeacon_raising" + sleep(16) + icon_state = "hivebotbeacon_active" + sleep(4) + activated = 1 + warpbots() + +/mob/living/simple_animal/hostile/hivebotbeacon/AirflowCanMove(n) + return 0 + +/mob/living/simple_animal/hostile/hivebotbeacon/bullet_act(var/obj/item/projectile/Proj) + if(istype(Proj, /obj/item/projectile/bullet/pistol/hivebotspike) || istype(Proj, /obj/item/projectile/beam/hivebot)) + Proj.no_attack_log = 1 + return PROJECTILE_CONTINUE + else + ..(Proj) + +/mob/living/simple_animal/hostile/hivebotbeacon/emp_act() + if(activated != -1) + LoseTarget() + stance = HOSTILE_STANCE_TIRED + icon_state = "hivebotbeacon_off" + activated = -1 + addtimer(CALLBACK(src, .proc/wakeup), 900) + + var/area/random_area = random_station_area(TRUE) + var/turf/random_turf = random_area.random_space() + var/datum/effect/effect/system/smoke_spread/S = new /datum/effect/effect/system/smoke_spread() + S.set_up(5, 0, src.loc) + S.start() + + if(random_turf) + visible_message(SPAN_DANGER("[src] disappears in a cloud of smoke!")) + playsound(src.loc, 'sound/effects/teleport.ogg', 25, 1) + do_teleport(src, random_turf) + +/mob/living/simple_animal/hostile/hivebotbeacon/proc/wakeup() + stance = HOSTILE_STANCE_IDLE + activated = 0 + activate_beacon() + +/mob/living/simple_animal/hostile/hivebotbeacon/proc/warpbots() + if(!bot_amt) + visible_message(SPAN_DANGER("[src] disappears in a cloud of smoke!")) + playsound(src.loc, 'sound/effects/teleport.ogg', 25, 1) + new /obj/effect/decal/cleanable/greenglow(src.loc) + qdel(src) + return + + if(activated == -1) + return + + if(linked_bots.len < max_bots) + visible_message(SPAN_WARNING("[src] radiates with energy!")) + + if(guard_amt < 4 && prob(50)) + bot_type = GUARDIAN + else + var/selection = rand(1,100) + switch(selection) + if(1 to 70) + bot_type = NORMAL + if(71 to 82) + bot_type = RANGED + if(83 to 92) + bot_type = RAPID + if(93 to 100) + bot_type = BOMBER + + if(guard_amt == 4 && !harvester_amt && stance == HOSTILE_STANCE_IDLE && prob(10)) + bot_type = HARVESTER + + if(latest_area != get_area(src)) + generate_warp_destinations() + + var/turf/Destination + if(stance == HOSTILE_STANCE_IDLE && !(linked_bots.len < 10)) + Destination = pick(destinations) + else + Destination = pick(close_destinations) + + var/mob/living/simple_animal/hostile/hivebot/latest_child + switch(bot_type) + if(NORMAL) + latest_child = new /mob/living/simple_animal/hostile/hivebot(Destination, src) + if(RANGED) + latest_child = new /mob/living/simple_animal/hostile/hivebot/range(Destination, src) + if(RAPID) + latest_child = new /mob/living/simple_animal/hostile/hivebot/range/rapid(Destination, src) + if(BOMBER) + latest_child = new /mob/living/simple_animal/hostile/hivebot/bomber(Destination, src) + if(GUARDIAN) + Destination = null + for(var/check_dir in cardinal) + var/turf/T = get_step(src, check_dir) + if(turf_clear(T)) + Destination = T + break + if(!Destination) + Destination = pick(close_destinations) + latest_child = new /mob/living/simple_animal/hostile/hivebot/guardian(Destination, src) + if(HARVESTER) + Destination = pick(close_destinations) + latest_child = new /mob/living/simple_animal/hostile/retaliate/hivebotharvester(Destination, src) + + linked_bots += latest_child //Adds the spawned hivebot to the list of the beacon's children. + latest_child.faction = faction + bot_amt-- + + if(bot_amt>0 && linked_bots.len < max_bots) + calc_spawn_delay() + addtimer(CALLBACK(src, .proc/warpbots), spawn_delay) + else + max_bots_reached = 1 + +/mob/living/simple_animal/hostile/hivebotbeacon/proc/calc_spawn_delay() + spawn_delay = 80*1.085**(linked_bots.len + 1) + return + +/mob/living/simple_animal/hostile/hivebotbeacon/Life() + ..() + if(wander) + wander = 0 + stop_automated_movement = 1 + if(max_bots_reached && activated == 1 && linked_bots.len < max_bots) + max_bots_reached = 0 + calc_spawn_delay() + addtimer(CALLBACK(src, .proc/warpbots), spawn_delay) + +#undef NORMAL +#undef RANGED +#undef RAPID +#undef BOMBER +#undef GUARDIAN +#undef HARVESTER \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot_beacon_projectiles.dm b/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot_beacon_projectiles.dm new file mode 100644 index 00000000000..b689f7c4381 --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot_beacon_projectiles.dm @@ -0,0 +1,24 @@ +/obj/item/projectile/beam/hivebot + name = "electrical discharge" + damage = 10 + damage_type = BURN + agony = 30 + armor_penetration = 40 + muzzle_type = /obj/effect/projectile/muzzle/stun + tracer_type = /obj/effect/projectile/tracer/stun + impact_type = /obj/effect/projectile/impact/stun + +/obj/item/projectile/beam/hivebot/harmless + name = "harmless electrical discharge" + damage = 0 + damage_type = PAIN + agony = 0 + +/obj/item/projectile/beam/hivebot/incendiary + name = "archaic energy welder" + damage_type = BURN + damage = 20 + incinerate = 5 + muzzle_type = /obj/effect/projectile/muzzle/laser/blue + tracer_type = /obj/effect/projectile/tracer/laser/blue + impact_type = /obj/effect/projectile/impact/laser/blue \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot_harvester.dm b/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot_harvester.dm new file mode 100644 index 00000000000..b299097b620 --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot_harvester.dm @@ -0,0 +1,343 @@ +/mob/living/simple_animal/hostile/retaliate/hivebotharvester + name = "Hivebot Harvester" + desc = "An odd and primitive looking machine. It emanates of powerful thermal radiation. It bears no manufacturer markings of any kind." + icon = 'icons/mob/npc/hivebot.dmi' + icon_state = "hivebotharvester" + health = 100 + maxHealth = 100 + blood_type = COLOR_OIL + blood_overlay_icon = 'icons/mob/npc/blood_overlay_hivebot.dmi' + harm_intent_damage = 3 + melee_damage_lower = 30 + melee_damage_upper = 30 + destroy_surroundings = 0 + wander = 0 + ranged = 1 + attacktext = "skewered" + projectilesound = 'sound/weapons/lasercannonfire.ogg' + projectiletype = /obj/item/projectile/beam/hivebot/incendiary/heavy + organ_names = list("head", "core", "side thruster", "harvesting array") + faction = "hivebot" + min_oxy = 0 + max_oxy = 0 + min_tox = 0 + max_tox = 0 + min_co2 = 0 + max_co2 = 0 + min_n2 = 0 + max_n2 = 0 + minbodytemp = 0 + speed = 4 + tameable = FALSE + flying = 1 + mob_size = MOB_LARGE + see_in_dark = 8 + pass_flags = PASSTABLE + attack_emote = "focuses on" + var/mob/living/simple_animal/hostile/hivebotbeacon/linked_parent = null + var/turf/last_processed_turf + var/turf/last_prospect_target + var/turf/last_prospect_loc + var/busy + + mob_bump_flag = HEAVY + mob_swap_flags = ~HEAVY + mob_push_flags = 0 + +/mob/living/simple_animal/hostile/retaliate/hivebotharvester/Initialize(mapload,mob/living/simple_animal/hostile/hivebot/hivebotbeacon) + if(hivebotbeacon) + linked_parent = hivebotbeacon + linked_parent.harvester_amt ++ + .=..() + set_light(3,2,LIGHT_COLOR_RED) + if(!mapload) + new /obj/effect/effect/smoke(src.loc,30) + playsound(src.loc, 'sound/effects/EMPulse.ogg', 25, 1) + +/mob/living/simple_animal/hostile/retaliate/hivebotharvester/death() + ..(null,"teleports away!") + if(linked_parent) + linked_parent.harvester_amt -- + new /obj/effect/effect/smoke(src.loc,30) + playsound(src.loc, 'sound/effects/EMPulse.ogg', 25, 1) + qdel(src) + +/mob/living/simple_animal/hostile/retaliate/hivebotharvester/Destroy() + . = ..() + if(linked_parent) + linked_parent.linked_bots -= src + +/mob/living/simple_animal/hostile/retaliate/hivebotharvester/Allow_Spacemove(var/check_drift = 0) + return 1 + +/mob/living/simple_animal/hostile/retaliate/hivebotharvester/AirflowCanMove(n) + return 0 + +/mob/living/simple_animal/hostile/retaliate/hivebotharvester/bullet_act(var/obj/item/projectile/Proj) + if(istype(Proj, /obj/item/projectile/bullet/pistol/hivebotspike) || istype(Proj, /obj/item/projectile/beam/hivebot)) + Proj.no_attack_log = 1 + return PROJECTILE_CONTINUE + else + return ..(Proj) + +/mob/living/simple_animal/hostile/retaliate/hivebotharvester/emp_act(severity) + LoseTarget() + stance = HOSTILE_STANCE_IDLE + visible_message(SPAN_DANGER("[src] suffers a teleportation malfunction!")) + playsound(src.loc, 'sound/effects/teleport.ogg', 25, 1) + var/turf/random_turf = get_turf(pick(orange(src,7))) + do_teleport(src, random_turf) + +/mob/living/simple_animal/hostile/retaliate/hivebotharvester/think() + ..() + if(!stat) + if(stance == HOSTILE_STANCE_IDLE) + if(last_processed_turf == src.loc) + INVOKE_ASYNC(src, .proc/prospect) + else + INVOKE_ASYNC(src, .proc/process_turf) + else if(busy) + busy = 0 + update_icon() + if(wander) + wander = 0 + +/mob/living/simple_animal/hostile/retaliate/hivebotharvester/proc/process_turf() + if(busy) + return + for(var/obj/O in src.loc) + if(istype(O, /obj/item)) + var/obj/item/I = O + for(I in src.loc) + + if(I.matter) + busy = 1 + update_icon() + src.visible_message(SPAN_NOTICE("[src] begins to harvest \the [I].")) + if(do_after(src, 32)) + src.visible_message(SPAN_WARNING("[src] harvests \the [I].")) + qdel(I) + busy = 0 + update_icon() + continue + + if(istype(O, /obj/item/storage)) + var/obj/item/storage/S = O + src.visible_message(SPAN_NOTICE("[src] begins to rip apart \the [S].")) + busy = 2 + update_icon() + if(do_after(src, 32)) + src.visible_message(SPAN_WARNING("[src] rips \the [S] apart.")) + S.spill(3, src.loc) + qdel(S) + busy = 0 + update_icon() + return + + if(istype(O, /obj/structure/table)) + var/obj/structure/table/TB = O + src.visible_message(SPAN_NOTICE("[src] starts to dismantle \the [TB].")) + busy = 2 + update_icon() + if(do_after(src, 48)) + src.visible_message(SPAN_WARNING("[src] dismantles \the [TB].")) + TB.break_to_parts(1) + busy = 0 + update_icon() + return + + if(istype(O, /obj/structure/bed)) + var/obj/structure/bed/B = O + if(B.can_dismantle) + src.visible_message(SPAN_NOTICE("[src] starts to dismantle \the [B].")) + busy = 2 + update_icon() + if(do_after(src, 48)) + src.visible_message(SPAN_WARNING("[src] dismantles \the [B].")) + B.dismantle() + qdel(B) + busy = 0 + update_icon() + return + + if(istype(O, /obj/item/stool)) + var/obj/item/stool/S = O + src.visible_message(SPAN_NOTICE("[src] starts to dismantle \the [S].")) + busy = 2 + update_icon() + if(do_after(src, 32)) + src.visible_message(SPAN_WARNING("[src] dismantles \the [S].")) + S.dismantle() + busy = 0 + update_icon() + return + + if(istype(O, /obj/effect/decal/cleanable/blood/gibs/robot)) + src.visible_message(SPAN_NOTICE("[src] starts to recycle \the [O].")) + busy = 1 + update_icon() + if(do_after(src, 48)) + src.visible_message(SPAN_WARNING("[src] recycles \the [O].")) + qdel(O) + busy = 0 + update_icon() + continue + + if(istype(O, /obj/structure/cable)) + var/turf/simulated/floor/T = src.loc + if(T.is_plating()) + var/obj/structure/cable/C = O + src.visible_message(SPAN_NOTICE("[src] starts ripping up \the [C].")) + busy = 2 + update_icon() + if(do_after(src, 32)) + src.visible_message(SPAN_WARNING("[src] rips \the [C].")) + if(C.powernet && C.powernet.avail) + spark(src, 3, alldirs) + new/obj/item/stack/cable_coil(T, C.d1 ? 2 : 1, C.color) + qdel(C) + busy = 0 + update_icon() + return + + if(istype(src.loc, /turf/simulated/floor)) + var/turf/simulated/floor/T = src.loc + if(!T.is_plating()) + src.visible_message(SPAN_NOTICE("[src] starts ripping up \the [T].")) + busy = 2 + update_icon() + if(do_after(src, 32)) + src.visible_message(SPAN_WARNING("[src] rips up \the [T].")) + playsound(src.loc, /decl/sound_category/crowbar_sound, 100, 1) + T.make_plating(1) + busy = 0 + update_icon() + return + + last_processed_turf = src.loc + +/mob/living/simple_animal/hostile/retaliate/hivebotharvester/update_icon() + if(busy) + if(busy == 1) + icon_state = "hivebotharvester_harvesting" + else + icon_state = "hivebotharvester_ripping" + else + icon_state = "hivebotharvester" + if(resting || stat == DEAD || busy) + blood_overlay_icon = 'icons/mob/npc/blood_overlay.dmi' + else + blood_overlay_icon = initial(blood_overlay_icon) + handle_blood(TRUE) + +/mob/living/simple_animal/hostile/retaliate/hivebotharvester/proc/prospect() + + var/destination + var/turf/T + + if((!last_prospect_target) || (last_prospect_loc != src.loc)) + destination = pick(cardinal) + T = get_step(src, destination) + last_prospect_target = T + last_prospect_loc = src.loc + busy = 0 + else + T = last_prospect_target + + if(busy) + return + + if(istype(T, /turf/space) || istype(T, /turf/simulated/mineral)) + last_prospect_target = null + last_prospect_loc = null + return + + if(istype(T, /turf/simulated/wall)) + var/turf/simulated/wall/W = T + rapid = 1 + OpenFire(W) + rapid = 0 + return + + for(var/obj/O in T) + if(istype(O, /obj/structure/girder)) + var/obj/structure/girder/G = O + src.visible_message(SPAN_NOTICE("[src] starts to tear \the [O] apart.")) + busy = 1 + if(do_after(src, 32)) + src.do_attack_animation(G) + src.visible_message(SPAN_WARNING("[src] tears \the [O] apart!")) + G.dismantle() + busy = 0 + continue + + if((istype(O, /obj/machinery/door/firedoor) && O.density) || (istype(O, /obj/machinery/door/airlock) && O.density) || istype(O, /obj/machinery/door/blast) && O.density) + var/obj/machinery/door/D = O + if(D.stat & BROKEN) + src.visible_message(SPAN_NOTICE("[src] starts to tear \the [D] open.")) + busy = 1 + if(do_after(src, 48)) + src.visible_message(SPAN_WARNING("[src] tears \the [D] apart!")) + src.do_attack_animation(D) + new /obj/item/stack/material/steel(get_turf(D)) + new /obj/item/stack/material/steel(get_turf(D)) + new /obj/item/stack/material/steel(get_turf(D)) + new /obj/item/stack/material/steel(get_turf(D)) + new /obj/item/stack/material/steel(get_turf(D)) + qdel(D) + busy = 0 + else if(istype(D, /obj/machinery/door/airlock/multi_tile)) + D.attack_generic(src,rand(melee_damage_lower,melee_damage_upper),attacktext) + else + rapid = 1 + OpenFire(D) + rapid = 0 + return + + if(istype(O, /obj/structure/window)) + var/dir = get_dir(T,src.loc) + var/obj/structure/window/W = O + if(W.dir == reverse_dir[dir]) + W.attack_generic(src,rand(melee_damage_lower,melee_damage_upper),attacktext) + else + W.attack_generic(src,rand(melee_damage_lower,melee_damage_upper),attacktext) + return + + if(istype(O, /obj/structure/grille)) + var/obj/structure/grille/G = O + G.attack_generic(src,rand(melee_damage_lower,melee_damage_upper),attacktext) + return + + if(istype(O, /obj/structure/barricade) || istype(O, /obj/structure/closet) || istype(O, /obj/structure/inflatable)) + var/obj/structure/S = O + rapid = 1 + OpenFire(S) + rapid = 0 + return + + if(istype(O, /obj/structure/reagent_dispensers)) + var/obj/structure/reagent_dispensers/RD = O + src.visible_message(SPAN_NOTICE("[src] starts taking apart \the [RD].")) + busy = 1 + if(do_after(src, 48)) + src.do_attack_animation(RD) + RD.reagents.splash_turf(get_turf(RD.loc), RD.reagents.total_volume) + src.visible_message(SPAN_DANGER("[RD] gets torn open, spreading its contents all over the area!")) + new /obj/item/stack/material/steel(get_turf(RD)) + new /obj/item/stack/material/steel(get_turf(RD)) + qdel(RD) + busy = 0 + return + + if(T) + Move(T) + + last_prospect_target = null + last_prospect_loc = null + +/mob/living/simple_animal/hostile/retaliate/hivebotharvester/shoot_wrapper(target, location, user) + target_mob = target + if(see_target()) + Shoot(target, location, user) + target_mob = null + return \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot_harvester_projectiles.dm b/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot_harvester_projectiles.dm new file mode 100644 index 00000000000..c3e9f726725 --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot_harvester_projectiles.dm @@ -0,0 +1,4 @@ +/obj/item/projectile/beam/hivebot/incendiary/heavy + name = "archaic mining laser" + damage = 25 + incinerate = 10 \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot_projectiles.dm b/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot_projectiles.dm new file mode 100644 index 00000000000..ef42671028c --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot_projectiles.dm @@ -0,0 +1,9 @@ +/obj/item/projectile/bullet/pistol/hivebotspike + name = "spike" + damage = 10 + sharp = 1 + embed = 0 + +/obj/item/projectile/bullet/pistol/hivebotspike/needle + name = "needle" + damage = 5 \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 86e595b4e00..1b329374395 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -44,11 +44,10 @@ return ..() /mob/living/simple_animal/hostile/can_name(var/mob/living/M) - if(hostile_nameable) - return ..() - if(faction && faction == M.faction) //In case the mob had a dociler used on it - return ..() - return FALSE + if(!hostile_nameable) + to_chat(M, SPAN_WARNING("\The [src] cannot be renamed.")) + return FALSE + return ..() /mob/living/simple_animal/hostile/proc/FindTarget() @@ -176,6 +175,8 @@ mob/living/simple_animal/hostile/hitby(atom/movable/AM as mob|obj,var/speed = TH setClickCooldown(attack_delay) if(!Adjacent(target_mob)) return + if(!canmove) + return if(!see_target()) LoseTarget() for(var/grab in grabbed_by) @@ -211,6 +212,8 @@ mob/living/simple_animal/hostile/hitby(atom/movable/AM as mob|obj,var/speed = TH /mob/living/simple_animal/hostile/proc/PostAttack(var/atom/target) if(stat) return + if(!isturf(loc)) // no teleporting out of lockers + return for(var/grab in grabbed_by) var/obj/item/grab/G = grab if(G.state >= GRAB_AGGRESSIVE) diff --git a/code/modules/mob/living/simple_animal/hostile/icarus_drone.dm b/code/modules/mob/living/simple_animal/hostile/icarus_drone.dm index 3c3c95844ab..14b0abfa6ef 100644 --- a/code/modules/mob/living/simple_animal/hostile/icarus_drone.dm +++ b/code/modules/mob/living/simple_animal/hostile/icarus_drone.dm @@ -19,7 +19,7 @@ stop_automated_movement_when_pulled = FALSE health = 300 maxHealth = 300 - blood_type = "#000000" + blood_type = COLOR_OIL speed = 8 projectiletype = /obj/item/projectile/beam/drone projectilesound = 'sound/weapons/laser3.ogg' diff --git a/code/modules/mob/living/simple_animal/hostile/morph.dm b/code/modules/mob/living/simple_animal/hostile/morph.dm index 77aad032bd2..5393a90051c 100644 --- a/code/modules/mob/living/simple_animal/hostile/morph.dm +++ b/code/modules/mob/living/simple_animal/hostile/morph.dm @@ -1,5 +1,3 @@ -#define MORPH_COOLDOWN 50 - /mob/living/simple_animal/hostile/morph name = "morph" desc = "A revolting, pulsating pile of flesh." @@ -54,12 +52,13 @@ var/melee_damage_disguised = 0 var/eat_while_disguised = FALSE var/atom/movable/form = null - var/morph_time = 0 var/static/list/blacklist_typecache = typecacheof(list(/obj/screen, /obj/singularity, /mob/living/simple_animal/hostile/morph, /obj/effect, /obj/structure/gore)) /mob/living/simple_animal/hostile/morph/Initialize() . = ..() + verbs += /mob/living/proc/ventcrawl + verbs -= /mob/living/simple_animal/verb/change_name var/list/morph_spells = list(/spell/aoe_turf/conjure/node, /spell/aoe_turf/conjure/nest) for(var/spell in morph_spells) @@ -132,18 +131,15 @@ return TRUE /mob/living/simple_animal/hostile/morph/AltClickOn(atom/movable/A) - if(morph_time <= world.time && !stat) - if(A == src) - restore() - else if(istype(A) && allowed(A)) - assume(A) - else - to_chat(src, SPAN_WARNING("Your chameleon skin is still repairing itself!")) + if(stat) + to_chat(src, SPAN_WARNING("You need to be conscious to do this!")) + return + if(A == src) + restore() + else if(istype(A) && allowed(A)) + assume(A) /mob/living/simple_animal/hostile/morph/proc/assume(atom/movable/target) - if(morphed) - to_chat(src, SPAN_WARNING("You must restore to your original form first!")) - return morphed = TRUE form = target visible_message(SPAN_WARNING("\The [src] suddenly twists and changes shape, becoming a copy of \the [target]!"), SPAN_NOTICE("You twist your body and assume the form of \the [target].")) @@ -159,9 +155,6 @@ speed = 1 mob_size = MOB_MINISCULE - morph_time = world.time + MORPH_COOLDOWN - return - /mob/living/simple_animal/hostile/morph/proc/restore() if(!morphed) to_chat(src, SPAN_WARNING("You're already in your normal form!")) @@ -187,8 +180,6 @@ speed = 2.5 mob_size = 15 - morph_time = world.time + MORPH_COOLDOWN - /mob/living/simple_animal/hostile/morph/death(gibbed) if(morphed) visible_message(SPAN_WARNING("\The [src] twists and dissolves into a pile of green flesh!"), SPAN_DANGER("Your skin ruptures! Your flesh breaks apart! No disguise can ward off de--")) @@ -204,8 +195,7 @@ /mob/living/simple_animal/hostile/morph/UnarmedAttack(atom/A, proximity) if(morphed && !melee_damage_disguised) - to_chat(src, SPAN_WARNING("You can't attack while disguised!")) - return + restore() if(isliving(A)) //Eat Corpses to regen health var/mob/living/L = A if(L.stat == DEAD) diff --git a/code/modules/mob/living/simple_animal/hostile/pra.dm b/code/modules/mob/living/simple_animal/hostile/pra.dm index d8c90dc9078..a90dd9c625b 100644 --- a/code/modules/mob/living/simple_animal/hostile/pra.dm +++ b/code/modules/mob/living/simple_animal/hostile/pra.dm @@ -9,7 +9,7 @@ icon_state = "republicon" icon_living = "republicon" icon_dead = "republicon_dead" - blood_type = "#000000" + blood_type = COLOR_OIL speak_chance = 5 turns_per_move = 3 organ_names = list("chest", "lower body", "left arm", "right arm", "left leg", "right leg", "head") @@ -63,7 +63,7 @@ /mob/living/simple_animal/hostile/republicon/Initialize() . = ..() add_language(LANGUAGE_SIIK_MAAS) - set_default_language(LANGUAGE_SIIK_MAAS) + set_default_language(all_languages[LANGUAGE_SIIK_MAAS]) /mob/living/simple_animal/hostile/republicon/do_animate_chat(var/message, var/datum/language/language, var/small, var/list/show_to, var/duration, var/list/message_override) INVOKE_ASYNC(src, /atom/movable/proc/animate_chat, message, language, small, show_to, duration) diff --git a/code/modules/mob/living/simple_animal/hostile/rogue_maint_drone.dm b/code/modules/mob/living/simple_animal/hostile/rogue_maint_drone.dm index 43b46a0a1e7..af50c12a5e4 100644 --- a/code/modules/mob/living/simple_animal/hostile/rogue_maint_drone.dm +++ b/code/modules/mob/living/simple_animal/hostile/rogue_maint_drone.dm @@ -3,7 +3,7 @@ desc = "A small robot. It looks angry." icon = 'icons/mob/robots.dmi' icon_state = "repairbot" - blood_type = "#000000" + blood_type = COLOR_OIL speak = list("Removing organic waste.", "Pest control in progress.", "Engaging self-preservation protocols.", "Moving to eject unauthorized personnel.") speak_emote = list("blares", "buzzes", "beeps") speak_chance = 1 diff --git a/code/modules/mob/living/simple_animal/shade.dm b/code/modules/mob/living/simple_animal/shade.dm index 1720b90f519..8143229ca64 100644 --- a/code/modules/mob/living/simple_animal/shade.dm +++ b/code/modules/mob/living/simple_animal/shade.dm @@ -29,7 +29,7 @@ faction = "cult" status_flags = CANPUSH hunger_enabled = 0 - appearance_flags = NO_CLIENT_COLOR + appearance_flags = NO_CLIENT_COLOR|KEEP_TOGETHER var/obj/item/residue = /obj/item/ectoplasm /mob/living/simple_animal/shade/cultify() @@ -41,6 +41,11 @@ new residue(loc) qdel(src) +/mob/living/simple_animal/shade/ghostize() + . = ..() + if(!QDELETED(src) && stat != DEAD) + SSghostroles.add_spawn_atom("shade", src) + /mob/living/simple_animal/shade/can_name(var/mob/living/M) return FALSE @@ -52,6 +57,7 @@ var/obj/item/device/soulstone/S = O; S.transfer_soul("SHADE", src, user) return + return ..() /mob/living/simple_animal/shade/can_fall() return FALSE diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index b94d5f1a12b..a8f8f4249fd 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -26,6 +26,11 @@ var/blood_state = BLOOD_NONE var/image/blood_overlay + var/bleeding = FALSE + var/blood_amount = 50 // set a limit to the amount of blood it can bleed, otherwise it will keep bleeding forever and crunk the server + var/previous_bleed_timer = 0 // they only bleed for as many seconds as force damage was applied to them + var/blood_timer_mod = 1 // tweak to change the amount of seconds a mob will bleed + var/list/speak = list() var/speak_chance = 0 var/list/emote_hear = list() //Hearable emotes @@ -201,7 +206,7 @@ if(health > maxHealth) health = maxHealth - handle_blood_overlay() + handle_blood() handle_stunned() handle_weakened() handle_paralysed() @@ -329,10 +334,13 @@ if(purge) purge -= 1 -/mob/living/simple_animal/proc/handle_blood_overlay(var/force_reset = FALSE) +/mob/living/simple_animal/proc/handle_blood(var/force_reset = FALSE) if(!blood_overlay_icon) return + if(blood_amount <= 0 && stat != DEAD) + death() + var/current_blood_state = blood_state var/blood_mod = health / maxHealth if(blood_mod > 0.9) @@ -344,6 +352,18 @@ else blood_state = BLOOD_HEAVY + if(bleeding) + switch(blood_state) + if(BLOOD_LIGHT) + blood_splatter(src, null, FALSE, sourceless_color = blood_type) + blood_amount-- + if(BLOOD_MEDIUM) + blood_splatter(src, null, TRUE, sourceless_color = blood_type) + blood_amount -= 2 + if(BLOOD_HEAVY) + blood_splatter(src, null, TRUE, sourceless_color = blood_type) + blood_amount -= 3 + if(force_reset || current_blood_state != blood_state) if(blood_overlay) cut_overlay(blood_overlay) @@ -429,15 +449,6 @@ var/can_ghosts_hear = client ? GHOSTS_ALL_HEAR : ONLY_GHOSTS_IN_VIEW custom_emote(AUDIBLE_MESSAGE, act_desc, can_ghosts_hear) -/* -mob/living/simple_animal/bullet_act(var/obj/item/projectile/Proj) - if(!Proj || Proj.nodamage) - return - - adjustBruteLoss(Proj.damage) - return 0 -*/ - /mob/living/simple_animal/attack_hand(mob/living/carbon/human/M as mob) ..() switch(M.a_intent) @@ -480,9 +491,21 @@ mob/living/simple_animal/bullet_act(var/obj/item/projectile/Proj) return /mob/living/simple_animal/proc/unarmed_harm_attack(var/mob/living/carbon/human/user) + if(istype(user)) + var/datum/unarmed_attack/attack = user.get_unarmed_attack(src) + if(!attack) + simple_harm_attack(user) + return + attack.show_attack_simple(user, src, pick(organ_names)) + apply_damage(attack.get_unarmed_damage(user), attack.damage_type) + user.do_attack_animation(src, FIST_ATTACK_ANIMATION) + return + simple_harm_attack(user) + +/mob/living/simple_animal/proc/simple_harm_attack(var/mob/living/user) apply_damage(harm_intent_damage, BRUTE, used_weapon = "Attack by [user.name]") user.visible_message(SPAN_WARNING("\The [user] [response_harm] \the [src]!"), SPAN_WARNING("You [response_harm] \the [src]!")) - user.do_attack_animation(src) + user.do_attack_animation(src, FIST_ATTACK_ANIMATION) poke(TRUE) /mob/living/simple_animal/attackby(obj/item/O, mob/user) @@ -546,16 +569,34 @@ mob/living/simple_animal/bullet_act(var/obj/item/projectile/Proj) poke() visible_message(SPAN_DANGER("\The [src] has been attacked with \the [O] by \the [user].")) - user.do_attack_animation(src) + if(O.hitsound) + playsound(loc, O.hitsound, O.get_clamped_volume(), 1, -1) + user.do_attack_animation(src, O) return TRUE /mob/living/simple_animal/apply_damage(damage, damagetype, def_zone, blocked, used_weapon, damage_flags, armor_pen, silent = FALSE) . = ..() - handle_blood_overlay() + handle_bleeding_timer(damage) + handle_blood() + +/mob/living/simple_animal/proc/handle_bleeding_timer(var/damage_inflicted) + if(QDELETED(src)) // robotic mobs explode before this runs + return + if(!blood_overlay_icon) // no blood, don't bother + return + if(damage_inflicted <= 0) // just to be safe + return + if(!bleeding || previous_bleed_timer <= damage_inflicted) + bleeding = TRUE + previous_bleed_timer = damage_inflicted + addtimer(CALLBACK(src, .proc/stop_bleeding), (damage_inflicted SECONDS) * blood_timer_mod, TIMER_UNIQUE | TIMER_OVERRIDE) + +/mob/living/simple_animal/proc/stop_bleeding() + bleeding = FALSE /mob/living/simple_animal/heal_organ_damage(var/brute, var/burn) . = ..() - handle_blood_overlay() + handle_blood() /mob/living/simple_animal/movement_delay() var/tally = 0 //Incase I need to add stuff other than "speed" later @@ -662,8 +703,9 @@ mob/living/simple_animal/bullet_act(var/obj/item/projectile/Proj) set category = "IC" set src in view(1) - var/mob/living/M = usr - if(!M) + var/mob/living/carbon/M = usr + if(!istype(M)) + to_chat(usr, SPAN_WARNING("You aren't allowed to rename \the [src].")) return if(can_name(M)) diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index 913cf815e0c..98cf918cd09 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -82,7 +82,10 @@ eyeobj.possess(src) //set macro to normal incase it was overriden (like cyborg currently does) - winset(src, null, "mainwindow.macro=macro input.focus=true input.background-color=#D3B5B5") + if(client.prefs.toggles_secondary & HOTKEY_DEFAULT) + winset(src, null, "mainwindow.macro=hotkeymode hotkey_toggle.is-checked=true mapwindow.map.focus=true input.background-color=#D3B5B5") + else + winset(src, null, "mainwindow.macro=macro hotkey_toggle.is-checked=false input.focus=true input.background-color=#D3B5B5") MOB_STOP_THINKING(src) update_client_color() diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 6ad1ea8e798..307be9f0f0e 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -873,10 +873,13 @@ stat("Failsafe Controller:", "ERROR") if (Master) stat(null, "- Subsystems -") + var/amt = 0 for(var/datum/controller/subsystem/SS in Master.subsystems) if (!Master.initializing && SS.flags & SS_NO_DISPLAY) continue - + if(amt >= 70) + break + amt++ SS.stat_entry() if(listed_turf && client) diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index 355e2cd4b09..c0a3fada1ed 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -325,7 +325,7 @@ //This is used to make sure the victim hasn't managed to yackety sax away before using the grab. /obj/item/grab/proc/confirm() - if(!assailant || !affecting) + if(!assailant || !affecting || QDELETED(affecting)) qdel(src) return 0 diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index bb0844d244c..eb62849b4aa 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -1191,6 +1191,7 @@ proc/is_blind(A) /mob/assign_player(var/mob/user) ckey = user.ckey + resting = FALSE // ghosting sets resting to true return src /mob/proc/get_standard_pixel_x() @@ -1228,3 +1229,6 @@ proc/is_blind(A) if(G.state >= GRAB_NECK) return TRUE return FALSE + +/mob/get_cell() + return FALSE \ No newline at end of file diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 624e934aa87..dfd552a56dd 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -299,10 +299,12 @@ // Apply human specific modifiers. var/mob_is_human = ishuman(mob) // Only check this once and just reuse the value. + var/sprint_tally = 0 if (mob_is_human) var/mob/living/carbon/human/H = mob //If we're sprinting and able to continue sprinting, then apply the sprint bonus ontop of this - if (H.m_intent == M_RUN && (H.status_flags & GODMODE || H.species.handle_sprint_cost(H, tally))) //This will return false if we collapse from exhaustion + if (H.m_intent == M_RUN && (H.status_flags & GODMODE || H.species.handle_sprint_cost(H, tally, TRUE))) //This will return false if we collapse from exhaustion + sprint_tally = tally tally = (tally / (1 + H.sprint_speed_factor)) * config.run_delay_multiplier else tally = max(tally * config.walk_delay_multiplier, H.min_walk_delay) //clamp walking speed if its limited @@ -327,6 +329,8 @@ move_delay += 1 return mob.pulledby.relaymove(mob, direct) + var/old_loc = mob.loc + //We are now going to move moving = 1 //Something with pulling things @@ -377,6 +381,10 @@ moving = 0 + if(sprint_tally && mob.loc != old_loc) + var/mob/living/carbon/human/H = mob + H.species.handle_sprint_cost(H, sprint_tally, FALSE) + if(isobj(mob.loc) || ismob(mob.loc)) //Inside an object, tell it we moved var/atom/O = mob.loc return O.relaymove(mob, direct) diff --git a/code/modules/modular_computers/computers/subtypes/dev_wristbound.dm b/code/modules/modular_computers/computers/subtypes/dev_wristbound.dm index 275d12bbfec..6d94dd2035b 100644 --- a/code/modules/modular_computers/computers/subtypes/dev_wristbound.dm +++ b/code/modules/modular_computers/computers/subtypes/dev_wristbound.dm @@ -48,8 +48,8 @@ switch(over_object.name) if("right hand") usr.u_equip(src) - usr.put_in_r_hand(src) + usr.equip_to_slot_if_possible(src, slot_r_hand) if("left hand") usr.u_equip(src) - usr.put_in_l_hand(src) + usr.equip_to_slot_if_possible(src, slot_l_hand) add_fingerprint(usr) diff --git a/code/modules/modular_computers/file_system/programs/security/camera.dm b/code/modules/modular_computers/file_system/programs/security/camera.dm index 8e386ec8870..81510ab1e83 100644 --- a/code/modules/modular_computers/file_system/programs/security/camera.dm +++ b/code/modules/modular_computers/file_system/programs/security/camera.dm @@ -129,6 +129,11 @@ user.machine = ui_host() user.reset_view(current_camera) check_eye(user) + + if(ishuman(user)) + var/mob/living/carbon/human/H = user + H.handle_vision() + return TRUE /datum/nano_module/camera_monitor/proc/set_current(var/obj/machinery/camera/C) diff --git a/code/modules/nano/modules/human_appearance.dm b/code/modules/nano/modules/human_appearance.dm index 9482f943397..0c4e3a7c203 100644 --- a/code/modules/nano/modules/human_appearance.dm +++ b/code/modules/nano/modules/human_appearance.dm @@ -1,9 +1,14 @@ -/datum/nano_module/appearance_changer - name = "Appearance Editor" - available_to_ai = FALSE +/datum/vueui_module/appearance_changer + var/name = "Appearance Changer" var/flags = APPEARANCE_ALL_HAIR - var/mob/living/carbon/human/owner = null + + var/datum/topic_state/ui_state + var/datum/state_object + + var/datum/weakref/target_human var/list/valid_species = list() + var/list/valid_genders = list() + var/list/valid_pronouns = list() var/list/valid_hairstyles = list() var/list/valid_facial_hairstyles = list() var/list/valid_accents = list() @@ -13,37 +18,49 @@ var/list/whitelist var/list/blacklist -/datum/nano_module/appearance_changer/New(var/location, var/mob/living/carbon/human/H, var/check_species_whitelist = 1, var/list/species_whitelist = list(), var/list/species_blacklist = list()) +/datum/vueui_module/appearance_changer/New(var/mob/living/carbon/human/H, var/check_species_whitelist = 1, var/list/species_whitelist = list(), var/list/species_blacklist = list(), var/datum/topic_state/set_ui_state = interactive_state, var/datum/set_state_object = null) ..() - owner = H + ui_state = set_ui_state + state_object = set_state_object + target_human = WEAKREF(H) src.check_whitelist = check_species_whitelist src.whitelist = species_whitelist src.blacklist = species_blacklist + generate_data(check_whitelist, whitelist, blacklist) -/datum/nano_module/appearance_changer/Topic(ref, href_list, var/datum/topic_state/state = default_state) +/datum/vueui_module/appearance_changer/Topic(ref, href_list, var/datum/topic_state/state = ui_state) if(..()) return 1 + var/mob/living/carbon/human/owner = target_human.resolve() + if(!istype(owner)) + return FALSE + if(href_list["race"]) if(can_change(APPEARANCE_RACE) && (href_list["race"] in valid_species)) if(owner.change_species(href_list["race"])) - cut_and_generate_data() + clear_and_generate_data() return 1 if(href_list["gender"]) if(can_change(APPEARANCE_GENDER)) if(owner.change_gender(href_list["gender"])) - cut_and_generate_data() + clear_and_generate_data() return 1 + if(href_list["pronouns"]) + if(can_change(APPEARANCE_GENDER)) + owner.pronouns = href_list["pronouns"] + clear_and_generate_data() + return 1 if(href_list["skin_tone"]) if(can_change_skin_tone()) var/new_s_tone = input(usr, "Choose your character's skin-tone:\n(Light 30 - 220 Dark)", "Skin Tone", -owner.s_tone + 35) as num|null - if(isnum(new_s_tone) && can_still_topic(state)) + if(isnum(new_s_tone)) new_s_tone = 35 - max(min( round(new_s_tone), 220),30) return owner.change_skin_tone(new_s_tone) if(href_list["skin_color"]) if(can_change_skin_color()) var/new_skin = input(usr, "Choose your character's skin colour: ", "Skin Color", rgb(owner.r_skin, owner.g_skin, owner.b_skin)) as color|null - if(new_skin && can_still_topic(state)) + if(new_skin) var/r_skin = hex2num(copytext(new_skin, 2, 4)) var/g_skin = hex2num(copytext(new_skin, 4, 6)) var/b_skin = hex2num(copytext(new_skin, 6, 8)) @@ -53,7 +70,7 @@ if(href_list["skin_preset"]) if(can_change_skin_preset()) var/new_preset = input(usr, "Choose your character's body color preset:", "Character Preference", rgb(owner.r_skin, owner.g_skin, owner.b_skin)) as null|anything in owner.species.character_color_presets - if(new_preset && can_still_topic(state)) + if(new_preset) new_preset = owner.species.character_color_presets[new_preset] var/r_skin = GetRedPart(new_preset) var/g_skin = GetGreenPart(new_preset) @@ -69,7 +86,7 @@ if(href_list["hair_color"]) if(can_change(APPEARANCE_HAIR_COLOR)) var/new_hair = input("Please select hair color.", "Hair Color", rgb(owner.r_hair, owner.g_hair, owner.b_hair)) as color|null - if(new_hair && can_still_topic(state)) + if(new_hair) var/r_hair = hex2num(copytext(new_hair, 2, 4)) var/g_hair = hex2num(copytext(new_hair, 4, 6)) var/b_hair = hex2num(copytext(new_hair, 6, 8)) @@ -84,7 +101,7 @@ if(href_list["facial_hair_color"]) if(can_change(APPEARANCE_FACIAL_HAIR_COLOR)) var/new_facial = input("Please select facial hair color.", "Facial Hair Color", rgb(owner.r_facial, owner.g_facial, owner.b_facial)) as color|null - if(new_facial && can_still_topic(state)) + if(new_facial) var/r_facial = hex2num(copytext(new_facial, 2, 4)) var/g_facial = hex2num(copytext(new_facial, 4, 6)) var/b_facial = hex2num(copytext(new_facial, 6, 8)) @@ -94,7 +111,7 @@ if(href_list["eye_color"]) if(can_change(APPEARANCE_EYE_COLOR)) var/new_eyes = input("Please select eye color.", "Eye Color", rgb(owner.r_eyes, owner.g_eyes, owner.b_eyes)) as color|null - if(new_eyes && can_still_topic(state)) + if(new_eyes) var/r_eyes = hex2num(copytext(new_eyes, 2, 4)) var/g_eyes = hex2num(copytext(new_eyes, 4, 6)) var/b_eyes = hex2num(copytext(new_eyes, 6, 8)) @@ -104,114 +121,127 @@ if(href_list["accent"]) if(can_change(APPEARANCE_ACCENT) && (href_list["accent"] in valid_accents)) if(owner.set_accent(href_list["accent"])) - cut_and_generate_data() + clear_and_generate_data() return 1 if(href_list["language"]) if(can_change(APPEARANCE_LANGUAGE) && (href_list["language"] in valid_languages)) if(owner.add_or_remove_language(href_list["language"])) - cut_and_generate_data() + clear_and_generate_data() return 1 return 0 -/datum/nano_module/appearance_changer/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state) - if(!owner || !owner.species) +/datum/vueui_module/appearance_changer/ui_interact(var/mob/user) + var/datum/vueui/ui = SSvueui.get_open_ui(user, src) + if(!ui) + ui = new(user, src, "misc-appearancechanger", 800, 450, name, state = ui_state, set_state_object = state_object) + ui.open() + +/datum/vueui_module/appearance_changer/vueui_data_change(var/list/data, var/mob/user, var/datum/vueui/ui) + if(!data) + data = list() + + var/mob/living/carbon/human/owner = target_human.resolve() + if(!istype(owner)) + to_chat(user, SPAN_WARNING("We couldn't find you, closing.")) + ui.close() return - generate_data(check_whitelist, whitelist, blacklist) - var/list/data = host.initial_data() - - data["specimen"] = owner.species.name - data["gender"] = owner.gender + data["owner_species"] = owner.species.name data["change_race"] = can_change(APPEARANCE_RACE) - if(data["change_race"]) - var/list/species = list() - for(var/specimen in valid_species) - species[++species.len] = list("specimen" = specimen) - data["species"] = species + data["valid_species"] = valid_species + data["owner_gender"] = owner.gender + data["owner_pronouns"] = owner.pronouns data["change_gender"] = can_change(APPEARANCE_GENDER) - data["accent"] = owner.accent - data["change_accent"] = can_change(APPEARANCE_GENDER) - if(data["change_accent"]) - var/list/accents = list() - for(var/accent in valid_accents) - accents[++accents.len] = list("accent" = accent) - data["accents"] = accents + data["valid_gender"] = valid_genders + data["valid_pronouns"] = valid_pronouns + + data["owner_accent"] = owner.accent + data["change_accent"] = can_change(APPEARANCE_ACCENT) + data["valid_accents"] = valid_accents var/list/owner_languages = list() for(var/datum/language/L in owner.languages) owner_languages += L.name data["owner_languages"] = owner_languages - data["change_language"] = can_change(APPEARANCE_GENDER) - if(data["change_language"]) - var/list/languages = list() - for(var/language in valid_languages) - languages[++languages.len] = list("language" = language) - data["languages"] = languages + data["change_language"] = can_change(APPEARANCE_LANGUAGE) + data["valid_languages"] = valid_languages data["change_skin_tone"] = can_change_skin_tone() data["change_skin_color"] = can_change_skin_color() data["change_skin_preset"] = can_change_skin_preset() data["change_eye_color"] = can_change(APPEARANCE_EYE_COLOR) + data["change_hair"] = can_change(APPEARANCE_HAIR) - if(data["change_hair"]) - var/list/hair_styles = list() - for(var/hair_style in valid_hairstyles) - hair_styles[++hair_styles.len] = list("hairstyle" = hair_style) - data["hair_styles"] = hair_styles - data["hair_style"] = owner.h_style + data["owner_hair_style"] = owner.h_style + data["valid_hair_styles"] = valid_hairstyles data["change_facial_hair"] = can_change(APPEARANCE_FACIAL_HAIR) - if(data["change_facial_hair"]) - var/list/facial_hair_styles = list() - for(var/facial_hair_style in valid_facial_hairstyles) - facial_hair_styles[++facial_hair_styles.len] = list("facialhairstyle" = facial_hair_style) - data["facial_hair_styles"] = facial_hair_styles - data["facial_hair_style"] = owner.f_style + data["owner_facial_hair_style"] = owner.f_style + data["valid_facial_hair_styles"] = valid_facial_hairstyles data["change_hair_color"] = can_change(APPEARANCE_HAIR_COLOR) data["change_facial_hair_color"] = can_change(APPEARANCE_FACIAL_HAIR_COLOR) - ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "appearance_changer.tmpl", "[src]", 800, 450, state = state) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) -/datum/nano_module/appearance_changer/proc/update_dna() + return data + +/datum/vueui_module/appearance_changer/proc/update_dna() + var/mob/living/carbon/human/owner = target_human.resolve() + if(!istype(owner)) + return FALSE if(owner && (flags & APPEARANCE_UPDATE_DNA)) owner.update_dna() -/datum/nano_module/appearance_changer/proc/can_change(var/flag) +/datum/vueui_module/appearance_changer/proc/can_change(var/flag) + var/mob/living/carbon/human/owner = target_human.resolve() + if(!istype(owner)) + return FALSE return owner && (flags & flag) -/datum/nano_module/appearance_changer/proc/can_change_skin_tone() +/datum/vueui_module/appearance_changer/proc/can_change_skin_tone() + var/mob/living/carbon/human/owner = target_human.resolve() + if(!istype(owner)) + return FALSE return owner && (flags & APPEARANCE_SKIN) && owner.species.appearance_flags & HAS_SKIN_TONE -/datum/nano_module/appearance_changer/proc/can_change_skin_color() +/datum/vueui_module/appearance_changer/proc/can_change_skin_color() + var/mob/living/carbon/human/owner = target_human.resolve() + if(!istype(owner)) + return FALSE return owner && (flags & APPEARANCE_SKIN) && owner.species.appearance_flags & HAS_SKIN_COLOR -/datum/nano_module/appearance_changer/proc/can_change_skin_preset() +/datum/vueui_module/appearance_changer/proc/can_change_skin_preset() + var/mob/living/carbon/human/owner = target_human.resolve() + if(!istype(owner)) + return FALSE return owner && (flags & APPEARANCE_SKIN) && owner.species.appearance_flags & HAS_SKIN_PRESET -/datum/nano_module/appearance_changer/proc/cut_and_generate_data() +/datum/vueui_module/appearance_changer/proc/clear_and_generate_data() // Making the assumption that the available species remain constant - valid_facial_hairstyles.Cut() - valid_facial_hairstyles.Cut() - valid_accents.Cut() - valid_languages.Cut() + valid_genders = list() + valid_pronouns = list() + valid_hairstyles = list() + valid_facial_hairstyles = list() + valid_accents = list() + valid_languages = list() generate_data() -/datum/nano_module/appearance_changer/proc/generate_data() - if(!owner) - return +/datum/vueui_module/appearance_changer/proc/generate_data() + var/mob/living/carbon/human/owner = target_human.resolve() + if(!istype(owner)) + return FALSE if(!length(valid_species)) valid_species = owner.generate_valid_species(check_whitelist, whitelist, blacklist) + if(!length(valid_genders) && length(owner.species.default_genders)) + valid_genders = owner.species.default_genders.Copy() + if(!length(valid_pronouns) && length(owner.species.selectable_pronouns)) + valid_pronouns = owner.species.selectable_pronouns.Copy() if(!length(valid_hairstyles) || !length(valid_facial_hairstyles)) valid_hairstyles = owner.generate_valid_hairstyles(check_gender = 1) + if(!length(valid_facial_hairstyles)) valid_facial_hairstyles = owner.generate_valid_facial_hairstyles() - if(!length(valid_accents)) - valid_accents = owner.generate_valid_accent() + if(!length(valid_accents) && length(owner.species.allowed_accents)) + valid_accents = owner.species.allowed_accents.Copy() if(!length(valid_languages)) - valid_languages = owner.generate_valid_languages() + valid_languages = owner.generate_valid_languages() \ No newline at end of file diff --git a/code/modules/organs/blood.dm b/code/modules/organs/blood.dm index 85ac869ff16..1db75fffac1 100644 --- a/code/modules/organs/blood.dm +++ b/code/modules/organs/blood.dm @@ -217,10 +217,12 @@ proc/blood_incompatible(donor,receiver,donor_species,receiver_species) data["dose_chem"] = chem_doses.Copy() return data -proc/blood_splatter(var/target, var/source, var/large, var/spray_dir) +proc/blood_splatter(var/target, var/source, var/large, var/spray_dir, var/sourceless_color) var/obj/effect/decal/cleanable/blood/splatter var/decal_type = /obj/effect/decal/cleanable/blood/splatter + if(sourceless_color == COLOR_OIL) + decal_type = /obj/effect/decal/cleanable/blood/oil/streak var/turf/T = get_turf(target) // Are we dripping or splattering? @@ -229,8 +231,10 @@ proc/blood_splatter(var/target, var/source, var/large, var/spray_dir) for(var/obj/effect/decal/cleanable/blood/drip/drop in T) drips |= drop.drips qdel(drop) - if(!large && drips.len < 3) + if(!large && length(drips) < 3) decal_type = /obj/effect/decal/cleanable/blood/drip + if(sourceless_color == COLOR_OIL) + decal_type = /obj/effect/decal/cleanable/blood/drip/oil // Find a blood decal or create a new one. if(T) @@ -255,6 +259,11 @@ proc/blood_splatter(var/target, var/source, var/large, var/spray_dir) else if(isatom(source)) var/atom/donor = source blood_data = REAGENT_DATA(donor.reagents, /decl/reagent/blood) + else if(!source) + if(sourceless_color) + splatter.basecolor = sourceless_color + splatter.update_icon() + return splatter if(!islist(blood_data)) return splatter diff --git a/code/modules/organs/internal/brain.dm b/code/modules/organs/internal/brain.dm index ae576998854..bf9dcef8b7c 100644 --- a/code/modules/organs/internal/brain.dm +++ b/code/modules/organs/internal/brain.dm @@ -19,7 +19,6 @@ relative_size = 85 var/mob/living/carbon/brain/brainmob = null - var/list/datum/brain_trauma/traumas = list() var/lobotomized = 0 var/can_lobotomize = 1 @@ -44,11 +43,6 @@ /obj/item/organ/internal/brain/removed(var/mob/living/user) - for(var/X in traumas) - var/datum/brain_trauma/BT = X - BT.on_lose(TRUE) - BT.owner = null - var/mob/living/simple_animal/borer/borer = owner.has_brain_worms() if(borer) @@ -70,12 +64,6 @@ brainmob.mind.transfer_to(target) else target.key = brainmob.key - - for(var/X in traumas) - var/datum/brain_trauma/BT = X - BT.owner = owner - BT.on_gain() - ..() /obj/item/organ/internal/brain/getToxLoss() @@ -217,51 +205,6 @@ /obj/item/organ/internal/brain/get_scarring_level() . = (species.total_health - max_damage)/species.total_health -////////////////////////////////////TRAUMAS//////////////////////////////////////// - -/obj/item/organ/internal/brain/proc/has_trauma_type(brain_trauma_type, consider_permanent = FALSE) - for(var/X in traumas) - var/datum/brain_trauma/BT = X - if(istype(BT, brain_trauma_type) && (consider_permanent || !BT.permanent)) - return BT - - -//Add a specific trauma -/obj/item/organ/internal/brain/proc/gain_trauma(datum/brain_trauma/trauma, permanent = FALSE, list/arguments) - var/trauma_type - if(ispath(trauma)) - trauma_type = trauma - traumas += new trauma_type(arglist(list(src, permanent) + arguments)) - else - traumas += trauma - trauma.permanent = permanent - -//Add a random trauma of a certain subtype -/obj/item/organ/internal/brain/proc/gain_trauma_type(brain_trauma_type = /datum/brain_trauma, permanent = FALSE) - var/list/datum/brain_trauma/possible_traumas = list() - for(var/T in subtypesof(brain_trauma_type)) - var/datum/brain_trauma/BT = T - if(initial(BT.can_gain)) - possible_traumas += BT - - var/trauma_type = pick(possible_traumas) - traumas += new trauma_type(src, permanent) - -//Cure a random trauma of a certain subtype -/obj/item/organ/internal/brain/proc/cure_trauma_type(brain_trauma_type, cure_permanent = FALSE) - var/datum/brain_trauma/trauma = has_trauma_type(brain_trauma_type) - if(trauma && (cure_permanent || !trauma.permanent)) - qdel(trauma) - -/obj/item/organ/internal/brain/proc/cure_all_traumas(cure_permanent = FALSE, cure_type = "") - for(var/X in traumas) - var/datum/brain_trauma/trauma = X - if(trauma.cure_type == cure_type || cure_type == CURE_ADMIN) - if(cure_permanent || !trauma.permanent) - qdel(trauma) - if(cure_type != CURE_ADMIN) - break - //Miscellaneous /obj/item/organ/internal/brain/proc/clear_screen() diff --git a/code/modules/organs/internal/species/tajara.dm b/code/modules/organs/internal/species/tajara.dm index 21aaf85e7f5..edc8784c22d 100644 --- a/code/modules/organs/internal/species/tajara.dm +++ b/code/modules/organs/internal/species/tajara.dm @@ -61,10 +61,18 @@ if(!owner) return - to_chat(owner, SPAN_WARNING("Your eyes burn with the intense light of the flash!")) - owner.Weaken(5) - disable_night_vision() - owner.last_special = world.time + 100 + if(night_vision) + to_chat(owner, SPAN_WARNING("Your eyes burn with the intense light of the flash!")) + owner.Weaken(5) + disable_night_vision() + owner.last_special = world.time + 100 + +/obj/item/organ/internal/eyes/night/proc/can_change_invisible() + if(owner.client && ((owner.client.view != world.view) || (owner.client.pixel_x != 0) || (owner.client.pixel_y != 0))) //using binoculars + return FALSE + if(owner.machine && owner.machine.check_eye(owner) >= 0 && owner.client.eye != owner) //using cameras + return FALSE + return TRUE /obj/item/organ/internal/eyes/night/proc/enable_night_vision() if(!owner) @@ -80,8 +88,8 @@ owner.visible_message("[owner][eye_emote]") night_vision = TRUE - owner.stop_sight_update = TRUE - owner.see_invisible = SEE_INVISIBLE_NOLIGHTING + if(can_change_invisible()) + owner.set_see_invisible(SEE_INVISIBLE_NOLIGHTING) if(status & ORGAN_ROBOT) owner.add_client_color(vision_mechanical_color) else @@ -93,7 +101,8 @@ if(!night_vision) return night_vision = FALSE - owner.stop_sight_update = FALSE + if(can_change_invisible()) + owner.set_see_invisible(SEE_INVISIBLE_LIVING) if(status & ORGAN_ROBOT) owner.remove_client_color(vision_mechanical_color) else diff --git a/code/modules/organs/internal/stomach.dm b/code/modules/organs/internal/stomach.dm index 69f8b2b3cfe..3f65e250189 100644 --- a/code/modules/organs/internal/stomach.dm +++ b/code/modules/organs/internal/stomach.dm @@ -23,7 +23,7 @@ /obj/item/organ/internal/stomach/Initialize() . = ..() - ingested = new /datum/reagents/metabolism(240, owner, CHEM_INGEST) + ingested = new /datum/reagents/metabolism(stomach_volume, owner, CHEM_INGEST) if(!ingested.my_atom) ingested.my_atom = src if(species && species.gluttonous) @@ -110,11 +110,10 @@ if(functioning) for(var/mob/living/M in contents) if(M.stat == DEAD) - addtimer(CALLBACK(src, .proc/digest_mob, M), 30 SECONDS, TIMER_UNIQUE) + addtimer(CALLBACK(src, .proc/digest_mob, M), 5 MINUTES, TIMER_UNIQUE) - M.adjustBruteLoss(3) - M.adjustFireLoss(3) - M.adjustToxLoss(3) + M.adjustBruteLoss(2) + M.adjustFireLoss(2) var/digestion_product = M.get_digestion_product() if(digestion_product) diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm index d9cf814b36a..b7485dd3938 100644 --- a/code/modules/organs/organ.dm +++ b/code/modules/organs/organ.dm @@ -287,6 +287,34 @@ /obj/item/organ/proc/is_infected() return (germ_level >= INFECTION_LEVEL_ONE) +/obj/item/organ/proc/estimated_infection_level() + if(germ_level < INFECTION_LEVEL_ONE) + return "Healthy" + else if(germ_level >= INFECTION_LEVEL_ONE && germ_level < INFECTION_LEVEL_TWO) + return "Infection Level One" + else if(germ_level >= INFECTION_LEVEL_TWO && germ_level < INFECTION_LEVEL_THREE) + return "Infection Level Two" + else + return "Infection Level Three" + +/obj/item/organ/proc/increase_germ_level() + switch(estimated_infection_level()) + if("Healthy") + germ_level = INFECTION_LEVEL_ONE + if("Infection Level One") + germ_level = INFECTION_LEVEL_TWO + if("Infection Level Two") + germ_level = INFECTION_LEVEL_THREE + +/obj/item/organ/proc/decrease_germ_level() + switch(estimated_infection_level()) + if("Infection Level One") + germ_level = 0 + if("Infection Level Two") + germ_level = INFECTION_LEVEL_ONE + if("Infection Level Three") + germ_level = INFECTION_LEVEL_TWO + //Germs /obj/item/organ/proc/handle_antibiotics() if(!owner || !(CE_ANTIBIOTIC in owner.chem_effects) || (germ_level <= 0)) diff --git a/code/modules/organs/subtypes/augment.dm b/code/modules/organs/subtypes/augment.dm index 9c6da3f17b6..6e893cf3e0d 100644 --- a/code/modules/organs/subtypes/augment.dm +++ b/code/modules/organs/subtypes/augment.dm @@ -126,6 +126,17 @@ /obj/item/organ/internal/augment/tool/combitool/left parent_organ = BP_L_HAND +/obj/item/organ/internal/augment/tool/combitool/lighter + name = "integrated lighter" + icon_state = "lighter-aug" + action_button_name = "Deploy Lighter" + action_button_icon = "lighter-aug" + organ_tag = BP_AUG_LIGHTER + augment_type = /obj/item/flame/lighter/zippo/augment + +/obj/item/organ/internal/augment/tool/combitool/lighter/left + parent_organ = BP_L_HAND + /obj/item/organ/internal/augment/health_scanner name = "integrated health scanner" action_button_name = "Activate Health Scanner" @@ -178,7 +189,7 @@ if(actual_charges > 0) addtimer(CALLBACK(src, .proc/disarm), recharge_time MINUTES) if(is_broken()) - visible_message(SPAN_DANGER("\The [owner] crackles with energy!")) + owner.visible_message(SPAN_DANGER("\The [owner] crackles with energy!")) playsound(owner, 'sound/magic/LightningShock.ogg', 75, 1) tesla_zap(owner, 7, 1500) @@ -197,7 +208,7 @@ if(!.) return FALSE - visible_message(SPAN_DANGER("\The [owner] crackles with energy!")) + owner.visible_message(SPAN_DANGER("\The [owner] crackles with energy!")) playsound(owner, 'sound/magic/LightningShock.ogg', 75, 1) tesla_zap(owner, 7, 1500) @@ -207,6 +218,7 @@ cooldown = 25 activable = TRUE organ_tag = BP_AUG_EYE_SENSORS + parent_organ = BP_HEAD action_button_name = "Toggle Eye Sensors" var/active_hud = "disabled" @@ -280,7 +292,7 @@ return FALSE owner.visible_message(SPAN_NOTICE("\The [owner]'s hair begins to rapidly shift in shape and length.")) - owner.change_appearance(APPEARANCE_ALL_HAIR, owner.loc, owner, check_species_whitelist = 1) + owner.change_appearance(APPEARANCE_ALL_HAIR, owner) /obj/item/organ/internal/augment/suspension name = "calf suspension" @@ -348,9 +360,233 @@ name = "C'thur language processor" augment_languages = list(LANGUAGE_SKRELLIAN) +/obj/item/organ/internal/augment/gustatorial + name = "gustatorial centre" + action_button_name = "Activate Gustatorial Centre (tongue)" + action_button_icon = "augment" + organ_tag = BP_AUG_GUSTATORIAL + parent_organ = BP_HEAD + activable = TRUE + cooldown = 8 + + var/taste_sensitivity = TASTE_NORMAL + var/action_verb = "licks" + var/self_action_verb = "lick" + +/obj/item/organ/internal/augment/gustatorial/attack_self(var/mob/user) + . = ..() + if(!.) + return FALSE + + var/obj/item/reagent_containers/food/F = user.get_active_hand() + if(istype(F)) + if(!F.is_open_container()) + to_chat(user, SPAN_WARNING("\The [F] is closed!")) + return + user.visible_message("[user] [action_verb] \the [F].", SPAN_NOTICE("You [self_action_verb] \the [F].")) + to_chat(user, SPAN_NOTICE("\The [src] reports that \the [F] tastes like: [F.reagents.generate_taste_message(user, taste_sensitivity)]")) + else + var/list/tastes = list("Hypersensitive" = TASTE_HYPERSENSITIVE, "Sensitive" = TASTE_SENSITIVE, "Normal" = TASTE_NORMAL, "Dull" = TASTE_DULL, "Numb" = TASTE_NUMB) + var/taste_choice = input(user, "How well do you want to taste?", "Taste Sensitivity", "Normal") as null|anything in tastes + if(taste_choice) + to_chat(user, SPAN_NOTICE("\The [src] will now output taste as if you were [taste_choice].")) + taste_sensitivity = tastes[taste_choice] + +/obj/item/organ/internal/augment/gustatorial/hand + parent_organ = BP_R_HAND + action_button_name = "Activate Gustatorial Centre (hand)" + + action_verb = "sticks their finger in" + self_action_verb = "stick your finger in" + +/obj/item/organ/internal/augment/gustatorial/hand/left + parent_organ = BP_L_HAND + +/obj/item/organ/internal/augment/synthetic_cords + name = "synthetic vocal cords" + desc = "An array of vocal cords loaded into an augment kit, allowing easy installation by a skilled technician." + organ_tag = BP_AUG_CORDS + parent_organ = BP_HEAD + +/obj/item/organ/internal/augment/synthetic_cords/replaced(var/mob/living/carbon/human/target, obj/item/organ/external/affected) + . = ..() + target.sdisabilities &= ~MUTE + +/obj/item/organ/internal/augment/synthetic_cords/removed(var/mob/living/carbon/human/target, mob/living/user) + target.sdisabilities |= MUTE + ..() + +/obj/item/organ/internal/augment/cochlear + name = "cochlear implant" + desc = "A synthetic replacement for the structures within the ear, allowing the user to hear without requiring external tools." + organ_tag = BP_AUG_COCHLEAR + parent_organ = BP_HEAD + // Snakebitten! /obj/item/organ/internal/augment/psi name = "psionic receiver" desc = "An augment installed into the head that functions as a surrogate for a missing zona bovinae, also functioning as a filter for the psionically-challenged." organ_tag = BP_AUG_PSI - parent_organ = BP_HEAD \ No newline at end of file + parent_organ = BP_HEAD + +/obj/item/organ/internal/augment/memory_inhibitor + name = "memory inhibitor" + desc = "A Zeng Hu implant that allows one to have control over their memories, allowing you to set a timer and remove any memories developed within it. This is most popular in Zeng Hu labs within Eridani." + icon_state = "memory_inhibitor" + organ_tag = BP_AUG_MEMORY + parent_organ = BP_HEAD + activable = TRUE + cooldown = 20 + action_button_icon = "memory_inhibitor" + action_button_name = "Activate Memory Inhibitor" + var/ready_to_erase = FALSE + +/obj/item/organ/internal/augment/memory_inhibitor/attack_self(var/mob/user) + . = ..() + + if(!.) + return FALSE + + if(!ready_to_erase) + to_chat(owner, SPAN_NOTICE("Your memories following this point will be deleted on the following activation.")) + ready_to_erase = TRUE + else + to_chat(owner, SPAN_WARNING("You do not recall the events since the last time you activated your memory inhibitor!")) + ready_to_erase = FALSE + +/obj/item/organ/internal/augment/memory_inhibitor/do_broken_act() + if(owner) + to_chat(owner, SPAN_WARNING("You forgot everything that happened today!")) + return TRUE + +/obj/item/organ/internal/augment/memory_inhibitor/emp_act(severity) + ..() + if(prob(25)) + do_broken_act() + +/obj/item/organ/internal/augment/emotional_manipulator + name = "emotional manipulator" + desc = "A Zeng Hu brain implant to manipulate the brain's chemicals to induce a calming or happy feeling. This is one of the most popular implants across the company." + icon_state = "emotional_manipulator" + organ_tag = BP_AUG_EMOTION + parent_organ = BP_HEAD + action_button_name = "Activate Emotional Manipulator" + activable = TRUE + action_button_icon = "emotional_manipulator" + cooldown = 10 + var/set_emotion = "Disabled" + + var/list/possible_emotions = list( + "Disabled", + "Happiness", + "Calmness") + +/obj/item/organ/internal/augment/emotional_manipulator/attack_self(var/mob/user) + . = ..() + + if(!.) + return FALSE + + var/choice = input("Select the Emotional Choice.", "Emotional Manipulator") as null|anything in capitalize_list(possible_emotions) + + set_emotion = lowertext(choice) + +/obj/item/organ/internal/augment/emotional_manipulator/process() + ..() + + if(!owner) + return + + if(prob(1)) + + switch(set_emotion) + + if("Happiness") + + to_chat(owner, SPAN_NOTICE("You feel happy.")) + + if("Calmness") + to_chat(owner, SPAN_NOTICE("You feel calm.")) + + if(is_broken()) + do_broken_act() + +/obj/item/organ/internal/augment/emotional_manipulator/do_broken_act() + if(owner) + owner.hallucination += 20 + return TRUE + + +/obj/item/organ/internal/augment/enhanced_vision + name = "vision enhanced retinas" + desc = "Zeng Hu implants given to EMTs to assist with finding the injured. These eye implants allow one to see further than you normally could." + icon_state = "enhanced_vision" + organ_tag = BP_AUG_ENCHANED_VISION + parent_organ = BP_HEAD + action_button_name = "Activate Vision Enhanced Retinas" + action_button_icon = "enhanced_vision" + cooldown = 30 + activable = TRUE + +/obj/item/organ/internal/augment/enhanced_vision/Initialize() + . = ..() + set_light(3, 2, LIGHT_COLOR_TUNGSTEN, uv = 0, angle = LIGHT_WIDE) + +/obj/item/organ/internal/augment/enhanced_vision/attack_self(var/mob/user) + . = ..() + + if(!.) + return FALSE + + zoom(owner,7,7, FALSE) + +/obj/item/organ/internal/augment/enhanced_vision/emp_act(severity) + ..() + var/obj/item/organ/internal/eyes/E = owner.get_eyes() + if(!E) + return + E.take_damage(5) + +/obj/item/organ/internal/augment/sightlights + name = "ocular installed sightlights " + desc = "Designed to assist medical personnel in darker areas or places experiencing periodic power issues, Sightlights will allow one to be able to use their eyes as a flashlight." + icon_state = "sightlights" + organ_tag = BP_AUG_SIGHTLIGHTS + parent_organ = BP_HEAD + action_button_name = "Activate Ocular Installed Sightlights " + action_button_icon = "sightlights" + cooldown = 30 + activable = TRUE + var/lights_on = FALSE + +/obj/item/organ/internal/augment/sightlights/attack_self(var/mob/user) + . = ..() + + if(!.) + return FALSE + + lights_on = !lights_on + + if(lights_on) + set_light(5, 2, LIGHT_COLOR_TUNGSTEN, uv = 0, angle = LIGHT_WIDE) + else + set_light(0) + +/obj/item/organ/internal/augment/sightlights/emp_act(severity) + ..() + set_light(0) + +/obj/item/organ/internal/augment/sightlights/take_damage(var/amount, var/silent = 0) + ..() + set_light(0) + +/obj/item/organ/internal/augment/sightlights/take_internal_damage(var/amount, var/silent = 0) + ..() + set_light(0) + +/obj/item/organ/internal/augment/zenghu_plate + name = "zeng-hu veterancy plate " + desc = " A clear sign of Zeng-Hu's best, this plate bearing the company's symbol is installed on those who prove themselves in the hyper-competitive environment." + icon_state = "zenghu_plate" + on_mob_icon = 'icons/mob/human_races/augments_external.dmi' + parent_organ = BP_HEAD diff --git a/code/modules/organs/subtypes/autakh.dm b/code/modules/organs/subtypes/autakh.dm index 350484165d1..f269863eb69 100644 --- a/code/modules/organs/subtypes/autakh.dm +++ b/code/modules/organs/subtypes/autakh.dm @@ -180,7 +180,7 @@ owner.visible_message("[user]'s eyes whirrs loudly as they focus ahead.") take_damage(1) - zoom(owner,7,3, FALSE) + zoom(owner,7,7, FALSE) /obj/item/organ/internal/augment/eye_flashlight name = "eye flashlight" diff --git a/code/modules/organs/subtypes/machine.dm b/code/modules/organs/subtypes/machine.dm index 735bde549d6..82f175e19e9 100644 --- a/code/modules/organs/subtypes/machine.dm +++ b/code/modules/organs/subtypes/machine.dm @@ -64,7 +64,6 @@ icon_state = "scell" organ_tag = BP_CELL parent_organ = BP_CHEST - vital = TRUE max_damage = 80 relative_size = 80 var/open = FALSE @@ -74,7 +73,7 @@ /obj/item/organ/internal/cell/Initialize() robotize() - cell = new cell(src) + replace_cell(new cell(src)) . = ..() /obj/item/organ/internal/cell/proc/percent() @@ -89,11 +88,6 @@ return 0 return round(cell.charge*(1 - damage/max_damage)) -/obj/item/organ/internal/cell/proc/checked_use(var/amount) - if(!is_usable() || !cell) - return FALSE - return cell.checked_use(amount) - /obj/item/organ/internal/cell/proc/use(var/amount) if(!is_usable() || !cell) return @@ -108,12 +102,9 @@ var/cost = get_power_drain() if(world.time - owner.l_move_time < 15) cost *= 2 - if(!checked_use(cost) && owner.isSynthetic()) - if(!owner.lying && !owner.buckled_to) - to_chat(owner, "You don't have enough energy to function!") - owner.Paralyse(3) + use(cost) -/obj/item/organ/internal/cell/proc/get_power_drain() +/obj/item/organ/internal/cell/proc/get_power_drain() return servo_cost /obj/item/organ/internal/cell/emp_act(severity) @@ -122,7 +113,7 @@ cell.emp_act(severity) /obj/item/organ/internal/cell/attackby(obj/item/W, mob/user) - if(isscrewdriver(W)) + if(W.isscrewdriver()) if(open) open = FALSE to_chat(user, SPAN_NOTICE("You screw the battery panel in place.")) @@ -130,20 +121,34 @@ open = TRUE to_chat(user, SPAN_NOTICE("You unscrew the battery panel.")) - if(iscrowbar(W)) + if(W.iscrowbar()) if(open) if(cell) user.put_in_hands(cell) to_chat(user, SPAN_NOTICE("You remove \the [cell] from \the [src].")) cell = null + else + to_chat(user, SPAN_WARNING("There is no cell to remove.")) + else + to_chat(user, SPAN_WARNING("You need to unscrew the battery panel first.")) - if (istype(W, /obj/item/cell)) + if(istype(W, /obj/item/cell)) if(open) if(cell) to_chat(user, SPAN_WARNING("There is a power cell already installed.")) else if(user.unEquip(W, src)) - cell = W + replace_cell(W) to_chat(user, SPAN_NOTICE("You insert \the [cell].")) + else + to_chat(user, SPAN_WARNING("You need to unscrew the battery panel first.")) + +/obj/item/organ/internal/cell/proc/replace_cell(var/obj/item/cell/C) + if(istype(cell)) + qdel(cell) + if(C.loc != src) + C.forceMove(src) + cell = C + name = "[initial(name)] ([C.name])" /obj/item/organ/internal/cell/listen() if(get_charge()) diff --git a/code/modules/overmap/ships/computers/sensors.dm b/code/modules/overmap/ships/computers/sensors.dm index 0bdaad73d1b..1e0e866fdd6 100644 --- a/code/modules/overmap/ships/computers/sensors.dm +++ b/code/modules/overmap/ships/computers/sensors.dm @@ -67,6 +67,9 @@ ui.set_auto_update(1) /obj/machinery/computer/ship/sensors/Topic(href, href_list) + if (..()) + return TOPIC_HANDLED + if (!linked) return TOPIC_NOACTION @@ -98,13 +101,13 @@ new/obj/item/paper/(get_turf(src), O.get_scan_data(usr), "paper (Sensor Scan - [O])") return TOPIC_HANDLED -/obj/machinery/computer/ship/sensors/process() +/obj/machinery/computer/ship/sensors/machinery_process() ..() if(!linked) return if(sensors && sensors.use_power && sensors.powered()) var/sensor_range = round(sensors.range*1.5) + 1 - linked.set_light(1, sensor_range, sensor_range+1) + linked.set_light(sensor_range, sensor_range+1, light_color) else linked.set_light(0) @@ -180,7 +183,8 @@ update_use_power(!use_power) queue_icon_update() -/obj/machinery/shipsensors/process() +/obj/machinery/shipsensors/machinery_process() + ..() if(use_power) //can't run in non-vacuum if(!in_vacuum()) toggle() diff --git a/code/modules/overmap/ships/computers/ship.dm b/code/modules/overmap/ships/computers/ship.dm index 1e65c19b582..ac2734947c3 100644 --- a/code/modules/overmap/ships/computers/ship.dm +++ b/code/modules/overmap/ships/computers/ship.dm @@ -37,11 +37,13 @@ somewhere on that shuttle. Subtypes of these can be then used to perform ship ov /obj/machinery/computer/ship/attack_hand(mob/user) if(use_check_and_message(user)) return - + user.set_machine(src) ui_interact(user) /obj/machinery/computer/ship/Topic(href, href_list) + if(..()) + return TOPIC_HANDLED if(href_list["sync"]) sync_linked() return TOPIC_REFRESH @@ -81,8 +83,10 @@ somewhere on that shuttle. Subtypes of these can be then used to perform ship ov look(user) /obj/machinery/computer/ship/check_eye(var/mob/user) + if(!viewing_overmap(user)) + return FALSE + if (use_check_and_message(user) || user.blinded || inoperable() || !linked) - unlook(user) return -1 else return 0 diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm index fd2d75ee7d6..78a0bf8c1e7 100644 --- a/code/modules/paperwork/clipboard.dm +++ b/code/modules/paperwork/clipboard.dm @@ -29,10 +29,10 @@ switch(over_object.name) if("right hand") M.u_equip(src) - M.put_in_r_hand(src) + M.equip_to_slot_if_possible(src, slot_r_hand) if("left hand") M.u_equip(src) - M.put_in_l_hand(src) + M.equip_to_slot_if_possible(src, slot_l_hand) add_fingerprint(usr) return diff --git a/code/modules/paperwork/faxmachine.dm b/code/modules/paperwork/faxmachine.dm index 9beee7a17f2..3bd92d82216 100644 --- a/code/modules/paperwork/faxmachine.dm +++ b/code/modules/paperwork/faxmachine.dm @@ -220,11 +220,11 @@ var/list/admin_departments // give the sprite some time to flick spawn(20) if (istype(incoming, /obj/item/paper)) - copy(incoming, 1, 0, 0) + copy(src, incoming, 1, 0, 0) else if (istype(incoming, /obj/item/photo)) - photocopy(incoming) + photocopy(src, incoming) else if (istype(incoming, /obj/item/paper_bundle)) - bundlecopy(incoming) + bundlecopy(src, incoming) do_pda_alerts() use_power(active_power_usage) @@ -254,11 +254,11 @@ var/list/admin_departments var/obj/item/rcvdcopy if (istype(copyitem, /obj/item/paper)) - rcvdcopy = copy(copyitem, 0) + rcvdcopy = copy(src, copyitem, 0) else if (istype(copyitem, /obj/item/photo)) - rcvdcopy = photocopy(copyitem) + rcvdcopy = photocopy(src, copyitem) else if (istype(copyitem, /obj/item/paper_bundle)) - rcvdcopy = bundlecopy(copyitem, 0) + rcvdcopy = bundlecopy(src, copyitem, 0) else visible_message("[src] beeps, \"Error transmitting message.\"") return @@ -306,9 +306,6 @@ var/list/admin_departments discord_bot.send_to_cciaa(discord_msg) /obj/machinery/photocopier/faxmachine/proc/do_pda_alerts() - if (!alert_pdas || !alert_pdas.len) - return - - for (var/obj/item/modular_computer/pda in alert_pdas) + for(var/obj/item/modular_computer/pda in alert_pdas) var/message = "New message has arrived!" pda.get_notification(message, 1, "[department] [name]") \ No newline at end of file diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm index 0ba1df72b1a..ec140f0fc3a 100644 --- a/code/modules/paperwork/filingcabinet.dm +++ b/code/modules/paperwork/filingcabinet.dm @@ -30,12 +30,12 @@ /obj/structure/filingcabinet/Initialize() . = ..() for(var/obj/item/I in loc) - if(istype(I, /obj/item/paper) || istype(I, /obj/item/folder) || istype(I, /obj/item/photo) || istype(I, /obj/item/paper_bundle)) + if(istype(I, /obj/item/paper) || istype(I, /obj/item/folder) || istype(I, /obj/item/photo) || istype(I, /obj/item/paper_bundle) || istype(I, /obj/item/sample)) I.forceMove(src) /obj/structure/filingcabinet/attackby(obj/item/P as obj, mob/user as mob) - if(istype(P, /obj/item/paper) || istype(P, /obj/item/folder) || istype(P, /obj/item/photo) || istype(P, /obj/item/paper_bundle)) + if(istype(P, /obj/item/paper) || istype(P, /obj/item/folder) || istype(P, /obj/item/photo) || istype(P, /obj/item/paper_bundle) || istype(P, /obj/item/sample)) to_chat(user, "You put [P] in [src].") user.drop_from_inventory(P,src) flick("[initial(icon_state)]-open",src) diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm index 46205092528..186fbfec40f 100644 --- a/code/modules/paperwork/folders.dm +++ b/code/modules/paperwork/folders.dm @@ -38,7 +38,7 @@ return /obj/item/folder/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W, /obj/item/paper) || istype(W, /obj/item/photo) || istype(W, /obj/item/paper_bundle) || istype(W, /obj/item/sample/print)) + if(istype(W, /obj/item/paper) || istype(W, /obj/item/photo) || istype(W, /obj/item/paper_bundle) || istype(W, /obj/item/sample)) user.drop_from_inventory(W,src) to_chat(user, "You put the [W] into \the [src].") update_icon() @@ -57,7 +57,7 @@ dat += "Remove Rename - [Ph.name]
" for(var/obj/item/paper_bundle/Pb in src) dat += "Remove Rename - [Pb.name]
" - for(var/obj/item/sample/print/Pf in src) + for(var/obj/item/sample/Pf in src) dat += "Remove - [Pf.name]
" user << browse(dat, "window=folder") onclose(user, "folder") diff --git a/code/modules/paperwork/handlabeler.dm b/code/modules/paperwork/handlabeler.dm index e644b27b012..c936c1424f2 100644 --- a/code/modules/paperwork/handlabeler.dm +++ b/code/modules/paperwork/handlabeler.dm @@ -31,6 +31,7 @@ icon = 'icons/obj/bureaucracy.dmi' icon_state = "labeler0" item_state = "labeler0" + w_class = ITEMSIZE_SMALL var/label = null var/labels_left = 30 var/mode = 0 //off or on. diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index cef3d45906e..084ef439b6f 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -442,10 +442,10 @@ var/mob/living/carbon/human/h_user = user if (h_user.r_hand == src) h_user.drop_from_inventory(src) - h_user.put_in_r_hand(B) + h_user.equip_to_slot_if_possible(B, slot_r_hand) else if (h_user.l_hand == src) h_user.drop_from_inventory(src) - h_user.put_in_l_hand(B) + h_user.equip_to_slot_if_possible(B, slot_l_hand) else if (h_user.l_store == src) h_user.drop_from_inventory(src) B.forceMove(h_user) diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index b22212e783a..bcc946191c1 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -56,7 +56,7 @@ VUEUI_MONITOR_VARS(/obj/machinery/photocopier, photocopiermonitor) if(toner <= 0) break - var/c_type = copy_type() + var/c_type = copy_type(src, copyitem, toner) if(!c_type) // if there's something that can't be copied break @@ -84,7 +84,7 @@ VUEUI_MONITOR_VARS(/obj/machinery/photocopier, photocopiermonitor) if (!selection) return - var/obj/item/photo/p = photocopy(selection) + var/obj/item/photo/p = photocopy(src, selection) if (p.desc == "") p.desc += "Copied by [tempAI.name]" else @@ -124,21 +124,21 @@ VUEUI_MONITOR_VARS(/obj/machinery/photocopier, photocopiermonitor) to_chat(user, SPAN_NOTICE("You [anchored ? "wrench" : "unwrench"] \the [src].")) return -/obj/machinery/photocopier/proc/copy_type(var/c_item = copyitem) // helper proc to reduce ctrl+c ctrl+v +/proc/copy_type(var/obj/machinery/target, var/c_item, var/toner, var/do_print = TRUE) // helper proc to reduce ctrl+c ctrl+v if (istype(c_item, /obj/item/paper)) - var/obj/item/paper/C = copy(c_item) + var/obj/item/paper/C = copy(target, c_item, do_print, do_print, 1 SECOND, toner) sleep(20) return C else if (istype(c_item, /obj/item/photo)) - var/obj/item/photo/P = photocopy(c_item) + var/obj/item/photo/P = photocopy(target, c_item, toner) sleep(20) return P else if (istype(c_item, /obj/item/paper_bundle)) - var/obj/item/paper_bundle/B = bundlecopy(c_item) + var/obj/item/paper_bundle/B = bundlecopy(target, c_item, TRUE, toner) sleep(15*B.pages.len) return B else - to_chat(usr, SPAN_WARNING("\The [c_item] can't be copied by \the [src].")) + to_chat(usr, SPAN_WARNING("\The [c_item] can't be copied by \the [target].")) return FALSE /obj/machinery/photocopier/ex_act(severity) @@ -159,7 +159,7 @@ VUEUI_MONITOR_VARS(/obj/machinery/photocopier, photocopiermonitor) toner = 0 return -/obj/machinery/photocopier/proc/copy(var/obj/item/paper/copy, var/print = 1, var/use_sound = 1, var/delay = 10) // note: var/delay is the delay from copy to print, it should be less than the sleep in copy_type() +/proc/copy(var/obj/machinery/target, var/obj/item/paper/copy, var/print = TRUE, var/use_sound = TRUE, var/delay = 10, var/toner) // note: var/delay is the delay from copy to print, it should be less than the sleep in copy_type() var/obj/item/paper/c = new /obj/item/paper() var/info var/pname @@ -195,20 +195,22 @@ VUEUI_MONITOR_VARS(/obj/machinery/photocopier, photocopiermonitor) toner-- if(toner == 0) - visible_message(SPAN_NOTICE("A red light on \the [src] flashes, indicating that it is out of toner.")) - flick("photocopier_notoner", src) - playsound(loc, 'sound/machines/buzz-two.ogg', 75, 1) + target.visible_message(SPAN_NOTICE("A red light on \the [target] flashes, indicating that it is out of toner.")) + if(target.type == /obj/machinery/photocopier) + flick("photocopier_notoner", target) + playsound(target.loc, 'sound/machines/buzz-two.ogg', 75, 1) return c.set_content_unsafe(pname, info) if (print) - flick("photocopier_print", src) - src.print(c, use_sound, 'sound/bureaucracy/print.ogg', delay) + if(target.type == /obj/machinery/photocopier) + flick("photocopier_print", target) + target.print(c, use_sound, 'sound/bureaucracy/print.ogg', delay) return c -/obj/machinery/photocopier/proc/photocopy(var/obj/item/photo/photocopy) +/proc/photocopy(var/obj/machinery/target, var/obj/item/photo/photocopy, var/toner) var/obj/item/photo/p = photocopy.copy() - p.forceMove(src.loc) + p.forceMove(target.loc) var/icon/I = icon(photocopy.icon, photocopy.icon_state) if(toner > 10) //plenty of toner, go straight greyscale @@ -223,28 +225,30 @@ VUEUI_MONITOR_VARS(/obj/machinery/photocopier, photocopiermonitor) toner -= 5 //photos use a lot of ink! if(toner < 0) toner = 0 - visible_message(SPAN_NOTICE("A red light on \the [src] flashes, indicating that it is out of toner.")) - flick("photocopier_notoner", src) - playsound(loc, 'sound/machines/buzz-two.ogg', 75, 1) + target.visible_message(SPAN_NOTICE("A red light on \the [target] flashes, indicating that it is out of toner.")) + if(target.type == /obj/machinery/photocopier) + flick("photocopier_notoner", target) + playsound(target.loc, 'sound/machines/buzz-two.ogg', 75, 1) return p //If need_toner is 0, the copies will still be lightened when low on toner, however it will not be prevented from printing. TODO: Implement print queues for fax machines and get rid of need_toner -/obj/machinery/photocopier/proc/bundlecopy(var/obj/item/paper_bundle/bundle, var/need_toner=1) - var/obj/item/paper_bundle/p = new /obj/item/paper_bundle (src) +/proc/bundlecopy(var/obj/machinery/target, var/obj/item/paper_bundle/bundle, var/need_toner = TRUE, var/toner, var/do_print = TRUE) + var/obj/item/paper_bundle/p = new /obj/item/paper_bundle(target) for(var/obj/item/W in bundle.pages) if(toner <= 0 && need_toner) toner = 0 - visible_message(SPAN_NOTICE("A red light on \the [src] flashes, indicating that it is out of toner.")) - flick("photocopier_notoner", src) - playsound(loc, 'sound/machines/buzz-two.ogg', 75, 1) + target.visible_message(SPAN_NOTICE("A red light on \the [target] flashes, indicating that it is out of toner.")) + if(target.type == /obj/machinery/photocopier) + flick("photocopier_notoner", target) + playsound(target.loc, 'sound/machines/buzz-two.ogg', 75, 1) break - W = copy_type(W) + W = copy_type(target, W, need_toner ? toner : 15, do_print) W.forceMove(p) p.pages += W - p.forceMove(src.loc) + p.forceMove(target.loc) p.update_icon() p.icon_state = "paper_words" p.name = bundle.name @@ -256,4 +260,4 @@ VUEUI_MONITOR_VARS(/obj/machinery/photocopier, photocopiermonitor) name = "toner cartridge" desc = "A high-definition toner for colour photocopying and printer machines. Good thing it's a business expense." icon_state = "tonercartridge" - var/toner_amount = 30 + var/toner_amount = 30 \ No newline at end of file diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index 9fc1b56dabc..8e87998d4d7 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -105,10 +105,10 @@ var/global/photo_count = 0 switch(over_object.name) if("right hand") M.u_equip(src) - M.put_in_r_hand(src) + M.equip_to_slot_if_possible(src, slot_r_hand) if("left hand") M.u_equip(src) - M.put_in_l_hand(src) + M.equip_to_slot_if_possible(src, slot_l_hand) add_fingerprint(usr) return if(over_object == usr && in_range(src, usr) || usr.contents.Find(src)) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index d1e89c39cda..f477d195233 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -127,7 +127,6 @@ var/obj/item/cell/cell var/chargelevel = 0.0005 // Cap for how fast APC cells charge, as a percentage-per-tick (0.01 means cellcharge is capped to 1% per second) var/cellused = 0 - var/initalchargelevel = 0.0005 // Cap for how fast APC cells charge, as a percentage-per-tick (0.01 means cellcharge is capped to 1% per second) var/start_charge = 90 // initial cell charge % var/cell_type = /obj/item/cell/apc var/opened = COVER_CLOSED @@ -139,7 +138,7 @@ var/infected = FALSE var/operating = TRUE var/charging = CHARGING_OFF - var/chargemode = CHARGE_MODE_DISCHARGE + var/chargemode = TRUE // whether we're trying to charge var/chargecount = 0 var/locked = TRUE var/coverlocked = TRUE @@ -177,7 +176,7 @@ var/emergency_lights = FALSE var/time = 0 - var/charge_mode = CHARGE_MODE_CHARGE + var/charge_mode = CHARGE_MODE_CHARGE // if we're actually able to charge var/last_time = 1 /obj/machinery/power/apc/updateDialog() @@ -537,6 +536,7 @@ //to_chat(user, "You remove the power cell.") charging = CHARGING_OFF update_icon() + SSvueui.check_uis_for_change(src) return else if (istype(W, /obj/item/cell) && opened != COVER_CLOSED) // trying to put a cell inside if(cell) @@ -556,6 +556,7 @@ SPAN_NOTICE("You insert \the [cell].")) chargecount = 0 update_icon() + SSvueui.check_uis_for_change(src) else if (W.isscrewdriver()) // haxing if(opened != COVER_CLOSED) if (cell) @@ -587,7 +588,7 @@ else if(opened != COVER_CLOSED) to_chat(user, "You must close the cover to swipe an ID card.") else if(wiresexposed) - to_chat(user, "You must close the panel") + to_chat(user, "You must close the wiring panel to swipe an ID card.") else if(stat & (BROKEN|MAINT)) to_chat(user, "Nothing happens.") else if(hacker) @@ -596,6 +597,7 @@ if(allowed(usr) && !isWireCut(APC_WIRE_IDSCAN)) locked = !locked to_chat(user, "You [ locked ? "lock" : "unlock"] the APC interface.") + SSvueui.check_uis_for_change(src) update_icon() else to_chat(user, SPAN_WARNING("Access denied.")) @@ -730,6 +732,7 @@ emagged = FALSE if(infected) infected = FALSE + SSvueui.check_uis_for_change(src) else to_chat(user, SPAN_NOTICE("There has been a connection issue.")) return @@ -789,6 +792,7 @@ to_chat(user, SPAN_NOTICE("You hack the charging slot. The next IPC that charges from this APC will be hacked and slaved to you.")) infected = TRUE hacker = user + SSvueui.check_uis_for_change(src) if(!(emagged || hacker)) // trying to unlock with an emag card if(opened != COVER_CLOSED) to_chat(user, "You must close the cover to swipe an ID card.") @@ -804,6 +808,7 @@ locked = FALSE to_chat(user, SPAN_NOTICE("You hack the APC interface open.")) update_icon() + SSvueui.check_uis_for_change(src) else to_chat(user, SPAN_WARNING("You fail to [ locked ? "unlock" : "lock"] the APC interface.")) return TRUE @@ -887,6 +892,7 @@ SPAN_NOTICE("You remove the power cell.")) charging = CHARGING_ON update_icon() + SSvueui.check_uis_for_change(src) return if(stat & (BROKEN|MAINT)) return @@ -902,67 +908,49 @@ return ui_interact(user) -/obj/machinery/power/apc/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - if(!user) - return +/obj/machinery/power/apc/vueui_data_change(list/data, mob/user, datum/vueui/ui) + var/list/monitordata = ..() + data = list() + if(monitordata) + data = monitordata var/isAdmin = isobserver(user) && check_rights(R_ADMIN, FALSE, user) - var/list/data = list( - "locked" = (locked && !emagged) ? TRUE : FALSE, - "isOperating" = operating, - "externalPower" = main_status, - "powerCellStatus" = cell ? cell.percent() : null, - "chargeMode" = chargemode, - "lightingMode" = night_mode, - "chargingStatus" = charging, - "totalLoad" = round(lastused_total), - "totalCharging" = round(lastused_charging), - "coverLocked" = coverlocked, - "failTime" = failure_timer * 2, - "siliconUser" = isAdmin || issilicon(user), - "emergencyMode" = !emergency_lights, - "time" = time, - "charge_mode" = charge_mode, - - "powerChannels" = list( - list( - "title" = "Equipment", - "powerLoad" = lastused_equip, - "status" = equipment, - "topicParams" = list( - "auto" = list("eqp" = 3), - "on" = list("eqp" = 2), - "off" = list("eqp" = 1) - ) - ), - list( - "title" = "Lighting", - "powerLoad" = round(lastused_light), - "status" = lighting, - "topicParams" = list( - "auto" = list("lgt" = 3), - "on" = list("lgt" = 2), - "off" = list("lgt" = 1) - ) - ), - list( - "title" = "Environment", - "powerLoad" = round(lastused_environ), - "status" = environ, - "topicParams" = list( - "auto" = list("env" = 3), - "on" = list("env" = 2), - "off" = list("env" = 1) - ) - ) + data["locked"] = (locked && !emagged) + data["powerCellStatus"] = cell?.percent() + data["failTime"] = failure_timer * 2 + data["siliconUser"] = isAdmin || issilicon(user) + data["totalLoad"] = round(lastused_total) + data["totalCharging"] = round(lastused_charging) + data["isOperating"] = operating + data["chargeMode"] = chargemode + data["externalPower"] = main_status + data["lightingMode"] = night_mode + data["chargingStatus"] = charging + data["coverLocked"] = coverlocked + data["emergencyMode"] = !emergency_lights + data["time"] = time + data["charge_mode"] = charge_mode + data["powerChannels"] = list(\ + "Equipment" = list(\ + "powerLoad" = lastused_equip,\ + "status" = equipment + ), + "Lighting" = list( + "powerLoad" = round(lastused_light), + "status" = lighting + ), + "Environment" = list( + "powerLoad" = round(lastused_environ), + "status" = environ ) ) + return data - ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open) +/obj/machinery/power/apc/ui_interact(mob/user) + var/datum/vueui/ui = SSvueui.get_open_ui(user, src) if (!ui) - ui = new(user, src, ui_key, "apc.tmpl", "[area.name] - APC", 665, data["siliconUser"] ? 540 : 480) - ui.set_initial_data(data) + ui = new(user, src, "machinery-power-apc", 665, (isobserver(user) && check_rights(R_ADMIN, FALSE, user) || issilicon(user)) ? 540 : 480, "[area.name] - APC") ui.open() - ui.set_auto_update(TRUE) + ui.auto_update_content = TRUE /obj/machinery/power/apc/proc/report() return "[area.name] : [equipment]/[lighting]/[environ] ([lastused_equip+lastused_light+lastused_environ]) : [cell? cell.percent() : "N/C"] ([charging])" @@ -977,6 +965,7 @@ area.power_equip = FALSE area.power_environ = FALSE area.power_change() + SSvueui.check_uis_for_change(src) /obj/machinery/power/apc/proc/isWireCut(var/wireIndex) return wires.IsIndexCut(wireIndex) @@ -984,15 +973,14 @@ /obj/machinery/power/apc/proc/can_use(mob/user, var/loud = 0) //used by attack_hand() and Topic() if(inoperable()) return FALSE + var/use_flags = issilicon(user) && USE_ALLOW_NON_ADJACENT // AIs and borgs can use it at range + use_flags |= (check_rights(R_ADMIN, FALSE, user) && USE_ALLOW_NONLIVING) // admins can use the UI when ghosting + if(use_check(user, use_flags, show_messages = TRUE)) + return FALSE if(isobserver(user)) - return check_rights(R_ADMIN, FALSE, user) // admins can use the UI when ghosting - if(user.stat) - to_chat(user, SPAN_WARNING("You must be conscious to use [src]!")) - return FALSE + return check_rights(R_ADMIN, FALSE, user) if(!user.client) return FALSE - if(!user.IsAdvancedToolUser()) - return FALSE if(user.restrained()) to_chat(user, SPAN_WARNING("You must have free hands to use [src].")) return FALSE @@ -1002,20 +990,16 @@ if (issilicon(user)) var/permit = FALSE // Malfunction variable. If AI hacks APC it can control it even without AI control wire. - var/mob/living/silicon/ai/AI = user - var/mob/living/silicon/robot/robot = user - if(hacker) - if(hacker == AI) + if(hacker) // handle malf hacking + var/mob/living/silicon/robot/robot = user + if(hacker == user) permit = TRUE - else if(istype(robot) && robot.connected_ai && robot.connected_ai == hacker) // Cyborgs can use APCs hacked by their AI + else if(istype(robot) && hacker == robot.connected_ai) // Cyborgs can use APCs hacked by their AI permit = TRUE if(aidisabled && !permit) if(!loud) - to_chat(user, SPAN_DANGER("\The [src] have AI control disabled!")) - return FALSE - else - if (!in_range(src, user) || !isturf(loc)) + to_chat(user, SPAN_DANGER("[src] has AI control disabled!")) return FALSE var/mob/living/carbon/human/H = user @@ -1031,30 +1015,31 @@ /obj/machinery/power/apc/Topic(href, href_list) if(..()) - return TRUE + return TOPIC_NOACTION if(!can_use(usr, 1)) - return TRUE + return TOPIC_NOACTION if (href_list["lmode"]) toggle_nightlight(href_list["lmode"]) update_icon() - return TRUE + SSvueui.check_uis_for_change(src) + return TOPIC_REFRESH var/isAdmin = isobserver(usr) && check_rights(R_ADMIN, FALSE) if(!issilicon(usr) && !isAdmin && locked && !emagged) // Shouldn't happen, this is here to prevent href exploits to_chat(usr, "You must unlock the panel to use this!") - return TRUE + return TOPIC_NOACTION if (href_list["emergency_lights"]) - emergency_lights = href_list["emergency_lights"] != "off" + emergency_lights = !emergency_lights for (var/obj/machinery/light/L in area) if (!initial(L.no_emergency)) L.no_emergency = emergency_lights //If there was an override set on creation, keep that override INVOKE_ASYNC(L, /obj/machinery/light/.proc/update, FALSE) CHECK_TICK - return TRUE + return TOPIC_REFRESH if (href_list["lock"]) coverlocked = !coverlocked @@ -1072,22 +1057,17 @@ if(!chargemode) charging = CHARGING_OFF update_icon() + SSvueui.check_uis_for_change(src) - else if (href_list["eqp"]) - var/val = text2num(href_list["eqp"]) - equipment = setsubsystem(val) - update_icon() - update() - - else if (href_list["lgt"]) - var/val = text2num(href_list["lgt"]) - lighting = setsubsystem(val) - update_icon() - update() - - else if (href_list["env"]) - var/val = text2num(href_list["env"]) - environ = setsubsystem(val) + else if (href_list["set"]) + var/val = text2num(href_list["set"]) + switch(href_list["chan"]) + if("Equipment") + equipment = setsubsystem(val) + if("Lighting") + lighting = setsubsystem(val) + if("Environment") + environ = setsubsystem(val) update_icon() update() @@ -1102,8 +1082,10 @@ else locked = !locked update_icon() + SSvueui.check_uis_for_change(src) - return FALSE + SSvueui.check_uis_for_change(src) + return TOPIC_REFRESH /obj/machinery/power/apc/proc/toggle_breaker() operating = !operating @@ -1184,14 +1166,14 @@ // draw power from cell as before to power the area cellused = min(cell.charge, CELLRATE * lastused_total) // clamp deduction to a max, amount left in cell cell.use(cellused) - + var/draw = 0 if(excess > lastused_total) // if power excess recharge the cell // by the same amount just used - var/draw = draw_power(cellused/CELLRATE) // draw the power needed to charge this cell + draw = draw_power(cellused/CELLRATE) // draw the power needed to charge this cell cell.give(draw * CELLRATE) else // no excess, and not enough per-apc if( (cell.charge/CELLRATE + excess) >= lastused_total) // can we draw enough from cell+grid to cover last usage? - var/draw = draw_power(excess) + draw = draw_power(excess) cell.charge = min(cell.maxcharge, cell.charge + CELLRATE * draw) //recharge with what we can charging = CHARGING_OFF else // not enough power available to run the last tick! @@ -1215,8 +1197,8 @@ ch = draw_power(ch/CELLRATE) // Removes the power we're taking from the grid cell.give(ch*CELLRATE) // actually recharge the cell - lastused_charging = ch - lastused_total += ch // Sensors need this to stop reporting APC charging as "Other" load + lastused_charging = ch + draw + lastused_total += ch + draw // Sensors need this to stop reporting APC charging as "Other" load else charging = CHARGING_OFF // stop charging chargecount = 0 @@ -1239,7 +1221,7 @@ charging = CHARGING_ON else // chargemode off - charging = CHARGING_ON + charging = CHARGING_OFF chargecount = 0 else // no cell, switch everything off @@ -1423,12 +1405,12 @@ /obj/machinery/power/apc/proc/update_time() - var/delta_power = (lastused_charging) ? (-lastused_charging) : (lastused_total) - delta_power *= 0.0005 + var/delta_power = (lastused_charging * 2) - lastused_total + delta_power *= CELLRATE - var/goal = (delta_power > 0) ? (cell.charge) : (cell.maxcharge - cell.charge) - - var/time_secs = (delta_power) ? ((goal / abs(delta_power)) / (round(world.time - last_time) / 10)) : (0) + var/goal = (delta_power < 0) ? (cell.charge) : (cell.maxcharge - cell.charge) + time = world.time + (delta_power ? ((goal / abs(delta_power)) * (world.time - last_time)) : 0) + // If it is negative - we are discharging if(delta_power < 0) charge_mode = CHARGE_MODE_DISCHARGE else if(delta_power > 0) @@ -1436,7 +1418,6 @@ else charge_mode = CHARGE_MODE_STABLE last_time = world.time - time = ((time_secs / 3600) > 1) ? ("[round(time_secs / 3600)] hours, [round((time_secs % 3600) / 60)] minutes") : ("[round(time_secs / 60)] minutes, [round(time_secs % 60)] seconds") #undef UPDATE_CELL_IN #undef UPDATE_OPENED1 diff --git a/code/modules/power/radial_floodlight.dm b/code/modules/power/radial_floodlight.dm new file mode 100644 index 00000000000..e2356146a9e --- /dev/null +++ b/code/modules/power/radial_floodlight.dm @@ -0,0 +1,63 @@ +/obj/machinery/power/radial_floodlight + name = "radial floodlight" + desc = "A floodlight that illuminates a wide area around it. It has to be wrenched down on top of a knot to work." + icon = 'icons/obj/machines/floodlight.dmi' + icon_state = "radial_floodlight" + anchored = FALSE + density = TRUE + active_power_usage = 800 + light_color = LIGHT_COLOR_TUNGSTEN + + var/on = FALSE + var/brightness_on = 12 + +/obj/machinery/power/radial_floodlight/proc/toggle_active(var/force_state) + if(!isnull(force_state)) + if(force_state == on) + return + on = force_state + else + on = !on + if(on) + set_light(brightness_on, 1) + START_PROCESSING(SSprocessing, src) + else + set_light(0) + STOP_PROCESSING(SSprocessing, src) + update_icon() + +/obj/machinery/power/radial_floodlight/machinery_process() + var/actual_load = draw_power(active_power_usage) + if(!on || !anchored || (stat & BROKEN) || !powernet || actual_load < active_power_usage) + toggle_active(FALSE) + return + +/obj/machinery/power/radial_floodlight/attackby(obj/item/W, mob/user) + if(W.iswrench()) + anchored = !anchored + user.visible_message(SPAN_NOTICE("\The [user] [anchored ? "" : "un"]secures \the [src] [anchored ? "to" : "from"] the floor."), SPAN_NOTICE("You [anchored ? "" : "un"]secure \the [src] [anchored ? "to" : "from"] the floor."), SPAN_WARNING("You hear a ratcheting noise.")) + if(!anchored) + toggle_active(FALSE) + else + connect_to_network() + playsound(get_turf(src), W.usesound, 75, TRUE) + return + return ..() + +/obj/machinery/power/radial_floodlight/attack_hand(mob/user) + if(!anchored) + to_chat(user, SPAN_WARNING("\The [src] isn't anchored.")) + return + if(!powernet) + to_chat(user, SPAN_WARNING("\The [src] isn't connected to a power network.")) + return + if(avail() < active_power_usage) + to_chat(user, SPAN_WARNING("\The [src]'s power network doesn't have enough power.")) + return + toggle_active() + update_icon() + +/obj/machinery/power/radial_floodlight/update_icon() + cut_overlays() + if(on) + add_overlay(image(icon, src, "[icon_state]-light", EFFECTS_ABOVE_LIGHTING_LAYER)) \ No newline at end of file diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index 3bb61a4ec0d..70f8bf0b632 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -201,8 +201,7 @@ delta_power *= SMESRATE var/goal = (delta_power < 0) ? (charge) : (capacity - charge) - - var/time_secs = (delta_power) ? ((goal / abs(delta_power)) * (round(world.time - last_time) / 10)) : (0) + time = world.time + (delta_power ? ((goal / abs(delta_power)) * (world.time - last_time)) : 0) // If it is negative - we are discharging if(delta_power < 0) charge_mode = 0 @@ -211,7 +210,6 @@ else charge_mode = 2 last_time = world.time - time = ((time_secs / 3600) > 1) ? ("[round(time_secs / 3600)] hours, [round((time_secs % 3600) / 60)] minutes") : ("[round(time_secs / 60)] minutes, [round(time_secs % 60)] seconds") /obj/machinery/power/smes/machinery_process() if(!can_function()) @@ -252,6 +250,8 @@ else outputting = 0 + SSvueui.check_uis_for_change(src) + // called after all power processes are finished // restores charge level to smes if there was excess this ptick /obj/machinery/power/smes/proc/restore(var/percent_load) @@ -277,6 +277,7 @@ if(clev != chargedisplay() ) //if needed updates the icons overlay update_icon() + SSvueui.check_uis_for_change(src) return //Will return 1 on failure @@ -393,7 +394,32 @@ return 0 return 1 -/obj/machinery/power/smes/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) +/obj/machinery/power/smes/vueui_data_change(list/data, mob/user, datum/vueui/ui) + // this is the data that will be sent to the ui + data = list() + var/list/monitordata = ..() + if(monitordata) + data = monitordata + data["nameTag"] = name_tag + data["chargeTaken"] = round(input_taken) + data["charging"] = inputting + data["chargeAttempt"] = input_attempt + data["chargeLevel"] = input_level + data["chargeMax"] = input_level_max + data["outputLoad"] = round(output_used) + data["outputting"] = outputting + data["outputOnline"] = output_attempt + data["outputLevel"] = output_level + data["outputMax"] = output_level_max + data["time"] = time + data["chargeMode"] = charge_mode + data["storedCapacity"] = 0 + if(capacity) + data["storedCapacity"] = round(100.0*charge/capacity, 0.1) + data["failTime"] = failure_timer * 2 + return data + +/obj/machinery/power/smes/ui_interact(mob/user) if(!can_function()) if(!terminal) to_chat(user, SPAN_WARNING("\The [src] is lacking a terminal!")) @@ -401,41 +427,13 @@ if(is_badly_damaged()) to_chat(user, SPAN_WARNING("\The [src] is too damaged to function!")) return - - // this is the data which will be sent to the ui - var/data[0] - data["nameTag"] = name_tag - if(capacity) - data["storedCapacity"] = round(100.0*charge/capacity, 0.1) - else - data["storedCapacity"] = 0 - data["charging"] = inputting - data["chargeMode"] = input_attempt - data["chargeLevel"] = input_level - data["chargeMax"] = input_level_max - data["charge_taken"] = round(input_taken) - data["outputOnline"] = output_attempt - data["outputLevel"] = output_level - data["outputMax"] = output_level_max - data["outputLoad"] = round(output_used) - data["failTime"] = failure_timer * 2 - data["outputting"] = outputting - data["time"] = time - data["charge_mode"] = charge_mode - - // update the ui if it exists, returns null if no ui is passed/found - ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open) + var/datum/vueui/ui = SSvueui.get_open_ui(user, src) if (!ui) // the ui does not exist, so we'll create a new() one - // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "smes.tmpl", "SMES Unit", 540, 420) - // when the ui is first opened this is the data it will use - ui.set_initial_data(data) + ui = new(user, src, "machinery-power-smes", 540, 420, "SMES Unit") // open the new ui window ui.open() - // auto update every Master Controller tick - ui.set_auto_update(1) /obj/machinery/power/smes/proc/Percentage() return round(100.0*charge/capacity, 0.1) @@ -447,7 +445,6 @@ if( href_list["cmode"] ) inputting(!input_attempt) update_icon() - else if( href_list["online"] ) outputting(!output_attempt) update_icon() @@ -455,27 +452,11 @@ failure_timer = 0 update_icon() else if( href_list["input"] ) - switch( href_list["input"] ) - if("min") - input_level = 0 - if("max") - input_level = input_level_max - if("set") - input_level = input(usr, "Enter new input level (0-[input_level_max])", "SMES Input Power Control", input_level) as num - input_level = max(0, min(input_level_max, input_level)) // clamp to range - + input_level = clamp(href_list["input"], 0, input_level_max) // clamp to range else if( href_list["output"] ) - switch( href_list["output"] ) - if("min") - output_level = 0 - if("max") - output_level = output_level_max - if("set") - output_level = input(usr, "Enter new output level (0-[output_level_max])", "SMES Output Power Control", output_level) as num - output_level = max(0, min(output_level_max, output_level)) // clamp to range - + output_level = clamp(href_list["output"], 0, output_level_max) // clamp to range investigate_log("input/output; on":"off"] | Input-mode: [input_attempt?"auto":"off"] by [usr.key]","singulo") - + SSvueui.check_uis_for_change(src) return 1 /obj/machinery/power/smes/proc/energy_fail(var/duration) diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 124c68daab2..1657ca84e52 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -98,6 +98,8 @@ var/sel_mode = 1 //index of the currently selected mode var/list/firemodes = list() + var/markings = 0 // for marking kills with a knife + //wielding information var/fire_delay_wielded = 0 var/recoil_wielded = 0 @@ -614,6 +616,8 @@ ..() if(get_dist(src, user) > 1) return + if(markings) + to_chat(user, SPAN_NOTICE("It has [markings] [markings == 1 ? "notch" : "notches"] carved into the stock.")) if(needspin) if(pin) to_chat(user, "\The [pin] is installed in the trigger mechanism.") @@ -701,12 +705,8 @@ to_chat(user, SPAN_NOTICE("You are no-longer stabilizing \the [name] with both hands.")) var/obj/item/offhand/O = user.get_inactive_hand() - if(O && istype(O)) + if(istype(O)) O.unwield() - else - O = user.get_active_hand() - return - else if(user.get_inactive_hand()) to_chat(user, SPAN_WARNING("You need your other hand to be empty.")) @@ -751,11 +751,10 @@ /obj/item/gun/mob_can_equip(M as mob, slot, disable_warning, ignore_blocked) //Cannot equip wielded items. - if(is_wieldable) - if(wielded) - if(!disable_warning) // unfortunately not sure there's a way to get this to only fire once when it's looped - to_chat(M, SPAN_WARNING("Lower \the [initial(name)] first!")) - return FALSE + if(wielded) + if(!disable_warning) // unfortunately not sure there's a way to get this to only fire once when it's looped + to_chat(M, SPAN_WARNING("Lower \the [initial(name)] first!")) + return FALSE return ..() @@ -814,7 +813,7 @@ if(user) var/obj/item/gun/O = user.get_inactive_hand() if(istype(O)) - to_chat(user, SPAN_NOTICE("You are no-longer stabilizing \the [name] with both hands.")) + to_chat(user, SPAN_NOTICE("You are no-longer stabilizing \the [O] with both hands.")) O.unwield() unwield() @@ -822,6 +821,9 @@ qdel(src) /obj/item/offhand/mob_can_equip(var/mob/M, slot, disable_warning = FALSE) + var/static/list/equippable_slots = list(slot_l_hand, slot_r_hand) + if(slot in equippable_slots) + return TRUE return FALSE /obj/item/gun/Destroy() @@ -908,7 +910,7 @@ if(pin && I.isscrewdriver()) visible_message(SPAN_WARNING("\The [user] begins to try and pry out \the [src]'s firing pin!")) - if(do_after(user,45 SECONDS,act_target = src)) + if(do_after(user, 45 SECONDS)) if(pin.durable || prob(50)) visible_message(SPAN_NOTICE("\The [user] pops \the [pin] out of \the [src]!")) pin.forceMove(get_turf(src)) @@ -922,6 +924,12 @@ qdel(pin) pin = null return + + if(is_sharp(I)) + user.visible_message("[user] carves a notched mark into \the [src].", SPAN_NOTICE("You carve a notched mark into \the [src].")) + markings++ + return + return ..() /obj/item/gun/proc/get_ammo() diff --git a/code/modules/projectiles/guns/energy/nuclear.dm b/code/modules/projectiles/guns/energy/nuclear.dm index d493f69f25d..6ed5e710589 100644 --- a/code/modules/projectiles/guns/energy/nuclear.dm +++ b/code/modules/projectiles/guns/energy/nuclear.dm @@ -176,3 +176,28 @@ list(mode_name="incapacitate", projectile_type=/obj/item/projectile/beam/stun, modifystate="hegemony_pistol", fire_sound='sound/weapons/Taser.ogg'), list(mode_name="smite", projectile_type=/obj/item/projectile/beam/pistol/hegemony, modifystate="hegemony_pistol", fire_sound='sound/weapons/laser1.ogg') ) + +/obj/item/gun/energy/repeater + name = "energy repeater" + desc = "A Stellar Corporate Conglomerate created energy repeater, extremely lightweight. It has three settings: Single, Three-Burst, and Full-Auto." + desc_fluff = "The SCC-ER1 was designed to be a reliable yet concealable firearm, capable of defending SCC assets and agents from various attackers." + icon = 'icons/obj/guns/erepeater.dmi' + icon_state = "energysmg100" + item_state = "energysmg100" + modifystate = "energysmg" + has_item_ratio = FALSE + fire_sound = 'sound/weapons/energy_repeater.ogg' + slot_flags = SLOT_BELT|SLOT_HOLSTER + max_shots = 20 + fire_delay = 3 + + offhand_accuracy = 6 // same as firing it in your main hand + + projectile_type = /obj/item/projectile/beam/pistol/scc + origin_tech = list(TECH_COMBAT = 5, TECH_MAGNET = 4) + + firemodes = list( + list(mode_name="single", can_autofire = FALSE, burst = 1), + list(mode_name="three-burst", can_autofire = FALSE, burst = 3, burst_accuracy = list(1,0,0), dispersion = list(0, 10, 15)), + list(mode_name="full-auto", can_autofire = TRUE, burst = 1, burst_accuracy = list(0,-1,-1,-2,-2,-2,-3), dispersion = list(5, 10, 15, 20)) + ) \ No newline at end of file diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 4006365405c..7b674f1fd82 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -314,7 +314,7 @@ burst_delay = 1 fire_delay = 30 sharp = 1 - edge = 1 + edge = TRUE anchored = 0 armor_penetration = 40 flags = NOBLOODY diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm index e5c6b0a79be..e60d6a1caaa 100644 --- a/code/modules/projectiles/guns/projectile/revolver.dm +++ b/code/modules/projectiles/guns/projectile/revolver.dm @@ -72,7 +72,7 @@ var/mob/M = usr if(!M.mind) return 0 - if(!M.mind.assigned_role == "Detective") + if(!M.mind.assigned_role == "Investigator") to_chat(M, "You don't feel cool enough to name this gun, chump.") return 0 @@ -177,16 +177,8 @@ for(var/i in 1 to secondary_max_shells) secondary_loaded += new secondary_ammo_type(src) -/obj/item/gun/projectile/revolver/lemat/verb/swap_firingmode() - set name = "Swap Firing Mode" - set category = "Object" - set desc = "Click to swap from one method of firing to another." - - var/mob/living/carbon/human/M = usr - if(!M.mind) - return 0 - - to_chat(M, "You change the firing mode on \the [src].") +/obj/item/gun/projectile/revolver/lemat/unique_action(mob/living/user) + to_chat(user, "You change the firing mode on \the [src].") if(!flipped_firing) if(max_shells && secondary_max_shells) max_shells = secondary_max_shells diff --git a/code/modules/projectiles/guns/projectile/rifle.dm b/code/modules/projectiles/guns/projectile/rifle.dm index 18aa81fabb4..e25ec45dade 100644 --- a/code/modules/projectiles/guns/projectile/rifle.dm +++ b/code/modules/projectiles/guns/projectile/rifle.dm @@ -62,6 +62,9 @@ max_shells = 4 can_sawoff = FALSE + needspin = FALSE + has_safety = FALSE + jam_chance = 0 /obj/item/gun/projectile/shotgun/pump/rifle/pipegun/examine(mob/user) diff --git a/code/modules/projectiles/pins.dm b/code/modules/projectiles/pins.dm index 721f157f70d..e0cfccc62a8 100644 --- a/code/modules/projectiles/pins.dm +++ b/code/modules/projectiles/pins.dm @@ -38,16 +38,20 @@ Firing pins as a rule can't be removed without replacing them, blame a really sh if(proximity_flag) if(istype(target, /obj/item/gun)) var/obj/item/gun/G = target + if(!G.needspin) + to_chat(user, SPAN_WARNING("\The [G] doesn't take pins.")) + return + if(G.pin && (force_replace || G.pin.pin_replaceable)) G.pin.forceMove(get_turf(G)) G.pin.gun_remove(user) - to_chat(user, "You remove [G]'s old pin.") + to_chat(user, SPAN_NOTICE("You remove \the [G]'s old pin.")) if(!G.pin) gun_insert(user, G) - to_chat(user, "You insert [src] into [G].") + to_chat(user, SPAN_NOTICE("You insert [src] into \the [G].")) else - to_chat(user, "This firearm already has a firing pin installed.") + to_chat(user, SPAN_NOTICE("This firearm already has a firing pin installed.")) /obj/item/device/firing_pin/emag_act() if(!emagged) diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index d6973236951..cf24f8ef8be 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -28,13 +28,19 @@ /obj/item/projectile/beam/pistol damage = 25 - armor_penetration = 10 + armor_penetration = 5 + +/obj/item/projectile/beam/pistol/scc + armor_penetration = 15 + + muzzle_type = /obj/effect/projectile/muzzle/laser/scc + tracer_type = /obj/effect/projectile/tracer/laser/scc + impact_type = /obj/effect/projectile/impact/laser/scc /obj/item/projectile/beam/pistol/hegemony icon = 'icons/obj/guns/hegemony_pistol.dmi' icon_state = "hegemony_pistol" damage = 30 - armor_penetration = 5 muzzle_type = /obj/effect/projectile/muzzle/hegemony tracer_type = /obj/effect/projectile/tracer/hegemony @@ -42,7 +48,7 @@ /obj/item/projectile/beam/midlaser damage = 35 - armor_penetration = 15 + armor_penetration = 10 /obj/item/projectile/beam/heavylaser name = "heavy laser" @@ -57,8 +63,8 @@ /obj/item/projectile/beam/xray name = "xray beam" icon_state = "xray" - damage = 30 - armor_penetration = 30 + damage = 15 + armor_penetration = 35 muzzle_type = /obj/effect/projectile/muzzle/xray tracer_type = /obj/effect/projectile/tracer/xray diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index c74e696bd50..2895b76708e 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -122,6 +122,7 @@ /obj/item/projectile/bullet/pistol damage = 25 + armor_penetration = 10 /obj/item/projectile/bullet/pistol/medium damage = 30 @@ -202,11 +203,11 @@ penetrating = TRUE /obj/item/projectile/bullet/rifle/a762 - damage = 45 + damage = 40 armor_penetration = 20 /obj/item/projectile/bullet/rifle/a556 - damage = 45 + damage = 40 armor_penetration = 15 /obj/item/projectile/bullet/rifle/a556/ap diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index a217e446e27..4420cb6046b 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -67,7 +67,7 @@ damage = 50 check_armor = "bullet" sharp = 1 - edge = 1 + edge = TRUE /obj/item/projectile/bullet/gyro/on_impact(var/atom/A) explosion(A, -1, 0, 2) @@ -200,7 +200,7 @@ damage = 75 check_armor = "bomb" sharp = 1 - edge = 1 + edge = TRUE /obj/item/projectile/bullet/trod/on_impact(var/atom/A) explosion(A, 0, 0, 4) @@ -300,4 +300,4 @@ icon_state= "icer_bolt" damage = 15 damage_type = BRUTE - check_armor = "energy" \ No newline at end of file + check_armor = "energy" diff --git a/code/modules/psionics/equipment/psipower_blade.dm b/code/modules/psionics/equipment/psipower_blade.dm index 7540fb0f663..57e4fe6288b 100644 --- a/code/modules/psionics/equipment/psipower_blade.dm +++ b/code/modules/psionics/equipment/psipower_blade.dm @@ -2,7 +2,7 @@ name = "psychokinetic slash" force = 10 sharp = 1 - edge = 1 + edge = TRUE maintain_cost = 1 icon_state = "psiblade_short" hitsound = 'sound/weapons/psisword.ogg' @@ -14,7 +14,7 @@ /obj/item/psychic_power/psiblade/master force = 20 maintain_cost = 2 - + /obj/item/psychic_power/psiblade/master/grand force = 30 maintain_cost = 3 diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm index dcdeff4c8ad..0868efd04f2 100644 --- a/code/modules/reagents/Chemistry-Holder.dm +++ b/code/modules/reagents/Chemistry-Holder.dm @@ -189,7 +189,7 @@ /datum/reagents/proc/has_all_reagents(var/list/check_reagents) for(var/current in check_reagents) - if(!has_reagent(current)) + if(!has_reagent(current, check_reagents[current])) return FALSE return TRUE diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index b106b2bc97d..e17379a8306 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -159,3 +159,7 @@ /decl/reagent/proc/mix_data(var/newdata, var/newamount, var/datum/reagents/holder) // You have a reagent with data, and new reagent with its own data get added, how do you deal with that? return REAGENT_DATA(holder, type) + +//Check to use when seeing if the person has the minimum dose of the reagent. Useful for stopping minimum transfer rate IV drips from applying chem effects +/decl/reagent/proc/check_min_dose(var/mob/living/carbon/M, var/min_dose = 1) + return (REAGENT_VOLUME(M.reagents, type) >= min_dose) \ No newline at end of file diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm index fae573002f1..00a5679cddd 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm @@ -66,8 +66,7 @@ taste_mult = 4 reagent_state = SOLID metabolism = REM * 2 - ingest_met = REM * 4 - var/nutriment_factor = 12 // Per removed in digest. + var/nutriment_factor = 8 // Per removed in digest. var/hydration_factor = 0 // Per removed in digest. var/blood_factor = 2 var/regen_factor = 0.8 @@ -82,7 +81,7 @@ name = "Synthetic Nutriment" description = "A cheaper alternative to actual nutriment." taste_description = "cheap food" - nutriment_factor = 10 + nutriment_factor = 6 attrition_factor = (REM * 4)/BASE_MAX_NUTRITION // Increases attrition rate. /decl/reagent/nutriment/mix_data(var/list/newdata, var/newamount, var/datum/reagents/holder) @@ -135,7 +134,7 @@ Generally coatings are intended for deep frying foods */ /decl/reagent/nutriment/coating - nutriment_factor = 6 //Less dense than the food itself, but coatings still add extra calories + nutriment_factor = 4 //Less dense than the food itself, but coatings still add extra calories var/icon_raw var/icon_cooked var/coated_adj = "coated" @@ -251,7 +250,7 @@ description = "More commonly known as fat, the third macronutrient, with over double the energy content of carbs and protein" reagent_state = SOLID - nutriment_factor = 27//The caloric ratio of carb/protein/fat is 4:4:9 + nutriment_factor = 12 color = "#CCCCCC" taste_description = "fat" @@ -309,7 +308,7 @@ /decl/reagent/nutriment/honey name = "Honey" description = "A golden yellow syrup, loaded with sugary sweetness." - nutriment_factor = 10 + nutriment_factor = 8 color = "#FFFF00" taste_description = "honey" germ_adjust = 5 @@ -2502,14 +2501,14 @@ /decl/reagent/alcohol/jovian_storm name = "Jovian Storm" - description = "Named after Jupiter’s storm. It’ll blow you away." + description = "Named after Jupiter's storm. It'll blow you away." color = "#AA856A" strength = 15 taste_description = "stormy sweetness" glass_icon_state = "jovianstormglass" glass_name = "glass of Jovian Storm" - glass_desc = "A classic Callistean drink named after Jupiter’s storm. It’ll blow you away." + glass_desc = "A classic Callistean drink named after Jupiter's storm. It'll blow you away." glass_center_of_mass = list("x"=16, "y"=5) /decl/reagent/alcohol/bananahonk diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm index bfdf41fa37a..1f8b1acff62 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm @@ -13,8 +13,9 @@ taste_description = "bitterness" /decl/reagent/inaprovaline/affect_blood(var/mob/living/carbon/M, var/alien, var/removed, var/datum/reagents/holder) - M.add_chemical_effect(CE_STABLE) - M.add_chemical_effect(CE_PAINKILLER, 25) + if(check_min_dose(M, 0.25)) + M.add_chemical_effect(CE_STABLE) + M.add_chemical_effect(CE_PAINKILLER, 25) /decl/reagent/inaprovaline/overdose(var/mob/living/carbon/M, var/alien, var/removed, var/datum/reagents/holder) if(prob(2)) @@ -134,7 +135,8 @@ if(remove_generic) M.drowsyness = max(0, M.drowsyness - 6 * removed) M.hallucination -= (2 * removed) - M.add_up_to_chemical_effect(CE_ANTITOXIN, 1) + if(check_min_dose(M, 0.5)) + M.add_up_to_chemical_effect(CE_ANTITOXIN, 1) var/removing = (4 * removed) var/datum/reagents/ingested = M.get_ingested_reagents() @@ -165,7 +167,8 @@ var/strength = 6 /decl/reagent/dexalin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed, var/datum/reagents/holder) - M.add_chemical_effect(CE_OXYGENATED, strength/6) // 1 for dexalin, 2 for dexplus + if(check_min_dose(M, 0.5)) + M.add_chemical_effect(CE_OXYGENATED, strength/6) // 1 for dexalin, 2 for dexplus holder.remove_reagent(/decl/reagent/lexorin, strength/3 * removed) //Hyperoxia causes brain and eye damage @@ -261,8 +264,9 @@ breathe_mul = 0 /decl/reagent/perconol/affect_blood(var/mob/living/carbon/M, var/alien, var/removed, var/datum/reagents/holder) - M.add_chemical_effect(CE_PAINKILLER, 50) - M.add_up_to_chemical_effect(CE_NOFEVER, 5) //Good enough to handle fevers for a few light infections or one bad one. + if(check_min_dose(M)) + M.add_chemical_effect(CE_PAINKILLER, 50) + M.add_up_to_chemical_effect(CE_NOFEVER, 5) //Good enough to handle fevers for a few light infections or one bad one. /decl/reagent/perconol/overdose(var/mob/living/carbon/M, var/alien, var/datum/reagents/holder) ..() @@ -284,11 +288,12 @@ breathe_mul = 0 /decl/reagent/mortaphenyl/affect_blood(var/mob/living/carbon/M, var/alien, var/removed, var/datum/reagents/holder) - M.add_chemical_effect(CE_PAINKILLER, 80) - if(!M.chem_effects[CE_CLEARSIGHT]) - M.eye_blurry = max(M.eye_blurry, 5) - if(!M.chem_effects[CE_STRAIGHTWALK]) - M.confused = max(M.confused, 10) + if(check_min_dose(M)) + M.add_chemical_effect(CE_PAINKILLER, 80) + if(!M.chem_effects[CE_CLEARSIGHT]) + M.eye_blurry = max(M.eye_blurry, 5) + if(!M.chem_effects[CE_STRAIGHTWALK]) + M.confused = max(M.confused, 10) var/mob/living/carbon/human/H = M if(!istype(H)) @@ -343,11 +348,12 @@ breathe_mul = 0 /decl/reagent/oxycomorphine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed, var/datum/reagents/holder) - M.add_chemical_effect(CE_PAINKILLER, 200) - if(!M.chem_effects[CE_CLEARSIGHT]) - M.eye_blurry = max(M.eye_blurry, 5) - if(!M.chem_effects[CE_STRAIGHTWALK]) - M.confused = max(M.confused, 20) + if(check_min_dose(M)) + M.add_chemical_effect(CE_PAINKILLER, 200) + if(!M.chem_effects[CE_CLEARSIGHT]) + M.eye_blurry = max(M.eye_blurry, 5) + if(!M.chem_effects[CE_STRAIGHTWALK]) + M.confused = max(M.confused, 20) var/mob/living/carbon/human/H = M if(!istype(H)) @@ -426,14 +432,14 @@ metabolism_min = REM * 0.075 /decl/reagent/alkysine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed, var/datum/reagents/holder) - if(REAGENT_VOLUME(holder, type) >= 2) //Increased effectiveness & no side-effects if given via IV drip with low transfer rate. + if(check_min_dose(M, 2)) //Increased effectiveness & no side-effects if given via IV drip with low transfer rate. + if(prob(M.chem_doses[type])) + to_chat(M, SPAN_WARNING(pick("Everything is spinning!", "The room won't stop moving...", "You lose track of your thoughts."))) M.dizziness = max(125, M.dizziness) M.make_dizzy(5) - if(!(REAGENT_VOLUME(holder, type) > 10)) - var/obj/item/organ/internal/brain/B = M.internal_organs_by_name[BP_BRAIN] - if(B && M.species && M.species.has_organ[BP_BRAIN] && !isipc(M)) - if(prob(M.chem_doses[type]/5) && !B.has_trauma_type(BRAIN_TRAUMA_MILD)) - B.gain_trauma_type(pick(/datum/brain_trauma/mild/dumbness, /datum/brain_trauma/mild/muscle_weakness, /datum/brain_trauma/mild/colorblind)) //Handpicked suggested traumas considered less disruptive and conducive to roleplay. + if(!(REAGENT_VOLUME(holder, type) > 10)) //Prevents doubling up with overdose + M.confused = max(M.confused, 10) + M.slurring = max(M.slurring, 50) /decl/reagent/alkysine/affect_chem_effect(var/mob/living/carbon/M, var/alien, var/removed, var/datum/reagents/holder) . = ..() @@ -446,13 +452,11 @@ M.add_chemical_effect(CE_PAINKILLER, 10) /decl/reagent/alkysine/overdose(var/mob/living/carbon/M, var/alien, var/removed, var/datum/reagents/holder) - M.hallucination = max(M.hallucination, 15) - var/obj/item/organ/internal/brain/B = M.internal_organs_by_name[BP_BRAIN] - if(B && M.species && M.species.has_organ[BP_BRAIN] && !isipc(M)) - if(prob(M.chem_doses[type] / 2) && !B.has_trauma_type(BRAIN_TRAUMA_SEVERE) && !B.has_trauma_type(BRAIN_TRAUMA_MILD) && !B.has_trauma_type(BRAIN_TRAUMA_SPECIAL)) - B.gain_trauma_type(/datum/brain_trauma/severe/paralysis, /datum/brain_trauma/severe/aphasia, /datum/brain_trauma/special/imaginary_friend) + M.hallucination = max(M.hallucination, 50) + M.add_chemical_effect(CE_UNDEXTROUS) if(prob(M.chem_doses[type])) - to_chat(M, SPAN_WARNING(pick("You have a painful headache!", "You feel a throbbing pain behind your eyes!"))) + to_chat(M, SPAN_WARNING(pick("You lose motor control for a moment!", "Your body seizes up!"))) + M.paralysis = max(M.paralysis, 3 SECONDS) ..() /decl/reagent/oculine @@ -478,7 +482,8 @@ /decl/reagent/oculine/affect_chem_effect(var/mob/living/carbon/M, var/alien, var/removed, var/datum/reagents/holder) . = ..() if(.) - M.add_chemical_effect(CE_CLEARSIGHT) + if(check_min_dose(M)) + M.add_chemical_effect(CE_CLEARSIGHT) /decl/reagent/oculine/overdose(var/mob/living/carbon/M, var/alien, var/removed, var/datum/reagents/holder) M.hallucination = max(M.hallucination, 15) @@ -558,8 +563,9 @@ /decl/reagent/hyperzine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed, var/datum/reagents/holder) if(prob(5)) M.emote(pick("twitch", "blink_r", "shiver")) - M.add_chemical_effect(CE_SPEEDBOOST, 1) - M.add_chemical_effect(CE_PULSE, 1) + if(check_min_dose(M, 0.5)) + M.add_chemical_effect(CE_SPEEDBOOST, 1) + M.add_chemical_effect(CE_PULSE, 1) /decl/reagent/hyperzine/overdose(var/mob/living/carbon/M, var/alien, var/removed, var/datum/reagents/holder) M.adjustNutritionLoss(5*removed) @@ -629,7 +635,8 @@ /decl/reagent/ethylredoxrazine/affect_chem_effect(var/mob/living/carbon/M, var/alien, var/removed, var/datum/reagents/holder) . = ..() if(.) - M.add_chemical_effect(CE_STRAIGHTWALK) + if(check_min_dose(M)) + M.add_chemical_effect(CE_STRAIGHTWALK) /decl/reagent/hyronalin name = "Hyronalin" @@ -745,7 +752,8 @@ glass_desc = "You'd better not." /decl/reagent/coughsyrup/affect_blood(var/mob/living/carbon/M, var/alien, var/removed, var/datum/reagents/holder) - M.add_chemical_effect(CE_PAINKILLER, 5) // very slight painkiller effect at low doses + if(check_min_dose(M)) + M.add_chemical_effect(CE_PAINKILLER, 5) // very slight painkiller effect at low doses /decl/reagent/coughsyrup/overdose(var/mob/living/carbon/human/M, var/alien, var/removed, var/datum/reagents/holder) // effects based loosely on DXM M.hallucination = max(M.hallucination, 40) @@ -820,6 +828,8 @@ taste_description = "bitterness" /decl/reagent/leporazine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed, var/datum/reagents/holder) + if(!check_min_dose(M)) + return M.add_up_to_chemical_effect(CE_NOFEVER, 5) //Also handles the effects of fevers if(!(REAGENT_VOLUME(holder, type) > 20)) if(M.bodytemperature > 310) @@ -836,7 +846,7 @@ /* mental */ -#define ANTIDEPRESSANT_MESSAGE_DELAY 1800 //3 minutes +#define MEDICATION_MESSAGE_DELAY 10 MINUTES /decl/reagent/mental name = null //Just like alcohol @@ -851,77 +861,32 @@ taste_description = "bugs" ingest_mul = 1 var/alchohol_affected = 1 - var/min_dose = 1 - var/messagedelay = ANTIDEPRESSANT_MESSAGE_DELAY - var/list/goodmessage = list() //Messages when all your brain traumas are cured. - var/list/badmessage = list() //Messages when you still have at least one brain trauma it's suppose to cure. - var/list/worstmessage = list() //Messages when the user is at possible risk for more trauma - var/list/suppress_traumas //List of brain traumas that the medication temporarily suppresses, with the key being the brain trauma and the value being the minimum dosage required to cure. Negative values means that the trauma is temporarily gained on the value instead. - var/list/dosage_traumas //List of brain traumas that the medication permanently adds at these dosages, with the key being the brain trauma and the value being base percent chance to add. - var/list/withdrawal_traumas //List of withdrawl effects that the medication permanently adds during withdrawl, with the key being the brain trauma, and the value being the base percent chance to add. - var/list/suppressing_reagents = list() // List of reagents that suppress the withdrawal effects, with the key being the reagent and the vlue being the minimum dosage required to suppress. + var/messagedelay = MEDICATION_MESSAGE_DELAY + var/list/goodmessage = list() //Fluff messages fallback_specific_heat = 1.5 /decl/reagent/mental/initialize_data(newdata, datum/reagents/holder) var/data = newdata - LAZYSET(data, "last_tick_time", 0) + LAZYSET(data, "last_tick_time", world.time + (messagedelay / 2)) //Small startup delay return data /decl/reagent/mental/affect_blood(var/mob/living/carbon/human/H, var/alien, var/removed, var/datum/reagents/holder) - if(!istype(H) || LAZYACCESS(H.chem_doses, type) < min_dose || (world.time < holder.reagent_data[type]["last_tick_time"] && holder.reagent_volumes[type] > removed) || messagedelay == -1) + if(!istype(H) || world.time < holder.reagent_data[type]["last_tick_time"] || messagedelay == -1) return - var/hastrauma = 0 //whether or not the brain has trauma - var/obj/item/organ/internal/brain/B = H.internal_organs_by_name[BP_BRAIN] var/bac = H.get_blood_alcohol() - var/mdelay = messagedelay - if(alchohol_affected && bac > 0.03) H.hallucination = max(H.hallucination, bac * 400) - if(B) //You won't feel anything if you don't have a brain. - for(var/datum/brain_trauma/BT in B.traumas) - var/goal_volume = suppress_traumas[BT] - if (REAGENT_VOLUME(holder, type) >= goal_volume) // If the dosage is greater than the goal, then suppress the trauma. - if(!BT.suppressed && !BT.permanent) - BT.suppressed = 1 - BT.on_lose() - else if(REAGENT_VOLUME(holder, type) < goal_volume-1 && goal_volume > 0) // -1 So it doesn't spam back and forth constantly if reagents are being metabolized - if(BT.suppressed) - BT.suppressed = 0 - BT.on_gain() - hastrauma = 1 - for(var/datum/brain_trauma/BT in dosage_traumas) - var/percentchance = max(0,dosage_traumas[BT] - LAZYACCESS(H.chem_doses, type)*10) // If you've been taking this medication for a while then side effects are rarer. - if(!H.has_trauma_type(BT) && prob(percentchance)) - B.gain_trauma(BT,FALSE) - if(REAGENT_VOLUME(holder, type) < LAZYACCESS(H.chem_doses, type)/4) //If you haven't been taking your regular dose, then cause issues. - var/suppress_withdrawl = FALSE - for(var/k in suppressing_reagents) - var/decl/reagent/v = suppressing_reagents[k] - if(H.reagents.has_reagent(v,k)) - suppress_withdrawl = TRUE - break - if(!suppress_withdrawl) - if (H.shock_stage < 20 && worstmessage.len) - to_chat(H, SPAN_DANGER("[pick(worstmessage)]")) - mdelay /= 4 - for(var/k in withdrawal_traumas) - var/datum/brain_trauma/BT = k - var/percentchance = max(withdrawal_traumas[k] * (LAZYACCESS(H.chem_doses, type)/20)) //The higher the dosage, the more likely it is do get withdrawal traumas. - if(!H.has_trauma_type(BT) && prob(percentchance)) - B.gain_trauma(BT,FALSE) - else if(hastrauma || REAGENT_VOLUME(holder, type) < LAZYACCESS(H.chem_doses, type)/2) //If your current dose is not high enough, then alert the player. - if (H.shock_stage < 10 && badmessage.len) - to_chat(H, SPAN_WARNING("[pick(badmessage)]")) - mdelay /= 2 - else - if (H.shock_stage < 5 && goodmessage.len) - to_chat(H, SPAN_GOOD("[pick(goodmessage)]")) + if(H.chem_doses[type] < overdose && H.shock_stage < 5) //Don't want feel-good messages when we're suffering an OD or particularly hurt/injured + to_chat(H, SPAN_GOOD("[pick(goodmessage)]")) LAZYINITLIST(holder.reagent_data) - LAZYSET(holder.reagent_data[type], "last_tick_time", world.time + (mdelay SECONDS)) + LAZYSET(holder.reagent_data[type], "last_tick_time", world.time + (messagedelay)) + +/decl/reagent/mental/overdose(var/mob/living/carbon/M, var/alien, var/datum/reagents/holder) + M.add_chemical_effect(CE_EMETIC, M.chem_doses[type] / 6) /decl/reagent/mental/nicotine name = "Nicotine" @@ -932,15 +897,8 @@ overdose = 15 od_minimum_dose = 3 taste_description = "bitterness" + messagedelay = MEDICATION_MESSAGE_DELAY * 0.75 goodmessage = list("You feel good.","You feel relaxed.","You feel alert and focused.") - badmessage = list("You start to crave nicotine...") - worstmessage = list("You need your nicotine fix!") - suppress_traumas = list( - /datum/brain_trauma/mild/phobia = 0.1, - /datum/brain_trauma/mild/muscle_weakness/ = 0.05 - ) - conflicting_reagent = null - min_dose = 0.0064 * REM /decl/reagent/mental/nicotine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed, var/datum/reagents/holder) . = ..() @@ -961,28 +919,11 @@ od_minimum_dose = 0.2 taste_description = "paper" goodmessage = list("You feel focused.","You feel like you have no distractions.","You feel willing to work.") - badmessage = list("You feel a little distracted...","You feel slight agitation...","You feel a dislike towards work...") - worstmessage = list("You feel completely distracted...","You feel like you don't want to work...","You think you see things...") - suppress_traumas = list( - /datum/brain_trauma/special/imaginary_friend = 20, - /datum/brain_trauma/mild/hallucinations = 10, - /datum/brain_trauma/mild/phobia/ = 10 - ) - dosage_traumas = list( - /datum/brain_trauma/mild/hallucinations = 5 - ) - withdrawal_traumas = list( - /datum/brain_trauma/mild/phobia/ = 5, - /datum/brain_trauma/mild/hallucinations = 2 - ) /decl/reagent/mental/corophenidate/affect_blood(var/mob/living/carbon/M, var/alien, var/removed, var/datum/reagents/holder) M.add_chemical_effect(CE_HALLUCINATE, -1) ..() -/decl/reagent/mental/corophendiate/overdose(var/mob/living/carbon/M, var/alien, var/datum/reagents/holder) - M.add_chemical_effect(CE_EMETIC, M.chem_doses[type] / 6) - /decl/reagent/mental/neurostabin name = "Neurostabin" description = "Neurostabin is a new generation, psychoactive drug used in the treatment of psychoses, and also has clinical significance in treating muscle weakness. It has far fewer side effects than previous generations of psychoactive drugs. Withdrawal symptoms include hallucinations and the development of phobias." @@ -992,24 +933,6 @@ od_minimum_dose = 0.2 taste_description = "bitterness" goodmessage = list("You do not feel the need to worry about simple things.","You feel calm and level-headed.","You feel fine.") - badmessage = list("You feel a little blue.","You feel slight agitation...","You feel a little nervous...") - worstmessage = list("You worry about the littlest thing...","You feel like you are at risk...","You think you see things...") - suppress_traumas = list( - /datum/brain_trauma/mild/phobia/ = 2, - /datum/brain_trauma/severe/split_personality = 10, - /datum/brain_trauma/special/imaginary_friend = 20, - /datum/brain_trauma/mild/muscle_weakness = 10 - ) - dosage_traumas = list( - /datum/brain_trauma/mild/hallucinations = 5 - ) - withdrawal_traumas = list( - /datum/brain_trauma/mild/phobia/ = 5, - /datum/brain_trauma/mild/hallucinations = 2 - ) - -/decl/reagent/mental/neurostabin/overdose(var/mob/living/carbon/M, var/alien, var/datum/reagents/holder) - M.add_chemical_effect(CE_EMETIC, M.chem_doses[type] / 6) /decl/reagent/mental/parvosil name = "Parvosil" @@ -1019,23 +942,7 @@ metabolism = 0.02 * REM od_minimum_dose = 0.4 taste_description = "paper" - goodmessage = list("You feel fine.","You feel rational.","You feel decent.") - badmessage = list("You feel a little blue.","You feel slight agitation...","You feel a little nervous...") - worstmessage = list("You worry about the littlest thing...","You feel like you are at risk...","You think you see things...") - suppress_traumas = list( - /datum/brain_trauma/mild/phobia/ = 2 - ) - dosage_traumas = list( - /datum/brain_trauma/mild/hallucinations = 5 - ) - withdrawal_traumas = list( - /datum/brain_trauma/mild/phobia/ = 10, - /datum/brain_trauma/mild/hallucinations = 5 - ) - suppressing_reagents = list(/decl/reagent/mental/neurostabin = 5) - -/decl/reagent/mental/parvosil/overdose(var/mob/living/carbon/M, var/alien, var/datum/reagents/holder) - M.add_chemical_effect(CE_EMETIC, M.chem_doses[type] / 6) + goodmessage = list("You feel fine.","You feel rational.","You feel secure.") /decl/reagent/mental/minaphobin name = "Minaphobin" @@ -1045,27 +952,7 @@ metabolism = 0.01 * REM od_minimum_dose = 0.2 taste_description = "duct tape" - goodmessage = list("You feel relaxed.","You feel at ease.","You feel care free.") - badmessage = list("You feel worried.","You feel slight agitation.","You feel nervous.") - worstmessage = list("You worry about the littlest thing...","You feel like you are at risk...","You think you see things...") - suppress_traumas = list( - /datum/brain_trauma/mild/phobia/ = 1, - /datum/brain_trauma/severe/monophobia = 5 - ) - dosage_traumas = list( - /datum/brain_trauma/mild/hallucinations = 5 - ) - withdrawal_traumas = list( - /datum/brain_trauma/mild/phobia/ = 10, - /datum/brain_trauma/mild/hallucinations = 10 - ) - suppressing_reagents = list( - /decl/reagent/mental/neurostabin = 5, - /decl/reagent/mental/parvosil = 5 - ) - -/decl/reagent/mental/minaphobin/overdose(var/mob/living/carbon/M, var/alien, var/datum/reagents/holder) - M.add_chemical_effect(CE_EMETIC, M.chem_doses[type] / 6) + goodmessage = list("You feel relaxed.","You feel at ease.","You feel carefree.") /decl/reagent/mental/emoxanyl name = "Emoxanyl" @@ -1075,66 +962,23 @@ metabolism = 0.01 * REM od_minimum_dose = 0.2 taste_description = "scotch tape" - goodmessage = list("You feel at ease.","Your mind feels healthy..") - badmessage = list("You worry about the littlest thing.","Your head starts to feel weird...","You think you see things.") - worstmessage = list("You start to overreact to sounds and movement...","Your head feels really weird.","You are really starting to see things...") - messagedelay = ANTIDEPRESSANT_MESSAGE_DELAY * 0.75 - suppress_traumas = list( - /datum/brain_trauma/mild/concussion = 5, - /datum/brain_trauma/mild/phobia/ = 5 - ) - dosage_traumas = list( - /datum/brain_trauma/mild/hallucinations = 5 - ) - withdrawal_traumas = list( - /datum/brain_trauma/mild/phobia/ = 25, - /datum/brain_trauma/mild/hallucinations = 25, - /datum/brain_trauma/mild/concussion = 10 - ) - suppressing_reagents = list( - /decl/reagent/mental/neurapan = 5, - /decl/reagent/mental/minaphobin = 5, - /decl/reagent/mental/neurostabin = 10, - /decl/reagent/mental/parvosil = 10 - ) - -/decl/reagent/mental/emoxanyl/overdose(var/mob/living/carbon/M, var/alien, var/datum/reagents/holder) - M.add_chemical_effect(CE_EMETIC, M.chem_doses[type] / 6) + goodmessage = list("You feel at ease.","Your mind feels great.", "You feel centered.") + messagedelay = MEDICATION_MESSAGE_DELAY * 0.75 /decl/reagent/mental/orastabin name = "Orastabin" description = "Orastabin is a new generation, complex psychoactive medication used in the treatment of anxiety disorders and speech impediments. It has fewer side effects than many other forms of psychoactive drugs. Withdrawal symptoms include hallucinations and heightened anxiety." reagent_state = LIQUID color = "#FF88FF" - metabolism = 0.01 * REM + metabolism = 0.005 * REM od_minimum_dose = 0.2 taste_description = "glue" - goodmessage = list("You feel at ease.","Your mind feels healthy..","You feel unafraid to speak...") - badmessage = list("You worry about the littlest thing.","You think you see things.") - worstmessage = list("You start to overreact to sounds and movement...","You are really starting to see things...") - messagedelay = ANTIDEPRESSANT_MESSAGE_DELAY * 0.75 - suppress_traumas = list( - /datum/brain_trauma/mild/phobia = 5, - /datum/brain_trauma/mild/stuttering = 2, - /datum/brain_trauma/severe/monophobia = 5 - ) - dosage_traumas = list( - /datum/brain_trauma/mild/hallucinations = 10 - ) - withdrawal_traumas = list( - /datum/brain_trauma/mild/phobia/ = 25, - /datum/brain_trauma/mild/hallucinations = 25 - ) - suppressing_reagents = list( - /decl/reagent/mental/emoxanyl = 5, - /decl/reagent/mental/neurapan = 5, - /decl/reagent/mental/minaphobin = 5, - /decl/reagent/mental/neurostabin = 10, - /decl/reagent/mental/parvosil = 10 - ) + goodmessage = list("You feel at ease.","You feel like you can speak with confidence.","You feel unafraid to speak.") + messagedelay = MEDICATION_MESSAGE_DELAY * 0.75 -/decl/reagent/mental/orastabin/overdose(var/mob/living/carbon/M, var/alien, var/datum/reagents/holder) - M.add_chemical_effect(CE_EMETIC, M.chem_doses[type] / 6) +/decl/reagent/mental/orastabin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed, var/datum/reagents/holder) + M.add_chemical_effect(CE_NOSTUTTER, 2) + ..() /decl/reagent/mental/neurapan name = "Neurapan" @@ -1146,38 +990,11 @@ od_minimum_dose = 0.4 taste_description = "tranquility" goodmessage = list("Your mind feels as one.","You feel incredibly comfortable.","Your body feels good.","Your thoughts are clear.", "You feel stress free.", "Nothing is bothering you anymore.") - badmessage = list("The tranquility fades and you start hearing voices...","You think you see things...","You remember the stress you left behind...","You want attention...") - worstmessage = list("You think you start seeing things...","You swear someone inside you spoke to you...","You hate feeling alone...","You feel really upset...") - messagedelay = ANTIDEPRESSANT_MESSAGE_DELAY * 0.5 - suppress_traumas = list( - /datum/brain_trauma/severe/split_personality = 5, - /datum/brain_trauma/special/imaginary_friend = 10, - /datum/brain_trauma/mild/stuttering = 2, - /datum/brain_trauma/mild/speech_impediment = 5, - /datum/brain_trauma/severe/monophobia = 5, - /datum/brain_trauma/mild/hallucinations = 5, - /datum/brain_trauma/mild/muscle_spasms = 10, - /datum/brain_trauma/mild/tourettes = 10 - ) - dosage_traumas = list( - /datum/brain_trauma/severe/pacifism = 25 - ) - withdrawal_traumas = list( - /datum/brain_trauma/mild/hallucinations = 100, - /datum/brain_trauma/severe/split_personality = 10, - /datum/brain_trauma/special/imaginary_friend = 20, - /datum/brain_trauma/mild/tourettes = 50, - /datum/brain_trauma/severe/monophobia = 50 - ) - suppressing_reagents = list( - /decl/reagent/mental/orastabin = 20, - /decl/reagent/mental/emoxanyl = 20, - /decl/reagent/mental/neurapan = 20, - /decl/reagent/mental/minaphobin = 20 - ) + messagedelay = MEDICATION_MESSAGE_DELAY * 0.5 /decl/reagent/mental/neurapan/affect_blood(var/mob/living/carbon/M, var/alien, var/removed, var/datum/reagents/holder) M.add_chemical_effect(CE_HALLUCINATE, -2) + M.add_chemical_effect(CE_NOSTUTTER, 1) ..() /decl/reagent/mental/neurapan/overdose(var/mob/living/carbon/M, var/alien, var/datum/reagents/holder) @@ -1202,35 +1019,11 @@ od_minimum_dose = 0.4 taste_description = "paint" goodmessage = list("Your mind feels as one.","You feel comfortable speaking.","Your body feels good.","Your thoughts are pure.","Your body feels responsive.","You can handle being alone.") - badmessage = list("You start hearing voices...","You think you see things...","You want a friend...") - worstmessage = list("You think you start seeing things...","You swear someone inside you spoke to you...") - messagedelay = ANTIDEPRESSANT_MESSAGE_DELAY * 0.5 - suppress_traumas = list( - /datum/brain_trauma/severe/split_personality = 5, - /datum/brain_trauma/special/imaginary_friend = 10, - /datum/brain_trauma/mild/stuttering = 1, - /datum/brain_trauma/mild/speech_impediment = 2, - /datum/brain_trauma/severe/monophobia = 2, - /datum/brain_trauma/mild/muscle_spasms = 5, - /datum/brain_trauma/mild/tourettes = 10 - ) - dosage_traumas = list( - /datum/brain_trauma/severe/pacifism = 25 - ) - withdrawal_traumas = list( - /datum/brain_trauma/mild/hallucinations = 200, - /datum/brain_trauma/severe/split_personality = 50, - /datum/brain_trauma/special/imaginary_friend = 50 - ) - suppressing_reagents = list( - /decl/reagent/mental/orastabin = 20, - /decl/reagent/mental/emoxanyl = 20, - /decl/reagent/mental/neurapan = 20, - /decl/reagent/mental/minaphobin = 20 - ) + messagedelay = MEDICATION_MESSAGE_DELAY * 0.5 /decl/reagent/mental/nerospectan/affect_blood(var/mob/living/carbon/M, var/alien, var/removed, var/datum/reagents/holder) M.add_chemical_effect(CE_HALLUCINATE, -2) + M.add_chemical_effect(CE_NOSTUTTER, 1) ..() /decl/reagent/mental/nerospectan/overdose(var/mob/living/carbon/M, var/alien, var/datum/reagents/holder) @@ -1245,19 +1038,11 @@ od_minimum_dose = 1 taste_description = "something" goodmessage = list("You feel like you have nothing to hide.","You feel compelled to spill your secrets.","You feel like you can trust those around you.") - badmessage = list() - worstmessage = list() - suppress_traumas = list( - /datum/brain_trauma/mild/tourettes = 1 - ) - dosage_traumas = list( - /datum/brain_trauma/severe/pacifism = 25 - ) messagedelay = 30 ingest_mul = 1 /decl/reagent/mental/truthserum/overdose(var/mob/living/carbon/M, var/alien, var/datum/reagents/holder) - M.add_chemical_effect(CE_EMETIC, M.chem_doses[type] / 6) + M.add_chemical_effect(CE_PACIFIED, 1) /decl/reagent/mental/vaam name = "V'krexi Amino Acid Mixture" @@ -1265,16 +1050,10 @@ reagent_state = LIQUID color = "#bcd827" metabolism = 0.4 * REM - overdose = 20 taste_description = "bitterness" metabolism_min = 0.5 breathe_mul = 0 - goodmessage = list("You feel great.","You feel full of energy.","You feel alert and focused.") - badmessage = list("You can't think straight...","You're sweating heavily...","Your heart is racing...") - worstmessage = list("You feel incredibly lightheaded!","You feel incredibly dizzy!") - suppress_traumas = list( - /datum/brain_trauma/mild/muscle_weakness/ = 0.01 - ) + goodmessage = list("You feel great!","You feel full of energy!","You feel alert and focused.") /decl/reagent/mental/vaam/affect_blood(var/mob/living/carbon/M, var/alien, var/removed, var/datum/reagents/holder) . = ..() @@ -1291,9 +1070,6 @@ if (prob(10)) to_chat(M, pick("You feel nauseous", "Ugghh....", "Your stomach churns uncomfortably", "You feel like you're about to throw up", "You feel queasy","You feel pressure in your abdomen")) - if (prob(M.chem_doses[type])) - M.vomit() - /decl/reagent/mental/kokoreed name = "Koko Reed Juice" @@ -1305,11 +1081,6 @@ od_minimum_dose = 3 taste_description = "sugar" goodmessage = list("You feel pleasantly warm.","You feel like you've been basking in the sun.","You feel focused and warm...") - badmessage = list() - worstmessage = list() - suppress_traumas = list() - conflicting_reagent = null - min_dose = 0.0064 * REM /decl/reagent/mental/kokoreed/affect_blood(var/mob/living/carbon/M, var/alien, var/removed, var/datum/reagents/holder) . = ..() @@ -1331,13 +1102,7 @@ scannable = TRUE taste_description = "bitterness" metabolism_min = REM * 0.25 - var/list/curable_traumas = list( - /datum/brain_trauma/mild/dumbness/, - /datum/brain_trauma/severe/blindness/, - /datum/brain_trauma/severe/paralysis/, - /datum/brain_trauma/severe/total_colorblind/, - /datum/brain_trauma/severe/aphasia/ - ) + /decl/reagent/cataleptinol/affect_blood(var/mob/living/carbon/human/M, var/alien, var/removed, var/datum/reagents/holder) M.add_chemical_effect(CE_PAINKILLER, 10) @@ -1350,28 +1115,14 @@ else M.add_chemical_effect(CE_BRAIN_REGEN, 20) //1 unit of Cataleptinol will raise brain activity by 5%. - if(prob(chance)) - M.cure_trauma_type(pick(curable_traumas)) /decl/reagent/cataleptinol/overdose(var/mob/living/carbon/M, var/alien, var/removed, var/datum/reagents/holder) M.hallucination = max(M.hallucination, 15) - var/obj/item/organ/internal/brain/B = M.internal_organs_by_name[BP_BRAIN] - if(B && M.species && M.species.has_organ[BP_BRAIN] && !isipc(M)) - if(prob(M.chem_doses[type] / 2) && !B.has_trauma_type(BRAIN_TRAUMA_SEVERE) && !B.has_trauma_type(BRAIN_TRAUMA_MILD) && !B.has_trauma_type(BRAIN_TRAUMA_SPECIAL)) - B.gain_trauma_type(pick(/datum/brain_trauma/severe/paralysis, /datum/brain_trauma/severe/aphasia, /datum/brain_trauma/mild/dumbness, /datum/brain_trauma/mild/muscle_weakness, /datum/brain_trauma/mild/colorblind, /datum/brain_trauma/special/imaginary_friend)) if(prob(5)) to_chat(M, SPAN_WARNING(pick("You have a painful headache!", "You feel a throbbing pain behind your eyes!"))) ..() -//Things that are not cured/treated by medication: -//Gerstmann Syndrome -//Cerebral Near-Blindness -//Mutism -//Cerebral Blindness -//Narcolepsy -//Discoordination - /decl/reagent/fluvectionem name = "Fluvectionem" description = "Fluvectionem is a complex anti-toxin medication that is capable of purging the bloodstream of toxic reagents. The drug is capable of neutralising the most difficult of compounds and acts very fast, however it is inefficient and results in benign waste products that can be damaging to the liver." @@ -1439,7 +1190,7 @@ . = ..() /decl/reagent/pulmodeiectionem/affect_ingest(var/mob/living/carbon/human/H, var/alien, var/removed, var/datum/reagents/holder) - if(REAGENT_VOLUME(holder, type) > 5) + if(check_min_dose(H, 5)) if(prob(50)) H.visible_message("[H] splutters, coughing up a cloud of purple dust.", "You cough up a cloud of purple dust.") remove_self(10, holder) @@ -1586,7 +1337,7 @@ else M.adjustHydrationLoss(-removed*5) if(REAGENT_VOLUME(holder, type) < 3) - M.add_chemical_effect(CE_BLOODRESTORE, 4 * removed) + M.add_chemical_effect(CE_BLOODRESTORE, 2 * removed) /decl/reagent/saline/overdose(var/mob/living/carbon/M, var/alien, var/datum/reagents/holder) M.confused = max(M.confused, 20) @@ -1650,7 +1401,8 @@ taste_description = "numbness" /decl/reagent/pacifier/affect_blood(var/mob/living/carbon/H, var/alien, var/removed, var/datum/reagents/holder) - H.add_chemical_effect(CE_PACIFIED, 1) + if(check_min_dose(H)) + H.add_chemical_effect(CE_PACIFIED, 1) /decl/reagent/pacifier/overdose(var/mob/living/carbon/H, var/alien, var/datum/reagents/holder) H.add_chemical_effect(CE_EMETIC, H.chem_doses[type] / 6) @@ -1683,8 +1435,9 @@ /decl/reagent/coagzolug/affect_blood(mob/living/carbon/M, alien, removed) . = ..() - M.add_chemical_effect(CE_BLOODCLOT) - M.make_dizzy(5) + if(check_min_dose(M, 0.5)) + M.add_chemical_effect(CE_BLOODCLOT) + M.make_dizzy(5) /decl/reagent/coagzolug/overdose(var/mob/living/carbon/H, var/alien) if(prob(2)) diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm index 8c12ead05f0..30e5b866e76 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm @@ -699,9 +699,6 @@ if(!istype(H)) return - var/obj/item/organ/internal/brain/B = H.internal_organs_by_name[BP_BRAIN] - if(!H.has_trauma_type(/datum/brain_trauma/special/love)) - B.gain_trauma(/datum/brain_trauma/special/love,FALSE) /decl/reagent/bottle_lightning name = "Bottled Lightning" diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm index 43158fb7339..7418de07c1e 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm @@ -470,12 +470,12 @@ return M.add_chemical_effect(CE_PULSE, -2) var/dose = M.chem_doses[type] - if(dose < 1) + if(dose < 2) if(dose == metabolism * 2 || prob(5)) M.emote("yawn") - else if(dose < 1.5) + else if(dose < 3.5) M.eye_blurry = max(M.eye_blurry, 10) - else if(dose < 5) + else if(dose < 7) if(prob(50)) M.Weaken(2) M.drowsyness = max(M.drowsyness, 20) diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm index d7c113544b2..bbd277e29eb 100644 --- a/code/modules/reagents/reagent_containers/blood_pack.dm +++ b/code/modules/reagents/reagent_containers/blood_pack.dm @@ -18,8 +18,15 @@ desc = "Contains blood used for transfusion." icon = 'icons/obj/bloodpack.dmi' icon_state = "empty" + w_class = ITEMSIZE_SMALL volume = 200 + amount_per_transfer_from_this = 0.2 + possible_transfer_amounts = list(0.2, 1, 2) + flags = OPENCONTAINER + + var/datum/weakref/attached_mob + var/blood_type = null var/vampire_marks = null var/being_feed = FALSE @@ -31,17 +38,32 @@ if(blood_type != null) name = "blood pack [blood_type]" reagents.add_reagent(/decl/reagent/blood, volume, list("donor"=null,"blood_DNA"=null,"blood_type"=blood_type,"trace_chem"=null,"dose_chem"=null)) + w_class = ITEMSIZE_NORMAL update_icon() +/obj/item/reagent_containers/blood/Destroy() + STOP_PROCESSING(SSprocessing, src) + attached_mob = null + return ..() + /obj/item/reagent_containers/blood/on_reagent_change() update_icon() + if(reagents.total_volume > volume / 2) + w_class = ITEMSIZE_NORMAL + else + w_class = ITEMSIZE_SMALL /obj/item/reagent_containers/blood/update_icon() - var/percent = round((reagents.total_volume / volume) * 100) - switch(percent) - if(0 to 9) icon_state = "empty" - if(10 to 50) icon_state = "half" - if(51 to INFINITY) icon_state = "full" + cut_overlays() + if(volume) + var/percent = round(reagents.total_volume / volume * 100) + if(reagents.total_volume) + var/image/filling = image('icons/obj/bloodpack.dmi', "[round(percent,25)]") + filling.color = reagents.get_color() + add_overlay(filling) + add_overlay(image('icons/obj/bloodpack.dmi', "top")) + if(attached_mob) + add_overlay(image('icons/obj/bloodpack.dmi', "dongle")) /obj/item/reagent_containers/blood/attack(mob/living/carbon/human/M as mob, mob/living/carbon/human/user as mob, var/target_zone) if(user == M && (MODE_VAMPIRE in user.mind?.antag_datums)) @@ -74,6 +96,64 @@ else ..() +/obj/item/reagent_containers/blood/MouseDrop(over_object, src_location, over_location) + if(!ismob(loc)) + return + var/turf/our_turf = get_turf(src) + var/turf/target_turf = get_turf(over_object) + if(!our_turf.Adjacent(target_turf)) + return + if(attached_mob) + remove_iv_mob() + else if(ishuman(over_object)) + visible_message(SPAN_WARNING("\The [usr] starts hooking \the [over_object] up to \the [src].")) + if(do_after(usr, 30)) + to_chat(usr, SPAN_NOTICE("You hook \the [over_object] up to \the [src].")) + attached_mob = WEAKREF(over_object) + START_PROCESSING(SSprocessing, src) + update_icon() + +/obj/item/reagent_containers/blood/process() + var/mob/living/carbon/human/attached + if(attached_mob) + attached = attached_mob.resolve() + if(!attached) + attached_mob = null + return PROCESS_KILL + var/is_adjacent = loc.Adjacent(attached) + if(!is_adjacent || !ismob(loc)) + remove_iv_mob(is_adjacent) + update_icon() + return PROCESS_KILL + else + remove_iv_mob() + return + + var/mob/M = loc + if(M.l_hand != src && M.r_hand != src) + remove_iv_mob() + return + + if(!reagents.total_volume) + remove_iv_mob() + return + + reagents.trans_to_mob(attached, amount_per_transfer_from_this, CHEM_BLOOD) + update_icon() + +/obj/item/reagent_containers/blood/proc/remove_iv_mob(var/safe = TRUE) + if(attached_mob) + var/mob/living/carbon/human/attached = attached_mob.resolve() + if(attached) + if(safe) + visible_message(SPAN_NOTICE("\The [attached] is taken off \the [src].")) + else + var/obj/item/organ/external/affecting = attached.get_organ(pick(BP_R_ARM, BP_L_ARM)) + attached.visible_message(SPAN_WARNING("The needle is ripped out of [attached]'s [affecting.limb_name == BP_R_ARM ? "right arm" : "left arm"]."), SPAN_DANGER("The needle painfully rips out of your [affecting.limb_name == BP_R_ARM ? "right arm" : "left arm"].")) + affecting.take_damage(brute = 5, damage_flags = DAM_SHARP) + attached_mob = null + STOP_PROCESSING(SSprocessing, src) + /obj/item/reagent_containers/blood/examine(mob/user, distance = 2) if (..() && vampire_marks) to_chat(user, "There are teeth marks on it.") diff --git a/code/modules/reagents/reagent_containers/food/cans.dm b/code/modules/reagents/reagent_containers/food/cans.dm index 5e553e7efb8..0bc1be37a63 100644 --- a/code/modules/reagents/reagent_containers/food/cans.dm +++ b/code/modules/reagents/reagent_containers/food/cans.dm @@ -300,8 +300,8 @@ reagents_to_add = list(/decl/reagent/drink/lemon_lime = 30) /obj/item/reagent_containers/food/drinks/cans/iced_tea - name = "\improper Vrisk Serket iced tea" - desc = "That sweet, refreshing southern earthy flavor. That's where it's from, right? South Earth?" + name = "\improper Silversun Wave iced tea" + desc = "Marketed as a favorite amongst parched Silversun beachgoers, there's actually more sugar in this than there is tea." icon_state = "ice_tea_can" center_of_mass = list("x"=16, "y"=10) @@ -461,4 +461,4 @@ icon_state = "hrozamal_soda_can" center_of_mass = list("x"=16, "y"=10) - reagents_to_add = list(/decl/reagent/drink/hrozamal_soda = 30) \ No newline at end of file + reagents_to_add = list(/decl/reagent/drink/hrozamal_soda = 30) diff --git a/code/modules/reagents/reagent_containers/food/drinks.dm b/code/modules/reagents/reagent_containers/food/drinks.dm index e76cad76ec9..94747d16143 100644 --- a/code/modules/reagents/reagent_containers/food/drinks.dm +++ b/code/modules/reagents/reagent_containers/food/drinks.dm @@ -156,8 +156,8 @@ If you add a drink with no empty icon sprite, ensure it is flagged as NO_EMPTY_I reagents_to_add = list(/decl/reagent/drink/milk/soymilk = 50) /obj/item/reagent_containers/food/drinks/coffee - name = "robust coffee" - desc = "Careful, the beverage you're about to enjoy is extremely hot." + name = "\improper Martian Dark Roast" + desc = "The darkest roast this side of Olympia, guaranteed." icon_state = "coffee_vended" item_state = "coffee" trash = /obj/item/trash/coffee @@ -181,8 +181,8 @@ If you add a drink with no empty icon sprite, ensure it is flagged as NO_EMPTY_I reagents_to_add = list(/decl/reagent/drink/coffee/sadpslatte = 30) /obj/item/reagent_containers/food/drinks/tea - name = "duke purple tea" - desc = "An insult to Duke Purple is an insult to the Space Queen! Any proper gentleman will fight you, if you sully this tea." + name = "\improper Sol-III tea" + desc = "A hot tea with an \"Earthy\" flavor that's much weaker than it claims to be on the cup." icon_state = "coffee_vended" item_state = "coffee" trash = /obj/item/trash/coffee @@ -232,8 +232,8 @@ If you add a drink with no empty icon sprite, ensure it is flagged as NO_EMPTY_I reagents_to_add = list(/decl/reagent/drink/tea/chaitea = 30) /obj/item/reagent_containers/food/drinks/ice - name = "ice cup" - desc = "Careful, cold ice, do not chew." + name = "\improper Admiral's ice cup" + desc = "Solid water served in an official Getmore-brand disposable collector's cup, each one commemorating a late admiral." icon_state = "coffee_vended" item_state = "coffee" trash = /obj/item/trash/coffee @@ -244,8 +244,8 @@ If you add a drink with no empty icon sprite, ensure it is flagged as NO_EMPTY_I reagents_to_add = list(/decl/reagent/drink/ice = 30) /obj/item/reagent_containers/food/drinks/h_chocolate - name = "dutch hot coco" - desc = "Made in Space South America." + name = "\improper Red Gaia hot coco" + desc = "A Mars favorite. Usually dispensed at a temperature hotter than any human can stand." icon_state = "coffee_vended" item_state = "coffee" trash = /obj/item/trash/coffee diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index 15c804a7a7e..e4220009c14 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -3562,6 +3562,15 @@ else ..() +/obj/item/reagent_containers/food/snacks/bunbun + name = "\improper Bun Bun" + desc = "A small bread monkey fashioned from two burger buns." + icon_state = "bunbun" + bitesize = 2 + center_of_mass = list("x"=16, "y"=8) + reagents_to_add = list(/decl/reagent/nutriment = 8) + reagent_data = list(/decl/reagent/nutriment = list("bun" = 4)) + /obj/item/reagent_containers/food/snacks/taco name = "taco" desc = "Take a bite!" @@ -3681,7 +3690,7 @@ name = "packed rice bowl" desc = "Boiled rice packed in a sealed plastic tub with the Nojosuru Foods logo on it. There appears to be a pair of chopsticks clipped to the side." icon_state = "ricetub" - trash = /obj/item/trash/ricetub_s + trash = /obj/item/trash/ricetub/sticks filling_color = "#A66829" center_of_mass = list("x"=17, "y"=16) reagents_to_add = list(/decl/reagent/nutriment = 5) @@ -4665,7 +4674,7 @@ /obj/item/reagent_containers/food/snacks/nomadskewer name = "nomad skewer" - icon_state = "kabob" + icon_state = "nomad_skewer" desc = "Fatshouter meat on a stick, served with flora native to Adhomai." trash = /obj/item/stack/rods filling_color = "#FFFEE0" diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index 881a3909de9..6f2ebc200d0 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -43,10 +43,13 @@ /obj/item/reagent_containers/glass/get_additional_forensics_swab_info() var/list/additional_evidence = ..() var/list/Bdata = REAGENT_DATA(reagents, /decl/reagent/blood/) + var/list/blood_Data = list( + Bdata["blood_DNA"] = Bdata["blood_type"] + ) if(Bdata) additional_evidence["type"] = EVIDENCE_TYPE_BLOOD additional_evidence["sample_type"] = "blood" - additional_evidence["dna"] += Bdata["blood_DNA"] + additional_evidence["dna"] += blood_Data additional_evidence["sample_message"] = "You dip the swab inside [src] to sample its contents." return additional_evidence diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index e4081f38b01..cb38a8384ff 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -144,6 +144,13 @@ /obj/item/reagent_containers/spray/sterilizine name = "sterilizine" desc = "Great for hiding incriminating bloodstains and sterilizing scalpels." + icon = 'icons/obj/janitor.dmi' + item_icons = list( + slot_l_hand_str = 'icons/mob/items/lefthand_hydro.dmi', + slot_r_hand_str = 'icons/mob/items/righthand_hydro.dmi', + ) + icon_state = "sterilespray" + item_state = "spraycan" /obj/item/reagent_containers/spray/sterilizine/Initialize() . = ..() diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index e70b2ae8ad4..be5618db146 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -9,6 +9,11 @@ #define PRESSURE_TANK_VOLUME 150 //L #define PUMP_MAX_FLOW_RATE 90 //L/s - 4 m/s using a 15 cm by 15 cm inlet +#define MODE_UNSCREWED -1 +#define MODE_OFF 0 +#define MODE_CHARGING 1 +#define MODE_FLUSHING 2 + /obj/machinery/disposal name = "disposal unit" desc = "A pneumatic waste disposal unit." @@ -16,9 +21,11 @@ icon_state = "disposal" anchored = 1 density = 1 + var/datum/wires/disposal/wires var/datum/gas_mixture/air_contents // internal reservoir - var/mode = 1 // item mode 0=off 1=charging 2=charged - var/flush = 0 // true if flush handle is pulled + var/mode = MODE_CHARGING + var/can_flush = TRUE + var/flush = FALSE // true if flush handle is pulled var/obj/structure/disposalpipe/trunk/trunk = null // the attached pipe trunk var/flushing = 0 // true if flushing in progress var/flush_every_ticks = 30 //Every 30 ticks it will look whether it is ready to flush @@ -85,11 +92,12 @@ . = ..() trunk = locate() in src.loc if(!trunk) - mode = 0 + mode = MODE_OFF flush = 0 else trunk.linked = src // link the pipe trunk to self + wires = new(src) air_contents = new/datum/gas_mixture(PRESSURE_TANK_VOLUME) update() @@ -99,39 +107,49 @@ trunk.linked = null return ..() +/obj/machinery/disposal/proc/contents_count() + var/things = 0 + for(var/thing in contents) + if(istype(thing, /obj/item/device/assembly/signaler)) + var/obj/item/device/assembly/signaler/S = thing + if(S.connected == wires) + continue + things++ + return things + // attack by item places it in to disposal /obj/machinery/disposal/attackby(var/obj/item/I, var/mob/user) if(stat & BROKEN || !I || !user) return src.add_fingerprint(user) - if(mode<=0) // It's off + if(mode <= MODE_OFF) // It's off if(I.isscrewdriver()) - if(contents.len > 0) - to_chat(user, "Eject the items first!") + if(contents_count()) + to_chat(user, SPAN_WARNING("Eject the items first!")) return - if(mode==0) // It's off but still not unscrewed - mode=-1 // Set it to doubleoff l0l - playsound(src.loc, I.usesound, 50, 1) - to_chat(user, "You remove the screws around the power connection.") - return - else if(mode==-1) - mode=0 - playsound(src.loc, I.usesound, 50, 1) - to_chat(user, "You attach the screws around the power connection.") - return - else if(I.iswelder() && mode==-1) - if(contents.len > 0) - to_chat(user, "Eject the items first!") + playsound(src.loc, I.usesound, 50, 1) + switch(mode) + if(MODE_OFF) + mode = MODE_UNSCREWED + to_chat(user, SPAN_NOTICE("You remove the screws around the power connection.")) + return + if(MODE_UNSCREWED) + mode = MODE_OFF + to_chat(user, SPAN_NOTICE("You attach the screws around the power connection.")) + return + else if(I.iswelder() && mode == MODE_UNSCREWED) + if(contents_count()) + to_chat(user, SPAN_WARNING("Eject the items first!")) return var/obj/item/weldingtool/W = I if(W.remove_fuel(0,user)) playsound(src.loc, 'sound/items/welder_pry.ogg', 100, 1) - to_chat(user, "You start slicing the floorweld off the disposal unit.") - - if(do_after(user,20/W.toolspeed)) - if(!src || !W.isOn()) return - to_chat(user, "You sliced the floorweld off the disposal unit.") + to_chat(user, SPAN_NOTICE("You start slicing the floorweld off the disposal unit.")) + if(do_after(user, 20 / W.toolspeed)) + if(!src || !W.isOn()) + return + to_chat(user, SPAN_NOTICE("You sliced the floorweld off the disposal unit.")) if(!istype(src, /obj/machinery/disposal/small)) var/obj/structure/disposalconstruct/C = new (src.loc) src.transfer_fingerprints_to(C) @@ -148,10 +166,14 @@ qdel(src) return else - to_chat(user, "You need more welding fuel to complete this task.") + to_chat(user, SPAN_WARNING("You need more welding fuel to complete this task.")) return + else if(I.ismultitool() || I.iswirecutter() || issignaler(I)) + wires.Interact(user) + return + if(istype(I, /obj/item/melee/energy/blade)) - to_chat(user, "You can't place that item inside the disposal unit.") + to_chat(user, SPAN_WARNING("You can't place that item inside the disposal unit.")) return if(istype(I, /obj/item/storage) && length(I.contents) && user.a_intent != I_HURT) @@ -493,6 +515,12 @@ /obj/machinery/disposal/proc/flush() set waitfor = FALSE + if(!can_flush) + shake_animation() + visible_message(SPAN_WARNING("\The [src] groans violently!"), range = 3) + flush = FALSE + return + flushing = 1 flick("[icon_state]-flush", src) @@ -610,6 +638,10 @@ // now everything inside the disposal gets put into the holder // note AM since can contain mobs or objs for(var/atom/movable/AM in D) + if(istype(AM, /obj/item/device/assembly/signaler)) + var/obj/item/device/assembly/signaler/S = AM + if(S.connected == D.wires) + continue AM.forceMove(src) if(istype(AM, /obj/structure/bigDelivery) && !hasmob) var/obj/structure/bigDelivery/T = AM @@ -1617,3 +1649,8 @@ dirs = alldirs.Copy() src.streak(dirs) + +#undef MODE_UNSCREWED +#undef MODE_OFF +#undef MODE_CHARGING +#undef MODE_FLUSHING \ No newline at end of file diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index e65e3bc91dd..e06e339d3c8 100755 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -17,6 +17,10 @@ /obj/structure/bigDelivery/attack_hand(mob/user as mob) unwrap() +/obj/structure/bigDelivery/attack_ai(mob/user) + if(isrobot(user) && Adjacent(user)) // Robots can open packages. + attack_hand(user) + /obj/structure/bigDelivery/proc/unwrap() playsound(loc, 'sound/items/package_unwrap.ogg', 50, 1) if(wrapped) //sometimes items can disappear. For example, bombs. --rastaf0 @@ -129,8 +133,20 @@ /obj/item/smallDelivery/attack_self(mob/user as mob) if (src.wrapped) //sometimes items can disappear. For example, bombs. --rastaf0 wrapped.forceMove(user.loc) + to_chat(user, SPAN_NOTICE("You tear open the parcel, revealing \a [wrapped]!")) if(ishuman(user)) user.put_in_hands(wrapped) + else if(isrobot(user)) + var/obj/item/gripper/G = user.get_active_hand() + if(istype(G)) + G.drop(src, FALSE) + if(is_type_in_list(wrapped, G.can_hold)) + G.grip_item(wrapped, user, FALSE) + else + to_chat(user, SPAN_WARNING("\The [wrapped] tumbles from \the [G] as you unwrap it!")) + wrapped.forceMove(get_turf(src)) + else + wrapped.forceMove(get_turf(src)) else wrapped.forceMove(get_turf(src)) diff --git a/code/modules/research/message_server.dm b/code/modules/research/message_server.dm index 83cd0a16cca..de74ff1f8db 100644 --- a/code/modules/research/message_server.dm +++ b/code/modules/research/message_server.dm @@ -102,7 +102,7 @@ var/global/list/obj/machinery/message_server/message_servers = list() for (var/token in spamfilter) if (findtextEx(message,token)) message = "[message]" //Rejected messages will be indicated by red color. - result = token //Token caused rejection (if there are multiple, last will be chosen>. + result = token //Token caused rejection (if there are multiple, last will be chosen) pda_msgs += new/datum/data_pda_msg(recipient,sender,message) return result @@ -127,11 +127,17 @@ var/global/list/obj/machinery/message_server/message_servers = list() playsound(Console.loc, 'sound/machines/twobeep.ogg', 50, 1) Console.audible_message(text("[icon2html(Console, viewers(get_turf(Console)))] *The Requests Console beeps: 'PRIORITY Alert in [sender]'"),,5) Console.message_log += "High Priority message from [sender]
[authmsg]" + for(var/obj/item/modular_computer/pda in Console.alert_pdas) + var/pda_message = "A high priority message has arrived!" + pda.get_notification(pda_message, 1, "[Console.department] Requests Console") else if(!Console.silent) playsound(Console.loc, 'sound/machines/twobeep.ogg', 50, 1) Console.audible_message(text("[icon2html(Console, viewers(get_turf(Console)))] *The Requests Console beeps: 'Message from [sender]'"),,4) Console.message_log += "Message from [sender]
[authmsg]" + for(var/obj/item/modular_computer/pda in Console.alert_pdas) + var/pda_message = "A message has arrived!" + pda.get_notification(pda_message, 1, "[Console.department] Requests Console") Console.set_light(2) diff --git a/code/modules/research/xenoarchaeology/artifact/artifact_unknown.dm b/code/modules/research/xenoarchaeology/artifact/artifact_unknown.dm index 7d6b9ed01fb..c05c55519a8 100644 --- a/code/modules/research/xenoarchaeology/artifact/artifact_unknown.dm +++ b/code/modules/research/xenoarchaeology/artifact/artifact_unknown.dm @@ -34,12 +34,12 @@ . = ..() //setup primary effect - these are the main ones (mixed) - var/effecttype = pick(typesof(/datum/artifact_effect) - /datum/artifact_effect) + var/effecttype = pick(subtypesof(/datum/artifact_effect)) my_effect = new effecttype(src) //75% chance to have a secondary stealthy (and mostly bad) effect if(prob(75)) - effecttype = pick(typesof(/datum/artifact_effect) - /datum/artifact_effect) + effecttype = pick(subtypesof(/datum/artifact_effect)) secondary_effect = new effecttype(src) if(prob(75)) secondary_effect.ToggleActivate(0) @@ -183,24 +183,23 @@ if(secondary_effect?.trigger == TRIGGER_NITRO && secondary_effect.activated) secondary_effect.ToggleActivate() -/obj/machinery/artifact/attack_hand(var/mob/user as mob) - if (get_dist(user, src) > 1) - to_chat(user, "You can't reach [src] from here.") +/obj/machinery/artifact/attack_hand(mob/user) + if(use_check_and_message(user, USE_ALLOW_NON_ADV_TOOL_USR)) return if(ishuman(user) && user:gloves) - to_chat(user, "You touch [src] with your gloved hands, [pick("but nothing of note happens","but nothing happens","but nothing interesting happens","but you notice nothing different","but nothing seems to have happened")].") + to_chat(user, "You touch \the [src] with your gloved hands, [pick("but nothing of note happens","but nothing happens","but nothing interesting happens","but you notice nothing different","but nothing seems to have happened")].") return src.add_fingerprint(user) if(my_effect.trigger == TRIGGER_TOUCH) - to_chat(user, "You touch [src].") + to_chat(user, "You touch \the [src].") my_effect.ToggleActivate() else - to_chat(user, "You touch [src], [pick("but nothing of note happens","but nothing happens","but nothing interesting happens","but you notice nothing different","but nothing seems to have happened")].") + to_chat(user, "You touch \the [src], [pick("but nothing of note happens","but nothing happens","but nothing interesting happens","but you notice nothing different","but nothing seems to have happened")].") if(secondary_effect?.trigger == TRIGGER_TOUCH) - to_chat(user, "You touch [src].") + to_chat(user, "You touch \the [src].") secondary_effect.ToggleActivate() if (my_effect.effect == EFFECT_TOUCH) @@ -209,7 +208,7 @@ if(secondary_effect?.effect == EFFECT_TOUCH && secondary_effect.activated) secondary_effect.DoEffectTouch(user) -/obj/machinery/artifact/attackby(obj/item/W as obj, mob/living/user as mob) +/obj/machinery/artifact/attackby(var/obj/item/W, mob/living/user) if (istype(W, /obj/item/reagent_containers/)) if(W.reagents.has_reagent(/decl/reagent/hydrazine, 1) || W.reagents.has_reagent(/decl/reagent/water, 1)) @@ -324,3 +323,8 @@ my_effect.UpdateMove() if(secondary_effect) secondary_effect.UpdateMove() + +/obj/machinery/artifact/attack_ai(mob/user) //AI can't interfact with weird artifacts. Borgs can but not remotely. + if(!isrobot(user) || !Adjacent(user)) + return + return ..() \ No newline at end of file diff --git a/code/modules/research/xenoarchaeology/artifact/effect.dm b/code/modules/research/xenoarchaeology/artifact/effect.dm index c110db57d10..877cfbaa4df 100644 --- a/code/modules/research/xenoarchaeology/artifact/effect.dm +++ b/code/modules/research/xenoarchaeology/artifact/effect.dm @@ -66,7 +66,7 @@ toplevelholder = toplevelholder.loc toplevelholder.visible_message("[icon2html(toplevelholder, viewers(get_turf(toplevelholder)))] [toplevelholder] [display_msg]") -/datum/artifact_effect/proc/DoEffectTouch(var/mob/user) +/datum/artifact_effect/proc/DoEffectTouch(var/mob/living/user) /datum/artifact_effect/proc/DoEffectAura(var/atom/holder) /datum/artifact_effect/proc/DoEffectPulse(var/atom/holder) /datum/artifact_effect/proc/UpdateMove() diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_affect_cold.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_affect_cold.dm deleted file mode 100644 index 16862948644..00000000000 --- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_affect_cold.dm +++ /dev/null @@ -1,24 +0,0 @@ - -//inverse of /datum/artifact_effect/heat, the two effects split up for neatness' sake -/datum/artifact_effect/cold - effecttype = "cold" - var/target_temp - -/datum/artifact_effect/cold/New() - ..() - target_temp = rand(0, 250) - effect = pick(EFFECT_TOUCH, EFFECT_AURA) - effect_type = pick(5,6,7) - -/datum/artifact_effect/cold/DoEffectTouch(var/mob/user) - if(holder) - to_chat(user, "A chill passes up your spine!") - var/datum/gas_mixture/env = holder.loc.return_air() - if(env) - env.temperature = max(env.temperature - rand(5,50), 0) - -/datum/artifact_effect/cold/DoEffectAura() - if(holder) - var/datum/gas_mixture/env = holder.loc.return_air() - if(env && env.temperature > target_temp) - env.temperature -= pick(0, 0, 1) diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_atmospheric.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_atmospheric.dm new file mode 100644 index 00000000000..1328849c5a2 --- /dev/null +++ b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_atmospheric.dm @@ -0,0 +1,202 @@ +//Creating gasses + + +/datum/artifact_effect/gasco2 + effecttype = "gasco2" + var/max_pressure + var/target_percentage + +/datum/artifact_effect/heat/New() + ..() + effect_type = pick(6,7) + +/datum/artifact_effect/gasco2/New() + ..() + effect = pick(EFFECT_TOUCH, EFFECT_AURA) + max_pressure = rand(115,1000) + +/datum/artifact_effect/gasco2/DoEffectTouch(var/mob/living/user) + if(holder) + var/turf/holder_loc = holder.loc + if(istype(holder_loc)) + holder_loc.assume_gas(GAS_CO2, rand(2, 15)) + +/datum/artifact_effect/gasco2/DoEffectAura() + if(holder) + var/turf/holder_loc = holder.loc + if(istype(holder_loc)) + holder_loc.assume_gas(GAS_CO2, pick(0, 0, 0.1, rand())) + +/datum/artifact_effect/gasnitro + effecttype = "gasnitro" + var/max_pressure + var/target_percentage + +/datum/artifact_effect/gasnitro/New() + ..() + effect = pick(EFFECT_TOUCH, EFFECT_AURA) + effect_type = pick(6,7) + max_pressure = rand(115,1000) + +/datum/artifact_effect/gasnitro/DoEffectTouch(var/mob/living/user) + if(holder) + var/turf/holder_loc = holder.loc + if(istype(holder_loc)) + holder_loc.assume_gas(GAS_NITROGEN, rand(2, 15)) + +/datum/artifact_effect/gasnitro/DoEffectAura() + if(holder) + var/turf/holder_loc = holder.loc + if(istype(holder_loc)) + holder_loc.assume_gas(GAS_NITROGEN, pick(0, 0, 0.1, rand())) + + +/datum/artifact_effect/gasoxy + effecttype = "gasoxy" + var/max_pressure + +/datum/artifact_effect/gasoxy/New() + ..() + effect = pick(EFFECT_TOUCH, EFFECT_AURA) + max_pressure = rand(115,1000) + effect_type = pick(6,7) + + +/datum/artifact_effect/gasoxy/DoEffectTouch(var/mob/living/user) + if(holder) + var/turf/holder_loc = holder.loc + if(istype(holder_loc)) + holder_loc.assume_gas(GAS_OXYGEN, rand(2, 15)) + +/datum/artifact_effect/gasoxy/DoEffectAura() + if(holder) + var/turf/holder_loc = holder.loc + if(istype(holder_loc)) + holder_loc.assume_gas(GAS_OXYGEN, pick(0, 0, 0.1, rand())) + +/datum/artifact_effect/gasphoron + effecttype = "gasphoron" + var/max_pressure + var/target_percentage + +/datum/artifact_effect/gasphoron/New() + ..() + effect = pick(EFFECT_TOUCH, EFFECT_AURA) + max_pressure = rand(115,1000) + effect_type = pick(6,7) + +/datum/artifact_effect/gasphoron/DoEffectTouch(var/mob/living/user) + if(holder) + var/turf/holder_loc = holder.loc + if(istype(holder_loc)) + holder_loc.assume_gas(GAS_OXYGEN, rand(2, 15)) + +/datum/artifact_effect/gasphoron/DoEffectAura() + if(holder) + var/turf/holder_loc = holder.loc + if(istype(holder_loc)) + holder_loc.assume_gas(GAS_PHORON, pick(0, 0, 0.1, rand())) + +/datum/artifact_effect/gassleeping + effecttype = "gassleeping" + var/max_pressure + var/target_percentage + +/datum/artifact_effect/gassleeping/New() + ..() + effect = pick(EFFECT_TOUCH, EFFECT_AURA) + max_pressure = rand(115,1000) + effect_type = pick(6,7) + +/datum/artifact_effect/gassleeping/DoEffectTouch(var/mob/living/user) + if(holder) + var/turf/holder_loc = holder.loc + if(istype(holder_loc)) + holder_loc.assume_gas(GAS_N2O, rand(2, 15)) + +/datum/artifact_effect/gassleeping/DoEffectAura() + if(holder) + var/turf/holder_loc = holder.loc + if(istype(holder_loc)) + holder_loc.assume_gas(GAS_N2O, pick(0, 0, 0.1, rand())) + +/datum/artifact_effect/gashydrogen + effecttype = "gashydrogen" + var/max_pressure + var/target_percentage + +/datum/artifact_effect/gashydrogen/New() + ..() + effect = pick(EFFECT_TOUCH, EFFECT_AURA) + max_pressure = rand(115,1000) + effect_type = pick(6,7) + +/datum/artifact_effect/gashydrogen/DoEffectTouch(var/mob/living/user) + if(holder) + var/turf/holder_loc = holder.loc + if(istype(holder_loc)) + holder_loc.assume_gas(GAS_HYDROGEN, rand(2, 15)) + +/datum/artifact_effect/gashydrogen/DoEffectAura() + if(holder) + var/turf/holder_loc = holder.loc + if(istype(holder_loc)) + holder_loc.assume_gas(GAS_HYDROGEN, pick(0, 0, 0.1, rand())) + + + +//Temperature changes +/datum/artifact_effect/cold + effecttype = "cold" + var/target_temp + +/datum/artifact_effect/cold/New() + ..() + target_temp = rand(0, 250) + effect = pick(EFFECT_TOUCH, EFFECT_AURA) + effect_type = pick(5,6,7) + +/datum/artifact_effect/cold/DoEffectTouch(var/mob/living/user) + if(holder) + if(user.isSynthetic()) + to_chat(user, SPAN_NOTICE("You detect a decrease in temperature throughout your systems!")) + else + to_chat(user, SPAN_NOTICE("A chill passes up your spine!")) + var/datum/gas_mixture/env = holder.loc.return_air() + if(env) + env.temperature = max(env.temperature - rand(5,50), 0) + +/datum/artifact_effect/cold/DoEffectAura() + if(holder) + var/datum/gas_mixture/env = holder.loc.return_air() + if(env && env.temperature > target_temp) + env.temperature -= pick(0, 0, 1) + +/datum/artifact_effect/heat + effecttype = "heat" + var/target_temp + +/datum/artifact_effect/heat/New() + ..() + effect_type = pick(5,6,7) + +/datum/artifact_effect/heat/New() + ..() + target_temp = rand(300,600) + effect = pick(EFFECT_TOUCH, EFFECT_AURA) + +/datum/artifact_effect/heat/DoEffectTouch(var/mob/living/user) + if(holder) + if(user.isSynthetic()) + to_chat(user, SPAN_WARNING("You detect a wave of heat surging through your systems.")) + else + to_chat(user, SPAN_WARNING("You feel a wave of heat travel up your spine!")) + var/datum/gas_mixture/env = holder.loc.return_air() + if(env) + env.temperature += rand(5,50) + +/datum/artifact_effect/heat/DoEffectAura() + if(holder) + var/datum/gas_mixture/env = holder.loc.return_air() + if(env && env.temperature < target_temp) + env.temperature += pick(0, 0, 1) diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_badfeeling.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_badfeeling.dm deleted file mode 100644 index 05c23baeee2..00000000000 --- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_badfeeling.dm +++ /dev/null @@ -1,70 +0,0 @@ - -/datum/artifact_effect/badfeeling - effecttype = "badfeeling" - effect_type = 2 - var/list/messages = list("You feel worried.",\ - "Something doesn't feel right.",\ - "You get a strange feeling in your gut.",\ - "Your instincts are trying to warn you about something.",\ - "Someone just walked over your grave.",\ - "There's a strange feeling in the air.",\ - "There's a strange smell in the air.",\ - "The tips of your fingers feel tingly.",\ - "You feel witchy.",\ - "You have a terrible sense of foreboding.",\ - "You've got a bad feeling about this.",\ - "Your scalp prickles.",\ - "The light seems to flicker.",\ - "The shadows seem to lengthen.",\ - "The walls are getting closer.",\ - "Something is wrong") - - var/list/drastic_messages = list("You've got to get out of here!",\ - "Someone's trying to kill you!",\ - "There's something out there!",\ - "What's happening to you?",\ - "OH GOD!",\ - "HELP ME!") - -/datum/artifact_effect/badfeeling/DoEffectTouch(var/mob/user) - if(user) - if (istype(user, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = user - if(prob(50)) - if(prob(75)) - to_chat(H, "[pick(drastic_messages)]") - else - to_chat(H, "[pick(messages)]") - - if(prob(50)) - H.dizziness += rand(3,5) - -/datum/artifact_effect/badfeeling/DoEffectAura() - if(holder) - var/turf/T = get_turf(holder) - for (var/mob/living/carbon/human/H in range(src.effectrange,T)) - if(prob(5)) - if(prob(75)) - to_chat(H, "[pick(messages)]") - else - to_chat(H, "[pick(drastic_messages)]") - - if(prob(10)) - H.dizziness += rand(3,5) - return 1 - -/datum/artifact_effect/badfeeling/DoEffectPulse() - if(holder) - var/turf/T = get_turf(holder) - for (var/mob/living/carbon/human/H in range(src.effectrange,T)) - if(prob(50)) - if(prob(95)) - to_chat(H, "[pick(drastic_messages)]") - else - to_chat(H, "[pick(messages)]") - - if(prob(50)) - H.dizziness += rand(3,5) - else if(prob(25)) - H.dizziness += rand(5,15) - return 1 diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_cellcharge.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_cellcharge.dm index 65f286055d0..5d631929e39 100644 --- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_cellcharge.dm +++ b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_cellcharge.dm @@ -6,14 +6,12 @@ var/last_message var/is_looping = FALSE -/datum/artifact_effect/cellcharge/DoEffectTouch(var/mob/user) - if(user) - if(istype(user, /mob/living/silicon/robot)) - var/mob/living/silicon/robot/R = user - for (var/obj/item/cell/D in R.contents) - D.charge += rand() * 100 + 50 - to_chat(R, "SYSTEM ALERT: Large energy boost detected!") - return 1 +/datum/artifact_effect/cellcharge/DoEffectTouch(var/mob/living/user) + var/obj/item/cell/C = user.get_cell() + if(C) + C.charge = min(C.maxcharge, C.charge + (rand(50, 150))) + to_chat(user, SPAN_NOTICE("Diagnostics Alert: Large energy boost detected!")) + return TRUE #define SLEEP_AND_STOP \ if (TICK_CHECK) { \ @@ -30,12 +28,12 @@ if (TICK_CHECK) { \ if(holder) if (is_looping) - return 1 + return TRUE is_looping = TRUE var/turf/T = get_turf(holder) - for (var/P in range(src.effectrange, T)) + for (var/atom/P in range(effectrange, T)) SLEEP_AND_STOP if (istype(P, /obj/machinery/power/apc)) @@ -45,17 +43,18 @@ if (TICK_CHECK) { \ else if (istype(P, /obj/machinery/power/smes)) var/obj/machinery/power/smes/smes = P smes.charge += 25 - else if (isrobot(P)) - var/mob/living/silicon/robot/M = P + else if(isliving(P)) + var/mob/living/M = P if (get_dist(T, M) <= effectrange) - if (M.cell) - M.cell.charge += 25 + var/obj/item/cell/D = M.get_cell() + if(D) + D.charge = min(D.maxcharge, D.charge + 25) if(world.time - last_message > 200) - to_chat(M, "SYSTEM ALERT: Energy boost detected!") + to_chat(M, SPAN_NOTICE("Diagnostics Alert: Large energy boost detected!")) last_message = world.time is_looping = FALSE - return 1 + return TRUE #undef SLEEP_AND_STOP @@ -65,12 +64,13 @@ if (TICK_CHECK) { \ for (var/obj/machinery/power/apc/C in range(200, T)) for (var/obj/item/cell/B in C.contents) B.charge += rand() * 100 - for (var/obj/machinery/power/smes/S in range (src.effectrange,src)) + for (var/obj/machinery/power/smes/S in range (effectrange,src)) S.charge += 250 - for (var/mob/living/silicon/robot/M in range(100, T)) - for (var/obj/item/cell/D in M.contents) - D.charge += rand() * 100 + for(var/mob/living/M in range(100, T)) + var/obj/item/cell/D = M.get_cell() + if(D) + D.charge = min(D.maxcharge, D.charge + rand(0, 100)) if(world.time - last_message > 200) - to_chat(M, "SYSTEM ALERT: Energy boost detected!") + to_chat(M, SPAN_NOTICE("Diagnostics Alert: Energy boost detected!")) last_message = world.time return 1 diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_celldrain.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_celldrain.dm index c6566d04b71..90b7589f55c 100644 --- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_celldrain.dm +++ b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_celldrain.dm @@ -6,15 +6,11 @@ var/last_message /datum/artifact_effect/celldrain/DoEffectTouch(var/mob/user) - if(user) - if(istype(user, /mob/living/silicon/robot)) - var/mob/living/silicon/robot/R = user - for (var/obj/item/cell/D in R.contents) - D.charge = max(D.charge - rand() * 100, 0) - to_chat(R, " SYSTEM ALERT: Energy drain detected!") - return 1 - - return 1 + var/obj/item/cell/C = user.get_cell() + if(C) + C.charge = max(C.charge - rand(25, 100), 0) + to_chat(user, SPAN_NOTICE("Diagnostics alert: Energy drain detected!")) + return TRUE /datum/artifact_effect/celldrain/DoEffectAura() if(holder) @@ -22,15 +18,16 @@ for (var/obj/machinery/power/apc/C in range(40, T)) for (var/obj/item/cell/B in C.contents) B.charge = max(B.charge - 50,0) - for (var/obj/machinery/power/smes/S in range (src.effectrange,src)) + for (var/obj/machinery/power/smes/S in range(effectrange,src)) S.charge = max(S.charge - 100,0) - for (var/mob/living/silicon/robot/M in range(20, T)) - for (var/obj/item/cell/D in M.contents) + for(var/mob/living/M in range(20, T)) + var/obj/item/cell/D = M.get_cell() + if(D) D.charge = max(D.charge - 50,0) if(world.time - last_message > 200) - to_chat(M, "SYSTEM ALERT: Energy drain detected!") + to_chat(M, SPAN_NOTICE("Diagnostics alert: Energy drain detected!")) last_message = world.time - return 1 + return TRUE /datum/artifact_effect/celldrain/DoEffectPulse() if(holder) @@ -38,12 +35,13 @@ for (var/obj/machinery/power/apc/C in range(40, T)) for (var/obj/item/cell/B in C.contents) B.charge = max(B.charge - rand() * 150,0) - for (var/obj/machinery/power/smes/S in range (src.effectrange,src)) + for (var/obj/machinery/power/smes/S in range(effectrange,src)) S.charge = max(S.charge - 250,0) - for (var/mob/living/silicon/robot/M in range(30, T)) - for (var/obj/item/cell/D in M.contents) + for (var/mob/living/M in range(30, T)) + var/obj/item/cell/D = M.get_cell() + if(D) D.charge = max(D.charge - rand() * 150,0) if(world.time - last_message > 200) - to_chat(M, "SYSTEM ALERT: Energy drain detected!") + to_chat(M, SPAN_NOTICE("Diagnostics alert: Energy drain detected!")) last_message = world.time - return 1 + return TRUE diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_emp.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_emp.dm index f4d2a02598e..bc0e3da8427 100644 --- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_emp.dm +++ b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_emp.dm @@ -11,4 +11,4 @@ if(holder) var/turf/T = get_turf(holder) empulse(T, effectrange/1, effectrange) - return 1 + return TRUE diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_gasco2.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_gasco2.dm deleted file mode 100644 index 4fd7029226c..00000000000 --- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_gasco2.dm +++ /dev/null @@ -1,26 +0,0 @@ - -/datum/artifact_effect/gasco2 - effecttype = "gasco2" - var/max_pressure - var/target_percentage - -/datum/artifact_effect/heat/New() - ..() - effect_type = pick(6,7) - -/datum/artifact_effect/gasco2/New() - ..() - effect = pick(EFFECT_TOUCH, EFFECT_AURA) - max_pressure = rand(115,1000) - -/datum/artifact_effect/gasco2/DoEffectTouch(var/mob/user) - if(holder) - var/turf/holder_loc = holder.loc - if(istype(holder_loc)) - holder_loc.assume_gas(GAS_CO2, rand(2, 15)) - -/datum/artifact_effect/gasco2/DoEffectAura() - if(holder) - var/turf/holder_loc = holder.loc - if(istype(holder_loc)) - holder_loc.assume_gas(GAS_CO2, pick(0, 0, 0.1, rand())) diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_gasnitro.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_gasnitro.dm deleted file mode 100644 index ed8e603f6f5..00000000000 --- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_gasnitro.dm +++ /dev/null @@ -1,23 +0,0 @@ - -/datum/artifact_effect/gasnitro - effecttype = "gasnitro" - var/max_pressure - var/target_percentage - -/datum/artifact_effect/gasnitro/New() - ..() - effect = pick(EFFECT_TOUCH, EFFECT_AURA) - effect_type = pick(6,7) - max_pressure = rand(115,1000) - -/datum/artifact_effect/gasnitro/DoEffectTouch(var/mob/user) - if(holder) - var/turf/holder_loc = holder.loc - if(istype(holder_loc)) - holder_loc.assume_gas(GAS_NITROGEN, rand(2, 15)) - -/datum/artifact_effect/gasnitro/DoEffectAura() - if(holder) - var/turf/holder_loc = holder.loc - if(istype(holder_loc)) - holder_loc.assume_gas(GAS_NITROGEN, pick(0, 0, 0.1, rand())) diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_gasoxy.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_gasoxy.dm deleted file mode 100644 index 24ff9cea385..00000000000 --- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_gasoxy.dm +++ /dev/null @@ -1,23 +0,0 @@ - -/datum/artifact_effect/gasoxy - effecttype = "gasoxy" - var/max_pressure - -/datum/artifact_effect/gasoxy/New() - ..() - effect = pick(EFFECT_TOUCH, EFFECT_AURA) - max_pressure = rand(115,1000) - effect_type = pick(6,7) - - -/datum/artifact_effect/gasoxy/DoEffectTouch(var/mob/user) - if(holder) - var/turf/holder_loc = holder.loc - if(istype(holder_loc)) - holder_loc.assume_gas(GAS_OXYGEN, rand(2, 15)) - -/datum/artifact_effect/gasoxy/DoEffectAura() - if(holder) - var/turf/holder_loc = holder.loc - if(istype(holder_loc)) - holder_loc.assume_gas(GAS_OXYGEN, pick(0, 0, 0.1, rand())) diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_gasplasma.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_gasplasma.dm deleted file mode 100644 index 1b0013c1031..00000000000 --- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_gasplasma.dm +++ /dev/null @@ -1,23 +0,0 @@ - -/datum/artifact_effect/gasphoron - effecttype = "gasphoron" - var/max_pressure - var/target_percentage - -/datum/artifact_effect/gasphoron/New() - ..() - effect = pick(EFFECT_TOUCH, EFFECT_AURA) - max_pressure = rand(115,1000) - effect_type = pick(6,7) - -/datum/artifact_effect/gasphoron/DoEffectTouch(var/mob/user) - if(holder) - var/turf/holder_loc = holder.loc - if(istype(holder_loc)) - holder_loc.assume_gas(GAS_OXYGEN, rand(2, 15)) - -/datum/artifact_effect/gasphoron/DoEffectAura() - if(holder) - var/turf/holder_loc = holder.loc - if(istype(holder_loc)) - holder_loc.assume_gas(GAS_PHORON, pick(0, 0, 0.1, rand())) diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_gassleeping.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_gassleeping.dm deleted file mode 100644 index 0006842c54b..00000000000 --- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_gassleeping.dm +++ /dev/null @@ -1,23 +0,0 @@ - -/datum/artifact_effect/gassleeping - effecttype = "gassleeping" - var/max_pressure - var/target_percentage - -/datum/artifact_effect/gassleeping/New() - ..() - effect = pick(EFFECT_TOUCH, EFFECT_AURA) - max_pressure = rand(115,1000) - effect_type = pick(6,7) - -/datum/artifact_effect/gassleeping/DoEffectTouch(var/mob/user) - if(holder) - var/turf/holder_loc = holder.loc - if(istype(holder_loc)) - holder_loc.assume_gas(GAS_N2O, rand(2, 15)) - -/datum/artifact_effect/gassleeping/DoEffectAura() - if(holder) - var/turf/holder_loc = holder.loc - if(istype(holder_loc)) - holder_loc.assume_gas(GAS_N2O, pick(0, 0, 0.1, rand())) diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_goodfeeling.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_goodfeeling.dm deleted file mode 100644 index a771dc0ff2b..00000000000 --- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_goodfeeling.dm +++ /dev/null @@ -1,68 +0,0 @@ - -/datum/artifact_effect/goodfeeling - effecttype = "goodfeeling" - effect_type = 2 - var/list/messages = list("You feel good.",\ - "Everything seems to be going alright",\ - "You've got a good feeling about this",\ - "Your instincts tell you everything is going to be getting better.",\ - "There's a good feeling in the air.",\ - "Something smells... good.",\ - "The tips of your fingers feel tingly.",\ - "You've got a good feeling about this.",\ - "You feel happy.",\ - "You fight the urge to smile.",\ - "Your scalp prickles.",\ - "All the colours seem a bit more vibrant.",\ - "Everything seems a little lighter.",\ - "The troubles of the world seem to fade away.") - - var/list/drastic_messages = list("You want to hug everyone you meet!",\ - "Everything is going so well!",\ - "You feel euphoric.",\ - "You feel giddy.",\ - "You're so happy suddenly, you almost want to dance and sing.",\ - "You feel like the world is out to help you.") - -/datum/artifact_effect/goodfeeling/DoEffectTouch(var/mob/user) - if(user) - if (istype(user, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = user - if(prob(50)) - if(prob(75)) - to_chat(H, "[pick(drastic_messages)]") - else - to_chat(H, "[pick(messages)]") - - if(prob(50)) - H.dizziness += rand(3,5) - -/datum/artifact_effect/goodfeeling/DoEffectAura() - if(holder) - var/turf/T = get_turf(holder) - for (var/mob/living/carbon/human/H in range(src.effectrange,T)) - if(prob(5)) - if(prob(75)) - to_chat(H, "[pick(messages)]") - else - to_chat(H, "[pick(drastic_messages)]") - - if(prob(5)) - H.dizziness += rand(3,5) - return 1 - -/datum/artifact_effect/goodfeeling/DoEffectPulse() - if(holder) - var/turf/T = get_turf(holder) - for (var/mob/living/carbon/human/H in range(src.effectrange,T)) - if(prob(50)) - if(prob(95)) - to_chat(H, "[pick(drastic_messages)]") - else - to_chat(H, "[pick(messages)]") - - if(prob(50)) - H.dizziness += rand(3,5) - else if(prob(25)) - H.dizziness += rand(5,15) - return 1 diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_heal.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_heal.dm deleted file mode 100644 index 4f763280727..00000000000 --- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_heal.dm +++ /dev/null @@ -1,65 +0,0 @@ - -/datum/artifact_effect/heal - effecttype = "heal" - effect_type = 5 - -/datum/artifact_effect/heal/DoEffectTouch(var/mob/toucher) - //todo: check over this properly - if(toucher && iscarbon(toucher)) - var/weakness = GetAnomalySusceptibility(toucher) - if(prob(weakness * 100)) - var/mob/living/carbon/C = toucher - to_chat(C, "You feel a soothing energy invigorate you.") - - if(ishuman(toucher)) - var/mob/living/carbon/human/H = toucher - for(var/obj/item/organ/external/affecting in H.organs) - if(affecting && istype(affecting)) - affecting.heal_damage(25 * weakness, 25 * weakness) - //H:heal_organ_damage(25, 25) - H.vessel.add_reagent(/decl/reagent/blood,5, temperature = H.species?.body_temperature) - H.adjustNutritionLoss(-50 * weakness) - H.adjustHydrationLoss(-50 * weakness) - H.adjustBrainLoss(-25 * weakness) - H.apply_radiation(-1*min(H.total_radiation, 25 * weakness)) - H.bodytemperature = initial(H.bodytemperature) - H.fixblood() - // - C.adjustOxyLoss(-25 * weakness) - C.adjustToxLoss(-25 * weakness) - C.adjustBruteLoss(-25 * weakness) - C.adjustFireLoss(-25 * weakness) - // - C.regenerate_icons() - return 1 - -/datum/artifact_effect/heal/DoEffectAura() - //todo: check over this properly - if(holder) - var/turf/T = get_turf(holder) - for (var/mob/living/carbon/C in range(src.effectrange,T)) - var/weakness = GetAnomalySusceptibility(C) - if(prob(weakness * 100)) - if(prob(10)) - to_chat(C, "You feel a soothing energy radiating from something nearby.") - C.adjustBruteLoss(-1 * weakness) - C.adjustFireLoss(-1 * weakness) - C.adjustToxLoss(-1 * weakness) - C.adjustOxyLoss(-1 * weakness) - C.adjustBrainLoss(-1 * weakness) - C.updatehealth() - -/datum/artifact_effect/heal/DoEffectPulse() - //todo: check over this properly - if(holder) - var/turf/T = get_turf(holder) - for (var/mob/living/carbon/C in range(src.effectrange,T)) - var/weakness = GetAnomalySusceptibility(C) - if(prob(weakness * 100)) - to_chat(C, "A wave of energy invigorates you.") - C.adjustBruteLoss(-5 * weakness) - C.adjustFireLoss(-5 * weakness) - C.adjustToxLoss(-5 * weakness) - C.adjustOxyLoss(-5 * weakness) - C.adjustBrainLoss(-5 * weakness) - C.updatehealth() diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_heat.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_heat.dm deleted file mode 100644 index fb1f9645735..00000000000 --- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_heat.dm +++ /dev/null @@ -1,27 +0,0 @@ - -//inverse of /datum/artifact_effect/cold, the two effects split up for neatness' sake -/datum/artifact_effect/heat - effecttype = "heat" - var/target_temp - -/datum/artifact_effect/heat/New() - ..() - effect_type = pick(5,6,7) - -/datum/artifact_effect/heat/New() - ..() - target_temp = rand(300,600) - effect = pick(EFFECT_TOUCH, EFFECT_AURA) - -/datum/artifact_effect/heat/DoEffectTouch(var/mob/user) - if(holder) - to_chat(user, "You feel a wave of heat travel up your spine!") - var/datum/gas_mixture/env = holder.loc.return_air() - if(env) - env.temperature += rand(5,50) - -/datum/artifact_effect/heat/DoEffectAura() - if(holder) - var/datum/gas_mixture/env = holder.loc.return_air() - if(env && env.temperature < target_temp) - env.temperature += pick(0, 0, 1) diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_hurt.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_hurt.dm deleted file mode 100644 index 99c28947613..00000000000 --- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_hurt.dm +++ /dev/null @@ -1,50 +0,0 @@ - -/datum/artifact_effect/hurt - effecttype = I_HURT - effect_type = 5 - -/datum/artifact_effect/hurt/DoEffectTouch(var/mob/toucher) - if(toucher) - var/weakness = GetAnomalySusceptibility(toucher) - if(iscarbon(toucher) && prob(weakness * 100)) - var/mob/living/carbon/C = toucher - to_chat(C, "A painful discharge of energy strikes you!") - C.adjustOxyLoss(rand(5,25) * weakness) - C.adjustToxLoss(rand(5,25) * weakness) - C.adjustBruteLoss(rand(5,25) * weakness) - C.adjustFireLoss(rand(5,25) * weakness) - C.adjustBrainLoss(rand(5,25) * weakness) - C.apply_damage(25 * weakness, IRRADIATE, damage_flags = DAM_DISPERSED) - C.adjustNutritionLoss(50 * weakness) - C.adjustHydrationLoss(50 * weakness) - C.make_dizzy(6 * weakness) - C.weakened += 6 * weakness - -/datum/artifact_effect/hurt/DoEffectAura() - if(holder) - var/turf/T = get_turf(holder) - for (var/mob/living/carbon/C in range(src.effectrange,T)) - var/weakness = GetAnomalySusceptibility(C) - if(prob(weakness * 100)) - if(prob(10)) - to_chat(C, "You feel a painful force radiating from something nearby.") - C.adjustBruteLoss(1 * weakness) - C.adjustFireLoss(1 * weakness) - C.adjustToxLoss(1 * weakness) - C.adjustOxyLoss(1 * weakness) - C.adjustBrainLoss(1 * weakness) - C.updatehealth() - -/datum/artifact_effect/hurt/DoEffectPulse() - if(holder) - var/turf/T = get_turf(holder) - for (var/mob/living/carbon/C in range(effectrange, T)) - var/weakness = GetAnomalySusceptibility(C) - if(prob(weakness * 100)) - to_chat(C, "A wave of painful energy strikes you!") - C.adjustBruteLoss(3 * weakness) - C.adjustFireLoss(3 * weakness) - C.adjustToxLoss(3 * weakness) - C.adjustOxyLoss(3 * weakness) - C.adjustBrainLoss(3 * weakness) - C.updatehealth() diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_mental.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_mental.dm new file mode 100644 index 00000000000..99a3d7e3aa4 --- /dev/null +++ b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_mental.dm @@ -0,0 +1,189 @@ +//Effects that produce feelings or altered states of mind + +/datum/artifact_effect/badfeeling + effecttype = "badfeeling" + effect_type = 2 + var/list/messages = list("You feel worried.",\ + "Something doesn't feel right.",\ + "You get a strange feeling in your gut.",\ + "Your instincts are trying to warn you about something.",\ + "Someone just walked over your grave.",\ + "There's a strange feeling in the air.",\ + "There's a strange smell in the air.",\ + "The tips of your fingers feel tingly.",\ + "You feel witchy.",\ + "You have a terrible sense of foreboding.",\ + "You've got a bad feeling about this.",\ + "Your scalp prickles.",\ + "The light seems to flicker.",\ + "The shadows seem to lengthen.",\ + "The walls are getting closer.",\ + "Something is wrong") + + var/list/drastic_messages = list("You've got to get out of here!",\ + "Someone's trying to kill you!",\ + "There's something out there!",\ + "What's happening to you?",\ + "OH GOD!",\ + "HELP ME!") + +/datum/artifact_effect/badfeeling/DoEffectTouch(var/mob/living/user) + if(!user.isSynthetic()) + if(prob(50)) + if(prob(75)) + to_chat(user, "[pick(drastic_messages)]") + else + to_chat(user, "[pick(messages)]") + + if(prob(50)) + user.dizziness = max(user.dizziness, rand(105, 200)) + +/datum/artifact_effect/badfeeling/DoEffectAura() + if(holder) + var/turf/T = get_turf(holder) + for(var/mob/living/carbon/human/H in range(effectrange,T)) + if(H.isSynthetic()) + continue + if(prob(5)) + if(prob(75)) + to_chat(H, "[pick(messages)]") + else + to_chat(H, "[pick(drastic_messages)]") + + if(prob(10)) + H.dizziness += rand(3,5) + return TRUE + +/datum/artifact_effect/badfeeling/DoEffectPulse() + if(holder) + var/turf/T = get_turf(holder) + for(var/mob/living/carbon/human/H in range(effectrange,T)) + if(H.isSynthetic()) + continue + if(prob(50)) + if(prob(95)) + to_chat(H, "[pick(drastic_messages)]") + else + to_chat(H, "[pick(messages)]") + if(prob(50)) + H.dizziness += rand(3,5) + else if(prob(25)) + H.dizziness += rand(5,15) + return TRUE + + +/datum/artifact_effect/goodfeeling + effecttype = "goodfeeling" + effect_type = 2 + var/list/messages = list("You feel good.",\ + "Everything seems to be going alright",\ + "You've got a good feeling about this",\ + "Your instincts tell you everything is going to be getting better.",\ + "There's a good feeling in the air.",\ + "Something smells... good.",\ + "The tips of your fingers feel tingly.",\ + "You've got a good feeling about this.",\ + "You feel happy.",\ + "You fight the urge to smile.",\ + "Your scalp prickles.",\ + "All the colours seem a bit more vibrant.",\ + "Everything seems a little lighter.",\ + "The troubles of the world seem to fade away.") + + var/list/drastic_messages = list("You want to hug everyone you meet!",\ + "Everything is going so well!",\ + "You feel euphoric.",\ + "You feel giddy.",\ + "You're so happy suddenly, you almost want to dance and sing.",\ + "You feel like the world is out to help you.") + +/datum/artifact_effect/goodfeeling/DoEffectTouch(var/mob/living/user) + if(ishuman(user) && !user.isSynthetic()) + var/mob/living/carbon/human/H = user + if(prob(50)) + if(prob(75)) + to_chat(H, "[pick(drastic_messages)]") + else + to_chat(H, "[pick(messages)]") + + if(prob(50)) + H.dizziness += rand(3,5) + +/datum/artifact_effect/goodfeeling/DoEffectAura() + if(holder) + var/turf/T = get_turf(holder) + for(var/mob/living/carbon/human/H in range(effectrange,T)) + if(H.isSynthetic()) + continue + if(prob(5)) + if(prob(75)) + to_chat(H, "[pick(messages)]") + else + to_chat(H, "[pick(drastic_messages)]") + + if(prob(5)) + H.dizziness += rand(3,5) + return TRUE + +/datum/artifact_effect/goodfeeling/DoEffectPulse() + if(holder) + var/turf/T = get_turf(holder) + for(var/mob/living/carbon/human/H in range(effectrange,T)) + if(H.isSynthetic()) + continue + if(prob(50)) + if(prob(95)) + to_chat(H, "[pick(drastic_messages)]") + else + to_chat(H, "[pick(messages)]") + + if(prob(50)) + H.dizziness += rand(3,5) + else if(prob(25)) + H.dizziness += rand(5,15) + return TRUE + +//Artifact makes you see things. Only carbon-level mobs and above experience hallucinations +/datum/artifact_effect/hallucination + effecttype = "hallucination" + effect_type = 2 + var/strength = 1 + +/datum/artifact_effect/hallucination/New() + ..() + strength = rand(1, 3) + +/datum/artifact_effect/hallucination/DoEffectTouch(var/mob/living/user) + if(iscarbon(user) && !user.isSynthetic()) + var/mob/living/carbon/C = user + var/weakness = GetAnomalySusceptibility(C) + if(prob(weakness * 100)) + C.hallucination = max(strength * 20, C.hallucination + (strength * 10)) + to_chat(C, "You touch \the [src], [pick("but nothing of note happens","but nothing happens","but nothing interesting happens","but you notice nothing different","but nothing seems to have happened")].") + if(prob(5)) + C.dizziness += rand(110,150) + +/datum/artifact_effect/hallucination/DoEffectAura() + if(holder) + var/turf/T = get_turf(holder) + for(var/mob/living/carbon/C in range(effectrange,T)) + if(C.isSynthetic()) + continue + var/weakness = GetAnomalySusceptibility(C) + if(prob(weakness * 100)) + C.hallucination = max(strength * 5, C.hallucination + strength) //Constantly creeps up + return TRUE + +/datum/artifact_effect/hallucination/DoEffectPulse() + if(holder) + var/turf/T = get_turf(holder) + for(var/mob/living/carbon/C in range(effectrange,T)) + if(C.isSynthetic()) + continue + var/weakness = GetAnomalySusceptibility(C) + if(prob(weakness * 100)) + C.hallucination = max(strength * 5, C.hallucination + strength) //Creeps up slower than a constant aura, but the bursts cause dizziness + if(prob(20)) + C.dizziness += rand(50,75) + + return TRUE \ No newline at end of file diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_physical.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_physical.dm new file mode 100644 index 00000000000..4d9156472e2 --- /dev/null +++ b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_physical.dm @@ -0,0 +1,340 @@ +//Effects that affect crew/bots physically, such as harming, healing, status effects, etc. + +/datum/artifact_effect/heal + effecttype = "heal" + effect_type = 5 + +/datum/artifact_effect/heal/DoEffectTouch(var/mob/living/toucher) + //todo: check over this properly + if(!toucher.isSynthetic() && iscarbon(toucher)) + var/weakness = GetAnomalySusceptibility(toucher) + if(prob(weakness * 100)) + var/mob/living/carbon/C = toucher + to_chat(C, SPAN_NOTICE("You feel a soothing energy invigorate you.")) + + if(ishuman(toucher)) + var/mob/living/carbon/human/H = toucher + for(var/obj/item/organ/external/affecting in H.organs) + if(affecting && istype(affecting)) + affecting.heal_damage(25 * weakness, 25 * weakness) + //H:heal_organ_damage(25, 25) + H.vessel.add_reagent(/decl/reagent/blood,5, temperature = H.species?.body_temperature) + H.adjustNutritionLoss(-50 * weakness) + H.adjustHydrationLoss(-50 * weakness) + H.adjustBrainLoss(-25 * weakness) + H.apply_radiation(-1*min(H.total_radiation, 25 * weakness)) + H.bodytemperature = initial(H.bodytemperature) + H.fixblood() + // + C.adjustOxyLoss(-25 * weakness) + C.adjustToxLoss(-25 * weakness) + C.adjustBruteLoss(-25 * weakness) + C.adjustFireLoss(-25 * weakness) + // + C.regenerate_icons() + return TRUE + +/datum/artifact_effect/heal/DoEffectAura() + //todo: check over this properly + if(holder) + var/turf/T = get_turf(holder) + for(var/mob/living/carbon/C in range(effectrange,T)) + if(C.isSynthetic()) + continue + var/weakness = GetAnomalySusceptibility(C) + if(prob(weakness * 100)) + if(prob(10)) + to_chat(C, "You feel a soothing energy radiating from something nearby.") + C.adjustBruteLoss(-1 * weakness) + C.adjustFireLoss(-1 * weakness) + C.adjustToxLoss(-1 * weakness) + C.adjustOxyLoss(-1 * weakness) + C.adjustBrainLoss(-1 * weakness) + C.updatehealth() + +/datum/artifact_effect/heal/DoEffectPulse() + //todo: check over this properly + if(holder) + var/turf/T = get_turf(holder) + for(var/mob/living/carbon/C in range(effectrange,T)) + if(C.isSynthetic()) + continue + var/weakness = GetAnomalySusceptibility(C) + if(prob(weakness * 100)) + to_chat(C, "A wave of energy invigorates you.") + C.adjustBruteLoss(-5 * weakness) + C.adjustFireLoss(-5 * weakness) + C.adjustToxLoss(-5 * weakness) + C.adjustOxyLoss(-5 * weakness) + C.adjustBrainLoss(-5 * weakness) + C.updatehealth() + + +/datum/artifact_effect/hurt + effecttype = I_HURT + effect_type = 5 + +/datum/artifact_effect/hurt/DoEffectTouch(var/mob/living/toucher) + if(!toucher.isSynthetic()) + var/weakness = GetAnomalySusceptibility(toucher) + if(iscarbon(toucher) && prob(weakness * 100)) + var/mob/living/carbon/C = toucher + to_chat(C, "A painful discharge of energy strikes you!") + C.adjustOxyLoss(rand(5,25) * weakness) + C.adjustToxLoss(rand(5,25) * weakness) + C.adjustBruteLoss(rand(5,25) * weakness) + C.adjustFireLoss(rand(5,25) * weakness) + C.adjustBrainLoss(rand(5,25) * weakness) + C.apply_damage(25 * weakness, IRRADIATE, damage_flags = DAM_DISPERSED) + C.adjustNutritionLoss(50 * weakness) + C.adjustHydrationLoss(50 * weakness) + C.make_dizzy(6 * weakness) + C.weakened += 6 * weakness + +/datum/artifact_effect/hurt/DoEffectAura() + if(holder) + var/turf/T = get_turf(holder) + for (var/mob/living/carbon/C in range(effectrange,T)) + if(C.isSynthetic()) + continue + var/weakness = GetAnomalySusceptibility(C) + if(prob(weakness * 100)) + if(prob(10)) + to_chat(C, "You feel a painful force radiating from something nearby.") + C.adjustBruteLoss(1 * weakness) + C.adjustFireLoss(1 * weakness) + C.adjustToxLoss(1 * weakness) + C.adjustOxyLoss(1 * weakness) + C.adjustBrainLoss(1 * weakness) + C.updatehealth() + +/datum/artifact_effect/hurt/DoEffectPulse() + if(holder) + var/turf/T = get_turf(holder) + for(var/mob/living/carbon/C in range(effectrange, T)) + if(C.isSynthetic()) + continue + var/weakness = GetAnomalySusceptibility(C) + if(prob(weakness * 100)) + to_chat(C, "A wave of painful energy strikes you!") + C.adjustBruteLoss(3 * weakness) + C.adjustFireLoss(3 * weakness) + C.adjustToxLoss(3 * weakness) + C.adjustOxyLoss(3 * weakness) + C.adjustBrainLoss(3 * weakness) + C.updatehealth() + + +/datum/artifact_effect/roboheal + effecttype = "roboheal" + var/last_message + +/datum/artifact_effect/roboheal/New() + ..() + effect_type = pick(3,4) + +/datum/artifact_effect/roboheal/DoEffectTouch(var/mob/living/user) + if(user.isSynthetic()) + to_chat(user, SPAN_NOTICE("Your systems report damaged components mending by themselves!")) + user.adjustBruteLoss(rand(-10,-30)) + user.adjustFireLoss(rand(-10,-30)) + return TRUE + +/datum/artifact_effect/roboheal/DoEffectAura() + if(holder) + var/turf/T = get_turf(holder) + for(var/mob/living/M in range(effectrange,T)) + if(!M.isSynthetic()) + continue + if(world.time - last_message > 200) + to_chat(M, SPAN_NOTICE("Your systems report damaged components mending by themselves!")) + last_message = world.time + M.adjustBruteLoss(-1) + M.adjustFireLoss(-1) + M.updatehealth() + return TRUE + +/datum/artifact_effect/roboheal/DoEffectPulse() + if(holder) + var/turf/T = get_turf(holder) + for(var/mob/living/M in range(effectrange,T)) + if(!M.isSynthetic()) + continue + if(world.time - last_message > 200) + to_chat(M, SPAN_NOTICE("Diagnostics Alert: Structural damage has been repaired by energy pulse!")) + last_message = world.time + M.adjustBruteLoss(-10) + M.adjustFireLoss(-10) + M.updatehealth() + return TRUE + +/datum/artifact_effect/robohurt + effecttype = "robohurt" + var/last_message + +/datum/artifact_effect/robohurt/New() + ..() + effect_type = pick(3,4) + +/datum/artifact_effect/robohurt/DoEffectTouch(var/mob/living/user) + if(user.isSynthetic()) + to_chat(user, SPAN_WARNING("Your systems report severe damage has been inflicted!")) + user.adjustBruteLoss(rand(10,50)) + user.adjustFireLoss(rand(10,50)) + return TRUE + +/datum/artifact_effect/robohurt/DoEffectAura() + if(holder) + var/turf/T = get_turf(holder) + for(var/mob/living/M in range(effectrange,T)) + if(!M.isSynthetic()) + continue + if(world.time - last_message > 200) + to_chat(M, SPAN_WARNING("Your systems report severe damage has been inflicted!")) + last_message = world.time + M.adjustBruteLoss(1) + M.adjustFireLoss(1) + M.updatehealth() + return TRUE + +/datum/artifact_effect/robohurt/DoEffectPulse() + if(holder) + var/turf/T = get_turf(holder) + for (var/mob/living/M in range(effectrange,T)) + if(!M.isSynthetic()) + continue + if(world.time - last_message > 200) + to_chat(M, SPAN_WARNING("Your systems report severe damage has been inflicted!")) + last_message = world.time + M.adjustBruteLoss(10) + M.adjustFireLoss(10) + M.updatehealth() + return TRUE + +/datum/artifact_effect/sleepy + effecttype = "sleepy" + +/datum/artifact_effect/sleepy/New() + ..() + effect_type = pick(5,2) + +/datum/artifact_effect/sleepy/DoEffectTouch(var/mob/living/toucher) + if(toucher) + var/weakness = GetAnomalySusceptibility(toucher) + if(!toucher.isSynthetic()) + if(ishuman(toucher) && prob(weakness * 100)) + var/mob/living/carbon/human/H = toucher + to_chat(H, pick("You feel like taking a nap.","You feel a yawn coming on.","You feel a little tired.")) + H.drowsyness = min(H.drowsyness + rand(5,25) * weakness, 50 * weakness) + H.eye_blurry = min(H.eye_blurry + rand(1,3) * weakness, 50 * weakness) + else + to_chat(toucher, SPAN_WARNING("SYSTEM ALERT: CPU cycles slowing down!")) + return TRUE + +/datum/artifact_effect/sleepy/DoEffectAura() + if(holder) + var/turf/T = get_turf(holder) + for(var/mob/living/L in range(effectrange,T)) + if(L.isSynthetic()) + to_chat(L, SPAN_WARNING("SYSTEM ALERT: CPU cycles slowing down!")) + continue + else if(ishuman(L)) + var/mob/living/carbon/human/H = L + var/weakness = GetAnomalySusceptibility(H) + if(prob(weakness * 100)) + if(prob(10)) + to_chat(H, pick("You feel like taking a nap.","You feel a yawn coming on.","You feel a little tired.")) + H.drowsyness = min(H.drowsyness + 1 * weakness, 25 * weakness) + H.eye_blurry = min(H.eye_blurry + 1 * weakness, 25 * weakness) + return TRUE + +/datum/artifact_effect/sleepy/DoEffectPulse() + if(holder) + var/turf/T = get_turf(holder) + for(var/mob/living/L in range(effectrange,T)) + if(L.isSynthetic()) + to_chat(L, SPAN_WARNING("SYSTEM ALERT: CPU cycles slowing down!")) + continue + else if(ishuman(L)) + var/mob/living/carbon/human/H = L + var/weakness = GetAnomalySusceptibility(H) + if(prob(weakness * 100)) + to_chat(H, pick("You feel like taking a nap.","You feel a yawn coming on.","You feel a little tired.")) + H.drowsyness = min(H.drowsyness + rand(5,15) * weakness, 50 * weakness) + H.eye_blurry = min(H.eye_blurry + rand(5,15) * weakness, 50 * weakness) + + return TRUE + +/datum/artifact_effect/stun + effecttype = "stun" + +/datum/artifact_effect/stun/New() + ..() + effect_type = pick(2,5) + +/datum/artifact_effect/stun/DoEffectTouch(var/mob/living/toucher) + if(iscarbon(toucher)) + var/mob/living/carbon/C = toucher + var/susceptibility = GetAnomalySusceptibility(C) + if(prob(susceptibility * 100)) + to_chat(C, "A powerful force overwhelms your consciousness.") + C.Weaken(rand(1,10) * susceptibility) + C.stuttering += 30 * susceptibility + C.Stun(rand(1,10) * susceptibility) + +/datum/artifact_effect/stun/DoEffectAura() + if(holder) + var/turf/T = get_turf(holder) + for (var/mob/living/carbon/C in range(effectrange,T)) + var/susceptibility = GetAnomalySusceptibility(C) + if(prob(10 * susceptibility)) + to_chat(C, "Your body goes numb for a moment.") + C.Weaken(2) + C.stuttering += 2 + if(prob(10)) + C.Stun(1) + else if(prob(10)) + to_chat(C, "You feel numb.") + +/datum/artifact_effect/stun/DoEffectPulse() + if(holder) + var/turf/T = get_turf(holder) + for (var/mob/living/carbon/C in range(effectrange,T)) + var/susceptibility = GetAnomalySusceptibility(C) + if(prob(100 * susceptibility)) + to_chat(C, "A wave of energy overwhelms your senses!") + C.SetWeakened(4 * susceptibility) + C.stuttering = 4 * susceptibility + if(prob(10)) + C.SetStunned(1 * susceptibility) + +/datum/artifact_effect/radiate + effecttype = "radiate" + var/radiation_amount + +/datum/artifact_effect/radiate/New() + ..() + radiation_amount = rand(1, 10) + effect_type = pick(4,5) + +/datum/artifact_effect/radiate/DoEffectTouch(var/mob/living/user) + if(user) + user.apply_effect(radiation_amount * 5,IRRADIATE,0) + user.updatehealth() + return TRUE + +/datum/artifact_effect/radiate/DoEffectAura() + if(holder) + var/turf/T = get_turf(holder) + for (var/mob/living/M in range(src.effectrange,T)) + M.apply_effect(radiation_amount,IRRADIATE,0) + M.updatehealth() + return TRUE + +/datum/artifact_effect/radiate/DoEffectPulse() + if(holder) + var/turf/T = get_turf(holder) + for (var/mob/living/M in range(src.effectrange,T)) + M.apply_damage(radiation_amount * 25, IRRADIATE, damage_flags = DAM_DISPERSED) + M.updatehealth() + return TRUE diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_radiate.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_radiate.dm deleted file mode 100644 index 0f64a9e7092..00000000000 --- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_radiate.dm +++ /dev/null @@ -1,31 +0,0 @@ - -/datum/artifact_effect/radiate - effecttype = "radiate" - var/radiation_amount - -/datum/artifact_effect/radiate/New() - ..() - radiation_amount = rand(1, 10) - effect_type = pick(4,5) - -/datum/artifact_effect/radiate/DoEffectTouch(var/mob/living/user) - if(user) - user.apply_effect(radiation_amount * 5,IRRADIATE,0) - user.updatehealth() - return 1 - -/datum/artifact_effect/radiate/DoEffectAura() - if(holder) - var/turf/T = get_turf(holder) - for (var/mob/living/M in range(src.effectrange,T)) - M.apply_effect(radiation_amount,IRRADIATE,0) - M.updatehealth() - return 1 - -/datum/artifact_effect/radiate/DoEffectPulse() - if(holder) - var/turf/T = get_turf(holder) - for (var/mob/living/M in range(src.effectrange,T)) - M.apply_damage(radiation_amount * 25, IRRADIATE, damage_flags = DAM_DISPERSED) - M.updatehealth() - return 1 diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_roboheal.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_roboheal.dm deleted file mode 100644 index aded96be92d..00000000000 --- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_roboheal.dm +++ /dev/null @@ -1,41 +0,0 @@ - -/datum/artifact_effect/roboheal - effecttype = "roboheal" - var/last_message - -/datum/artifact_effect/roboheal/New() - ..() - effect_type = pick(3,4) - -/datum/artifact_effect/roboheal/DoEffectTouch(var/mob/user) - if(user) - if (istype(user, /mob/living/silicon/robot)) - var/mob/living/silicon/robot/R = user - to_chat(R, "Your systems report damaged components mending by themselves!") - R.adjustBruteLoss(rand(-10,-30)) - R.adjustFireLoss(rand(-10,-30)) - return 1 - -/datum/artifact_effect/roboheal/DoEffectAura() - if(holder) - var/turf/T = get_turf(holder) - for (var/mob/living/silicon/robot/M in range(src.effectrange,T)) - if(world.time - last_message > 200) - to_chat(M, "SYSTEM ALERT: Beneficial energy field detected!") - last_message = world.time - M.adjustBruteLoss(-1) - M.adjustFireLoss(-1) - M.updatehealth() - return 1 - -/datum/artifact_effect/roboheal/DoEffectPulse() - if(holder) - var/turf/T = get_turf(holder) - for (var/mob/living/silicon/robot/M in range(src.effectrange,T)) - if(world.time - last_message > 200) - to_chat(M, "SYSTEM ALERT: Structural damage has been repaired by energy pulse!") - last_message = world.time - M.adjustBruteLoss(-10) - M.adjustFireLoss(-10) - M.updatehealth() - return 1 diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_robohurt.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_robohurt.dm deleted file mode 100644 index d8f04e0cc53..00000000000 --- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_robohurt.dm +++ /dev/null @@ -1,41 +0,0 @@ - -/datum/artifact_effect/robohurt - effecttype = "robohurt" - var/last_message - -/datum/artifact_effect/robohurt/New() - ..() - effect_type = pick(3,4) - -/datum/artifact_effect/robohurt/DoEffectTouch(var/mob/user) - if(user) - if (istype(user, /mob/living/silicon/robot)) - var/mob/living/silicon/robot/R = user - to_chat(R, "Your systems report severe damage has been inflicted!") - R.adjustBruteLoss(rand(10,50)) - R.adjustFireLoss(rand(10,50)) - return 1 - -/datum/artifact_effect/robohurt/DoEffectAura() - if(holder) - var/turf/T = get_turf(holder) - for (var/mob/living/silicon/robot/M in range(src.effectrange,T)) - if(world.time - last_message > 200) - to_chat(M, "SYSTEM ALERT: Harmful energy field detected!") - last_message = world.time - M.adjustBruteLoss(1) - M.adjustFireLoss(1) - M.updatehealth() - return 1 - -/datum/artifact_effect/robohurt/DoEffectPulse() - if(holder) - var/turf/T = get_turf(holder) - for (var/mob/living/silicon/robot/M in range(src.effectrange,T)) - if(world.time - last_message > 200) - to_chat(M, "SYSTEM ALERT: Structural damage inflicted by energy pulse!") - last_message = world.time - M.adjustBruteLoss(10) - M.adjustFireLoss(10) - M.updatehealth() - return 1 diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_sleepy.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_sleepy.dm deleted file mode 100644 index 0b8ec8346cb..00000000000 --- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_sleepy.dm +++ /dev/null @@ -1,48 +0,0 @@ - -//todo -/datum/artifact_effect/sleepy - effecttype = "sleepy" - -/datum/artifact_effect/sleepy/New() - ..() - effect_type = pick(5,2) - -/datum/artifact_effect/sleepy/DoEffectTouch(var/mob/toucher) - if(toucher) - var/weakness = GetAnomalySusceptibility(toucher) - if(ishuman(toucher) && prob(weakness * 100)) - var/mob/living/carbon/human/H = toucher - to_chat(H, pick("You feel like taking a nap.","You feel a yawn coming on.","You feel a little tired.")) - H.drowsyness = min(H.drowsyness + rand(5,25) * weakness, 50 * weakness) - H.eye_blurry = min(H.eye_blurry + rand(1,3) * weakness, 50 * weakness) - return 1 - else if(isrobot(toucher)) - to_chat(toucher, "SYSTEM ALERT: CPU cycles slowing down.") - return 1 - -/datum/artifact_effect/sleepy/DoEffectAura() - if(holder) - var/turf/T = get_turf(holder) - for (var/mob/living/carbon/human/H in range(src.effectrange,T)) - var/weakness = GetAnomalySusceptibility(H) - if(prob(weakness * 100)) - if(prob(10)) - to_chat(H, pick("You feel like taking a nap.","You feel a yawn coming on.","You feel a little tired.")) - H.drowsyness = min(H.drowsyness + 1 * weakness, 25 * weakness) - H.eye_blurry = min(H.eye_blurry + 1 * weakness, 25 * weakness) - for (var/mob/living/silicon/robot/R in range(src.effectrange,holder)) - to_chat(R, "SYSTEM ALERT: CPU cycles slowing down.") - return 1 - -/datum/artifact_effect/sleepy/DoEffectPulse() - if(holder) - var/turf/T = get_turf(holder) - for(var/mob/living/carbon/human/H in range(src.effectrange, T)) - var/weakness = GetAnomalySusceptibility(H) - if(prob(weakness * 100)) - to_chat(H, pick("You feel like taking a nap.","You feel a yawn coming on.","You feel a little tired.")) - H.drowsyness = min(H.drowsyness + rand(5,15) * weakness, 50 * weakness) - H.eye_blurry = min(H.eye_blurry + rand(5,15) * weakness, 50 * weakness) - for (var/mob/living/silicon/robot/R in range(src.effectrange,holder)) - to_chat(R, "SYSTEM ALERT: CPU cycles slowing down.") - return 1 diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_stun.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_stun.dm deleted file mode 100644 index 0bd01ddc882..00000000000 --- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_stun.dm +++ /dev/null @@ -1,43 +0,0 @@ - -/datum/artifact_effect/stun - effecttype = "stun" - -/datum/artifact_effect/stun/New() - ..() - effect_type = pick(2,5) - -/datum/artifact_effect/stun/DoEffectTouch(var/mob/toucher) - if(toucher && iscarbon(toucher)) - var/mob/living/carbon/C = toucher - var/susceptibility = GetAnomalySusceptibility(C) - if(prob(susceptibility * 100)) - to_chat(C, "A powerful force overwhelms your consciousness.") - C.Weaken(rand(1,10) * susceptibility) - C.stuttering += 30 * susceptibility - C.Stun(rand(1,10) * susceptibility) - -/datum/artifact_effect/stun/DoEffectAura() - if(holder) - var/turf/T = get_turf(holder) - for (var/mob/living/carbon/C in range(src.effectrange,T)) - var/susceptibility = GetAnomalySusceptibility(C) - if(prob(10 * susceptibility)) - to_chat(C, "Your body goes numb for a moment.") - C.Weaken(2) - C.stuttering += 2 - if(prob(10)) - C.Stun(1) - else if(prob(10)) - to_chat(C, "You feel numb.") - -/datum/artifact_effect/stun/DoEffectPulse() - if(holder) - var/turf/T = get_turf(holder) - for (var/mob/living/carbon/C in range(src.effectrange,T)) - var/susceptibility = GetAnomalySusceptibility(C) - if(prob(100 * susceptibility)) - to_chat(C, "A wave of energy overwhelms your senses!") - C.SetWeakened(4 * susceptibility) - C.stuttering = 4 * susceptibility - if(prob(10)) - C.SetStunned(1 * susceptibility) diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_teleport.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_teleport.dm index 2c3bf1cb523..ce6f90ecb11 100644 --- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_teleport.dm +++ b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_teleport.dm @@ -3,7 +3,7 @@ effecttype = "teleport" effect_type = 6 -/datum/artifact_effect/teleport/DoEffectTouch(var/mob/user) +/datum/artifact_effect/teleport/DoEffectTouch(var/mob/living/user) var/weakness = GetAnomalySusceptibility(user) if(prob(100 * weakness)) to_chat(user, SPAN_ALERT("You are suddenly zapped away elsewhere!")) @@ -19,7 +19,7 @@ /datum/artifact_effect/teleport/DoEffectAura() if(holder) var/turf/T = get_turf(holder) - for (var/mob/living/M in range(src.effectrange,T)) + for (var/mob/living/M in range(effectrange,T)) var/weakness = GetAnomalySusceptibility(M) if(prob(100 * weakness)) to_chat(M, SPAN_ALERT("You are displaced by a strange force!")) @@ -35,7 +35,7 @@ /datum/artifact_effect/teleport/DoEffectPulse() if(holder) var/turf/T = get_turf(holder) - for (var/mob/living/M in range(src.effectrange, T)) + for (var/mob/living/M in range(effectrange, T)) var/weakness = GetAnomalySusceptibility(M) if(prob(100 * weakness)) to_chat(M, SPAN_ALERT("You are displaced by a strange force!")) diff --git a/code/modules/research/xenoarchaeology/finds/finds.dm b/code/modules/research/xenoarchaeology/finds/finds.dm index 9618ad67884..328302d91d6 100644 --- a/code/modules/research/xenoarchaeology/finds/finds.dm +++ b/code/modules/research/xenoarchaeology/finds/finds.dm @@ -16,7 +16,7 @@ /datum/find/New(var/digsite, var/exc_req) excavation_required = exc_req find_type = get_random_find_type(digsite) - clearance_range = rand(2,6) + clearance_range = min(rand(2,6), exc_req - 1) dissonance_spread = rand(1500,2500) / 100 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/code/modules/spell_system/artifacts/items/rune_sword.dm b/code/modules/spell_system/artifacts/items/rune_sword.dm index ba6f142c16f..b382217dab7 100644 --- a/code/modules/spell_system/artifacts/items/rune_sword.dm +++ b/code/modules/spell_system/artifacts/items/rune_sword.dm @@ -18,7 +18,7 @@ attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") hitsound = 'sound/weapons/bladeslice.ogg' sharp = 1 - edge = 1 + edge = TRUE base_reflectchance = 60 base_block_chance = 60 can_block_bullets = 1 diff --git a/code/modules/supermatter/supermatter.dm b/code/modules/supermatter/supermatter.dm index cf956b79f63..0cbc2258b00 100644 --- a/code/modules/supermatter/supermatter.dm +++ b/code/modules/supermatter/supermatter.dm @@ -293,8 +293,6 @@ for(var/mob/living/carbon/human/l in view(src, min(7, round(sqrt(power/6))))) // If they can see it without mesons on. Bad on them. if(!istype(l.glasses, /obj/item/clothing/glasses/safety) && !l.is_diona() && !l.isSynthetic()) l.hallucination = max(0, min(200, l.hallucination + power * config_hallucination_power * sqrt( 1 / max(1,get_dist(l, src)) ) ) ) - if(prob(15)) - l.cure_all_traumas(cure_type = CURE_HYPNOSIS) //adjusted range so that a power of 170 (pretty high) results in 9 tiles, roughly the distance from the core to the engine monitoring room. //note that the rads given at the maximum range is a constant 0.2 - as power increases the maximum range merely increases. @@ -352,29 +350,23 @@ Consume(user) // This is purely informational UI that may be accessed by AIs or robots -/obj/machinery/power/supermatter/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - var/data[0] - +/obj/machinery/power/supermatter/vueui_data_change(list/data, mob/user, datum/vueui/ui) + data = ..() || list() data["integrity_percentage"] = round(get_integrity()) var/datum/gas_mixture/env = null if(!istype(src.loc, /turf/space)) env = src.loc.return_air() - - if(!env) - data["ambient_temp"] = 0 - data["ambient_pressure"] = 0 - else - data["ambient_temp"] = round(env.temperature) - data["ambient_pressure"] = round(env.return_pressure()) + data["ambient_temp"] = round(env?.temperature) + data["ambient_pressure"] = round(env?.return_pressure()) data["detonating"] = grav_pulling + return data - ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open) +/obj/machinery/power/supermatter/ui_interact(mob/user) + var/datum/vueui/ui = SSvueui.get_open_ui(user, src) if (!ui) - ui = new(user, src, ui_key, "supermatter_crystal.tmpl", "Supermatter Crystal", 500, 300) - ui.set_initial_data(data) + ui = new(user, src, "machinery-power-supermattercrystal", 500, 300, "Supermatter Crystal", state = interactive_state) + ui.auto_update_content = TRUE ui.open() - ui.set_auto_update(1) - /* /obj/machinery/power/supermatter/proc/transfer_energy() diff --git a/code/modules/surgery/facial_surgery.dm b/code/modules/surgery/facial_surgery.dm index 6f013d78834..c8d595db5ab 100644 --- a/code/modules/surgery/facial_surgery.dm +++ b/code/modules/surgery/facial_surgery.dm @@ -81,7 +81,7 @@ target.dna.real_name = getName if(target.mind) target.mind.name = target.name - target.change_appearance(APPEARANCE_PLASTICSURGERY, usr, usr, check_species_whitelist = 1, state = z_state) + target.change_appearance(APPEARANCE_PLASTICSURGERY, user, TRUE, ui_state = default_state, state_object = target) target.op_stage.face = FACE_ALTERED @@ -229,7 +229,7 @@ target.dna.real_name = getName if(target.mind) target.mind.name = target.name - target.change_appearance(APPEARANCE_PLASTICSURGERY, usr, usr, check_species_whitelist = 1, state = z_state) + target.change_appearance(APPEARANCE_PLASTICSURGERY, user, TRUE, ui_state = default_state, state_object = target) target.op_stage.face = FACE_ALTERED diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index 149db63495f..3f38afe6fe3 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -81,9 +81,6 @@ I.surgical_fix(user) user.visible_message("\The [user] finishes treating damage within \the [target]'s [affected.name] with [tool_name].", \ "You finish treating damage within \the [target]'s [affected.name] with [tool_name].") - var/obj/item/organ/internal/brain/sponge = target.internal_organs_by_name[BP_BRAIN] - if(sponge && istype(I, sponge)) - target.cure_all_traumas(cure_type = CURE_SURGERY) if(I.status & ORGAN_DEAD) to_chat(user, SPAN_DANGER("This organ is still dead! You must remove the dead tissue with a scalpel!")) @@ -156,9 +153,6 @@ user.visible_message("[user] repairs [target]'s [I.name] with [tool].", \ SPAN_NOTICE("You repair [target]'s [I.name] with [tool].") ) I.damage = 0 - var/obj/item/organ/internal/brain/sponge = target.internal_organs_by_name[BP_BRAIN] - if(sponge && istype(I, sponge)) - target.cure_all_traumas() if(istype(tool, /obj/item/stack/nanopaste)) var/obj/item/stack/nanopaste/nanopaste = tool nanopaste.use(1) diff --git a/code/modules/vehicles/bike.dm b/code/modules/vehicles/bike.dm index e6dfe96cdd1..8d59df8b494 100644 --- a/code/modules/vehicles/bike.dm +++ b/code/modules/vehicles/bike.dm @@ -1,7 +1,7 @@ /obj/vehicle/bike name = "space-bike" desc = "Space wheelies! Woo!" - desc_info = "Drag yourself onto the bike to mount it, toggle the engine to be able to drive around. Deploy the kickstand to prevent movement by driving and dragging. Drag it onto yourself to access its mounted storage. Resist to get off. Use ctrl-click to quickly toggle the engine if you're adjacent (only when vehicle is stationary). Alt-click will similarly toggle the kickstand." + desc_info = "Click on the bike, click resist, or type resist into the red bar below to get off. Drag yourself onto the bike to mount it, toggle the engine to be able to drive around. Deploy the kickstand to prevent movement by driving and dragging. Drag it onto yourself to access its mounted storage. Resist to get off. Use ctrl-click to quickly toggle the engine if you're adjacent (only when vehicle is stationary). Alt-click will similarly toggle the kickstand." icon = 'icons/obj/bike.dmi' icon_state = "bike_off" dir = SOUTH @@ -25,8 +25,8 @@ var/kickstand = TRUE var/can_hover = TRUE -/obj/vehicle/bike/Initialize() - . = ..() +/obj/vehicle/bike/setup_vehicle() + ..() ion = new(src) turn_off() add_overlay(image('icons/obj/bike.dmi', "[icon_state]_off_overlay", MOB_LAYER + 1)) @@ -36,16 +36,13 @@ /obj/vehicle/bike/CtrlClick(var/mob/user) if(Adjacent(user) && anchored) - toggle() + toggle_engine(user) else return ..() -/obj/vehicle/bike/verb/toggle() - set name = "Toggle Engine" - set category = "Vehicle" - set src in view(0) - - if(usr.incapacitated()) return +/obj/vehicle/bike/proc/toggle_engine(var/mob/user) + if(use_check_and_message(user)) + return if(!on) turn_on() @@ -61,23 +58,20 @@ else return ..() -/obj/vehicle/bike/verb/kickstand() - set name = "Toggle Kickstand" - set category = "Vehicle" - set src in view(0) - - if(usr.incapacitated()) return +/obj/vehicle/bike/proc/kickstand(var/mob/user) + if(use_check_and_message(user)) + return if(kickstand) - usr.visible_message("\The [usr] puts up \the [src]'s kickstand.", "You put up \the [src]'s kickstand.", "You hear a thunk.") + user.visible_message("\The [user] puts up \the [src]'s kickstand.", "You put up \the [src]'s kickstand.", "You hear a thunk.") playsound(src, 'sound/misc/bike_stand_up.ogg', 50, 1) else if(isturf(loc)) var/turf/T = loc if (T.is_hole) - to_chat(usr, "You don't think kickstands work here.") + to_chat(user, "You don't think kickstands work here.") return - usr.visible_message("\The [usr] puts down \the [src]'s kickstand.", "You put down \the [src]'s kickstand.", "You hear a thunk.") + user.visible_message("\The [user] puts down \the [src]'s kickstand.", "You put down \the [src]'s kickstand.", "You hear a thunk.") playsound(src, 'sound/misc/bike_stand_down.ogg', 50, 1) if(pulledby) pulledby.stop_pulling() diff --git a/code/modules/vehicles/cargo_train.dm b/code/modules/vehicles/cargo_train.dm index 83281d62c94..9d8d0a795b1 100644 --- a/code/modules/vehicles/cargo_train.dm +++ b/code/modules/vehicles/cargo_train.dm @@ -1,7 +1,7 @@ /obj/vehicle/train/cargo/engine name = "cargo train tug" desc = "A ridable electric car designed for pulling cargo trolleys." - desc_info = "Use ctrl-click to quickly toggle the engine if you're adjacent (only when vehicle is stationary). Alt-click will grab the keys, if present." + desc_info = "Click resist, or type resist into the red bar below to get off. Use ctrl-click to quickly toggle the engine if you're adjacent (only when vehicle is stationary). Alt-click will grab the keys, if present. If latched, you can use a wrench to unlatch." icon = 'icons/obj/vehicles.dmi' icon_state = "cargo_engine" on = 0 @@ -27,6 +27,7 @@ /obj/vehicle/train/cargo/trolley name = "cargo train trolley" + desc_info = "You can use a wrench to unlatch this." icon = 'icons/obj/vehicles.dmi' icon_state = "cargo_trailer" anchored = 0 @@ -41,13 +42,16 @@ //------------------------------------------- // Standard procs //------------------------------------------- -/obj/vehicle/train/cargo/engine/Initialize() - . = ..() +/obj/vehicle/train/cargo/engine/setup_vehicle() + ..() + setup_engine() + +/obj/vehicle/train/cargo/engine/proc/setup_engine() cell = new /obj/item/cell/high(src) key = new(src) var/image/I = new(icon = icon, icon_state = "[icon_state]_overlay", layer = src.layer + 0.2) //over mobs add_overlay(I) - turn_off() //so engine verbs are correctly set + turn_off() /obj/vehicle/train/cargo/engine/attack_hand(mob/user) if(use_check_and_message(user)) @@ -93,11 +97,11 @@ if(href_list["toggle_engine"]) if(!on) - start_engine() + start_engine(usr) else - stop_engine() + stop_engine(usr) if(href_list["key"]) - do_remove_key(usr) + remove_key(usr) if(href_list["unlatch"]) tow.unattach(usr) SSvueui.check_uis_for_change(src) @@ -131,7 +135,6 @@ user.drop_from_inventory(W, src) key = W to_chat(user, SPAN_NOTICE("You slide the key into the ignition.")) - verbs += /obj/vehicle/train/cargo/engine/verb/remove_key else to_chat(user, SPAN_WARNING("\The [src] already has a key inserted.")) return @@ -186,25 +189,6 @@ ..() update_stats() - verbs -= /obj/vehicle/train/cargo/engine/verb/stop_engine - verbs -= /obj/vehicle/train/cargo/engine/verb/start_engine - - if(on) - verbs += /obj/vehicle/train/cargo/engine/verb/stop_engine - else - verbs += /obj/vehicle/train/cargo/engine/verb/start_engine - -/obj/vehicle/train/cargo/engine/turn_off() - ..() - - verbs -= /obj/vehicle/train/cargo/engine/verb/stop_engine - verbs -= /obj/vehicle/train/cargo/engine/verb/start_engine - - if(!on) - verbs += /obj/vehicle/train/cargo/engine/verb/start_engine - else - verbs += /obj/vehicle/train/cargo/engine/verb/stop_engine - /obj/vehicle/train/cargo/RunOver(var/mob/living/carbon/human/H) var/list/parts = list(BP_HEAD, BP_CHEST, BP_L_LEG, BP_R_LEG, BP_L_ARM, BP_R_ARM) @@ -262,77 +246,51 @@ /obj/vehicle/train/cargo/engine/CtrlClick(var/mob/user) if(Adjacent(user)) if(on) - stop_engine() + stop_engine(usr) else - start_engine() + start_engine(usr) else return ..() /obj/vehicle/train/cargo/engine/AltClick(var/mob/user) if(Adjacent(user)) - remove_key() + remove_key(user) else return ..() -/obj/vehicle/train/cargo/engine/verb/start_engine() - set name = "Start engine" - set category = "Vehicle" - set src in view(0) - - if(!ishuman(usr)) - return - +/obj/vehicle/train/cargo/engine/proc/start_engine(var/mob/user) if(on) - to_chat(usr, "The engine is already running.") + to_chat(user, SPAN_WARNING("The engine is already running.")) return turn_on() if(on) - to_chat(usr, "You start [src]'s engine.") + to_chat(user, SPAN_NOTICE("You start \the [src]'s engine.")) else if(cell.charge < charge_use) - to_chat(usr, "[src] is out of power.") - -/obj/vehicle/train/cargo/engine/verb/stop_engine() - set name = "Stop engine" - set category = "Vehicle" - set src in view(0) - - if(!istype(usr, /mob/living/carbon/human)) - return + to_chat(user, SPAN_WARNING("\The [src] is out of power.")) +/obj/vehicle/train/cargo/engine/proc/stop_engine(var/mob/user) if(!on) - to_chat(usr, "The engine is already stopped.") + to_chat(user, SPAN_WARNING("The engine is already stopped.")) return turn_off() - if (!on) - to_chat(usr, "You stop [src]'s engine.") - -/obj/vehicle/train/cargo/engine/verb/remove_key() - set name = "Remove key" - set category = "Vehicle" - set src in view(0) - - if(!istype(usr, /mob/living/carbon/human)) - return + if(!on) + to_chat(user, SPAN_NOTICE("You stop [src]'s engine.")) +/obj/vehicle/train/cargo/engine/proc/remove_key(var/mob/user) if(!key) to_chat(usr, SPAN_WARNING("\The [src] doesn't have a key inserted!")) return if(load && load != usr) return - do_remove_key(usr) - -/obj/vehicle/train/cargo/engine/proc/do_remove_key(var/mob/user) if(on) turn_off() user.put_in_hands(key) key = null - verbs -= /obj/vehicle/train/cargo/engine/verb/remove_key - /obj/vehicle/train/cargo/engine/emag_act(var/remaining_charges, mob/user) . = ..() if(.) diff --git a/code/modules/vehicles/pussywagon.dm b/code/modules/vehicles/pussywagon.dm index daca0d8c3da..98369c5195b 100644 --- a/code/modules/vehicles/pussywagon.dm +++ b/code/modules/vehicles/pussywagon.dm @@ -18,13 +18,11 @@ icon_state = "keys" w_class = ITEMSIZE_TINY -/obj/vehicle/train/cargo/engine/pussywagon/Initialize() - . = ..() +/obj/vehicle/train/cargo/engine/pussywagon/setup_engine() cell = new /obj/item/cell/high(src) key = null - verbs -= /obj/vehicle/train/cargo/engine/verb/remove_key update_icon() - turn_off() //so engine verbs are correctly set + turn_off() /obj/vehicle/train/cargo/engine/pussywagon/vueui_data_change(list/data, mob/user, datum/vueui/ui) data = ..() @@ -52,12 +50,12 @@ return if(href_list["toggle_hoover"]) - toggle_hoover() + toggle_hoover(usr) if(href_list["empty_hoover"]) var/obj/vehicle/train/cargo/trolley/pussywagon/PT = tow PT.empty_hoover(usr) if(href_list["toggle_mops"]) - toggle_mop() + toggle_mop(usr) SSvueui.check_uis_for_change(src) /obj/vehicle/train/cargo/engine/pussywagon/attackby(obj/item/W as obj, mob/user as mob) @@ -66,7 +64,6 @@ user.drop_from_inventory(W, src) key = W to_chat(user, SPAN_NOTICE("You slide the key into the ignition.")) - verbs += /obj/vehicle/train/cargo/engine/verb/remove_key else to_chat(user, SPAN_WARNING("\The [src] already has a key inserted.")) return @@ -80,9 +77,6 @@ ..() update_stats() - verbs += /obj/vehicle/train/cargo/engine/pussywagon/verb/toggle_mop - verbs += /obj/vehicle/train/cargo/engine/pussywagon/verb/toggle_hoover - /obj/vehicle/train/cargo/engine/pussywagon/turn_off() ..() @@ -91,31 +85,17 @@ var/obj/vehicle/train/cargo/trolley/pussywagon/PW = tow PW.engine_off() - verbs -= /obj/vehicle/train/cargo/engine/pussywagon/verb/toggle_mop - verbs -= /obj/vehicle/train/cargo/engine/pussywagon/verb/toggle_hoover - -/obj/vehicle/train/cargo/engine/pussywagon/verb/toggle_mop() - set name = "Toggle Mop-o-matic" - set category = "Vehicle" - set src in view(0) - - if(usr.incapacitated()) - return - +/obj/vehicle/train/cargo/engine/pussywagon/proc/toggle_mop(var/mob/user) if(on && tow) if(istype(tow,/obj/vehicle/train/cargo/trolley/pussywagon)) var/obj/vehicle/train/cargo/trolley/pussywagon/PW = tow if(!PW.bucket) - to_chat(usr, SPAN_WARNING("You must insert a reagent container first!")) + to_chat(user, SPAN_WARNING("You must insert a reagent container first!")) return PW.mop_toggle() -/obj/vehicle/train/cargo/engine/pussywagon/verb/toggle_hoover() - set name = "Toggle Space Hoover" - set category = "Vehicle" - set src in view(0) - - if(usr.incapacitated()) +/obj/vehicle/train/cargo/engine/pussywagon/proc/toggle_hoover(var/mob/user) + if(use_check_and_message(user)) return if(on && tow) @@ -161,6 +141,7 @@ /obj/vehicle/train/cargo/trolley/pussywagon name = "janicart deluxe trolley" desc = "The trolley of the janicart deluxe, equipped with dual rotary mop and a NT-X1 Vacuum Cleaner." + desc_info = "You can unlatch this from the control console of the janicart." icon = 'icons/obj/vehicles.dmi' icon_state = "jantrolley" diff --git a/code/modules/vehicles/train.dm b/code/modules/vehicles/train.dm index 76b6f9149f3..039c5390398 100644 --- a/code/modules/vehicles/train.dm +++ b/code/modules/vehicles/train.dm @@ -23,8 +23,8 @@ //------------------------------------------- // Standard procs //------------------------------------------- -/obj/vehicle/train/Initialize() - . = ..() +/obj/vehicle/train/setup_vehicle() + ..() for(var/obj/vehicle/train/T in orange(1, src)) latch(T) @@ -119,20 +119,12 @@ else if(load) unload(user) //unload if loaded -/obj/vehicle/train/verb/unlatch_v() - set name = "Unlatch" - set desc = "Unhitches this train from the one in front of it." - set category = "Vehicle" - set src in view(1) - - if(!istype(usr, /mob/living/carbon/human)) +/obj/vehicle/train/attackby(obj/item/W, mob/user) + if(W.iswrench()) + playsound(loc, W.usesound, 70, FALSE) + unattach(user) return - - if(!usr.canmove || usr.stat || usr.restrained() || !Adjacent(usr)) - return - - unattach(usr) - + return ..() //------------------------------------------- // Latching/unlatching procs diff --git a/code/modules/vehicles/vehicle.dm b/code/modules/vehicles/vehicle.dm index 2a29f4a50a1..6b155441264 100644 --- a/code/modules/vehicles/vehicle.dm +++ b/code/modules/vehicles/vehicle.dm @@ -42,12 +42,11 @@ //------------------------------------------- // Standard procs //------------------------------------------- -/obj/vehicle/New() - ..() - //spawn the cell you want in each vehicle - /obj/vehicle/Initialize() . = ..() + setup_vehicle() + +/obj/vehicle/proc/setup_vehicle() LAZYADD(can_buckle, /mob/living) /obj/vehicle/Move() diff --git a/code/modules/vueui/ui.dm b/code/modules/vueui/ui.dm index ab5fe93a054..667080981b4 100644 --- a/code/modules/vueui/ui.dm +++ b/code/modules/vueui/ui.dm @@ -10,6 +10,7 @@ main ui datum. var/mob/user // object that contains this ui var/datum/object + var/datum/state_object // if this is specified, checking for state will use this instead of just object // browser window width var/width = 100 // browser window height @@ -46,11 +47,12 @@ main ui datum. * * @return nothing */ -/datum/vueui/New(var/nuser, var/nobject, var/nactiveui = 0, var/nwidth = 0, var/nheight = 0, var/ntitle, var/list/ndata, var/datum/topic_state/state = default_state) +/datum/vueui/New(var/nuser, var/nobject, var/nactiveui = 0, var/nwidth = 0, var/nheight = 0, var/ntitle, var/list/ndata, var/datum/topic_state/state = default_state, var/datum/set_state_object) user = nuser object = nobject data = ndata src.state = state + state_object = set_state_object LAZYINITLIST(assets) if (nactiveui) @@ -361,7 +363,8 @@ main ui datum. * @return 1 if push should happen, 0 if shouldn't happen. */ /datum/vueui/proc/update_status(var/autopush = TRUE, var/checkforchange = FALSE) - . = set_status(object.CanUseTopic(user, state), autopush, checkforchange) + var/datum/check_object = state_object ? state_object : object + return set_status(check_object.CanUseTopic(user, state), autopush, checkforchange) /** * Process this ui diff --git a/code/modules/vueui/var_monitor.dm b/code/modules/vueui/var_monitor.dm index b49e0396b1a..481f92d327f 100644 --- a/code/modules/vueui/var_monitor.dm +++ b/code/modules/vueui/var_monitor.dm @@ -63,4 +63,4 @@ // Transform functions. // Do not override. /datum/vueui_var_monitor/proc/transform_to_boolean(invert, source, current) - return !!source ^ invert \ No newline at end of file + return !!source ^ invert diff --git a/code/modules/web_interface/webint_procs.dm b/code/modules/web_interface/webint_procs.dm index e73fe02753c..f55ebefc507 100644 --- a/code/modules/web_interface/webint_procs.dm +++ b/code/modules/web_interface/webint_procs.dm @@ -78,8 +78,7 @@ attributes += "&" attributes += list2params(list("ckey" = user.ckey, "token" = token)) - establish_db_connection(dbcon) - if (!dbcon.IsConnected()) + if (!establish_db_connection(dbcon)) alert("An error occured while attempting to connect to the database!") return 0 diff --git a/code/unit_tests/recipe_tests.dm b/code/unit_tests/recipe_tests.dm index b7410517822..cadbbb5d58c 100755 --- a/code/unit_tests/recipe_tests.dm +++ b/code/unit_tests/recipe_tests.dm @@ -9,8 +9,7 @@ /datum/unit_test/research_design_cost/start_test() var/tested_count = 0 var/error_count = 0 - for(var/T in subtypesof(/datum/design)) - var/datum/design/D = new T + for(var/datum/design/D in designs) if(ispath(D.build_path, /obj/item)) var/obj/item/I = D.Fabricate() if(I.matter && D.materials && I.recyclable) // non-recyclable items can't be exploited @@ -40,8 +39,8 @@ /datum/unit_test/stack_recipe_cost/start_test() var/tested_count = 0 var/error_count = 0 - for(var/T in subtypesof(/material)) - var/material/D = new T + SSmaterials.create_material_lists() // just in case + for(var/material/D in SSmaterials.materials) var/list/datum/stack_recipe_list/recipe_lists = D.get_recipes() var/list/temp_matter = D.get_matter() for(var/datum/stack_recipe_list/L in recipe_lists) diff --git a/code/unit_tests/spawner_tests.dm b/code/unit_tests/spawner_tests.dm index c2fe77cfbe3..7a3261e3b79 100644 --- a/code/unit_tests/spawner_tests.dm +++ b/code/unit_tests/spawner_tests.dm @@ -13,6 +13,7 @@ datum/unit_test/template/start_test() var/list/ignore_spawners = list( /datum/ghostspawner/human, /datum/ghostspawner/human/admin, + /datum/ghostspawner/human/admin/corporate, /datum/ghostspawner/simplemob, /datum/ghostspawner/human/ert ) diff --git a/code/world.dm b/code/world.dm index 058e0a08da9..ba45d87126e 100644 --- a/code/world.dm +++ b/code/world.dm @@ -57,11 +57,6 @@ var/global/datum/global_init/init = new () maxx = WORLD_MIN_SIZE // So that we don't get map-window-popin at boot. DMMS will expand this. maxy = WORLD_MIN_SIZE -/world/proc/enable_debugger() - var/dll = world.GetConfig("env", "EXTOOLS_DLL") - if (dll) - call(dll, "debug_initialize")() - #define RECOMMENDED_VERSION 510 /world/New() //logs @@ -87,8 +82,6 @@ var/global/datum/global_init/init = new () callHook("startup") - enable_debugger() - . = ..() #ifdef UNIT_TEST diff --git a/config/example/secretchem.json b/config/example/secretchem.json index eb686317304..c4192d800da 100644 --- a/config/example/secretchem.json +++ b/config/example/secretchem.json @@ -11,4 +11,4 @@ } } } -} +} \ No newline at end of file diff --git a/html/changelog.html b/html/changelog.html index f3b9857f067..0abe4abb484 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -35,7 +35,671 @@ -->
+

10 April 2021

+

Geeves updated:

+
    +
  • Tweaks how autolathes generate their recipe lists, ideally there'd be no player-facing change.
  • +
  • You can now change autolathe categories while it's busy building things.
  • +
  • Cortical borers now get a UI element that shows how many chemicals they have to use. They also gain their host's health doll when they infest them.
  • +
  • Hosts that get taken over by cortical borers now get a big resist button UI element, which they can use to resist the borer's control.
  • +
  • Resisting against borer control now takes fourty seconds to a minute, up from twenty seconds to twenty-five seconds.
  • +
  • Various cortical borer action now have a progress bar. Resisting borer control now also has a progress bar.
  • +
  • Hosts being controlled by borers now emote randomly regardless of brain damage.
  • +
  • Borers can now paralyze and infest people by clicking on them. It will paralyze if they're not lying down/paralyzed, and will infest if they are.
  • +
  • Borers can now paralyze people from two tiles away (one tile between them).
  • +
  • Awakening a humanoid's psionics will now also grant them the ability to speak Basic.
  • +
  • The max rank a borer can upgrade a humanoid to has been reduced to Masterclass, down from Grandmasterclass. Lesser forms, such as monkeys, can only be upgraded to operant levels.
  • +
  • Dead players can now properly see when a ghost is whispering to someone.
  • +
  • Borer psionic awakening no longer has a chance to give someone paramount psionics.
  • +
  • Borers upgrading psionics will now skip the Latent rank, which does nothing.
  • +
  • Upgrading faculties will now always update the psionic powers available.
  • +
  • Requests Consoles can now be used to send paper bundle faxes, it'll take a while to arrive, as it needs to print all the paper first.
  • +
  • Receiving faxes or messages will now properly alert the linked PDAs of Request Consoles.
  • +
  • Increased the paper stock Request Consoles start with to 20, up from 10.
  • +
  • Added the ability to turn off exosuits. This counts as physically disconnecting the power cell, it will no longer drain, but it will also no longer charge.
  • +
  • Exosuits with open hatches will no longer cause blindness if the camera system goes down.
  • +
  • Vysokan Chohkas are now recolourable.
  • +
  • Added cochlear implants to the augment menu, they function the same as hearing aids.
  • +
  • Added a retractable lighter to the augment menu, they function like the combitool augment, but for a lighter.
  • +
  • Added synthetic vocal cords to the augment menu. They make you mute if removed, but remove muteness if implanted.
  • +
  • Something putting an item in your hands will no longer give an error message if it couldn't find a hand to do it with.
  • +
+

JohnWildkins updated:

+
    +
  • Shoes that cause slowdown (such as activated magboots) no longer apply their slowdown twice.
  • +
+

NewOriginalSchwann, DasFox updated:

+
    +
  • Adds a consular-restricted Tribunalist priest outfit, beret, and cape in the loadout religion tab.
  • +
  • Adds Dominian House sashes to the loadout accessories tab.
  • +
  • Adds a Dominian consular greatcoat, hat, and uniform to the loadout suits, hats, and uniforms tab respectively.
  • +
+

ThegreyWolf updated:

+
    +
  • The mesmetron pocketwatch can now properly hypnotise other people.
  • +
+

greenjoe12345 updated:

+
    +
  • Ported chem bags from Polaris. work like hydroponics bags, but with medicines! Two in the pharmaacy equipment locker.
  • +
+ +

09 April 2021

+

TheGreyWolf updated:

+
    +
  • Tails will no longer layer over dresses & other clothing when facing south or to the side.
  • +
  • Fixed vampire description telling that victims would be mobile when draining them when they were in fact stunned.
  • +
+ +

08 April 2021

+

Geeves updated:

+
    +
  • Mobs no longer teleport out of lockers after trying to attack people.
  • +
  • Hostile mobs no longer attack out of traps.
  • +
  • Trap now properly layer over mobs they've trapped.
  • +
  • Admins have received a Damage Menu, to access this, check out the Fun tab.
  • +
  • When converting someone as a cultist, they now have an option to ghost. This will spawn a filled soulstone which you can use to create a construct. Jobbanned people also get stoned.
  • +
  • Ghosting as a cult shade or construct will now open a ghost role, which allows any ghost to seamlessly fill your spot with no admin intervention.
  • +
  • Using a forging rune will no longer grant constructs a full HP revive, instead, the HP value will be carried over to the new construct.
  • +
  • You can now attack shades with any sort of item.
  • +
  • Fixed blood overlays on cult shades and constructs.
  • +
+

TheGreyWolf updated:

+
    +
  • Renaming the loadout wallet now works once more along with lanyards.
  • +
  • Investigators once again have a hud icon for the sechud.
  • +
+ +

07 April 2021

+

Geeves updated:

+
    +
  • Added radial floodlights, 360 degree floodlights. Needs to be placed on a knot to work. Mapped two into engineering hard storage.
  • +
  • Refactored shooting targets, they should now work a little more sanely.
  • +
  • You can now construct shooting targets and target stakes out of steel in the Misc construction category.
  • +
  • You can now deconstruct target stakes with a wrench.
  • +
  • You can now drag an IV bag onto someone to hook them up to it, provided its in one of your hands.
  • +
  • IV bag sprites now change to show how full they are, in 25% increments.
  • +
  • Half-full IV bags are now considered small and will fit in things like pockets.
  • +
  • Ninjas now spawn with a token that allows them to select which hardsuit they want. This will spawn a gear crate with the associated gear.
  • +
  • Ninjas no longer spawn with the stealth suit.
  • +
  • Removed the Equipped Hardsuits ninja uplink category.
  • +
  • Ninjas now start with 15 telecrystals instead of 25.
  • +
  • Tweaked VueUI progress bars, they should look nicer now.
  • +
  • Sprinting will now only drain your resources and deal damage if you managed to successfully move. The only exception is the calculation for when you're out of breath, as it will still make you hurt.
  • +
+

JohnWildkins updated:

+
    +
  • Fixes overmap console processing / topic calls, so the consoles properly function now. Also stops an infinite-lifecycle loop while viewing the overmap.
  • +
  • Rags can now be filled at sinks once again.
  • +
  • Ashtrays can now be emptied properly, and ashtray icons now update properly when emptied and filled. Ashtrays made of a brittle material will now also shatter if destroyed.
  • +
+

TheGreyWolf updated:

+
    +
  • Human passports & passcards will no longer say they are corporate security.
  • +
  • Evidence bags can now be labelled by using a pen on them.
  • +
  • Swabbing a vial with blood will now properly give the dna type.
  • +
  • The various evidence reports generated from the forensic equipment are now uniform in their naming.
  • +
  • Labelers are now small sized items rather than normal sized.
  • +
  • Added a labeler to evidence storage and moved the labeler & package wrapper from the investigator desk to the rack in their office.
  • +
  • A water cooler has been added to the security lobby along with a sink and a rag in their break room to clean up those donut crumbs everywhere.
  • +
+

WickedCybs updated:

+
    +
  • Added an alternate Idris beret that has a cyan symbol rather than gold. This should help with colour cordination.
  • +
+

listerla updated:

+
    +
  • All flags, as opposed to banners, are now prefixed as large in name.
  • +
  • Replaced fossil sprites with ones ported from Polaris.
  • +
+ +

06 April 2021

+

Doxxmedearly updated:

+
    +
  • Adjusted how xenoarch artifacts interact with IPCs. They should now be affected in the way that other synthetics do (Such as being subjected to cell drain/charge effects, effects that harm machines, etc.)
  • +
  • Added a few more potential artifact effects.
  • +
+

JohnWildkins updated:

+
    +
  • Lighting SS init no longer adds lighting overlays to tiles that have already generated lighting.
  • +
+

TheGreyWolf updated:

+
    +
  • Cloth masks on taj now properly cover their noses when facing south.
  • +
+ +

05 April 2021

+

JohnWildkins updated:

+
    +
  • AIs should now be able to interface with APCs remotely once more.
  • +
+

Stryker, NewOriginalSchwann, Pretzel updated:

+
    +
  • Adds an asymmetric coat to the suits tab in the loadout.
  • +
  • Adds Gadpathur and Fisanduhian flags with FTs by Schwann.
  • +
  • Adds an Assunzione Warding Sphere and sheath to the religion tab in the loadout. FTs by Schwann.
  • +
  • Adds an Assunzione amulet by Pretzel. FT by Schwann.
  • +
  • Adds puffy and long sleeved blouses to the shirts tab in the loadout.
  • +
+

TheGreyWolf updated:

+
    +
  • Renamed holsters now keep their names when holstering weapons.
  • +
  • You can no longer draw a weapon from a holster when incapacitated, resting, cuffed and so on.
  • +
  • Folders can now hold fibers.
  • +
  • Filing cabinets can now hold fibers & fingerprint cards.
  • +
  • wallets can now contain fibers, fingerprint cards and bandanas.
  • +
  • Toolbelts can now hold the EFTpos.
  • +
  • Laser pointers now show chat messages when pointed at things and have a click delay.
  • +
+

Waff-Ai updated:

+
    +
  • Added new government-issued passcards for humans.
  • +
  • Fixed the Penny plushie not having a sprite.
  • +
+ +

03 April 2021

+

Geeves updated:

+
    +
  • Added a text output to explosions, they will now state if it's near or far, and from which direction it's coming. Sorry it took so long, deaf people.
  • +
  • Distant explosions now take pressure into account. Dropping a drill outside the station will no longer play an explosion sound for people inside.
  • +
  • Added a gustatoral centre augment for IPCs. This will allow them to taste food in their active hand as if they've eaten it. Using it with no food in their hand will let them change how sensitive it is.
  • +
  • Shell IPCs get an additional gustatoral centre augment variation that goes in their tongue, allowing them to taste food without their finger.
  • +
  • Bones no longer spontaneously repair themselves.
  • +
+

MattAtlas updated:

+
    +
  • Contenders and Fellows are now once again known as Loyalists and Revolutionaries. Heads of staff can now once again be loyalists.
  • +
  • Upped the spawn target for loyalists and revs to 4.
  • +
+

NiennaB, HappyFox updated:

+
    +
  • Adds various baseline IPC screens for Trinary Perfection, the megacorporations (NT, Hephaestus, Idris, Zavodskoi, Zeng-Hu, SCC), as well as several human factions (Biesel, Sol, CoC, Elyra, Eridani, and Burzsia).
  • +
+

Stryker, NewOriginalSchwann updated:

+
    +
  • Split up the old Silversun accent into Silversun Original (Humans, Shells) and Silversun Expatriate (Humans, IPCs).
  • +
+

WickedCybs updated:

+
    +
  • HUD sunglasses have been added to the security HUD eyewear loadout section.
  • +
  • The colour patches (face) pattern would clip through helmets, hair and many other things due to an extra pixel. This has been fixed.
  • +
+ +

01 April 2021

+

listerla updated:

+
    +
  • Medical elevator no longer references a cloning wing.
  • +
+ +

31 March 2021

+

Alberyk updated:

+
    +
  • Fixed the ocular installed sightlights not working.
  • +
  • Fixed zooming augment not working properly.
  • +
  • Fixed flashing species with light sensitive eyes causing stun while not using night vision.
  • +
+

Doxxmedearly updated:

+
    +
  • Removed brain traumas. Medication side or overdose effects that granted traumas instead cause similar effects.
  • +
  • Mental medications are mostly there for fluff messages (for now). Some retain their mechanical benefits such as helping with hallucinations.
  • +
  • Orastabin, Neurapan, and Nerospectan now help ease the effects of the stuttering disability (Though not stuttering due to pain and shock). Orastabin is the most effective.
  • +
  • Removed mental medication's withdrawal mechanics. You don't need to pop multiple pills in a shift anymore. This should also fix the nicotine messages.
  • +
+ +

30 March 2021

+

WickedCybs updated:

+
    +
  • Added a new gas mask variant, the face mask. It filters airborne contaminants but does not protect the eyes!
  • +
  • Face masks have been mapped to various locations. Research, medical, engineering and security can expect to see them in their departments. Off-station antags and beacon teams have them available as well.
  • +
+ +

29 March 2021

+

Alberyk updated:

+
    +
  • Added pockets to the securiy jackets in the loadout.
  • +
+

DanseMacabre updated:

+
    +
  • Added passports for non-Tau Ceti Human factions. Find them in the accessories section of the loadout.
  • +
+

Geeves updated:

+
    +
  • The default hotkey mode is now a preference toggle in the Global settings menu in character creation. It is on be default.
  • +
  • Refactored how all living things handles its vision, let me know if any bugs pop up.
  • +
  • Tajara and vaurca no longer lose their nightvision when using cameras, it stays active, they just don't gain the seeing in darkness benefits.
  • +
+

MoondancerPony updated:

+
    +
  • Fixes the 'Classic Hotdog' recipe. Corgis beware!
  • +
  • Fixes the sprite for the nomad skewer.
  • +
+

TheGreyWolf updated:

+
    +
  • Investigators now get a blue laser pointer to annoy eachother with.
  • +
  • Sterilizine now have a unique sprite and has been added to the nanomed plus.
  • +
  • Tajara players can now control their tail speed using the following emotes: *swish, *wag, *sway, *qwag, *fastsway, *swag and *stopsway
  • +
+ +

28 March 2021

+

DanseMacabre updated:

+
    +
  • Removed homestuck reference #2 (Vrisk Serket iced tea) by refluffing it into something more lore-friendly.
  • +
+

Doxxmedearly updated:

+
    +
  • Rebrands some vendor drinks.
  • +
+

Geeves updated:

+
    +
  • Synthetic simplemobs no longer bleed red blood.
  • +
  • Moving around will no longer close storage items, provided you are still adjacent to them.
  • +
  • Picking up a storage item will no longer close it.
  • +
  • Storage items that use numbers now use a better font for those numbers.
  • +
+ +

27 March 2021

+

Doxxmedearly updated:

+
    +
  • Vending machines should throw items less frequently, with semi-random distance and force that is overall lower than before.
  • +
+

Geeves updated:

+
    +
  • The cryogenic feed behind cryocells are now solid, meaning you can't trap yourself in cryo jail anymore.
  • +
+

WickedCybs updated:

+
    +
  • The security HUD aviators now provides flash protection in flash protection mode. The flash protection mode side sprites were also fixed.
  • +
+ +

26 March 2021

+

Alberyk updated:

+
    +
  • The General Flavor Text prompt text is now compliant with the server rules.
  • +
+

DanseMacabre updated:

+
    +
  • Removed homestuck reference #1 (sord)
  • +
+

Wickedcybs updated:

+
    +
  • Secure storages like the secure briefcase can now hold normal sized items and have the same amount of storage space as a standard briefcase.
  • +
+ +

25 March 2021

+

Doxxmedearly updated:

+
    +
  • AI can no longer interact with xenoarchaeology artifacts. Borgs still can if they are adjacent to it.
  • +
+

Geeves updated:

+
    +
  • Simple mobs now bleed. They also bleed out and die.
  • +
  • Attacking a simple mob while unarmed will now use your default attack with a hitsound.
  • +
  • Attacking a simple mob with an item will now properly show the attack animation and hitsound.
  • +
  • Disposals now have wires you can cut and pulse. Cutting one of the wires will disable flushing, pulsing that same one will cause it to flush.
  • +
  • Improved the evidence bag collection messages a little bit.
  • +
  • Removing an IPC's microbattery will no longer kill them, it will just put them in a no-power state until it's reinstalled.
  • +
  • Taking the cell out of a microbattery now works again.
  • +
  • Mapped a holopad into the forensics lab and forensics office.
  • +
  • Closet Teleporters now only go on cooldown if they successfully teleported a mob.
  • +
  • Added business cards to the utility loadout.
  • +
+

JohnWildkins updated:

+
    +
  • Cyborgs may now carry gifts and packages in magnetic grippers.
  • +
  • Service and paperwork grippers are now able to wrap items into gifts and parcels.
  • +
  • Cyborgs are now able to open parcels by hitting with no module selected (large parcels on the ground) or activating the parcel in their gripper (small parcels).
  • +
  • Cyborg grippers will no longer be eaten by package wrap, leaving a borg gripper-less forever.
  • +
+

MattAtlas updated:

+
    +
  • Most non-adminspawn armor in the game has been nerfed across the board. Ablatives are no longer good at everything. Mercenary voidsuits no longer block most forms of damage, same with heavy armor suits. Security's locker armor performs worse against ballistics and lasers.
  • +
  • Slightly buffed laser rifle armor penetration.
  • +
  • Slightly nerfed 762 and 556 damage.
  • +
  • Xrays now do half as much damage with slightly more AP.
  • +
  • Normal pistol bullets (9mm) now have more AP.
  • +
  • The gimmick mercenary voidsuits that can be bought in the loadout now all have the same stats as the normal blood-red voidsuit.
  • +
  • Heavy armor plates now make you slightly slower.
  • +
+

MoondancerPony updated:

+
    +
  • Vue-ifies portable air pumps, APCs, SMES units, and the AI/admin Supermatter Crystal monitor. A lot of them have been spruced up as well!
  • +
  • Adds an optional min/max button to VueUI numeric inputs.
  • +
  • Fixes some missing formatting for VueUI progress bars.
  • +
  • FontAwesome icons in VueUI windows are now fixed-width. Thanks for pointing out the issue, Geeves!
  • +
  • VueUI group-item elements now have their labels top-aligned.
  • +
  • VueUI windows now have a transparent background box to provide more visual contrast. This might cause issues with window sizes; please report them if encountered so the default sizes can be adjusted.
  • +
+ +

24 March 2021

+

Alberyk updated:

+
    +
  • Emergency shutters no longer close if there is a mob on the way.
  • +
+

JohnWildkins, BLUNTFORCE420 updated:

+
    +
  • Security backpack sprite adjusted to make the straps lower-profile.
  • +
+

MoondancerPony updated:

+
    +
  • Replaces all instances of edge = 0/1 with edge = TRUE/FALSE, for code clarity.
  • +
  • Adds a code check for edge = 0/1.
  • +
+

WickedCybs updated:

+
    +
  • The transparent and tactical gas masks now lose the ear hooks when worn by Unathi and Tajara. They'll appear a bit differently now from the sides and the back.
  • +
  • First responder lockers now contain a gas mask each.
  • +
+ +

23 March 2021

+

Alberyk, Kyres1 updated:

+
    +
  • Added new Zeng Hu exclusive augments to the custom loadout.
  • +
+

Doxxmedearly updated:

+
    +
  • Fixed a bug where deleted mobs would sometimes reappear in someone's hands if grabbed, such as holodeck penguins.
  • +
+ +

22 March 2021

+

Geeves updated:

+
    +
  • Equipping clothing when the inventory slots are hidden no longer makes the item float in space.
  • +
  • The progress bar for removing a pin from a gun will now properly display.
  • +
+

WickedCybs updated:

+
    +
  • Added a labcoat to the investigator lockers.
  • +
  • Added a drill to the autopsy lab. You can crack open Vaurca now.
  • +
  • The sec breakroom had its donk pockets exchanged with a corporate care package.
  • +
  • Fully enclosed the morgue by adding an additional wall, sec maint's pipe and wire layout was also tweaked to accomodate this.
  • +
  • The security sublevel will now properly send its trash along the disposals network, it used to shoot out into the training wing.
  • +
+ +

21 March 2021

+

Doxxmedearly updated:

+
    +
  • Ghosts can no longer rename animals.
  • +
  • Combat drones can no longer be renamed.
  • +
+

Geeves updated:

+
    +
  • First Responders can now roll their sleeves up again.
  • +
  • Fixes bloody bare feet not having blood on both possible feet.
  • +
  • Non-shielded areas now get a pulsating green overlay when a radiation storm is active.
  • +
+

MattAtlas updated:

+
    +
  • The MC tab should no longer hardcrash you.
  • +
  • The debug-controller verb now shows all controllers.
  • +
+

Stryker, Remona-Minett, NewOriginalSchwann updated:

+
    +
  • Added a Plutonian accent, sprite courtesy of Remona-Minett, description courtesy of Schwann. (available to normal humans, baselines, and shells.)
  • +
  • Added an Assunzionne accent with descriptions by Schwann (available to offworlders, humans, and all IPCs).
  • +
+ +

20 March 2021

+

Alberyk, Niennab updated:

+
    +
  • Added some clothing loadout options for Zeng-Hu contractors.
  • +
+

Carpe Venenum updated:

+
    +
  • Skrell surgeons no longer spawn with the surgeon cap.
  • +
+

Doxxmedearly updated:

+
    +
  • Fixed an issue where you'd get messages about needing your nicotine fix while smoking.
  • +
+

Geeves updated:

+
    +
  • Vampires now recover from pain damage when they do blood heal.
  • +
  • Vampire blood heal no longer attempts to heal prosthetics, it never could in the first place.
  • +
  • Vampire blood heal now regens blood.
  • +
  • Fixed vampire blood heal not actually using blood.
  • +
  • Since blood heal now uses blood, the amount of blood it uses has been reduced to make it balanced.
  • +
  • Hotkey mode is now the default mode for all mobs.
  • +
  • The game window is now focused by default, not the input bar.
  • +
+

MoondancerPony updated:

+
    +
  • Fixes runtimes with certain mobs trying to speak.
  • +
+

WickedCybs updated:

+
    +
  • The transparent gas mask no longer exposes part of a Tajaras face when seen from the side.
  • +
+

Wowzewow (Wezzy) updated:

+
    +
  • You now have the ability to pack cigarettes. Do as you may.
  • +
+ +

19 March 2021

+

Alberyk updated:

+
    +
  • The tesla glove now has the correct price on the uplink.
  • +
  • Changing ammo types in the lemat is now tied to the unique action button.
  • +
+

Geeves updated:

+
    +
  • Diona now spawn with their survival flashlight more often than not.
  • +
  • The Tachyon-Doppler array will now output research slips with research data based on the size of the explosion it detects. You can feed these into a destructive analyzer for research points.
  • +
  • The doppler array is no longer directional, meaning if it happens on its Z-level, it will detect it.
  • +
  • Held monkeys now wear the fancy uniform if they're wearing the fancy uniform.
  • +
  • Vehicle actions are no longer done via verbs in the top right, or the right click menu. Check the extra examine info for instructions on how to operate vehicles.
  • +
  • You now use wrenches to unlatch vehicles.
  • +
  • Making an IPC at robotics will give its microbattery the cell you used when you made the endoskeleton.
  • +
  • IPCs made at robotics will now have posibrains designations that match their names.
  • +
  • Microbatteries will now have the class of cell installed next to its name, which allows self-diagnostics to show which cell you have as an IPC.
  • +
  • Posibrains can now get any names from the EAL language selection options.
  • +
+

TheGreyWolf updated:

+
    +
  • The generic belt can now hold a single small thing, such as a pen.
  • +
+ +

18 March 2021

+

Doxxmedearly updated:

+
    +
  • Fixed bugged recipes that were 'eating' reagents unless the exact amount was added all at once, such as cheese wheels.
  • +
  • IV drips now respect the transfer amount when TAKING blood, instead of using the max rate. Blood donations should be much safer now.
  • +
  • Removed the undetectable chem_dose that would linger after a reagent was totally metabolized. This prevents weird interactions when being given a dose of a reagent soon after metabolizing a previous dose of the same reagent.
  • +
  • Soporific takes a little longer to kick in and knock someone out.
  • +
  • Some medicines now have a minimum dosage before certain affects will be applied. This minimum is typically 1u or less, and prevents abusing IV drips on 0.01u transfer rate to get the full power of some medications, mainly Dexalin and painkillers.
  • +
  • Saline Plus restores blood at half the rate. It is still the most effect way to restore blood outside of transfusions.
  • +
+

Geeves updated:

+
    +
  • Wearing thick clothing and gas masks now hide your gender again.
  • +
  • Clothing hiding gender is now restricted to thick clothing or clothing that explicitly obscures the face. This means cloth or surgical masks no longer does so.
  • +
  • Gave the CCIA a new SCC agent to spawn as. They need an admin to enable the slot, however.
  • +
  • Added an energy repeater, given to SCC bodyguards.
  • +
  • Added SCC undershirts and shorts.
  • +
  • Added SCC jackets, shorts, flags, banners, floor decals, sleeve patches, armbands.
  • +
  • CCIA ghostspawners have been put into a CCIA tab to declutter the admin tab.
  • +
  • Skrell now have male, female, plural pronouns.
  • +
  • The recipe to make Bun Bun, mixing two buns in a bowl, has been re-added.
  • +
  • Ported Maze Generation from ParadiseStation. Replaced the maze next to research with the randomized maze.
  • +
+

MattAtlas updated:

+
    +
  • IRUs can now pick their coat in the loadout again.
  • +
+

UncleJo updated:

+
    +
  • Removed the muteness disabililty from the loadout.
  • +
+ +

17 March 2021

+

Geeves updated:

+
    +
  • Moving while equipping hardsuits will no longer drop them into the aether.
  • +
  • Putting a hardsuit on an unconscious person will no longer drop it into the aether either, as it will bypass the wait period.
  • +
  • The amount of things your stomach can hold is now based on your stomach volume.
  • +
  • Reduced the amount of nutrition nutriment refills across the board. Greatly reduced the amount fat fills.
  • +
  • Reduced the speed at which nutriment gets metabolised.
  • +
  • Stomach volume now contributes less to overall fullness.
  • +
  • Made it so that you can throw up at a lower stomach volume.
  • +
  • Borers can now examine things while infesting someone.
  • +
  • Grown bioluminescent crops now lose their glow after 5-7 minutes. Splattered glowing crops glow for 3-5 minutes.
  • +
+

MoondancerPony updated:

+
    +
  • CI recipe tests no longer reinstantiate singletons.
  • +
  • Exodus loads properly again.
  • +
  • Fixes a runtime with atmos components.
  • +
+

Stryker, NiennaB updated:

+
    +
  • Added new Dominian Great House standards in the loadout general tab.
  • +
  • Added colorable bandannas to the loadout ear tab.
  • +
  • Reworked hijab colors and added a colorable hijab, courtesy of NiennaB.
  • +
  • Made hijabs fit in the ear slot so you can fit them under hats.
  • +
  • Reworked lipstick colors and added new lipsticks colors, courtesy of NiennaB.
  • +
  • Changed all references of Persipolis to Persepolis.
  • +
+

WickedCybs updated:

+
    +
  • The Zeiglertail hairstyle no longer exposes an eye on the right facing sprite.
  • +
+ +

16 March 2021

+

Alberyk updated:

+
    +
  • Species' night vision can no longer be used with cameras and binoculars.
  • +
  • Fixed the chameleon hat behaving like a softcap.
  • +
  • The wizard chameleon now has a proper icon.
  • +
  • Some species' ages were tweaked to be more lore accurate.
  • +
+

Sue updated:

+
    +
  • Detective and CSI have been merged into one role, Investigator, which shares loadout slots both FT/Detective used to have.
  • +
+ +

15 March 2021

+

Alberyk updated:

+
    +
  • Fixed the rice bowl deleting itself.
  • +
+

Doxxmedearly updated:

+
    +
  • Fixed the false alarm event causing it to seem like some events (including itself) were ending as soon as they began.
  • +
+

Geeves updated:

+
    +
  • Fixes hovering over slots with species restricted clothes spamming the chat with Your species cannot wear this messages.
  • +
  • Wielding guns and picking up species restricted backpacks now work again.
  • +
  • Monkeys are now capable of fine manipulation.
  • +
  • Diona now spawn with a survival flashlight, which is good enough to keep them alive for four minutes. It can be recharged at a recharger.
  • +
  • Diona no longer benefit speedwise from radiation or light, instead they just get a flat speed buff.
  • +
  • Diona can no longer sprint.
  • +
  • Swallowing and digesting mobs now does less damage to them, and digestion completes are five minutes, rather than thirty seconds.
  • +
  • The Unathi tobacco leaves are no longer low quality producing acrid smoke.
  • +
  • You can now carve notches into gun stocks by using any sort of sharp tool on them.
  • +
  • Untagged shells now appear as Human in their employment records.
  • +
  • Tweaks the gear Ceres Lance receives a little bit.
  • +
  • Magboots no longer deploy onto your feet when you simply pick them up.
  • +
+

JohnWildkins updated:

+
    +
  • Archaeological finds should no longer be created with a clearance depth larger than anomaly depth.
  • +
+

TheGreyWolf updated:

+
    +
  • Turning off species nightvision now retains the color blindness disability if they had it.
  • +
+ +

14 March 2021

+

Alberyk updated:

+
    +
  • Fixed tanks and jetpacks having no on back sprites.
  • +
+

Geeves updated:

+
    +
  • Fixes riot helmets not having the correct icon states.
  • +
  • Fixes laser tag vests gently breaking when you try to change their health without an ID on your person.
  • +
  • Fixes gore poking out of monkey groins.
  • +
  • Multiple borers can no longer infect the same host.
  • +
  • Statues are no longer neon pink or purple, again.
  • +
  • Fixed shoes not getting bloody.
  • +
  • Fixed the north facing right foot blood sprite being on the wrong side.
  • +
  • Miner lockers now start with an orange hardhat.
  • +
  • Borers releasing control now properly give the host the message that they're back in control.
  • +
  • Equipping items will now put them into the correct slot position, depending on which HUD your species has.
  • +
+

MattAtlas updated:

+
    +
  • The firearm control program now correctly displays if a gun is disabled or on automatic.
  • +
+ +

12 March 2021

+

Geeves updated:

+
    +
  • Allows characters to set their pronouns in character creation if desired. Only affects examining and gender appearance in visible messages.
  • +
+ +

10 March 2021

+

Alberyk updated:

+
    +
  • The tesla gauntlet now shock its target at melee range when punching.
  • +
+

Flpfs updated:

+
    +
  • Rolls the detective trenchcoat in the loadout into the general trenchcoat selection.
  • +
  • Removes IAA from the list of allowed jobs that can get the flash-proof sunglasses in the loadout.
  • +
  • Moves the Unathi shaman staff from Religion to Xenowear - Unathi.
  • +
+

Geeves updated:

+
    +
  • Tweaked how vending machines act when they throw things at you. Should be a bit more spicy now.
  • +
  • Monkeys have gained uniform, ID, and pocket inventory slots.
  • +
  • You can put Pun Pun's uniform back on if it gets taken off now.
  • +
  • Fixed some gore pixels poking out of Pun Pun's feet.
  • +
  • Morphs now gets an antagonist status assigned to them when they get released, granting them access to ambitions and AOOC.
  • +
  • Removed the cooldown on morphs changing form, making it more viable to change after attacking.
  • +
  • Attacking as a morph will now instantly drop the disguise, instead of you needing to drop it manually.
  • +
  • Morphs now actually attack the bodypart they're aiming at.
  • +
  • You can no longer rename morphs.
  • +
  • Pipeguns no longer spawn with pins, they also no longer have a safety.
  • +
  • Trying to install a pin on a gun that doesn't use pins now gives a warning message.
  • +
  • Fixes Diona DNA sampling.
  • +
  • Exosuits now come with integrated megaspeakers. When activated, they will increase the volume of your speech.
  • +
+

SierraKomodo & Pawnp updated:

+
    +
  • New sprites and lighting overlays for teleporters have been added.
  • +
+

Sparky_hotdog updated:

+
    +
  • Added prescription HUD assemblies to the loadout.
  • +
+ +

09 March 2021

+

kyres1 updated:

+
    +
  • Resprites the CE, EVA, Hazard and TCFL rigs.
  • +
+ +

08 March 2021

+

Alberyk updated:

+
    +
  • Reduced the armor penetration from laser rifles, removed the armor penetration from pistol laser beams..
  • +
+

Scheveningen updated:

+
    +
  • Reduced overall TC amount granted to all antag uplinks to 15. This was so that it still maintains the concept of having to ration between weapons and non-combat uplink equipment, displayed below.
  • +
  • Greatly lowered costs of non-combat uplink equipment. Most weapons that can be acquired through the uplink have had their cost adjusted, rounded down. Relatively speaking, all weapons from the uplink should be very similar impact on the overall TC pool as before.
  • +
+

Waff-AI updated:

+
    +
  • Added the ability to add plushies to your loadout.
  • +
  • Adds greyscaled squid plushies, a bee, a slime, and two schlorrgo plushies.
  • +
+

07 March 2021

+

Arrow768 updated:

+
    +
  • Prevents players from joining if they have unacknowledged notifications.
  • +

Flpfs updated:

  • Changes the shell creation date in the IPC blurb to match the new lore.
  • diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 645bb59193a..4dad9ca6c96 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -18740,6 +18740,8 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. witchbells: - rscadd: Added a plushtoy of Penny. You're welcome. 2021-03-07: + Arrow768: + - bugfix: Prevents players from joining if they have unacknowledged notifications. Flpfs: - tweak: Changes the shell creation date in the IPC blurb to match the new lore. - tweak: Adds an image for shells in the blurb preview. @@ -18762,3 +18764,610 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. TheGreyWolf: - tweak: New characters now start with their preference set to return to lobby if all their job slots are taken. +2021-03-08: + Alberyk: + - tweak: Reduced the armor penetration from laser rifles, removed the armor penetration + from pistol laser beams.. + Scheveningen: + - balance: Reduced overall TC amount granted to all antag uplinks to 15. This was + so that it still maintains the concept of having to ration between weapons and + non-combat uplink equipment, displayed below. + - balance: Greatly lowered costs of non-combat uplink equipment. Most weapons that + can be acquired through the uplink have had their cost adjusted, rounded down. + Relatively speaking, all weapons from the uplink should be very similar impact + on the overall TC pool as before. + Waff-AI: + - rscadd: Added the ability to add plushies to your loadout. + - rscdel: Adds greyscaled squid plushies, a bee, a slime, and two schlorrgo plushies. +2021-03-09: + kyres1: + - tweak: Resprites the CE, EVA, Hazard and TCFL rigs. +2021-03-10: + Alberyk: + - tweak: The tesla gauntlet now shock its target at melee range when punching. + Flpfs: + - tweak: Rolls the detective trenchcoat in the loadout into the general trenchcoat + selection. + - bugfix: 'Removes IAA from the list of allowed jobs that can get the flash-proof + sunglasses in the loadout. ' + - tweak: Moves the Unathi shaman staff from Religion to Xenowear - Unathi. + Geeves: + - tweak: Tweaked how vending machines act when they throw things at you. Should + be a bit more spicy now. + - rscadd: Monkeys have gained uniform, ID, and pocket inventory slots. + - bugfix: You can put Pun Pun's uniform back on if it gets taken off now. + - bugfix: Fixed some gore pixels poking out of Pun Pun's feet. + - rscadd: Morphs now gets an antagonist status assigned to them when they get released, + granting them access to ambitions and AOOC. + - tweak: Removed the cooldown on morphs changing form, making it more viable to + change after attacking. + - tweak: Attacking as a morph will now instantly drop the disguise, instead of you + needing to drop it manually. + - bugfix: Morphs now actually attack the bodypart they're aiming at. + - bugfix: You can no longer rename morphs. + - bugfix: Pipeguns no longer spawn with pins, they also no longer have a safety. + - bugfix: Trying to install a pin on a gun that doesn't use pins now gives + a warning message. + - bugfix: Fixes Diona DNA sampling. + - rscadd: Exosuits now come with integrated megaspeakers. When activated, they will + increase the volume of your speech. + SierraKomodo & Pawnp: + - imageadd: New sprites and lighting overlays for teleporters have been added. + Sparky_hotdog: + - rscadd: Added prescription HUD assemblies to the loadout. +2021-03-12: + Geeves: + - rscadd: Allows characters to set their pronouns in character creation if desired. + Only affects examining and gender appearance in visible messages. +2021-03-14: + Alberyk: + - bugfix: Fixed tanks and jetpacks having no on back sprites. + Geeves: + - bugfix: Fixes riot helmets not having the correct icon states. + - bugfix: Fixes laser tag vests gently breaking when you try to change their health + without an ID on your person. + - bugfix: Fixes gore poking out of monkey groins. + - bugfix: Multiple borers can no longer infect the same host. + - bugfix: Statues are no longer neon pink or purple, again. + - bugfix: Fixed shoes not getting bloody. + - bugfix: Fixed the north facing right foot blood sprite being on the wrong side. + - rscadd: Miner lockers now start with an orange hardhat. + - bugfix: Borers releasing control now properly give the host the message that they're + back in control. + - bugfix: Equipping items will now put them into the correct slot position, depending + on which HUD your species has. + MattAtlas: + - bugfix: The firearm control program now correctly displays if a gun is disabled + or on automatic. +2021-03-15: + Alberyk: + - bugfix: Fixed the rice bowl deleting itself. + Doxxmedearly: + - bugfix: Fixed the false alarm event causing it to seem like some events (including + itself) were ending as soon as they began. + Geeves: + - bugfix: Fixes hovering over slots with species restricted clothes spamming the + chat with Your species cannot wear this messages. + - bugfix: Wielding guns and picking up species restricted backpacks now work again. + - tweak: Monkeys are now capable of fine manipulation. + - rscadd: Diona now spawn with a survival flashlight, which is good enough to keep + them alive for four minutes. It can be recharged at a recharger. + - tweak: Diona no longer benefit speedwise from radiation or light, instead they + just get a flat speed buff. + - rscdel: Diona can no longer sprint. + - tweak: Swallowing and digesting mobs now does less damage to them, and digestion + completes are five minutes, rather than thirty seconds. + - tweak: The Unathi tobacco leaves are no longer low quality producing acrid smoke. + - rscadd: You can now carve notches into gun stocks by using any sort of sharp tool + on them. + - tweak: Untagged shells now appear as Human in their employment records. + - tweak: Tweaks the gear Ceres Lance receives a little bit. + - bugfix: Magboots no longer deploy onto your feet when you simply pick them up. + JohnWildkins: + - bugfix: Archaeological finds should no longer be created with a clearance depth + larger than anomaly depth. + TheGreyWolf: + - bugfix: Turning off species nightvision now retains the color blindness disability + if they had it. +2021-03-16: + Alberyk: + - tweak: Species' night vision can no longer be used with cameras and binoculars. + - bugfix: Fixed the chameleon hat behaving like a softcap. + - bugfix: The wizard chameleon now has a proper icon. + - tweak: Some species' ages were tweaked to be more lore accurate. + Sue: + - rscadd: Detective and CSI have been merged into one role, Investigator, which + shares loadout slots both FT/Detective used to have. +2021-03-17: + Geeves: + - bugfix: Moving while equipping hardsuits will no longer drop them into the aether. + - bugfix: Putting a hardsuit on an unconscious person will no longer drop it into + the aether either, as it will bypass the wait period. + - bugfix: The amount of things your stomach can hold is now based on your stomach + volume. + - tweak: Reduced the amount of nutrition nutriment refills across the board. Greatly + reduced the amount fat fills. + - tweak: Reduced the speed at which nutriment gets metabolised. + - tweak: Stomach volume now contributes less to overall fullness. + - tweak: Made it so that you can throw up at a lower stomach volume. + - rscadd: Borers can now examine things while infesting someone. + - tweak: Grown bioluminescent crops now lose their glow after 5-7 minutes. Splattered + glowing crops glow for 3-5 minutes. + MoondancerPony: + - backend: CI recipe tests no longer reinstantiate singletons. + - maptweak: Exodus loads properly again. + - bugfix: Fixes a runtime with atmos components. + Stryker, NiennaB: + - rscadd: Added new Dominian Great House standards in the loadout general tab. + - rscadd: Added colorable bandannas to the loadout ear tab. + - rscadd: Reworked hijab colors and added a colorable hijab, courtesy of NiennaB. + - tweak: Made hijabs fit in the ear slot so you can fit them under hats. + - rscadd: Reworked lipstick colors and added new lipsticks colors, courtesy of NiennaB. + - tweak: Changed all references of Persipolis to Persepolis. + WickedCybs: + - bugfix: The Zeiglertail hairstyle no longer exposes an eye on the right facing + sprite. +2021-03-18: + Doxxmedearly: + - bugfix: Fixed bugged recipes that were 'eating' reagents unless the + exact amount was added all at once, such as cheese wheels. + - bugfix: IV drips now respect the transfer amount when TAKING blood, instead of + using the max rate. Blood donations should be much safer now. + - tweak: Removed the undetectable chem_dose that would linger after a reagent was + totally metabolized. This prevents weird interactions when being given a dose + of a reagent soon after metabolizing a previous dose of the same reagent. + - tweak: Soporific takes a little longer to kick in and knock someone out. + - tweak: Some medicines now have a minimum dosage before certain affects will be + applied. This minimum is typically 1u or less, and prevents abusing IV drips + on 0.01u transfer rate to get the full power of some medications, mainly Dexalin + and painkillers. + - tweak: Saline Plus restores blood at half the rate. It is still the most effect + way to restore blood outside of transfusions. + Geeves: + - bugfix: Wearing thick clothing and gas masks now hide your gender again. + - tweak: Clothing hiding gender is now restricted to thick clothing or clothing + that explicitly obscures the face. This means cloth or surgical masks no longer + does so. + - rscadd: Gave the CCIA a new SCC agent to spawn as. They need an admin to enable + the slot, however. + - rscadd: Added an energy repeater, given to SCC bodyguards. + - rscadd: Added SCC undershirts and shorts. + - rscadd: Added SCC jackets, shorts, flags, banners, floor decals, sleeve patches, + armbands. + - tweak: CCIA ghostspawners have been put into a CCIA tab to declutter the admin + tab. + - rscadd: Skrell now have male, female, plural pronouns. + - rscadd: The recipe to make Bun Bun, mixing two buns in a bowl, has been re-added. + - rscadd: Ported Maze Generation from ParadiseStation. Replaced the maze next to + research with the randomized maze. + MattAtlas: + - bugfix: IRUs can now pick their coat in the loadout again. + UncleJo: + - rscdel: Removed the muteness disabililty from the loadout. +2021-03-19: + Alberyk: + - bugfix: The tesla glove now has the correct price on the uplink. + - tweak: Changing ammo types in the lemat is now tied to the unique action button. + Geeves: + - bugfix: Diona now spawn with their survival flashlight more often than not. + - rscadd: The Tachyon-Doppler array will now output research slips with research + data based on the size of the explosion it detects. You can feed these into + a destructive analyzer for research points. + - tweak: The doppler array is no longer directional, meaning if it happens on its + Z-level, it will detect it. + - rscadd: Held monkeys now wear the fancy uniform if they're wearing the fancy + uniform. + - tweak: Vehicle actions are no longer done via verbs in the top right, or the right + click menu. Check the extra examine info for instructions on how to operate + vehicles. + - tweak: You now use wrenches to unlatch vehicles. + - tweak: Making an IPC at robotics will give its microbattery the cell you used + when you made the endoskeleton. + - bugfix: IPCs made at robotics will now have posibrains designations that match + their names. + - rscadd: Microbatteries will now have the class of cell installed next to its name, + which allows self-diagnostics to show which cell you have as an IPC. + - tweak: Posibrains can now get any names from the EAL language selection options. + TheGreyWolf: + - tweak: The generic belt can now hold a single small thing, such as a pen. +2021-03-20: + Alberyk, Niennab: + - rscadd: Added some clothing loadout options for Zeng-Hu contractors. + Carpe Venenum: + - tweak: Skrell surgeons no longer spawn with the surgeon cap. + Doxxmedearly: + - bugfix: Fixed an issue where you'd get messages about needing your nicotine + fix while smoking. + Geeves: + - tweak: Vampires now recover from pain damage when they do blood heal. + - bugfix: Vampire blood heal no longer attempts to heal prosthetics, it never could + in the first place. + - rscadd: Vampire blood heal now regens blood. + - bugfix: Fixed vampire blood heal not actually using blood. + - tweak: Since blood heal now uses blood, the amount of blood it uses has been reduced + to make it balanced. + - tweak: Hotkey mode is now the default mode for all mobs. + - tweak: The game window is now focused by default, not the input bar. + MoondancerPony: + - bugfix: Fixes runtimes with certain mobs trying to speak. + WickedCybs: + - bugfix: The transparent gas mask no longer exposes part of a Tajaras face when + seen from the side. + Wowzewow (Wezzy): + - rscadd: You now have the ability to pack cigarettes. Do as you may. +2021-03-21: + Doxxmedearly: + - bugfix: Ghosts can no longer rename animals. + - bugfix: Combat drones can no longer be renamed. + Geeves: + - bugfix: First Responders can now roll their sleeves up again. + - bugfix: Fixes bloody bare feet not having blood on both possible feet. + - rscadd: Non-shielded areas now get a pulsating green overlay when a radiation + storm is active. + MattAtlas: + - bugfix: The MC tab should no longer hardcrash you. + - rscadd: The debug-controller verb now shows all controllers. + Stryker, Remona-Minett, NewOriginalSchwann: + - rscadd: Added a Plutonian accent, sprite courtesy of Remona-Minett, description + courtesy of Schwann. (available to normal humans, baselines, and shells.) + - rscadd: Added an Assunzionne accent with descriptions by Schwann (available to + offworlders, humans, and all IPCs). +2021-03-22: + Geeves: + - bugfix: Equipping clothing when the inventory slots are hidden no longer makes + the item float in space. + - bugfix: The progress bar for removing a pin from a gun will now properly display. + WickedCybs: + - rscadd: Added a labcoat to the investigator lockers. + - rscadd: Added a drill to the autopsy lab. You can crack open Vaurca now. + - maptweak: The sec breakroom had its donk pockets exchanged with a corporate care + package. + - maptweak: Fully enclosed the morgue by adding an additional wall, sec maint's + pipe and wire layout was also tweaked to accomodate this. + - bugfix: The security sublevel will now properly send its trash along the disposals + network, it used to shoot out into the training wing. +2021-03-23: + Alberyk, Kyres1: + - rscadd: Added new Zeng Hu exclusive augments to the custom loadout. + Doxxmedearly: + - bugfix: Fixed a bug where deleted mobs would sometimes reappear in someone's + hands if grabbed, such as holodeck penguins. +2021-03-24: + Alberyk: + - tweak: Emergency shutters no longer close if there is a mob on the way. + JohnWildkins, BLUNTFORCE420: + - imageadd: Security backpack sprite adjusted to make the straps lower-profile. + MoondancerPony: + - backend: Replaces all instances of edge = 0/1 with edge = TRUE/FALSE, for code + clarity. + - backend: Adds a code check for edge = 0/1. + WickedCybs: + - rscadd: The transparent and tactical gas masks now lose the ear hooks when worn + by Unathi and Tajara. They'll appear a bit differently now from the sides + and the back. + - rscadd: First responder lockers now contain a gas mask each. +2021-03-25: + Doxxmedearly: + - tweak: AI can no longer interact with xenoarchaeology artifacts. Borgs still can + if they are adjacent to it. + Geeves: + - rscadd: Simple mobs now bleed. They also bleed out and die. + - rscadd: Attacking a simple mob while unarmed will now use your default attack + with a hitsound. + - rscadd: Attacking a simple mob with an item will now properly show the attack + animation and hitsound. + - rscadd: Disposals now have wires you can cut and pulse. Cutting one of the wires + will disable flushing, pulsing that same one will cause it to flush. + - tweak: Improved the evidence bag collection messages a little bit. + - tweak: Removing an IPC's microbattery will no longer kill them, it will just + put them in a no-power state until it's reinstalled. + - bugfix: Taking the cell out of a microbattery now works again. + - rscadd: Mapped a holopad into the forensics lab and forensics office. + - tweak: Closet Teleporters now only go on cooldown if they successfully teleported + a mob. + - rscadd: Added business cards to the utility loadout. + JohnWildkins: + - rscadd: Cyborgs may now carry gifts and packages in magnetic grippers. + - rscadd: Service and paperwork grippers are now able to wrap items into gifts and + parcels. + - bugfix: Cyborgs are now able to open parcels by hitting with no module selected + (large parcels on the ground) or activating the parcel in their gripper (small + parcels). + - bugfix: Cyborg grippers will no longer be eaten by package wrap, leaving a borg + gripper-less forever. + MattAtlas: + - balance: Most non-adminspawn armor in the game has been nerfed across the board. + Ablatives are no longer good at everything. Mercenary voidsuits no longer block + most forms of damage, same with heavy armor suits. Security's locker armor + performs worse against ballistics and lasers. + - balance: Slightly buffed laser rifle armor penetration. + - balance: Slightly nerfed 762 and 556 damage. + - balance: Xrays now do half as much damage with slightly more AP. + - balance: Normal pistol bullets (9mm) now have more AP. + - balance: The gimmick mercenary voidsuits that can be bought in the loadout now + all have the same stats as the normal blood-red voidsuit. + - balance: Heavy armor plates now make you slightly slower. + MoondancerPony: + - refactor: Vue-ifies portable air pumps, APCs, SMES units, and the AI/admin Supermatter + Crystal monitor. A lot of them have been spruced up as well! + - backend: Adds an optional min/max button to VueUI numeric inputs. + - tweak: Fixes some missing formatting for VueUI progress bars. + - tweak: FontAwesome icons in VueUI windows are now fixed-width. Thanks for pointing + out the issue, Geeves! + - tweak: VueUI group-item elements now have their labels top-aligned. + - tweak: VueUI windows now have a transparent background box to provide more visual + contrast. This might cause issues with window sizes; please report them if encountered + so the default sizes can be adjusted. +2021-03-26: + Alberyk: + - tweak: The General Flavor Text prompt text is now compliant with the server rules. + DanseMacabre: + - rscdel: 'Removed homestuck reference #1 (sord)' + Wickedcybs: + - tweak: Secure storages like the secure briefcase can now hold normal sized items + and have the same amount of storage space as a standard briefcase. +2021-03-27: + Doxxmedearly: + - tweak: Vending machines should throw items less frequently, with semi-random distance + and force that is overall lower than before. + Geeves: + - tweak: The cryogenic feed behind cryocells are now solid, meaning you can't + trap yourself in cryo jail anymore. + WickedCybs: + - bugfix: The security HUD aviators now provides flash protection in flash protection + mode. The flash protection mode side sprites were also fixed. +2021-03-28: + DanseMacabre: + - tweak: 'Removed homestuck reference #2 (Vrisk Serket iced tea) by refluffing it + into something more lore-friendly.' + Doxxmedearly: + - tweak: Rebrands some vendor drinks. + Geeves: + - bugfix: Synthetic simplemobs no longer bleed red blood. + - tweak: Moving around will no longer close storage items, provided you are still + adjacent to them. + - tweak: Picking up a storage item will no longer close it. + - tweak: Storage items that use numbers now use a better font for those numbers. +2021-03-29: + Alberyk: + - rscadd: Added pockets to the securiy jackets in the loadout. + DanseMacabre: + - rscadd: Added passports for non-Tau Ceti Human factions. Find them in the accessories + section of the loadout. + Geeves: + - rscadd: The default hotkey mode is now a preference toggle in the Global settings + menu in character creation. It is on be default. + - refactor: Refactored how all living things handles its vision, let me know if + any bugs pop up. + - tweak: Tajara and vaurca no longer lose their nightvision when using cameras, + it stays active, they just don't gain the seeing in darkness benefits. + MoondancerPony: + - bugfix: Fixes the 'Classic Hotdog' recipe. Corgis beware! + - bugfix: Fixes the sprite for the nomad skewer. + TheGreyWolf: + - rscadd: Investigators now get a blue laser pointer to annoy eachother with. + - rscadd: Sterilizine now have a unique sprite and has been added to the nanomed + plus. + - rscadd: 'Tajara players can now control their tail speed using the following emotes: + *swish, *wag, *sway, *qwag, *fastsway, *swag and *stopsway' +2021-03-30: + WickedCybs: + - rscadd: Added a new gas mask variant, the face mask. It filters airborne contaminants + but does not protect the eyes! + - maptweak: Face masks have been mapped to various locations. Research, medical, + engineering and security can expect to see them in their departments. Off-station + antags and beacon teams have them available as well. +2021-03-31: + Alberyk: + - bugfix: Fixed the ocular installed sightlights not working. + - bugfix: Fixed zooming augment not working properly. + - bugfix: Fixed flashing species with light sensitive eyes causing stun while not + using night vision. + Doxxmedearly: + - rscdel: Removed brain traumas. Medication side or overdose effects that granted + traumas instead cause similar effects. + - tweak: Mental medications are mostly there for fluff messages (for now). Some + retain their mechanical benefits such as helping with hallucinations. + - rscadd: Orastabin, Neurapan, and Nerospectan now help ease the effects of the + stuttering disability (Though not stuttering due to pain and shock). Orastabin + is the most effective. + - rscdel: Removed mental medication's withdrawal mechanics. You don't + need to pop multiple pills in a shift anymore. This should also fix the nicotine + messages. +2021-04-01: + listerla: + - bugfix: Medical elevator no longer references a cloning wing. +2021-04-03: + Geeves: + - rscadd: Added a text output to explosions, they will now state if it's near + or far, and from which direction it's coming. Sorry it took so long, deaf + people. + - tweak: Distant explosions now take pressure into account. Dropping a drill outside + the station will no longer play an explosion sound for people inside. + - rscadd: Added a gustatoral centre augment for IPCs. This will allow them to taste + food in their active hand as if they've eaten it. Using it with no food + in their hand will let them change how sensitive it is. + - rscadd: Shell IPCs get an additional gustatoral centre augment variation that + goes in their tongue, allowing them to taste food without their finger. + - bugfix: Bones no longer spontaneously repair themselves. + MattAtlas: + - tweak: Contenders and Fellows are now once again known as Loyalists and Revolutionaries. + Heads of staff can now once again be loyalists. + - tweak: Upped the spawn target for loyalists and revs to 4. + NiennaB, HappyFox: + - rscadd: Adds various baseline IPC screens for Trinary Perfection, the megacorporations + (NT, Hephaestus, Idris, Zavodskoi, Zeng-Hu, SCC), as well as several human factions + (Biesel, Sol, CoC, Elyra, Eridani, and Burzsia). + Stryker, NewOriginalSchwann: + - tweak: Split up the old Silversun accent into Silversun Original (Humans, Shells) + and Silversun Expatriate (Humans, IPCs). + WickedCybs: + - rscadd: HUD sunglasses have been added to the security HUD eyewear loadout section. + - bugfix: The colour patches (face) pattern would clip through helmets, hair and + many other things due to an extra pixel. This has been fixed. +2021-04-05: + JohnWildkins: + - bugfix: AIs should now be able to interface with APCs remotely once more. + Stryker, NewOriginalSchwann, Pretzel: + - rscadd: Adds an asymmetric coat to the suits tab in the loadout. + - rscadd: Adds Gadpathur and Fisanduhian flags with FTs by Schwann. + - rscadd: Adds an Assunzione Warding Sphere and sheath to the religion tab in the + loadout. FTs by Schwann. + - rscadd: Adds an Assunzione amulet by Pretzel. FT by Schwann. + - rscadd: Adds puffy and long sleeved blouses to the shirts tab in the loadout. + TheGreyWolf: + - bugfix: Renamed holsters now keep their names when holstering weapons. + - bugfix: You can no longer draw a weapon from a holster when incapacitated, resting, + cuffed and so on. + - rscadd: Folders can now hold fibers. + - rscadd: Filing cabinets can now hold fibers & fingerprint cards. + - rscadd: wallets can now contain fibers, fingerprint cards and bandanas. + - rscadd: Toolbelts can now hold the EFTpos. + - bugfix: Laser pointers now show chat messages when pointed at things and have + a click delay. + Waff-Ai: + - rscadd: Added new government-issued passcards for humans. + - bugfix: Fixed the Penny plushie not having a sprite. +2021-04-06: + Doxxmedearly: + - bugfix: Adjusted how xenoarch artifacts interact with IPCs. They should now be + affected in the way that other synthetics do (Such as being subjected to cell + drain/charge effects, effects that harm machines, etc.) + - rscadd: Added a few more potential artifact effects. + JohnWildkins: + - bugfix: Lighting SS init no longer adds lighting overlays to tiles that have already + generated lighting. + TheGreyWolf: + - tweak: Cloth masks on taj now properly cover their noses when facing south. +2021-04-07: + Geeves: + - rscadd: Added radial floodlights, 360 degree floodlights. Needs to be placed on + a knot to work. Mapped two into engineering hard storage. + - refactor: Refactored shooting targets, they should now work a little more sanely. + - rscadd: You can now construct shooting targets and target stakes out of steel + in the Misc construction category. + - rscadd: You can now deconstruct target stakes with a wrench. + - rscadd: You can now drag an IV bag onto someone to hook them up to it, provided + its in one of your hands. + - rscadd: IV bag sprites now change to show how full they are, in 25% increments. + - rscadd: Half-full IV bags are now considered small and will fit in things like + pockets. + - rscadd: Ninjas now spawn with a token that allows them to select which hardsuit + they want. This will spawn a gear crate with the associated gear. + - rscdel: Ninjas no longer spawn with the stealth suit. + - rscdel: Removed the Equipped Hardsuits ninja uplink category. + - tweak: Ninjas now start with 15 telecrystals instead of 25. + - tweak: Tweaked VueUI progress bars, they should look nicer now. + - tweak: Sprinting will now only drain your resources and deal damage if you managed + to successfully move. The only exception is the calculation for when you're + out of breath, as it will still make you hurt. + JohnWildkins: + - bugfix: Fixes overmap console processing / topic calls, so the consoles properly + function now. Also stops an infinite-lifecycle loop while viewing the overmap. + - bugfix: Rags can now be filled at sinks once again. + - bugfix: Ashtrays can now be emptied properly, and ashtray icons now update properly + when emptied and filled. Ashtrays made of a brittle material will now also shatter + if destroyed. + TheGreyWolf: + - bugfix: Human passports & passcards will no longer say they are corporate + security. + - rscadd: Evidence bags can now be labelled by using a pen on them. + - bugfix: Swabbing a vial with blood will now properly give the dna type. + - tweak: The various evidence reports generated from the forensic equipment are + now uniform in their naming. + - tweak: Labelers are now small sized items rather than normal sized. + - maptweak: Added a labeler to evidence storage and moved the labeler & package + wrapper from the investigator desk to the rack in their office. + - maptweak: A water cooler has been added to the security lobby along with a sink + and a rag in their break room to clean up those donut crumbs everywhere. + WickedCybs: + - rscadd: Added an alternate Idris beret that has a cyan symbol rather than gold. + This should help with colour cordination. + listerla: + - tweak: All flags, as opposed to banners, are now prefixed as large in name. + - imageadd: Replaced fossil sprites with ones ported from Polaris. +2021-04-08: + Geeves: + - bugfix: Mobs no longer teleport out of lockers after trying to attack people. + - bugfix: Hostile mobs no longer attack out of traps. + - bugfix: Trap now properly layer over mobs they've trapped. + - admin: Admins have received a Damage Menu, to access this, check out the Fun tab. + - rscadd: When converting someone as a cultist, they now have an option to ghost. + This will spawn a filled soulstone which you can use to create a construct. + Jobbanned people also get stoned. + - rscadd: Ghosting as a cult shade or construct will now open a ghost role, which + allows any ghost to seamlessly fill your spot with no admin intervention. + - tweak: Using a forging rune will no longer grant constructs a full HP revive, + instead, the HP value will be carried over to the new construct. + - bugfix: You can now attack shades with any sort of item. + - bugfix: Fixed blood overlays on cult shades and constructs. + TheGreyWolf: + - bugfix: Renaming the loadout wallet now works once more along with lanyards. + - bugfix: Investigators once again have a hud icon for the sechud. +2021-04-09: + TheGreyWolf: + - bugfix: Tails will no longer layer over dresses & other clothing when facing + south or to the side. + - bugfix: Fixed vampire description telling that victims would be mobile when draining + them when they were in fact stunned. +2021-04-10: + Geeves: + - refactor: Tweaks how autolathes generate their recipe lists, ideally there'd + be no player-facing change. + - bugfix: You can now change autolathe categories while it's busy building + things. + - rscadd: Cortical borers now get a UI element that shows how many chemicals they + have to use. They also gain their host's health doll when they infest them. + - rscadd: Hosts that get taken over by cortical borers now get a big resist button + UI element, which they can use to resist the borer's control. + - tweak: Resisting against borer control now takes fourty seconds to a minute, up + from twenty seconds to twenty-five seconds. + - rscadd: Various cortical borer action now have a progress bar. Resisting borer + control now also has a progress bar. + - tweak: Hosts being controlled by borers now emote randomly regardless of brain + damage. + - rscadd: Borers can now paralyze and infest people by clicking on them. It will + paralyze if they're not lying down/paralyzed, and will infest if they are. + - tweak: Borers can now paralyze people from two tiles away (one tile between them). + - rscadd: Awakening a humanoid's psionics will now also grant them the ability + to speak Basic. + - tweak: The max rank a borer can upgrade a humanoid to has been reduced to Masterclass, + down from Grandmasterclass. Lesser forms, such as monkeys, can only be upgraded + to operant levels. + - bugfix: Dead players can now properly see when a ghost is whispering to someone. + - tweak: Borer psionic awakening no longer has a chance to give someone paramount + psionics. + - tweak: Borers upgrading psionics will now skip the Latent rank, which does nothing. + - bugfix: Upgrading faculties will now always update the psionic powers available. + - rscadd: Requests Consoles can now be used to send paper bundle faxes, it'll + take a while to arrive, as it needs to print all the paper first. + - bugfix: Receiving faxes or messages will now properly alert the linked PDAs of + Request Consoles. + - tweak: Increased the paper stock Request Consoles start with to 20, up from 10. + - rscadd: Added the ability to turn off exosuits. This counts as physically disconnecting + the power cell, it will no longer drain, but it will also no longer charge. + - tweak: Exosuits with open hatches will no longer cause blindness if the camera + system goes down. + - rscadd: Vysokan Chohkas are now recolourable. + - rscadd: Added cochlear implants to the augment menu, they function the same as + hearing aids. + - rscadd: Added a retractable lighter to the augment menu, they function like the + combitool augment, but for a lighter. + - rscadd: Added synthetic vocal cords to the augment menu. They make you mute if + removed, but remove muteness if implanted. + - bugfix: Something putting an item in your hands will no longer give an error message + if it couldn't find a hand to do it with. + JohnWildkins: + - bugfix: Shoes that cause slowdown (such as activated magboots) no longer apply + their slowdown twice. + NewOriginalSchwann, DasFox: + - rscadd: Adds a consular-restricted Tribunalist priest outfit, beret, and cape + in the loadout religion tab. + - rscadd: Adds Dominian House sashes to the loadout accessories tab. + - rscadd: Adds a Dominian consular greatcoat, hat, and uniform to the loadout suits, + hats, and uniforms tab respectively. + ThegreyWolf: + - bugfix: The mesmetron pocketwatch can now properly hypnotise other people. + greenjoe12345: + - rscadd: Ported chem bags from Polaris. work like hydroponics bags, but with medicines! + Two in the pharmaacy equipment locker. diff --git a/icons/accent_tags.dmi b/icons/accent_tags.dmi index ab5dfe42c32..a741db279f4 100644 Binary files a/icons/accent_tags.dmi and b/icons/accent_tags.dmi differ diff --git a/icons/clothing/accessories/assunzione_amulet.dmi b/icons/clothing/accessories/assunzione_amulet.dmi new file mode 100644 index 00000000000..1925e31b0ce Binary files /dev/null and b/icons/clothing/accessories/assunzione_amulet.dmi differ diff --git a/icons/clothing/accessories/dominia_sash.dmi b/icons/clothing/accessories/dominia_sash.dmi new file mode 100644 index 00000000000..b97559942e2 Binary files /dev/null and b/icons/clothing/accessories/dominia_sash.dmi differ diff --git a/icons/clothing/accessories/passcards.dmi b/icons/clothing/accessories/passcards.dmi new file mode 100644 index 00000000000..d088a6ca38b Binary files /dev/null and b/icons/clothing/accessories/passcards.dmi differ diff --git a/icons/clothing/head/dominia_beret_consular.dmi b/icons/clothing/head/dominia_beret_consular.dmi new file mode 100644 index 00000000000..bd416805e5e Binary files /dev/null and b/icons/clothing/head/dominia_beret_consular.dmi differ diff --git a/icons/clothing/head/dominia_consular_cap.dmi b/icons/clothing/head/dominia_consular_cap.dmi new file mode 100644 index 00000000000..12ec274f908 Binary files /dev/null and b/icons/clothing/head/dominia_consular_cap.dmi differ diff --git a/icons/clothing/kit/modular_armor.dmi b/icons/clothing/kit/modular_armor.dmi index d456dbcd8d5..ec637c9c81e 100644 Binary files a/icons/clothing/kit/modular_armor.dmi and b/icons/clothing/kit/modular_armor.dmi differ diff --git a/icons/clothing/suits/capes/dominia_consular_cape.dmi b/icons/clothing/suits/capes/dominia_consular_cape.dmi new file mode 100644 index 00000000000..83477edea11 Binary files /dev/null and b/icons/clothing/suits/capes/dominia_consular_cape.dmi differ diff --git a/icons/clothing/suits/coats/dominia_consular_coat.dmi b/icons/clothing/suits/coats/dominia_consular_coat.dmi new file mode 100644 index 00000000000..69b11967cdc Binary files /dev/null and b/icons/clothing/suits/coats/dominia_consular_coat.dmi differ diff --git a/icons/clothing/suits/coats/vysoka_chokha_female.dmi b/icons/clothing/suits/coats/vysoka_chokha_female.dmi index c63979a83f5..5af26c76b89 100644 Binary files a/icons/clothing/suits/coats/vysoka_chokha_female.dmi and b/icons/clothing/suits/coats/vysoka_chokha_female.dmi differ diff --git a/icons/clothing/suits/coats/vysoka_chokha_male.dmi b/icons/clothing/suits/coats/vysoka_chokha_male.dmi index aeb24e42954..5a6c0f6a19c 100644 Binary files a/icons/clothing/suits/coats/vysoka_chokha_male.dmi and b/icons/clothing/suits/coats/vysoka_chokha_male.dmi differ diff --git a/icons/clothing/suits/scc_jacket.dmi b/icons/clothing/suits/scc_jacket.dmi new file mode 100644 index 00000000000..02927e3670f Binary files /dev/null and b/icons/clothing/suits/scc_jacket.dmi differ diff --git a/icons/clothing/under/uniforms/dominia_consular.dmi b/icons/clothing/under/uniforms/dominia_consular.dmi new file mode 100644 index 00000000000..2feb6481325 Binary files /dev/null and b/icons/clothing/under/uniforms/dominia_consular.dmi differ diff --git a/icons/clothing/under/uniforms/dominia_consular_priest.dmi b/icons/clothing/under/uniforms/dominia_consular_priest.dmi new file mode 100644 index 00000000000..cda40b29c77 Binary files /dev/null and b/icons/clothing/under/uniforms/dominia_consular_priest.dmi differ diff --git a/icons/clothing/under/uniforms/scc.dmi b/icons/clothing/under/uniforms/scc.dmi new file mode 100644 index 00000000000..e7cf893b521 Binary files /dev/null and b/icons/clothing/under/uniforms/scc.dmi differ diff --git a/icons/effects/projectiles/impact.dmi b/icons/effects/projectiles/impact.dmi index fcb0d3d19da..288d2722d5d 100644 Binary files a/icons/effects/projectiles/impact.dmi and b/icons/effects/projectiles/impact.dmi differ diff --git a/icons/effects/projectiles/muzzle.dmi b/icons/effects/projectiles/muzzle.dmi index 66717e04094..c18a7b4daf7 100644 Binary files a/icons/effects/projectiles/muzzle.dmi and b/icons/effects/projectiles/muzzle.dmi differ diff --git a/icons/effects/projectiles/tracer.dmi b/icons/effects/projectiles/tracer.dmi index 17a7a99b8c0..53ab325ad06 100644 Binary files a/icons/effects/projectiles/tracer.dmi and b/icons/effects/projectiles/tracer.dmi differ diff --git a/icons/hud/hud_security.dmi b/icons/hud/hud_security.dmi index bb3ce3e2b2f..31b4410b183 100644 Binary files a/icons/hud/hud_security.dmi and b/icons/hud/hud_security.dmi differ diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi index 8c215b72447..9577fc5a1a6 100644 Binary files a/icons/mob/back.dmi and b/icons/mob/back.dmi differ diff --git a/icons/mob/custom_synthetic.dmi b/icons/mob/custom_synthetic.dmi index 4a72771ef70..ecdb5c71150 100644 Binary files a/icons/mob/custom_synthetic.dmi and b/icons/mob/custom_synthetic.dmi differ diff --git a/icons/mob/eyes.dmi b/icons/mob/eyes.dmi index 7db30549e38..fb5696b8361 100644 Binary files a/icons/mob/eyes.dmi and b/icons/mob/eyes.dmi differ diff --git a/icons/mob/feet.dmi b/icons/mob/feet.dmi index cac7cda096d..cf18f976dd1 100644 Binary files a/icons/mob/feet.dmi and b/icons/mob/feet.dmi differ diff --git a/icons/mob/hands.dmi b/icons/mob/hands.dmi index 7520508f892..2bd9d2a0e3d 100644 Binary files a/icons/mob/hands.dmi and b/icons/mob/hands.dmi differ diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index 289680d6a8d..f46b0a64b3d 100644 Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ diff --git a/icons/mob/human_face/hair.dmi b/icons/mob/human_face/hair.dmi index 32c0c84a344..7bbc8ba5bf8 100644 Binary files a/icons/mob/human_face/hair.dmi and b/icons/mob/human_face/hair.dmi differ diff --git a/icons/mob/human_face/ipc_screens.dmi b/icons/mob/human_face/ipc_screens.dmi index 2f4cd4dc375..f35791a87a2 100644 Binary files a/icons/mob/human_face/ipc_screens.dmi and b/icons/mob/human_face/ipc_screens.dmi differ diff --git a/icons/mob/human_face/lips.dmi b/icons/mob/human_face/lips.dmi index 75c4b287950..5dbdc4526a6 100644 Binary files a/icons/mob/human_face/lips.dmi and b/icons/mob/human_face/lips.dmi differ diff --git a/icons/mob/human_races/augments_external.dmi b/icons/mob/human_races/augments_external.dmi index 74c345f5a7b..4f9fb0fea51 100644 Binary files a/icons/mob/human_races/augments_external.dmi and b/icons/mob/human_races/augments_external.dmi differ diff --git a/icons/mob/human_races/markings.dmi b/icons/mob/human_races/markings.dmi index 2f814767db4..e552743a104 100644 Binary files a/icons/mob/human_races/markings.dmi and b/icons/mob/human_races/markings.dmi differ diff --git a/icons/mob/human_races/masks/blood_human.dmi b/icons/mob/human_races/masks/blood_human.dmi index 6cd225e93b3..8c7eb80751c 100644 Binary files a/icons/mob/human_races/masks/blood_human.dmi and b/icons/mob/human_races/masks/blood_human.dmi differ diff --git a/icons/mob/human_races/monkeys/monkey_body.dmi b/icons/mob/human_races/monkeys/monkey_body.dmi deleted file mode 100644 index e9c497331cd..00000000000 Binary files a/icons/mob/human_races/monkeys/monkey_body.dmi and /dev/null differ diff --git a/icons/mob/human_races/monkeys/r_monkey.dmi b/icons/mob/human_races/monkeys/r_monkey.dmi index bc240d8d2cc..8dbb721d3bc 100644 Binary files a/icons/mob/human_races/monkeys/r_monkey.dmi and b/icons/mob/human_races/monkeys/r_monkey.dmi differ diff --git a/icons/mob/items/clothing/lefthand_masks.dmi b/icons/mob/items/clothing/lefthand_masks.dmi index 4d832b8d97e..a2d05427c2a 100644 Binary files a/icons/mob/items/clothing/lefthand_masks.dmi and b/icons/mob/items/clothing/lefthand_masks.dmi differ diff --git a/icons/mob/items/clothing/righthand_masks.dmi b/icons/mob/items/clothing/righthand_masks.dmi index 1a6cdf67a97..d82044bea0d 100644 Binary files a/icons/mob/items/clothing/righthand_masks.dmi and b/icons/mob/items/clothing/righthand_masks.dmi differ diff --git a/icons/mob/items/lefthand_lighting.dmi b/icons/mob/items/lefthand_lighting.dmi index 29442efff9c..8bc711fc9f1 100644 Binary files a/icons/mob/items/lefthand_lighting.dmi and b/icons/mob/items/lefthand_lighting.dmi differ diff --git a/icons/mob/items/lefthand_medical.dmi b/icons/mob/items/lefthand_medical.dmi index 7894b1b2a63..c7a99a7281f 100644 Binary files a/icons/mob/items/lefthand_medical.dmi and b/icons/mob/items/lefthand_medical.dmi differ diff --git a/icons/mob/items/righthand_lighting.dmi b/icons/mob/items/righthand_lighting.dmi index 1604c9e26f3..fe7bcd72571 100644 Binary files a/icons/mob/items/righthand_lighting.dmi and b/icons/mob/items/righthand_lighting.dmi differ diff --git a/icons/mob/items/righthand_medical.dmi b/icons/mob/items/righthand_medical.dmi index 7c4e3e75c93..e0758bd40f0 100644 Binary files a/icons/mob/items/righthand_medical.dmi and b/icons/mob/items/righthand_medical.dmi differ diff --git a/icons/mob/l_ear.dmi b/icons/mob/l_ear.dmi index d9e549c4662..627b93312ec 100644 Binary files a/icons/mob/l_ear.dmi and b/icons/mob/l_ear.dmi differ diff --git a/icons/mob/mask.dmi b/icons/mob/mask.dmi index 42737c08ae1..51a8d4c4b01 100644 Binary files a/icons/mob/mask.dmi and b/icons/mob/mask.dmi differ diff --git a/icons/mob/npc/held_mobs.dmi b/icons/mob/npc/held_mobs.dmi index 198523e4e82..6e6dce719cc 100644 Binary files a/icons/mob/npc/held_mobs.dmi and b/icons/mob/npc/held_mobs.dmi differ diff --git a/icons/mob/r_ear.dmi b/icons/mob/r_ear.dmi index 83a3025eaf0..6a9f24db59b 100644 Binary files a/icons/mob/r_ear.dmi and b/icons/mob/r_ear.dmi differ diff --git a/icons/mob/rig_back.dmi b/icons/mob/rig_back.dmi index 087012c907a..d86f16ed8df 100644 Binary files a/icons/mob/rig_back.dmi and b/icons/mob/rig_back.dmi differ diff --git a/icons/mob/screen/borer.dmi b/icons/mob/screen/borer.dmi new file mode 100644 index 00000000000..89b09c649f0 Binary files /dev/null and b/icons/mob/screen/borer.dmi differ diff --git a/icons/mob/screen/captive_brain.dmi b/icons/mob/screen/captive_brain.dmi new file mode 100644 index 00000000000..e7aefc64494 Binary files /dev/null and b/icons/mob/screen/captive_brain.dmi differ diff --git a/icons/mob/species/machine/gloves.dmi b/icons/mob/species/machine/gloves.dmi index 2e1e6b19f59..88f141e512b 100644 Binary files a/icons/mob/species/machine/gloves.dmi and b/icons/mob/species/machine/gloves.dmi differ diff --git a/icons/mob/species/machine/helmet.dmi b/icons/mob/species/machine/helmet.dmi index 7d483607177..3413b005ee2 100644 Binary files a/icons/mob/species/machine/helmet.dmi and b/icons/mob/species/machine/helmet.dmi differ diff --git a/icons/mob/species/machine/shoes.dmi b/icons/mob/species/machine/shoes.dmi index 240060dcf88..a2c1e3ef292 100644 Binary files a/icons/mob/species/machine/shoes.dmi and b/icons/mob/species/machine/shoes.dmi differ diff --git a/icons/mob/species/machine/suit.dmi b/icons/mob/species/machine/suit.dmi index ea0e4af00fc..2126fec07e4 100644 Binary files a/icons/mob/species/machine/suit.dmi and b/icons/mob/species/machine/suit.dmi differ diff --git a/icons/mob/species/skrell/helmet.dmi b/icons/mob/species/skrell/helmet.dmi index 59a15406ae1..150f5980693 100644 Binary files a/icons/mob/species/skrell/helmet.dmi and b/icons/mob/species/skrell/helmet.dmi differ diff --git a/icons/mob/species/skrell/suit.dmi b/icons/mob/species/skrell/suit.dmi index 4075a0a7a27..5b6c2b08dae 100644 Binary files a/icons/mob/species/skrell/suit.dmi and b/icons/mob/species/skrell/suit.dmi differ diff --git a/icons/mob/species/tajaran/gloves.dmi b/icons/mob/species/tajaran/gloves.dmi index 9bd3b695ee6..c21d66a95b6 100644 Binary files a/icons/mob/species/tajaran/gloves.dmi and b/icons/mob/species/tajaran/gloves.dmi differ diff --git a/icons/mob/species/tajaran/helmet.dmi b/icons/mob/species/tajaran/helmet.dmi index 54e93f09c0f..5ec86298684 100644 Binary files a/icons/mob/species/tajaran/helmet.dmi and b/icons/mob/species/tajaran/helmet.dmi differ diff --git a/icons/mob/species/tajaran/mask.dmi b/icons/mob/species/tajaran/mask.dmi index f4e7bb5cceb..61caec1711c 100644 Binary files a/icons/mob/species/tajaran/mask.dmi and b/icons/mob/species/tajaran/mask.dmi differ diff --git a/icons/mob/species/tajaran/shoes.dmi b/icons/mob/species/tajaran/shoes.dmi index 10ac675fdcb..63634085222 100644 Binary files a/icons/mob/species/tajaran/shoes.dmi and b/icons/mob/species/tajaran/shoes.dmi differ diff --git a/icons/mob/species/tajaran/suit.dmi b/icons/mob/species/tajaran/suit.dmi index 48165a5ba53..0943918ac5c 100644 Binary files a/icons/mob/species/tajaran/suit.dmi and b/icons/mob/species/tajaran/suit.dmi differ diff --git a/icons/mob/species/unathi/gloves.dmi b/icons/mob/species/unathi/gloves.dmi index 351d0912f2e..dbe4a19fe7c 100644 Binary files a/icons/mob/species/unathi/gloves.dmi and b/icons/mob/species/unathi/gloves.dmi differ diff --git a/icons/mob/species/unathi/helmet.dmi b/icons/mob/species/unathi/helmet.dmi index 4bdecc57645..e8de9f6f56e 100644 Binary files a/icons/mob/species/unathi/helmet.dmi and b/icons/mob/species/unathi/helmet.dmi differ diff --git a/icons/mob/species/unathi/mask.dmi b/icons/mob/species/unathi/mask.dmi index bebbbf1aed5..abaca49763b 100644 Binary files a/icons/mob/species/unathi/mask.dmi and b/icons/mob/species/unathi/mask.dmi differ diff --git a/icons/mob/species/unathi/shoes.dmi b/icons/mob/species/unathi/shoes.dmi index 1420825fe44..d4894a29956 100644 Binary files a/icons/mob/species/unathi/shoes.dmi and b/icons/mob/species/unathi/shoes.dmi differ diff --git a/icons/mob/species/unathi/suit.dmi b/icons/mob/species/unathi/suit.dmi index a3f76b2dd90..d39cb9b4c43 100644 Binary files a/icons/mob/species/unathi/suit.dmi and b/icons/mob/species/unathi/suit.dmi differ diff --git a/icons/mob/species/vaurca/gloves.dmi b/icons/mob/species/vaurca/gloves.dmi index 27beb51d400..f9515d1c1c1 100644 Binary files a/icons/mob/species/vaurca/gloves.dmi and b/icons/mob/species/vaurca/gloves.dmi differ diff --git a/icons/mob/species/vaurca/helmet.dmi b/icons/mob/species/vaurca/helmet.dmi index 5af078f19b4..c52b3ed936c 100644 Binary files a/icons/mob/species/vaurca/helmet.dmi and b/icons/mob/species/vaurca/helmet.dmi differ diff --git a/icons/mob/species/vaurca/shoes.dmi b/icons/mob/species/vaurca/shoes.dmi index fd5a8c565db..4c78139b694 100644 Binary files a/icons/mob/species/vaurca/shoes.dmi and b/icons/mob/species/vaurca/shoes.dmi differ diff --git a/icons/mob/species/vaurca/suit.dmi b/icons/mob/species/vaurca/suit.dmi index 322be3e7eb6..3df8a9a9004 100644 Binary files a/icons/mob/species/vaurca/suit.dmi and b/icons/mob/species/vaurca/suit.dmi differ diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index 61d77560c2d..bdc3e0ba4ab 100644 Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ diff --git a/icons/mob/ties.dmi b/icons/mob/ties.dmi index b246a3ebd5a..3a71e963ddf 100644 Binary files a/icons/mob/ties.dmi and b/icons/mob/ties.dmi differ diff --git a/icons/mob/underwear.dmi b/icons/mob/underwear.dmi index 11913397b30..d84e945bf72 100644 Binary files a/icons/mob/underwear.dmi and b/icons/mob/underwear.dmi differ diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi index c752860bde6..90c398d9808 100644 Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ diff --git a/icons/obj/action_buttons/organs.dmi b/icons/obj/action_buttons/organs.dmi index 698fa8ea49d..a37373173b2 100644 Binary files a/icons/obj/action_buttons/organs.dmi and b/icons/obj/action_buttons/organs.dmi differ diff --git a/icons/obj/banner.dmi b/icons/obj/banner.dmi index 365d18f37c7..73a90ea01e3 100644 Binary files a/icons/obj/banner.dmi and b/icons/obj/banner.dmi differ diff --git a/icons/obj/bloodpack.dmi b/icons/obj/bloodpack.dmi index a58d14db8f8..392ccf68cc8 100644 Binary files a/icons/obj/bloodpack.dmi and b/icons/obj/bloodpack.dmi differ diff --git a/icons/obj/chemical.dmi b/icons/obj/chemical.dmi index 9153ff85afd..142ff9e3e0a 100644 Binary files a/icons/obj/chemical.dmi and b/icons/obj/chemical.dmi differ diff --git a/icons/obj/cigs_lighters.dmi b/icons/obj/cigs_lighters.dmi index 5fcfd103470..43dbfca2051 100644 Binary files a/icons/obj/cigs_lighters.dmi and b/icons/obj/cigs_lighters.dmi differ diff --git a/icons/obj/clothing/ears.dmi b/icons/obj/clothing/ears.dmi index e3eb9831eeb..f3a457ba434 100644 Binary files a/icons/obj/clothing/ears.dmi and b/icons/obj/clothing/ears.dmi differ diff --git a/icons/obj/clothing/gloves.dmi b/icons/obj/clothing/gloves.dmi index 17ac1e4d72d..c04a7f78ea7 100644 Binary files a/icons/obj/clothing/gloves.dmi and b/icons/obj/clothing/gloves.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index 47ddef29b79..82048788eb4 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/clothing/hats/berets.dmi b/icons/obj/clothing/hats/berets.dmi index 6902066409f..048a672173f 100644 Binary files a/icons/obj/clothing/hats/berets.dmi and b/icons/obj/clothing/hats/berets.dmi differ diff --git a/icons/obj/clothing/hijabs.dmi b/icons/obj/clothing/hijabs.dmi index 8f923e4931c..0b709b28104 100644 Binary files a/icons/obj/clothing/hijabs.dmi and b/icons/obj/clothing/hijabs.dmi differ diff --git a/icons/obj/clothing/masks.dmi b/icons/obj/clothing/masks.dmi index e3f6c344b3b..676e87d5e4c 100644 Binary files a/icons/obj/clothing/masks.dmi and b/icons/obj/clothing/masks.dmi differ diff --git a/icons/obj/clothing/shoes.dmi b/icons/obj/clothing/shoes.dmi index 1860a44dffa..34e8fc729c2 100644 Binary files a/icons/obj/clothing/shoes.dmi and b/icons/obj/clothing/shoes.dmi differ diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index 6140c7678ba..d3c49178539 100644 Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ diff --git a/icons/obj/clothing/ties.dmi b/icons/obj/clothing/ties.dmi index 0be9c712e13..9db4c016256 100644 Binary files a/icons/obj/clothing/ties.dmi and b/icons/obj/clothing/ties.dmi differ diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi index bd53f8bb6c8..84f671d330a 100644 Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ diff --git a/icons/obj/contained_items/tools/research_slip.dmi b/icons/obj/contained_items/tools/research_slip.dmi new file mode 100644 index 00000000000..30ee90f4022 Binary files /dev/null and b/icons/obj/contained_items/tools/research_slip.dmi differ diff --git a/icons/obj/cosmetics.dmi b/icons/obj/cosmetics.dmi index 33c45248694..a426784bce8 100644 Binary files a/icons/obj/cosmetics.dmi and b/icons/obj/cosmetics.dmi differ diff --git a/icons/obj/custom_items/akila_jacket.dmi b/icons/obj/custom_items/akila_jacket.dmi new file mode 100644 index 00000000000..7e9988a8850 Binary files /dev/null and b/icons/obj/custom_items/akila_jacket.dmi differ diff --git a/icons/obj/custom_items/amos_vest.dmi b/icons/obj/custom_items/amos_vest.dmi index 2cc2e87b24f..27a73735225 100644 Binary files a/icons/obj/custom_items/amos_vest.dmi and b/icons/obj/custom_items/amos_vest.dmi differ diff --git a/icons/obj/custom_items/nikita_flag.dmi b/icons/obj/custom_items/nikita_flag.dmi new file mode 100644 index 00000000000..c223ee342ec Binary files /dev/null and b/icons/obj/custom_items/nikita_flag.dmi differ diff --git a/icons/obj/custom_items/rajka_suit.dmi b/icons/obj/custom_items/rajka_suit.dmi new file mode 100644 index 00000000000..058122572fd Binary files /dev/null and b/icons/obj/custom_items/rajka_suit.dmi differ diff --git a/icons/obj/decals.dmi b/icons/obj/decals.dmi index 629e8629606..62ea41e3573 100644 Binary files a/icons/obj/decals.dmi and b/icons/obj/decals.dmi differ diff --git a/icons/obj/guns/erepeater.dmi b/icons/obj/guns/erepeater.dmi new file mode 100644 index 00000000000..e89cdb63e48 Binary files /dev/null and b/icons/obj/guns/erepeater.dmi differ diff --git a/icons/obj/hardsuit_token.dmi b/icons/obj/hardsuit_token.dmi new file mode 100644 index 00000000000..82089f0a475 Binary files /dev/null and b/icons/obj/hardsuit_token.dmi differ diff --git a/icons/obj/hoodies.dmi b/icons/obj/hoodies.dmi index 73e4c2bc7a3..6363c4242c3 100644 Binary files a/icons/obj/hoodies.dmi and b/icons/obj/hoodies.dmi differ diff --git a/icons/obj/janitor.dmi b/icons/obj/janitor.dmi index b8db4419239..07edd4c7f42 100644 Binary files a/icons/obj/janitor.dmi and b/icons/obj/janitor.dmi differ diff --git a/icons/obj/library.dmi b/icons/obj/library.dmi index a2b55c2c5b1..4bf772d2e8c 100644 Binary files a/icons/obj/library.dmi and b/icons/obj/library.dmi differ diff --git a/icons/obj/lighting.dmi b/icons/obj/lighting.dmi index 692f31b3867..91a9db10868 100644 Binary files a/icons/obj/lighting.dmi and b/icons/obj/lighting.dmi differ diff --git a/icons/obj/lunchbox.dmi b/icons/obj/lunchbox.dmi index a03e5296dff..d450c97c014 100644 Binary files a/icons/obj/lunchbox.dmi and b/icons/obj/lunchbox.dmi differ diff --git a/icons/obj/machines/floodlight.dmi b/icons/obj/machines/floodlight.dmi index 5a479625c26..32232e267ea 100644 Binary files a/icons/obj/machines/floodlight.dmi and b/icons/obj/machines/floodlight.dmi differ diff --git a/icons/obj/office_supplies.dmi b/icons/obj/office_supplies.dmi new file mode 100644 index 00000000000..4d70073bf39 Binary files /dev/null and b/icons/obj/office_supplies.dmi differ diff --git a/icons/obj/rig_modules.dmi b/icons/obj/rig_modules.dmi index 05c31d139cb..9cbf6c009d8 100644 Binary files a/icons/obj/rig_modules.dmi and b/icons/obj/rig_modules.dmi differ diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi index ef59396ff65..d814196916b 100644 Binary files a/icons/obj/surgery.dmi and b/icons/obj/surgery.dmi differ diff --git a/icons/obj/sword.dmi b/icons/obj/sword.dmi index 31c0b0b0189..18f53192468 100644 Binary files a/icons/obj/sword.dmi and b/icons/obj/sword.dmi differ diff --git a/icons/obj/tank.dmi b/icons/obj/tank.dmi index 1ffbcd5f958..687151c2142 100644 Binary files a/icons/obj/tank.dmi and b/icons/obj/tank.dmi differ diff --git a/icons/obj/teleporter.dmi b/icons/obj/teleporter.dmi new file mode 100644 index 00000000000..16b0fa94c40 Binary files /dev/null and b/icons/obj/teleporter.dmi differ diff --git a/icons/obj/toy.dmi b/icons/obj/toy.dmi index 86360883ac9..96e738fb94e 100644 Binary files a/icons/obj/toy.dmi and b/icons/obj/toy.dmi differ diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi index 520da344d1a..7c820208058 100644 Binary files a/icons/obj/weapons.dmi and b/icons/obj/weapons.dmi differ diff --git a/icons/obj/xenoarchaeology.dmi b/icons/obj/xenoarchaeology.dmi index 55cacabba77..50e027bb997 100644 Binary files a/icons/obj/xenoarchaeology.dmi and b/icons/obj/xenoarchaeology.dmi differ diff --git a/icons/turf/flooring/scc_decal_preview.dmi b/icons/turf/flooring/scc_decal_preview.dmi new file mode 100644 index 00000000000..c2c0b6bb451 Binary files /dev/null and b/icons/turf/flooring/scc_decal_preview.dmi differ diff --git a/icons/turf/flooring/scc_decals.dmi b/icons/turf/flooring/scc_decals.dmi new file mode 100644 index 00000000000..82c300a1280 Binary files /dev/null and b/icons/turf/flooring/scc_decals.dmi differ diff --git a/maps/_common/areas/station/security.dm b/maps/_common/areas/station/security.dm index fe3c461634f..68449749150 100644 --- a/maps/_common/areas/station/security.dm +++ b/maps/_common/areas/station/security.dm @@ -97,9 +97,9 @@ ambience = AMBIENCE_GHOSTLY no_light_control = 0 -/area/security/detectives_office - name = "Security - Detective's Office" - icon_state = "detective" +/area/security/break_room + name = "Security - Break Room" + icon_state = "security" sound_env = SMALL_SOFTFLOOR no_light_control = 0 diff --git a/maps/aurora/aurora-1_centcomm.dmm b/maps/aurora/aurora-1_centcomm.dmm index d2f19a74bb9..788ce57d3a5 100644 --- a/maps/aurora/aurora-1_centcomm.dmm +++ b/maps/aurora/aurora-1_centcomm.dmm @@ -215,6 +215,10 @@ pixel_x = -8; pixel_y = -2 }, +/obj/item/clothing/mask/gas/half{ + pixel_x = 7; + pixel_y = -4 + }, /turf/simulated/floor/tiled, /area/shuttle/skipjack) "aaJ" = ( @@ -5939,7 +5943,7 @@ /obj/effect/decal/cleanable/dirt, /obj/structure/table/steel, /obj/item/clothing/suit/space/void/engineering, -/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/gas/half, /obj/item/clothing/head/helmet/space/void/engineering, /turf/simulated/floor/tiled, /area/shuttle/skipjack) @@ -8626,7 +8630,7 @@ /obj/item/tank/oxygen/red, /obj/item/clothing/shoes/magboots, /obj/item/clothing/suit/space/syndicate/black/red, -/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/gas/half, /obj/item/clothing/head/helmet/space/syndicate/black/red, /obj/structure/window/reinforced/crescent{ dir = 8 @@ -25284,6 +25288,10 @@ /obj/item/storage/belt/security/tactical, /obj/item/storage/belt/security/tactical, /obj/item/storage/belt/security/tactical, +/obj/item/clothing/mask/gas/half, +/obj/item/clothing/mask/gas/half, +/obj/item/clothing/mask/gas/half, +/obj/item/clothing/mask/gas/half, /obj/item/clothing/mask/gas/tactical, /obj/item/clothing/mask/gas/tactical, /obj/item/clothing/mask/gas/tactical, @@ -27823,7 +27831,7 @@ /obj/item/tank/oxygen/red, /obj/item/clothing/shoes/magboots, /obj/item/clothing/suit/space/syndicate/black/red, -/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/gas/half, /obj/item/clothing/head/helmet/space/syndicate/black/red, /obj/structure/window/reinforced/crescent{ dir = 8 @@ -36037,6 +36045,10 @@ name = "adjusted light fixture"; pixel_x = -16 }, +/obj/item/clothing/mask/gas/half, +/obj/item/clothing/mask/gas/half, +/obj/item/clothing/mask/gas/half, +/obj/item/clothing/mask/gas/half, /obj/item/clothing/mask/gas/alt, /obj/item/clothing/mask/gas/alt, /obj/item/clothing/mask/gas/alt, @@ -39205,6 +39217,10 @@ /area/antag/mercenary) "vKj" = ( /obj/structure/table/rack, +/obj/item/clothing/mask/gas/half, +/obj/item/clothing/mask/gas/half, +/obj/item/clothing/mask/gas/half, +/obj/item/clothing/mask/gas/half, /obj/item/clothing/mask/gas/tactical, /obj/item/clothing/mask/gas/tactical, /obj/item/clothing/mask/gas/tactical, @@ -39498,6 +39514,22 @@ pixel_x = 6; pixel_y = -1 }, +/obj/item/clothing/mask/gas/half{ + pixel_x = -1; + pixel_y = -6 + }, +/obj/item/clothing/mask/gas/half{ + pixel_x = -1; + pixel_y = -6 + }, +/obj/item/clothing/mask/gas/half{ + pixel_x = -1; + pixel_y = -6 + }, +/obj/item/clothing/mask/gas/half{ + pixel_x = -1; + pixel_y = -6 + }, /obj/structure/table/reinforced/steel, /turf/unsimulated/floor{ icon_state = "new_reinforced" @@ -40036,6 +40068,26 @@ name = "railing" }, /obj/structure/table/rack, +/obj/item/clothing/mask/gas/half{ + pixel_x = -1; + pixel_y = 2 + }, +/obj/item/clothing/mask/gas/half{ + pixel_x = -1; + pixel_y = 2 + }, +/obj/item/clothing/mask/gas/half{ + pixel_x = -1; + pixel_y = 2 + }, +/obj/item/clothing/mask/gas/half{ + pixel_x = -1; + pixel_y = 2 + }, +/obj/item/clothing/mask/gas/half{ + pixel_x = -1; + pixel_y = 2 + }, /obj/item/clothing/mask/gas/tactical{ layer = 2.99; pixel_x = -1; @@ -42482,6 +42534,30 @@ pixel_x = -7; pixel_y = 4 }, +/obj/item/clothing/mask/gas/half{ + pixel_x = -7; + pixel_y = -4 + }, +/obj/item/clothing/mask/gas/half{ + pixel_x = -7; + pixel_y = -4 + }, +/obj/item/clothing/mask/gas/half{ + pixel_x = -7; + pixel_y = -4 + }, +/obj/item/clothing/mask/gas/half{ + pixel_x = -7; + pixel_y = -4 + }, +/obj/item/clothing/mask/gas/half{ + pixel_x = -7; + pixel_y = -4 + }, +/obj/item/clothing/mask/gas/half{ + pixel_x = -7; + pixel_y = -4 + }, /turf/unsimulated/floor, /area/centcom/legion/hangar5) "xwI" = ( diff --git a/maps/aurora/aurora-2_under-station.dmm b/maps/aurora/aurora-2_under-station.dmm index b82811422d5..889445490be 100644 --- a/maps/aurora/aurora-2_under-station.dmm +++ b/maps/aurora/aurora-2_under-station.dmm @@ -166,6 +166,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, +/obj/structure/sign/flag/scc{ + pixel_y = 32 + }, /turf/simulated/floor/carpet/rubber, /area/engineering/cooling) "pp" = ( diff --git a/maps/aurora/aurora-3_sublevel.dmm b/maps/aurora/aurora-3_sublevel.dmm index aa611b528a6..647875f390c 100644 --- a/maps/aurora/aurora-3_sublevel.dmm +++ b/maps/aurora/aurora-3_sublevel.dmm @@ -2135,7 +2135,7 @@ "aff" = ( /obj/structure/table/rack, /obj/item/clothing/glasses/science, -/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/gas/half, /obj/item/clothing/gloves/latex/nitrile, /obj/item/clothing/suit/bio_suit/anomaly, /obj/item/clothing/head/bio_hood/anomaly, @@ -5220,7 +5220,10 @@ }, /obj/structure/table/rack, /obj/item/clothing/glasses/science, -/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/gas/half{ + pixel_x = -6; + pixel_y = -4 + }, /obj/item/clothing/gloves/latex/nitrile, /obj/item/clothing/suit/bio_suit/anomaly, /obj/item/clothing/head/bio_hood/anomaly, @@ -5272,7 +5275,10 @@ }, /obj/structure/table/rack, /obj/item/clothing/glasses/science, -/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/gas/half{ + pixel_x = -6; + pixel_y = -4 + }, /obj/item/clothing/gloves/latex/nitrile, /obj/item/clothing/suit/bio_suit/anomaly, /obj/item/clothing/head/bio_hood/anomaly, @@ -10439,6 +10445,9 @@ /area/bridge/aibunker) "atb" = ( /obj/item/modular_computer/console/preset/engineering, +/obj/structure/sign/flag/scc{ + pixel_y = 32 + }, /turf/simulated/floor/tiled, /area/bridge/aibunker) "atc" = ( @@ -10628,7 +10637,10 @@ }, /obj/structure/table/rack, /obj/item/clothing/glasses/science, -/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/gas/half{ + pixel_x = -6; + pixel_y = -4 + }, /obj/item/clothing/gloves/latex/nitrile, /obj/item/clothing/suit/bio_suit/anomaly, /obj/item/clothing/head/bio_hood/anomaly, @@ -22369,7 +22381,7 @@ /obj/item/clothing/shoes/medical{ pixel_x = 4; pixel_y = -8 -}, + }, /turf/simulated/floor/tiled, /area/medical/medbay4) "aVi" = ( @@ -29091,6 +29103,17 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/airless, /area/mine/unexplored) +"hBn" = ( +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/sign/flag/scc{ + pixel_x = -32 + }, +/turf/simulated/floor/plating, +/area/outpost/engineering/power) "hDw" = ( /obj/structure/table/standard, /obj/item/autopsy_scanner, @@ -29636,6 +29659,15 @@ /obj/machinery/door/firedoor, /turf/simulated/floor/plating, /area/maintenance/scisublevel) +"iRI" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/sign/flag/scc{ + pixel_y = 32 + }, +/turf/unsimulated/floor/asteroid/ash/rocky, +/area/security/penal_colony) "iRV" = ( /obj/item/device/radio/intercom{ dir = 0; @@ -30654,6 +30686,16 @@ /obj/item/deck/tarot, /turf/simulated/floor/wood, /area/medical/patient_wing_library) +"lvt" = ( +/obj/machinery/door/firedoor, +/obj/effect/floor_decal/corner_wide/mauve{ + dir = 6 + }, +/obj/structure/sign/flag/scc{ + pixel_x = 32 + }, +/turf/simulated/floor/tiled/white, +/area/outpost/research/hallway) "lxg" = ( /obj/structure/bed/chair/office/light{ dir = 4 @@ -30720,6 +30762,15 @@ }, /turf/simulated/floor/tiled/white, /area/maintenance/medsublevel_port) +"lOl" = ( +/obj/effect/floor_decal/corner_wide/blue{ + dir = 6 + }, +/obj/structure/sign/flag/scc{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/airless, +/area/security/penal_colony) "lOI" = ( /obj/structure/cable/cyan{ d1 = 4; @@ -31926,6 +31977,18 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /turf/simulated/floor/tiled/white, /area/maintenance/medsublevel_port) +"nGh" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/lattice/catwalk/indoor/grate, +/obj/structure/sign/flag/scc{ + pixel_y = 32 + }, +/turf/simulated/floor/airless, +/area/security/penal_colony) "nHn" = ( /obj/machinery/atmospherics/pipe/simple/hidden/cyan, /obj/structure/disposalpipe/segment, @@ -32346,6 +32409,17 @@ }, /turf/simulated/floor/tiled, /area/outpost/engineering/hallway) +"oBQ" = ( +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/sign/flag/scc{ + pixel_x = 32 + }, +/turf/simulated/floor/plating, +/area/outpost/engineering/power) "oFa" = ( /obj/machinery/airlock_sensor{ id_tag = "research_sensor"; @@ -35530,6 +35604,12 @@ }, /turf/simulated/floor/plating, /area/outpost/engineering/power) +"vtH" = ( +/obj/structure/sign/flag/scc{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/airless, +/area/security/penal_colony/warden) "vyW" = ( /obj/machinery/door/firedoor, /obj/structure/cable{ @@ -49699,7 +49779,7 @@ uPd aki cvy cKF -acf +hBn hkV mgM wAi @@ -50727,7 +50807,7 @@ uPd aki cvy cKF -dUz +oBQ tDA wkd uVg @@ -58513,7 +58593,7 @@ aCP oVg fOV aFK -cVG +lvt rSj aIJ aJL @@ -67685,7 +67765,7 @@ aaa aaa aaa jKB -fLn +vtH fLn fLn bSA @@ -68464,7 +68544,7 @@ lCe hiP gkA lCe -tUv +iRI vGh vGh vGh @@ -69492,7 +69572,7 @@ lCe hiP gkA lCe -tUv +iRI vGh vGh vGh @@ -70003,7 +70083,7 @@ ybc xZJ jCg kMM -hiP +nGh gkA lCe vGh @@ -70517,7 +70597,7 @@ ybc xZJ xZJ kMM -pzB +lOl wsT lCe vGh diff --git a/maps/aurora/aurora-4_mainlevel.dmm b/maps/aurora/aurora-4_mainlevel.dmm index 51fdfab181e..f2973d59d0b 100644 --- a/maps/aurora/aurora-4_mainlevel.dmm +++ b/maps/aurora/aurora-4_mainlevel.dmm @@ -262,6 +262,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, +/obj/machinery/alarm{ + pixel_y = 28 + }, /turf/simulated/floor/plating, /area/maintenance/security_starboard) "aaJ" = ( @@ -388,8 +391,15 @@ /turf/simulated/floor/plating, /area/maintenance/security_starboard) "aaU" = ( -/turf/simulated/wall, -/area/security/vacantoffice2) +/obj/effect/floor_decal/corner/beige/diagonal, +/obj/structure/table/glass, +/obj/item/reagent_containers/glass/beaker/large, +/obj/machinery/camera/network/security{ + c_tag = "Security - Forensics Lab Port"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/security/forensics_laboratory) "aaV" = ( /turf/simulated/wall, /area/security/brig) @@ -428,57 +438,47 @@ /obj/effect/decal/cleanable/cobweb2, /turf/simulated/floor/airless, /area/mine/unexplored) -"aba" = ( -/obj/structure/flora/pottedplant/random, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled/dark, -/area/security/vacantoffice2) "abb" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 5 +/obj/effect/floor_decal/corner/beige/diagonal, +/obj/structure/table/glass, +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 7 }, -/turf/simulated/floor/tiled/dark, -/area/security/vacantoffice2) +/obj/item/pen{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/pen/red, +/turf/simulated/floor/tiled/white, +/area/security/forensics_laboratory) "abc" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/structure/sign/nosmoking_2{ - pixel_y = 32 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/security/vacantoffice2) +/obj/effect/floor_decal/corner/beige/diagonal, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/security/forensics_laboratory) "abd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/effect/floor_decal/corner/beige/diagonal, +/obj/structure/table/glass, +/obj/item/storage/box/fancy/csi_markers{ + pixel_x = -5 }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 +/obj/item/storage/box/fancy/csi_markers{ + pixel_x = 5 }, -/turf/simulated/floor/tiled/dark, -/area/security/vacantoffice2) +/turf/simulated/floor/tiled/white, +/area/security/forensics_laboratory) "abe" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/effect/floor_decal/industrial/outline/grey, +/obj/structure/window/reinforced{ + dir = 8 }, -/obj/machinery/requests_console{ - department = "Security"; - departmentType = 5; - pixel_y = 30 +/obj/structure/closet{ + name = "Evidence Closet" }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/security/vacantoffice2) +/turf/simulated/floor/tiled, +/area/security/forensics_laboratory) "abf" = ( -/obj/structure/flora/pottedplant/random, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, @@ -486,8 +486,12 @@ dir = 4; icon_state = "tube1" }, -/turf/simulated/floor/tiled/dark, -/area/security/vacantoffice2) +/obj/effect/floor_decal/industrial/outline/grey, +/obj/structure/closet{ + name = "Evidence Closet" + }, +/turf/simulated/floor/tiled, +/area/security/forensics_laboratory) "abg" = ( /obj/structure/grille, /obj/structure/window/reinforced, @@ -502,7 +506,7 @@ }, /obj/machinery/door/firedoor, /turf/simulated/floor/plating, -/area/security/vacantoffice2) +/area/security/forensics_laboratory) "abh" = ( /obj/effect/floor_decal/corner/blue/full{ dir = 8 @@ -516,11 +520,6 @@ }, /turf/simulated/floor/tiled, /area/security/brig) -"abj" = ( -/obj/effect/decal/cleanable/dirt, -/obj/random/junk, -/turf/simulated/floor/plating, -/area/maintenance/security_starboard) "abk" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable{ @@ -644,83 +643,76 @@ /turf/simulated/floor/plating, /area/maintenance/security_starboard) "abv" = ( -/obj/machinery/door/firedoor, -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 1 +/obj/effect/floor_decal/corner/beige/diagonal, +/obj/structure/table/glass, +/obj/item/device/reagent_scanner{ + pixel_x = -8 }, -/obj/structure/window/reinforced{ - dir = 8 +/obj/item/device/reagent_scanner{ + pixel_x = 8 }, +/turf/simulated/floor/tiled/white, +/area/security/forensics_laboratory) +"abw" = ( +/obj/effect/floor_decal/corner/beige/diagonal, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/security/forensics_laboratory) +"abx" = ( +/obj/effect/floor_decal/corner/beige/diagonal, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/security/forensics_laboratory) +"aby" = ( +/obj/structure/closet{ + name = "Evidence Closet" + }, +/obj/effect/floor_decal/industrial/outline/grey, /obj/structure/window/reinforced{ dir = 4 }, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id = "Security Lockdown"; - name = "Security Blast Door"; - opacity = 0 +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 }, -/turf/simulated/floor/plating, -/area/security/vacantoffice2) -"abw" = ( -/obj/effect/floor_decal/corner/blue{ +/turf/simulated/floor/tiled{ + name = "cooled floor"; + temperature = 278 + }, +/area/security/investigations_storage) +"abz" = ( +/obj/effect/floor_decal/corner/beige/diagonal, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/security/forensics_laboratory) +"abA" = ( +/obj/effect/floor_decal/corner/beige/diagonal, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, -/turf/simulated/floor/tiled/dark, -/area/security/vacantoffice2) -"abx" = ( -/obj/effect/floor_decal/corner/blue, -/turf/simulated/floor/tiled/dark, -/area/security/vacantoffice2) -"aby" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/security/vacantoffice2) -"abz" = ( -/obj/structure/bed/chair/office/dark, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/obj/effect/landmark/start{ - name = "Security Officer" - }, -/turf/simulated/floor/tiled/dark, -/area/security/vacantoffice2) -"abA" = ( -/obj/structure/bed/chair/office/dark, -/obj/effect/floor_decal/corner/blue{ - dir = 10 - }, -/obj/effect/landmark/start{ - name = "Security Cadet" - }, -/turf/simulated/floor/tiled/dark, -/area/security/vacantoffice2) +/turf/simulated/floor/tiled/white, +/area/security/forensics_laboratory) "abB" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 8 +/obj/structure/cable/green{ + icon_state = "1-2" }, -/turf/simulated/floor/tiled/dark, -/area/security/vacantoffice2) +/turf/simulated/floor/tiled, +/area/security/forensics_laboratory) "abC" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/security/vacantoffice2) -"abD" = ( -/obj/machinery/door/airlock/glass_security{ - name = "Briefing Room"; - req_access = list(63) - }, -/obj/machinery/door/firedoor, /turf/simulated/floor/tiled, -/area/security/vacantoffice2) +/area/security/forensics_laboratory) +"abD" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass_security{ + name = "Forensic Laboratory"; + req_access = list(4) + }, +/turf/simulated/floor/tiled, +/area/security/forensics_laboratory) "abE" = ( /turf/simulated/floor/tiled, /area/security/brig) @@ -761,9 +753,10 @@ /turf/simulated/floor/plating, /area/maintenance/security_starboard) "abJ" = ( -/obj/structure/girder, -/turf/simulated/floor/plating, -/area/maintenance/security_starboard) +/turf/simulated/wall, +/area/security/forensics_office{ + name = "Security - Investigations Office" + }) "abK" = ( /turf/simulated/wall, /area/maintenance/substation/security) @@ -790,53 +783,30 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/airless, /area/mine/unexplored) -"abO" = ( -/obj/machinery/door/firedoor, -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id = "Security Lockdown"; - name = "Security Blast Door"; - opacity = 0 - }, -/turf/simulated/floor/plating, -/area/maintenance/security_starboard) "abP" = ( -/obj/machinery/door/firedoor, -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 8 - }, +/obj/effect/floor_decal/corner/beige/diagonal, +/obj/item/modular_computer/console/preset/security/investigations, +/turf/simulated/floor/tiled/white, +/area/security/forensics_laboratory) +"abQ" = ( +/obj/effect/floor_decal/industrial/outline/grey, /obj/structure/window/reinforced{ dir = 4 }, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id = "Security Lockdown"; - name = "Security Blast Door"; - opacity = 0 +/obj/structure/closet{ + name = "Evidence Closet" }, -/turf/simulated/floor/plating, -/area/security/vacantoffice2) -"abQ" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 +/turf/simulated/floor/tiled{ + name = "cooled floor"; + temperature = 278 }, -/turf/simulated/floor/tiled/dark, -/area/security/vacantoffice2) +/area/security/investigations_storage) "abR" = ( -/obj/item/folder/sec, -/obj/structure/table/reinforced/wood, -/turf/simulated/floor/carpet, -/area/security/vacantoffice2) +/obj/effect/floor_decal/corner/beige/diagonal, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/security/forensics_laboratory) "abS" = ( /obj/structure/grille, /obj/structure/window/reinforced{ @@ -849,8 +819,12 @@ dir = 4 }, /obj/machinery/door/firedoor, +/obj/structure/window/reinforced{ + layer = 5; + name = "adjusted reinforced window" + }, /turf/simulated/floor/plating, -/area/security/vacantoffice2) +/area/security/forensics_laboratory) "abT" = ( /obj/effect/floor_decal/corner/blue{ dir = 9 @@ -943,74 +917,55 @@ /obj/structure/girder/displaced, /turf/simulated/floor/airless, /area/mine/unexplored) -"ace" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/machinery/camera/network/security{ - c_tag = "Security - Briefing Room"; - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/security/vacantoffice2) -"acf" = ( -/obj/structure/bed/chair/office/dark{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/effect/landmark/start{ - name = "Head of Security" - }, -/turf/simulated/floor/tiled/dark, -/area/security/vacantoffice2) "acg" = ( -/obj/item/book/manual/wiki/security_space_law, -/obj/structure/table/reinforced/wood, -/turf/simulated/floor/carpet, -/area/security/vacantoffice2) -"ach" = ( -/turf/simulated/floor/carpet, -/area/security/vacantoffice2) -"aci" = ( -/obj/machinery/hologram/holopad, -/turf/simulated/floor/carpet, -/area/security/vacantoffice2) +/obj/structure/plasticflaps/airtight, +/obj/machinery/door/airlock/security{ + name = "Evidence Storage"; + req_access = null; + req_one_access = list(4,68) + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled{ + name = "cooled floor"; + temperature = 278 + }, +/area/security/investigations_storage) "acj" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/sign/nosmoking_2{ + pixel_x = -32 + }, +/obj/machinery/light{ dir = 8 }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 +/obj/structure/cable/green{ + icon_state = "1-2" }, -/obj/effect/landmark/start{ - name = "Warden" - }, -/turf/simulated/floor/tiled/dark, -/area/security/vacantoffice2) +/turf/simulated/floor/tiled, +/area/security/forensics_laboratory) "ack" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/camera/network/security{ - c_tag = "Security - Briefing Room"; + c_tag = "Security - Forensics Lab Starboard"; dir = 8 }, /obj/effect/floor_decal/corner/blue{ dir = 6 }, -/turf/simulated/floor/tiled/dark, -/area/security/vacantoffice2) +/obj/item/stool/padded, +/turf/simulated/floor/tiled, +/area/security/forensics_laboratory) "acl" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 8 +/obj/structure/table/reinforced/steel, +/obj/machinery/door/window/brigdoor/eastleft{ + name = "Forensics Desk" }, -/obj/structure/window/reinforced{ - dir = 4 +/obj/machinery/door/window/brigdoor/westright{ + name = "Forensics Desk"; + req_access = list(4) }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/security/vacantoffice2) +/turf/simulated/floor/tiled, +/area/security/forensics_laboratory) "acm" = ( /obj/effect/floor_decal/corner/blue{ dir = 6 @@ -1077,6 +1032,9 @@ /obj/effect/floor_decal/corner_wide/paleblue{ dir = 6 }, +/obj/structure/sign/flag/scc{ + pixel_x = 32 + }, /turf/simulated/floor/tiled/white, /area/medical/surgerywing) "acs" = ( @@ -1128,16 +1086,18 @@ dir = 4 }, /obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/security/vacantoffice2) -"acw" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 +/obj/structure/window/reinforced{ + dir = 1 }, +/turf/simulated/floor/plating, +/area/security/forensics_laboratory) +"acw" = ( /obj/machinery/status_display{ pixel_x = 32 }, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/ramp/bottom{ + dir = 1 + }, /area/security/brig) "acx" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -1172,6 +1132,11 @@ /obj/effect/floor_decal/corner_wide/paleblue{ dir = 6 }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 28; + req_one_access = list(24,11,55) + }, /turf/simulated/floor/tiled/white, /area/medical/surgerywing) "acA" = ( @@ -1232,103 +1197,59 @@ /turf/simulated/floor/plating, /area/maintenance/security_starboard) "acG" = ( -/obj/machinery/door/firedoor, -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ +/obj/structure/sign/nosmoking_2{ + pixel_x = -32 + }, +/obj/machinery/camera/network/security{ + c_tag = "Security - Evidence Storage Port"; + dir = 4 + }, +/obj/machinery/light/small{ dir = 8 }, -/obj/structure/window/reinforced{ - dir = 4 +/turf/simulated/floor/tiled{ + name = "cooled floor"; + temperature = 278 }, -/obj/machinery/door/blast/regular{ - density = 0; - icon_state = "pdoor0"; - id = "Security Lockdown"; - name = "Security Blast Door"; - opacity = 0 +/area/security/investigations_storage) +"acI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 }, -/turf/simulated/floor/plating, -/area/security/vacantoffice2) -"acH" = ( +/turf/simulated/floor/tiled{ + name = "cooled floor"; + temperature = 278 + }, +/area/security/investigations_storage) +"acJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled{ + name = "cooled floor"; + temperature = 278 + }, +/area/security/investigations_storage) +"acK" = ( /obj/structure/cable/green{ - d1 = 2; - d2 = 4; icon_state = "2-4" }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/security/vacantoffice2) -"acI" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/blue{ +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/tiled/dark, -/area/security/vacantoffice2) -"acJ" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 +/turf/simulated/floor/tiled{ + name = "cooled floor"; + temperature = 278 }, -/obj/structure/bed/chair/office/dark{ - dir = 1 - }, -/obj/effect/landmark/start{ - name = "Security Officer" - }, -/turf/simulated/floor/tiled/dark, -/area/security/vacantoffice2) -"acK" = ( -/obj/structure/bed/chair/office/dark{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/effect/landmark/start{ - name = "Security Officer" - }, -/turf/simulated/floor/tiled/dark, -/area/security/vacantoffice2) +/area/security/investigations_storage) "acL" = ( -/obj/structure/bed/chair/office/dark{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, -/obj/effect/landmark/start{ - name = "Detective" - }, -/turf/simulated/floor/tiled/dark, -/area/security/vacantoffice2) -"acM" = ( -/obj/structure/bed/chair/office/dark{ - dir = 1 +/obj/machinery/light_switch{ + pixel_x = 26; + pixel_y = 32 }, /obj/structure/cable/green{ d1 = 4; @@ -1338,28 +1259,54 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/obj/effect/landmark/start{ - name = "Forensic Technician" +/turf/simulated/floor/tiled{ + name = "cooled floor"; + temperature = 278 }, -/turf/simulated/floor/tiled/dark, -/area/security/vacantoffice2) +/area/security/investigations_storage) +"acM" = ( +/obj/structure/plasticflaps/airtight, +/obj/machinery/door/airlock/security{ + name = "Evidence Storage"; + req_access = null; + req_one_access = list(4,68) + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled{ + name = "cooled floor"; + temperature = 278 + }, +/area/security/investigations_storage) "acN" = ( /obj/structure/cable/green{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/structure/cable/green{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/floor_decal/corner/blue{ +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, -/turf/simulated/floor/tiled/dark, -/area/security/vacantoffice2) +/turf/simulated/floor/tiled, +/area/security/forensics_laboratory) "acO" = ( /obj/structure/cable/green{ d1 = 4; @@ -1369,19 +1316,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/security/vacantoffice2) +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/security/forensics_laboratory) "acP" = ( -/obj/machinery/door/airlock/glass_security{ - name = "Briefing Room"; - req_access = list(63) - }, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -1394,8 +1332,12 @@ dir = 4 }, /obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass_security{ + name = "Forensic Laboratory"; + req_access = list(4) + }, /turf/simulated/floor/tiled, -/area/security/vacantoffice2) +/area/security/forensics_laboratory) "acQ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -1454,26 +1396,17 @@ /obj/random/loot, /turf/simulated/floor/plating, /area/maintenance/vault) -"acW" = ( -/obj/structure/cable/green, -/obj/structure/flora/pottedplant/random, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, +"acX" = ( /obj/machinery/power/apc/low{ name = "south bump"; pixel_y = -24 }, -/turf/simulated/floor/tiled/dark, -/area/security/vacantoffice2) -"acX" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 10 +/obj/structure/cable/green, +/turf/simulated/floor/tiled{ + name = "cooled floor"; + temperature = 278 }, -/obj/machinery/firealarm/south, -/turf/simulated/floor/tiled/dark, -/area/security/vacantoffice2) +/area/security/investigations_storage) "acY" = ( /obj/machinery/disposal, /obj/machinery/light{ @@ -1483,8 +1416,8 @@ /obj/structure/disposalpipe/trunk{ dir = 4 }, -/turf/simulated/floor/tiled/dark, -/area/security/vacantoffice2) +/turf/simulated/floor/tiled, +/area/security/forensics_laboratory) "acZ" = ( /obj/structure/grille, /obj/structure/window/reinforced, @@ -1502,7 +1435,7 @@ }, /obj/machinery/door/firedoor, /turf/simulated/floor/plating, -/area/security/vacantoffice2) +/area/security/forensics_laboratory) "ada" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -1689,41 +1622,14 @@ opacity = 0 }, /obj/machinery/door/airlock/maintenance{ - name = "Security Maintenance"; - req_access = list(63) + name = "Evidence Storage Maintenance"; + req_access = list(4) }, /turf/simulated/floor/plating, -/area/security/vacantoffice2) -"adr" = ( -/obj/structure/table/standard, -/obj/item/storage/box/cups, -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/light_switch{ - pixel_y = -24 - }, -/turf/simulated/floor/tiled/dark, -/area/security/vacantoffice2) -"ads" = ( -/obj/item/device/radio/intercom/locked{ - pixel_y = -32 - }, -/obj/machinery/newscaster{ - pixel_x = 27; - pixel_y = -27 - }, -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/papershredder, -/turf/simulated/floor/tiled/dark, -/area/security/vacantoffice2) +/area/security/investigations_storage) "adt" = ( -/obj/structure/reagent_dispensers/water_cooler, -/obj/effect/floor_decal/corner/blue/diagonal, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 28 - }, -/turf/simulated/floor/tiled/dark, -/area/security/vacantoffice2) +/turf/simulated/wall, +/area/security/investigations_storage) "adu" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -1733,13 +1639,12 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, /obj/item/device/radio/intercom{ pixel_x = -28 }, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/ramp/bottom{ + dir = 1 + }, /area/security/brig) "adv" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -2077,16 +1982,15 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/corner/blue{ - dir = 5 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/machinery/camera/network/security{ c_tag = "Security - Corridor Camera 6" }, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/ramp/bottom{ + dir = 4 + }, /area/security/brig) "adV" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -2100,6 +2004,9 @@ d2 = 8; icon_state = "4-8" }, +/obj/machinery/alarm{ + pixel_y = 28 + }, /turf/simulated/floor/tiled, /area/security/brig) "adW" = ( @@ -2114,25 +2021,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/tiled/ramp/bottom{ - dir = 4 - }, -/area/security/brig) -"adX" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/alarm{ - pixel_y = 28 - }, /turf/simulated/floor/tiled, /area/security/brig) "adY" = ( @@ -2141,12 +2029,14 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/security/brig) "adZ" = ( @@ -2163,12 +2053,6 @@ }, /turf/simulated/floor/tiled, /area/security/brig) -"aea" = ( -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/turf/simulated/floor/tiled, -/area/security/brig) "aeb" = ( /obj/machinery/light{ dir = 4; @@ -2421,10 +2305,9 @@ dir = 4 }, /obj/machinery/light, -/obj/effect/floor_decal/corner/blue{ - dir = 10 +/turf/simulated/floor/tiled/ramp/bottom{ + dir = 4 }, -/turf/simulated/floor/tiled, /area/security/brig) "aeF" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -2435,20 +2318,12 @@ }, /turf/simulated/floor/tiled, /area/security/brig) -"aeG" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/ramp/bottom{ - dir = 4 - }, -/area/security/brig) "aeH" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/structure/disposalpipe/junction{ + dir = 8 }, /turf/simulated/floor/tiled, /area/security/brig) @@ -2703,6 +2578,7 @@ /obj/structure/bed/chair, /obj/item/device/radio/intercom{ frequency = 1449; + name = "Station Intercom (Interrogation)"; pixel_x = 27 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -2742,17 +2618,6 @@ "afe" = ( /turf/simulated/wall/r_wall, /area/security/investigations_storage) -"aff" = ( -/obj/machinery/door/airlock/security{ - name = "Evidence Storage"; - req_access = list(1) - }, -/obj/structure/plasticflaps/airtight, -/turf/simulated/floor/tiled{ - name = "cooled floor"; - temperature = 278 - }, -/area/security/investigations_storage) "afg" = ( /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 9 @@ -2776,9 +2641,14 @@ /turf/simulated/floor/tiled/white, /area/rnd/research) "afi" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/old, -/area/maintenance/security_starboard) +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "conpipe-c" + }, +/turf/simulated/floor/lino/grey, +/area/security/forensics_office{ + name = "Security - Investigations Office" + }) "afj" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -2900,6 +2770,7 @@ /obj/effect/floor_decal/corner/blue{ dir = 9 }, +/obj/structure/closet/walllocker/emerglocker/west, /turf/simulated/floor/tiled, /area/security/brig) "afv" = ( @@ -3023,19 +2894,6 @@ temperature = 278 }, /area/security/investigations_storage) -"afE" = ( -/obj/structure/table/standard, -/obj/machinery/firealarm/north, -/obj/item/storage/box/bodybags, -/obj/item/device/hand_labeler, -/obj/machinery/light_switch{ - pixel_x = 26 - }, -/turf/simulated/floor/tiled{ - name = "cooled floor"; - temperature = 278 - }, -/area/security/investigations_storage) "afF" = ( /obj/machinery/r_n_d/server/advanced/core, /turf/simulated/floor/bluegrid{ @@ -3095,15 +2953,13 @@ /turf/simulated/floor/plating, /area/maintenance/security_starboard) "afK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 +/obj/structure/bed/chair{ + dir = 8 }, -/turf/simulated/floor/tiled, -/area/security/brig) -"afL" = ( -/obj/structure/bed/chair, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/machinery/button/switch/windowtint{ + id = "Interro"; + pixel_x = -28; + pixel_y = 28 }, /turf/simulated/floor/tiled, /area/security/brig) @@ -3117,18 +2973,27 @@ /turf/simulated/floor/tiled, /area/security/brig) "afN" = ( -/obj/machinery/door/airlock/security{ - name = "Interrogation"; - req_access = list(1) +/obj/structure/grille, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "Interro" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/structure/window/reinforced/polarized{ + id = "Interro" }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled, +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "Interro" + }, +/obj/structure/window/reinforced/polarized{ + dir = 1; + id = "Interro" + }, +/turf/simulated/floor/plating, /area/security/brig) "afO" = ( /turf/simulated/wall, @@ -3199,39 +3064,32 @@ /turf/simulated/floor/tiled/freezer, /area/security/main) "afW" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/ramp/bottom{ + dir = 4 + }, +/area/security/forensics_morgue) +"afX" = ( /turf/simulated/floor/tiled{ name = "cooled floor"; temperature = 278 }, -/area/security/investigations_storage) -"afX" = ( -/obj/structure/closet{ - name = "Evidence Closet" - }, -/obj/structure/window/reinforced{ +/area/security/forensics_morgue) +"afY" = ( +/obj/machinery/bodyscanner{ dir = 8 }, -/obj/effect/floor_decal/industrial/outline/grey, /turf/simulated/floor/tiled{ name = "cooled floor"; temperature = 278 }, -/area/security/investigations_storage) -"afY" = ( -/obj/structure/closet{ - name = "Evidence Closet" - }, -/obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/light{ - dir = 1; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled{ - name = "cooled floor"; - temperature = 278 - }, -/area/security/investigations_storage) +/area/security/forensics_morgue) "afZ" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -3297,14 +3155,6 @@ /obj/structure/girder/displaced, /turf/simulated/floor/plating, /area/maintenance/engineering) -"agh" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/alarm{ - pixel_y = 28 - }, -/turf/simulated/floor/plating, -/area/maintenance/security_starboard) "agi" = ( /obj/effect/decal/cleanable/generic, /obj/effect/decal/cleanable/dirt, @@ -3319,31 +3169,17 @@ /turf/simulated/floor/plating, /area/maintenance/security_starboard) "agj" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 +/obj/structure/bed/chair{ + dir = 8 }, -/obj/machinery/camera/network/security{ - c_tag = "Security - Interrogation"; - dir = 4; - network = list("Brig","Interrogation") +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, /turf/simulated/floor/tiled, /area/security/brig) "agk" = ( -/obj/structure/table/standard, -/obj/item/device/flashlight/lamp, -/obj/item/device/taperecorder, -/turf/simulated/floor/tiled, -/area/security/brig) -"agl" = ( -/obj/item/device/radio/intercom{ - broadcasting = 1; - frequency = 1449; - listening = 0; - pixel_x = 27 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, /turf/simulated/floor/tiled, /area/security/brig) @@ -3423,36 +3259,29 @@ /turf/simulated/floor/tiled/freezer, /area/security/main) "agu" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/closet{ - name = "Evidence Closet" - }, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, +/obj/structure/table/standard, +/obj/item/storage/box/bodybags, +/obj/machinery/firealarm/west, +/obj/item/device/healthanalyzer, /turf/simulated/floor/tiled{ name = "cooled floor"; temperature = 278 }, -/area/security/investigations_storage) +/area/security/forensics_morgue) "agv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/table/standard, +/obj/item/surgery/surgicaldrill{ + pixel_x = 1; + pixel_y = -2 + }, +/obj/item/surgery/hemostat, +/obj/item/surgery/retractor, +/obj/item/surgery/circular_saw, /turf/simulated/floor/tiled{ name = "cooled floor"; temperature = 278 }, -/area/security/investigations_storage) -"agw" = ( -/obj/machinery/camera/network/security{ - c_tag = "Security - Evidence Storage Starboard"; - dir = 8 - }, -/turf/simulated/floor/tiled{ - name = "cooled floor"; - temperature = 278 - }, -/area/security/investigations_storage) +/area/security/forensics_morgue) "agx" = ( /obj/effect/floor_decal/corner_wide/paleblue/full, /obj/structure/bed/chair{ @@ -3633,12 +3462,6 @@ }, /turf/simulated/floor/plating, /area/maintenance/security_starboard) -"agP" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/security/brig) "agQ" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 @@ -3652,7 +3475,11 @@ /obj/effect/floor_decal/corner/blue{ dir = 9 }, -/obj/structure/closet/walllocker/emerglocker/west, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, /turf/simulated/floor/tiled, /area/security/brig) "agR" = ( @@ -3760,23 +3587,14 @@ /turf/simulated/floor/tiled/freezer, /area/security/main) "aha" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 +/obj/structure/bed/chair/office/light{ + dir = 8 }, /turf/simulated/floor/tiled{ name = "cooled floor"; temperature = 278 }, -/area/security/investigations_storage) -"ahb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled{ - name = "cooled floor"; - temperature = 278 - }, -/area/security/investigations_storage) +/area/security/forensics_morgue) "ahc" = ( /obj/effect/floor_decal/corner_wide/mauve{ dir = 8 @@ -4159,46 +3977,58 @@ /turf/simulated/floor/tiled/freezer, /area/security/main) "ahL" = ( -/obj/structure/filingcabinet/filingcabinet{ - desc = "A large cabinet with drawers. There seems to be a layer of dust covering it." +/obj/structure/table/standard, +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 7 }, -/obj/structure/sign/nosmoking_2{ - pixel_x = -32 +/obj/item/pen{ + pixel_x = 5; + pixel_y = 5 }, -/obj/machinery/camera/network/security{ - c_tag = "Security - Evidence Storage Port"; +/obj/item/pen/red, +/turf/simulated/floor/tiled{ + name = "cooled floor"; + temperature = 278 + }, +/area/security/forensics_morgue) +"ahM" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, +/obj/machinery/camera/network/security{ + c_tag = "Security - Forensics Autopsy Chamber"; + dir = 1 + }, +/obj/item/modular_computer/console/preset/security/investigations, /turf/simulated/floor/tiled{ name = "cooled floor"; temperature = 278 }, -/area/security/investigations_storage) -"ahM" = ( -/obj/item/stool/padded{ - desc = "Apply butt. This particular stool looks tattered and old. Perhaps there have been budget cuts?"; - name = "Tattered Stool" - }, -/turf/simulated/floor/tiled{ - name = "cooled floor"; - temperature = 278 - }, -/area/security/investigations_storage) +/area/security/forensics_morgue) "ahN" = ( -/obj/machinery/alarm/cold{ - dir = 8; - pixel_x = 28 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled{ name = "cooled floor"; temperature = 278 }, -/area/security/investigations_storage) +/area/security/forensics_morgue) "ahO" = ( /obj/machinery/door/firedoor, +/obj/machinery/door/airlock/maintenance{ + req_one_access = list(4,68) + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plating, -/area/maintenance/security_starboard) +/area/security/forensics_office{ + name = "Security - Investigations Office" + }) "ahP" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -4523,89 +4353,49 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled/freezer, /area/security/main) -"aiD" = ( -/obj/structure/table/standard, -/obj/item/paper_bin, -/obj/item/pen, -/turf/simulated/floor/tiled{ - name = "cooled floor"; - temperature = 278 - }, -/area/security/investigations_storage) -"aiE" = ( -/obj/structure/table/standard, -/obj/item/folder/sec, -/turf/simulated/floor/tiled{ - name = "cooled floor"; - temperature = 278 - }, -/area/security/investigations_storage) "aiF" = ( -/obj/structure/plasticflaps/airtight, -/obj/machinery/door/airlock/security{ - name = "Evidence Storage"; - req_access = null; - req_one_access = list(4,68) +/obj/structure/table/standard, +/obj/item/autopsy_scanner, +/obj/item/surgery/scalpel{ + desc = "Cut, cut, and once more cut. This one is extra shiny!"; + name = "shiny scalpel" }, +/obj/machinery/light/small, /turf/simulated/floor/tiled{ name = "cooled floor"; temperature = 278 }, -/area/security/investigations_storage) +/area/security/forensics_morgue) "aiG" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 +/obj/structure/table/standard, +/obj/item/storage/box/masks{ + pixel_x = 5; + pixel_y = 5 }, -/obj/structure/sign/nosmoking_1{ - pixel_y = 32 +/obj/item/nitrilebox, +/turf/simulated/floor/tiled{ + name = "cooled floor"; + temperature = 278 }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled, -/area/security/investigations) -"aiH" = ( -/obj/machinery/firealarm/north, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 +/area/security/forensics_morgue) +"aiI" = ( +/obj/structure/disposalpipe/up, +/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers, +/obj/machinery/atmospherics/pipe/zpipe/up/supply, +/obj/structure/window/reinforced{ + dir = 4 }, /obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled, -/area/security/investigations) -"aiI" = ( -/obj/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/zpipe/up/supply{ - dir = 8 - }, -/obj/structure/disposalpipe/up{ - dir = 8 + d2 = 2; + icon_state = "0-2" }, /obj/structure/cable/green{ d1 = 16; d2 = 0; icon_state = "12-0" }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, /turf/simulated/floor/plating, -/area/security/investigations) -"aiJ" = ( -/turf/simulated/wall, -/area/security/investigations) +/area/maintenance/vault) "aiK" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/computer/arcade, @@ -4928,85 +4718,22 @@ /turf/simulated/floor/tiled/freezer, /area/security/main) "ajt" = ( -/obj/structure/window/reinforced{ - dir = 1 +/obj/structure/closet/crate, +/obj/random/loot, +/obj/effect/decal/cleanable/cobweb2{ + icon_state = "cobweb1" }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled{ - name = "cooled floor"; - temperature = 278 - }, -/area/security/investigations_storage) -"aju" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled{ - name = "cooled floor"; - temperature = 278 - }, -/area/security/investigations_storage) -"ajv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled{ - name = "cooled floor"; - temperature = 278 - }, -/area/security/investigations_storage) -"ajw" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -28 - }, -/obj/item/trash/cigbutt/cigarbutt, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/camera/network/security{ - c_tag = "Security - Investigations Division 1"; - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/security/investigations) -"ajx" = ( +/turf/simulated/floor/plating, +/area/maintenance/vault) +"ajy" = ( +/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/green{ - d1 = 1; - d2 = 2; icon_state = "1-2" }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/security/investigations) -"ajy" = ( -/obj/structure/closet/crate{ - name = "Case Folders Crate" - }, -/obj/item/folder/sec, -/obj/item/folder/sec, -/obj/item/folder/sec, -/obj/item/folder/sec, -/obj/item/folder/sec, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/security/investigations) +/turf/simulated/floor/plating, +/area/maintenance/vault) "ajz" = ( /obj/machinery/camera/network/research{ c_tag = "Research - Break Room" @@ -5305,29 +5032,10 @@ temperature = 278 }, /area/security/investigations_storage) -"akb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/machinery/light_switch{ - pixel_x = 26 - }, -/turf/simulated/floor/tiled{ - name = "cooled floor"; - temperature = 278 - }, -/area/security/investigations_storage) "akc" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/green{ d1 = 2; d2 = 4; @@ -5337,47 +5045,45 @@ dir = 4; icon_state = "pipe-c" }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc/low{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/turf/simulated/floor/tiled, -/area/security/investigations) -"akd" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled, -/area/security/investigations) -"ake" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" +/turf/simulated/floor/plating, +/area/maintenance/vault) +"akd" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/structure/closet{ - name = "Evidence Closet" +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/turf/simulated/floor/tiled, -/area/security/investigations) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/vault) +"ake" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/vault) "akf" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -5834,39 +5540,7 @@ temperature = 278 }, /area/security/investigations_storage) -"akX" = ( -/obj/structure/morgue{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/tiled{ - name = "cooled floor"; - temperature = 278 - }, -/area/security/investigations_storage) -"akY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc/low{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/turf/simulated/floor/tiled{ - name = "cooled floor"; - temperature = 278 - }, -/area/security/investigations_storage) "akZ" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/green{ @@ -5875,21 +5549,8 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/security/investigations) -"ala" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/security/investigations) -"alb" = ( -/obj/structure/stairs/east, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/security/investigations) +/turf/simulated/floor/plating, +/area/maintenance/vault) "alc" = ( /obj/effect/floor_decal/corner/mauve/diagonal, /turf/simulated/floor/tiled/white, @@ -6388,64 +6049,6 @@ /obj/effect/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled, /area/security/security_office) -"alW" = ( -/obj/machinery/door/airlock/security{ - name = "Evidence Storage"; - req_access = list(1) - }, -/obj/structure/plasticflaps/airtight, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled{ - name = "cooled floor"; - temperature = 278 - }, -/area/security/investigations_storage) -"alX" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ - name = "Investigations Division"; - req_one_access = list(4,68) - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/security/investigations) -"alY" = ( -/obj/machinery/door/firedoor, -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/security/investigations) -"alZ" = ( -/obj/machinery/door/firedoor, -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/security/investigations) "ama" = ( /obj/effect/floor_decal/corner_wide/mauve/full{ dir = 8 @@ -6978,13 +6581,7 @@ /obj/effect/floor_decal/corner/blue{ dir = 5 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, +/obj/structure/reagent_dispensers/water_cooler, /turf/simulated/floor/tiled, /area/security/training) "ane" = ( @@ -6998,6 +6595,8 @@ dir = 1; icon_state = "tube1" }, +/obj/structure/table/standard, +/obj/item/storage/box/cups, /turf/simulated/floor/tiled, /area/security/training) "anf" = ( @@ -7254,7 +6853,6 @@ /obj/machinery/light{ dir = 4 }, -/obj/machinery/power/port_gen/pacman, /turf/simulated/floor/plating, /area/engineering/storage_hard) "anI" = ( @@ -7461,12 +7059,6 @@ /turf/simulated/floor/tiled, /area/security/training) "aog" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, /obj/structure/cable/green{ d1 = 2; d2 = 4; @@ -7480,10 +7072,11 @@ c_tag = "Security - Second Floor Access"; dir = 4 }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 }, /turf/simulated/floor/tiled, /area/security/training) @@ -8076,6 +7669,22 @@ /area/maintenance/engineering) "apb" = ( /obj/structure/table/rack, +/obj/item/clothing/mask/gas/half{ + pixel_x = -6; + pixel_y = -4 + }, +/obj/item/clothing/mask/gas/half{ + pixel_x = -6; + pixel_y = -4 + }, +/obj/item/clothing/mask/gas/half{ + pixel_x = -6; + pixel_y = -4 + }, +/obj/item/clothing/mask/gas/half{ + pixel_x = -6; + pixel_y = -4 + }, /obj/item/clothing/mask/gas/alt{ pixel_x = -3; pixel_y = 3 @@ -8592,6 +8201,7 @@ d2 = 8; icon_state = "1-8" }, +/obj/machinery/power/radial_floodlight, /turf/simulated/floor/plating, /area/engineering/storage_hard) "apZ" = ( @@ -9677,7 +9287,7 @@ dir = 9 }, /obj/machinery/door/airlock/glass_security{ - name = "Training & Investigations"; + name = "Training Wing"; req_access = list(63) }, /turf/simulated/floor/tiled, @@ -9711,7 +9321,7 @@ }, /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/glass_security{ - name = "Training & Investigations"; + name = "Training Wing"; req_access = list(63) }, /turf/simulated/floor/tiled, @@ -12712,7 +12322,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 6 }, -/obj/structure/banner, +/obj/structure/banner/scc, /turf/simulated/floor/tiled, /area/bridge) "awP" = ( @@ -12749,7 +12359,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 10 }, -/obj/structure/banner, +/obj/structure/banner/scc, /turf/simulated/floor/tiled, /area/bridge) "awT" = ( @@ -13739,6 +13349,8 @@ /area/security/brig) "ayo" = ( /obj/structure/closet/secure_closet/scientist, +/obj/item/clothing/mask/gas/half, +/obj/item/clothing/mask/gas/half, /obj/item/clothing/gloves/latex/nitrile/tajara, /obj/item/clothing/gloves/latex/nitrile/tajara, /obj/item/clothing/gloves/latex/nitrile/unathi, @@ -20399,7 +20011,6 @@ d2 = 2; icon_state = "0-2" }, -/obj/structure/sign/flag/nanotrasen/left, /turf/simulated/floor/plating, /area/bridge) "aIL" = ( @@ -20416,7 +20027,6 @@ d2 = 2; icon_state = "0-2" }, -/obj/structure/sign/flag/nanotrasen/right, /turf/simulated/floor/plating, /area/bridge) "aIM" = ( @@ -20844,15 +20454,10 @@ /turf/simulated/floor/tiled, /area/security/lobby) "aJz" = ( -/obj/structure/table/standard, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 5 - }, -/obj/item/pen, /obj/structure/noticeboard{ pixel_y = 32 }, +/obj/structure/reagent_dispensers/water_cooler, /turf/simulated/floor/tiled, /area/security/lobby) "aJA" = ( @@ -20888,10 +20493,10 @@ /turf/simulated/floor/tiled, /area/security/lobby) "aJD" = ( -/obj/structure/banner, /obj/machinery/status_display{ pixel_y = 32 }, +/obj/structure/banner/scc, /turf/simulated/floor/tiled, /area/security/lobby) "aJE" = ( @@ -21398,6 +21003,9 @@ /obj/effect/floor_decal/corner_wide/paleblue{ dir = 10 }, +/obj/structure/sign/flag/scc/left{ + pixel_y = 30 + }, /turf/simulated/floor/tiled, /area/bridge) "aKu" = ( @@ -21891,6 +21499,13 @@ /obj/machinery/newscaster{ pixel_x = -27 }, +/obj/structure/table/standard, +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 5 + }, +/obj/item/pen, +/obj/item/storage/box/cups, /turf/simulated/floor/tiled, /area/security/lobby) "aLx" = ( @@ -25411,10 +25026,10 @@ /obj/effect/floor_decal/spline/fancy/wood{ dir = 4 }, -/obj/structure/banner, /obj/structure/window/reinforced{ dir = 4 }, +/obj/structure/banner/scc, /turf/simulated/floor/carpet, /area/bridge/meeting_room) "aRu" = ( @@ -25557,7 +25172,7 @@ d2 = 4; icon_state = "1-4" }, -/obj/structure/banner, +/obj/structure/banner/scc, /turf/simulated/floor/wood, /area/crew_quarters/captain) "aRG" = ( @@ -28889,10 +28504,10 @@ }, /obj/structure/window/reinforced, /obj/effect/floor_decal/spline/fancy/wood, -/obj/structure/banner, /obj/structure/window/reinforced{ dir = 4 }, +/obj/structure/banner/scc, /turf/simulated/floor/carpet, /area/bridge/meeting_room) "aXu" = ( @@ -30102,6 +29717,9 @@ /obj/effect/floor_decal/corner_wide/paleblue{ dir = 6 }, +/obj/structure/sign/flag/scc{ + pixel_x = 32 + }, /turf/simulated/floor/tiled/white, /area/medical/surgerywing) "aZj" = ( @@ -31327,11 +30945,11 @@ /obj/effect/floor_decal/corner/mauve{ dir = 5 }, -/obj/structure/sign/flag/nanotrasen/left{ +/obj/structure/sign/flag/scc/left{ pixel_x = -16; pixel_y = 30 }, -/obj/structure/sign/flag/nanotrasen/right{ +/obj/structure/sign/flag/scc/right{ pixel_x = 16; pixel_y = 30 }, @@ -40017,6 +39635,9 @@ /obj/effect/floor_decal/corner/paleblue{ dir = 5 }, +/obj/structure/sign/flag/scc{ + pixel_y = 32 + }, /turf/simulated/floor/tiled, /area/hallway/primary/central_one) "brE" = ( @@ -40389,6 +40010,9 @@ name = "borerstart" }, /obj/effect/floor_decal/corner/lime/diagonal, +/obj/structure/sign/flag/scc{ + pixel_y = -32 + }, /turf/simulated/floor/tiled/white, /area/medical/main_storage) "bsl" = ( @@ -45137,21 +44761,6 @@ }, /turf/simulated/floor/plating, /area/maintenance/research_port) -"bCo" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/maintenance/research_port) "bCp" = ( /obj/structure/cable{ d1 = 1; @@ -45221,6 +44830,7 @@ "bCv" = ( /obj/effect/floor_decal/corner/grey/diagonal, /obj/structure/closet/secure_closet/RD, +/obj/item/clothing/mask/gas/half, /obj/item/clothing/gloves/latex/nitrile/tajara, /obj/item/clothing/gloves/latex/nitrile/unathi, /turf/simulated/floor/tiled/white, @@ -45951,7 +45561,7 @@ /turf/simulated/floor/plating, /area/turbolift/command_sub) "bEc" = ( -/obj/random/loot, +/obj/effect/mazegen/module_helper/entry_exit, /turf/simulated/floor/plating, /area/maintenance/research_port) "bEe" = ( @@ -53938,6 +53548,9 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/structure/sign/flag/scc{ + pixel_y = 32 + }, /turf/simulated/floor/tiled, /area/hallway/primary/aft) "bXS" = ( @@ -54016,6 +53629,9 @@ /obj/machinery/door/firedoor/multi_tile{ dir = 1 }, +/obj/structure/sign/flag/scc{ + pixel_y = -32 + }, /turf/simulated/floor/tiled, /area/hallway/primary/aft) "bYf" = ( @@ -59255,6 +58871,46 @@ "coP" = ( /turf/simulated/wall/r_wall, /area/engineering/storage_eva) +"cpS" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/polarized{ + dir = 1; + id = "FT Op" + }, +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "FT Op" + }, +/obj/structure/window/reinforced/polarized{ + id = "FT Op" + }, +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "FT Op" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/security/forensics_office{ + name = "Security - Investigations Office" + }) +"cqu" = ( +/obj/machinery/door/firedoor, +/obj/structure/plasticflaps/airtight{ + layer = 2.5 + }, +/obj/machinery/door/airlock/security{ + name = "Autopsy Lab"; + req_access = list(4) + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/security/forensics_morgue) "cqF" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable{ @@ -59445,6 +59101,18 @@ }, /turf/simulated/floor/tiled/white, /area/crew_quarters/kitchen) +"cFc" = ( +/obj/structure/table/standard, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/effect/floor_decal/corner/blue{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/security/forensics_office{ + name = "Security - Investigations Office" + }) "cGg" = ( /obj/machinery/light/small/emergency{ dir = 8 @@ -59456,6 +59124,20 @@ /obj/machinery/appliance/cooker/fryer, /turf/simulated/floor/tiled/white, /area/crew_quarters/kitchen) +"cHJ" = ( +/obj/machinery/door/airlock/security{ + name = "Interrogation"; + req_access = list(1) + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/security/brig) "cJo" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/costume/imperium_monk, @@ -59521,6 +59203,18 @@ }, /turf/simulated/floor/wood, /area/lawoffice) +"cQE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/maintenance/security_starboard) "cRg" = ( /obj/effect/floor_decal/corner/blue{ dir = 9 @@ -59735,12 +59429,18 @@ /turf/simulated/floor/plating, /area/maintenance/research_port) "djF" = ( -/obj/item/broken_bottle, -/obj/item/material/shard, -/obj/effect/decal/cleanable/generic, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/maintenance/security_starboard) +/obj/structure/table/standard, +/obj/effect/floor_decal/corner/blue{ + dir = 6 + }, +/obj/effect/floor_decal/corner/blue{ + dir = 10 + }, +/obj/item/device/taperecorder, +/turf/simulated/floor/tiled/dark, +/area/security/forensics_office{ + name = "Security - Investigations Office" + }) "dmg" = ( /obj/structure/table/reinforced/wood, /turf/simulated/floor/wood, @@ -59749,6 +59449,25 @@ /mob/living/simple_animal/rat/hooded, /turf/simulated/floor/plating, /area/maintenance/vault) +"dob" = ( +/obj/effect/floor_decal/industrial/outline/grey, +/obj/structure/closet{ + name = "Evidence Closet" + }, +/obj/machinery/power/apc/low{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/security/forensics_laboratory) "doy" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/table/reinforced/wood, @@ -59829,6 +59548,18 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/old_white, /area/maintenance/medbay) +"dwz" = ( +/obj/machinery/photocopier, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/obj/effect/floor_decal/corner/blue{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/security/forensics_office{ + name = "Security - Investigations Office" + }) "dwP" = ( /obj/structure/grille, /obj/structure/window/reinforced, @@ -60011,9 +59742,9 @@ /turf/simulated/floor/tiled, /area/hallway/primary/aft) "dKN" = ( -/obj/random/junk, -/obj/effect/landmark{ - name = "Revenant" +/obj/effect/mazegen/generator/blockwise{ + mheight = 7; + mwidth = 5 }, /turf/simulated/floor/plating, /area/maintenance/research_port) @@ -60245,6 +59976,20 @@ }, /turf/simulated/floor/plating, /area/maintenance/medbay) +"etp" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/body_scanconsole{ + dir = 1; + layer = 3.01; + pixel_y = 6 + }, +/turf/simulated/floor/tiled{ + name = "cooled floor"; + temperature = 278 + }, +/area/security/forensics_morgue) "etG" = ( /obj/structure/table/rack, /obj/item/device/floor_painter, @@ -60311,6 +60056,15 @@ /obj/effect/floor_decal/corner_wide/paleblue/diagonal, /turf/simulated/floor/tiled/white, /area/bridge) +"eCY" = ( +/obj/structure/morgue{ + dir = 2 + }, +/turf/simulated/floor/tiled{ + name = "cooled floor"; + temperature = 278 + }, +/area/security/forensics_morgue) "eEQ" = ( /obj/effect/floor_decal/corner/green{ dir = 5 @@ -60379,6 +60133,27 @@ }, /turf/simulated/floor/grass/alt, /area/hydroponics) +"eJt" = ( +/obj/machinery/door/firedoor, +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/door/blast/regular{ + density = 0; + icon_state = "pdoor0"; + id = "Security Lockdown"; + name = "Security Blast Door"; + opacity = 0 + }, +/turf/simulated/floor/plating, +/area/security/forensics_laboratory) "eJy" = ( /obj/item/stack/rods, /turf/unsimulated/floor/asteroid/ash/rocky, @@ -60413,6 +60188,17 @@ /obj/effect/floor_decal/corner/mauve/diagonal, /turf/simulated/floor/tiled/white, /area/rnd/research) +"eLR" = ( +/obj/item/device/radio/intercom{ + broadcasting = 1; + dir = 1; + frequency = 1449; + listening = 0; + name = "Station Intercom (Interrogation)"; + pixel_y = -24 + }, +/turf/simulated/floor/tiled, +/area/security/brig) "eMv" = ( /obj/structure/disposalpipe/segment{ dir = 2; @@ -60434,6 +60220,33 @@ }, /turf/simulated/floor/tiled/white, /area/rnd/lab) +"eMM" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/item/modular_computer/console/preset/security/investigations, +/obj/effect/floor_decal/corner/blue{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/security/forensics_office{ + name = "Security - Investigations Office" + }) +"eNv" = ( +/obj/effect/floor_decal/corner/beige/diagonal, +/obj/structure/table/glass, +/obj/item/reagent_containers/spray/cleaner, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/white, +/area/security/forensics_laboratory) "eNR" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/generic, @@ -60476,6 +60289,13 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/vault) +"eQr" = ( +/obj/machinery/hologram/holopad, +/turf/simulated/floor/tiled{ + name = "cooled floor"; + temperature = 278 + }, +/area/security/forensics_morgue) "eSt" = ( /obj/structure/cable/green{ icon_state = "4-9" @@ -60505,6 +60325,17 @@ }, /turf/simulated/floor/plating, /area/maintenance/substation/supply) +"eXU" = ( +/obj/machinery/camera/network/security{ + c_tag = "Security - Interrogation"; + dir = 4; + network = list("Brig","Interrogation") + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/security/brig) "eZE" = ( /obj/machinery/alarm{ dir = 4; @@ -60532,6 +60363,12 @@ }, /turf/simulated/floor/tiled, /area/hallway/primary/port) +"fap" = ( +/obj/machinery/hologram/holopad, +/turf/simulated/floor/tiled/dark, +/area/security/forensics_office{ + name = "Security - Investigations Office" + }) "fbb" = ( /obj/structure/cable{ d1 = 4; @@ -60601,6 +60438,24 @@ /obj/structure/window/phoronreinforced, /turf/simulated/floor/plating, /area/medical/reception) +"fdP" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/security{ + name = "Investigations Office"; + req_access = list(4) + }, +/turf/simulated/floor/lino/grey, +/area/security/forensics_office{ + name = "Security - Investigations Office" + }) "feo" = ( /obj/machinery/door/airlock/maintenance{ req_access = list(12); @@ -60636,6 +60491,13 @@ "fij" = ( /turf/simulated/wall/r_wall, /area/hallway/primary/port) +"fiO" = ( +/obj/structure/closet/crate/freezer, +/turf/simulated/floor/tiled{ + name = "cooled floor"; + temperature = 278 + }, +/area/security/forensics_morgue) "fiR" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable/green{ @@ -60840,9 +60702,16 @@ /turf/simulated/floor/plating, /area/maintenance/research_port) "fFb" = ( -/obj/item/ammo_casing/c45/rubber, -/turf/simulated/floor/plating, -/area/maintenance/security_starboard) +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/lino/grey, +/area/security/forensics_office{ + name = "Security - Investigations Office" + }) "fFe" = ( /obj/structure/cable{ d1 = 2; @@ -60927,6 +60796,12 @@ }, /turf/simulated/floor/tiled, /area/hydroponics) +"fKx" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/security/brig) "fKZ" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/carpet/rubber, @@ -61047,15 +60922,40 @@ /obj/machinery/atmospherics/pipe/manifold4w/visible/black, /turf/simulated/floor/plating, /area/engineering/engine_waste) -"fXR" = ( -/obj/structure/table/standard, -/obj/item/clothing/head/beret/security{ - desc = "A beret with the security insignia emblazoned on it. It is horribly dirty and stained."; - name = "Smudged security beret" +"fXr" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/old, -/area/maintenance/security_starboard) +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/security/brig) +"fXR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/lino/grey, +/area/security/forensics_office{ + name = "Security - Investigations Office" + }) "fYe" = ( /obj/effect/landmark{ name = "borerstart" @@ -61140,6 +61040,22 @@ /obj/structure/cable/green, /turf/simulated/floor/plating, /area/maintenance/substation/civilian_west) +"gdq" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/maintenance{ + name = "Security Maintenance"; + req_access = list(63) + }, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/maintenance/vault) "gen" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/generic, @@ -61187,6 +61103,24 @@ /obj/structure/bed/chair/comfy/brown, /turf/simulated/floor/carpet, /area/library) +"ggV" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/security_starboard) +"ghU" = ( +/obj/structure/flora/pottedplant/random, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/security/forensics_laboratory) "gjz" = ( /obj/effect/floor_decal/corner/grey/diagonal, /obj/structure/disposalpipe/sortjunction/flipped{ @@ -61196,6 +61130,34 @@ }, /turf/simulated/floor/tiled/white, /area/crew_quarters/kitchen) +"gkK" = ( +/obj/structure/window/reinforced, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled{ + name = "cooled floor"; + temperature = 278 + }, +/area/security/forensics_morgue) +"gmg" = ( +/obj/structure/table/standard, +/obj/item/paper_bin{ + pixel_x = 2; + pixel_y = 5 + }, +/obj/item/pen, +/turf/simulated/floor/tiled{ + name = "cooled floor"; + temperature = 278 + }, +/area/security/investigations_storage) "gmt" = ( /obj/effect/floor_decal/industrial/warning/dust{ dir = 8 @@ -61430,6 +61392,17 @@ }, /turf/simulated/floor/tiled/white, /area/medical/medbay2) +"gNS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/security/forensics_office{ + name = "Security - Investigations Office" + }) "gOO" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -61483,6 +61456,23 @@ }, /turf/simulated/floor/plating, /area/maintenance/security_starboard) +"gWk" = ( +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/table/rack, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/item/stack/packageWrap, +/obj/item/device/hand_labeler, +/turf/simulated/floor/lino/grey, +/area/security/forensics_office{ + name = "Security - Investigations Office" + }) "gXa" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/iv_drip, @@ -61721,6 +61711,20 @@ }, /turf/simulated/floor/carpet, /area/lawoffice) +"hoG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/light_switch{ + pixel_x = -24 + }, +/obj/structure/cable/green, +/obj/machinery/power/apc/low{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/ramp/bottom, +/area/security/forensics_morgue) "hoV" = ( /obj/effect/floor_decal/corner/lime/diagonal, /turf/simulated/floor/tiled/white, @@ -61956,6 +61960,13 @@ }, /turf/simulated/floor/tiled/white, /area/rnd/chemistry) +"hIP" = ( +/obj/structure/table/standard, +/turf/simulated/floor/tiled{ + name = "cooled floor"; + temperature = 278 + }, +/area/security/forensics_morgue) "hKl" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/closet/crate, @@ -61981,6 +61992,11 @@ /obj/machinery/door/firedoor, /turf/simulated/floor/plating, /area/maintenance/vault) +"hLJ" = ( +/obj/effect/floor_decal/corner/beige/diagonal, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/white, +/area/security/forensics_laboratory) "hMF" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -62213,6 +62229,15 @@ }, /turf/simulated/floor/plating, /area/maintenance/substation/supply) +"ibm" = ( +/obj/machinery/light_switch{ + pixel_x = 11; + pixel_y = -26 + }, +/turf/simulated/floor/lino/grey, +/area/security/forensics_office{ + name = "Security - Investigations Office" + }) "icb" = ( /obj/structure/cable{ d1 = 2; @@ -62307,6 +62332,12 @@ /obj/random/gloves, /turf/simulated/floor/plating, /area/maintenance/research_port) +"imd" = ( +/obj/structure/sign/flag/scc{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/central_one) "ipL" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -62346,6 +62377,11 @@ }, /turf/simulated/floor/reinforced, /area/assembly/chargebay) +"itx" = ( +/obj/effect/floor_decal/corner/beige/diagonal, +/obj/machinery/disposal, +/turf/simulated/floor/tiled/white, +/area/security/forensics_laboratory) "ivh" = ( /obj/structure/disposalpipe/sortjunction{ dir = 4; @@ -62433,6 +62469,39 @@ }, /turf/simulated/floor/tiled/old, /area/maintenance/vault) +"iHM" = ( +/obj/effect/floor_decal/corner/blue{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/dark, +/area/security/forensics_office{ + name = "Security - Investigations Office" + }) +"iIv" = ( +/obj/machinery/door/firedoor, +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/door/blast/regular{ + density = 0; + icon_state = "pdoor0"; + id = "Security Lockdown"; + name = "Security Blast Door"; + opacity = 0 + }, +/turf/simulated/floor/plating, +/area/security/forensics_laboratory) "iKN" = ( /obj/machinery/door/firedoor, /obj/structure/plasticflaps, @@ -62597,14 +62666,20 @@ /turf/simulated/floor/tiled/asteroid/airless, /area/outpost/mining_main/eva) "jdn" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/standard, -/obj/item/ammo_magazine/c45m/empty, -/obj/item/ammo_casing/c45/rubber, -/obj/item/ammo_casing/c45/rubber, -/obj/item/ammo_casing/c45/rubber, -/turf/simulated/floor/plating, -/area/maintenance/security_starboard) +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/lino/grey, +/area/security/forensics_office{ + name = "Security - Investigations Office" + }) "jjD" = ( /obj/machinery/door/firedoor, /obj/structure/window/reinforced{ @@ -62617,6 +62692,14 @@ /obj/structure/window/reinforced, /turf/simulated/floor/plating, /area/rnd/lab) +"jkj" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/security/forensics_office{ + name = "Security - Investigations Office" + }) "jky" = ( /obj/machinery/door/firedoor, /obj/effect/floor_decal/industrial/loading/yellow{ @@ -63014,6 +63097,9 @@ /obj/item/material/ashtray/bronze, /turf/simulated/floor/carpet, /area/lawoffice/consular) +"klC" = ( +/turf/simulated/wall, +/area/security/forensics_morgue) "kmW" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled, @@ -63070,15 +63156,15 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, /obj/structure/cable{ icon_state = "1-8" }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, /turf/simulated/floor/plating, /area/maintenance/security_starboard) "kwM" = ( @@ -63109,6 +63195,16 @@ }, /turf/simulated/floor/plating, /area/maintenance/research_port) +"kzx" = ( +/obj/structure/table/standard, +/obj/item/folder/sec, +/obj/effect/floor_decal/corner/blue{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/security/forensics_office{ + name = "Security - Investigations Office" + }) "kzE" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -63268,6 +63364,12 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/old, /area/maintenance/research_port) +"kUL" = ( +/obj/structure/bed/chair/office/dark, +/turf/simulated/floor/tiled/dark, +/area/security/forensics_office{ + name = "Security - Investigations Office" + }) "kVx" = ( /obj/effect/floor_decal/corner/paleblue/diagonal, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -63321,6 +63423,24 @@ /obj/effect/floor_decal/industrial/warning/corner, /turf/simulated/floor/plating, /area/maintenance/medbay) +"kYT" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/polarized{ + dir = 1; + id = "FT Op" + }, +/obj/structure/window/reinforced/polarized{ + id = "FT Op" + }, +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "FT Op" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/security/forensics_office{ + name = "Security - Investigations Office" + }) "kZT" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/maintenance, @@ -63358,6 +63478,11 @@ }, /turf/simulated/floor/plating, /area/maintenance/security_starboard) +"leW" = ( +/obj/structure/table/standard, +/obj/item/storage/box/cups, +/turf/simulated/floor/tiled, +/area/security/brig) "leY" = ( /obj/effect/floor_decal/industrial/warning{ dir = 1 @@ -63500,6 +63625,18 @@ /obj/structure/grille/broken, /turf/simulated/floor/airless, /area/maintenance/cargo) +"lrT" = ( +/obj/effect/floor_decal/corner/beige/diagonal, +/obj/item/stool/padded, +/turf/simulated/floor/tiled/white, +/area/security/forensics_laboratory) +"ltW" = ( +/obj/machinery/firealarm/west, +/obj/structure/cable/green{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/security/forensics_laboratory) "luk" = ( /obj/machinery/atmospherics/unary/freezer{ icon_state = "freezer" @@ -63526,6 +63663,15 @@ }, /turf/simulated/floor/tiled, /area/security/nuke_storage) +"lvP" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled{ + name = "cooled floor"; + temperature = 278 + }, +/area/security/forensics_morgue) "lyh" = ( /obj/machinery/camera/network/engineering{ c_tag = "Maintenance - Atmospherics" @@ -63948,6 +64094,11 @@ /obj/machinery/recharger, /turf/simulated/floor/carpet, /area/quartermaster/break_room) +"mqs" = ( +/obj/structure/table/standard, +/obj/item/device/flashlight/lamp, +/turf/simulated/floor/tiled, +/area/security/brig) "mqT" = ( /obj/machinery/door/firedoor, /obj/structure/window/reinforced{ @@ -64110,6 +64261,17 @@ /obj/item/stack/cable_coil, /turf/simulated/floor/plating, /area/maintenance/engineering) +"mFU" = ( +/obj/structure/sink/kitchen{ + dir = 8; + name = "Autopsy sink"; + pixel_x = 20 + }, +/turf/simulated/floor/tiled{ + name = "cooled floor"; + temperature = 278 + }, +/area/security/forensics_morgue) "mGm" = ( /obj/machinery/atmospherics/pipe/zpipe/up/supply{ dir = 8 @@ -64362,6 +64524,35 @@ /obj/structure/bed/chair/office/light, /turf/simulated/floor/tiled, /area/medical/first_responder) +"nbB" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/security/brig) +"nbN" = ( +/obj/effect/floor_decal/corner/beige/diagonal, +/obj/machinery/light_switch{ + pixel_y = -26 + }, +/obj/structure/closet/crate, +/obj/machinery/light, +/obj/item/folder/sec, +/obj/item/folder/sec, +/obj/item/folder/sec, +/obj/item/folder/sec, +/obj/item/folder/sec, +/turf/simulated/floor/tiled/white, +/area/security/forensics_laboratory) "ncB" = ( /obj/structure/table/standard, /obj/effect/decal/cleanable/dirt, @@ -64379,16 +64570,26 @@ /turf/simulated/floor/plating, /area/maintenance/vault) "ndP" = ( -/obj/item/trash/cigbutt, -/obj/item/trash/cigbutt, -/obj/item/trash/cigbutt, -/turf/simulated/floor/plating, -/area/maintenance/security_starboard) +/turf/simulated/floor/lino/grey, +/area/security/forensics_office{ + name = "Security - Investigations Office" + }) "ndR" = ( /obj/machinery/door/firedoor, /obj/machinery/smartfridge/secure, /turf/simulated/floor/tiled/white, /area/crew_quarters/kitchen) +"nfX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/security/forensics_office{ + name = "Security - Investigations Office" + }) "nhV" = ( /obj/effect/floor_decal/corner/grey/diagonal, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -64451,6 +64652,16 @@ /obj/effect/decal/cleanable/blood/splatter, /turf/simulated/floor/tiled/freezer, /area/maintenance/medbay) +"nmV" = ( +/obj/effect/floor_decal/industrial/outline/grey, +/obj/structure/closet{ + name = "Evidence Closet" + }, +/turf/simulated/floor/tiled{ + name = "cooled floor"; + temperature = 278 + }, +/area/security/investigations_storage) "nnj" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -64512,6 +64723,19 @@ /obj/effect/decal/cleanable/generic, /turf/simulated/floor/carpet/rubber, /area/maintenance/workshop) +"nrw" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/lino/grey, +/area/security/forensics_office{ + name = "Security - Investigations Office" + }) "nsd" = ( /obj/machinery/access_button{ command = "cycle_exterior"; @@ -64538,6 +64762,20 @@ }, /turf/simulated/floor/tiled, /area/security/brig/control_room) +"ntF" = ( +/obj/structure/filingcabinet{ + pixel_x = -7 + }, +/obj/structure/filingcabinet{ + pixel_x = 8 + }, +/obj/effect/floor_decal/corner/blue{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/security/forensics_office{ + name = "Security - Investigations Office" + }) "nug" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/floor_decal/corner/white{ @@ -64545,6 +64783,27 @@ }, /turf/simulated/floor/plating, /area/maintenance/medbay) +"nvu" = ( +/obj/structure/table/standard, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/effect/floor_decal/corner/blue{ + dir = 10 + }, +/obj/effect/floor_decal/corner/blue{ + dir = 9 + }, +/obj/machinery/light, +/obj/item/device/taperecorder, +/obj/machinery/camera/network/security{ + c_tag = "Security - Investigations Office"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/security/forensics_office{ + name = "Security - Investigations Office" + }) "nxq" = ( /obj/item/robot_parts/robot_suit, /obj/effect/spider/stickyweb, @@ -64619,6 +64878,23 @@ /obj/random/loot, /turf/simulated/floor/tiled/old_white, /area/maintenance/medbay) +"nKn" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/effect/floor_decal/corner/blue{ + dir = 5 + }, +/obj/effect/floor_decal/corner/blue{ + dir = 9 + }, +/obj/machinery/firealarm/north, +/obj/structure/table/standard, +/obj/item/paper_scanner, +/turf/simulated/floor/tiled/dark, +/area/security/forensics_office{ + name = "Security - Investigations Office" + }) "nKv" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/reagent_dispensers/fueltank, @@ -64640,6 +64916,23 @@ /obj/structure/bed/chair/office/light, /turf/simulated/floor/carpet/blue, /area/maintenance/medbay) +"nLD" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/floor_decal/corner/blue{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/security/brig) "nLT" = ( /turf/simulated/wall/r_wall, /area/security/brig/control_room) @@ -65051,6 +65344,13 @@ /obj/machinery/meter, /turf/simulated/floor/plating, /area/maintenance/engineering) +"owA" = ( +/obj/structure/reagent_dispensers/water_cooler, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/security/brig) "oxt" = ( /obj/machinery/atmospherics/binary/pump{ dir = 4; @@ -65144,6 +65444,17 @@ /obj/structure/table/wood/gamblingtable, /turf/simulated/floor/lino/grey, /area/engineering/foyer) +"oLd" = ( +/obj/effect/floor_decal/corner/blue{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/security/forensics_office{ + name = "Security - Investigations Office" + }) "oMh" = ( /obj/item/storage/box/fancy/crayons/chalkbox, /obj/structure/table/wood/gamblingtable, @@ -65152,6 +65463,33 @@ "oNS" = ( /turf/simulated/wall/r_wall, /area/lawoffice/consular) +"oOw" = ( +/obj/effect/floor_decal/corner/beige/diagonal, +/obj/structure/table/glass, +/obj/item/device/mass_spectrometer{ + pixel_x = -8 + }, +/obj/item/device/mass_spectrometer{ + pixel_x = 8 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -28 + }, +/turf/simulated/floor/tiled/white, +/area/security/forensics_laboratory) +"oQQ" = ( +/obj/structure/filingcabinet/filingcabinet{ + desc = "A large cabinet with drawers. There seems to be a layer of dust covering it." + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled{ + name = "cooled floor"; + temperature = 278 + }, +/area/security/investigations_storage) "oQU" = ( /obj/structure/bed/chair/office/dark{ dir = 8 @@ -65258,6 +65596,10 @@ }, /turf/simulated/floor/wood, /area/maintenance/bar) +"pam" = ( +/obj/machinery/power/port_gen/pacman, +/turf/simulated/floor/plating, +/area/engineering/storage_hard) "pch" = ( /turf/simulated/floor/plating, /area/maintenance/workshop) @@ -65315,18 +65657,19 @@ /turf/simulated/floor/plating, /area/maintenance/bar) "pfO" = ( -/obj/structure/table/steel, -/obj/item/reagent_containers/food/drinks/bottle{ - icon_state = "beer"; - pixel_y = 16 +/obj/structure/noticeboard{ + layer = 3.3; + pixel_x = 32; + pixel_y = 2 }, -/obj/item/reagent_containers/food/drinks/bottle{ - icon_state = "beer"; - pixel_x = 6; - pixel_y = 6 +/obj/machinery/papershredder, +/obj/effect/floor_decal/corner/blue{ + dir = 6 }, -/turf/simulated/floor/plating, -/area/maintenance/security_starboard) +/turf/simulated/floor/tiled/dark, +/area/security/forensics_office{ + name = "Security - Investigations Office" + }) "pgz" = ( /obj/structure/cable{ d1 = 1; @@ -65535,6 +65878,20 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/wood, /area/maintenance/bar) +"prr" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/polarized{ + dir = 1; + id = "FT Op" + }, +/obj/structure/window/reinforced/polarized{ + id = "FT Op" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/security/forensics_office{ + name = "Security - Investigations Office" + }) "prS" = ( /obj/structure/table/wood, /obj/random/loot, @@ -65831,6 +66188,16 @@ }, /turf/simulated/floor/plating, /area/maintenance/engineering) +"pZE" = ( +/obj/effect/floor_decal/corner/beige/diagonal, +/obj/structure/table/glass, +/obj/item/storage/box/sharps{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/storage/box/sharps, +/turf/simulated/floor/tiled/white, +/area/security/forensics_laboratory) "pZF" = ( /obj/structure/cable{ d1 = 1; @@ -65858,6 +66225,20 @@ "qdR" = ( /turf/simulated/wall/r_wall, /area/maintenance/workshop) +"qea" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/floor_decal/corner_wide/paleblue{ + dir = 10 + }, +/obj/structure/sign/flag/scc/right{ + pixel_y = 30 + }, +/turf/simulated/floor/tiled, +/area/bridge) "qgs" = ( /obj/structure/table/rack, /obj/random/loot, @@ -65885,6 +66266,19 @@ }, /turf/simulated/floor/plating, /area/maintenance/research_port) +"qkU" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/requests_console{ + department = "Investigations"; + departmentType = 5; + pixel_x = -32 + }, +/turf/simulated/floor/lino/grey, +/area/security/forensics_office{ + name = "Security - Investigations Office" + }) "qow" = ( /obj/machinery/button/remote/blast_door{ id = "messhallshutters"; @@ -66112,6 +66506,12 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/carpet/blue, /area/maintenance/medbay) +"qHy" = ( +/obj/structure/coatrack, +/turf/simulated/floor/lino/grey, +/area/security/forensics_office{ + name = "Security - Investigations Office" + }) "qJD" = ( /obj/machinery/alarm{ pixel_y = 28 @@ -66320,6 +66720,10 @@ }, /turf/simulated/floor/plating, /area/maintenance/substation/supply) +"qYu" = ( +/obj/machinery/light/small, +/turf/simulated/floor/tiled, +/area/security/brig) "qYx" = ( /obj/effect/decal/cleanable/dirt, /obj/random/loot, @@ -66348,6 +66752,17 @@ /obj/structure/reagent_dispensers/watertank, /turf/simulated/floor/tiled/old, /area/maintenance/engineering) +"raN" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/table/rack, +/obj/item/storage/briefcase/crimekit{ + pixel_y = 16 + }, +/obj/item/storage/briefcase/crimekit, +/turf/simulated/floor/tiled, +/area/security/forensics_laboratory) "rbT" = ( /obj/structure/closet, /obj/random/loot, @@ -66521,21 +66936,17 @@ /turf/simulated/floor/tiled, /area/quartermaster/storage) "rqe" = ( -/obj/structure/table/steel, -/obj/item/reagent_containers/food/drinks/bottle{ - icon_state = "beer"; - pixel_y = 16 +/obj/item/modular_computer/console/preset/security/investigations, +/obj/effect/floor_decal/corner/blue{ + dir = 6 }, -/obj/item/reagent_containers/food/drinks/bottle{ - icon_state = "beer"; - pixel_x = 6; - pixel_y = 6 - }, -/obj/machinery/light/small/emergency{ +/obj/machinery/light{ dir = 4 }, -/turf/simulated/floor/plating, -/area/maintenance/security_starboard) +/turf/simulated/floor/tiled/dark, +/area/security/forensics_office{ + name = "Security - Investigations Office" + }) "rsz" = ( /turf/simulated/floor/airless, /area/maintenance/cargo) @@ -66764,6 +67175,17 @@ /obj/structure/lattice/catwalk/indoor/grate, /turf/simulated/floor/plating, /area/maintenance/security_starboard) +"rMJ" = ( +/obj/effect/floor_decal/corner/beige/diagonal, +/obj/structure/table/glass, +/obj/machinery/reagentgrinder{ + pixel_y = 7 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/security/forensics_laboratory) "rNi" = ( /obj/effect/floor_decal/corner/green{ dir = 9 @@ -66822,6 +67244,14 @@ /obj/machinery/door/firedoor, /turf/simulated/floor/tiled/ramp/bottom, /area/maintenance/vault) +"rVo" = ( +/obj/structure/table/standard, +/obj/item/device/taperecorder, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/security/brig) "rWE" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/cyan, /obj/effect/decal/cleanable/dirt, @@ -66886,6 +67316,12 @@ }, /turf/simulated/floor/plating, /area/maintenance/medbay) +"sdh" = ( +/obj/effect/floor_decal/corner/beige/diagonal, +/obj/structure/table/glass, +/obj/item/folder/sec, +/turf/simulated/floor/tiled/white, +/area/security/forensics_laboratory) "sdW" = ( /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, @@ -67119,6 +67555,9 @@ /obj/random/tech_supply, /turf/simulated/floor/plating, /area/maintenance/cargo) +"srX" = ( +/turf/simulated/wall, +/area/security/forensics_laboratory) "ssY" = ( /obj/effect/decal/cleanable/dirt, /obj/item/stack/tile/wood, @@ -67228,6 +67667,15 @@ }, /turf/simulated/floor/plating, /area/lawoffice/consular) +"sJu" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -28 + }, +/turf/simulated/floor/lino/grey, +/area/security/forensics_office{ + name = "Security - Investigations Office" + }) "sJK" = ( /obj/effect/floor_decal/industrial/hatch/yellow, /obj/machinery/recharge_station, @@ -67422,6 +67870,15 @@ }, /turf/simulated/floor/tiled, /area/assembly/robotics) +"sYi" = ( +/obj/effect/floor_decal/corner/beige/diagonal, +/obj/structure/table/glass, +/obj/machinery/microscope{ + pixel_x = 5; + pixel_y = 3 + }, +/turf/simulated/floor/tiled/white, +/area/security/forensics_laboratory) "sYI" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -67460,6 +67917,21 @@ }, /turf/simulated/floor/plating, /area/maintenance/research_port) +"tek" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/alarm/cold{ + pixel_y = 28 + }, +/turf/simulated/floor/tiled{ + name = "cooled floor"; + temperature = 278 + }, +/area/security/forensics_morgue) "tgD" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -67602,6 +68074,20 @@ /obj/item/mirror, /turf/simulated/floor/wood, /area/maintenance/bar) +"tsx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/maintenance/security_starboard) "tti" = ( /obj/machinery/door/firedoor, /obj/structure/window/reinforced{ @@ -67735,6 +68221,24 @@ }, /turf/simulated/floor/tiled/freezer, /area/crew_quarters/locker/locker_toilet) +"tCH" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/polarized{ + dir = 1; + id = "FT Op" + }, +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "FT Op" + }, +/obj/structure/window/reinforced/polarized{ + id = "FT Op" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/security/forensics_office{ + name = "Security - Investigations Office" + }) "tCT" = ( /obj/machinery/door/firedoor, /obj/structure/cable{ @@ -67849,19 +68353,20 @@ /turf/simulated/floor/plating, /area/maintenance/vault) "tHM" = ( -/obj/structure/table/steel, -/obj/item/reagent_containers/food/drinks/bottle{ - icon_state = "beer"; - item_state = "beer"; - pixel_y = 16 +/obj/structure/table/standard, +/obj/machinery/button/switch/windowtint{ + id = "FT Op"; + pixel_x = 28; + pixel_y = 7 }, -/obj/item/reagent_containers/food/drinks/bottle{ - icon_state = "beer"; - pixel_x = 6; - pixel_y = 6 +/obj/effect/floor_decal/corner/blue{ + dir = 6 }, -/turf/simulated/floor/tiled, -/area/maintenance/security_starboard) +/obj/item/book/manual/wiki/security_space_law, +/turf/simulated/floor/tiled/dark, +/area/security/forensics_office{ + name = "Security - Investigations Office" + }) "tII" = ( /obj/structure/bookcase/libraryspawn/fiction, /turf/simulated/floor/carpet, @@ -67873,6 +68378,10 @@ /obj/effect/floor_decal/corner/grey/diagonal, /turf/simulated/floor/tiled/white, /area/crew_quarters/bar) +"tJU" = ( +/obj/effect/mazegen/module_loot/trash, +/turf/simulated/floor/plating, +/area/maintenance/research_port) "tKo" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/flour, @@ -67923,6 +68432,13 @@ temperature = 278 }, /area/crew_quarters/kitchen/freezer) +"tOQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/floor_decal/corner/blue{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/security/forensics_laboratory) "tPg" = ( /obj/structure/bed/chair/comfy/black{ dir = 4 @@ -68059,6 +68575,15 @@ /obj/random/junk, /turf/simulated/floor/carpet, /area/maintenance/bar) +"tZz" = ( +/obj/structure/flora/pottedplant/random, +/obj/machinery/recharger/wallcharger{ + pixel_y = 22 + }, +/turf/simulated/floor/lino/grey, +/area/security/forensics_office{ + name = "Security - Investigations Office" + }) "uaI" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/floor_decal/industrial/outline/yellow, @@ -68284,10 +68809,20 @@ /turf/simulated/floor/tiled/old, /area/maintenance/vault) "ump" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/decal/cleanable/cobweb2, -/turf/simulated/floor/plating, -/area/maintenance/security_starboard) +/obj/machinery/disposal, +/obj/effect/floor_decal/corner/blue{ + dir = 6 + }, +/obj/effect/floor_decal/corner/blue{ + dir = 5 + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/security/forensics_office{ + name = "Security - Investigations Office" + }) "uni" = ( /obj/structure/disposalpipe/segment, /obj/machinery/light/small/emergency{ @@ -68527,15 +69062,16 @@ /turf/simulated/floor/carpet/rubber, /area/maintenance/workshop) "uOu" = ( -/obj/effect/floor_decal/corner/blue{ +/obj/effect/floor_decal/corner/beige/diagonal, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, -/obj/structure/bed/chair/office/dark, -/obj/effect/landmark/start{ - name = "Security Officer" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 }, -/turf/simulated/floor/tiled/dark, -/area/security/vacantoffice2) +/obj/machinery/hologram/holopad, +/turf/simulated/floor/tiled/white, +/area/security/forensics_laboratory) "uRt" = ( /obj/effect/floor_decal/corner/grey/diagonal, /obj/structure/disposalpipe/segment{ @@ -68617,6 +69153,17 @@ }, /turf/simulated/floor/plating, /area/maintenance/cargo) +"uXN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/dark, +/area/security/forensics_office{ + name = "Security - Investigations Office" + }) "vak" = ( /obj/structure/flora/ausbushes/leafybush{ pixel_x = -2; @@ -68646,6 +69193,15 @@ /obj/effect/decal/cleanable/generic, /turf/simulated/floor/carpet/rubber, /area/maintenance/workshop) +"vdx" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/security/forensics_office{ + name = "Security - Investigations Office" + }) "vdA" = ( /obj/structure/door_assembly/multi_tile{ anchored = 1; @@ -68703,6 +69259,17 @@ /obj/structure/grille, /turf/simulated/floor/plating, /area/medical/medbay2) +"vgA" = ( +/obj/effect/floor_decal/corner/beige/diagonal, +/obj/machinery/dnaforensics{ + pixel_y = 1 + }, +/obj/structure/table/glass, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/security/forensics_laboratory) "vgB" = ( /turf/simulated/wall/r_wall, /area/assembly/chargebay) @@ -68731,6 +69298,11 @@ }, /turf/simulated/floor/tiled, /area/hallway/primary/aft) +"vhY" = ( +/obj/effect/floor_decal/corner/beige/diagonal, +/obj/structure/table/glass, +/turf/simulated/floor/tiled/white, +/area/security/forensics_laboratory) "viQ" = ( /obj/structure/cable{ d1 = 4; @@ -68846,6 +69418,18 @@ }, /turf/simulated/wall, /area/assembly/chargebay) +"vsB" = ( +/obj/item/device/camera_film, +/obj/item/device/camera{ + desc = "A one use - polaroid camera. 30 photos left."; + name = "detectives camera"; + pictures_left = 30 + }, +/obj/structure/closet/secure_closet/investigator, +/turf/simulated/floor/lino/grey, +/area/security/forensics_office{ + name = "Security - Investigations Office" + }) "vtA" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable/green{ @@ -68950,6 +69534,22 @@ "vFG" = ( /turf/simulated/wall, /area/security/training) +"vGn" = ( +/obj/item/stool/padded, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/tiled{ + name = "cooled floor"; + temperature = 278 + }, +/area/security/investigations_storage) "vGu" = ( /obj/structure/cable/green{ d1 = 1; @@ -69179,6 +69779,19 @@ }, /turf/simulated/floor/plating, /area/maintenance/library) +"vSb" = ( +/obj/structure/trash_pile, +/turf/simulated/floor/plating, +/area/maintenance/vault) +"vTy" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/security/forensics_office{ + name = "Security - Investigations Office" + }) "vTE" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/airless, @@ -69224,6 +69837,16 @@ /obj/structure/stairs/north, /turf/simulated/floor/tiled/ramp, /area/hallway/primary/aft) +"vZF" = ( +/obj/effect/floor_decal/industrial/outline/grey, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled{ + name = "cooled floor"; + temperature = 278 + }, +/area/security/investigations_storage) "wbf" = ( /obj/structure/cable{ d1 = 1; @@ -69256,6 +69879,15 @@ }, /turf/simulated/floor/plating, /area/maintenance/vault) +"wdB" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/power/radial_floodlight, +/turf/simulated/floor/plating, +/area/engineering/storage_hard) "wee" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -69522,6 +70154,16 @@ }, /turf/simulated/floor/plating, /area/maintenance/cargo) +"wwF" = ( +/obj/machinery/optable{ + name = "Autopsy Table" + }, +/obj/effect/decal/warning_stripes, +/turf/simulated/floor/tiled{ + name = "cooled floor"; + temperature = 278 + }, +/area/security/forensics_morgue) "wwP" = ( /obj/structure/table/reinforced/steel, /obj/random/contraband, @@ -69603,6 +70245,9 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/freezer, /area/maintenance/medbay) +"wHH" = ( +/turf/simulated/floor/tiled, +/area/security/forensics_laboratory) "wIa" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -69634,11 +70279,6 @@ "wLt" = ( /turf/simulated/wall/r_wall, /area/security/brig/processing) -"wOo" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/ammo_casing/c45/rubber, -/turf/simulated/floor/tiled/old, -/area/maintenance/security_starboard) "wOW" = ( /obj/effect/floor_decal/industrial/warning{ dir = 1 @@ -69773,6 +70413,17 @@ }, /turf/simulated/floor/tiled/white, /area/rnd/lab) +"xcZ" = ( +/obj/effect/floor_decal/corner/beige/diagonal, +/obj/structure/table/glass, +/obj/item/paper_scanner, +/obj/machinery/requests_console{ + department = "Forensics Lab"; + departmentType = 5; + pixel_y = 30 + }, +/turf/simulated/floor/tiled/white, +/area/security/forensics_laboratory) "xdi" = ( /obj/machinery/door/firedoor, /obj/structure/window/reinforced{ @@ -69899,6 +70550,24 @@ }, /turf/simulated/floor/tiled, /area/engineering/engineering_hallway_main) +"xkB" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/vault) "xlC" = ( /obj/machinery/optable{ name = "Autopsy Table" @@ -70053,12 +70722,38 @@ }, /turf/simulated/floor/plating, /area/maintenance/cargo) +"xxd" = ( +/obj/effect/floor_decal/corner/beige/diagonal, +/obj/structure/table/glass, +/obj/item/storage/box/swabs{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/storage/box/fancy/vials, +/turf/simulated/floor/tiled/white, +/area/security/forensics_laboratory) +"xxH" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/security/brig) "xyO" = ( /obj/effect/floor_decal/industrial/warning{ dir = 6 }, /turf/simulated/floor/reinforced, /area/assembly/robotics) +"xzX" = ( +/obj/effect/floor_decal/corner/beige/diagonal, +/obj/structure/table/glass, +/obj/item/storage/box/slides{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/storage/box/syringes, +/turf/simulated/floor/tiled/white, +/area/security/forensics_laboratory) "xAe" = ( /obj/structure/table/reinforced/steel, /obj/random/toolbox, @@ -70080,6 +70775,10 @@ }, /turf/simulated/floor/plating, /area/lawoffice) +"xBx" = ( +/obj/effect/floor_decal/corner/beige/diagonal, +/turf/simulated/floor/tiled/white, +/area/security/forensics_laboratory) "xBz" = ( /obj/effect/floor_decal/industrial/warning/dust, /turf/simulated/floor/tiled/asteroid/airless, @@ -70109,6 +70808,20 @@ }, /turf/simulated/floor/plating, /area/maintenance/library) +"xEE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/security_starboard) "xFo" = ( /obj/structure/table/standard, /obj/effect/floor_decal/corner/purple/full{ @@ -70246,6 +70959,14 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/vault) +"xOt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled{ + name = "cooled floor"; + temperature = 278 + }, +/area/security/forensics_morgue) "xOM" = ( /obj/machinery/door/firedoor, /obj/structure/grille, @@ -70319,6 +71040,14 @@ }, /turf/simulated/floor/plating, /area/maintenance/medbay) +"yaL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled{ + name = "cooled floor"; + temperature = 278 + }, +/area/security/investigations_storage) "ych" = ( /obj/machinery/atmospherics/pipe/manifold/hidden{ dir = 1 @@ -70365,6 +71094,16 @@ temperature = 278 }, /area/crew_quarters/kitchen/freezer) +"yfl" = ( +/obj/structure/table/standard, +/obj/item/folder/sec, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/item/device/hand_labeler, +/turf/simulated/floor/tiled{ + name = "cooled floor"; + temperature = 278 + }, +/area/security/investigations_storage) "yft" = ( /obj/structure/table/steel, /obj/item/tape_roll{ @@ -70413,6 +71152,17 @@ /obj/structure/window/reinforced, /turf/simulated/floor/wood, /area/library) +"yiH" = ( +/obj/structure/table/standard, +/obj/item/paper_bin, +/obj/item/pen, +/obj/effect/floor_decal/corner/blue{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/security/forensics_office{ + name = "Security - Investigations Office" + }) "ykb" = ( /obj/effect/floor_decal/corner/paleblue/diagonal, /obj/machinery/button/switch/windowtint{ @@ -86736,7 +87486,7 @@ akz akz amu anF -anF +wdB apY anE asA @@ -86992,7 +87742,7 @@ ajL akz akz amv -anE +pam gaR apZ arm @@ -87041,13 +87791,13 @@ aab aab bBu beG -bbs -bbs bcY -bbs -bbs -bbs -bbs +bcY +bcY +bcY +bcY +bcY +dKN bJu bbs aox @@ -87298,13 +88048,13 @@ aab aab bBv beG -bbs -bcY -bcY -bQG bEc bcY -bbs +bcY +bcY +bcY +bcY +tJU beG bbs aox @@ -87555,14 +88305,14 @@ aab aab bBv beG -bbs -beC -bEc -bbs -bbs -beC -bbs -bCo +bcY +bcY +bcY +bcY +bcY +bcY +bcY +beG bbs bbs aox @@ -87812,13 +88562,13 @@ bGe aab bBv beG -bbs bcY -bbs -dKN -bbs bcY -bbs +bcY +bcY +bcY +bcY +bEc beG bFT bbs @@ -88069,7 +88819,7 @@ bzA aab bBv beG -bbs +bcY bcY bcY bcY @@ -98032,10 +98782,10 @@ aaa aaa aaa aaa +aaa +aaa aab -aab -aab -agL +afo ahy agL aab @@ -98290,9 +99040,9 @@ aaa aaa aaa aaa -aab -aab -agM +aaa +aaa +afo ahu agM aab @@ -98528,28 +99278,28 @@ aaa aaa aaa aaa -aaa aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aaa -aaa -aaa -aaa -aaa -aaa -aab -agN +aad +aad +aad +aad +abu +acF +aad +abu +acF +aad +abu +acF +aad +aad +aad +aad +aad +aad +aad +aad +afo ahw agN aab @@ -98609,7 +99359,7 @@ bve bve bve baI -aZs +imd bHm bIg bIZ @@ -98786,26 +99536,26 @@ aaa aaa aaa aab -aab -aab aad +aaA +icb +aaT +aaT +aaT +aaT +aaT +aaT +aaT +aaT +aaT +aaT +aaT +adM aad +aeX +aeW +aeV aad -aad -aad -abu -abO -abO -abO -acF -aad -aad -aad -aad -aad -aad -aad -aaa afo ahy afo @@ -99043,25 +99793,25 @@ aaa aaa aab aab -aab -aab aad -aaA -icb -aaT -aaT -aaT -aaT -aaT -aaT -aaT -aaT -aaT -adM +abV +aaJ +srX +eJt +iIv +srX +eJt +iIv +afe +afe +afe +afe +afe +adN aad -aeV +afq +aah aah -aad aad aad ahA @@ -99300,26 +100050,26 @@ aab aab aab aab -aab -aab aad aaB aaJ +srX +xxd aaU -aaU +oOw abv abP -abP -abP +afe +nmV acG -aaU -aaU +afC +afe aaJ aad -aeW -aah +aad afJ -aah +aad +aad aaI ahB aae @@ -99556,28 +100306,28 @@ aaa aab aab aab -aab -aaa aaa aad abV aaJ -aaU -aba +srX +rMJ +xBx +xBx +lrT abw -abw -ace -abw -acH -acW -aaU -adN -aad -aeX -afq -aad -abj -abl +afe +nmV +afD +afC +afe +act +acB +acB +ggV +ggV +agi +agO abV aah aad @@ -99814,28 +100564,28 @@ aaa aab aab aaa -aaa -aaa aad aaD aaJ -aaU +srX +xcZ +xBx abb abx -abQ -acf +xBx +afe abQ acI aby -aaU -aaJ -aad -aad -aad -aad -agh -aaJ -aaA +afe +aae +aah +aae +aaV +aaV +aaV +aaV +aaV aah aad aad @@ -100071,28 +100821,28 @@ aaa aaa aaa aaa -aaa -aaa aad aad aaJ -aaU -abb +srX +sYi +lrT +sdh uOu abR acg -abR +yaL acJ -aby +afD adq -act -acB -acB -aaT -aaT -agi -agO -aad +aae +abV +aaA +aaV +xxH +eXU +fKx +aaV aah aah aah @@ -100329,26 +101079,26 @@ aaa aaa aaa aaa -aaa -aaa aad aaK -aaU -abb +srX +eNv +xBx +vhY abz -abR -ach -abR +xBx +afe +oQQ acK acX -aaU -aaU -aaV -aaV -aaV +afe +adt aaV aaV aaV +mqs +rVo +eLR aaV aaA aaA @@ -100586,26 +101336,26 @@ aaa aaa aaa aaa -aaa -aaa aad aaJ -aaU +srX +vgA +hLJ abc abA -abR -aci -abR -acK -aby -adr -aaU +nbN +afe +yfl +vGn +aka +akW +adt aeu aeY afr afK agj -abE +qYu aaV ahC ahC @@ -100843,26 +101593,26 @@ aaa aaa aaa aaa -aaa -aaa aad aaJ -aaU +srX +xzX +pZE abd -abz -abR -ach -abR +xBx +itx +afe +gmg acL -aby -ads -aaU +vZF +akW +adt aev aeZ afs -afL +abE agk -agP +abE aaV ait ajm @@ -101100,26 +101850,26 @@ aaa aaa aaa aaa -aaa -aaa aad aaL -aaU +srX +srX +srX abe -abA -abR -acg -abR +wHH +raN +afe +afe acM -aby +afe +adt adt -aaU aew afa aft +leW afM -agl -abE +owA aaV aiu ajn @@ -101357,26 +102107,26 @@ aaa aaa aaa aaa -aaa -aaa aad -aaJ -aaU -abd +xEE +cQE +tsx +srX +dob +abB abB -abw acj -abw +ltW acN -aby -aaU -aaU +ghU +srX +srX aex aaV aaV afN -aaV -aaV +cHJ +afN aaV aaV ajo @@ -101618,21 +102368,21 @@ aad aad aad aaJ -aaU +srX abf abC -abC +tOQ ack -abC +tOQ acO acY -aaU +srX adO aey afb afu -aEH -afb +nbB +nLD agQ ahD aiv @@ -101875,7 +102625,7 @@ aan xoV agC wkn -aaU +srX abg abD abS @@ -101883,7 +102633,7 @@ acl acv acP acZ -aaU +srX adP aez afc @@ -103420,12 +104170,12 @@ aaP aad aaJ abJ -aad -aad -aad -aad -aad -aaV +abJ +abJ +abJ +abJ +abJ +abJ adV aeF afd @@ -103676,15 +104426,15 @@ aad aad aad aaJ -aad -aaD -ndP -aae -afi -abV -aaV +abJ +tZz +sJu +qkU +gWk +qHy +cpS adW -aeG +aeD afd afB afU @@ -103933,14 +104683,14 @@ aaa aaa aad aaJ -aad -aaD -aae -wOo +abJ +vsB +ndP +ndP fFb -abV -aaV -adX +ibm +abJ +adW aeD afd afd @@ -104191,12 +104941,12 @@ aaa aad aaJ abJ -aaA +vsB afi fXR jdn -aaD -aaV +nrw +fdP adY aeH afd @@ -104447,26 +105197,26 @@ aab aaa aad abl -aad -aah -afi -afi -aah -aaA -aaV +abJ +nKn +oLd +eMM +cFc +nvu +abJ adZ aeI -afe -afe -afe -afe -afe -afe -afe -afe -afe -afe -afe +klC +klC +klC +klC +klC +klC +klC +nHe +nHe +nHe +nHe ana ana apt @@ -104704,26 +105454,26 @@ aaa aaa aad abm -aad -abI -afi -aae -aah -aaD -aaV -aea -aeJ -afe -afC -afC +abJ +dwz +jkj +nfX +kUL +kzx +tCH +abE +fXr +cqu +hoG +gkK agu -afC +hIP ahL -aiD +klC ajt -aka -akW -afe +tzU +vSb +nHe anb vmm cRg @@ -104961,26 +105711,26 @@ aad aad aad aaJ -aad -aah -aah -aah -aah -sAC -aaV +abJ +ntF +vdx +vTy +fap +yiH +prr abE aeJ -aff -afD +klC +klC afW -agv +afX aha ahM -aiE -aju -aka -akX -afe +klC +klC +tzU +tzU +nHe anc aof vmm @@ -105219,25 +105969,25 @@ aah dGX kwJ ahO -aah -aah -aah -aah -aah -aaV +iHM +uXN +gNS +kUL +kzx +kYT aeb aeJ -afe -afE -afD -afD -ahb +klC +klC +tek +xOt +xOt ahN agv -ajv -akb -akY -alW +klC +tzU +tzU +nHe and aog apu @@ -105475,26 +106225,26 @@ aaG aaQ aaW abn -aad +abJ ump pfO rqe tHM djF -aaV +abJ aaV aeK -afe -afe +klC +eCY afX -afD -afX -afe +eQr +wwF +lvP aiF -afe -afe -afe -afe +klC +adH +tzU +nHe ane aoh apv @@ -105732,26 +106482,26 @@ aad aad aad udz -aad -aad -aad +abJ +abJ +abJ abK abK abK abK abI aeL -aaD -afe -afC -afD -afC -afe +aad +eCY +afX +afX +afX +afX aiG -ajw +klC akc akZ -alX +gdq anf aoi apv @@ -105998,17 +106748,17 @@ aco acA anr aeM -abV -afe +aad +klC afY -afD -afC -afe -aiH -ajx +etp +mFU +fiO +klC +klC akd -ala -alY +tzU +nHe ang vmm apw @@ -106256,16 +107006,16 @@ abK aed aeN abV -afe -afC -agw -afC -afe -aiI -ajy +klC +klC +klC +klC +klC +klC +tzU ake -alb -alZ +lQu +nHe anh aje apx @@ -106513,16 +107263,16 @@ adx aee aeO aad -afe -afe -afe -afe -afe -aiJ -aiJ -aiJ -aiJ -aiJ +klC +klC +klC +klC +klC +aiI +ajy +xkB +nHe +nHe vFG vFG vFG @@ -115019,7 +115769,7 @@ aDk vCz gGa aIL -aKt +qea aMj aOc aPG diff --git a/maps/aurora/aurora-5_interstitial.dmm b/maps/aurora/aurora-5_interstitial.dmm index 79b6b8823cf..1c91c44b0b2 100644 --- a/maps/aurora/aurora-5_interstitial.dmm +++ b/maps/aurora/aurora-5_interstitial.dmm @@ -1973,7 +1973,7 @@ /area/security/training) "et" = ( /turf/simulated/wall, -/area/security/detectives_office) +/area/security/break_room) "eu" = ( /obj/machinery/door/firedoor, /obj/structure/grille, @@ -1989,7 +1989,7 @@ id = "Detective" }, /turf/simulated/floor/plating, -/area/security/detectives_office) +/area/security/break_room) "ev" = ( /obj/machinery/door/firedoor, /obj/structure/grille, @@ -2005,7 +2005,7 @@ id = "Detective" }, /turf/simulated/floor/plating, -/area/security/detectives_office) +/area/security/break_room) "ew" = ( /obj/effect/floor_decal/corner/red/full{ dir = 8 @@ -2078,33 +2078,41 @@ id = "Detective" }, /turf/simulated/floor/plating, -/area/security/detectives_office) +/area/security/break_room) "eD" = ( -/obj/item/modular_computer/console/preset/security/investigations, -/turf/simulated/floor/lino/grey, -/area/security/detectives_office) +/obj/machinery/disposal, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/disposalpipe/trunk, +/turf/simulated/floor/tiled/white, +/area/security/break_room) "eE" = ( /turf/simulated/wall, /area/security/training_crimescene) "eF" = ( -/obj/structure/bed/chair/comfy/beige, -/obj/structure/window/reinforced{ - dir = 8 +/obj/structure/table/standard, +/obj/item/storage/box/fancy/donut, +/obj/machinery/light{ + dir = 1 }, -/turf/simulated/floor/carpet, -/area/security/detectives_office) +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/security/break_room) "eG" = ( -/obj/structure/table/wood, -/obj/item/device/flashlight/lamp/green, -/obj/item/paper_scanner{ - pixel_x = 6 - }, -/turf/simulated/floor/carpet, -/area/security/detectives_office) +/obj/structure/table/standard, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/item/storage/box/cups, +/turf/simulated/floor/tiled/white, +/area/security/break_room) "eH" = ( -/obj/machinery/computer/security, -/turf/simulated/floor/carpet, -/area/security/detectives_office) +/obj/structure/table/standard, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/item/reagent_containers/glass/rag, +/obj/item/storage/box/snack{ + desc = "A box full of snack foods. A label is attached that reads, 'Sorry about the microwaves.'"; + name = "corporate care package" + }, +/turf/simulated/floor/tiled/white, +/area/security/break_room) "eI" = ( /obj/effect/floor_decal/corner/red{ dir = 9 @@ -2197,40 +2205,25 @@ dir = 4; id = "Detective" }, +/obj/structure/window/reinforced/polarized{ + id = "Detective" + }, /turf/simulated/floor/plating, -/area/security/detectives_office) +/area/security/break_room) "eP" = ( -/obj/item/stool/padded, -/turf/simulated/floor/lino/grey, -/area/security/detectives_office) +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/security/break_room) "eQ" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/lino/grey, -/area/security/detectives_office) -"eR" = ( -/turf/simulated/floor/carpet, -/area/security/detectives_office) -"eS" = ( -/obj/structure/table/wood, -/obj/item/folder/sec, -/obj/item/pen, -/turf/simulated/floor/carpet, -/area/security/detectives_office) +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/security/break_room) "eT" = ( -/obj/structure/bed/chair/comfy/brown{ - dir = 8 - }, -/obj/machinery/button/switch/windowtint{ - id = "Detective"; - pixel_x = -28; - pixel_y = 12 - }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/carpet, -/area/security/detectives_office) +/obj/structure/table/standard, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/security/break_room) "eU" = ( /obj/effect/floor_decal/corner/red{ dir = 9 @@ -2265,54 +2258,28 @@ }, /turf/simulated/floor/tiled, /area/security/training) -"eZ" = ( -/obj/machinery/door/firedoor, -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "Detective" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "Detective" - }, -/obj/structure/window/reinforced/polarized{ - id = "Detective" - }, -/turf/simulated/floor/plating, -/area/security/detectives_office) "fa" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ +/obj/machinery/newscaster{ + pixel_x = -32 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/camera/network/security{ + c_tag = "Security - Break Room"; dir = 4 }, -/turf/simulated/floor/lino/grey, -/area/security/detectives_office) +/turf/simulated/floor/tiled, +/area/security/break_room) "fb" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/lino/grey, -/area/security/detectives_office) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/security/break_room) "fc" = ( -/obj/machinery/hologram/holopad, -/turf/simulated/floor/carpet, -/area/security/detectives_office) +/obj/structure/bed/chair, +/turf/simulated/floor/tiled, +/area/security/break_room) "fd" = ( -/obj/structure/table/wood, -/obj/item/paper_bin, -/obj/item/device/taperecorder, -/turf/simulated/floor/carpet, -/area/security/detectives_office) -"fe" = ( -/obj/machinery/camera/network/security{ - c_tag = "Security - Detective's Office"; - dir = 8 - }, -/turf/simulated/floor/carpet, -/area/security/detectives_office) +/turf/simulated/floor/tiled, +/area/security/break_room) "ff" = ( /obj/machinery/door/firedoor, /obj/structure/window/reinforced, @@ -2353,36 +2320,65 @@ /turf/simulated/floor/tiled, /area/security/training) "fk" = ( -/obj/structure/flora/pottedplant/random, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -28 +/obj/structure/cable/green{ + icon_state = "4-8" }, -/turf/simulated/floor/lino/grey, -/area/security/detectives_office) -"fl" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/turf/simulated/floor/lino/grey, -/area/security/detectives_office) -"fm" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/lino/grey, -/area/security/detectives_office) +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/security/break_room) +"fl" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/security/break_room) +"fm" = ( +/obj/structure/table/standard, +/obj/item/deck/cards, +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/security/break_room) "fn" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ +/obj/structure/bed/chair{ dir = 8 }, -/turf/simulated/floor/lino/grey, -/area/security/detectives_office) +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled, +/area/security/break_room) "fo" = ( -/turf/simulated/floor/lino/grey, -/area/security/detectives_office) +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 28 + }, +/turf/simulated/floor/tiled, +/area/security/break_room) "fp" = ( /obj/effect/floor_decal/corner/blue{ dir = 9 @@ -2406,86 +2402,21 @@ /turf/simulated/floor/tiled, /area/security/training) "fr" = ( -/obj/machinery/photocopier, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/lino/grey, -/area/security/detectives_office) -"fs" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/lino/grey, -/area/security/detectives_office) -"ft" = ( -/obj/machinery/requests_console{ - department = "Detective's Desk"; - departmentType = 5; - pixel_x = 32 - }, -/turf/simulated/floor/lino/grey, -/area/security/detectives_office) -"fu" = ( -/obj/machinery/door/firedoor, -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/security/investigations) -"fv" = ( -/obj/machinery/door/firedoor, -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ +/obj/machinery/firealarm/west, +/obj/structure/flora/pottedplant/random, +/obj/effect/floor_decal/spline/fancy/wood, +/obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, -/turf/simulated/floor/plating, -/area/security/investigations) -"fw" = ( -/turf/simulated/wall, -/area/security/forensics_office) -"fx" = ( -/obj/machinery/door/firedoor, -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "FT Op" +/turf/simulated/floor/tiled, +/area/security/break_room) +"fs" = ( +/obj/effect/floor_decal/spline/fancy/wood, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "FT Op" - }, -/obj/structure/window/reinforced/polarized{ - id = "FT Op" - }, -/turf/simulated/floor/plating, -/area/security/forensics_office) -"fy" = ( -/obj/machinery/door/firedoor, -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "FT Op" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "FT Op" - }, -/obj/structure/window/reinforced/polarized{ - id = "FT Op" - }, -/turf/simulated/floor/plating, -/area/security/forensics_office) +/turf/simulated/floor/tiled, +/area/security/break_room) "fz" = ( /obj/machinery/door/firedoor, /obj/structure/grille, @@ -2506,6 +2437,9 @@ /area/security/training_theoretical) "fB" = ( /obj/structure/bed/chair/comfy/brown, +/obj/effect/landmark/start{ + name = "Head of Security" + }, /turf/simulated/floor/wood, /area/security/training_theoretical) "fC" = ( @@ -2518,6 +2452,9 @@ /obj/structure/sign/double/map/right{ pixel_y = 32 }, +/obj/effect/landmark/start{ + name = "Warden" + }, /turf/simulated/floor/wood, /area/security/training_theoretical) "fE" = ( @@ -2535,151 +2472,25 @@ /turf/simulated/floor/plating, /area/security/training_theoretical) "fF" = ( -/obj/structure/window/reinforced{ - dir = 1 +/obj/structure/bed/chair/comfy/sofa/left{ + dir = 4; + icon_state = "sofaend_left_preview" }, -/obj/structure/flora/pottedplant/random, /turf/simulated/floor/wood, -/area/security/detectives_office) +/area/security/break_room) "fG" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/table/wood, -/obj/item/stack/packageWrap, -/obj/item/device/hand_labeler, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/wood, -/area/security/detectives_office) -"fH" = ( -/turf/simulated/floor/tiled/ramp/bottom{ - dir = 1; - tag = "icon-rampbot (NORTH)" - }, -/area/security/detectives_office) +/area/security/break_room) "fI" = ( -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 8 +/obj/structure/cable/green{ + icon_state = "1-2" }, -/obj/structure/table/wood, -/obj/item/device/camera_film, -/obj/item/device/camera{ - desc = "A one use - polaroid camera. 30 photos left."; - name = "detectives camera"; - pictures_left = 30 - }, -/turf/simulated/floor/lino/grey, -/area/security/detectives_office) +/turf/simulated/floor/wood, +/area/security/break_room) "fJ" = ( -/obj/structure/window/reinforced, -/obj/structure/closet/secure_closet/detective, -/obj/item/book/manual/wiki/security_space_law, -/turf/simulated/floor/lino/grey, -/area/security/detectives_office) -"fK" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "Detective" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "Detective" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "Detective" - }, -/obj/machinery/door/firedoor, -/obj/structure/window/reinforced/polarized{ - id = "Detective" - }, -/turf/simulated/floor/plating, -/area/security/detectives_office) -"fL" = ( -/obj/machinery/papershredder, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/security/investigations) -"fM" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled, -/area/security/investigations) -"fN" = ( -/obj/machinery/door/firedoor, -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "FT Op" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "FT Op" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "FT Op" - }, -/turf/simulated/floor/plating, -/area/security/forensics_office) -"fO" = ( -/obj/structure/table/standard, -/obj/machinery/light{ - dir = 8 - }, -/obj/item/device/camera_film, -/obj/item/device/camera, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/turf/simulated/floor/tiled/white, -/area/security/forensics_office) -"fQ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "conpipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 1 - }, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/turf/simulated/floor/tiled/white, -/area/security/forensics_office) -"fR" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/turf/simulated/floor/tiled/white, -/area/security/forensics_office) -"fT" = ( -/obj/effect/floor_decal/corner/beige/diagonal, -/obj/structure/table/glass, -/obj/item/storage/box/swabs{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/storage/box/fancy/vials, -/turf/simulated/floor/tiled/white, -/area/security/forensics_laboratory) -"fU" = ( -/obj/effect/floor_decal/corner/beige/diagonal, -/obj/machinery/dnaforensics{ - pixel_y = 1 - }, -/obj/structure/table/glass, -/turf/simulated/floor/tiled/white, -/area/security/forensics_laboratory) +/obj/machinery/computer/arcade, +/turf/simulated/floor/wood, +/area/security/break_room) "fV" = ( /obj/machinery/door/firedoor, /obj/structure/grille, @@ -2730,176 +2541,39 @@ /turf/simulated/floor/plating, /area/security/training_theoretical) "gb" = ( -/obj/structure/coatrack, +/obj/structure/bed/chair/comfy/sofa/corner{ + dir = 4; + icon_state = "sofacorner_preview" + }, /turf/simulated/floor/wood, -/area/security/detectives_office) +/area/security/break_room) "gc" = ( -/obj/machinery/firealarm/south, -/obj/structure/disposalpipe/segment{ +/obj/structure/bed/chair/comfy/sofa{ dir = 1; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 + icon_state = "sofamiddle_preview" }, /turf/simulated/floor/wood, -/area/security/detectives_office) +/area/security/break_room) "gd" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/structure/bed/chair/comfy/sofa/left{ + dir = 1; + icon_state = "sofaend_left_preview" }, +/obj/machinery/light, /turf/simulated/floor/wood, -/area/security/detectives_office) +/area/security/break_room) "ge" = ( -/obj/machinery/power/apc{ +/obj/machinery/power/apc/low{ name = "south bump"; pixel_y = -24 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, +/obj/structure/cable/green, /turf/simulated/floor/wood, -/area/security/detectives_office) +/area/security/break_room) "gf" = ( -/obj/machinery/light_switch{ - pixel_y = -24 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, +/obj/machinery/vending/snack, /turf/simulated/floor/wood, -/area/security/detectives_office) -"gg" = ( -/obj/machinery/door/airlock/security{ - id_tag = "detdoor"; - name = "Detective"; - req_access = list(68) - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/wood, -/area/security/detectives_office) -"gh" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/security/investigations) -"gi" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/security/investigations) -"gj" = ( -/obj/machinery/door/firedoor, -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "FT Op" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "FT Op" - }, -/obj/structure/window/reinforced/polarized{ - id = "FT Op" - }, -/turf/simulated/floor/plating, -/area/security/forensics_office) -"gl" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/turf/simulated/floor/tiled/white, -/area/security/forensics_office) -"gm" = ( -/obj/effect/floor_decal/corner/beige/diagonal, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/security/forensics_laboratory) -"go" = ( -/obj/machinery/door/firedoor, -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "FT Op" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "FT Op" - }, -/turf/simulated/floor/plating, -/area/security/forensics_laboratory) +/area/security/break_room) "gp" = ( /obj/effect/floor_decal/spline/fancy/wood, /obj/structure/sign/nosmoking_2{ @@ -2943,152 +2617,6 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/security/training) -"gu" = ( -/turf/simulated/wall, -/area/security/investigations) -"gv" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/structure/disposalpipe/junction{ - dir = 2; - icon_state = "pipe-j2" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/noticeboard{ - pixel_x = -32 - }, -/turf/simulated/floor/tiled, -/area/security/investigations) -"gw" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/security/investigations) -"gx" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security{ - name = "Forensic Technician"; - req_access = list(4) - }, -/turf/simulated/floor/tiled, -/area/security/forensics_office) -"gy" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/turf/simulated/floor/tiled/white, -/area/security/forensics_office) -"gz" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/security/forensics_office) -"gA" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/white, -/area/security/forensics_office) -"gB" = ( -/obj/structure/closet{ - name = "Evidence Closet" - }, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/turf/simulated/floor/tiled/white, -/area/security/forensics_office) "gC" = ( /obj/structure/cable/green{ d1 = 1; @@ -3106,16 +2634,6 @@ /obj/machinery/door/firedoor, /turf/simulated/floor/plating, /area/maintenance/interstitial_cargo) -"gD" = ( -/obj/effect/floor_decal/corner/beige/diagonal, -/obj/structure/bed/chair/office/light, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/security/forensics_laboratory) "gE" = ( /obj/machinery/door/firedoor, /obj/structure/grille, @@ -3217,157 +2735,14 @@ /turf/simulated/floor/plating, /area/maintenance/security_interstitial) "gN" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "conpipe-c" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, +/obj/random/junk, /turf/simulated/floor/plating, /area/maintenance/security_interstitial) "gO" = ( -/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/zpipe/down/supply{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 8; - icon_state = "11-8" - }, -/obj/structure/disposalpipe/down{ - dir = 8 - }, -/obj/structure/lattice/catwalk, -/obj/structure/sign/drop{ - pixel_y = 32 - }, -/turf/simulated/open, -/area/maintenance/security_interstitial) -"gP" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -28 - }, -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/security/investigations) -"gQ" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled, -/area/security/investigations) -"gR" = ( -/obj/structure/coatrack, -/obj/machinery/camera/network/security{ - c_tag = "Security - Forensics Office"; - dir = 1 - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -28 - }, -/obj/machinery/light_switch{ - pixel_x = -24 - }, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/turf/simulated/floor/tiled/white, -/area/security/forensics_office) -"gS" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/closet/secure_closet/csi, -/obj/structure/cable/green, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/obj/machinery/power/apc/low{ - name = "south bump"; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/white, -/area/security/forensics_office) -"gT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/security/forensics_office) -"gU" = ( -/obj/machinery/photocopier, -/obj/machinery/firealarm/south, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/turf/simulated/floor/tiled/white, -/area/security/forensics_office) -"gV" = ( -/obj/machinery/door/firedoor, -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, +/obj/structure/table/rack, +/obj/random/loot, /turf/simulated/floor/plating, -/area/security/forensics_laboratory) -"gW" = ( -/obj/effect/floor_decal/corner/beige/diagonal, -/obj/structure/table/glass, -/obj/machinery/microscope{ - pixel_x = 5; - pixel_y = 3 - }, -/obj/machinery/light_switch{ - pixel_y = -26 - }, -/turf/simulated/floor/tiled/white, -/area/security/forensics_laboratory) -"gX" = ( -/obj/effect/floor_decal/corner/beige/diagonal, -/obj/structure/table/glass, -/obj/machinery/camera/network/security{ - c_tag = "Security - Forensics Laboratory"; - dir = 1 - }, -/obj/machinery/light, -/obj/item/device/reagent_scanner, -/obj/structure/cable/green, -/obj/machinery/power/apc/low{ - name = "south bump"; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/white, -/area/security/forensics_laboratory) +/area/maintenance/security_interstitial) "gY" = ( /obj/effect/floor_decal/corner/blue{ dir = 9 @@ -3379,12 +2754,18 @@ dir = 4; pixel_x = -28 }, +/obj/effect/landmark/start{ + name = "Security Officer" + }, /turf/simulated/floor/tiled/dark, /area/security/training_theoretical) "gZ" = ( /obj/structure/bed/chair{ dir = 1 }, +/obj/effect/landmark/start{ + name = "Security Officer" + }, /turf/simulated/floor/tiled/dark, /area/security/training_theoretical) "ha" = ( @@ -3404,6 +2785,9 @@ name = "Station Intercom (General)"; pixel_x = 24 }, +/obj/effect/landmark/start{ + name = "Security Cadet" + }, /turf/simulated/floor/tiled/dark, /area/security/training_theoretical) "hc" = ( @@ -3493,138 +2877,43 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/light/small/emergency, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/simulated/floor/plating, /area/maintenance/security_interstitial) "hh" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, /obj/structure/cable/green{ - d1 = 1; + d1 = 4; d2 = 8; - icon_state = "1-8" + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/disposalpipe/junction/yjunction{ - dir = 1 +/obj/structure/disposalpipe/segment{ + dir = 4 }, /turf/simulated/floor/plating, /area/maintenance/security_interstitial) "hi" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers, +/obj/machinery/atmospherics/pipe/zpipe/down/supply, +/obj/structure/disposalpipe/down, /obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/security_interstitial) -"hj" = ( -/obj/machinery/door/airlock/maintenance{ - req_one_access = list(4,68) - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/maintenance/security_interstitial) -"hk" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/security/investigations) -"hl" = ( -/obj/machinery/ringer{ - department = "Security"; - id = "brig_ringer"; - pixel_x = 30; - req_access = list(1) - }, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/obj/machinery/camera/network/security{ - c_tag = "Security - Investigations Division 2"; - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/security/investigations) -"ho" = ( -/obj/machinery/door/firedoor, -/obj/structure/plasticflaps/airtight{ - layer = 2.5 - }, -/obj/machinery/door/airlock/security{ - name = "Autopsy Lab"; - req_access = list(4) - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; + d1 = 32; d2 = 2; - icon_state = "1-2" + icon_state = "11-2" }, -/turf/simulated/floor/tiled/white, -/area/security/forensics_morgue) -"hp" = ( -/obj/structure/grille, -/obj/machinery/door/firedoor, -/obj/structure/window/reinforced{ - dir = 4 +/obj/structure/sign/drop{ + pixel_y = 32 }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced, -/turf/simulated/floor/plating, -/area/security/forensics_laboratory) +/turf/simulated/open, +/area/maintenance/security_interstitial) "hq" = ( /obj/effect/floor_decal/corner/blue{ dir = 9 @@ -3768,42 +3057,10 @@ }, /turf/simulated/floor/plating, /area/maintenance/security_interstitial) -"hz" = ( -/obj/effect/floor_decal/corner/blue{ - dir = 9 - }, -/obj/machinery/status_display{ - pixel_x = -32 - }, -/turf/simulated/floor/tiled, -/area/security/investigations) -"hC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/light_switch{ - pixel_x = -24 - }, -/obj/structure/cable/green, -/obj/machinery/power/apc/low{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/ramp/bottom, -/area/security/forensics_morgue) "hD" = ( /obj/effect/shuttle_landmark/skipjack/interstitial, /turf/unsimulated/floor/asteroid/ash/rocky, /area/mine/unexplored) -"hF" = ( -/obj/structure/morgue{ - dir = 2 - }, -/turf/simulated/floor/tiled{ - name = "cooled floor"; - temperature = 278 - }, -/area/security/forensics_morgue) "hG" = ( /obj/effect/floor_decal/corner/blue{ dir = 9 @@ -3811,6 +3068,9 @@ /obj/structure/bed/chair{ dir = 1 }, +/obj/effect/landmark/start{ + name = "Security Officer" + }, /turf/simulated/floor/tiled/dark, /area/security/training_theoretical) "hH" = ( @@ -3818,6 +3078,9 @@ dir = 1 }, /obj/machinery/firealarm/south, +/obj/effect/landmark/start{ + name = "Security Officer" + }, /turf/simulated/floor/tiled/dark, /area/security/training_theoretical) "hI" = ( @@ -3840,6 +3103,9 @@ /obj/machinery/light_switch{ pixel_y = -26 }, +/obj/effect/landmark/start{ + name = "Investigator" + }, /turf/simulated/floor/tiled/dark, /area/security/training_theoretical) "hL" = ( @@ -3873,45 +3139,6 @@ }, /turf/simulated/floor/tiled, /area/security/training) -"hQ" = ( -/turf/simulated/open, -/area/security/investigations) -"hR" = ( -/turf/simulated/floor/tiled, -/area/security/investigations) -"hS" = ( -/obj/machinery/firealarm/east, -/obj/effect/floor_decal/corner/blue{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/security/investigations) -"hV" = ( -/obj/structure/window/reinforced, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled{ - name = "cooled floor"; - temperature = 278 - }, -/area/security/forensics_morgue) -"hW" = ( -/obj/effect/floor_decal/corner/beige/diagonal, -/turf/simulated/floor/tiled/white, -/area/security/forensics_laboratory) -"hX" = ( -/turf/simulated/floor/tiled{ - name = "cooled floor"; - temperature = 278 - }, -/area/security/forensics_morgue) "hZ" = ( /turf/simulated/wall, /area/medical/psych) @@ -3929,40 +3156,6 @@ /obj/effect/decal/remains, /turf/simulated/floor/plating, /area/maintenance/security_interstitial) -"ic" = ( -/obj/machinery/door/firedoor, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/security/investigations) -"id" = ( -/obj/machinery/door/firedoor, -/obj/structure/window/reinforced, -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/security/investigations) -"if" = ( -/obj/structure/table/standard, -/obj/item/storage/box/bodybags, -/obj/machinery/firealarm/west, -/obj/item/device/healthanalyzer, -/turf/simulated/floor/tiled{ - name = "cooled floor"; - temperature = 278 - }, -/area/security/forensics_morgue) "ii" = ( /turf/simulated/open, /area/security/training) @@ -3974,25 +3167,6 @@ }, /turf/simulated/floor/tiled, /area/maintenance/interstitial_cargo) -"im" = ( -/obj/structure/table/standard, -/turf/simulated/floor/tiled{ - name = "cooled floor"; - temperature = 278 - }, -/area/security/forensics_morgue) -"in" = ( -/obj/machinery/door/firedoor, -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "FT Op" - }, -/obj/structure/window/reinforced/polarized{ - id = "FT Op" - }, -/turf/simulated/floor/plating, -/area/security/forensics_office) "io" = ( /turf/simulated/wall/r_wall, /area/bridge/selfdestruct) @@ -4386,6 +3560,14 @@ "je" = ( /obj/structure/table/steel, /obj/item/device/flashlight/heavy, +/obj/item/clothing/mask/gas/half{ + pixel_x = 6; + pixel_y = 9 + }, +/obj/item/clothing/mask/gas/half{ + pixel_x = -6; + pixel_y = 9 + }, /turf/simulated/floor/plating, /area/bridge/aibunker) "jf" = ( @@ -4668,10 +3850,6 @@ /obj/machinery/door/firedoor, /turf/simulated/floor/tiled, /area/security/training) -"jE" = ( -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/security/investigations) "jF" = ( /obj/machinery/light{ dir = 8; @@ -5750,6 +4928,9 @@ departmentType = 5; pixel_y = -32 }, +/obj/effect/landmark/start{ + name = "Investigator" + }, /turf/simulated/floor/tiled/dark, /area/security/training_theoretical) "mm" = ( @@ -5762,13 +4943,6 @@ /obj/effect/floor_decal/corner/green/diagonal, /turf/simulated/floor/tiled/white, /area/medical/psych) -"mn" = ( -/obj/machinery/hologram/holopad, -/turf/simulated/floor/tiled{ - name = "cooled floor"; - temperature = 278 - }, -/area/security/forensics_morgue) "mo" = ( /turf/simulated/mineral, /area/mine/unexplored) @@ -6171,13 +5345,6 @@ }, /turf/simulated/floor/tiled/white, /area/maintenance/medbay_virology) -"oo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 1 - }, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/turf/simulated/floor/tiled/white, -/area/security/forensics_office) "ot" = ( /obj/structure/ladder/up{ pixel_y = 16 @@ -6305,26 +5472,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/white, /area/maintenance/medbay_virology) -"pj" = ( -/obj/effect/floor_decal/corner/beige/diagonal, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/white, -/area/security/forensics_laboratory) -"pk" = ( -/obj/structure/table/standard, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/turf/simulated/floor/tiled/white, -/area/security/forensics_office) "pl" = ( /obj/structure/ladder{ pixel_y = 16 @@ -6457,18 +5604,6 @@ "pT" = ( /turf/simulated/wall, /area/medical/upperlevel) -"pV" = ( -/obj/machinery/door/firedoor, -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "FT Op" - }, -/obj/structure/window/reinforced/polarized{ - id = "FT Op" - }, -/turf/simulated/floor/plating, -/area/security/forensics_laboratory) "pZ" = ( /turf/simulated/open/airless, /area/mine/unexplored) @@ -6491,20 +5626,6 @@ "qe" = ( /turf/unsimulated/floor/asteroid/ash/rocky, /area/maintenance/interstitial_construction_site) -"qf" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/machinery/camera/network/security{ - c_tag = "Security - Forensics Autopsy Chamber"; - dir = 1 - }, -/obj/item/modular_computer/console/preset/security/investigations, -/turf/simulated/floor/tiled{ - name = "cooled floor"; - temperature = 278 - }, -/area/security/forensics_morgue) "qi" = ( /turf/simulated/wall, /area/hallway/secondary/entry/stairs) @@ -6629,9 +5750,6 @@ /obj/structure/closet/crate, /turf/simulated/floor/tiled, /area/quartermaster/storage) -"qS" = ( -/turf/simulated/wall, -/area/security/forensics_laboratory) "qT" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -6884,6 +6002,19 @@ }, /turf/simulated/floor/tiled/white, /area/medical/upperlevel) +"so" = ( +/obj/machinery/door/firedoor, +/obj/structure/grille, +/obj/structure/window/reinforced/polarized{ + dir = 8; + id = "Detective" + }, +/obj/structure/window/reinforced/polarized{ + dir = 4; + id = "Detective" + }, +/turf/simulated/floor/plating, +/area/security/break_room) "ss" = ( /obj/effect/floor_decal/industrial/outline/yellow, /obj/structure/closet/crate, @@ -6931,6 +6062,10 @@ }, /turf/simulated/floor/plating, /area/maintenance/engineering_ladder) +"sC" = ( +/obj/machinery/light/small/emergency, +/turf/simulated/floor/plating, +/area/maintenance/security_interstitial) "sE" = ( /obj/effect/floor_decal/industrial/hatch/yellow, /obj/effect/decal/cleanable/dirt, @@ -6981,19 +6116,6 @@ }, /turf/simulated/floor/plating, /area/maintenance/telecoms_ladder) -"sN" = ( -/obj/structure/table/standard, -/obj/item/autopsy_scanner, -/obj/item/surgery/scalpel{ - desc = "Cut, cut, and once more cut. This one is extra shiny!"; - name = "shiny scalpel" - }, -/obj/machinery/light/small, -/turf/simulated/floor/tiled{ - name = "cooled floor"; - temperature = 278 - }, -/area/security/forensics_morgue) "sQ" = ( /obj/item/stack/material/steel{ amount = 20 @@ -7217,21 +6339,6 @@ }, /turf/simulated/floor/tiled/white, /area/maintenance/medbay_virology) -"uo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/alarm/cold{ - pixel_y = 28 - }, -/turf/simulated/floor/tiled{ - name = "cooled floor"; - temperature = 278 - }, -/area/security/forensics_morgue) "up" = ( /obj/effect/floor_decal/industrial/warning/dust{ dir = 6 @@ -7451,15 +6558,6 @@ icon_state = "asteroidplating" }, /area/mine/unexplored) -"vS" = ( -/obj/structure/bed/chair/office/light{ - dir = 8 - }, -/turf/simulated/floor/tiled{ - name = "cooled floor"; - temperature = 278 - }, -/area/security/forensics_morgue) "vX" = ( /obj/structure/window/reinforced, /obj/structure/window/reinforced{ @@ -7467,16 +6565,6 @@ }, /turf/simulated/open, /area/quartermaster/storage) -"vZ" = ( -/obj/machinery/optable{ - name = "Autopsy Table" - }, -/obj/effect/decal/warning_stripes, -/turf/simulated/floor/tiled{ - name = "cooled floor"; - temperature = 278 - }, -/area/security/forensics_morgue) "wc" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/generic, @@ -7531,58 +6619,12 @@ }, /turf/simulated/floor/tiled/white, /area/maintenance/medbay_virology) -"wo" = ( -/obj/structure/table/standard, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/pen/red, -/turf/simulated/floor/tiled{ - name = "cooled floor"; - temperature = 278 - }, -/area/security/forensics_morgue) -"wq" = ( -/obj/machinery/door/firedoor, -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "FT Op" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "FT Op" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "FT Op" - }, -/turf/simulated/floor/plating, -/area/security/forensics_laboratory) "wr" = ( /obj/effect/floor_decal/corner/brown{ dir = 9 }, /turf/simulated/floor/tiled, /area/quartermaster/storage) -"wt" = ( -/obj/effect/floor_decal/corner/beige/diagonal, -/obj/structure/table/glass, -/obj/item/storage/box/slides{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/storage/box/syringes, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/security/forensics_laboratory) "wy" = ( /obj/structure/window/reinforced{ dir = 8 @@ -7782,18 +6824,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/white, /area/maintenance/medbay_virology) -"xT" = ( -/obj/structure/table/standard, -/obj/item/storage/box/masks{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/nitrilebox, -/turf/simulated/floor/tiled{ - name = "cooled floor"; - temperature = 278 - }, -/area/security/forensics_morgue) "yb" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 @@ -8097,16 +7127,6 @@ /obj/effect/floor_decal/corner_wide/green/full, /turf/simulated/floor/tiled/white, /area/medical/upperlevel) -"zU" = ( -/obj/structure/table/standard, -/obj/item/surgery/hemostat, -/obj/item/surgery/retractor, -/obj/item/surgery/circular_saw, -/turf/simulated/floor/tiled{ - name = "cooled floor"; - temperature = 278 - }, -/area/security/forensics_morgue) "zW" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -8114,6 +7134,15 @@ /obj/structure/bed/chair/office/light, /turf/simulated/floor/tiled/white, /area/maintenance/medbay_virology) +"Ab" = ( +/obj/structure/bed/chair{ + dir = 1 + }, +/obj/effect/landmark/start{ + name = "Security Cadet" + }, +/turf/simulated/floor/tiled/dark, +/area/security/training_theoretical) "Ad" = ( /obj/structure/lattice, /obj/structure/disposalpipe/segment{ @@ -8122,26 +7151,6 @@ }, /turf/simulated/open, /area/maintenance/medbay_virology) -"Ai" = ( -/obj/effect/floor_decal/corner/beige/diagonal, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ - name = "Forensic Laboratory"; - req_access = list(4) - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/security/forensics_laboratory) "Ak" = ( /obj/machinery/power/apc{ dir = 4; @@ -8198,22 +7207,25 @@ }, /turf/simulated/floor/tiled, /area/maintenance/interstitial_main) -"Aw" = ( -/obj/machinery/door/firedoor, -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "FT Op" +"Ax" = ( +/obj/machinery/door/airlock/glass_security{ + name = "Security Break Room"; + req_access = list(1) }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "FT Op" +/obj/structure/cable/green{ + icon_state = "4-8" }, -/obj/structure/window/reinforced/polarized{ - id = "FT Op" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/turf/simulated/floor/plating, -/area/security/forensics_laboratory) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/security/break_room) "AB" = ( /obj/structure/ladder{ pixel_y = 16 @@ -8328,18 +7340,6 @@ }, /turf/simulated/floor/tiled, /area/maintenance/interstitial_construction_site/office) -"BB" = ( -/obj/machinery/button/switch/windowtint{ - id = "FT Op"; - pixel_x = 28; - pixel_y = 7 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/turf/simulated/floor/tiled/white, -/area/security/forensics_office) "BC" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/floor_decal/corner/pink{ @@ -8626,21 +7626,6 @@ }, /turf/simulated/floor/tiled, /area/quartermaster/storage) -"Dk" = ( -/obj/structure/table/standard, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/pen/red, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/turf/simulated/floor/tiled/white, -/area/security/forensics_office) "Dt" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/glass_medical{ @@ -8821,6 +7806,30 @@ icon_state = "asteroidplating" }, /area/mine/unexplored) +"Et" = ( +/obj/effect/floor_decal/corner/blue{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/disposalpipe/junction{ + dir = 2; + icon_state = "pipe-j2" + }, +/turf/simulated/floor/tiled, +/area/security/training) "Eu" = ( /obj/structure/grille, /obj/structure/window/reinforced{ @@ -8867,20 +7876,6 @@ /obj/machinery/hologram/holopad, /turf/simulated/floor/tiled/white, /area/maintenance/medbay_interstitial) -"EC" = ( -/obj/machinery/door/firedoor, -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/security/forensics_laboratory) "EI" = ( /obj/machinery/atmospherics/pipe/manifold/hidden{ dir = 8 @@ -9023,15 +8018,6 @@ }, /turf/simulated/floor/tiled/white, /area/maintenance/medbay_virology) -"Fo" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled{ - name = "cooled floor"; - temperature = 278 - }, -/area/security/forensics_morgue) "Fs" = ( /turf/simulated/floor/tiled, /area/quartermaster/storage) @@ -9080,11 +8066,6 @@ }, /turf/simulated/floor/plating, /area/maintenance/medbay_virology) -"FJ" = ( -/obj/structure/filingcabinet/chestdrawer, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/turf/simulated/floor/tiled/white, -/area/security/forensics_office) "FK" = ( /obj/effect/landmark/dungeon_spawn, /turf/unsimulated/chasm_mask, @@ -9355,22 +8336,22 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/white, /area/maintenance/medbay_virology) -"Hw" = ( -/obj/machinery/door/firedoor, -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "FT Op" +"Hx" = ( +/obj/structure/cable/green{ + icon_state = "1-8" }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "FT Op" +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" }, -/obj/structure/window/reinforced/polarized{ - id = "FT Op" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 }, /turf/simulated/floor/plating, -/area/security/forensics_laboratory) +/area/maintenance/security_interstitial) "HC" = ( /obj/machinery/power/smes/buildable{ RCon_tag = "Substation - Construction Level" @@ -9561,22 +8542,6 @@ }, /turf/simulated/floor/plating, /area/maintenance/medbay_interstitial) -"IB" = ( -/obj/machinery/door/firedoor, -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "FT Op" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "FT Op" - }, -/obj/structure/window/reinforced/polarized{ - id = "FT Op" - }, -/turf/simulated/floor/plating, -/area/security/forensics_laboratory) "IC" = ( /obj/effect/floor_decal/industrial/warning/dust{ dir = 1 @@ -10020,13 +8985,6 @@ }, /turf/simulated/floor/plating, /area/maintenance/interstitial_main) -"JI" = ( -/obj/structure/bed/chair/office/light{ - dir = 8 - }, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/turf/simulated/floor/tiled/white, -/area/security/forensics_office) "JJ" = ( /obj/machinery/atmospherics/pipe/manifold4w/hidden, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -10257,11 +9215,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plating, /area/maintenance/interstitial_cargo) -"KA" = ( -/obj/effect/floor_decal/corner/beige/diagonal, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/white, -/area/security/forensics_laboratory) "KC" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/grille/broken, @@ -10389,18 +9342,6 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/tiled, /area/maintenance/interstitial_main) -"Ls" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/tiled{ - name = "cooled floor"; - temperature = 278 - }, -/area/security/forensics_morgue) "Lt" = ( /obj/structure/cable{ d1 = 4; @@ -10918,24 +9859,6 @@ }, /turf/simulated/floor/tiled, /area/maintenance/interstitial_main) -"NL" = ( -/obj/effect/floor_decal/corner/beige/diagonal, -/obj/structure/table/glass, -/obj/item/storage/box/evidence{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/storage/briefcase/crimekit, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -28 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/item/storage/box/fancy/csi_markers, -/turf/simulated/floor/tiled/white, -/area/security/forensics_laboratory) "NQ" = ( /obj/structure/lattice, /obj/structure/closet/crate, @@ -10944,15 +9867,6 @@ /obj/random/tech_supply, /turf/unsimulated/floor/asteroid/ash/rocky, /area/maintenance/interstitial_construction_site) -"NS" = ( -/obj/effect/floor_decal/corner/beige/diagonal, -/obj/structure/table/glass, -/obj/item/reagent_containers/spray/cleaner, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/security/forensics_laboratory) "Om" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/grille, @@ -11012,12 +9926,6 @@ /obj/structure/grille, /turf/simulated/floor/airless, /area/maintenance/interstitial_construction_site/zone_2) -"OM" = ( -/obj/effect/floor_decal/corner/beige/diagonal, -/obj/structure/table/glass, -/obj/item/storage/box/sharps, -/turf/simulated/floor/tiled/white, -/area/security/forensics_laboratory) "ON" = ( /obj/machinery/atmospherics/pipe/manifold/hidden, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -11116,17 +10024,6 @@ icon_state = "asteroidplating" }, /area/mine/unexplored) -"Pk" = ( -/obj/machinery/requests_console{ - department = "Forensic Technician"; - departmentType = 5; - pixel_x = -32 - }, -/obj/structure/table/standard, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/obj/item/paper_scanner, -/turf/simulated/floor/tiled/white, -/area/security/forensics_office) "Pm" = ( /obj/structure/cable{ d1 = 4; @@ -11219,27 +10116,6 @@ /obj/effect/decal/cleanable/cobweb2, /turf/simulated/floor/tiled/white, /area/maintenance/medbay_virology) -"PF" = ( -/obj/structure/closet/crate/freezer, -/turf/simulated/floor/tiled{ - name = "cooled floor"; - temperature = 278 - }, -/area/security/forensics_morgue) -"PG" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/body_scanconsole{ - dir = 1; - layer = 3.01; - pixel_y = 6 - }, -/turf/simulated/floor/tiled{ - name = "cooled floor"; - temperature = 278 - }, -/area/security/forensics_morgue) "PJ" = ( /obj/structure/cable/green{ d1 = 4; @@ -11335,16 +10211,6 @@ /obj/effect/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled, /area/quartermaster/storage) -"Qk" = ( -/obj/effect/floor_decal/corner/beige/diagonal, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/security/forensics_laboratory) "Qp" = ( /obj/machinery/door/firedoor, /obj/structure/window/reinforced, @@ -11454,15 +10320,6 @@ }, /turf/simulated/open, /area/maintenance/medbay_virology) -"QH" = ( -/obj/machinery/bodyscanner{ - dir = 8 - }, -/turf/simulated/floor/tiled{ - name = "cooled floor"; - temperature = 278 - }, -/area/security/forensics_morgue) "QJ" = ( /obj/machinery/atmospherics/binary/pump{ dir = 8; @@ -11581,30 +10438,6 @@ }, /turf/simulated/floor/tiled/white, /area/medical/upperlevel) -"Rs" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/white, -/area/security/forensics_office) -"Rz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled{ - name = "cooled floor"; - temperature = 278 - }, -/area/security/forensics_morgue) "RH" = ( /obj/structure/track{ icon_state = "track9" @@ -11710,17 +10543,6 @@ /obj/effect/floor_decal/corner/green/diagonal, /turf/simulated/floor/tiled/white, /area/medical/psych) -"RS" = ( -/obj/effect/floor_decal/corner/beige/diagonal, -/obj/structure/table/glass, -/obj/machinery/reagentgrinder{ - pixel_y = 7 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/security/forensics_laboratory) "RT" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/floor_decal/industrial/warning/dust{ @@ -11835,6 +10657,16 @@ icon_state = "asteroidplating" }, /area/mine/unexplored) +"Sw" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/disposalpipe/segment, +/obj/structure/sink{ + dir = 8; + pixel_x = -12; + pixel_y = 2 + }, +/turf/simulated/floor/tiled/white, +/area/security/break_room) "Sx" = ( /obj/machinery/door/firedoor, /obj/structure/window/reinforced{ @@ -11939,14 +10771,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/airless, /area/maintenance/interstitial_construction_site) -"Ta" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/hologram/holopad, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/turf/simulated/floor/tiled/white, -/area/security/forensics_office) "Ti" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 @@ -11963,21 +10787,6 @@ /obj/effect/floor_decal/corner/grey/diagonal, /turf/simulated/floor/tiled, /area/hallway/secondary/entry/stairs) -"Tn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/security/forensics_office) "Ts" = ( /obj/machinery/light{ dir = 8; @@ -12050,13 +10859,6 @@ /obj/effect/floor_decal/corner/grey/diagonal, /turf/simulated/floor/tiled, /area/hallway/secondary/entry/stairs) -"TH" = ( -/obj/structure/table/standard, -/obj/item/stack/packageWrap, -/obj/item/device/hand_labeler, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/turf/simulated/floor/tiled/white, -/area/security/forensics_office) "TL" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 @@ -12161,11 +10963,6 @@ "Ul" = ( /turf/simulated/open, /area/hallway/secondary/entry/stairs) -"Un" = ( -/obj/item/modular_computer/console/preset/security/investigations, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/turf/simulated/floor/tiled/white, -/area/security/forensics_office) "Uq" = ( /obj/structure/table/reinforced/steel, /obj/item/folder/yellow, @@ -12182,17 +10979,6 @@ }, /turf/simulated/floor/tiled/white, /area/maintenance/medbay_virology) -"Uv" = ( -/obj/structure/sink/kitchen{ - dir = 8; - name = "Autopsy sink"; - pixel_x = 20 - }, -/turf/simulated/floor/tiled{ - name = "cooled floor"; - temperature = 278 - }, -/area/security/forensics_morgue) "Uy" = ( /obj/structure/closet/crate, /obj/effect/floor_decal/corner/brown{ @@ -12320,10 +11106,6 @@ }, /turf/simulated/floor/tiled/white, /area/maintenance/medbay_virology) -"UP" = ( -/obj/effect/floor_decal/corner/paleblue/diagonal, -/turf/simulated/floor/tiled/white, -/area/security/forensics_office) "US" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 @@ -12737,12 +11519,6 @@ }, /turf/simulated/floor/tiled/white, /area/medical/upperlevel) -"XT" = ( -/obj/structure/table/standard, -/obj/item/folder/sec, -/obj/effect/floor_decal/corner/paleblue/diagonal, -/turf/simulated/floor/tiled/white, -/area/security/forensics_office) "XV" = ( /obj/structure/cable{ d1 = 4; @@ -12799,18 +11575,6 @@ }, /turf/simulated/floor/tiled/white, /area/medical/upperlevel) -"Yk" = ( -/obj/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/ramp/bottom{ - dir = 4 - }, -/area/security/forensics_morgue) "Yo" = ( /obj/machinery/power/sensor{ long_range = 1; @@ -12881,16 +11645,6 @@ }, /turf/simulated/floor/plating, /area/medical/upperlevel) -"YM" = ( -/obj/effect/floor_decal/corner/beige/diagonal, -/obj/structure/table/glass, -/obj/item/reagent_containers/glass/beaker/large, -/obj/machinery/light{ - dir = 4 - }, -/obj/item/device/mass_spectrometer, -/turf/simulated/floor/tiled/white, -/area/security/forensics_laboratory) "YN" = ( /obj/structure/lattice/catwalk, /obj/structure/disposalpipe/down{ @@ -12921,9 +11675,19 @@ /turf/simulated/wall, /area/maintenance/medbay_interstitial) "YU" = ( -/obj/structure/filingcabinet/chestdrawer, -/turf/simulated/floor/lino/grey, -/area/security/detectives_office) +/obj/structure/closet/secure_closet/freezer{ + icon_broken = "fridgebroken"; + icon_closed = "fridge"; + icon_locked = "fridge1"; + icon_off = "fridgeoff"; + icon_opened = "fridgeopen"; + icon_state = "fridge1"; + name = "refridgerator" + }, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/white, +/area/security/break_room) "YW" = ( /obj/machinery/alarm{ pixel_y = 28 @@ -12977,9 +11741,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/airless, /area/maintenance/interstitial_construction_site) -"Zt" = ( -/turf/simulated/wall, -/area/security/forensics_morgue) "Zu" = ( /obj/item/device/radio/intercom{ dir = 8; @@ -12997,6 +11758,10 @@ "Zz" = ( /turf/simulated/open, /area/turbolift/medical_interstitial) +"ZA" = ( +/obj/effect/floor_decal/spline/fancy/wood, +/turf/simulated/floor/tiled, +/area/security/break_room) "ZE" = ( /obj/structure/cable/green{ d1 = 4; @@ -13025,6 +11790,13 @@ }, /turf/simulated/floor/tiled/white, /area/medical/upperlevel) +"ZM" = ( +/obj/effect/floor_decal/spline/fancy/wood, +/obj/structure/cable/green{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/security/break_room) "ZN" = ( /obj/machinery/door/firedoor, /obj/structure/cable/green{ @@ -46336,7 +45108,7 @@ fD fZ gr gG -gZ +Ab ht ml rp @@ -47358,7 +46130,7 @@ es dA eN dA -dA +Et fq dA dA @@ -47614,12 +46386,12 @@ dL et eC eO -eZ +et +Ax et eC eO -eZ -dc +et gL he hx @@ -47870,7 +46642,7 @@ ef eo eu eD -eP +Sw fa fk fr @@ -48384,16 +47156,16 @@ mZ jz et eF -eR +eP fc fm -fo -fH +ZA +fG gd et WO hg -WX +sC WX WX WX @@ -48641,18 +47413,18 @@ eh eq eu eG -eS +eP fd fn -fo +ZM fI ge et gN hh WX -hQ -ic +WX +ab ab ab aa @@ -48899,17 +47671,17 @@ er ev eH eT -fe +fd fo -ft +ZA fJ gf et gO -hi +hh WX -hQ -id +ab +ab ab ab ab @@ -49155,18 +47927,18 @@ eE eE et eC +so eO +et +eC +so eO -eZ -et -fK -gg et +hi +Hx WX -hj -WX -jE -gu +ab +ab ab ab ab @@ -49415,15 +48187,15 @@ ab ab ab ab -fu -fL -gh -gv -gP -hk -hz -hR -ic +ab +ab +ab +WX +WX +WX +WX +ab +ab ab ab ab @@ -49672,15 +48444,15 @@ ab ab ab ab -fv -fM -gi -gw -gQ -hl -gi -hS -id +ab +ab +ab +ab +ab +ab +ab +ab +ab ab ab ab @@ -49926,18 +48698,18 @@ aa ab ab ab -fw -fN -gj -fw -fN -gj -gx -fw -gu -gu -gu -gu +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab ab ab ab @@ -50183,23 +48955,23 @@ aa aa aa ab -fx -XT -Un -Pk -fO -TH -gy -gR -Zt -Zt -Zt -Zt ab ab ab ab ab +ab +ab +ab +ab +ab +ab +ab +aa +ab +ab +ab +ab aa aa aa @@ -50440,24 +49212,24 @@ aa aa aa ab -in -pk -JI -UP -UP -gl -gz -gS -Zt -Zt -Zt -Zt -Zt -Zt -Zt ab ab ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +ab +ab aa aa aa @@ -50697,24 +49469,24 @@ aa aa aa ab -in -Dk -oo -Ta -fQ -Rs -gA -gT -ho -hC -hV -if -im -wo -Zt ab ab ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab aa aa aa @@ -50954,22 +49726,22 @@ aa aa aa ab -fy -FJ -UP -BB -fR -Tn -gB -gU -Zt -Zt -Yk -hX -vS -qf -Zt -Zt +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa ab aa aa @@ -51211,22 +49983,22 @@ aa aa aa ab -fw -fN -gj -qS -hp -Ai -EC -gV -qS -Zt -uo -Rz -Rz -Ls -zU -Zt +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa ab aa aa @@ -51471,19 +50243,19 @@ ab ab ab ab -IB -fT -gm -hW -gW -qS -hF -hX -mn -vZ -Fo -sN -Zt +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa ab ab aa @@ -51728,19 +50500,19 @@ aa ab ab ab -pV -fU -pj -gD -gX -qS -hF -hX -hX -hX -hX -xT -Zt +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa ab aa aa @@ -51985,19 +50757,19 @@ aa ab ab ab -pV -NS -Qk -KA -RS -qS -Zt -QH -PG -Uv -PF -Zt -Zt +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa mo mo aa @@ -52242,19 +51014,19 @@ aa ab ab ab -Hw -wt -YM -OM -NL -qS -Zt -Zt -Zt -Zt -Zt -Zt -mo +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa mo mo aa @@ -52499,15 +51271,15 @@ aa ab ab ab -qS -wq -go -go -Aw -qS -mo -mo -mo +ab +ab +ab +aa +aa +aa +aa +aa +aa mo mo mo @@ -52757,12 +51529,12 @@ aa ab ab ab -ab -ab -ab -ab -mo -mo +aa +aa +aa +aa +aa +aa mo mo mo @@ -53013,9 +51785,9 @@ aa aa aa ab -ab -ab -ab +aa +aa +aa aa mo mo diff --git a/maps/aurora/aurora-6_surface.dmm b/maps/aurora/aurora-6_surface.dmm index 0b7d92758de..9445a09064e 100644 --- a/maps/aurora/aurora-6_surface.dmm +++ b/maps/aurora/aurora-6_surface.dmm @@ -3134,7 +3134,11 @@ }, /area/mine/explored) "cCJ" = ( -/obj/effect/floor_decal/ss13/l1, +/obj/machinery/light, +/obj/effect/floor_decal/corner/blue{ + dir = 10 + }, +/obj/effect/floor_decal/scc_full, /turf/simulated/floor/tiled, /area/hallway/secondary/entry/fore) "cDq" = ( @@ -3202,6 +3206,9 @@ name = "east bump"; pixel_x = 24 }, +/obj/structure/sign/flag/scc{ + pixel_y = 32 + }, /turf/simulated/floor/tiled, /area/tcommsat/entrance) "cFY" = ( @@ -4717,20 +4724,11 @@ /turf/unsimulated/floor/asteroid/ash, /area/mine/explored) "elY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/structure/sign/flag/scc{ + pixel_y = 32 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/ss13/l4, -/turf/simulated/floor/tiled, -/area/hallway/secondary/entry/fore) +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/fitness) "emj" = ( /obj/effect/floor_decal/spline/fancy/wood{ dir = 8 @@ -5298,6 +5296,7 @@ /obj/item/tank/oxygen, /obj/item/clothing/suit/space, /obj/item/clothing/mask/gas/alt, +/obj/item/clothing/mask/gas/half, /obj/item/clothing/head/helmet/space, /turf/simulated/floor/tiled/dark, /area/shuttle/research) @@ -13216,9 +13215,11 @@ /turf/simulated/floor/plating, /area/bridge/levela) "lOa" = ( -/obj/effect/floor_decal/ss13/l11, -/turf/simulated/floor/tiled, -/area/hallway/secondary/entry/fore) +/obj/structure/sign/flag/scc{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/toilet) "lON" = ( /obj/machinery/light/small/emergency{ dir = 8 @@ -14504,6 +14505,9 @@ c_tag = "Bridge - Surface Research Airlock"; pixel_x = 22 }, +/obj/structure/sign/flag/scc{ + pixel_y = 32 + }, /turf/simulated/floor/plating, /area/bridge/levela/research_dock) "naj" = ( @@ -14717,10 +14721,6 @@ }, /turf/simulated/floor/tiled, /area/bridge/levela) -"njM" = ( -/obj/effect/floor_decal/ss13/l5, -/turf/simulated/floor/tiled, -/area/hallway/secondary/entry/fore) "nki" = ( /obj/structure/sign/securearea{ desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; @@ -15785,10 +15785,6 @@ }, /turf/simulated/floor/plating, /area/maintenance/solarmaint) -"oet" = ( -/obj/effect/floor_decal/ss13/l3, -/turf/simulated/floor/tiled, -/area/hallway/secondary/entry/fore) "ofd" = ( /turf/simulated/wall/shuttle/unique/escape_pod{ icon_state = "0,1" @@ -17771,17 +17767,6 @@ }, /turf/simulated/floor/tiled, /area/security/checkpoint2) -"pLr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/ss13/l7, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/hallway/secondary/entry/fore) "pLs" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 @@ -19893,10 +19878,6 @@ }, /turf/simulated/floor/airless, /area/solar/fore) -"rDA" = ( -/obj/effect/floor_decal/ss13/l9, -/turf/simulated/floor/tiled, -/area/hallway/secondary/entry/fore) "rDM" = ( /obj/machinery/embedded_controller/radio/airlock/docking_port{ frequency = 1380; @@ -21144,21 +21125,6 @@ }, /turf/simulated/floor/tiled, /area/hallway/secondary/entry/aft) -"sMB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/ss13/l14, -/turf/simulated/floor/tiled, -/area/hallway/secondary/entry/fore) "sMU" = ( /obj/machinery/cryopod, /obj/effect/floor_decal/corner/grey/diagonal, @@ -22635,21 +22601,6 @@ }, /turf/simulated/floor/tiled, /area/hallway/secondary/entry/dock) -"tUM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/ss13/l2, -/turf/simulated/floor/tiled, -/area/hallway/secondary/entry/fore) "tUX" = ( /obj/structure/grille, /obj/structure/window/reinforced, @@ -22682,21 +22633,6 @@ }, /turf/simulated/floor/wood, /area/crew_quarters/sleep/bedrooms) -"tXe" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/ss13/l10, -/turf/simulated/floor/tiled, -/area/hallway/secondary/entry/fore) "tYg" = ( /obj/machinery/atmospherics/unary/vent_pump/high_volume{ dir = 8; @@ -23349,21 +23285,6 @@ /obj/machinery/door/firedoor, /turf/simulated/floor/plating, /area/hallway/secondary/entry/emergency) -"uAA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/ss13/l6, -/turf/simulated/floor/tiled, -/area/hallway/secondary/entry/fore) "uAC" = ( /obj/machinery/shield_capacitor{ dir = 4 @@ -23797,7 +23718,6 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/ss13/l8, /obj/structure/cable/green{ d1 = 1; d2 = 8; @@ -24864,10 +24784,6 @@ }, /turf/simulated/floor/wood, /area/store) -"vSy" = ( -/obj/effect/floor_decal/ss13/l13, -/turf/simulated/floor/tiled, -/area/hallway/secondary/entry/fore) "vTm" = ( /turf/simulated/wall/shuttle/unique/research{ desc = "The largest commercially available sublight engine, with a shuttle built around it and painted in NanoTrasen research division colors. Looks sleek, and fast."; @@ -26033,6 +25949,9 @@ dir = 9 }, /obj/effect/decal/cleanable/dirt, +/obj/structure/sign/flag/scc{ + pixel_y = 32 + }, /turf/simulated/floor/plating, /area/bridge/levela/research_dock) "wSl" = ( @@ -26545,21 +26464,6 @@ }, /turf/simulated/floor/plating, /area/maintenance/telecoms_ladder) -"xqQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/ss13/l12, -/turf/simulated/floor/tiled, -/area/hallway/secondary/entry/fore) "xrt" = ( /obj/structure/closet/secure_closet/personal, /turf/simulated/floor/tiled, @@ -53362,8 +53266,8 @@ cTx oEQ res vHg -cCJ -tUM +oUS +kqa aXy wqg anj @@ -53619,9 +53523,9 @@ pMI qmj twe lkM -oet -elY -nxU +oUS +kqa +cCJ tJP kKw une @@ -53876,8 +53780,8 @@ wMf oRz jYz vHg -njM -uAA +oUS +kqa aXy anj opK @@ -54133,7 +54037,7 @@ fho dEA nBO ooj -pLr +cZM uUH aXy bzh @@ -54390,8 +54294,8 @@ iBN tUq jYz vHg -rDA -tXe +oUS +kqa aCD anj xjq @@ -54647,8 +54551,8 @@ pMI qmj twe hkf -lOa -xqQ +oUS +kqa nxU gXx uDh @@ -54904,8 +54808,8 @@ wIs wIs eWl vHg -vSy -sMB +oUS +kqa aXy hxR anj @@ -57779,7 +57683,7 @@ xpj pTq gqB meV -kjO +lOa kjO kjO vnh @@ -60596,7 +60500,7 @@ rYN rYN rYN wbM -ouv +elY uoC ouv eKv diff --git a/maps/aurora/code/aurora_lifts.dm b/maps/aurora/code/aurora_lifts.dm index 503c65b4985..348c1b04c40 100644 --- a/maps/aurora/code/aurora_lifts.dm +++ b/maps/aurora/code/aurora_lifts.dm @@ -225,7 +225,7 @@ /area/turbolift/medical_station name = "Medical Lift - Main" - lift_announce_str = "Arriving at the Medical Main Level. Facilities in this floor include: Lobby, Chemistry, Intensive Care Unit, General Treatment Unit, Surgery Wing, Consultation Wing, Cloning Wing." + lift_announce_str = "Arriving at the Medical Main Level. Facilities in this floor include: Lobby, Chemistry, Intensive Care Unit, General Treatment Unit, Surgery Wing, Consultation Wing." lift_floor_label = "Main Level (Medical)" lift_floor_name = "Main Level (Medical)" diff --git a/maps/exodus/exodus-1_station.dmm b/maps/exodus/exodus-1_station.dmm index 7a08e3064cb..04502f6a902 100644 --- a/maps/exodus/exodus-1_station.dmm +++ b/maps/exodus/exodus-1_station.dmm @@ -5719,9 +5719,6 @@ "akG" = ( /turf/simulated/wall, /area/security/forensics_office) -"akH" = ( -/turf/simulated/wall, -/area/security/detectives_office) "akI" = ( /obj/machinery/light_switch{ name = "light switch "; @@ -6507,7 +6504,7 @@ id = "Detective" }, /turf/simulated/floor/plating, -/area/security/detectives_office) +/area/security/forensics_office) "alW" = ( /obj/machinery/door/firedoor, /obj/structure/grille, @@ -6523,7 +6520,7 @@ id = "Detective" }, /turf/simulated/floor/plating, -/area/security/detectives_office) +/area/security/forensics_office) "alX" = ( /obj/machinery/door/firedoor, /obj/structure/grille, @@ -6543,7 +6540,7 @@ id = "Detective" }, /turf/simulated/floor/plating, -/area/security/detectives_office) +/area/security/forensics_office) "alZ" = ( /obj/effect/floor_decal/corner/blue{ dir = 9 @@ -6558,7 +6555,7 @@ /area/security/forensics_office) "ama" = ( /turf/simulated/floor/carpet, -/area/security/detectives_office) +/area/security/forensics_office) "amb" = ( /obj/structure/cable/green{ d1 = 1; @@ -6850,19 +6847,19 @@ "amG" = ( /obj/item/modular_computer/console/preset/security/investigations, /turf/simulated/floor/lino, -/area/security/detectives_office) +/area/security/forensics_office) "amI" = ( /obj/structure/bed/chair/comfy/beige, /obj/structure/window/reinforced{ dir = 8 }, /turf/simulated/floor/carpet, -/area/security/detectives_office) +/area/security/forensics_office) "amJ" = ( /obj/structure/table/wood, /obj/item/device/flashlight/lamp/green, /turf/simulated/floor/carpet, -/area/security/detectives_office) +/area/security/forensics_office) "amL" = ( /obj/machinery/photocopier, /obj/effect/floor_decal/corner/blue{ @@ -7187,29 +7184,29 @@ id = "Detective" }, /turf/simulated/floor/plating, -/area/security/detectives_office) +/area/security/forensics_office) "anp" = ( /obj/item/stool/padded, /turf/simulated/floor/lino, -/area/security/detectives_office) +/area/security/forensics_office) "anq" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/lino, -/area/security/detectives_office) +/area/security/forensics_office) "anr" = ( /obj/machinery/hologram/holopad, /turf/simulated/floor/carpet, -/area/security/detectives_office) +/area/security/forensics_office) "ans" = ( /obj/structure/table/wood, /obj/item/folder/sec, /obj/item/pen, /turf/simulated/floor/carpet, -/area/security/detectives_office) +/area/security/forensics_office) "anu" = ( /obj/effect/floor_decal/corner/blue/full, /obj/machinery/disposal, -/obj/structure/closet/secure_closet/csi, +/obj/structure/closet/secure_closet/investigator, /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/security/forensics_office) @@ -7607,7 +7604,7 @@ dir = 4 }, /turf/simulated/floor/lino, -/area/security/detectives_office) +/area/security/forensics_office) "anX" = ( /obj/structure/disposalpipe/segment{ dir = 2; @@ -7615,20 +7612,20 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/lino, -/area/security/detectives_office) +/area/security/forensics_office) "anY" = ( /obj/structure/table/wood, /obj/item/paper_bin, /obj/item/device/taperecorder, /turf/simulated/floor/carpet, -/area/security/detectives_office) +/area/security/forensics_office) "anZ" = ( /obj/machinery/camera/network/security{ c_tag = "Security - Detective's Office"; dir = 8 }, /turf/simulated/floor/carpet, -/area/security/detectives_office) +/area/security/forensics_office) "aob" = ( /obj/machinery/door/firedoor, /obj/structure/grille, @@ -8126,7 +8123,7 @@ pixel_x = -22 }, /turf/simulated/floor/lino, -/area/security/detectives_office) +/area/security/forensics_office) "aoS" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -8134,13 +8131,13 @@ dir = 6 }, /turf/simulated/floor/lino, -/area/security/detectives_office) +/area/security/forensics_office) "aoT" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, /turf/simulated/floor/lino, -/area/security/detectives_office) +/area/security/forensics_office) "aoV" = ( /obj/effect/floor_decal/corner/beige/diagonal, /obj/structure/table/glass, @@ -8507,7 +8504,7 @@ id = "Detective" }, /turf/simulated/floor/plating, -/area/security/detectives_office) +/area/security/forensics_office) "apF" = ( /obj/machinery/photocopier, /obj/machinery/light{ @@ -8516,7 +8513,7 @@ }, /obj/structure/window/reinforced, /turf/simulated/floor/lino, -/area/security/detectives_office) +/area/security/forensics_office) "apH" = ( /obj/effect/floor_decal/corner/beige/diagonal, /turf/simulated/floor/tiled/white, @@ -8932,7 +8929,7 @@ req_access = list(68) }, /turf/simulated/floor/wood, -/area/security/detectives_office) +/area/security/forensics_office) "aqq" = ( /obj/structure/cable/green{ d1 = 4; @@ -8949,7 +8946,7 @@ dir = 4 }, /turf/simulated/floor/wood, -/area/security/detectives_office) +/area/security/forensics_office) "aqr" = ( /obj/structure/window/reinforced{ dir = 4 @@ -8970,13 +8967,13 @@ dir = 9 }, /turf/simulated/floor/wood, -/area/security/detectives_office) +/area/security/forensics_office) "aqs" = ( /turf/simulated/floor/tiled/ramp/bottom{ dir = 1; tag = "icon-rampbot (NORTH)" }, -/area/security/detectives_office) +/area/security/forensics_office) "aqt" = ( /obj/structure/window/reinforced, /obj/structure/window/reinforced{ @@ -8990,7 +8987,7 @@ pictures_left = 30 }, /turf/simulated/floor/lino, -/area/security/detectives_office) +/area/security/forensics_office) "aqv" = ( /obj/effect/floor_decal/corner/beige/diagonal, /obj/structure/table/glass, @@ -9317,14 +9314,14 @@ id = "Detective" }, /turf/simulated/floor/plating, -/area/security/detectives_office) +/area/security/forensics_office) "arb" = ( /obj/machinery/light_switch{ pixel_y = -24 }, /obj/structure/coatrack, /turf/simulated/floor/wood, -/area/security/detectives_office) +/area/security/forensics_office) "arc" = ( /obj/machinery/firealarm/south, /obj/structure/cable/green{ @@ -9333,7 +9330,7 @@ icon_state = "1-4" }, /turf/simulated/floor/wood, -/area/security/detectives_office) +/area/security/forensics_office) "ard" = ( /obj/structure/cable/green{ d1 = 4; @@ -9341,7 +9338,7 @@ icon_state = "4-8" }, /turf/simulated/floor/wood, -/area/security/detectives_office) +/area/security/forensics_office) "arf" = ( /obj/effect/floor_decal/corner/beige/diagonal, /obj/structure/table/glass, @@ -74405,7 +74402,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/window/reinforced, /turf/simulated/floor/lino, -/area/security/detectives_office) +/area/security/forensics_office) "dDo" = ( /obj/machinery/mass_driver{ dir = 4; @@ -74537,7 +74534,7 @@ dir = 4 }, /turf/simulated/floor/lino, -/area/security/detectives_office) +/area/security/forensics_office) "eGm" = ( /obj/machinery/door/firedoor, /obj/structure/grille, @@ -75120,7 +75117,7 @@ icon_state = "tube1" }, /turf/simulated/floor/carpet, -/area/security/detectives_office) +/area/security/forensics_office) "kSF" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -75186,7 +75183,7 @@ /area/medical/psych) "man" = ( /turf/simulated/floor/wood, -/area/security/detectives_office) +/area/security/forensics_office) "maN" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -75458,13 +75455,6 @@ }, /turf/simulated/floor/tiled, /area/hallway/secondary/exit) -"oeU" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance{ - req_one_access = list(4,68) - }, -/turf/simulated/floor/plating, -/area/security/detectives_office) "onz" = ( /obj/effect/floor_decal/corner/white{ dir = 4 @@ -75738,7 +75728,7 @@ id = "Detective" }, /turf/simulated/floor/plating, -/area/security/detectives_office) +/area/security/forensics_office) "qDO" = ( /obj/structure/filingcabinet/chestdrawer, /obj/machinery/ringer{ @@ -76138,7 +76128,7 @@ "sxU" = ( /obj/machinery/computer/security, /turf/simulated/floor/carpet, -/area/security/detectives_office) +/area/security/forensics_office) "szr" = ( /obj/structure/table/standard, /obj/item/device/camera, @@ -76378,7 +76368,7 @@ id = "Detective" }, /turf/simulated/floor/plating, -/area/security/detectives_office) +/area/security/forensics_office) "uev" = ( /obj/machinery/optable{ name = "Autopsy Table" @@ -76465,7 +76455,7 @@ pixel_x = 32 }, /turf/simulated/floor/lino, -/area/security/detectives_office) +/area/security/forensics_office) "uDW" = ( /obj/structure/bed/chair/office/light, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -76531,7 +76521,7 @@ icon_state = "0-8" }, /turf/simulated/floor/wood, -/area/security/detectives_office) +/area/security/forensics_office) "uTU" = ( /obj/machinery/door/airlock/external{ frequency = 1380; @@ -76893,10 +76883,10 @@ /area/rnd/test_area) "xSj" = ( /obj/structure/window/reinforced, -/obj/structure/closet/secure_closet/detective, +/obj/structure/closet/secure_closet/investigator, /obj/item/book/manual/wiki/security_space_law, /turf/simulated/floor/lino, -/area/security/detectives_office) +/area/security/forensics_office) "xUB" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/maintenance{ @@ -76906,7 +76896,7 @@ /area/security/forensics_office) "xXA" = ( /turf/simulated/floor/lino, -/area/security/detectives_office) +/area/security/forensics_office) (1,1,1) = {" aaa @@ -106292,11 +106282,11 @@ ajm ajR akv ali -akH +akG ubu ano qrg -akH +akG apE aqp ara @@ -106557,7 +106547,7 @@ aoR apF aqq arb -akH +akG apc atb atK @@ -106814,7 +106804,7 @@ aoS duM aqr arc -akH +akG apc rio ath @@ -107063,7 +107053,7 @@ ajp agY aky ale -akH +akG amI ama anr @@ -107071,7 +107061,7 @@ etT xXA aqs ard -akH +akG apR atc ath @@ -107328,7 +107318,7 @@ aoT xXA aqt uTs -akH +akG apR atd ath @@ -107577,7 +107567,7 @@ ajr agG sps alm -akH +akG sxU kOs anZ @@ -107585,7 +107575,7 @@ xXA uCO xSj man -oeU +xUB apR atd ath @@ -107834,15 +107824,15 @@ ajs agy akA aln -akH -akH -akH -akH -akH -akH -akH -akH -akH +akG +akG +akG +akG +akG +akG +akG +akG +akG asp atd atL diff --git a/maps/exodus/exodus-2_centcomm.dmm b/maps/exodus/exodus-2_centcomm.dmm index 7c6baa2931b..e635afc730d 100644 --- a/maps/exodus/exodus-2_centcomm.dmm +++ b/maps/exodus/exodus-2_centcomm.dmm @@ -14459,10 +14459,10 @@ /area/centcom/control) "aVR" = ( /obj/structure/table/reinforced, -/obj/item/mecha_equipment/mounted_system/taser/ion, -/obj/item/mecha_equipment/mounted_system/taser, -/obj/item/mecha_equipment/mounted_system/taser/laser, -/obj/item/mecha_equipment/mounted_system/taser/smg, +/obj/item/mecha_equipment/mounted_system/combat/ion, +/obj/item/mecha_equipment/mounted_system/combat/taser, +/obj/item/mecha_equipment/mounted_system/combat/laser, +/obj/item/mecha_equipment/mounted_system/combat/smg, /turf/unsimulated/floor{ dir = 1; icon_state = "vault" diff --git a/nano/templates/apc.tmpl b/nano/templates/apc.tmpl deleted file mode 100644 index 1b87d9ed7b1..00000000000 --- a/nano/templates/apc.tmpl +++ /dev/null @@ -1,231 +0,0 @@ -{{if data.failTime}} -
    -

    SYSTEM FAILURE

    - I/O regulators malfunction detected! Waiting for system reboot...
    - Automatic reboot in {{:data.failTime}} seconds... - {{:helper.link('Reboot Now', 'refresh', {'reboot' : 1})}}


    -
    -{{else}} -
    - {{if data.siliconUser}} -
    - Interface Lock: -
    -
    - {{:helper.link('Engaged', 'locked', {'toggleaccess' : 1}, data.locked ? 'selected' : null)}}{{:helper.link('Disengaged', 'unlocked', {'toggleaccess' : 1}, data.malfStatus >= 2 ? 'linkOff' : (data.locked ? null : 'selected'))}} -
    -
    - {{else}} - {{if data.locked}} - Swipe an ID card to unlock this interface - {{else}} - Swipe an ID card to lock this interface - {{/if}} - {{/if}} -
    - -
    - -

    Power Status

    - -
    -
    - Main Breaker: -
    -
    - {{if data.locked && !data.siliconUser}} - {{if data.isOperating}} - On - {{else}} - Off - {{/if}} - {{else}} - {{:helper.link('On', 'power', {'breaker' : 1}, data.isOperating ? 'selected' : null)}}{{:helper.link('Off', 'close', {'breaker' : 1}, data.isOperating ? null : 'selected')}} - {{/if}} -
    -
    - -
    -
    - External Power: -
    -
    - {{if data.externalPower == 2}} - Good - {{else data.externalPower == 1}} - Low - {{else}} - None - {{/if}} -
    -
    - -
    -
    - Power Cell: -
    - {{if data.powerCellStatus == null}} -
    - Power cell removed. -
    - {{else}} - - {{:helper.displayBar(data.powerCellStatus, 0, 100, (data.powerCellStatus >= 50) ? 'good' : (data.powerCellStatus >= 25) ? 'average' : 'bad')}} -
    - {{:helper.round(data.powerCellStatus*10)/10}}% -
    - {{/if}} -
    - -
    -
    - Power Cell charge status: -
    -
    -
    - {{if data.charge_mode == 1}} - APC's power cell will be fully charged in {{:data.time}} - {{else data.charge_mode == 2}} - APC's power cell input and output are equal - {{else}} - APC's power cell will run out of charge in {{:data.time}} - {{/if}} - -
    -
    -
    - - {{if data.powerCellStatus != null}} -
    -
    - Charge Mode: -
    -
    - {{if data.locked && !data.siliconUser}} - {{if data.chargeMode}} - Auto - {{else}} - Off - {{/if}} - {{else}} - {{:helper.link('Auto', 'refresh', {'cmode' : 1}, data.chargeMode ? 'selected' : null)}}{{:helper.link('Off', 'close', {'cmode' : 1}, data.chargeMode ? null : 'selected')}} - {{/if}} -   - {{if data.chargingStatus > 1}} - [Fully Charged] - {{else data.chargingStatus == 1}} - [Charging] - {{else}} - [Not Charging] - {{/if}} -
    -
    - {{/if}} -
    -
    - Night Lighting: -
    -
    - {{:helper.link('On', 'night', {'lmode' : 'on'}, data.lightingMode ? 'selected' : null)}}{{:helper.link('Off', 'close', {'lmode' : 'off'}, data.lightingMode ? null : 'selected')}} -
    -
    -
    -
    - Emergency Lighting: -
    -
    - {{if data.locked && !data.siliconUser}} - {{if data.emergencyMode}} - On - {{else}} - Off - {{/if}} -
    - {{else}} - {{:helper.link(data.emergencyMode ? 'On' : 'Off', 'lightbulb', {'emergency_lights' : data.emergencyMode ? 'on' : 'off'}, null)}} - {{/if}} -
    -
    - -

    Power Channels

    - - {{for data.powerChannels}} -
    -
    - {{:value.title}}: -
    -
    - {{:value.powerLoad}} W -
    -
    -    - {{if value.status <= 1}} - Off - {{else value.status >= 2}} - On - {{/if}} - {{if data.locked}} - {{if value.status == 1 || value.status == 3}} -   Auto - {{else}} -   Manual - {{/if}} - {{/if}} -
    - {{if !data.locked || data.siliconUser}} -
    - {{:helper.link('Auto', 'refresh', value.topicParams.auto, (value.status == 1 || value.status == 3) ? 'selected' : null)}} - {{:helper.link('On', 'power', value.topicParams.on, (value.status == 2) ? 'selected' : null)}} - {{:helper.link('Off', 'close', value.topicParams.off, (value.status == 0) ? 'selected' : null)}} -
    - {{/if}} -
    - {{/for}} - -
    -
    - Total Load: -
    -
    - {{if data.totalCharging}} - {{:data.totalLoad}}W (+ {{:data.totalCharging}}W Charging) - {{else}} - {{:data.totalLoad}}W - {{/if}} -
    -
    - -
     
    - -
    -
    - Cover Lock: -
    -
    - {{if data.locked && !data.siliconUser}} - {{if data.coverLocked}} - Engaged - {{else}} - Disengaged - {{/if}} - {{else}} - {{:helper.link('Engaged', 'locked', {'lock' : 1}, data.coverLocked ? 'selected' : null)}}{{:helper.link('Disengaged', 'unlocked', {'lock' : 1}, data.coverLocked ? null : 'selected')}} - {{/if}} -
    -
    - - {{if data.siliconUser}} -

    System Overrides

    - -
    - {{:helper.link('Overload Lighting Circuit', 'lightbulb', {'overload' : 1})}} - {{if data.malfStatus == 1}} - {{:helper.link('Override Programming', 'script', {'malfhack' : 1})}} - {{else data.malfStatus > 1}} -
    APC Hacked
    - {{/if}} -
    - {{/if}} - -
-{{/if}} diff --git a/nano/templates/appearance_changer.tmpl b/nano/templates/appearance_changer.tmpl deleted file mode 100644 index 3d645edfbc2..00000000000 --- a/nano/templates/appearance_changer.tmpl +++ /dev/null @@ -1,104 +0,0 @@ -{{if data.change_race}} -
-
- Species: -
-
- {{for data.species}} - {{:helper.link(value.specimen, null, { 'race' : value.specimen}, null, data.specimen == value.specimen ? 'selected' : null)}} - {{/for}} -
-
-{{/if}} - -{{if data.change_gender}} -
-
- Gender: -
-
- {{:helper.link('Male', null, { 'gender' : 'male'}, null, data.gender == 'male' ? 'selected' : null)}} - {{:helper.link('Female', null, { 'gender' : 'female'}, null, data.gender == 'female' ? 'selected' : null)}} -
-
-{{/if}} - -{{if data.change_accent}} -
-
- Accents: -
-
- {{for data.accents}} - {{:helper.link(value.accent, null, { 'accent' : value.accent}, null, data.accent == value.accent ? 'selected' : null)}} - {{/for}} -
-
-{{/if}} - -{{if data.change_language}} -
-
- Languages: -
-
- {{for data.languages}} - {{:helper.link(value.language, null, { 'language' : value.language}, null, null)}} - {{/for}} -
-
-{{/if}} - -{{if data.change_eye_color || data.change_skin_tone || data.change_skin_color || data.change_hair_color || data.change_facial_hair_color}} -
-
- Colors: -
-
- {{if data.change_eye_color}} - {{:helper.link('Change eye color', null, { 'eye_color' : 1})}} - {{/if}} - {{if data.change_skin_tone}} - {{:helper.link('Change skin tone', null, { 'skin_tone' : 1})}} - {{/if}} - {{if data.change_skin_preset}} - {{:helper.link('Change skin preset', null, { 'skin_preset' : 1})}} - {{/if}} - {{if data.change_skin_color && !data.change_skin_preset}} - {{:helper.link('Change skin color', null, { 'skin_color' : 1})}} - {{/if}} - {{if data.change_hair_color}} - {{:helper.link('Change hair color', null, { 'hair_color' : 1})}} - {{/if}} - {{if data.change_facial_hair_color}} - {{:helper.link('Change facial hair color', null, { 'facial_hair_color' : 1})}} - {{/if}} -
-
-{{/if}} - -{{if data.change_hair}} -
-
- Hair styles: -
-
- {{for data.hair_styles}} - {{:helper.link(value.hairstyle, null, { 'hair' : value.hairstyle}, null, data.hair_style == value.hairstyle ? 'selected' : null)}} - {{/for}} -
-
-{{/if}} - -{{if data.change_facial_hair}} -
-
- Facial hair styles: -
-
- {{for data.facial_hair_styles}} - {{:helper.link(value.facialhairstyle, null, { 'facial_hair' : value.facialhairstyle}, null, data.facial_hair_style == value.facialhairstyle ? 'selected' : null)}} - {{/for}} -
-
-{{/if}} diff --git a/nano/templates/smes.tmpl b/nano/templates/smes.tmpl deleted file mode 100644 index 79d3d97b531..00000000000 --- a/nano/templates/smes.tmpl +++ /dev/null @@ -1,128 +0,0 @@ -{{if data.failTime}} -
-

SYSTEM FAILURE

- I/O regulators malfunction detected! Waiting for system reboot...
- Automatic reboot in {{:data.failTime}} seconds... - {{:helper.link('Reboot Now', 'refresh', {'reboot' : 1})}}


-
-{{else}} -
-
- Stored Capacity: -
-
- {{:helper.displayBar(data.storedCapacity, 0, 100, data.charging ? 'good' : 'average')}} -
- {{:helper.round(data.storedCapacity)}}% -
-
-
- -
-
- Charge status: -
-
-
- {{if data.charge_mode == 1}} - SMES will be fully charged in {{:data.time}} - {{else data.charge_mode == 2}} - SMES input and output are equal - {{else}} - SMES will run out of charge in {{:data.time}} - {{/if}} - -
-
-
- -

Input Management

-
-
- Charge Mode: -
-
- {{:helper.link('Auto', 'refresh', {'cmode' : 1}, data.chargeMode ? 'selected' : null)}}{{:helper.link('Off', 'close', {'cmode' : 1}, data.chargeMode ? null : 'selected')}} -   - {{if data.charging == 2}} - [Charging] - {{else data.charging == 1}} - [Partially Charging] - {{else}} - [Not Charging] - {{/if}} -
-
- -
-
- Input Level: -
-
- {{:helper.displayBar(data.chargeLevel, 0, data.chargeMax)}} -
- {{:helper.link('MIN', null, {'input' : 'min'}, (data.chargeLevel > 0) ? null : 'disabled')}} - {{:helper.link('SET', null, {'input' : 'set'}, null)}} - {{:helper.link('MAX', null, {'input' : 'max'}, (data.chargeLevel < data.chargeMax) ? null : 'disabled')}} -
 {{:data.chargeLevel}} W 
-
-
- -
-
- Input Load: -
-
- {{:helper.displayBar(data.charge_taken, 0, data.chargeMax, (data.charge_taken < data.chargeLevel) ? 'average' : 'good')}} -
- {{:data.charge_taken}} W -
-
-
- -

Output Management

-
-
- Output Status: -
-
- {{:helper.link('Online', 'power', {'online' : 1}, data.outputOnline ? 'selected' : null)}}{{:helper.link('Offline', 'close', {'online' : 1}, data.outputOnline ? null : 'selected')}} -   - {{if data.outputting == 2}} - [Outputting] - {{else data.outputting == 1}} - [Disconnected or No Charge] - {{else}} - [Not Outputting] - {{/if}} -
-
- -
-
- Output Level: -
-
- {{:helper.displayBar(data.outputLevel, 0, data.outputMax)}} -
- {{:helper.link('MIN', null, {'output' : 'min'}, (data.outputLevel > 0) ? null : 'disabled')}} - {{:helper.link('SET', null, {'output' : 'set'}, null)}} - {{:helper.link('MAX', null, {'output' : 'max'}, (data.outputLevel < data.outputMax) ? null : 'disabled')}} -
 {{:data.outputLevel}} W 
-
-
-
- -
-
- Output Load: -
-
- {{:helper.displayBar(data.outputLoad, 0, data.outputMax, (data.outputLoad < data.outputLevel) ? 'good' : 'average')}} -
- {{:data.outputLoad}} W -
-
-
- -{{/if}} diff --git a/nano/templates/supermatter_crystal.tmpl b/nano/templates/supermatter_crystal.tmpl deleted file mode 100644 index b06aaae7466..00000000000 --- a/nano/templates/supermatter_crystal.tmpl +++ /dev/null @@ -1,25 +0,0 @@ -{{if data.detonating}} -
-

CRYSTAL DELAMINATING

-

Evacuate area immediately

-
-
-{{else}} -

Crystal Integrity

- {{:helper.displayBar(data.integrity_percentage, 0, 100, (data.integrity_percentage >= 90) ? 'good' : (data.integrity_percentage >= 25) ? 'average' : 'bad')}} - {{:data.integrity_percentage}} % -

Environment

- - Temperature: - - - {{:helper.displayBar(data.ambient_temp, 0, 10000, (data.ambient_temp >= 5000) ? 'bad' : (data.ambient_temp >= 4000) ? 'average' : 'good')}} - {{:data.ambient_temp}} K - - - Pressure: - - - {{:data.ambient_pressure}} kPa - -{{/if}} \ No newline at end of file diff --git a/scripts/code_check.sh b/scripts/code_check.sh index f4e6da42baf..fe6de25e857 100644 --- a/scripts/code_check.sh +++ b/scripts/code_check.sh @@ -83,6 +83,15 @@ else echo "PASS: to_world count matches" >> code_error.log fi +echo "Checking for edge = 0/1 uses:" >> code_error.log +grep -r '\bedge\s*=\s*\d' **/*.dm >> code_error.log +if [ $? -eq 0 ]; then + ERROR_COUNT=$(($ERROR_COUNT+1)) + echo "FAIL: Found edge = 0/1 in code" >> code_error.log +else + echo "PASS: Did not find edge = 0/1 in code:" >> code_error.log +fi + echo "Found $ERROR_COUNT Errors while performing code check" if [ $ERROR_COUNT -ne 0 ]; then diff --git a/scripts/dm.sh b/scripts/dm.sh index 19c20035507..9fa063e788a 100755 --- a/scripts/dm.sh +++ b/scripts/dm.sh @@ -56,4 +56,6 @@ fi rm $dmepath.mdme +chmod -R a+rwX . + exit $retval diff --git a/sound/mecha/mech-shutdown.ogg b/sound/mecha/mech-shutdown.ogg new file mode 100644 index 00000000000..9733bb26df5 Binary files /dev/null and b/sound/mecha/mech-shutdown.ogg differ diff --git a/sound/weapons/energy_repeater.ogg b/sound/weapons/energy_repeater.ogg new file mode 100644 index 00000000000..27db94dcc7c Binary files /dev/null and b/sound/weapons/energy_repeater.ogg differ diff --git a/strings/phobia.json b/strings/phobia.json deleted file mode 100644 index 100253cfd2e..00000000000 --- a/strings/phobia.json +++ /dev/null @@ -1,192 +0,0 @@ -{ - "spiders": [ - "spider", - "web", - "arachnid", - "spiderling" - ], - - "space": [ - "space", - "star", - "universe", - "void", - "galaxy", - "spess", - "hole", - "deep", - "high" - ], - - "security": [ - " sec ", - "security", - "shitcurity", - "baton", - "taser", - "beepsky", - "hos", - "brig", - "gulag", - "communal", - "officer", - "regulation" - ], - - "doctors": [ - " med ", - " sci ", - "medbay", - "medical", - "science", - "rnd", - "r&d", - "cmo", - "doctor", - "scientist", - "dr", - "doc", - "surgery", - "clone", - "cloning", - "chemistry", - "lesbay" - ], - - "clowns": [ - "clown", - "honk", - "banana", - "slip" - ], - - "unathi": [ - "hiss", - "unathi", - "lizard", - "hegemony", - "honor", - "spear", - "izweski", - "sinta", - "sss" - ], - - "cats": [ - "tajara", - "adhomai", - "meow", - "runtime", - "bones", - "communism", - "rrr" - ], - - "humans": [ - "man", - "sol", - "opposable thumbs", - "ape", - "monkey", - "earth" - ], - - "skrell": [ - "frog", - "warble", - "tentacle", - "headtail", - "jargon", - "glorsh", - "tup" - ], - - "robots": [ - "AI", - "borg", - "IPC", - "posi", - "bot", - "glorsh", - "mech", - "synth", - "drone" - ], - - "pests": [ - "vaurca", - "bug", - "diona", - "nymph", - "roach", - "mouse", - "mice", - "rats", - "rat", - "blob", - "carp", - "vines" - ], - - "nanotrasen": [ - "NT", - "trasen", - "phoron", - "CCIA", - "IAA", - "internal affairs", - "duty officer", - "odin", - "aurora", - "NSS", - "CC", - "central command", - "centcom", - "loyalty implant", - "LI", - "captain" - ], - - "filth": [ - "blood", - "dirty", - "vomit", - "filth", - "disgusting", - "unclean", - "unsanitary" - ], - - "paranormals": [ - "wizard", - "cult", - "nar'sie", - "magic", - "skeleton", - "undead", - "paranormal", - "ghost" - ], - - "death": [ - "death", - "dying", - "dead", - " die", - "heaven", - "hell", - "afterlife", - "ghost", - "spirit" - ], - - "darkness": [ - "dark", - "black", - "night", - "void", - "sightless", - "blind", - "can't see" - ] -} \ No newline at end of file diff --git a/tools/requirements.txt b/tools/requirements.txt index 7160e56e770..e0b6e2e1a82 100644 --- a/tools/requirements.txt +++ b/tools/requirements.txt @@ -1,3 +1,3 @@ pygit2==1.4.0 bidict==0.21.2 -Pillow==8.0.1 +Pillow==8.1.1 diff --git a/vueui/dist/app.css b/vueui/dist/app.css index 419893741e2..0ec34b0f841 100644 --- a/vueui/dist/app.css +++ b/vueui/dist/app.css @@ -1,4 +1,4 @@ /*! * Font Awesome Free 5.15.1 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - */.fab,.fad,.fal,.far,.fas,.ic,.mapIcon16,.uiIcon16,.uiIcon24{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.ic-lg{font-size:1.3333333333em;line-height:.75em;vertical-align:-.0667em}.ic-xs{font-size:.75em}.ic-sm{font-size:.875em}.ic-1x{font-size:1em}.ic-2x{font-size:2em}.ic-3x{font-size:3em}.ic-4x{font-size:4em}.ic-5x{font-size:5em}.ic-6x{font-size:6em}.ic-7x{font-size:7em}.ic-8x{font-size:8em}.ic-9x{font-size:9em}.ic-10x{font-size:10em}.ic-fw{text-align:center;width:1.25em}.ic-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.ic-ul>li{position:relative}.ic-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.ic-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.ic-pull-left{float:left}.ic-pull-right{float:right}.fab.ic-pull-left,.fal.ic-pull-left,.far.ic-pull-left,.fas.ic-pull-left,.ic-pull-left.mapIcon16,.ic-pull-left.uiIcon16,.ic-pull-left.uiIcon24,.ic.ic-pull-left{margin-right:.3em}.fab.ic-pull-right,.fal.ic-pull-right,.far.ic-pull-right,.fas.ic-pull-right,.ic-pull-right.mapIcon16,.ic-pull-right.uiIcon16,.ic-pull-right.uiIcon24,.ic.ic-pull-right{margin-left:.3em}.ic-spin{animation:fa-spin 2s linear infinite}.ic-pulse{animation:fa-spin 1s steps(8) infinite}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.ic-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-ms-transform:rotate(90deg);transform:rotate(90deg)}.ic-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-ms-transform:rotate(180deg);transform:rotate(180deg)}.ic-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-ms-transform:rotate(270deg);transform:rotate(270deg)}.ic-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-ms-transform:scaleX(-1);transform:scaleX(-1)}.ic-flip-vertical{-ms-transform:scaleY(-1);transform:scaleY(-1)}.ic-flip-both,.ic-flip-horizontal.ic-flip-vertical,.ic-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.ic-flip-both,.ic-flip-horizontal.ic-flip-vertical{-ms-transform:scale(-1);transform:scale(-1)}:root .ic-flip-both,:root .ic-flip-horizontal,:root .ic-flip-vertical,:root .ic-rotate-90,:root .ic-rotate-180,:root .ic-rotate-270{filter:none}.ic-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.ic-stack-1x,.ic-stack-2x{left:0;position:absolute;text-align:center;width:100%}.ic-stack-1x{line-height:inherit}.ic-stack-2x{font-size:2em}.ic-inverse{color:#fff}.ic-500px:before{content:""}.ic-accessible-icon:before{content:""}.ic-accusoft:before{content:""}.ic-acquisitions-incorporated:before{content:""}.ic-ad:before{content:""}.ic-address-book:before{content:""}.ic-address-card:before{content:""}.ic-adjust:before{content:""}.ic-adn:before{content:""}.ic-adversal:before{content:""}.ic-affiliatetheme:before{content:""}.ic-air-freshener:before{content:""}.ic-airbnb:before{content:""}.ic-algolia:before{content:""}.ic-align-center:before{content:""}.ic-align-justify:before{content:""}.ic-align-left:before{content:""}.ic-align-right:before{content:""}.ic-alipay:before{content:""}.ic-allergies:before{content:""}.ic-amazon:before{content:""}.ic-amazon-pay:before{content:""}.ic-ambulance:before{content:""}.ic-american-sign-language-interpreting:before{content:""}.ic-amilia:before{content:""}.ic-anchor:before{content:""}.ic-android:before{content:""}.ic-angellist:before{content:""}.ic-angle-double-down:before{content:""}.ic-angle-double-left:before{content:""}.ic-angle-double-right:before{content:""}.ic-angle-double-up:before{content:""}.ic-angle-down:before{content:""}.ic-angle-left:before{content:""}.ic-angle-right:before{content:""}.ic-angle-up:before{content:""}.ic-angry:before{content:""}.ic-angrycreative:before{content:""}.ic-angular:before{content:""}.ic-ankh:before{content:""}.ic-app-store:before{content:""}.ic-app-store-ios:before{content:""}.ic-apper:before{content:""}.ic-apple:before{content:""}.ic-apple-alt:before{content:""}.ic-apple-pay:before{content:""}.ic-archive:before{content:""}.ic-archway:before{content:""}.ic-arrow-alt-circle-down:before{content:""}.ic-arrow-alt-circle-left:before{content:""}.ic-arrow-alt-circle-right:before{content:""}.ic-arrow-alt-circle-up:before{content:""}.ic-arrow-circle-down:before{content:""}.ic-arrow-circle-left:before{content:""}.ic-arrow-circle-right:before{content:""}.ic-arrow-circle-up:before{content:""}.ic-arrow-down:before{content:""}.ic-arrow-left:before{content:""}.ic-arrow-right:before{content:""}.ic-arrow-up:before{content:""}.ic-arrows-alt:before{content:""}.ic-arrows-alt-h:before{content:""}.ic-arrows-alt-v:before{content:""}.ic-artstation:before{content:""}.ic-assistive-listening-systems:before{content:""}.ic-asterisk:before{content:""}.ic-asymmetrik:before{content:""}.ic-at:before{content:""}.ic-atlas:before{content:""}.ic-atlassian:before{content:""}.ic-atom:before{content:""}.ic-audible:before{content:""}.ic-audio-description:before{content:""}.ic-autoprefixer:before{content:""}.ic-avianex:before{content:""}.ic-aviato:before{content:""}.ic-award:before{content:""}.ic-aws:before{content:""}.ic-baby:before{content:""}.ic-baby-carriage:before{content:""}.ic-backspace:before{content:""}.ic-backward:before{content:""}.ic-bacon:before{content:""}.ic-bacteria:before{content:""}.ic-bacterium:before{content:""}.ic-bahai:before{content:""}.ic-balance-scale:before{content:""}.ic-balance-scale-left:before{content:""}.ic-balance-scale-right:before{content:""}.ic-ban:before{content:""}.ic-band-aid:before{content:""}.ic-bandcamp:before{content:""}.ic-barcode:before{content:""}.ic-bars:before{content:""}.ic-baseball-ball:before{content:""}.ic-basketball-ball:before{content:""}.ic-bath:before{content:""}.ic-battery-empty:before{content:""}.ic-battery-full:before{content:""}.ic-battery-half:before{content:""}.ic-battery-quarter:before{content:""}.ic-battery-three-quarters:before{content:""}.ic-battle-net:before{content:""}.ic-bed:before{content:""}.ic-beer:before{content:""}.ic-behance:before{content:""}.ic-behance-square:before{content:""}.ic-bell:before{content:""}.ic-bell-slash:before{content:""}.ic-bezier-curve:before{content:""}.ic-bible:before{content:""}.ic-bicycle:before{content:""}.ic-biking:before{content:""}.ic-bimobject:before{content:""}.ic-binoculars:before{content:""}.ic-biohazard:before{content:""}.ic-birthday-cake:before{content:""}.ic-bitbucket:before{content:""}.ic-bitcoin:before{content:""}.ic-bity:before{content:""}.ic-black-tie:before{content:""}.ic-blackberry:before{content:""}.ic-blender:before{content:""}.ic-blender-phone:before{content:""}.ic-blind:before{content:""}.ic-blog:before{content:""}.ic-blogger:before{content:""}.ic-blogger-b:before{content:""}.ic-bluetooth:before{content:""}.ic-bluetooth-b:before{content:""}.ic-bold:before{content:""}.ic-bolt:before{content:""}.ic-bomb:before{content:""}.ic-bone:before{content:""}.ic-bong:before{content:""}.ic-book:before{content:""}.ic-book-dead:before{content:""}.ic-book-medical:before{content:""}.ic-book-open:before{content:""}.ic-book-reader:before{content:""}.ic-bookmark:before{content:""}.ic-bootstrap:before{content:""}.ic-border-all:before{content:""}.ic-border-none:before{content:""}.ic-border-style:before{content:""}.ic-bowling-ball:before{content:""}.ic-box:before{content:""}.ic-box-open:before{content:""}.ic-box-tissue:before{content:""}.ic-boxes:before{content:""}.ic-braille:before{content:""}.ic-brain:before{content:""}.ic-bread-slice:before{content:""}.ic-briefcase:before{content:""}.ic-briefcase-medical:before{content:""}.ic-broadcast-tower:before{content:""}.ic-broom:before{content:""}.ic-brush:before{content:""}.ic-btc:before{content:""}.ic-buffer:before{content:""}.ic-bug:before{content:""}.ic-building:before{content:""}.ic-bullhorn:before{content:""}.ic-bullseye:before{content:""}.ic-burn:before{content:""}.ic-buromobelexperte:before{content:""}.ic-bus:before{content:""}.ic-bus-alt:before{content:""}.ic-business-time:before{content:""}.ic-buy-n-large:before{content:""}.ic-buysellads:before{content:""}.ic-calculator:before{content:""}.ic-calendar:before{content:""}.ic-calendar-alt:before{content:""}.ic-calendar-check:before{content:""}.ic-calendar-day:before{content:""}.ic-calendar-minus:before{content:""}.ic-calendar-plus:before{content:""}.ic-calendar-times:before{content:""}.ic-calendar-week:before{content:""}.ic-camera:before{content:""}.ic-camera-retro:before{content:""}.ic-campground:before{content:""}.ic-canadian-maple-leaf:before{content:""}.ic-candy-cane:before{content:""}.ic-cannabis:before{content:""}.ic-capsules:before{content:""}.ic-car:before{content:""}.ic-car-alt:before{content:""}.ic-car-battery:before{content:""}.ic-car-crash:before{content:""}.ic-car-side:before{content:""}.ic-caravan:before{content:""}.ic-caret-down:before{content:""}.ic-caret-left:before{content:""}.ic-caret-right:before{content:""}.ic-caret-square-down:before{content:""}.ic-caret-square-left:before{content:""}.ic-caret-square-right:before{content:""}.ic-caret-square-up:before{content:""}.ic-caret-up:before{content:""}.ic-carrot:before{content:""}.ic-cart-arrow-down:before{content:""}.ic-cart-plus:before{content:""}.ic-cash-register:before{content:""}.ic-cat:before{content:""}.ic-cc-amazon-pay:before{content:""}.ic-cc-amex:before{content:""}.ic-cc-apple-pay:before{content:""}.ic-cc-diners-club:before{content:""}.ic-cc-discover:before{content:""}.ic-cc-jcb:before{content:""}.ic-cc-mastercard:before{content:""}.ic-cc-paypal:before{content:""}.ic-cc-stripe:before{content:""}.ic-cc-visa:before{content:""}.ic-centercode:before{content:""}.ic-centos:before{content:""}.ic-certificate:before{content:""}.ic-chair:before{content:""}.ic-chalkboard:before{content:""}.ic-chalkboard-teacher:before{content:""}.ic-charging-station:before{content:""}.ic-chart-area:before{content:""}.ic-chart-bar:before{content:""}.ic-chart-line:before{content:""}.ic-chart-pie:before{content:""}.ic-check:before{content:""}.ic-check-circle:before{content:""}.ic-check-double:before{content:""}.ic-check-square:before{content:""}.ic-cheese:before{content:""}.ic-chess:before{content:""}.ic-chess-bishop:before{content:""}.ic-chess-board:before{content:""}.ic-chess-king:before{content:""}.ic-chess-knight:before{content:""}.ic-chess-pawn:before{content:""}.ic-chess-queen:before{content:""}.ic-chess-rook:before{content:""}.ic-chevron-circle-down:before{content:""}.ic-chevron-circle-left:before{content:""}.ic-chevron-circle-right:before{content:""}.ic-chevron-circle-up:before{content:""}.ic-chevron-down:before{content:""}.ic-chevron-left:before{content:""}.ic-chevron-right:before{content:""}.ic-chevron-up:before{content:""}.ic-child:before{content:""}.ic-chrome:before{content:""}.ic-chromecast:before{content:""}.ic-church:before{content:""}.ic-circle:before{content:""}.ic-circle-notch:before{content:""}.ic-city:before{content:""}.ic-clinic-medical:before{content:""}.ic-clipboard:before{content:""}.ic-clipboard-check:before{content:""}.ic-clipboard-list:before{content:""}.ic-clock:before{content:""}.ic-clone:before{content:""}.ic-closed-captioning:before{content:""}.ic-cloud:before{content:""}.ic-cloud-download-alt:before{content:""}.ic-cloud-meatball:before{content:""}.ic-cloud-moon:before{content:""}.ic-cloud-moon-rain:before{content:""}.ic-cloud-rain:before{content:""}.ic-cloud-showers-heavy:before{content:""}.ic-cloud-sun:before{content:""}.ic-cloud-sun-rain:before{content:""}.ic-cloud-upload-alt:before{content:""}.ic-cloudflare:before{content:""}.ic-cloudscale:before{content:""}.ic-cloudsmith:before{content:""}.ic-cloudversify:before{content:""}.ic-cocktail:before{content:""}.ic-code:before{content:""}.ic-code-branch:before{content:""}.ic-codepen:before{content:""}.ic-codiepie:before{content:""}.ic-coffee:before{content:""}.ic-cog:before{content:""}.ic-cogs:before{content:""}.ic-coins:before{content:""}.ic-columns:before{content:""}.ic-comment:before{content:""}.ic-comment-alt:before{content:""}.ic-comment-dollar:before{content:""}.ic-comment-dots:before{content:""}.ic-comment-medical:before{content:""}.ic-comment-slash:before{content:""}.ic-comments:before{content:""}.ic-comments-dollar:before{content:""}.ic-compact-disc:before{content:""}.ic-compass:before{content:""}.ic-compress:before{content:""}.ic-compress-alt:before{content:""}.ic-compress-arrows-alt:before{content:""}.ic-concierge-bell:before{content:""}.ic-confluence:before{content:""}.ic-connectdevelop:before{content:""}.ic-contao:before{content:""}.ic-cookie:before{content:""}.ic-cookie-bite:before{content:""}.ic-copy:before{content:""}.ic-copyright:before{content:""}.ic-cotton-bureau:before{content:""}.ic-couch:before{content:""}.ic-cpanel:before{content:""}.ic-creative-commons:before{content:""}.ic-creative-commons-by:before{content:""}.ic-creative-commons-nc:before{content:""}.ic-creative-commons-nc-eu:before{content:""}.ic-creative-commons-nc-jp:before{content:""}.ic-creative-commons-nd:before{content:""}.ic-creative-commons-pd:before{content:""}.ic-creative-commons-pd-alt:before{content:""}.ic-creative-commons-remix:before{content:""}.ic-creative-commons-sa:before{content:""}.ic-creative-commons-sampling:before{content:""}.ic-creative-commons-sampling-plus:before{content:""}.ic-creative-commons-share:before{content:""}.ic-creative-commons-zero:before{content:""}.ic-credit-card:before{content:""}.ic-critical-role:before{content:""}.ic-crop:before{content:""}.ic-crop-alt:before{content:""}.ic-cross:before{content:""}.ic-crosshairs:before{content:""}.ic-crow:before{content:""}.ic-crown:before{content:""}.ic-crutch:before{content:""}.ic-css3:before{content:""}.ic-css3-alt:before{content:""}.ic-cube:before{content:""}.ic-cubes:before{content:""}.ic-cut:before{content:""}.ic-cuttlefish:before{content:""}.ic-d-and-d:before{content:""}.ic-d-and-d-beyond:before{content:""}.ic-dailymotion:before{content:""}.ic-dashcube:before{content:""}.ic-database:before{content:""}.ic-deaf:before{content:""}.ic-deezer:before{content:""}.ic-delicious:before{content:""}.ic-democrat:before{content:""}.ic-deploydog:before{content:""}.ic-deskpro:before{content:""}.ic-desktop:before{content:""}.ic-dev:before{content:""}.ic-deviantart:before{content:""}.ic-dharmachakra:before{content:""}.ic-dhl:before{content:""}.ic-diagnoses:before{content:""}.ic-diaspora:before{content:""}.ic-dice:before{content:""}.ic-dice-d20:before{content:""}.ic-dice-d6:before{content:""}.ic-dice-five:before{content:""}.ic-dice-four:before{content:""}.ic-dice-one:before{content:""}.ic-dice-six:before{content:""}.ic-dice-three:before{content:""}.ic-dice-two:before{content:""}.ic-digg:before{content:""}.ic-digital-ocean:before{content:""}.ic-digital-tachograph:before{content:""}.ic-directions:before{content:""}.ic-discord:before{content:""}.ic-discourse:before{content:""}.ic-disease:before{content:""}.ic-divide:before{content:""}.ic-dizzy:before{content:""}.ic-dna:before{content:""}.ic-dochub:before{content:""}.ic-docker:before{content:""}.ic-dog:before{content:""}.ic-dollar-sign:before{content:""}.ic-dolly:before{content:""}.ic-dolly-flatbed:before{content:""}.ic-donate:before{content:""}.ic-door-closed:before{content:""}.ic-door-open:before{content:""}.ic-dot-circle:before{content:""}.ic-dove:before{content:""}.ic-download:before{content:""}.ic-draft2digital:before{content:""}.ic-drafting-compass:before{content:""}.ic-dragon:before{content:""}.ic-draw-polygon:before{content:""}.ic-dribbble:before{content:""}.ic-dribbble-square:before{content:""}.ic-dropbox:before{content:""}.ic-drum:before{content:""}.ic-drum-steelpan:before{content:""}.ic-drumstick-bite:before{content:""}.ic-drupal:before{content:""}.ic-dumbbell:before{content:""}.ic-dumpster:before{content:""}.ic-dumpster-fire:before{content:""}.ic-dungeon:before{content:""}.ic-dyalog:before{content:""}.ic-earlybirds:before{content:""}.ic-ebay:before{content:""}.ic-edge:before{content:""}.ic-edge-legacy:before{content:""}.ic-edit:before{content:""}.ic-egg:before{content:""}.ic-eject:before{content:""}.ic-elementor:before{content:""}.ic-ellipsis-h:before{content:""}.ic-ellipsis-v:before{content:""}.ic-ello:before{content:""}.ic-ember:before{content:""}.ic-empire:before{content:""}.ic-envelope:before{content:""}.ic-envelope-open:before{content:""}.ic-envelope-open-text:before{content:""}.ic-envelope-square:before{content:""}.ic-envira:before{content:""}.ic-equals:before{content:""}.ic-eraser:before{content:""}.ic-erlang:before{content:""}.ic-ethereum:before{content:""}.ic-ethernet:before{content:""}.ic-etsy:before{content:""}.ic-euro-sign:before{content:""}.ic-evernote:before{content:""}.ic-exchange-alt:before{content:""}.ic-exclamation:before{content:""}.ic-exclamation-circle:before{content:""}.ic-exclamation-triangle:before{content:""}.ic-expand:before{content:""}.ic-expand-alt:before{content:""}.ic-expand-arrows-alt:before{content:""}.ic-expeditedssl:before{content:""}.ic-external-link-alt:before{content:""}.ic-external-link-square-alt:before{content:""}.ic-eye:before{content:""}.ic-eye-dropper:before{content:""}.ic-eye-slash:before{content:""}.ic-facebook:before{content:""}.ic-facebook-f:before{content:""}.ic-facebook-messenger:before{content:""}.ic-facebook-square:before{content:""}.ic-fan:before{content:""}.ic-fantasy-flight-games:before{content:""}.ic-fast-backward:before{content:""}.ic-fast-forward:before{content:""}.ic-faucet:before{content:""}.ic-fax:before{content:""}.ic-feather:before{content:""}.ic-feather-alt:before{content:""}.ic-fedex:before{content:""}.ic-fedora:before{content:""}.ic-female:before{content:""}.ic-fighter-jet:before{content:""}.ic-figma:before{content:""}.ic-file:before{content:""}.ic-file-alt:before{content:""}.ic-file-archive:before{content:""}.ic-file-audio:before{content:""}.ic-file-code:before{content:""}.ic-file-contract:before{content:""}.ic-file-csv:before{content:""}.ic-file-download:before{content:""}.ic-file-excel:before{content:""}.ic-file-export:before{content:""}.ic-file-image:before{content:""}.ic-file-import:before{content:""}.ic-file-invoice:before{content:""}.ic-file-invoice-dollar:before{content:""}.ic-file-medical:before{content:""}.ic-file-medical-alt:before{content:""}.ic-file-pdf:before{content:""}.ic-file-powerpoint:before{content:""}.ic-file-prescription:before{content:""}.ic-file-signature:before{content:""}.ic-file-upload:before{content:""}.ic-file-video:before{content:""}.ic-file-word:before{content:""}.ic-fill:before{content:""}.ic-fill-drip:before{content:""}.ic-film:before{content:""}.ic-filter:before{content:""}.ic-fingerprint:before{content:""}.ic-fire:before{content:""}.ic-fire-alt:before{content:""}.ic-fire-extinguisher:before{content:""}.ic-firefox:before{content:""}.ic-firefox-browser:before{content:""}.ic-first-aid:before{content:""}.ic-first-order:before{content:""}.ic-first-order-alt:before{content:""}.ic-firstdraft:before{content:""}.ic-fish:before{content:""}.ic-fist-raised:before{content:""}.ic-flag:before{content:""}.ic-flag-checkered:before{content:""}.ic-flag-usa:before{content:""}.ic-flask:before{content:""}.ic-flickr:before{content:""}.ic-flipboard:before{content:""}.ic-flushed:before{content:""}.ic-fly:before{content:""}.ic-folder:before{content:""}.ic-folder-minus:before{content:""}.ic-folder-open:before{content:""}.ic-folder-plus:before{content:""}.ic-font:before{content:""}.ic-font-awesome:before{content:""}.ic-font-awesome-alt:before{content:""}.ic-font-awesome-flag:before{content:""}.ic-font-awesome-logo-full:before{content:""}.ic-fonticons:before{content:""}.ic-fonticons-fi:before{content:""}.ic-football-ball:before{content:""}.ic-fort-awesome:before{content:""}.ic-fort-awesome-alt:before{content:""}.ic-forumbee:before{content:""}.ic-forward:before{content:""}.ic-foursquare:before{content:""}.ic-free-code-camp:before{content:""}.ic-freebsd:before{content:""}.ic-frog:before{content:""}.ic-frown:before{content:""}.ic-frown-open:before{content:""}.ic-fulcrum:before{content:""}.ic-funnel-dollar:before{content:""}.ic-futbol:before{content:""}.ic-galactic-republic:before{content:""}.ic-galactic-senate:before{content:""}.ic-gamepad:before{content:""}.ic-gas-pump:before{content:""}.ic-gavel:before{content:""}.ic-gem:before{content:""}.ic-genderless:before{content:""}.ic-get-pocket:before{content:""}.ic-gg:before{content:""}.ic-gg-circle:before{content:""}.ic-ghost:before{content:""}.ic-gift:before{content:""}.ic-gifts:before{content:""}.ic-git:before{content:""}.ic-git-alt:before{content:""}.ic-git-square:before{content:""}.ic-github:before{content:""}.ic-github-alt:before{content:""}.ic-github-square:before{content:""}.ic-gitkraken:before{content:""}.ic-gitlab:before{content:""}.ic-gitter:before{content:""}.ic-glass-cheers:before{content:""}.ic-glass-martini:before{content:""}.ic-glass-martini-alt:before{content:""}.ic-glass-whiskey:before{content:""}.ic-glasses:before{content:""}.ic-glide:before{content:""}.ic-glide-g:before{content:""}.ic-globe:before{content:""}.ic-globe-africa:before{content:""}.ic-globe-americas:before{content:""}.ic-globe-asia:before{content:""}.ic-globe-europe:before{content:""}.ic-gofore:before{content:""}.ic-golf-ball:before{content:""}.ic-goodreads:before{content:""}.ic-goodreads-g:before{content:""}.ic-google:before{content:""}.ic-google-drive:before{content:""}.ic-google-pay:before{content:""}.ic-google-play:before{content:""}.ic-google-plus:before{content:""}.ic-google-plus-g:before{content:""}.ic-google-plus-square:before{content:""}.ic-google-wallet:before{content:""}.ic-gopuram:before{content:""}.ic-graduation-cap:before{content:""}.ic-gratipay:before{content:""}.ic-grav:before{content:""}.ic-greater-than:before{content:""}.ic-greater-than-equal:before{content:""}.ic-grimace:before{content:""}.ic-grin:before{content:""}.ic-grin-alt:before{content:""}.ic-grin-beam:before{content:""}.ic-grin-beam-sweat:before{content:""}.ic-grin-hearts:before{content:""}.ic-grin-squint:before{content:""}.ic-grin-squint-tears:before{content:""}.ic-grin-stars:before{content:""}.ic-grin-tears:before{content:""}.ic-grin-tongue:before{content:""}.ic-grin-tongue-squint:before{content:""}.ic-grin-tongue-wink:before{content:""}.ic-grin-wink:before{content:""}.ic-grip-horizontal:before{content:""}.ic-grip-lines:before{content:""}.ic-grip-lines-vertical:before{content:""}.ic-grip-vertical:before{content:""}.ic-gripfire:before{content:""}.ic-grunt:before{content:""}.ic-guilded:before{content:""}.ic-guitar:before{content:""}.ic-gulp:before{content:""}.ic-h-square:before{content:""}.ic-hacker-news:before{content:""}.ic-hacker-news-square:before{content:""}.ic-hackerrank:before{content:""}.ic-hamburger:before{content:""}.ic-hammer:before{content:""}.ic-hamsa:before{content:""}.ic-hand-holding:before{content:""}.ic-hand-holding-heart:before{content:""}.ic-hand-holding-medical:before{content:""}.ic-hand-holding-usd:before{content:""}.ic-hand-holding-water:before{content:""}.ic-hand-lizard:before{content:""}.ic-hand-middle-finger:before{content:""}.ic-hand-paper:before{content:""}.ic-hand-peace:before{content:""}.ic-hand-point-down:before{content:""}.ic-hand-point-left:before{content:""}.ic-hand-point-right:before{content:""}.ic-hand-point-up:before{content:""}.ic-hand-pointer:before{content:""}.ic-hand-rock:before{content:""}.ic-hand-scissors:before{content:""}.ic-hand-sparkles:before{content:""}.ic-hand-spock:before{content:""}.ic-hands:before{content:""}.ic-hands-helping:before{content:""}.ic-hands-wash:before{content:""}.ic-handshake:before{content:""}.ic-handshake-alt-slash:before{content:""}.ic-handshake-slash:before{content:""}.ic-hanukiah:before{content:""}.ic-hard-hat:before{content:""}.ic-hashtag:before{content:""}.ic-hat-cowboy:before{content:""}.ic-hat-cowboy-side:before{content:""}.ic-hat-wizard:before{content:""}.ic-hdd:before{content:""}.ic-head-side-cough:before{content:""}.ic-head-side-cough-slash:before{content:""}.ic-head-side-mask:before{content:""}.ic-head-side-virus:before{content:""}.ic-heading:before{content:""}.ic-headphones:before{content:""}.ic-headphones-alt:before{content:""}.ic-headset:before{content:""}.ic-heart:before{content:""}.ic-heart-broken:before{content:""}.ic-heartbeat:before{content:""}.ic-helicopter:before{content:""}.ic-highlighter:before{content:""}.ic-hiking:before{content:""}.ic-hippo:before{content:""}.ic-hips:before{content:""}.ic-hire-a-helper:before{content:""}.ic-history:before{content:""}.ic-hive:before{content:""}.ic-hockey-puck:before{content:""}.ic-holly-berry:before{content:""}.ic-home:before{content:""}.ic-hooli:before{content:""}.ic-hornbill:before{content:""}.ic-horse:before{content:""}.ic-horse-head:before{content:""}.ic-hospital:before{content:""}.ic-hospital-alt:before{content:""}.ic-hospital-symbol:before{content:""}.ic-hospital-user:before{content:""}.ic-hot-tub:before{content:""}.ic-hotdog:before{content:""}.ic-hotel:before{content:""}.ic-hotjar:before{content:""}.ic-hourglass:before{content:""}.ic-hourglass-end:before{content:""}.ic-hourglass-half:before{content:""}.ic-hourglass-start:before{content:""}.ic-house-damage:before{content:""}.ic-house-user:before{content:""}.ic-houzz:before{content:""}.ic-hryvnia:before{content:""}.ic-html5:before{content:""}.ic-hubspot:before{content:""}.ic-i-cursor:before{content:""}.ic-ice-cream:before{content:""}.ic-icicles:before{content:""}.ic-icons:before{content:""}.ic-id-badge:before{content:""}.ic-id-card:before{content:""}.ic-id-card-alt:before{content:""}.ic-ideal:before{content:""}.ic-igloo:before{content:""}.ic-image:before{content:""}.ic-images:before{content:""}.ic-imdb:before{content:""}.ic-inbox:before{content:""}.ic-indent:before{content:""}.ic-industry:before{content:""}.ic-infinity:before{content:""}.ic-info:before{content:""}.ic-info-circle:before{content:""}.ic-innosoft:before{content:""}.ic-instagram:before{content:""}.ic-instagram-square:before{content:""}.ic-instalod:before{content:""}.ic-intercom:before{content:""}.ic-internet-explorer:before{content:""}.ic-invision:before{content:""}.ic-ioxhost:before{content:""}.ic-italic:before{content:""}.ic-itch-io:before{content:""}.ic-itunes:before{content:""}.ic-itunes-note:before{content:""}.ic-java:before{content:""}.ic-jedi:before{content:""}.ic-jedi-order:before{content:""}.ic-jenkins:before{content:""}.ic-jira:before{content:""}.ic-joget:before{content:""}.ic-joint:before{content:""}.ic-joomla:before{content:""}.ic-journal-whills:before{content:""}.ic-js:before{content:""}.ic-js-square:before{content:""}.ic-jsfiddle:before{content:""}.ic-kaaba:before{content:""}.ic-kaggle:before{content:""}.ic-key:before{content:""}.ic-keybase:before{content:""}.ic-keyboard:before{content:""}.ic-keycdn:before{content:""}.ic-khanda:before{content:""}.ic-kickstarter:before{content:""}.ic-kickstarter-k:before{content:""}.ic-kiss:before{content:""}.ic-kiss-beam:before{content:""}.ic-kiss-wink-heart:before{content:""}.ic-kiwi-bird:before{content:""}.ic-korvue:before{content:""}.ic-landmark:before{content:""}.ic-language:before{content:""}.ic-laptop:before{content:""}.ic-laptop-code:before{content:""}.ic-laptop-house:before{content:""}.ic-laptop-medical:before{content:""}.ic-laravel:before{content:""}.ic-lastfm:before{content:""}.ic-lastfm-square:before{content:""}.ic-laugh:before{content:""}.ic-laugh-beam:before{content:""}.ic-laugh-squint:before{content:""}.ic-laugh-wink:before{content:""}.ic-layer-group:before{content:""}.ic-leaf:before{content:""}.ic-leanpub:before{content:""}.ic-lemon:before{content:""}.ic-less:before{content:""}.ic-less-than:before{content:""}.ic-less-than-equal:before{content:""}.ic-level-down-alt:before{content:""}.ic-level-up-alt:before{content:""}.ic-life-ring:before{content:""}.ic-lightbulb:before{content:""}.ic-line:before{content:""}.ic-link:before{content:""}.ic-linkedin:before{content:""}.ic-linkedin-in:before{content:""}.ic-linode:before{content:""}.ic-linux:before{content:""}.ic-lira-sign:before{content:""}.ic-list:before{content:""}.ic-list-alt:before{content:""}.ic-list-ol:before{content:""}.ic-list-ul:before{content:""}.ic-location-arrow:before{content:""}.ic-lock:before{content:""}.ic-lock-open:before{content:""}.ic-long-arrow-alt-down:before{content:""}.ic-long-arrow-alt-left:before{content:""}.ic-long-arrow-alt-right:before{content:""}.ic-long-arrow-alt-up:before{content:""}.ic-low-vision:before{content:""}.ic-luggage-cart:before{content:""}.ic-lungs:before{content:""}.ic-lungs-virus:before{content:""}.ic-lyft:before{content:""}.ic-magento:before{content:""}.ic-magic:before{content:""}.ic-magnet:before{content:""}.ic-mail-bulk:before{content:""}.ic-mailchimp:before{content:""}.ic-male:before{content:""}.ic-mandalorian:before{content:""}.ic-map:before{content:""}.ic-map-marked:before{content:""}.ic-map-marked-alt:before{content:""}.ic-map-marker:before{content:""}.ic-map-marker-alt:before{content:""}.ic-map-pin:before{content:""}.ic-map-signs:before{content:""}.ic-markdown:before{content:""}.ic-marker:before{content:""}.ic-mars:before{content:""}.ic-mars-double:before{content:""}.ic-mars-stroke:before{content:""}.ic-mars-stroke-h:before{content:""}.ic-mars-stroke-v:before{content:""}.ic-mask:before{content:""}.ic-mastodon:before{content:""}.ic-maxcdn:before{content:""}.ic-mdb:before{content:""}.ic-medal:before{content:""}.ic-medapps:before{content:""}.ic-medium:before{content:""}.ic-medium-m:before{content:""}.ic-medkit:before{content:""}.ic-medrt:before{content:""}.ic-meetup:before{content:""}.ic-megaport:before{content:""}.ic-meh:before{content:""}.ic-meh-blank:before{content:""}.ic-meh-rolling-eyes:before{content:""}.ic-memory:before{content:""}.ic-mendeley:before{content:""}.ic-menorah:before{content:""}.ic-mercury:before{content:""}.ic-meteor:before{content:""}.ic-microblog:before{content:""}.ic-microchip:before{content:""}.ic-microphone:before{content:""}.ic-microphone-alt:before{content:""}.ic-microphone-alt-slash:before{content:""}.ic-microphone-slash:before{content:""}.ic-microscope:before{content:""}.ic-microsoft:before{content:""}.ic-minus:before{content:""}.ic-minus-circle:before{content:""}.ic-minus-square:before{content:""}.ic-mitten:before{content:""}.ic-mix:before{content:""}.ic-mixcloud:before{content:""}.ic-mixer:before{content:""}.ic-mizuni:before{content:""}.ic-mobile:before{content:""}.ic-mobile-alt:before{content:""}.ic-modx:before{content:""}.ic-monero:before{content:""}.ic-money-bill:before{content:""}.ic-money-bill-alt:before{content:""}.ic-money-bill-wave:before{content:""}.ic-money-bill-wave-alt:before{content:""}.ic-money-check:before{content:""}.ic-money-check-alt:before{content:""}.ic-monument:before{content:""}.ic-moon:before{content:""}.ic-mortar-pestle:before{content:""}.ic-mosque:before{content:""}.ic-motorcycle:before{content:""}.ic-mountain:before{content:""}.ic-mouse:before{content:""}.ic-mouse-pointer:before{content:""}.ic-mug-hot:before{content:""}.ic-music:before{content:""}.ic-napster:before{content:""}.ic-neos:before{content:""}.ic-network-wired:before{content:""}.ic-neuter:before{content:""}.ic-newspaper:before{content:""}.ic-nimblr:before{content:""}.ic-node:before{content:""}.ic-node-js:before{content:""}.ic-not-equal:before{content:""}.ic-notes-medical:before{content:""}.ic-npm:before{content:""}.ic-ns8:before{content:""}.ic-nutritionix:before{content:""}.ic-object-group:before{content:""}.ic-object-ungroup:before{content:""}.ic-octopus-deploy:before{content:""}.ic-odnoklassniki:before{content:""}.ic-odnoklassniki-square:before{content:""}.ic-oil-can:before{content:""}.ic-old-republic:before{content:""}.ic-om:before{content:""}.ic-opencart:before{content:""}.ic-openid:before{content:""}.ic-opera:before{content:""}.ic-optin-monster:before{content:""}.ic-orcid:before{content:""}.ic-osi:before{content:""}.ic-otter:before{content:""}.ic-outdent:before{content:""}.ic-page4:before{content:""}.ic-pagelines:before{content:""}.ic-pager:before{content:""}.ic-paint-brush:before{content:""}.ic-paint-roller:before{content:""}.ic-palette:before{content:""}.ic-palfed:before{content:""}.ic-pallet:before{content:""}.ic-paper-plane:before{content:""}.ic-paperclip:before{content:""}.ic-parachute-box:before{content:""}.ic-paragraph:before{content:""}.ic-parking:before{content:""}.ic-passport:before{content:""}.ic-pastafarianism:before{content:""}.ic-paste:before{content:""}.ic-patreon:before{content:""}.ic-pause:before{content:""}.ic-pause-circle:before{content:""}.ic-paw:before{content:""}.ic-paypal:before{content:""}.ic-peace:before{content:""}.ic-pen:before{content:""}.ic-pen-alt:before{content:""}.ic-pen-fancy:before{content:""}.ic-pen-nib:before{content:""}.ic-pen-square:before{content:""}.ic-pencil-alt:before{content:""}.ic-pencil-ruler:before{content:""}.ic-penny-arcade:before{content:""}.ic-people-arrows:before{content:""}.ic-people-carry:before{content:""}.ic-pepper-hot:before{content:""}.ic-perbyte:before{content:""}.ic-percent:before{content:""}.ic-percentage:before{content:""}.ic-periscope:before{content:""}.ic-person-booth:before{content:""}.ic-phabricator:before{content:""}.ic-phoenix-framework:before{content:""}.ic-phoenix-squadron:before{content:""}.ic-phone:before{content:""}.ic-phone-alt:before{content:""}.ic-phone-slash:before{content:""}.ic-phone-square:before{content:""}.ic-phone-square-alt:before{content:""}.ic-phone-volume:before{content:""}.ic-photo-video:before{content:""}.ic-php:before{content:""}.ic-pied-piper:before{content:""}.ic-pied-piper-alt:before{content:""}.ic-pied-piper-hat:before{content:""}.ic-pied-piper-pp:before{content:""}.ic-pied-piper-square:before{content:""}.ic-piggy-bank:before{content:""}.ic-pills:before{content:""}.ic-pinterest:before{content:""}.ic-pinterest-p:before{content:""}.ic-pinterest-square:before{content:""}.ic-pizza-slice:before{content:""}.ic-place-of-worship:before{content:""}.ic-plane:before{content:""}.ic-plane-arrival:before{content:""}.ic-plane-departure:before{content:""}.ic-plane-slash:before{content:""}.ic-play:before{content:""}.ic-play-circle:before{content:""}.ic-playstation:before{content:""}.ic-plug:before{content:""}.ic-plus:before{content:""}.ic-plus-circle:before{content:""}.ic-plus-square:before{content:""}.ic-podcast:before{content:""}.ic-poll:before{content:""}.ic-poll-h:before{content:""}.ic-poo:before{content:""}.ic-poo-storm:before{content:""}.ic-poop:before{content:""}.ic-portrait:before{content:""}.ic-pound-sign:before{content:""}.ic-power-off:before{content:""}.ic-pray:before{content:""}.ic-praying-hands:before{content:""}.ic-prescription:before{content:""}.ic-prescription-bottle:before{content:""}.ic-prescription-bottle-alt:before{content:""}.ic-print:before{content:""}.ic-procedures:before{content:""}.ic-product-hunt:before{content:""}.ic-project-diagram:before{content:""}.ic-pump-medical:before{content:""}.ic-pump-soap:before{content:""}.ic-pushed:before{content:""}.ic-puzzle-piece:before{content:""}.ic-python:before{content:""}.ic-qq:before{content:""}.ic-qrcode:before{content:""}.ic-question:before{content:""}.ic-question-circle:before{content:""}.ic-quidditch:before{content:""}.ic-quinscape:before{content:""}.ic-quora:before{content:""}.ic-quote-left:before{content:""}.ic-quote-right:before{content:""}.ic-quran:before{content:""}.ic-r-project:before{content:""}.ic-radiation:before{content:""}.ic-radiation-alt:before{content:""}.ic-rainbow:before{content:""}.ic-random:before{content:""}.ic-raspberry-pi:before{content:""}.ic-ravelry:before{content:""}.ic-react:before{content:""}.ic-reacteurope:before{content:""}.ic-readme:before{content:""}.ic-rebel:before{content:""}.ic-receipt:before{content:""}.ic-record-vinyl:before{content:""}.ic-recycle:before{content:""}.ic-red-river:before{content:""}.ic-reddit:before{content:""}.ic-reddit-alien:before{content:""}.ic-reddit-square:before{content:""}.ic-redhat:before{content:""}.ic-redo:before{content:""}.ic-redo-alt:before{content:""}.ic-registered:before{content:""}.ic-remove-format:before{content:""}.ic-renren:before{content:""}.ic-reply:before{content:""}.ic-reply-all:before{content:""}.ic-replyd:before{content:""}.ic-republican:before{content:""}.ic-researchgate:before{content:""}.ic-resolving:before{content:""}.ic-restroom:before{content:""}.ic-retweet:before{content:""}.ic-rev:before{content:""}.ic-ribbon:before{content:""}.ic-ring:before{content:""}.ic-road:before{content:""}.ic-robot:before{content:""}.ic-rocket:before{content:""}.ic-rocketchat:before{content:""}.ic-rockrms:before{content:""}.ic-route:before{content:""}.ic-rss:before{content:""}.ic-rss-square:before{content:""}.ic-ruble-sign:before{content:""}.ic-ruler:before{content:""}.ic-ruler-combined:before{content:""}.ic-ruler-horizontal:before{content:""}.ic-ruler-vertical:before{content:""}.ic-running:before{content:""}.ic-rupee-sign:before{content:""}.ic-rust:before{content:""}.ic-sad-cry:before{content:""}.ic-sad-tear:before{content:""}.ic-safari:before{content:""}.ic-salesforce:before{content:""}.ic-sass:before{content:""}.ic-satellite:before{content:""}.ic-satellite-dish:before{content:""}.ic-save:before{content:""}.ic-schlix:before{content:""}.ic-school:before{content:""}.ic-screwdriver:before{content:""}.ic-scribd:before{content:""}.ic-scroll:before{content:""}.ic-sd-card:before{content:""}.ic-search:before{content:""}.ic-search-dollar:before{content:""}.ic-search-location:before{content:""}.ic-search-minus:before{content:""}.ic-search-plus:before{content:""}.ic-searchengin:before{content:""}.ic-seedling:before{content:""}.ic-sellcast:before{content:""}.ic-sellsy:before{content:""}.ic-server:before{content:""}.ic-servicestack:before{content:""}.ic-shapes:before{content:""}.ic-share:before{content:""}.ic-share-alt:before{content:""}.ic-share-alt-square:before{content:""}.ic-share-square:before{content:""}.ic-shekel-sign:before{content:""}.ic-shield-alt:before{content:""}.ic-shield-virus:before{content:""}.ic-ship:before{content:""}.ic-shipping-fast:before{content:""}.ic-shirtsinbulk:before{content:""}.ic-shoe-prints:before{content:""}.ic-shopify:before{content:""}.ic-shopping-bag:before{content:""}.ic-shopping-basket:before{content:""}.ic-shopping-cart:before{content:""}.ic-shopware:before{content:""}.ic-shower:before{content:""}.ic-shuttle-van:before{content:""}.ic-sign:before{content:""}.ic-sign-in-alt:before{content:""}.ic-sign-language:before{content:""}.ic-sign-out-alt:before{content:""}.ic-signal:before{content:""}.ic-signature:before{content:""}.ic-sim-card:before{content:""}.ic-simplybuilt:before{content:""}.ic-sink:before{content:""}.ic-sistrix:before{content:""}.ic-sitemap:before{content:""}.ic-sith:before{content:""}.ic-skating:before{content:""}.ic-sketch:before{content:""}.ic-skiing:before{content:""}.ic-skiing-nordic:before{content:""}.ic-skull:before{content:""}.ic-skull-crossbones:before{content:""}.ic-skyatlas:before{content:""}.ic-skype:before{content:""}.ic-slack:before{content:""}.ic-slack-hash:before{content:""}.ic-slash:before{content:""}.ic-sleigh:before{content:""}.ic-sliders-h:before{content:""}.ic-slideshare:before{content:""}.ic-smile:before{content:""}.ic-smile-beam:before{content:""}.ic-smile-wink:before{content:""}.ic-smog:before{content:""}.ic-smoking:before{content:""}.ic-smoking-ban:before{content:""}.ic-sms:before{content:""}.ic-snapchat:before{content:""}.ic-snapchat-ghost:before{content:""}.ic-snapchat-square:before{content:""}.ic-snowboarding:before{content:""}.ic-snowflake:before{content:""}.ic-snowman:before{content:""}.ic-snowplow:before{content:""}.ic-soap:before{content:""}.ic-socks:before{content:""}.ic-solar-panel:before{content:""}.ic-sort:before{content:""}.ic-sort-alpha-down:before{content:""}.ic-sort-alpha-down-alt:before{content:""}.ic-sort-alpha-up:before{content:""}.ic-sort-alpha-up-alt:before{content:""}.ic-sort-amount-down:before{content:""}.ic-sort-amount-down-alt:before{content:""}.ic-sort-amount-up:before{content:""}.ic-sort-amount-up-alt:before{content:""}.ic-sort-down:before{content:""}.ic-sort-numeric-down:before{content:""}.ic-sort-numeric-down-alt:before{content:""}.ic-sort-numeric-up:before{content:""}.ic-sort-numeric-up-alt:before{content:""}.ic-sort-up:before{content:""}.ic-soundcloud:before{content:""}.ic-sourcetree:before{content:""}.ic-spa:before{content:""}.ic-space-shuttle:before{content:""}.ic-speakap:before{content:""}.ic-speaker-deck:before{content:""}.ic-spell-check:before{content:""}.ic-spider:before{content:""}.ic-spinner:before{content:""}.ic-splotch:before{content:""}.ic-spotify:before{content:""}.ic-spray-can:before{content:""}.ic-square:before{content:""}.ic-square-full:before{content:""}.ic-square-root-alt:before{content:""}.ic-squarespace:before{content:""}.ic-stack-exchange:before{content:""}.ic-stack-overflow:before{content:""}.ic-stackpath:before{content:""}.ic-stamp:before{content:""}.ic-star:before{content:""}.ic-star-and-crescent:before{content:""}.ic-star-half:before{content:""}.ic-star-half-alt:before{content:""}.ic-star-of-david:before{content:""}.ic-star-of-life:before{content:""}.ic-staylinked:before{content:""}.ic-steam:before{content:""}.ic-steam-square:before{content:""}.ic-steam-symbol:before{content:""}.ic-step-backward:before{content:""}.ic-step-forward:before{content:""}.ic-stethoscope:before{content:""}.ic-sticker-mule:before{content:""}.ic-sticky-note:before{content:""}.ic-stop:before{content:""}.ic-stop-circle:before{content:""}.ic-stopwatch:before{content:""}.ic-stopwatch-20:before{content:""}.ic-store:before{content:""}.ic-store-alt:before{content:""}.ic-store-alt-slash:before{content:""}.ic-store-slash:before{content:""}.ic-strava:before{content:""}.ic-stream:before{content:""}.ic-street-view:before{content:""}.ic-strikethrough:before{content:""}.ic-stripe:before{content:""}.ic-stripe-s:before{content:""}.ic-stroopwafel:before{content:""}.ic-studiovinari:before{content:""}.ic-stumbleupon:before{content:""}.ic-stumbleupon-circle:before{content:""}.ic-subscript:before{content:""}.ic-subway:before{content:""}.ic-suitcase:before{content:""}.ic-suitcase-rolling:before{content:""}.ic-sun:before{content:""}.ic-superpowers:before{content:""}.ic-superscript:before{content:""}.ic-supple:before{content:""}.ic-surprise:before{content:""}.ic-suse:before{content:""}.ic-swatchbook:before{content:""}.ic-swift:before{content:""}.ic-swimmer:before{content:""}.ic-swimming-pool:before{content:""}.ic-symfony:before{content:""}.ic-synagogue:before{content:""}.ic-sync:before{content:""}.ic-sync-alt:before{content:""}.ic-syringe:before{content:""}.ic-table:before{content:""}.ic-table-tennis:before{content:""}.ic-tablet:before{content:""}.ic-tablet-alt:before{content:""}.ic-tablets:before{content:""}.ic-tachometer-alt:before{content:""}.ic-tag:before{content:""}.ic-tags:before{content:""}.ic-tape:before{content:""}.ic-tasks:before{content:""}.ic-taxi:before{content:""}.ic-teamspeak:before{content:""}.ic-teeth:before{content:""}.ic-teeth-open:before{content:""}.ic-telegram:before{content:""}.ic-telegram-plane:before{content:""}.ic-temperature-high:before{content:""}.ic-temperature-low:before{content:""}.ic-tencent-weibo:before{content:""}.ic-tenge:before{content:""}.ic-terminal:before{content:""}.ic-text-height:before{content:""}.ic-text-width:before{content:""}.ic-th:before{content:""}.ic-th-large:before{content:""}.ic-th-list:before{content:""}.ic-the-red-yeti:before{content:""}.ic-theater-masks:before{content:""}.ic-themeco:before{content:""}.ic-themeisle:before{content:""}.ic-thermometer:before{content:""}.ic-thermometer-empty:before{content:""}.ic-thermometer-full:before{content:""}.ic-thermometer-half:before{content:""}.ic-thermometer-quarter:before{content:""}.ic-thermometer-three-quarters:before{content:""}.ic-think-peaks:before{content:""}.ic-thumbs-down:before{content:""}.ic-thumbs-up:before{content:""}.ic-thumbtack:before{content:""}.ic-ticket-alt:before{content:""}.ic-tiktok:before{content:""}.ic-times:before{content:""}.ic-times-circle:before{content:""}.ic-tint:before{content:""}.ic-tint-slash:before{content:""}.ic-tired:before{content:""}.ic-toggle-off:before{content:""}.ic-toggle-on:before{content:""}.ic-toilet:before{content:""}.ic-toilet-paper:before{content:""}.ic-toilet-paper-slash:before{content:""}.ic-toolbox:before{content:""}.ic-tools:before{content:""}.ic-tooth:before{content:""}.ic-torah:before{content:""}.ic-torii-gate:before{content:""}.ic-tractor:before{content:""}.ic-trade-federation:before{content:""}.ic-trademark:before{content:""}.ic-traffic-light:before{content:""}.ic-trailer:before{content:""}.ic-train:before{content:""}.ic-tram:before{content:""}.ic-transgender:before{content:""}.ic-transgender-alt:before{content:""}.ic-trash:before{content:""}.ic-trash-alt:before{content:""}.ic-trash-restore:before{content:""}.ic-trash-restore-alt:before{content:""}.ic-tree:before{content:""}.ic-trello:before{content:""}.ic-tripadvisor:before{content:""}.ic-trophy:before{content:""}.ic-truck:before{content:""}.ic-truck-loading:before{content:""}.ic-truck-monster:before{content:""}.ic-truck-moving:before{content:""}.ic-truck-pickup:before{content:""}.ic-tshirt:before{content:""}.ic-tty:before{content:""}.ic-tumblr:before{content:""}.ic-tumblr-square:before{content:""}.ic-tv:before{content:""}.ic-twitch:before{content:""}.ic-twitter:before{content:""}.ic-twitter-square:before{content:""}.ic-typo3:before{content:""}.ic-uber:before{content:""}.ic-ubuntu:before{content:""}.ic-uikit:before{content:""}.ic-umbraco:before{content:""}.ic-umbrella:before{content:""}.ic-umbrella-beach:before{content:""}.ic-uncharted:before{content:""}.ic-underline:before{content:""}.ic-undo:before{content:""}.ic-undo-alt:before{content:""}.ic-uniregistry:before{content:""}.ic-unity:before{content:""}.ic-universal-access:before{content:""}.ic-university:before{content:""}.ic-unlink:before{content:""}.ic-unlock:before{content:""}.ic-unlock-alt:before{content:""}.ic-unsplash:before{content:""}.ic-untappd:before{content:""}.ic-upload:before{content:""}.ic-ups:before{content:""}.ic-usb:before{content:""}.ic-user:before{content:""}.ic-user-alt:before{content:""}.ic-user-alt-slash:before{content:""}.ic-user-astronaut:before{content:""}.ic-user-check:before{content:""}.ic-user-circle:before{content:""}.ic-user-clock:before{content:""}.ic-user-cog:before{content:""}.ic-user-edit:before{content:""}.ic-user-friends:before{content:""}.ic-user-graduate:before{content:""}.ic-user-injured:before{content:""}.ic-user-lock:before{content:""}.ic-user-md:before{content:""}.ic-user-minus:before{content:""}.ic-user-ninja:before{content:""}.ic-user-nurse:before{content:""}.ic-user-plus:before{content:""}.ic-user-secret:before{content:""}.ic-user-shield:before{content:""}.ic-user-slash:before{content:""}.ic-user-tag:before{content:""}.ic-user-tie:before{content:""}.ic-user-times:before{content:""}.ic-users:before{content:""}.ic-users-cog:before{content:""}.ic-users-slash:before{content:""}.ic-usps:before{content:""}.ic-ussunnah:before{content:""}.ic-utensil-spoon:before{content:""}.ic-utensils:before{content:""}.ic-vaadin:before{content:""}.ic-vector-square:before{content:""}.ic-venus:before{content:""}.ic-venus-double:before{content:""}.ic-venus-mars:before{content:""}.ic-vest:before{content:""}.ic-vest-patches:before{content:""}.ic-viacoin:before{content:""}.ic-viadeo:before{content:""}.ic-viadeo-square:before{content:""}.ic-vial:before{content:""}.ic-vials:before{content:""}.ic-viber:before{content:""}.ic-video:before{content:""}.ic-video-slash:before{content:""}.ic-vihara:before{content:""}.ic-vimeo:before{content:""}.ic-vimeo-square:before{content:""}.ic-vimeo-v:before{content:""}.ic-vine:before{content:""}.ic-virus:before{content:""}.ic-virus-slash:before{content:""}.ic-viruses:before{content:""}.ic-vk:before{content:""}.ic-vnv:before{content:""}.ic-voicemail:before{content:""}.ic-volleyball-ball:before{content:""}.ic-volume-down:before{content:""}.ic-volume-mute:before{content:""}.ic-volume-off:before{content:""}.ic-volume-up:before{content:""}.ic-vote-yea:before{content:""}.ic-vr-cardboard:before{content:""}.ic-vuejs:before{content:""}.ic-walking:before{content:""}.ic-wallet:before{content:""}.ic-warehouse:before{content:""}.ic-watchman-monitoring:before{content:""}.ic-water:before{content:""}.ic-wave-square:before{content:""}.ic-waze:before{content:""}.ic-weebly:before{content:""}.ic-weibo:before{content:""}.ic-weight:before{content:""}.ic-weight-hanging:before{content:""}.ic-weixin:before{content:""}.ic-whatsapp:before{content:""}.ic-whatsapp-square:before{content:""}.ic-wheelchair:before{content:""}.ic-whmcs:before{content:""}.ic-wifi:before{content:""}.ic-wikipedia-w:before{content:""}.ic-wind:before{content:""}.ic-window-close:before{content:""}.ic-window-maximize:before{content:""}.ic-window-minimize:before{content:""}.ic-window-restore:before{content:""}.ic-windows:before{content:""}.ic-wine-bottle:before{content:""}.ic-wine-glass:before{content:""}.ic-wine-glass-alt:before{content:""}.ic-wix:before{content:""}.ic-wizards-of-the-coast:before{content:""}.ic-wodu:before{content:""}.ic-wolf-pack-battalion:before{content:""}.ic-won-sign:before{content:""}.ic-wordpress:before{content:""}.ic-wordpress-simple:before{content:""}.ic-wpbeginner:before{content:""}.ic-wpexplorer:before{content:""}.ic-wpforms:before{content:""}.ic-wpressr:before{content:""}.ic-wrench:before{content:""}.ic-x-ray:before{content:""}.ic-xbox:before{content:""}.ic-xing:before{content:""}.ic-xing-square:before{content:""}.ic-y-combinator:before{content:""}.ic-yahoo:before{content:""}.ic-yammer:before{content:""}.ic-yandex:before{content:""}.ic-yandex-international:before{content:""}.ic-yarn:before{content:""}.ic-yelp:before{content:""}.ic-yen-sign:before{content:""}.ic-yin-yang:before{content:""}.ic-yoast:before{content:""}.ic-youtube:before{content:""}.ic-youtube-square:before{content:""}.ic-zhihu:before{content:""}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:Font Awesome\ 5 Free;font-style:normal;font-weight:900;src:url(data:font/woff;base64,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) format("woff")}.fa,.fas,.mapIcon16,.uiIcon16,.uiIcon24{font-family:Font Awesome\ 5 Free;font-weight:900}.mapIcon16,.uiIcon16,.uiIcon24{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;font-style:normal;font-variant:normal;font-weight:400;line-height:1;font-size:12px;padding:2px}.uiIcon24{font-size:24px}.uiIcon24.uiStatusIcon:before{content:""}.uiIcon24.uiStatusIcon.uiStatusGood{color:#080}.uiIcon24.uiStatusIcon.uiStatusAverage{color:#afa404}.uiIcon24.uiStatusIcon.uiStatusBad{color:#c20000}.icon-carat-1-n.mapIcon16:before,.icon-carat-1-n.uiIcon24:before,.uiIcon16.icon-carat-1-n:before{content:""}.icon-carat-1-ne.mapIcon16,.icon-carat-1-ne.uiIcon24,.uiIcon16.icon-carat-1-ne{-ms-transform:rotate(45deg);transform:rotate(45deg)}.icon-carat-1-ne.mapIcon16:before,.icon-carat-1-ne.uiIcon24:before,.uiIcon16.icon-carat-1-ne:before{content:""}.icon-carat-1-e.mapIcon16:before,.icon-carat-1-e.uiIcon24:before,.uiIcon16.icon-carat-1-e:before{content:""}.icon-carat-1-se.mapIcon16,.icon-carat-1-se.uiIcon24,.uiIcon16.icon-carat-1-se{-ms-transform:rotate(45deg);transform:rotate(45deg)}.icon-carat-1-se.mapIcon16:before,.icon-carat-1-se.uiIcon24:before,.uiIcon16.icon-carat-1-se:before{content:""}.icon-carat-1-s.mapIcon16:before,.icon-carat-1-s.uiIcon24:before,.uiIcon16.icon-carat-1-s:before{content:""}.icon-carat-1-sw.mapIcon16,.icon-carat-1-sw.uiIcon24,.uiIcon16.icon-carat-1-sw{-ms-transform:rotate(45deg);transform:rotate(45deg)}.icon-carat-1-sw.mapIcon16:before,.icon-carat-1-sw.uiIcon24:before,.uiIcon16.icon-carat-1-sw:before{content:""}.icon-carat-1-w.mapIcon16:before,.icon-carat-1-w.uiIcon24:before,.uiIcon16.icon-carat-1-w:before{content:""}.icon-carat-1-nw.mapIcon16,.icon-carat-1-nw.uiIcon24,.uiIcon16.icon-carat-1-nw{-ms-transform:rotate(45deg);transform:rotate(45deg)}.icon-carat-1-nw.mapIcon16:before,.icon-carat-1-nw.uiIcon24:before,.uiIcon16.icon-carat-1-nw:before{content:""}.icon-carat-2-n-s.mapIcon16,.icon-carat-2-n-s.uiIcon24,.uiIcon16.icon-carat-2-n-s{-ms-transform:rotate(90deg);transform:rotate(90deg)}.icon-carat-2-e-w.mapIcon16:before,.icon-carat-2-e-w.uiIcon24:before,.icon-carat-2-n-s.mapIcon16:before,.icon-carat-2-n-s.uiIcon24:before,.uiIcon16.icon-carat-2-e-w:before,.uiIcon16.icon-carat-2-n-s:before{content:""}.icon-triangle-1-n.mapIcon16:before,.icon-triangle-1-n.uiIcon24:before,.uiIcon16.icon-triangle-1-n:before{content:""}.icon-triangle-1-ne.mapIcon16,.icon-triangle-1-ne.uiIcon24,.uiIcon16.icon-triangle-1-ne{-ms-transform:rotate(45deg);transform:rotate(45deg)}.icon-triangle-1-ne.mapIcon16:before,.icon-triangle-1-ne.uiIcon24:before,.uiIcon16.icon-triangle-1-ne:before{content:""}.icon-triangle-1-e.mapIcon16:before,.icon-triangle-1-e.uiIcon24:before,.uiIcon16.icon-triangle-1-e:before{content:""}.icon-triangle-1-se.mapIcon16,.icon-triangle-1-se.uiIcon24,.uiIcon16.icon-triangle-1-se{-ms-transform:rotate(45deg);transform:rotate(45deg)}.icon-triangle-1-se.mapIcon16:before,.icon-triangle-1-se.uiIcon24:before,.uiIcon16.icon-triangle-1-se:before{content:""}.icon-triangle-1-s.mapIcon16:before,.icon-triangle-1-s.uiIcon24:before,.uiIcon16.icon-triangle-1-s:before{content:""}.icon-triangle-1-sw.mapIcon16,.icon-triangle-1-sw.uiIcon24,.uiIcon16.icon-triangle-1-sw{-ms-transform:rotate(45deg);transform:rotate(45deg)}.icon-triangle-1-sw.mapIcon16:before,.icon-triangle-1-sw.uiIcon24:before,.uiIcon16.icon-triangle-1-sw:before{content:""}.icon-triangle-1-w.mapIcon16:before,.icon-triangle-1-w.uiIcon24:before,.uiIcon16.icon-triangle-1-w:before{content:""}.icon-triangle-1-nw.mapIcon16,.icon-triangle-1-nw.uiIcon24,.uiIcon16.icon-triangle-1-nw{-ms-transform:rotate(45deg);transform:rotate(45deg)}.icon-triangle-1-nw.mapIcon16:before,.icon-triangle-1-nw.uiIcon24:before,.uiIcon16.icon-triangle-1-nw:before{content:""}.icon-triangle-2-n-s.mapIcon16:before,.icon-triangle-2-n-s.uiIcon24:before,.uiIcon16.icon-triangle-2-n-s:before{content:""}.icon-triangle-2-e-w.mapIcon16:before,.icon-triangle-2-e-w.uiIcon24:before,.uiIcon16.icon-triangle-2-e-w:before{content:" "}.icon-arrow-1-n.mapIcon16:before,.icon-arrow-1-n.uiIcon24:before,.uiIcon16.icon-arrow-1-n:before{content:""}.icon-arrow-1-ne.mapIcon16,.icon-arrow-1-ne.uiIcon24,.uiIcon16.icon-arrow-1-ne{-ms-transform:rotate(45deg);transform:rotate(45deg)}.icon-arrow-1-ne.mapIcon16:before,.icon-arrow-1-ne.uiIcon24:before,.uiIcon16.icon-arrow-1-ne:before{content:""}.icon-arrow-1-e.mapIcon16:before,.icon-arrow-1-e.uiIcon24:before,.uiIcon16.icon-arrow-1-e:before{content:""}.icon-arrow-1-se.mapIcon16,.icon-arrow-1-se.uiIcon24,.uiIcon16.icon-arrow-1-se{-ms-transform:rotate(45deg);transform:rotate(45deg)}.icon-arrow-1-se.mapIcon16:before,.icon-arrow-1-se.uiIcon24:before,.uiIcon16.icon-arrow-1-se:before{content:""}.icon-arrow-1-s.mapIcon16:before,.icon-arrow-1-s.uiIcon24:before,.uiIcon16.icon-arrow-1-s:before{content:""}.icon-arrow-1-sw.mapIcon16,.icon-arrow-1-sw.uiIcon24,.uiIcon16.icon-arrow-1-sw{-ms-transform:rotate(45deg);transform:rotate(45deg)}.icon-arrow-1-sw.mapIcon16:before,.icon-arrow-1-sw.uiIcon24:before,.uiIcon16.icon-arrow-1-sw:before{content:""}.icon-arrow-1-w.mapIcon16:before,.icon-arrow-1-w.uiIcon24:before,.uiIcon16.icon-arrow-1-w:before{content:""}.icon-arrow-1-nw.mapIcon16,.icon-arrow-1-nw.uiIcon24,.uiIcon16.icon-arrow-1-nw{-ms-transform:rotate(45deg);transform:rotate(45deg)}.icon-arrow-1-nw.mapIcon16:before,.icon-arrow-1-nw.uiIcon24:before,.uiIcon16.icon-arrow-1-nw:before{content:""}.icon-arrow-2-n-s.mapIcon16:before,.icon-arrow-2-n-s.uiIcon24:before,.uiIcon16.icon-arrow-2-n-s:before{content:""}.icon-arrow-2-ne-sw.mapIcon16,.icon-arrow-2-ne-sw.uiIcon24,.uiIcon16.icon-arrow-2-ne-sw{-ms-transform:rotate(-45deg);transform:rotate(-45deg)}.icon-arrow-2-e-w.mapIcon16:before,.icon-arrow-2-e-w.uiIcon24:before,.icon-arrow-2-ne-sw.mapIcon16:before,.icon-arrow-2-ne-sw.uiIcon24:before,.uiIcon16.icon-arrow-2-e-w:before,.uiIcon16.icon-arrow-2-ne-sw:before{content:""}.icon-arrow-2-se-nw.mapIcon16,.icon-arrow-2-se-nw.uiIcon24,.uiIcon16.icon-arrow-2-se-nw{-ms-transform:rotate(45deg);transform:rotate(45deg)}.icon-arrow-2-se-nw.mapIcon16:before,.icon-arrow-2-se-nw.uiIcon24:before,.uiIcon16.icon-arrow-2-se-nw:before{content:""}.icon-arrowstop-1-n.mapIcon16,.icon-arrowstop-1-n.uiIcon24,.uiIcon16.icon-arrowstop-1-n{-ms-transform:rotate(-90deg);transform:rotate(-90deg)}.icon-arrowstop-1-e.mapIcon16:before,.icon-arrowstop-1-e.uiIcon24:before,.icon-arrowstop-1-n.mapIcon16:before,.icon-arrowstop-1-n.uiIcon24:before,.uiIcon16.icon-arrowstop-1-e:before,.uiIcon16.icon-arrowstop-1-n:before{content:""}.icon-arrowstop-1-s.mapIcon16,.icon-arrowstop-1-s.uiIcon24,.uiIcon16.icon-arrowstop-1-s{-ms-transform:rotate(90deg);transform:rotate(90deg)}.icon-arrowstop-1-s.mapIcon16:before,.icon-arrowstop-1-s.uiIcon24:before,.uiIcon16.icon-arrowstop-1-s:before{content:""}.icon-arrowstop-1-w.mapIcon16,.icon-arrowstop-1-w.uiIcon24,.uiIcon16.icon-arrowstop-1-w{-ms-transform:rotate(180deg);transform:rotate(180deg)}.icon-arrowstop-1-w.mapIcon16:before,.icon-arrowstop-1-w.uiIcon24:before,.uiIcon16.icon-arrowstop-1-w:before{content:""}.icon-arrowthick-1-n.mapIcon16:before,.icon-arrowthick-1-n.uiIcon24:before,.uiIcon16.icon-arrowthick-1-n:before{content:""}.icon-arrowthick-1-ne.mapIcon16,.icon-arrowthick-1-ne.uiIcon24,.uiIcon16.icon-arrowthick-1-ne{-ms-transform:rotate(45deg);transform:rotate(45deg)}.icon-arrowthick-1-ne.mapIcon16:before,.icon-arrowthick-1-ne.uiIcon24:before,.uiIcon16.icon-arrowthick-1-ne:before{content:""}.icon-arrowthick-1-e.mapIcon16:before,.icon-arrowthick-1-e.uiIcon24:before,.uiIcon16.icon-arrowthick-1-e:before{content:""}.icon-arrowthick-1-se.mapIcon16,.icon-arrowthick-1-se.uiIcon24,.uiIcon16.icon-arrowthick-1-se{-ms-transform:rotate(45deg);transform:rotate(45deg)}.icon-arrowthick-1-se.mapIcon16:before,.icon-arrowthick-1-se.uiIcon24:before,.uiIcon16.icon-arrowthick-1-se:before{content:""}.icon-arrowthick-1-s.mapIcon16:before,.icon-arrowthick-1-s.uiIcon24:before,.uiIcon16.icon-arrowthick-1-s:before{content:""}.icon-arrowthick-1-sw.mapIcon16,.icon-arrowthick-1-sw.uiIcon24,.uiIcon16.icon-arrowthick-1-sw{-ms-transform:rotate(45deg);transform:rotate(45deg)}.icon-arrowthick-1-sw.mapIcon16:before,.icon-arrowthick-1-sw.uiIcon24:before,.uiIcon16.icon-arrowthick-1-sw:before{content:""}.icon-arrowthick-1-w.mapIcon16:before,.icon-arrowthick-1-w.uiIcon24:before,.uiIcon16.icon-arrowthick-1-w:before{content:""}.icon-arrowthick-1-nw.mapIcon16,.icon-arrowthick-1-nw.uiIcon24,.uiIcon16.icon-arrowthick-1-nw{-ms-transform:rotate(45deg);transform:rotate(45deg)}.icon-arrowthick-1-nw.mapIcon16:before,.icon-arrowthick-1-nw.uiIcon24:before,.uiIcon16.icon-arrowthick-1-nw:before{content:""}.icon-arrowthick-2-n-s.mapIcon16:before,.icon-arrowthick-2-n-s.uiIcon24:before,.uiIcon16.icon-arrowthick-2-n-s:before{content:""}.icon-arrowthick-2-ne-sw.mapIcon16,.icon-arrowthick-2-ne-sw.uiIcon24,.uiIcon16.icon-arrowthick-2-ne-sw{-ms-transform:rotate(-45deg);transform:rotate(-45deg)}.icon-arrowthick-2-e-w.mapIcon16:before,.icon-arrowthick-2-e-w.uiIcon24:before,.icon-arrowthick-2-ne-sw.mapIcon16:before,.icon-arrowthick-2-ne-sw.uiIcon24:before,.uiIcon16.icon-arrowthick-2-e-w:before,.uiIcon16.icon-arrowthick-2-ne-sw:before{content:""}.icon-arrowthick-2-se-nw.mapIcon16,.icon-arrowthick-2-se-nw.uiIcon24,.uiIcon16.icon-arrowthick-2-se-nw{-ms-transform:rotate(45deg);transform:rotate(45deg)}.icon-arrowthick-2-se-nw.mapIcon16:before,.icon-arrowthick-2-se-nw.uiIcon24:before,.uiIcon16.icon-arrowthick-2-se-nw:before{content:""}.icon-arrowthickstop-1-n.mapIcon16,.icon-arrowthickstop-1-n.uiIcon24,.uiIcon16.icon-arrowthickstop-1-n{-ms-transform:rotate(-90deg);transform:rotate(-90deg)}.icon-arrowthickstop-1-e.mapIcon16:before,.icon-arrowthickstop-1-e.uiIcon24:before,.icon-arrowthickstop-1-n.mapIcon16:before,.icon-arrowthickstop-1-n.uiIcon24:before,.uiIcon16.icon-arrowthickstop-1-e:before,.uiIcon16.icon-arrowthickstop-1-n:before{content:""}.icon-arrowthickstop-1-s.mapIcon16,.icon-arrowthickstop-1-s.uiIcon24,.uiIcon16.icon-arrowthickstop-1-s{-ms-transform:rotate(90deg);transform:rotate(90deg)}.icon-arrowthickstop-1-s.mapIcon16:before,.icon-arrowthickstop-1-s.uiIcon24:before,.uiIcon16.icon-arrowthickstop-1-s:before{content:""}.icon-arrowthickstop-1-w.mapIcon16,.icon-arrowthickstop-1-w.uiIcon24,.uiIcon16.icon-arrowthickstop-1-w{-ms-transform:rotate(180deg);transform:rotate(180deg)}.icon-arrowthickstop-1-w.mapIcon16:before,.icon-arrowthickstop-1-w.uiIcon24:before,.uiIcon16.icon-arrowthickstop-1-w:before{content:""}.icon-arrowreturnthick-1-w.mapIcon16,.icon-arrowreturnthick-1-w.uiIcon24,.uiIcon16.icon-arrowreturnthick-1-w{-ms-transform:rotate(180deg);transform:rotate(180deg)}.icon-arrowreturnthick-1-w.mapIcon16:before,.icon-arrowreturnthick-1-w.uiIcon24:before,.uiIcon16.icon-arrowreturnthick-1-w:before{content:""}.icon-arrowreturnthick-1-n.mapIcon16,.icon-arrowreturnthick-1-n.uiIcon24,.uiIcon16.icon-arrowreturnthick-1-n{-ms-transform:rotate(-90deg);transform:rotate(-90deg)}.icon-arrowreturnthick-1-e.mapIcon16:before,.icon-arrowreturnthick-1-e.uiIcon24:before,.icon-arrowreturnthick-1-n.mapIcon16:before,.icon-arrowreturnthick-1-n.uiIcon24:before,.uiIcon16.icon-arrowreturnthick-1-e:before,.uiIcon16.icon-arrowreturnthick-1-n:before{content:""}.icon-arrowreturnthick-1-s.mapIcon16,.icon-arrowreturnthick-1-s.uiIcon24,.uiIcon16.icon-arrowreturnthick-1-s{-ms-transform:rotate(90deg);transform:rotate(90deg)}.icon-arrowreturnthick-1-s.mapIcon16:before,.icon-arrowreturnthick-1-s.uiIcon24:before,.uiIcon16.icon-arrowreturnthick-1-s:before{content:""}.icon-arrowreturn-1-w.mapIcon16,.icon-arrowreturn-1-w.uiIcon24,.uiIcon16.icon-arrowreturn-1-w{-ms-transform:rotate(180deg);transform:rotate(180deg)}.icon-arrowreturn-1-w.mapIcon16:before,.icon-arrowreturn-1-w.uiIcon24:before,.uiIcon16.icon-arrowreturn-1-w:before{content:""}.icon-arrowreturn-1-n.mapIcon16,.icon-arrowreturn-1-n.uiIcon24,.uiIcon16.icon-arrowreturn-1-n{-ms-transform:rotate(-90deg);transform:rotate(-90deg)}.icon-arrowreturn-1-e.mapIcon16:before,.icon-arrowreturn-1-e.uiIcon24:before,.icon-arrowreturn-1-n.mapIcon16:before,.icon-arrowreturn-1-n.uiIcon24:before,.uiIcon16.icon-arrowreturn-1-e:before,.uiIcon16.icon-arrowreturn-1-n:before{content:""}.icon-arrowreturn-1-s.mapIcon16,.icon-arrowreturn-1-s.uiIcon24,.uiIcon16.icon-arrowreturn-1-s{-ms-transform:rotate(90deg);transform:rotate(90deg)}.icon-arrowreturn-1-s.mapIcon16:before,.icon-arrowreturn-1-s.uiIcon24:before,.uiIcon16.icon-arrowreturn-1-s:before{content:""}.icon-arrowrefresh-1-w.mapIcon16,.icon-arrowrefresh-1-w.uiIcon24,.uiIcon16.icon-arrowrefresh-1-w{-ms-transform:rotate(180deg);transform:rotate(180deg)}.icon-arrowrefresh-1-w.mapIcon16:before,.icon-arrowrefresh-1-w.uiIcon24:before,.uiIcon16.icon-arrowrefresh-1-w:before{content:""}.icon-arrowrefresh-1-n.mapIcon16,.icon-arrowrefresh-1-n.uiIcon24,.uiIcon16.icon-arrowrefresh-1-n{-ms-transform:rotate(-90deg);transform:rotate(-90deg)}.icon-arrowrefresh-1-e.mapIcon16:before,.icon-arrowrefresh-1-e.uiIcon24:before,.icon-arrowrefresh-1-n.mapIcon16:before,.icon-arrowrefresh-1-n.uiIcon24:before,.uiIcon16.icon-arrowrefresh-1-e:before,.uiIcon16.icon-arrowrefresh-1-n:before{content:""}.icon-arrowrefresh-1-s.mapIcon16,.icon-arrowrefresh-1-s.uiIcon24,.uiIcon16.icon-arrowrefresh-1-s{-ms-transform:rotate(90deg);transform:rotate(90deg)}.icon-arrowrefresh-1-s.mapIcon16:before,.icon-arrowrefresh-1-s.uiIcon24:before,.uiIcon16.icon-arrowrefresh-1-s:before{content:""}.icon-arrow-4.mapIcon16:before,.icon-arrow-4.uiIcon24:before,.uiIcon16.icon-arrow-4:before{content:""}.icon-arrow-4-diag.mapIcon16,.icon-arrow-4-diag.uiIcon24,.uiIcon16.icon-arrow-4-diag{-ms-transform:rotate(45deg);transform:rotate(45deg)}.icon-arrow-4-diag.mapIcon16:before,.icon-arrow-4-diag.uiIcon24:before,.uiIcon16.icon-arrow-4-diag:before{content:""}.icon-extlink.mapIcon16:before,.icon-extlink.uiIcon24:before,.uiIcon16.icon-extlink:before{content:""}.icon-newwin.mapIcon16:before,.icon-newwin.uiIcon24:before,.uiIcon16.icon-newwin:before{content:""}.icon-refresh.mapIcon16:before,.icon-refresh.uiIcon24:before,.uiIcon16.icon-refresh:before{content:""}.icon-shuffle.mapIcon16:before,.icon-shuffle.uiIcon24:before,.uiIcon16.icon-shuffle:before{content:""}.icon-transfer-e-w.mapIcon16:before,.icon-transfer-e-w.uiIcon24:before,.icon-transferthick-e-w.mapIcon16:before,.icon-transferthick-e-w.uiIcon24:before,.uiIcon16.icon-transfer-e-w:before,.uiIcon16.icon-transferthick-e-w:before{content:""}.icon-radiation.mapIcon16:before,.icon-radiation.uiIcon24:before,.uiIcon16.icon-radiation:before{content:""}.icon-folder-collapsed.mapIcon16:before,.icon-folder-collapsed.uiIcon24:before,.uiIcon16.icon-folder-collapsed:before{content:""}.icon-folder-open.mapIcon16:before,.icon-folder-open.uiIcon24:before,.uiIcon16.icon-folder-open:before{content:""}.icon-document.mapIcon16:before,.icon-document.uiIcon24:before,.uiIcon16.icon-document:before{content:""}.icon-document-b.mapIcon16:before,.icon-document-b.uiIcon24:before,.uiIcon16.icon-document-b:before{content:""}.icon-note.mapIcon16:before,.icon-note.uiIcon24:before,.uiIcon16.icon-note:before{content:""}.icon-mail-closed.mapIcon16:before,.icon-mail-closed.uiIcon24:before,.uiIcon16.icon-mail-closed:before{content:""}.icon-mail-open.mapIcon16:before,.icon-mail-open.uiIcon24:before,.uiIcon16.icon-mail-open:before{content:""}.icon-suitcase.mapIcon16:before,.icon-suitcase.uiIcon24:before,.uiIcon16.icon-suitcase:before{content:""}.icon-comment.mapIcon16:before,.icon-comment.uiIcon24:before,.uiIcon16.icon-comment:before{content:""}.icon-person.mapIcon16:before,.icon-person.uiIcon24:before,.uiIcon16.icon-person:before{content:""}.icon-print.mapIcon16:before,.icon-print.uiIcon24:before,.uiIcon16.icon-print:before{content:""}.icon-trash.mapIcon16:before,.icon-trash.uiIcon24:before,.uiIcon16.icon-trash:before{content:""}.icon-locked.mapIcon16:before,.icon-locked.uiIcon24:before,.uiIcon16.icon-locked:before{content:""}.icon-unlocked.mapIcon16:before,.icon-unlocked.uiIcon24:before,.uiIcon16.icon-unlocked:before{content:""}.icon-bookmark.mapIcon16:before,.icon-bookmark.uiIcon24:before,.uiIcon16.icon-bookmark:before{content:""}.icon-tag.mapIcon16:before,.icon-tag.uiIcon24:before,.uiIcon16.icon-tag:before{content:""}.icon-home.mapIcon16:before,.icon-home.uiIcon24:before,.uiIcon16.icon-home:before{content:""}.icon-flag.mapIcon16:before,.icon-flag.uiIcon24:before,.uiIcon16.icon-flag:before{content:""}.icon-calendar.mapIcon16:before,.icon-calendar.uiIcon24:before,.uiIcon16.icon-calendar:before{content:""}.icon-cart.mapIcon16:before,.icon-cart.uiIcon24:before,.uiIcon16.icon-cart:before{content:""}.icon-pencil.mapIcon16:before,.icon-pencil.uiIcon24:before,.uiIcon16.icon-pencil:before{content:""}.icon-clock.mapIcon16:before,.icon-clock.uiIcon24:before,.uiIcon16.icon-clock:before{content:""}.icon-disk.mapIcon16:before,.icon-disk.uiIcon24:before,.uiIcon16.icon-disk:before{content:""}.icon-calculator.mapIcon16:before,.icon-calculator.uiIcon24:before,.uiIcon16.icon-calculator:before{content:""}.icon-zoomin.mapIcon16:before,.icon-zoomin.uiIcon24:before,.uiIcon16.icon-zoomin:before{content:""}.icon-zoomout.mapIcon16:before,.icon-zoomout.uiIcon24:before,.uiIcon16.icon-zoomout:before{content:""}.icon-search.mapIcon16:before,.icon-search.uiIcon24:before,.uiIcon16.icon-search:before{content:""}.icon-wrench.mapIcon16:before,.icon-wrench.uiIcon24:before,.uiIcon16.icon-wrench:before{content:""}.icon-gear.mapIcon16:before,.icon-gear.uiIcon24:before,.uiIcon16.icon-gear:before{content:""}.icon-heart.mapIcon16:before,.icon-heart.uiIcon24:before,.uiIcon16.icon-heart:before{content:""}.icon-star.mapIcon16:before,.icon-star.uiIcon24:before,.uiIcon16.icon-star:before{content:""}.icon-link.mapIcon16:before,.icon-link.uiIcon24:before,.uiIcon16.icon-link:before{content:""}.icon-cancel.mapIcon16:before,.icon-cancel.uiIcon24:before,.uiIcon16.icon-cancel:before{content:""}.icon-plus.mapIcon16:before,.icon-plus.uiIcon24:before,.icon-plusthick.mapIcon16:before,.icon-plusthick.uiIcon24:before,.uiIcon16.icon-plus:before,.uiIcon16.icon-plusthick:before{content:""}.icon-minus.mapIcon16:before,.icon-minus.uiIcon24:before,.icon-minusthick.mapIcon16:before,.icon-minusthick.uiIcon24:before,.uiIcon16.icon-minus:before,.uiIcon16.icon-minusthick:before{content:""}.icon-close.mapIcon16:before,.icon-close.uiIcon24:before,.icon-closethick.mapIcon16:before,.icon-closethick.uiIcon24:before,.uiIcon16.icon-close:before,.uiIcon16.icon-closethick:before{content:""}.icon-key.mapIcon16:before,.icon-key.uiIcon24:before,.uiIcon16.icon-key:before{content:""}.icon-lightbulb.mapIcon16:before,.icon-lightbulb.uiIcon24:before,.uiIcon16.icon-lightbulb:before{content:""}.icon-scissors.mapIcon16:before,.icon-scissors.uiIcon24:before,.uiIcon16.icon-scissors:before{content:""}.icon-clipboard.mapIcon16:before,.icon-clipboard.uiIcon24:before,.uiIcon16.icon-clipboard:before{content:""}.icon-copy.mapIcon16:before,.icon-copy.uiIcon24:before,.uiIcon16.icon-copy:before{content:""}.icon-contact.mapIcon16:before,.icon-contact.uiIcon24:before,.uiIcon16.icon-contact:before{content:""}.icon-image.mapIcon16:before,.icon-image.uiIcon24:before,.uiIcon16.icon-image:before{content:""}.icon-video.mapIcon16:before,.icon-video.uiIcon24:before,.uiIcon16.icon-video:before{content:""}.icon-script.mapIcon16:before,.icon-script.uiIcon24:before,.uiIcon16.icon-script:before{content:""}.icon-alert.mapIcon16:before,.icon-alert.uiIcon24:before,.uiIcon16.icon-alert:before{content:""}.icon-info.mapIcon16:before,.icon-info.uiIcon24:before,.uiIcon16.icon-info:before{content:""}.icon-notice.mapIcon16:before,.icon-notice.uiIcon24:before,.uiIcon16.icon-notice:before{content:""}.icon-help.mapIcon16:before,.icon-help.uiIcon24:before,.uiIcon16.icon-help:before{content:""}.icon-check.mapIcon16:before,.icon-check.uiIcon24:before,.uiIcon16.icon-check:before{content:""}.icon-bullet.mapIcon16:before,.icon-bullet.uiIcon24:before,.uiIcon16.icon-bullet:before{content:""}.icon-pin-w.mapIcon16,.icon-pin-w.uiIcon24,.uiIcon16.icon-pin-w{-ms-transform:rotate(90deg);transform:rotate(90deg)}.icon-pin-s.mapIcon16:before,.icon-pin-s.uiIcon24:before,.icon-pin-w.mapIcon16:before,.icon-pin-w.uiIcon24:before,.uiIcon16.icon-pin-s:before,.uiIcon16.icon-pin-w:before{content:""}.icon-night.mapIcon16:before,.icon-night.uiIcon24:before,.uiIcon16.icon-night:before{content:""}.icon-play.mapIcon16:before,.icon-play.uiIcon24:before,.uiIcon16.icon-play:before{content:""}.icon-pause.mapIcon16:before,.icon-pause.uiIcon24:before,.uiIcon16.icon-pause:before{content:""}.icon-seek-next.mapIcon16:before,.icon-seek-next.uiIcon24:before,.uiIcon16.icon-seek-next:before{content:""}.icon-seek-prev.mapIcon16:before,.icon-seek-prev.uiIcon24:before,.uiIcon16.icon-seek-prev:before{content:""}.icon-seek-end.mapIcon16:before,.icon-seek-end.uiIcon24:before,.uiIcon16.icon-seek-end:before{content:""}.icon-seek-first.mapIcon16:before,.icon-seek-first.uiIcon24:before,.icon-seek-start.mapIcon16:before,.icon-seek-start.uiIcon24:before,.uiIcon16.icon-seek-first:before,.uiIcon16.icon-seek-start:before{content:""}.icon-stop.mapIcon16:before,.icon-stop.uiIcon24:before,.uiIcon16.icon-stop:before{content:""}.icon-eject.mapIcon16:before,.icon-eject.uiIcon24:before,.uiIcon16.icon-eject:before{content:""}.icon-volume-off.mapIcon16:before,.icon-volume-off.uiIcon24:before,.uiIcon16.icon-volume-off:before{content:""}.icon-volume-on.mapIcon16:before,.icon-volume-on.uiIcon24:before,.uiIcon16.icon-volume-on:before{content:""}.icon-power.mapIcon16:before,.icon-power.uiIcon24:before,.uiIcon16.icon-power:before{content:""}.icon-signal-diag.mapIcon16:before,.icon-signal-diag.uiIcon24:before,.icon-signal.mapIcon16:before,.icon-signal.uiIcon24:before,.uiIcon16.icon-signal-diag:before,.uiIcon16.icon-signal:before{content:""}.icon-battery-0.mapIcon16:before,.icon-battery-0.uiIcon24:before,.uiIcon16.icon-battery-0:before{content:""}.icon-battery-1.mapIcon16:before,.icon-battery-1.uiIcon24:before,.uiIcon16.icon-battery-1:before{content:""}.icon-battery-2.mapIcon16:before,.icon-battery-2.uiIcon24:before,.uiIcon16.icon-battery-2:before{content:""}.icon-battery-3.mapIcon16:before,.icon-battery-3.uiIcon24:before,.uiIcon16.icon-battery-3:before{content:""}.icon-circle-plus.mapIcon16:before,.icon-circle-plus.uiIcon24:before,.uiIcon16.icon-circle-plus:before{content:""}.icon-circle-minus.mapIcon16:before,.icon-circle-minus.uiIcon24:before,.uiIcon16.icon-circle-minus:before{content:""}.icon-circle-close.mapIcon16:before,.icon-circle-close.uiIcon24:before,.uiIcon16.icon-circle-close:before{content:""}.icon-circlesmall-plus.mapIcon16:before,.icon-circlesmall-plus.uiIcon24:before,.uiIcon16.icon-circlesmall-plus:before{content:""}.icon-circlesmall-minus.mapIcon16:before,.icon-circlesmall-minus.uiIcon24:before,.uiIcon16.icon-circlesmall-minus:before{content:""}.icon-squaresmall-plus.mapIcon16:before,.icon-squaresmall-plus.uiIcon24:before,.uiIcon16.icon-squaresmall-plus:before{content:""}.icon-squaresmall-minus.mapIcon16:before,.icon-squaresmall-minus.uiIcon24:before,.uiIcon16.icon-squaresmall-minus:before{content:""}.icon-grip-dotted-vertical.mapIcon16:before,.icon-grip-dotted-vertical.uiIcon24:before,.uiIcon16.icon-grip-dotted-vertical:before{content:""}.icon-grip-dotted-horizontal.mapIcon16,.icon-grip-dotted-horizontal.uiIcon24,.uiIcon16.icon-grip-dotted-horizontal{-ms-transform:rotate(90deg);transform:rotate(90deg)}.icon-grip-dotted-horizontal.mapIcon16:before,.icon-grip-dotted-horizontal.uiIcon24:before,.uiIcon16.icon-grip-dotted-horizontal:before{content:""}.mapIcon16{position:absolute;color:#2fd02f}.mapIcon16.red{color:#c00}.mapIcon16.rank-captain:before{content:""}.mapIcon16.rank-headofpersonnel:before{content:""}.mapIcon16.rank-headofsecurity:before{content:""}.mapIcon16.rank-chiefengineer:before{content:""}.mapIcon16.rank-researchdirector:before{content:""}.mapIcon16.rank-chiefmedicalofficer:before{content:""}.mapIcon16.rank-atmospherictechnician:before,.mapIcon16.rank-stationengineer:before{content:""}.mapIcon16.rank-chemist:before,.mapIcon16.rank-medicaldoctor:before,.mapIcon16.rank-psychiatrist:before{content:""}.mapIcon16.rank-geneticist:before,.mapIcon16.rank-roboticist:before,.mapIcon16.rank-scientist:before,.mapIcon16.rank-xenobiologist:before{content:""}.mapIcon16.rank-detective:before,.mapIcon16.rank-securityofficer:before,.mapIcon16.rank-warden:before{content:""}.clear-left{clear:left!important}.clear-right{clear:right!important}.clear-both{clear:both!important}.clear-none{clear:none!important}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-none{display:none!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-right:0!important;margin-left:0!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-5{margin-right:3rem!important;margin-left:3rem!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.mr-0{margin-right:0!important}.mr-1{margin-right:.25rem!important}.mr-2{margin-right:.5rem!important}.mr-3{margin-right:1rem!important}.mr-4{margin-right:1.5rem!important}.mr-5{margin-right:3rem!important}.mr-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ml-0{margin-left:0!important}.ml-1{margin-left:.25rem!important}.ml-2{margin-left:.5rem!important}.ml-3{margin-left:1rem!important}.ml-4{margin-left:1.5rem!important}.ml-5{margin-left:3rem!important}.ml-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-right:0!important;padding-left:0!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-5{padding-right:3rem!important;padding-left:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pr-0{padding-right:0!important}.pr-1{padding-right:.25rem!important}.pr-2{padding-right:.5rem!important}.pr-3{padding-right:1rem!important}.pr-4{padding-right:1.5rem!important}.pr-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.pl-0{padding-left:0!important}.pl-1{padding-left:.25rem!important}.pl-2{padding-left:.5rem!important}.pl-3{padding-left:1rem!important}.pl-4{padding-left:1.5rem!important}.pl-5{padding-left:3rem!important}.fs-small{font-size:12px!important}.fs-normal{font-size:14px!important}.fs-large{font-size:16px!important}.fs-largest{font-size:18px!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-light{font-weight:light!important}.fw-lighter{font-weight:lighter!important}.fw-normal{font-weight:400!important}.fw-bold{font-weight:700!important}.fw-bolder{font-weight:bolder!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}.theme-basic-dark .button,.theme-basic-dark a,.theme-basic-dark button,.theme-basic-dark input[disabled],.theme-basic-dark input[type=button],.theme-basic-dark input[type=reset],.theme-basic-dark input[type=submit],.theme-basic .button,.theme-basic a,.theme-basic button,.theme-basic input[disabled],.theme-basic input[type=button],.theme-basic input[type=reset],.theme-basic input[type=submit]{display:inline;background:none;border:none;border-radius:0;color:#00e;padding:.1em 0 0 0;margin-right:2px;text-decoration:underline}.theme-basic-dark .button:hover,.theme-basic-dark a:hover,.theme-basic-dark button:hover,.theme-basic-dark input[disabled]:hover,.theme-basic-dark input[type=button]:hover,.theme-basic-dark input[type=reset]:hover,.theme-basic-dark input[type=submit]:hover,.theme-basic .button:hover,.theme-basic a:hover,.theme-basic button:hover,.theme-basic input[disabled]:hover,.theme-basic input[type=button]:hover,.theme-basic input[type=reset]:hover,.theme-basic input[type=submit]:hover{background:none;color:#551a8b}.theme-basic-dark .button:active,.theme-basic-dark a:active,.theme-basic-dark button:active,.theme-basic-dark input[disabled]:active,.theme-basic-dark input[type=button]:active,.theme-basic-dark input[type=reset]:active,.theme-basic-dark input[type=submit]:active,.theme-basic .button:active,.theme-basic a:active,.theme-basic button:active,.theme-basic input[disabled]:active,.theme-basic input[type=button]:active,.theme-basic input[type=reset]:active,.theme-basic input[type=submit]:active{color:#e00}.theme-basic-dark .tooltip.content,.theme-basic .tooltip.content{background:#fff;border:1px solid #a9a9a9}.theme-basic-dark{color:#fff;background:#000}.theme-basic-dark .button,.theme-basic-dark a,.theme-basic-dark button,.theme-basic-dark input[disabled],.theme-basic-dark input[type=button],.theme-basic-dark input[type=reset],.theme-basic-dark input[type=submit]{color:#90ee90}.theme-basic-dark .button:hover,.theme-basic-dark a:hover,.theme-basic-dark button:hover,.theme-basic-dark input[disabled]:hover,.theme-basic-dark input[type=button]:hover,.theme-basic-dark input[type=reset]:hover,.theme-basic-dark input[type=submit]:hover{color:#cceb76}.theme-basic-dark .button:active,.theme-basic-dark a:active,.theme-basic-dark button:active,.theme-basic-dark input[disabled]:active,.theme-basic-dark input[type=button]:active,.theme-basic-dark input[type=reset]:active,.theme-basic-dark input[type=submit]:active{color:#1ff}.theme-basic-dark .button:visited,.theme-basic-dark a:visited,.theme-basic-dark button:visited,.theme-basic-dark input[disabled]:visited,.theme-basic-dark input[type=button]:visited,.theme-basic-dark input[type=reset]:visited,.theme-basic-dark input[type=submit]:visited{color:#2e8b57}.theme-basic-dark .uiTitleWrapper{background-color:#464646}.theme-basic-dark .tooltip.content{background:#000}.theme-nano,.theme-nano-light{font-size:12px;line-height:1.9em;font-family:Verdana,Geneva,sans-serif;background:#202020 url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iODAwIiBoZWlnaHQ9IjQzMCI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4Mj0iNDAwIiB5MT0iNDMwIiB4MT0iNDAwIiBpZD0iYiI+PHN0b3Agc3RvcC1jb2xvcj0iIzIwMjAyMCIgb2Zmc2V0PSIuNDEiLz48c3RvcCBzdG9wLWNvbG9yPSIjM2QzYzNjIiBvZmZzZXQ9Ii44NCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB5Mj0iMjQwLjU1IiB4Mj0iMzk5LjkiIHkxPSIxMzYuNTIiIHgxPSIzOTkuOSIgaWQ9ImEiPjxzdG9wIHN0b3AtY29sb3I9IiMxZjFmMWYiIG9mZnNldD0iMCIvPjxzdG9wIHN0b3AtY29sb3I9IiMxNzE3MTciIG9mZnNldD0iMSIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IHhsaW5rOmhyZWY9IiNhIiB5Mj0iMjQwLjU1IiB4Mj0iNDc5LjMyIiB5MT0iMTk3LjY5IiB4MT0iNDc5LjMyIiBpZD0iYyIvPjxsaW5lYXJHcmFkaWVudCB4bGluazpocmVmPSIjYSIgeTI9IjE3OS40MSIgeDI9IjMyMC40MyIgeTE9IjEzNi41NCIgeDE9IjMyMC40MyIgaWQ9ImQiLz48L2RlZnM+PHBhdGggZmlsbD0idXJsKCNiKSIgZD0iTTAgMGg4MDB2NDMwSDB6Ii8+PHBhdGggZD0iTTQ1MS40NCAxNDEuNWMtLjA3LTIuMjUtMS0zLjU1LTIuNzMtMy45M2gtMjQuMnEtMy42LjA5LTMuNzEgNC4wNnY1MC40NGwtMzMuNzItNTRhNSA1IDAgMDAtMy4wNS0xLjVsLS45LS4wN2gtMzEuNDVxLTMuMTkuMjgtMy4zMyA0djk1LjA2Yy4wOCAyLjI1IDEgMy41NiAyLjczIDMuOTNoMjQuMnEzLjYtLjA5IDMuNzEtNC4wNlYxODVsMzMuNzIgNTRhNSA1IDAgMDAzLjA1IDEuNTFjLjI5IDAgLjU5IDAgLjkuMDZoMzEuNDVxMy4xOS0uMjggMy4zMy00eiIgZmlsbD0idXJsKCNhKSIvPjxwYXRoIGQ9Ik00OTYuMzQgMjI4LjNsLTM2LjY3LTMwLjU3djM4Ljg3Yy4wNyAyLjQ3IDEuMTggMy44IDMuMzEgNGgzMC4yNWE1LjQ1IDUuNDUgMCAwMDQuMDUtMiA3LjI0IDcuMjQgMCAwMDAtOS40NiAzLjU5IDMuNTkgMCAwMC0uMzktLjM5bC0uMDYtLjA2eiIgZmlsbD0idXJsKCNjKSIvPjxwYXRoIGQ9Ik0zMDMuNDEgMTQ4Ljc5di4wNWwzNi42NyAzMC41N3YtMzguODdjLS4wNy0yLjQ4LTEuMTgtMy44MS0zLjMxLTRoLTMwLjIxYTUuNDkgNS40OSAwIDAwLTQuMDUgMiA2LjgxIDYuODEgMCAwMC0xLjc2IDQuNzIgNi45MSA2LjkxIDAgMDAxLjc2IDQuNzRxLjE5LjIxLjM5LjM5bC4wNi4wNmE0LjEyIDQuMTIgMCAwMC40NS4zNHoiIGZpbGw9InVybCgjZCkiLz48L3N2Zz4=) 50% 0 repeat-x;scrollbar-base-color:#181818;scrollbar-face-color:#363636;scrollbar-3dlight-color:#202020;scrollbar-highlight-color:#202020;scrollbar-track-color:#181818;scrollbar-arrow-color:#909090;scrollbar-shadow-color:#363636}.theme-nano-light hr,.theme-nano hr{background-color:#40628a;height:1px}.theme-nano-light .uiTitleWrapper,.theme-nano .uiTitleWrapper{background-color:#363636;box-shadow:0 0 8px 4px rgba(0,0,0,.5)}.theme-nano-light .uiTitleWrapper .uiTitleText,.theme-nano .uiTitleWrapper .uiTitleText{color:#e9c183}.theme-nano-light .uiTitleWrapper .uiTitleClose,.theme-nano .uiTitleWrapper .uiTitleClose{color:hsla(0,0%,100%,.5)}.theme-nano-light .button,.theme-nano-light a,.theme-nano-light button,.theme-nano-light input[type=button],.theme-nano-light input[type=reset],.theme-nano-light input[type=submit],.theme-nano .button,.theme-nano a,.theme-nano button,.theme-nano input[type=button],.theme-nano input[type=reset],.theme-nano input[type=submit]{display:inline-block;min-width:15px;height:16px;text-align:center;text-decoration:none;background:#40628a;cursor:default;white-space:nowrap;box-sizing:content-box;color:inherit;border-radius:.15em;padding:2px 4px 2px 4px;line-height:16px;vertical-align:top;margin:0 2px 2px 0}.theme-nano-light .button:hover,.theme-nano-light a:hover,.theme-nano-light button:hover,.theme-nano-light input[type=button]:hover,.theme-nano-light input[type=reset]:hover,.theme-nano-light input[type=submit]:hover,.theme-nano .button:hover,.theme-nano a:hover,.theme-nano button:hover,.theme-nano input[type=button]:hover,.theme-nano input[type=reset]:hover,.theme-nano input[type=submit]:hover{background:#507aac}.theme-nano-light .button:active,.theme-nano-light .button:link,.theme-nano-light .button:visited,.theme-nano-light a:active,.theme-nano-light a:link,.theme-nano-light a:visited,.theme-nano-light button:active,.theme-nano-light button:link,.theme-nano-light button:visited,.theme-nano-light input[type=button]:active,.theme-nano-light input[type=button]:link,.theme-nano-light input[type=button]:visited,.theme-nano-light input[type=reset]:active,.theme-nano-light input[type=reset]:link,.theme-nano-light input[type=reset]:visited,.theme-nano-light input[type=submit]:active,.theme-nano-light input[type=submit]:link,.theme-nano-light input[type=submit]:visited,.theme-nano .button:active,.theme-nano .button:link,.theme-nano .button:visited,.theme-nano a:active,.theme-nano a:link,.theme-nano a:visited,.theme-nano button:active,.theme-nano button:link,.theme-nano button:visited,.theme-nano input[type=button]:active,.theme-nano input[type=button]:link,.theme-nano input[type=button]:visited,.theme-nano input[type=reset]:active,.theme-nano input[type=reset]:link,.theme-nano input[type=reset]:visited,.theme-nano input[type=submit]:active,.theme-nano input[type=submit]:link,.theme-nano input[type=submit]:visited{text-decoration:none}.theme-nano-light .button.on,.theme-nano-light .button.selected,.theme-nano-light a.on,.theme-nano-light a.selected,.theme-nano-light button.on,.theme-nano-light button.selected,.theme-nano-light input[type=button].on,.theme-nano-light input[type=button].selected,.theme-nano-light input[type=reset].on,.theme-nano-light input[type=reset].selected,.theme-nano-light input[type=submit].on,.theme-nano-light input[type=submit].selected,.theme-nano .button.on,.theme-nano .button.selected,.theme-nano a.on,.theme-nano a.selected,.theme-nano button.on,.theme-nano button.selected,.theme-nano input[type=button].on,.theme-nano input[type=button].selected,.theme-nano input[type=reset].on,.theme-nano input[type=reset].selected,.theme-nano input[type=submit].on,.theme-nano input[type=submit].selected{background:#2f943c}.theme-nano-light .button.on:hover,.theme-nano-light .button.selected:hover,.theme-nano-light a.on:hover,.theme-nano-light a.selected:hover,.theme-nano-light button.on:hover,.theme-nano-light button.selected:hover,.theme-nano-light input[type=button].on:hover,.theme-nano-light input[type=button].selected:hover,.theme-nano-light input[type=reset].on:hover,.theme-nano-light input[type=reset].selected:hover,.theme-nano-light input[type=submit].on:hover,.theme-nano-light input[type=submit].selected:hover,.theme-nano .button.on:hover,.theme-nano .button.selected:hover,.theme-nano a.on:hover,.theme-nano a.selected:hover,.theme-nano button.on:hover,.theme-nano button.selected:hover,.theme-nano input[type=button].on:hover,.theme-nano input[type=button].selected:hover,.theme-nano input[type=reset].on:hover,.theme-nano input[type=reset].selected:hover,.theme-nano input[type=submit].on:hover,.theme-nano input[type=submit].selected:hover{background:#5fc96d}.theme-nano-light .button.inactive,.theme-nano-light .button.off,.theme-nano-light .button[disabled],.theme-nano-light a.inactive,.theme-nano-light a.off,.theme-nano-light a[disabled],.theme-nano-light button.inactive,.theme-nano-light button.off,.theme-nano-light button[disabled],.theme-nano-light input[type=button].inactive,.theme-nano-light input[type=button].off,.theme-nano-light input[type=button][disabled],.theme-nano-light input[type=reset].inactive,.theme-nano-light input[type=reset].off,.theme-nano-light input[type=reset][disabled],.theme-nano-light input[type=submit].inactive,.theme-nano-light input[type=submit].off,.theme-nano-light input[type=submit][disabled],.theme-nano .button.inactive,.theme-nano .button.off,.theme-nano .button[disabled],.theme-nano a.inactive,.theme-nano a.off,.theme-nano a[disabled],.theme-nano button.inactive,.theme-nano button.off,.theme-nano button[disabled],.theme-nano input[type=button].inactive,.theme-nano input[type=button].off,.theme-nano input[type=button][disabled],.theme-nano input[type=reset].inactive,.theme-nano input[type=reset].off,.theme-nano input[type=reset][disabled],.theme-nano input[type=submit].inactive,.theme-nano input[type=submit].off,.theme-nano input[type=submit][disabled]{background:#999;border-color:#666}.theme-nano-light .button.danger,.theme-nano-light .button.red,.theme-nano-light a.danger,.theme-nano-light a.red,.theme-nano-light button.danger,.theme-nano-light button.red,.theme-nano-light input[type=button].danger,.theme-nano-light input[type=button].red,.theme-nano-light input[type=reset].danger,.theme-nano-light input[type=reset].red,.theme-nano-light input[type=submit].danger,.theme-nano-light input[type=submit].red,.theme-nano .button.danger,.theme-nano .button.red,.theme-nano a.danger,.theme-nano a.red,.theme-nano button.danger,.theme-nano button.red,.theme-nano input[type=button].danger,.theme-nano input[type=button].red,.theme-nano input[type=reset].danger,.theme-nano input[type=reset].red,.theme-nano input[type=submit].danger,.theme-nano input[type=submit].red{background:red;border-color:#a00}.theme-nano-light .button.danger:hover,.theme-nano-light .button.red:hover,.theme-nano-light a.danger:hover,.theme-nano-light a.red:hover,.theme-nano-light button.danger:hover,.theme-nano-light button.red:hover,.theme-nano-light input[type=button].danger:hover,.theme-nano-light input[type=button].red:hover,.theme-nano-light input[type=reset].danger:hover,.theme-nano-light input[type=reset].red:hover,.theme-nano-light input[type=submit].danger:hover,.theme-nano-light input[type=submit].red:hover,.theme-nano .button.danger:hover,.theme-nano .button.red:hover,.theme-nano a.danger:hover,.theme-nano a.red:hover,.theme-nano button.danger:hover,.theme-nano button.red:hover,.theme-nano input[type=button].danger:hover,.theme-nano input[type=button].red:hover,.theme-nano input[type=reset].danger:hover,.theme-nano input[type=reset].red:hover,.theme-nano input[type=submit].danger:hover,.theme-nano input[type=submit].red:hover{background-color:#f66}.theme-nano-light .button.yellow,.theme-nano-light a.yellow,.theme-nano-light button.yellow,.theme-nano-light input[type=button].yellow,.theme-nano-light input[type=reset].yellow,.theme-nano-light input[type=submit].yellow,.theme-nano .button.yellow,.theme-nano a.yellow,.theme-nano button.yellow,.theme-nano input[type=button].yellow,.theme-nano input[type=reset].yellow,.theme-nano input[type=submit].yellow{color:#000;background:#cacc00}.theme-nano-light .button.yellow:hover,.theme-nano-light a.yellow:hover,.theme-nano-light button.yellow:hover,.theme-nano-light input[type=button].yellow:hover,.theme-nano-light input[type=reset].yellow:hover,.theme-nano-light input[type=submit].yellow:hover,.theme-nano .button.yellow:hover,.theme-nano a.yellow:hover,.theme-nano button.yellow:hover,.theme-nano input[type=button].yellow:hover,.theme-nano input[type=reset].yellow:hover,.theme-nano input[type=submit].yellow:hover{background:#fcff5f}.theme-nano-light ul,.theme-nano ul{padding:4px 0 0 10px;margin:0;list-style-type:none}.theme-nano-light li,.theme-nano li{padding:0 0 2px 0}.theme-nano-light img,.theme-nano img{border-style:none}.theme-nano-light h1,.theme-nano-light h2,.theme-nano-light h3,.theme-nano-light h4,.theme-nano-light h5,.theme-nano-light h6,.theme-nano h1,.theme-nano h2,.theme-nano h3,.theme-nano h4,.theme-nano h5,.theme-nano h6{margin:0;padding:12px 0 6px 0;clear:both}.theme-nano-light h1,.theme-nano h1{font-size:18px}.theme-nano-light h2,.theme-nano h2{font-size:16px}.theme-nano-light h3,.theme-nano h3{font-size:14px}.theme-nano-light h4,.theme-nano h4{font-size:12px}.theme-nano-light .good,.theme-nano .good{color:#4f7529;font-weight:700}.theme-nano-light .average,.theme-nano .average{color:#cd6500;font-weight:700}.theme-nano-light .bad,.theme-nano .bad{color:#e00;font-weight:700}.theme-nano-light .dark,.theme-nano-light .idle,.theme-nano .dark,.theme-nano .idle{color:#272727;font-weight:700}.theme-nano-light .highlight,.theme-nano .highlight{color:#8ba5c4}.theme-nano-light .itemLabel,.theme-nano .itemLabel{color:#e9c183}.theme-nano-light .notice,.theme-nano .notice{background:url(data:image/jpeg;base64,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0G2ORjQ7G232KCvRCULRG1aKSP8AJLSw+QVMwa0cEiChK2NaRNBsb/pDfsRJ2cIk/wCiEhLSwl3B0nge2nkIBDb7IYPYENuiIFehP6K8CRM6JbDgSdkbnv8AoxKwpYgt4JGKAmwJdwigx7IXOj6iWxEWQhjZE6JKQm9FLeCR/kI9mN6aanpGq0RtEWJqJa/oYMUD4cCZhwMJLeFE4iRJysYWWL7GBaI6PxS1gY3Q/AaaJXIUgxrIbekHsViRRBSGP0JKDhEqFhO7wbVh5SQW/wALWRK9HKtDGEkiWUsPCoUTOkObomsOA2250XZmZaW3ZEo8AksVE1cGjAqRjHshYQnZD7CVGv8AEsuhJJDnSwn3BwkOGTaPcDOwgS9GUpcCrInrB8g6dEj6F54/P//aAAwDAQACAAMAAAAQJpNNttpNJJppNNpppJppNJJJJJNJJttNJNpJJtNNtNtNNJpJJNNJJJpppJJNtNNNttJtpNpJNppNNNtJpJJNJppJJNttNNNNNpJppNNpJJtpJJJtJNptpppJtpptpNpptpJNNNNtJJNtJJpNJNpttptpNptNJtNttNJJNNNtJpppptpNNNJptJtJNtJpJtJNttpJNptJNJJtNptJttJJtNJJNJtJpJptpNJtJpNNpttNppNNJtpppNNNNJtNttpNJJptNtJtpJNJtpppJpNtttNpNNJtNpJNtJNNtNtJppNNpppNNNJtNpJNJtpNNptNJpJtNJJpppJJtJptNJNNtptJtNtptJtNJpJpNpJNJpptNNtpNNtJpJJJttNNptJJNttNtNJpJJppNptpNNNtJNppNttJpJNJtJpNNpNtJtJpJtpNptJtptppJpJptJNtppNtNJNNpJpNJNtNtNJppJJtpttNJJJpNtpNNptJJttNtpttJtNNpptptNt//f8A+z/++23+2/8Avv8A5f7b/b/b7b7ff/8ATz232++2+22/62++323+3/233+2/32+3+/223/3zX2332/32++/3/wBt/wD/AP33/wBtv/8A/wD2/wB9/tv9t/8A7fb7b7//AH323+/222++33332++33333/wDt99t/vtv/AL7bb/f7bfbbff8A+/3/ANtvtt/tvvtv99v9t/8Ab7/f/wD+++//APt/vt//APb7b/bf7/7ffb77/wC32/2//wDt/wDfbf7b77b7/f8A/wBtvtt/v/v9v9/tv/v/AL77777bbf7/AH3/APvt/wD/AO3/APvtvtt9/wDf/wC223//APt99/vv/wDf/wD33+2++3+33323/wDtvtv9/v8Af7f7/wC//wBvttvttv8Abf8A+3+2323/ANt9/wDbfb7fbffb/wC+3322++/332+++332/wB/9tvvvv8A7bfffb//AO+//wBtv9vvtvt9v/vtt9t/v9vvtt/9v/8A7b7bfff/AP8Av/8A7/f/AO/+323233222++223332++/3/8A/v8Ab7b7f7/bbb7777fffbbfb/8A+2++2/22/wD/AP8A+323+2++3223/wBvt9v/ALbb7b7b/b7fbffff7/b7/bbb/bffb7f/wC++/8A/wDbb77bbb/f7fff/wC323+3/wD9tt99vv8Afff7/bf/AO+232//ANt99vt/9v8A7f777b/f7fbf7/b/AG33+2+/+3223/3/ANvv/wDfb/f77/b/AG+332+//wBt/t/vvt/v/t//AL/b7ff7f/b/AG++3+/2++/2332/2+332/3/APtv9/tv/vt//vt/vt//AP8A+22+/wD/AP8A+232+/2322+3332/+2/++232223/APtvtv8Abb/7f/b777/b7f8A++/2+/8A9/t99/v9v9//AL//AO/2/wDvtt9tvtt/vttt/tvt99v/APf/AP2/223/APtvtv8A777/AH2/2++22/8A9tvvv9/9/wD7ffb/AP3/AP8A7/8A323/APv9t99/tvt9t9t9tt9/ttv9/tt//vv/ALfff/b/AH3+3+/+2/3+/wBvtvv9/t/vvttt/wDbb/f777/b7/7f/b7bb77bff77/fbb/wD+/wDv9t/9t/ttvtvt9/t/9vt99t/vvt/v/tv9/wD777f/AO+++++//wD/APf/AP2/+3+32/332333/wD/AL7777ff/bf/AH/+++22/wBv9/8A/wC2+22++23+2/8Avtvvv/v/AP7/AO3++3/333+//wDtt/tv9t/v9v8Ab/8A23/3+3332/2++/8A9999vt9/999v/tvvt9/vtvv/AL7/AH/3++/+332/+33/AP8Af7/7fff7b/f7NpNJJJppNptNtpNtpNtNJJpNJtJJpttpJJtJNNNppNJtJppJNppJtppJpNNpJtJtJtNNtNJpNppNNNtpJJNtJpNN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) 50% 50%;color:#000;font-size:12px;font-style:italic;font-weight:700;padding:3px 4px;margin:4px 0 4px 0;border:1px solid #c2a26f}.theme-nano-light .displayBar,.theme-nano .displayBar{background:#000;border-radius:.15em}.theme-nano-light .displayBar .displayBarFill,.theme-nano .displayBar .displayBarFill{background:#40628a;color:#fff}.theme-nano-light .displayBar.good .displayBarFill,.theme-nano .displayBar.good .displayBarFill{background:#4f7529}.theme-nano-light .displayBar.average .displayBarFill,.theme-nano .displayBar.average .displayBarFill{background:#cd6500}.theme-nano-light .displayBar.bad .displayBarFill,.theme-nano .displayBar.bad .displayBarFill{background:#e00}.theme-nano-light .displayBar.highlight .displayBarFill,.theme-nano .displayBar.highlight .displayBarFill{background:#8ba5c4}.theme-nano-light input,.theme-nano input{border-radius:0;padding:2.25px 6px;vertical-align:top;margin:0 2px 2px 0}.theme-nano-light .tooltip.content,.theme-nano .tooltip.content{background:#272727;border:1px solid #a9a9a9}.theme-nano-light{color:#000;background:#c9c9c9 url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iODAwIiBoZWlnaHQ9IjQzMCI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJiIiB4MT0iNDAwIiB5MT0iNDMwIiB4Mj0iNDAwIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIuNDEiIHN0b3AtY29sb3I9IiNjOWM5YzkiLz48c3RvcCBvZmZzZXQ9Ii44NCIgc3RvcC1jb2xvcj0iI2U1ZTVlNSIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJhIiB4MT0iMzk5LjkiIHkxPSIxMzYuNTIiIHgyPSIzOTkuOSIgeTI9IjI0MC41NSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iLjAxIiBzdG9wLWNvbG9yPSIjZDNkM2Q0Ii8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYzJjNGM0Ii8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImMiIHgxPSI0NzkuMzIiIHkxPSIxOTcuNjkiIHgyPSI0NzkuMzIiIHkyPSIyNDAuNTUiIHhsaW5rOmhyZWY9IiNhIi8+PGxpbmVhckdyYWRpZW50IGlkPSJkIiB4MT0iMzIwLjQzIiB5MT0iMTM2LjU0IiB4Mj0iMzIwLjQzIiB5Mj0iMTc5LjQxIiB4bGluazpocmVmPSIjYSIvPjwvZGVmcz48cGF0aCBmaWxsPSJ1cmwoI2IpIiBkPSJNMCAwaDgwMHY0MzBIMHoiLz48cGF0aCBkPSJNNDUxLjQ0IDE0MS41Yy0uMDctMi4yNS0xLTMuNTUtMi43My0zLjkzaC0yNC4ycS0zLjYuMDktMy43MSA0LjA2djUwLjQ0bC0zMy43Mi01NGE1IDUgMCAwMC0zLjA1LTEuNWwtLjktLjA3aC0zMS40NXEtMy4xOS4yOC0zLjMzIDR2OTUuMDZjLjA4IDIuMjUgMSAzLjU2IDIuNzMgMy45M2gyNC4ycTMuNi0uMDkgMy43MS00LjA2VjE4NWwzMy43MiA1NGE1IDUgMCAwMDMuMDUgMS41MWMuMjkgMCAuNTkgMCAuOS4wNmgzMS40NXEzLjE5LS4yOCAzLjMzLTR6IiBmaWxsPSJ1cmwoI2EpIi8+PHBhdGggZD0iTTQ5Ni4zNCAyMjguM2wtMzYuNjctMzAuNTd2MzguODdjLjA3IDIuNDcgMS4xOCAzLjggMy4zMSA0aDMwLjI1YTUuNDUgNS40NSAwIDAwNC4wNS0yIDcuMjQgNy4yNCAwIDAwMC05LjQ2IDMuNTkgMy41OSAwIDAwLS4zOS0uMzlsLS4wNi0uMDZ6IiBmaWxsPSJ1cmwoI2MpIi8+PHBhdGggZD0iTTMwMy40MSAxNDguNzl2LjA1bDM2LjY3IDMwLjU3di0zOC44N2MtLjA3LTIuNDgtMS4xOC0zLjgxLTMuMzEtNGgtMzAuMjFhNS40OSA1LjQ5IDAgMDAtNC4wNSAyIDYuODEgNi44MSAwIDAwLTEuNzYgNC43MiA2LjkxIDYuOTEgMCAwMDEuNzYgNC43NHEuMTkuMjEuMzkuMzlsLjA2LjA2YTQuMTIgNC4xMiAwIDAwLjQ1LjM0eiIgZmlsbD0idXJsKCNkKSIvPjwvc3ZnPg==) 50% 0 repeat-x}.theme-nano-light .itemLabel{color:#4c401c}.theme-nano-light .uiTitleWrapper{background:url(data:image/png;base64,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) repeat 50%}.theme-nano-light .uiTitleWrapper .uiTitleText{color:#4c401c}.theme-nano-light .uiTitleWrapper .uiTitleClose{color:#000}.theme-nano-light .good{color:#5e9653}.theme-nano-light .average{color:#cd6500}.theme-nano-light .bad{color:#e00}.theme-nano-light .dark,.theme-nano-light .idle{color:#272727}.theme-nano-light .displayBar{background:#fff;border:1px solid #666}.theme-nano-light .displayBar .displayBarFill{background:#556d99;color:#fff}.theme-nano-light .displayBar.good .displayBarFill{background:#5e9653}.theme-nano-light .displayBar.average .displayBarFill{background:#cd6500}.theme-nano-light .displayBar.bad .displayBarFill{background:#e00}.theme-nano-light .displayBar.highlight .displayBarFill{background:#8ba5c4}.theme-nano-light .button,.theme-nano-light a,.theme-nano-light button,.theme-nano-light input[disabled],.theme-nano-light input[type=button],.theme-nano-light input[type=reset],.theme-nano-light input[type=submit]{color:#fff;background:#556d99}.theme-nano-light .button:hover,.theme-nano-light a:hover,.theme-nano-light button:hover,.theme-nano-light input[disabled]:hover,.theme-nano-light input[type=button]:hover,.theme-nano-light input[type=reset]:hover,.theme-nano-light input[type=submit]:hover{background:#7c9ede}.theme-nano-light .button:active,.theme-nano-light .button:link,.theme-nano-light .button:visited,.theme-nano-light a:active,.theme-nano-light a:link,.theme-nano-light a:visited,.theme-nano-light button:active,.theme-nano-light button:link,.theme-nano-light button:visited,.theme-nano-light input[disabled]:active,.theme-nano-light input[disabled]:link,.theme-nano-light input[disabled]:visited,.theme-nano-light input[type=button]:active,.theme-nano-light input[type=button]:link,.theme-nano-light input[type=button]:visited,.theme-nano-light input[type=reset]:active,.theme-nano-light input[type=reset]:link,.theme-nano-light input[type=reset]:visited,.theme-nano-light input[type=submit]:active,.theme-nano-light input[type=submit]:link,.theme-nano-light input[type=submit]:visited{text-decoration:none}.theme-nano-light .button.on,.theme-nano-light .button.selected,.theme-nano-light a.on,.theme-nano-light a.selected,.theme-nano-light button.on,.theme-nano-light button.selected,.theme-nano-light input[disabled].on,.theme-nano-light input[disabled].selected,.theme-nano-light input[type=button].on,.theme-nano-light input[type=button].selected,.theme-nano-light input[type=reset].on,.theme-nano-light input[type=reset].selected,.theme-nano-light input[type=submit].on,.theme-nano-light input[type=submit].selected{background:#5e9653}.theme-nano-light .button.on:hover,.theme-nano-light .button.selected:hover,.theme-nano-light a.on:hover,.theme-nano-light a.selected:hover,.theme-nano-light button.on:hover,.theme-nano-light button.selected:hover,.theme-nano-light input[disabled].on:hover,.theme-nano-light input[disabled].selected:hover,.theme-nano-light input[type=button].on:hover,.theme-nano-light input[type=button].selected:hover,.theme-nano-light input[type=reset].on:hover,.theme-nano-light input[type=reset].selected:hover,.theme-nano-light input[type=submit].on:hover,.theme-nano-light input[type=submit].selected:hover{background:#7bc46c}.theme-nano-light .button.inactive,.theme-nano-light .button.off,.theme-nano-light .button[disabled],.theme-nano-light a.inactive,.theme-nano-light a.off,.theme-nano-light a[disabled],.theme-nano-light button.inactive,.theme-nano-light button.off,.theme-nano-light button[disabled],.theme-nano-light input[disabled].inactive,.theme-nano-light input[disabled].off,.theme-nano-light input[disabled][disabled],.theme-nano-light input[type=button].inactive,.theme-nano-light input[type=button].off,.theme-nano-light input[type=button][disabled],.theme-nano-light input[type=reset].inactive,.theme-nano-light input[type=reset].off,.theme-nano-light input[type=reset][disabled],.theme-nano-light input[type=submit].inactive,.theme-nano-light input[type=submit].off,.theme-nano-light input[type=submit][disabled]{background:#999;border-color:#444}.theme-nano-light .button.danger,.theme-nano-light .button.red,.theme-nano-light a.danger,.theme-nano-light a.red,.theme-nano-light button.danger,.theme-nano-light button.red,.theme-nano-light input[disabled].danger,.theme-nano-light input[disabled].red,.theme-nano-light input[type=button].danger,.theme-nano-light input[type=button].red,.theme-nano-light input[type=reset].danger,.theme-nano-light input[type=reset].red,.theme-nano-light input[type=submit].danger,.theme-nano-light input[type=submit].red{background:#f22;border-color:#a00}.theme-nano-light .button.danger:hover,.theme-nano-light .button.red:hover,.theme-nano-light a.danger:hover,.theme-nano-light a.red:hover,.theme-nano-light button.danger:hover,.theme-nano-light button.red:hover,.theme-nano-light input[disabled].danger:hover,.theme-nano-light input[disabled].red:hover,.theme-nano-light input[type=button].danger:hover,.theme-nano-light input[type=button].red:hover,.theme-nano-light input[type=reset].danger:hover,.theme-nano-light input[type=reset].red:hover,.theme-nano-light input[type=submit].danger:hover,.theme-nano-light input[type=submit].red:hover{background-color:#f66}.theme-nano-light .button.yellow,.theme-nano-light a.yellow,.theme-nano-light button.yellow,.theme-nano-light input[disabled].yellow,.theme-nano-light input[type=button].yellow,.theme-nano-light input[type=reset].yellow,.theme-nano-light input[type=submit].yellow{color:#000;background:#cacc00}.theme-nano-light .button.yellow:hover,.theme-nano-light a.yellow:hover,.theme-nano-light button.yellow:hover,.theme-nano-light input[disabled].yellow:hover,.theme-nano-light input[type=button].yellow:hover,.theme-nano-light input[type=reset].yellow:hover,.theme-nano-light input[type=submit].yellow:hover{background:#fcff5f}.theme-nano-light .tooltip.content{color:#000;background:#c9c9c9;border:1px solid #a9a9a9}.text-dept-command{color:#114dc1!important}.bg-dept-command{background-color:#114dc1!important}.border-dept-command{border-color:#114dc1!important}.text-dept-security{color:#991818!important}.bg-dept-security{background-color:#991818!important}.border-dept-security{border-color:#991818!important}.text-dept-engineering{color:#c67519!important}.bg-dept-engineering{background-color:#c67519!important}.border-dept-engineering{border-color:#c67519!important}.text-dept-medical{color:#15903a!important}.bg-dept-medical{background-color:#15903a!important}.border-dept-medical{border-color:#15903a!important}.text-dept-science{color:#a44799!important}.bg-dept-science{background-color:#a44799!important}.border-dept-science{border-color:#a44799!important}.text-dept-cargo{color:#593616!important}.bg-dept-cargo{background-color:#593616!important}.border-dept-cargo{border-color:#593616!important}.text-dept-civilian{color:#90524b!important}.bg-dept-civilian{background-color:#90524b!important}.border-dept-civilian{border-color:#90524b!important}.text-dept-equipment{color:#6c5b73!important}.bg-dept-equipment{background-color:#6c5b73!important}.border-dept-equipment{border-color:#6c5b73!important}.text-dept-miscellaneous{color:#5d6a67!important}.bg-dept-miscellaneous{background-color:#5d6a67!important}.border-dept-miscellaneous{border-color:#5d6a67!important}.dark-theme{color:#fff}body{font-size:14px;margin:0;padding:8px;font-family:Arial,Helvetica,sans-serif;overflow-x:auto;min-width:240px}body.vueui{overflow-y:hidden}#content{height:calc(100vh - 36px)}#content.mcomputer{height:calc(100vh - 72px)}#content.uiDebug{height:calc(50vh - 36px)}#content.uiDebug.mcomputer{height:calc(50vh - 72px)}#debug{height:50vh;display:none}#debug.uiDebug{display:inherit}#content,#debug{overflow-y:auto;margin-right:-8px;margin-top:-8px}#content>div{margin-right:8px;margin-top:8px}.uiTitleWrapper{margin:-8px -8px 10px;position:relative;float:none;clear:both;user-select:none;-ms-user-select:none;cursor:default}.uiTitleWrapper>.titleBar{height:32px}.uiTitleWrapper>.titleBar:before{content:"";display:inline-block;height:100%;vertical-align:middle;font-size:0}.uiTitleWrapper>.titleBar>*{vertical-align:middle;font-size:24px;display:inline-block;margin-left:8px;line-height:32px}.uiTitleWrapper>.titleBar>.uiTitleText{font-size:16px}.uiTitleWrapper>.titleBar>.uiDebugIcon{cursor:pointer;transition:color .25s}.uiTitleWrapper>.titleBar>.uiDebugIcon.uiNoDebug{display:none}.uiTitleWrapper>.titleBar>.uiDebugIcon:hover{color:#507aac;transition:color 0ms}.uiTitleWrapper>.titleBar>.uiTitleClose{display:block;float:right;width:45px;font-size:20px;text-align:center;transition:color .25s,background-color .25s}.uiTitleWrapper>.titleBar>.uiTitleClose:hover{color:#fff;background-color:#c00;transition:color 0ms,background-color 0ms}code{font-family:Courier New,Courier,monospace}.table.border{border-collapse:collapse;border:1px solid #000;border-radius:.15em;background-color:rgba(0,0,0,.3)}.header.border{border:.5px solid rgba(0,0,0,.5);border-bottom:2px solid #556d99;border-radius:.15em}.item.border{border:.5px solid rgba(0,0,0,.5);border-radius:.15em}.button,button,input,select,textarea{box-sizing:border-box;padding:4px 6px;border-radius:4px;display:inline-block}.button,button{border:1px solid rgba(0,0,0,.2)}input,select,textarea{border:1px solid #000}.button,a,button,input[disabled],input[type=button],input[type=reset],input[type=submit]{user-select:none;-ms-user-select:none;background-color:#d8d8d8;cursor:pointer;padding:2px 4px;vertical-align:top}.button:hover,a:hover,button:hover,input[disabled]:hover,input[type=button]:hover,input[type=reset]:hover,input[type=submit]:hover{background-color:#b2deee}.button .mapIcon16,.button .uiIcon16,.button .uiIcon24,a .mapIcon16,a .uiIcon16,a .uiIcon24,button .mapIcon16,button .uiIcon16,button .uiIcon24,input[disabled] .mapIcon16,input[disabled] .uiIcon16,input[disabled] .uiIcon24,input[type=button] .mapIcon16,input[type=button] .uiIcon16,input[type=button] .uiIcon24,input[type=reset] .mapIcon16,input[type=reset] .uiIcon16,input[type=reset] .uiIcon24,input[type=submit] .mapIcon16,input[type=submit] .uiIcon16,input[type=submit] .uiIcon24{margin:0}.button *,a *,button *,input[disabled] *,input[type=button] *,input[type=reset] *,input[type=submit] *{vertical-align:top}.hidden{display:none!important}.notice{background:#ffac4e;color:#000;font-style:italic;font-weight:700;padding:3px 4px;margin:4px 0}.displayBar{display:inline-block;background:#fff;margin:0 5px 0 0;border:.5px solid rgba(0,0,0,.2);border-radius:.15em;overflow:hidden;width:236px;height:16px;vertical-align:text-bottom}.displayBar .displayBarFill{width:0;height:100%;background:#acacac;overflow:hidden;float:left;color:#000}.displayBar.good .displayBarFill{background:#5fe42b}.displayBar.average .displayBarFill{background:#ff8000}.displayBar.bad .displayBarFill{background:#ff2323}.displayBar.highlight .displayBarFill{background:#9dc7d6}.csserror{display:none}.tooltip.label{text-decoration:underline}.red{color:red}.green{color:green}.blue{color:#00f}.highlight{color:#00008b}.good{color:#4f7529}.average{color:#cd6500}.bad{color:#e00}.resizeHandle__se[data-v-01c02ad8]{position:fixed;bottom:0;right:0;width:20px;height:20px;cursor:se-resize;transition:opacity .3s;opacity:.5;background-position:100% 100%;background-size:16px 16px;background-repeat:no-repeat;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' version='1' fill='%23fff' viewBox='0 0 567 567'%3E%3Cpath d='M437 0c-6 0-12 2-17 7L7 420c-9 10-9 25 0 34l57 57c9 9 24 9 34 0L511 98c9-10 9-25 0-34L454 7c-5-5-11-7-17-7zm27 199c-6 0-12 3-17 7L206 447c-9 9-9 25 0 34l57 57c9 9 25 9 34 0l241-241c9-9 9-25 0-34l-57-57c-5-4-11-7-17-7zm22 204c-6 0-12 3-17 7l-59 59c-9 10-9 25 0 34l57 57c9 9 25 9 34 0l59-59c9-9 9-25 0-34l-57-57c-4-4-11-7-17-7z'/%3E%3C/svg%3E")}.resizeHandle__se[data-v-01c02ad8]:hover{opacity:1}.resizeHandle__s[data-v-01c02ad8]{position:fixed;bottom:0;left:0;right:0;height:6px;cursor:s-resize}.resizeHandle__e[data-v-01c02ad8]{position:fixed;top:0;bottom:0;right:0;width:3px;cursor:e-resize}.button[data-v-1a3d9578],button[data-v-1a3d9578]{margin-left:6px}.maincont[data-v-1a3d9578]{padding:4px;padding-top:5px;padding-bottom:5px;margin-bottom:-8px;background-color:#202020}.maincont .valign[data-v-1a3d9578]{vertical-align:middle}.uiIcon16[data-v-1a3d9578]{margin-right:0}.table[data-v-0d69deee]{display:table;width:100%}.table .header[data-v-0d69deee]{text-align:center;font-weight:700}.table .header[data-v-0d69deee],.table .player[data-v-0d69deee]{display:table-row}.table .header .header-item[data-v-0d69deee],.table .header .item[data-v-0d69deee],.table .player .header-item[data-v-0d69deee],.table .player .item[data-v-0d69deee]{display:table-cell;padding:1px}.complist[data-v-0f00c828]{margin-right:1em}.value[data-v-10d6546a],.value[data-v-729622e4],.value[data-v-b7af1e1c]{color:#fff;font-size:140%;background-color:rgba(0,0,0,.4);padding-left:5px;padding-right:5px;border:1px solid #40628a}.ores[data-v-5716889f]{text-transform:capitalize}.character-image[data-v-36f58934]{float:left;height:64px}.dept-block[data-v-36f58934],.gs-block[data-v-36f58934]{position:relative;border:2px solid}.dept-block .dept[data-v-36f58934],.gs-block .dept[data-v-36f58934]{text-align:center;font-weight:700}.gs-block[data-v-36f58934]{border-color:#41ff41}.gs-block .dept[data-v-36f58934]{background-color:#41ff41;color:#000}.statusDisplay[data-v-60faaeb6]{background:#000;color:#fff;border:1px solid #40628a;padding:4px;margin:3px 0}.fixedLeftWide[data-v-60faaeb6]{width:165px;float:left}.item[data-v-60faaeb6]{width:100%;margin:4px 0 0 0;clear:both}ul[data-v-2005209a]{padding:4px 4px 10px 10px}.danger-control[data-v-2005209a]{position:fixed;right:20px;bottom:20px}.control[data-v-2005209a]{position:fixed;left:20px;bottom:20px}table[data-v-561826ba]{width:100%;text-align:center}tr[data-v-561826ba]{line-height:135%}.t-parent>p[data-v-2633030c]{text-align:center;margin-top:0;width:100%}.cancel-button[data-v-2633030c]{width:100%;margin-bottom:5px}p.danger[data-v-2633030c]{color:red}.purchase-icon[data-v-2633030c]{vertical-align:bottom}.food-icon[data-v-2633030c]{-ms-transform:scale(2);transform:scale(2);position:absolute;left:0;right:0;margin-left:auto;margin-right:auto;margin-top:12px}.food-icon.no-stock[data-v-2633030c]{opacity:.2;filter:alpha(opacity=20);-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=20)"}.t-parent[data-v-2633030c]{text-align:center;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;background-color:rgba(0,0,0,.4);outline-style:ridge;outline-color:#000}.t-child[data-v-2633030c]{height:auto;white-space:normal;box-sizing:border-box;margin:4px 4px 4px 4px;background-color:rgba(64,98,138,.4)}.t-container[data-v-2633030c]{position:relative}.statusValue[data-v-2633030c]{width:90%}.no-stock[data-v-2633030c]{color:grey}.cart-icon[data-v-2633030c]{position:absolute;bottom:5px;left:0}.price[data-v-2633030c]{position:absolute;bottom:4px;left:0;right:15px;text-align:center;font-size:10px}.qty[data-v-2633030c]{position:absolute;right:0;bottom:4px;font-size:10px}.no-stock.button[data-v-2633030c]{background:inherit;border-style:none}.tooltip[data-v-2633030c]{position:relative;display:inline-block}.tooltip .tooltiptext[data-v-2633030c]{visibility:hidden;width:120px;background-color:#202020;color:#fff;text-align:center;padding:5px 0;border-radius:6px;opacity:0;transition:opacity 1s;position:absolute;z-index:1;bottom:100%;left:50%;margin-left:-60px;right:auto}.tooltip .tooltiptext[data-v-2633030c]:after{content:" ";position:absolute;top:100%;left:50%;border-width:5px;border-style:solid;border-color:#202020 rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0)}.tooltip:hover .tooltiptext[data-v-2633030c]{visibility:visible;opacity:1}#content>div[data-v-2633030c]{overflow-x:hidden}table[data-v-c49443fe]{width:100%;border-collapse:collapse;color:#fff;background-color:rgba(0,0,0,.6);border:2px solid;margin-top:.5rem}table td[data-v-c49443fe]{padding-left:.5rem;padding-right:.5rem}table td[data-v-c49443fe]:nth-child(2){width:12.5rem}table td[data-v-c49443fe]:last-child{text-align:right;width:6.5rem}.complist[data-v-4021d8a8]{margin-right:1em}.message-chat[data-v-32f14c20]{width:100%;background:#000;color:#fff;border:1px solid #40628a;padding:.4em;box-sizing:border-box;height:20em;overflow-y:scroll}.message-container[data-v-32f14c20]{display:-ms-flexbox;display:flex}.message-input[data-v-32f14c20]{width:80%;-ms-flex-positive:1;flex-grow:1}.recipe-block[data-v-710a36a7]{background-color:rgba(0,0,0,0);border-bottom:2px solid rgba(0,0,0,0);transition:background-color .2s,color .2s,border-bottom .2s;padding:2px}.recipe-block h2[data-v-710a36a7]{color:#4f7999}.recipe-block h2[data-v-710a36a7],.recipe-block h3[data-v-710a36a7]{padding:2px 0}.recipe-block[data-v-710a36a7]:hover{background-color:rgba(0,0,0,.5);border-bottom:2px solid #4f7c9e}.recipe-block:hover .description[data-v-710a36a7]{color:#82a4be}table[data-v-c971b6ac]{width:100%;text-align:center}tr[data-v-c971b6ac]{line-height:135%}table[data-v-1021c617]{width:100%;text-align:center}tr[data-v-1021c617]{line-height:135%}.table[data-v-731c48b4]{display:table;width:100%}.table .header[data-v-731c48b4]{text-align:center;font-weight:700}.table .header[data-v-731c48b4],.table .sensor[data-v-731c48b4]{display:table-row}.table .header .header-item[data-v-731c48b4],.table .header .item[data-v-731c48b4],.table .sensor .header-item[data-v-731c48b4],.table .sensor .item[data-v-731c48b4]{display:table-cell;padding:1px;vertical-align:middle}.table .header .sensor[data-v-731c48b4]:last-child,.table .sensor .sensor[data-v-731c48b4]:last-child{padding-right:0}.item[data-v-731c48b4]{text-align:center}.sensor .item[data-v-731c48b4]{border:.5px solid rgba(0,0,0,.5);border-radius:.15em}.terminal[data-v-3a6a6067]{font-family:monospace;line-height:1em;font-size:1em}.terminal[data-v-3a6a6067],table[data-v-765293e6]{width:100%;text-align:center}tr[data-v-765293e6]{line-height:135%}table[data-v-1844f920]{width:100%;text-align:center}tr[data-v-1844f920]{line-height:135%}.table[data-v-41065424]{display:table;width:100%}.table .cyborg[data-v-41065424],.table .header[data-v-41065424],.table .mech[data-v-41065424]{display:table-row;font-weight:700;width:20%}.table .cyborg .header-item[data-v-41065424],.table .cyborg .item[data-v-41065424],.table .header .header-item[data-v-41065424],.table .header .item[data-v-41065424],.table .mech .header-item[data-v-41065424],.table .mech .item[data-v-41065424]{display:table-cell;padding:1px;vertical-align:middle;font-weight:400}.center[data-v-41065424]{text-align:center}.value-setting[data-v-b23b384c]{width:5em;display:inline-block;text-align:center}table[data-v-f45f2cac]{width:100%}table.queue-list td[data-v-f45f2cac]{padding:.2em}table.queue-list td.action[data-v-f45f2cac],table.queue-list td.name[data-v-f45f2cac]{width:1%;white-space:nowrap}.vui-progress[data-v-f45f2cac]{width:100%}.bodyscanner[data-v-130b946b]{display:table;width:100%}.bodyscanner .header[data-v-130b946b]{display:table-row}.bodyscanner .header .header-item[data-v-130b946b],.bodyscanner .header .item[data-v-130b946b]{display:table-cell;padding:1px;vertical-align:middle}.bodyscanner .column[data-v-130b946b]{float:left;width:45%;margin:1%;padding:10px;outline-style:ridge;outline-color:#000;background-color:rgba(0,0,0,.4);height:500px;overflow:auto}.bodyscanner .row[data-v-130b946b]:after{content:"";display:table;clear:both}.left[data-v-130b946b]{text-align:left}.center[data-v-130b946b]{text-align:center}.right[data-v-130b946b]{text-align:right}table .injury[data-v-130b946b]{border-spacing:20px 0}td[data-v-130b946b],th[data-v-130b946b]{text-align:center}.column[data-v-3783600c]{float:left;width:45%;margin:1%;padding:10px;outline-style:ridge;outline-color:#000;background-color:rgba(0,0,0,.4);height:500px;overflow:auto}.columnHolder[data-v-3783600c]:after{content:"";display:block;height:0;overflow:hidden;clear:both}.text[data-v-3783600c]{color:#b99d71}.float .button[data-v-3783600c]{float:left;padding-left:5px}td .shifted[data-v-3783600c]{padding-left:5px}.tileRow[data-v-58cc165e]{line-height:1em;cursor:pointer}.tileRow .tile[data-v-58cc165e]{height:3em;width:3em;padding:.5em;display:inline-block;vertical-align:bottom}.tileRow .tile .piece[data-v-58cc165e]{font-size:3em;line-height:1em;text-align:center;-ms-user-select:none;user-select:none}.tileRow .tile .piece.ghost[data-v-58cc165e]{opacity:.6}.tileRow .tile .piece.ghost.sel[data-v-58cc165e]{text-shadow:none}.tileRow .tile .piece.sel[data-v-58cc165e]{text-shadow:2px 0 10px #5353ff}.tileRow .tile .piece.black[data-v-58cc165e]{color:#000}.tileRow .tile .piece.red[data-v-58cc165e]{color:red}.tileRow .tile.w[data-v-58cc165e]{background-color:#6cf}.tileRow .tile.w.sel[data-v-58cc165e]{background-color:#a5ccff}.tileRow .tile.b[data-v-58cc165e]{background-color:#3a3a3d}.tileRow .tile.b.sel[data-v-58cc165e]{background-color:#4c3a3d}table[data-v-70766bea]{width:100%}table td[data-v-70766bea],table th[data-v-70766bea]{text-align:center;width:auto}table td.action[data-v-70766bea],table th.action[data-v-70766bea]{width:1%;white-space:nowrap}table th[data-v-70766bea]{font-weight:700}.tagselector[data-v-70766bea]{display:-ms-flexbox;display:flex}input[data-v-c4dbe0aa],textarea[data-v-c4dbe0aa]{width:100%;vertical-align:top}textarea[data-v-c4dbe0aa]{height:3em}table[data-v-8bcc2668]{width:100%}table th[data-v-8bcc2668]{font-weight:700}table td[data-v-8bcc2668],table th[data-v-8bcc2668]{text-align:center}.copylabel[data-v-927b9430]{display:inline-block;width:auto}.copyBlock[data-v-927b9430]{display:inline-block}textarea[data-v-a9c97a54]{height:6em}.photos[data-v-c51ad1c4]{display:inline-block;position:absolute;right:0}.photos [data-v-c51ad1c4]{height:64px;-ms-interpolation-mode:nearest-neighbor;image-rendering:crisp-edges}.bottombuttons[data-v-c51ad1c4]{margin-top:8px}.bottombuttons .button[data-v-c51ad1c4]{margin-right:6px}.newrecord[data-v-df4093f4]{margin-top:6px}.logout[data-v-a1e2a0dc]{margin-right:0;margin-left:auto}div.incidents[data-v-494b07dc]{background-color:hsla(0,0%,50.2%,.2);padding:4px}.modular[data-v-61a5d2f6]{font-family:arial,sans-serif;border-collapse:collapse}.modular td[data-v-61a5d2f6],.modular th[data-v-61a5d2f6]{border:1px solid #ddd;text-align:left;padding:8px}.modular td[data-v-61a5d2f6]{text-align:center}.other td[data-v-61a5d2f6]{padding:5px}.right[data-v-61a5d2f6]{text-align:right}.active_energy[data-v-61a5d2f6]{display:contents}div.item[data-v-7c73d3c8]{display:table-row}.itemContent[data-v-7c73d3c8],.itemLabel[data-v-7c73d3c8]{display:table-cell;width:10%}.itemLabel[data-v-7c73d3c8]{padding-right:8px;width:4%}div[data-v-b2030120]{display:table;width:100%}div[data-v-b774fb42]{display:inline-block}input[data-v-b774fb42]{text-align:center}div[data-v-1c07adff]{display:inline-block}input[data-v-1c07adff]{text-align:center}input[type=range][data-v-1c07adff]{width:100%;border:none}input[type=range][data-v-1c07adff]:focus{outline:none}input[type=range][data-v-1c07adff]::-ms-track{width:100%;height:8.4px;cursor:pointer;background:rgba(0,0,0,0);border-color:rgba(0,0,0,0);border-width:16px 0;color:rgba(0,0,0,0)}input[type=range][data-v-1c07adff]::-ms-fill-lower{background:#2a6495;border:.2px solid #010101;border-radius:2.6px;box-shadow:1px 1px 1px #000,0 0 1px #0d0d0d}input[type=range][data-v-1c07adff]::-ms-fill-upper{background:#3071a9;border:.2px solid #010101;border-radius:2.6px;box-shadow:1px 1px 1px #000,0 0 1px #0d0d0d}input[type=range][data-v-1c07adff]::-ms-thumb{box-shadow:1px 1px 1px #000,0 0 1px #0d0d0d;border:1px solid #000;height:16px;width:8px;border-radius:2px;background:#fff;cursor:pointer}input[type=range][data-v-1c07adff]:focus::-ms-fill-lower{background:#3071a9}input[type=range][data-v-1c07adff]:focus::-ms-fill-upper{background:#367ebd}.item[data-v-48bbd7cd]{width:100%}.itemContent[data-v-48bbd7cd],.itemLabel[data-v-48bbd7cd]{display:inline-block}.itemLabel[data-v-48bbd7cd]{width:30%;vertical-align:top}.displayBarFill[data-v-2a4ee906]{line-height:1em;white-space:nowrap;overflow:visible;text-align:center}.displayBarFill span[data-v-2a4ee906]{vertical-align:middle;margin-left:2px}span:hover div[data-v-4ea2a2b3]{display:inline-block}span div[data-v-4ea2a2b3]{margin-top:-5px;margin-left:4px;padding:3px;display:none;position:absolute} \ No newline at end of file + */.fab,.fad,.fal,.far,.fas,.ic,.mapIcon16,.uiIcon16,.uiIcon24{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.ic-lg{font-size:1.3333333333em;line-height:.75em;vertical-align:-.0667em}.ic-xs{font-size:.75em}.ic-sm{font-size:.875em}.ic-1x{font-size:1em}.ic-2x{font-size:2em}.ic-3x{font-size:3em}.ic-4x{font-size:4em}.ic-5x{font-size:5em}.ic-6x{font-size:6em}.ic-7x{font-size:7em}.ic-8x{font-size:8em}.ic-9x{font-size:9em}.ic-10x{font-size:10em}.ic-fw,.mapIcon16,.uiIcon16,.uiIcon24{text-align:center;width:1.25em}.ic-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.ic-ul>li{position:relative}.ic-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.ic-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.ic-pull-left{float:left}.ic-pull-right{float:right}.fab.ic-pull-left,.fal.ic-pull-left,.far.ic-pull-left,.fas.ic-pull-left,.ic-pull-left.mapIcon16,.ic-pull-left.uiIcon16,.ic-pull-left.uiIcon24,.ic.ic-pull-left{margin-right:.3em}.fab.ic-pull-right,.fal.ic-pull-right,.far.ic-pull-right,.fas.ic-pull-right,.ic-pull-right.mapIcon16,.ic-pull-right.uiIcon16,.ic-pull-right.uiIcon24,.ic.ic-pull-right{margin-left:.3em}.ic-spin{animation:fa-spin 2s linear infinite}.ic-pulse{animation:fa-spin 1s steps(8) infinite}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.ic-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-ms-transform:rotate(90deg);transform:rotate(90deg)}.ic-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-ms-transform:rotate(180deg);transform:rotate(180deg)}.ic-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-ms-transform:rotate(270deg);transform:rotate(270deg)}.ic-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-ms-transform:scaleX(-1);transform:scaleX(-1)}.ic-flip-vertical{-ms-transform:scaleY(-1);transform:scaleY(-1)}.ic-flip-both,.ic-flip-horizontal.ic-flip-vertical,.ic-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.ic-flip-both,.ic-flip-horizontal.ic-flip-vertical{-ms-transform:scale(-1);transform:scale(-1)}:root .ic-flip-both,:root .ic-flip-horizontal,:root .ic-flip-vertical,:root .ic-rotate-90,:root .ic-rotate-180,:root .ic-rotate-270{filter:none}.ic-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.ic-stack-1x,.ic-stack-2x{left:0;position:absolute;text-align:center;width:100%}.ic-stack-1x{line-height:inherit}.ic-stack-2x{font-size:2em}.ic-inverse{color:#fff}.ic-500px:before{content:""}.ic-accessible-icon:before{content:""}.ic-accusoft:before{content:""}.ic-acquisitions-incorporated:before{content:""}.ic-ad:before{content:""}.ic-address-book:before{content:""}.ic-address-card:before{content:""}.ic-adjust:before{content:""}.ic-adn:before{content:""}.ic-adversal:before{content:""}.ic-affiliatetheme:before{content:""}.ic-air-freshener:before{content:""}.ic-airbnb:before{content:""}.ic-algolia:before{content:""}.ic-align-center:before{content:""}.ic-align-justify:before{content:""}.ic-align-left:before{content:""}.ic-align-right:before{content:""}.ic-alipay:before{content:""}.ic-allergies:before{content:""}.ic-amazon:before{content:""}.ic-amazon-pay:before{content:""}.ic-ambulance:before{content:""}.ic-american-sign-language-interpreting:before{content:""}.ic-amilia:before{content:""}.ic-anchor:before{content:""}.ic-android:before{content:""}.ic-angellist:before{content:""}.ic-angle-double-down:before{content:""}.ic-angle-double-left:before{content:""}.ic-angle-double-right:before{content:""}.ic-angle-double-up:before{content:""}.ic-angle-down:before{content:""}.ic-angle-left:before{content:""}.ic-angle-right:before{content:""}.ic-angle-up:before{content:""}.ic-angry:before{content:""}.ic-angrycreative:before{content:""}.ic-angular:before{content:""}.ic-ankh:before{content:""}.ic-app-store:before{content:""}.ic-app-store-ios:before{content:""}.ic-apper:before{content:""}.ic-apple:before{content:""}.ic-apple-alt:before{content:""}.ic-apple-pay:before{content:""}.ic-archive:before{content:""}.ic-archway:before{content:""}.ic-arrow-alt-circle-down:before{content:""}.ic-arrow-alt-circle-left:before{content:""}.ic-arrow-alt-circle-right:before{content:""}.ic-arrow-alt-circle-up:before{content:""}.ic-arrow-circle-down:before{content:""}.ic-arrow-circle-left:before{content:""}.ic-arrow-circle-right:before{content:""}.ic-arrow-circle-up:before{content:""}.ic-arrow-down:before{content:""}.ic-arrow-left:before{content:""}.ic-arrow-right:before{content:""}.ic-arrow-up:before{content:""}.ic-arrows-alt:before{content:""}.ic-arrows-alt-h:before{content:""}.ic-arrows-alt-v:before{content:""}.ic-artstation:before{content:""}.ic-assistive-listening-systems:before{content:""}.ic-asterisk:before{content:""}.ic-asymmetrik:before{content:""}.ic-at:before{content:""}.ic-atlas:before{content:""}.ic-atlassian:before{content:""}.ic-atom:before{content:""}.ic-audible:before{content:""}.ic-audio-description:before{content:""}.ic-autoprefixer:before{content:""}.ic-avianex:before{content:""}.ic-aviato:before{content:""}.ic-award:before{content:""}.ic-aws:before{content:""}.ic-baby:before{content:""}.ic-baby-carriage:before{content:""}.ic-backspace:before{content:""}.ic-backward:before{content:""}.ic-bacon:before{content:""}.ic-bacteria:before{content:""}.ic-bacterium:before{content:""}.ic-bahai:before{content:""}.ic-balance-scale:before{content:""}.ic-balance-scale-left:before{content:""}.ic-balance-scale-right:before{content:""}.ic-ban:before{content:""}.ic-band-aid:before{content:""}.ic-bandcamp:before{content:""}.ic-barcode:before{content:""}.ic-bars:before{content:""}.ic-baseball-ball:before{content:""}.ic-basketball-ball:before{content:""}.ic-bath:before{content:""}.ic-battery-empty:before{content:""}.ic-battery-full:before{content:""}.ic-battery-half:before{content:""}.ic-battery-quarter:before{content:""}.ic-battery-three-quarters:before{content:""}.ic-battle-net:before{content:""}.ic-bed:before{content:""}.ic-beer:before{content:""}.ic-behance:before{content:""}.ic-behance-square:before{content:""}.ic-bell:before{content:""}.ic-bell-slash:before{content:""}.ic-bezier-curve:before{content:""}.ic-bible:before{content:""}.ic-bicycle:before{content:""}.ic-biking:before{content:""}.ic-bimobject:before{content:""}.ic-binoculars:before{content:""}.ic-biohazard:before{content:""}.ic-birthday-cake:before{content:""}.ic-bitbucket:before{content:""}.ic-bitcoin:before{content:""}.ic-bity:before{content:""}.ic-black-tie:before{content:""}.ic-blackberry:before{content:""}.ic-blender:before{content:""}.ic-blender-phone:before{content:""}.ic-blind:before{content:""}.ic-blog:before{content:""}.ic-blogger:before{content:""}.ic-blogger-b:before{content:""}.ic-bluetooth:before{content:""}.ic-bluetooth-b:before{content:""}.ic-bold:before{content:""}.ic-bolt:before{content:""}.ic-bomb:before{content:""}.ic-bone:before{content:""}.ic-bong:before{content:""}.ic-book:before{content:""}.ic-book-dead:before{content:""}.ic-book-medical:before{content:""}.ic-book-open:before{content:""}.ic-book-reader:before{content:""}.ic-bookmark:before{content:""}.ic-bootstrap:before{content:""}.ic-border-all:before{content:""}.ic-border-none:before{content:""}.ic-border-style:before{content:""}.ic-bowling-ball:before{content:""}.ic-box:before{content:""}.ic-box-open:before{content:""}.ic-box-tissue:before{content:""}.ic-boxes:before{content:""}.ic-braille:before{content:""}.ic-brain:before{content:""}.ic-bread-slice:before{content:""}.ic-briefcase:before{content:""}.ic-briefcase-medical:before{content:""}.ic-broadcast-tower:before{content:""}.ic-broom:before{content:""}.ic-brush:before{content:""}.ic-btc:before{content:""}.ic-buffer:before{content:""}.ic-bug:before{content:""}.ic-building:before{content:""}.ic-bullhorn:before{content:""}.ic-bullseye:before{content:""}.ic-burn:before{content:""}.ic-buromobelexperte:before{content:""}.ic-bus:before{content:""}.ic-bus-alt:before{content:""}.ic-business-time:before{content:""}.ic-buy-n-large:before{content:""}.ic-buysellads:before{content:""}.ic-calculator:before{content:""}.ic-calendar:before{content:""}.ic-calendar-alt:before{content:""}.ic-calendar-check:before{content:""}.ic-calendar-day:before{content:""}.ic-calendar-minus:before{content:""}.ic-calendar-plus:before{content:""}.ic-calendar-times:before{content:""}.ic-calendar-week:before{content:""}.ic-camera:before{content:""}.ic-camera-retro:before{content:""}.ic-campground:before{content:""}.ic-canadian-maple-leaf:before{content:""}.ic-candy-cane:before{content:""}.ic-cannabis:before{content:""}.ic-capsules:before{content:""}.ic-car:before{content:""}.ic-car-alt:before{content:""}.ic-car-battery:before{content:""}.ic-car-crash:before{content:""}.ic-car-side:before{content:""}.ic-caravan:before{content:""}.ic-caret-down:before{content:""}.ic-caret-left:before{content:""}.ic-caret-right:before{content:""}.ic-caret-square-down:before{content:""}.ic-caret-square-left:before{content:""}.ic-caret-square-right:before{content:""}.ic-caret-square-up:before{content:""}.ic-caret-up:before{content:""}.ic-carrot:before{content:""}.ic-cart-arrow-down:before{content:""}.ic-cart-plus:before{content:""}.ic-cash-register:before{content:""}.ic-cat:before{content:""}.ic-cc-amazon-pay:before{content:""}.ic-cc-amex:before{content:""}.ic-cc-apple-pay:before{content:""}.ic-cc-diners-club:before{content:""}.ic-cc-discover:before{content:""}.ic-cc-jcb:before{content:""}.ic-cc-mastercard:before{content:""}.ic-cc-paypal:before{content:""}.ic-cc-stripe:before{content:""}.ic-cc-visa:before{content:""}.ic-centercode:before{content:""}.ic-centos:before{content:""}.ic-certificate:before{content:""}.ic-chair:before{content:""}.ic-chalkboard:before{content:""}.ic-chalkboard-teacher:before{content:""}.ic-charging-station:before{content:""}.ic-chart-area:before{content:""}.ic-chart-bar:before{content:""}.ic-chart-line:before{content:""}.ic-chart-pie:before{content:""}.ic-check:before{content:""}.ic-check-circle:before{content:""}.ic-check-double:before{content:""}.ic-check-square:before{content:""}.ic-cheese:before{content:""}.ic-chess:before{content:""}.ic-chess-bishop:before{content:""}.ic-chess-board:before{content:""}.ic-chess-king:before{content:""}.ic-chess-knight:before{content:""}.ic-chess-pawn:before{content:""}.ic-chess-queen:before{content:""}.ic-chess-rook:before{content:""}.ic-chevron-circle-down:before{content:""}.ic-chevron-circle-left:before{content:""}.ic-chevron-circle-right:before{content:""}.ic-chevron-circle-up:before{content:""}.ic-chevron-down:before{content:""}.ic-chevron-left:before{content:""}.ic-chevron-right:before{content:""}.ic-chevron-up:before{content:""}.ic-child:before{content:""}.ic-chrome:before{content:""}.ic-chromecast:before{content:""}.ic-church:before{content:""}.ic-circle:before{content:""}.ic-circle-notch:before{content:""}.ic-city:before{content:""}.ic-clinic-medical:before{content:""}.ic-clipboard:before{content:""}.ic-clipboard-check:before{content:""}.ic-clipboard-list:before{content:""}.ic-clock:before{content:""}.ic-clone:before{content:""}.ic-closed-captioning:before{content:""}.ic-cloud:before{content:""}.ic-cloud-download-alt:before{content:""}.ic-cloud-meatball:before{content:""}.ic-cloud-moon:before{content:""}.ic-cloud-moon-rain:before{content:""}.ic-cloud-rain:before{content:""}.ic-cloud-showers-heavy:before{content:""}.ic-cloud-sun:before{content:""}.ic-cloud-sun-rain:before{content:""}.ic-cloud-upload-alt:before{content:""}.ic-cloudflare:before{content:""}.ic-cloudscale:before{content:""}.ic-cloudsmith:before{content:""}.ic-cloudversify:before{content:""}.ic-cocktail:before{content:""}.ic-code:before{content:""}.ic-code-branch:before{content:""}.ic-codepen:before{content:""}.ic-codiepie:before{content:""}.ic-coffee:before{content:""}.ic-cog:before{content:""}.ic-cogs:before{content:""}.ic-coins:before{content:""}.ic-columns:before{content:""}.ic-comment:before{content:""}.ic-comment-alt:before{content:""}.ic-comment-dollar:before{content:""}.ic-comment-dots:before{content:""}.ic-comment-medical:before{content:""}.ic-comment-slash:before{content:""}.ic-comments:before{content:""}.ic-comments-dollar:before{content:""}.ic-compact-disc:before{content:""}.ic-compass:before{content:""}.ic-compress:before{content:""}.ic-compress-alt:before{content:""}.ic-compress-arrows-alt:before{content:""}.ic-concierge-bell:before{content:""}.ic-confluence:before{content:""}.ic-connectdevelop:before{content:""}.ic-contao:before{content:""}.ic-cookie:before{content:""}.ic-cookie-bite:before{content:""}.ic-copy:before{content:""}.ic-copyright:before{content:""}.ic-cotton-bureau:before{content:""}.ic-couch:before{content:""}.ic-cpanel:before{content:""}.ic-creative-commons:before{content:""}.ic-creative-commons-by:before{content:""}.ic-creative-commons-nc:before{content:""}.ic-creative-commons-nc-eu:before{content:""}.ic-creative-commons-nc-jp:before{content:""}.ic-creative-commons-nd:before{content:""}.ic-creative-commons-pd:before{content:""}.ic-creative-commons-pd-alt:before{content:""}.ic-creative-commons-remix:before{content:""}.ic-creative-commons-sa:before{content:""}.ic-creative-commons-sampling:before{content:""}.ic-creative-commons-sampling-plus:before{content:""}.ic-creative-commons-share:before{content:""}.ic-creative-commons-zero:before{content:""}.ic-credit-card:before{content:""}.ic-critical-role:before{content:""}.ic-crop:before{content:""}.ic-crop-alt:before{content:""}.ic-cross:before{content:""}.ic-crosshairs:before{content:""}.ic-crow:before{content:""}.ic-crown:before{content:""}.ic-crutch:before{content:""}.ic-css3:before{content:""}.ic-css3-alt:before{content:""}.ic-cube:before{content:""}.ic-cubes:before{content:""}.ic-cut:before{content:""}.ic-cuttlefish:before{content:""}.ic-d-and-d:before{content:""}.ic-d-and-d-beyond:before{content:""}.ic-dailymotion:before{content:""}.ic-dashcube:before{content:""}.ic-database:before{content:""}.ic-deaf:before{content:""}.ic-deezer:before{content:""}.ic-delicious:before{content:""}.ic-democrat:before{content:""}.ic-deploydog:before{content:""}.ic-deskpro:before{content:""}.ic-desktop:before{content:""}.ic-dev:before{content:""}.ic-deviantart:before{content:""}.ic-dharmachakra:before{content:""}.ic-dhl:before{content:""}.ic-diagnoses:before{content:""}.ic-diaspora:before{content:""}.ic-dice:before{content:""}.ic-dice-d20:before{content:""}.ic-dice-d6:before{content:""}.ic-dice-five:before{content:""}.ic-dice-four:before{content:""}.ic-dice-one:before{content:""}.ic-dice-six:before{content:""}.ic-dice-three:before{content:""}.ic-dice-two:before{content:""}.ic-digg:before{content:""}.ic-digital-ocean:before{content:""}.ic-digital-tachograph:before{content:""}.ic-directions:before{content:""}.ic-discord:before{content:""}.ic-discourse:before{content:""}.ic-disease:before{content:""}.ic-divide:before{content:""}.ic-dizzy:before{content:""}.ic-dna:before{content:""}.ic-dochub:before{content:""}.ic-docker:before{content:""}.ic-dog:before{content:""}.ic-dollar-sign:before{content:""}.ic-dolly:before{content:""}.ic-dolly-flatbed:before{content:""}.ic-donate:before{content:""}.ic-door-closed:before{content:""}.ic-door-open:before{content:""}.ic-dot-circle:before{content:""}.ic-dove:before{content:""}.ic-download:before{content:""}.ic-draft2digital:before{content:""}.ic-drafting-compass:before{content:""}.ic-dragon:before{content:""}.ic-draw-polygon:before{content:""}.ic-dribbble:before{content:""}.ic-dribbble-square:before{content:""}.ic-dropbox:before{content:""}.ic-drum:before{content:""}.ic-drum-steelpan:before{content:""}.ic-drumstick-bite:before{content:""}.ic-drupal:before{content:""}.ic-dumbbell:before{content:""}.ic-dumpster:before{content:""}.ic-dumpster-fire:before{content:""}.ic-dungeon:before{content:""}.ic-dyalog:before{content:""}.ic-earlybirds:before{content:""}.ic-ebay:before{content:""}.ic-edge:before{content:""}.ic-edge-legacy:before{content:""}.ic-edit:before{content:""}.ic-egg:before{content:""}.ic-eject:before{content:""}.ic-elementor:before{content:""}.ic-ellipsis-h:before{content:""}.ic-ellipsis-v:before{content:""}.ic-ello:before{content:""}.ic-ember:before{content:""}.ic-empire:before{content:""}.ic-envelope:before{content:""}.ic-envelope-open:before{content:""}.ic-envelope-open-text:before{content:""}.ic-envelope-square:before{content:""}.ic-envira:before{content:""}.ic-equals:before{content:""}.ic-eraser:before{content:""}.ic-erlang:before{content:""}.ic-ethereum:before{content:""}.ic-ethernet:before{content:""}.ic-etsy:before{content:""}.ic-euro-sign:before{content:""}.ic-evernote:before{content:""}.ic-exchange-alt:before{content:""}.ic-exclamation:before{content:""}.ic-exclamation-circle:before{content:""}.ic-exclamation-triangle:before{content:""}.ic-expand:before{content:""}.ic-expand-alt:before{content:""}.ic-expand-arrows-alt:before{content:""}.ic-expeditedssl:before{content:""}.ic-external-link-alt:before{content:""}.ic-external-link-square-alt:before{content:""}.ic-eye:before{content:""}.ic-eye-dropper:before{content:""}.ic-eye-slash:before{content:""}.ic-facebook:before{content:""}.ic-facebook-f:before{content:""}.ic-facebook-messenger:before{content:""}.ic-facebook-square:before{content:""}.ic-fan:before{content:""}.ic-fantasy-flight-games:before{content:""}.ic-fast-backward:before{content:""}.ic-fast-forward:before{content:""}.ic-faucet:before{content:""}.ic-fax:before{content:""}.ic-feather:before{content:""}.ic-feather-alt:before{content:""}.ic-fedex:before{content:""}.ic-fedora:before{content:""}.ic-female:before{content:""}.ic-fighter-jet:before{content:""}.ic-figma:before{content:""}.ic-file:before{content:""}.ic-file-alt:before{content:""}.ic-file-archive:before{content:""}.ic-file-audio:before{content:""}.ic-file-code:before{content:""}.ic-file-contract:before{content:""}.ic-file-csv:before{content:""}.ic-file-download:before{content:""}.ic-file-excel:before{content:""}.ic-file-export:before{content:""}.ic-file-image:before{content:""}.ic-file-import:before{content:""}.ic-file-invoice:before{content:""}.ic-file-invoice-dollar:before{content:""}.ic-file-medical:before{content:""}.ic-file-medical-alt:before{content:""}.ic-file-pdf:before{content:""}.ic-file-powerpoint:before{content:""}.ic-file-prescription:before{content:""}.ic-file-signature:before{content:""}.ic-file-upload:before{content:""}.ic-file-video:before{content:""}.ic-file-word:before{content:""}.ic-fill:before{content:""}.ic-fill-drip:before{content:""}.ic-film:before{content:""}.ic-filter:before{content:""}.ic-fingerprint:before{content:""}.ic-fire:before{content:""}.ic-fire-alt:before{content:""}.ic-fire-extinguisher:before{content:""}.ic-firefox:before{content:""}.ic-firefox-browser:before{content:""}.ic-first-aid:before{content:""}.ic-first-order:before{content:""}.ic-first-order-alt:before{content:""}.ic-firstdraft:before{content:""}.ic-fish:before{content:""}.ic-fist-raised:before{content:""}.ic-flag:before{content:""}.ic-flag-checkered:before{content:""}.ic-flag-usa:before{content:""}.ic-flask:before{content:""}.ic-flickr:before{content:""}.ic-flipboard:before{content:""}.ic-flushed:before{content:""}.ic-fly:before{content:""}.ic-folder:before{content:""}.ic-folder-minus:before{content:""}.ic-folder-open:before{content:""}.ic-folder-plus:before{content:""}.ic-font:before{content:""}.ic-font-awesome:before{content:""}.ic-font-awesome-alt:before{content:""}.ic-font-awesome-flag:before{content:""}.ic-font-awesome-logo-full:before{content:""}.ic-fonticons:before{content:""}.ic-fonticons-fi:before{content:""}.ic-football-ball:before{content:""}.ic-fort-awesome:before{content:""}.ic-fort-awesome-alt:before{content:""}.ic-forumbee:before{content:""}.ic-forward:before{content:""}.ic-foursquare:before{content:""}.ic-free-code-camp:before{content:""}.ic-freebsd:before{content:""}.ic-frog:before{content:""}.ic-frown:before{content:""}.ic-frown-open:before{content:""}.ic-fulcrum:before{content:""}.ic-funnel-dollar:before{content:""}.ic-futbol:before{content:""}.ic-galactic-republic:before{content:""}.ic-galactic-senate:before{content:""}.ic-gamepad:before{content:""}.ic-gas-pump:before{content:""}.ic-gavel:before{content:""}.ic-gem:before{content:""}.ic-genderless:before{content:""}.ic-get-pocket:before{content:""}.ic-gg:before{content:""}.ic-gg-circle:before{content:""}.ic-ghost:before{content:""}.ic-gift:before{content:""}.ic-gifts:before{content:""}.ic-git:before{content:""}.ic-git-alt:before{content:""}.ic-git-square:before{content:""}.ic-github:before{content:""}.ic-github-alt:before{content:""}.ic-github-square:before{content:""}.ic-gitkraken:before{content:""}.ic-gitlab:before{content:""}.ic-gitter:before{content:""}.ic-glass-cheers:before{content:""}.ic-glass-martini:before{content:""}.ic-glass-martini-alt:before{content:""}.ic-glass-whiskey:before{content:""}.ic-glasses:before{content:""}.ic-glide:before{content:""}.ic-glide-g:before{content:""}.ic-globe:before{content:""}.ic-globe-africa:before{content:""}.ic-globe-americas:before{content:""}.ic-globe-asia:before{content:""}.ic-globe-europe:before{content:""}.ic-gofore:before{content:""}.ic-golf-ball:before{content:""}.ic-goodreads:before{content:""}.ic-goodreads-g:before{content:""}.ic-google:before{content:""}.ic-google-drive:before{content:""}.ic-google-pay:before{content:""}.ic-google-play:before{content:""}.ic-google-plus:before{content:""}.ic-google-plus-g:before{content:""}.ic-google-plus-square:before{content:""}.ic-google-wallet:before{content:""}.ic-gopuram:before{content:""}.ic-graduation-cap:before{content:""}.ic-gratipay:before{content:""}.ic-grav:before{content:""}.ic-greater-than:before{content:""}.ic-greater-than-equal:before{content:""}.ic-grimace:before{content:""}.ic-grin:before{content:""}.ic-grin-alt:before{content:""}.ic-grin-beam:before{content:""}.ic-grin-beam-sweat:before{content:""}.ic-grin-hearts:before{content:""}.ic-grin-squint:before{content:""}.ic-grin-squint-tears:before{content:""}.ic-grin-stars:before{content:""}.ic-grin-tears:before{content:""}.ic-grin-tongue:before{content:""}.ic-grin-tongue-squint:before{content:""}.ic-grin-tongue-wink:before{content:""}.ic-grin-wink:before{content:""}.ic-grip-horizontal:before{content:""}.ic-grip-lines:before{content:""}.ic-grip-lines-vertical:before{content:""}.ic-grip-vertical:before{content:""}.ic-gripfire:before{content:""}.ic-grunt:before{content:""}.ic-guilded:before{content:""}.ic-guitar:before{content:""}.ic-gulp:before{content:""}.ic-h-square:before{content:""}.ic-hacker-news:before{content:""}.ic-hacker-news-square:before{content:""}.ic-hackerrank:before{content:""}.ic-hamburger:before{content:""}.ic-hammer:before{content:""}.ic-hamsa:before{content:""}.ic-hand-holding:before{content:""}.ic-hand-holding-heart:before{content:""}.ic-hand-holding-medical:before{content:""}.ic-hand-holding-usd:before{content:""}.ic-hand-holding-water:before{content:""}.ic-hand-lizard:before{content:""}.ic-hand-middle-finger:before{content:""}.ic-hand-paper:before{content:""}.ic-hand-peace:before{content:""}.ic-hand-point-down:before{content:""}.ic-hand-point-left:before{content:""}.ic-hand-point-right:before{content:""}.ic-hand-point-up:before{content:""}.ic-hand-pointer:before{content:""}.ic-hand-rock:before{content:""}.ic-hand-scissors:before{content:""}.ic-hand-sparkles:before{content:""}.ic-hand-spock:before{content:""}.ic-hands:before{content:""}.ic-hands-helping:before{content:""}.ic-hands-wash:before{content:""}.ic-handshake:before{content:""}.ic-handshake-alt-slash:before{content:""}.ic-handshake-slash:before{content:""}.ic-hanukiah:before{content:""}.ic-hard-hat:before{content:""}.ic-hashtag:before{content:""}.ic-hat-cowboy:before{content:""}.ic-hat-cowboy-side:before{content:""}.ic-hat-wizard:before{content:""}.ic-hdd:before{content:""}.ic-head-side-cough:before{content:""}.ic-head-side-cough-slash:before{content:""}.ic-head-side-mask:before{content:""}.ic-head-side-virus:before{content:""}.ic-heading:before{content:""}.ic-headphones:before{content:""}.ic-headphones-alt:before{content:""}.ic-headset:before{content:""}.ic-heart:before{content:""}.ic-heart-broken:before{content:""}.ic-heartbeat:before{content:""}.ic-helicopter:before{content:""}.ic-highlighter:before{content:""}.ic-hiking:before{content:""}.ic-hippo:before{content:""}.ic-hips:before{content:""}.ic-hire-a-helper:before{content:""}.ic-history:before{content:""}.ic-hive:before{content:""}.ic-hockey-puck:before{content:""}.ic-holly-berry:before{content:""}.ic-home:before{content:""}.ic-hooli:before{content:""}.ic-hornbill:before{content:""}.ic-horse:before{content:""}.ic-horse-head:before{content:""}.ic-hospital:before{content:""}.ic-hospital-alt:before{content:""}.ic-hospital-symbol:before{content:""}.ic-hospital-user:before{content:""}.ic-hot-tub:before{content:""}.ic-hotdog:before{content:""}.ic-hotel:before{content:""}.ic-hotjar:before{content:""}.ic-hourglass:before{content:""}.ic-hourglass-end:before{content:""}.ic-hourglass-half:before{content:""}.ic-hourglass-start:before{content:""}.ic-house-damage:before{content:""}.ic-house-user:before{content:""}.ic-houzz:before{content:""}.ic-hryvnia:before{content:""}.ic-html5:before{content:""}.ic-hubspot:before{content:""}.ic-i-cursor:before{content:""}.ic-ice-cream:before{content:""}.ic-icicles:before{content:""}.ic-icons:before{content:""}.ic-id-badge:before{content:""}.ic-id-card:before{content:""}.ic-id-card-alt:before{content:""}.ic-ideal:before{content:""}.ic-igloo:before{content:""}.ic-image:before{content:""}.ic-images:before{content:""}.ic-imdb:before{content:""}.ic-inbox:before{content:""}.ic-indent:before{content:""}.ic-industry:before{content:""}.ic-infinity:before{content:""}.ic-info:before{content:""}.ic-info-circle:before{content:""}.ic-innosoft:before{content:""}.ic-instagram:before{content:""}.ic-instagram-square:before{content:""}.ic-instalod:before{content:""}.ic-intercom:before{content:""}.ic-internet-explorer:before{content:""}.ic-invision:before{content:""}.ic-ioxhost:before{content:""}.ic-italic:before{content:""}.ic-itch-io:before{content:""}.ic-itunes:before{content:""}.ic-itunes-note:before{content:""}.ic-java:before{content:""}.ic-jedi:before{content:""}.ic-jedi-order:before{content:""}.ic-jenkins:before{content:""}.ic-jira:before{content:""}.ic-joget:before{content:""}.ic-joint:before{content:""}.ic-joomla:before{content:""}.ic-journal-whills:before{content:""}.ic-js:before{content:""}.ic-js-square:before{content:""}.ic-jsfiddle:before{content:""}.ic-kaaba:before{content:""}.ic-kaggle:before{content:""}.ic-key:before{content:""}.ic-keybase:before{content:""}.ic-keyboard:before{content:""}.ic-keycdn:before{content:""}.ic-khanda:before{content:""}.ic-kickstarter:before{content:""}.ic-kickstarter-k:before{content:""}.ic-kiss:before{content:""}.ic-kiss-beam:before{content:""}.ic-kiss-wink-heart:before{content:""}.ic-kiwi-bird:before{content:""}.ic-korvue:before{content:""}.ic-landmark:before{content:""}.ic-language:before{content:""}.ic-laptop:before{content:""}.ic-laptop-code:before{content:""}.ic-laptop-house:before{content:""}.ic-laptop-medical:before{content:""}.ic-laravel:before{content:""}.ic-lastfm:before{content:""}.ic-lastfm-square:before{content:""}.ic-laugh:before{content:""}.ic-laugh-beam:before{content:""}.ic-laugh-squint:before{content:""}.ic-laugh-wink:before{content:""}.ic-layer-group:before{content:""}.ic-leaf:before{content:""}.ic-leanpub:before{content:""}.ic-lemon:before{content:""}.ic-less:before{content:""}.ic-less-than:before{content:""}.ic-less-than-equal:before{content:""}.ic-level-down-alt:before{content:""}.ic-level-up-alt:before{content:""}.ic-life-ring:before{content:""}.ic-lightbulb:before{content:""}.ic-line:before{content:""}.ic-link:before{content:""}.ic-linkedin:before{content:""}.ic-linkedin-in:before{content:""}.ic-linode:before{content:""}.ic-linux:before{content:""}.ic-lira-sign:before{content:""}.ic-list:before{content:""}.ic-list-alt:before{content:""}.ic-list-ol:before{content:""}.ic-list-ul:before{content:""}.ic-location-arrow:before{content:""}.ic-lock:before{content:""}.ic-lock-open:before{content:""}.ic-long-arrow-alt-down:before{content:""}.ic-long-arrow-alt-left:before{content:""}.ic-long-arrow-alt-right:before{content:""}.ic-long-arrow-alt-up:before{content:""}.ic-low-vision:before{content:""}.ic-luggage-cart:before{content:""}.ic-lungs:before{content:""}.ic-lungs-virus:before{content:""}.ic-lyft:before{content:""}.ic-magento:before{content:""}.ic-magic:before{content:""}.ic-magnet:before{content:""}.ic-mail-bulk:before{content:""}.ic-mailchimp:before{content:""}.ic-male:before{content:""}.ic-mandalorian:before{content:""}.ic-map:before{content:""}.ic-map-marked:before{content:""}.ic-map-marked-alt:before{content:""}.ic-map-marker:before{content:""}.ic-map-marker-alt:before{content:""}.ic-map-pin:before{content:""}.ic-map-signs:before{content:""}.ic-markdown:before{content:""}.ic-marker:before{content:""}.ic-mars:before{content:""}.ic-mars-double:before{content:""}.ic-mars-stroke:before{content:""}.ic-mars-stroke-h:before{content:""}.ic-mars-stroke-v:before{content:""}.ic-mask:before{content:""}.ic-mastodon:before{content:""}.ic-maxcdn:before{content:""}.ic-mdb:before{content:""}.ic-medal:before{content:""}.ic-medapps:before{content:""}.ic-medium:before{content:""}.ic-medium-m:before{content:""}.ic-medkit:before{content:""}.ic-medrt:before{content:""}.ic-meetup:before{content:""}.ic-megaport:before{content:""}.ic-meh:before{content:""}.ic-meh-blank:before{content:""}.ic-meh-rolling-eyes:before{content:""}.ic-memory:before{content:""}.ic-mendeley:before{content:""}.ic-menorah:before{content:""}.ic-mercury:before{content:""}.ic-meteor:before{content:""}.ic-microblog:before{content:""}.ic-microchip:before{content:""}.ic-microphone:before{content:""}.ic-microphone-alt:before{content:""}.ic-microphone-alt-slash:before{content:""}.ic-microphone-slash:before{content:""}.ic-microscope:before{content:""}.ic-microsoft:before{content:""}.ic-minus:before{content:""}.ic-minus-circle:before{content:""}.ic-minus-square:before{content:""}.ic-mitten:before{content:""}.ic-mix:before{content:""}.ic-mixcloud:before{content:""}.ic-mixer:before{content:""}.ic-mizuni:before{content:""}.ic-mobile:before{content:""}.ic-mobile-alt:before{content:""}.ic-modx:before{content:""}.ic-monero:before{content:""}.ic-money-bill:before{content:""}.ic-money-bill-alt:before{content:""}.ic-money-bill-wave:before{content:""}.ic-money-bill-wave-alt:before{content:""}.ic-money-check:before{content:""}.ic-money-check-alt:before{content:""}.ic-monument:before{content:""}.ic-moon:before{content:""}.ic-mortar-pestle:before{content:""}.ic-mosque:before{content:""}.ic-motorcycle:before{content:""}.ic-mountain:before{content:""}.ic-mouse:before{content:""}.ic-mouse-pointer:before{content:""}.ic-mug-hot:before{content:""}.ic-music:before{content:""}.ic-napster:before{content:""}.ic-neos:before{content:""}.ic-network-wired:before{content:""}.ic-neuter:before{content:""}.ic-newspaper:before{content:""}.ic-nimblr:before{content:""}.ic-node:before{content:""}.ic-node-js:before{content:""}.ic-not-equal:before{content:""}.ic-notes-medical:before{content:""}.ic-npm:before{content:""}.ic-ns8:before{content:""}.ic-nutritionix:before{content:""}.ic-object-group:before{content:""}.ic-object-ungroup:before{content:""}.ic-octopus-deploy:before{content:""}.ic-odnoklassniki:before{content:""}.ic-odnoklassniki-square:before{content:""}.ic-oil-can:before{content:""}.ic-old-republic:before{content:""}.ic-om:before{content:""}.ic-opencart:before{content:""}.ic-openid:before{content:""}.ic-opera:before{content:""}.ic-optin-monster:before{content:""}.ic-orcid:before{content:""}.ic-osi:before{content:""}.ic-otter:before{content:""}.ic-outdent:before{content:""}.ic-page4:before{content:""}.ic-pagelines:before{content:""}.ic-pager:before{content:""}.ic-paint-brush:before{content:""}.ic-paint-roller:before{content:""}.ic-palette:before{content:""}.ic-palfed:before{content:""}.ic-pallet:before{content:""}.ic-paper-plane:before{content:""}.ic-paperclip:before{content:""}.ic-parachute-box:before{content:""}.ic-paragraph:before{content:""}.ic-parking:before{content:""}.ic-passport:before{content:""}.ic-pastafarianism:before{content:""}.ic-paste:before{content:""}.ic-patreon:before{content:""}.ic-pause:before{content:""}.ic-pause-circle:before{content:""}.ic-paw:before{content:""}.ic-paypal:before{content:""}.ic-peace:before{content:""}.ic-pen:before{content:""}.ic-pen-alt:before{content:""}.ic-pen-fancy:before{content:""}.ic-pen-nib:before{content:""}.ic-pen-square:before{content:""}.ic-pencil-alt:before{content:""}.ic-pencil-ruler:before{content:""}.ic-penny-arcade:before{content:""}.ic-people-arrows:before{content:""}.ic-people-carry:before{content:""}.ic-pepper-hot:before{content:""}.ic-perbyte:before{content:""}.ic-percent:before{content:""}.ic-percentage:before{content:""}.ic-periscope:before{content:""}.ic-person-booth:before{content:""}.ic-phabricator:before{content:""}.ic-phoenix-framework:before{content:""}.ic-phoenix-squadron:before{content:""}.ic-phone:before{content:""}.ic-phone-alt:before{content:""}.ic-phone-slash:before{content:""}.ic-phone-square:before{content:""}.ic-phone-square-alt:before{content:""}.ic-phone-volume:before{content:""}.ic-photo-video:before{content:""}.ic-php:before{content:""}.ic-pied-piper:before{content:""}.ic-pied-piper-alt:before{content:""}.ic-pied-piper-hat:before{content:""}.ic-pied-piper-pp:before{content:""}.ic-pied-piper-square:before{content:""}.ic-piggy-bank:before{content:""}.ic-pills:before{content:""}.ic-pinterest:before{content:""}.ic-pinterest-p:before{content:""}.ic-pinterest-square:before{content:""}.ic-pizza-slice:before{content:""}.ic-place-of-worship:before{content:""}.ic-plane:before{content:""}.ic-plane-arrival:before{content:""}.ic-plane-departure:before{content:""}.ic-plane-slash:before{content:""}.ic-play:before{content:""}.ic-play-circle:before{content:""}.ic-playstation:before{content:""}.ic-plug:before{content:""}.ic-plus:before{content:""}.ic-plus-circle:before{content:""}.ic-plus-square:before{content:""}.ic-podcast:before{content:""}.ic-poll:before{content:""}.ic-poll-h:before{content:""}.ic-poo:before{content:""}.ic-poo-storm:before{content:""}.ic-poop:before{content:""}.ic-portrait:before{content:""}.ic-pound-sign:before{content:""}.ic-power-off:before{content:""}.ic-pray:before{content:""}.ic-praying-hands:before{content:""}.ic-prescription:before{content:""}.ic-prescription-bottle:before{content:""}.ic-prescription-bottle-alt:before{content:""}.ic-print:before{content:""}.ic-procedures:before{content:""}.ic-product-hunt:before{content:""}.ic-project-diagram:before{content:""}.ic-pump-medical:before{content:""}.ic-pump-soap:before{content:""}.ic-pushed:before{content:""}.ic-puzzle-piece:before{content:""}.ic-python:before{content:""}.ic-qq:before{content:""}.ic-qrcode:before{content:""}.ic-question:before{content:""}.ic-question-circle:before{content:""}.ic-quidditch:before{content:""}.ic-quinscape:before{content:""}.ic-quora:before{content:""}.ic-quote-left:before{content:""}.ic-quote-right:before{content:""}.ic-quran:before{content:""}.ic-r-project:before{content:""}.ic-radiation:before{content:""}.ic-radiation-alt:before{content:""}.ic-rainbow:before{content:""}.ic-random:before{content:""}.ic-raspberry-pi:before{content:""}.ic-ravelry:before{content:""}.ic-react:before{content:""}.ic-reacteurope:before{content:""}.ic-readme:before{content:""}.ic-rebel:before{content:""}.ic-receipt:before{content:""}.ic-record-vinyl:before{content:""}.ic-recycle:before{content:""}.ic-red-river:before{content:""}.ic-reddit:before{content:""}.ic-reddit-alien:before{content:""}.ic-reddit-square:before{content:""}.ic-redhat:before{content:""}.ic-redo:before{content:""}.ic-redo-alt:before{content:""}.ic-registered:before{content:""}.ic-remove-format:before{content:""}.ic-renren:before{content:""}.ic-reply:before{content:""}.ic-reply-all:before{content:""}.ic-replyd:before{content:""}.ic-republican:before{content:""}.ic-researchgate:before{content:""}.ic-resolving:before{content:""}.ic-restroom:before{content:""}.ic-retweet:before{content:""}.ic-rev:before{content:""}.ic-ribbon:before{content:""}.ic-ring:before{content:""}.ic-road:before{content:""}.ic-robot:before{content:""}.ic-rocket:before{content:""}.ic-rocketchat:before{content:""}.ic-rockrms:before{content:""}.ic-route:before{content:""}.ic-rss:before{content:""}.ic-rss-square:before{content:""}.ic-ruble-sign:before{content:""}.ic-ruler:before{content:""}.ic-ruler-combined:before{content:""}.ic-ruler-horizontal:before{content:""}.ic-ruler-vertical:before{content:""}.ic-running:before{content:""}.ic-rupee-sign:before{content:""}.ic-rust:before{content:""}.ic-sad-cry:before{content:""}.ic-sad-tear:before{content:""}.ic-safari:before{content:""}.ic-salesforce:before{content:""}.ic-sass:before{content:""}.ic-satellite:before{content:""}.ic-satellite-dish:before{content:""}.ic-save:before{content:""}.ic-schlix:before{content:""}.ic-school:before{content:""}.ic-screwdriver:before{content:""}.ic-scribd:before{content:""}.ic-scroll:before{content:""}.ic-sd-card:before{content:""}.ic-search:before{content:""}.ic-search-dollar:before{content:""}.ic-search-location:before{content:""}.ic-search-minus:before{content:""}.ic-search-plus:before{content:""}.ic-searchengin:before{content:""}.ic-seedling:before{content:""}.ic-sellcast:before{content:""}.ic-sellsy:before{content:""}.ic-server:before{content:""}.ic-servicestack:before{content:""}.ic-shapes:before{content:""}.ic-share:before{content:""}.ic-share-alt:before{content:""}.ic-share-alt-square:before{content:""}.ic-share-square:before{content:""}.ic-shekel-sign:before{content:""}.ic-shield-alt:before{content:""}.ic-shield-virus:before{content:""}.ic-ship:before{content:""}.ic-shipping-fast:before{content:""}.ic-shirtsinbulk:before{content:""}.ic-shoe-prints:before{content:""}.ic-shopify:before{content:""}.ic-shopping-bag:before{content:""}.ic-shopping-basket:before{content:""}.ic-shopping-cart:before{content:""}.ic-shopware:before{content:""}.ic-shower:before{content:""}.ic-shuttle-van:before{content:""}.ic-sign:before{content:""}.ic-sign-in-alt:before{content:""}.ic-sign-language:before{content:""}.ic-sign-out-alt:before{content:""}.ic-signal:before{content:""}.ic-signature:before{content:""}.ic-sim-card:before{content:""}.ic-simplybuilt:before{content:""}.ic-sink:before{content:""}.ic-sistrix:before{content:""}.ic-sitemap:before{content:""}.ic-sith:before{content:""}.ic-skating:before{content:""}.ic-sketch:before{content:""}.ic-skiing:before{content:""}.ic-skiing-nordic:before{content:""}.ic-skull:before{content:""}.ic-skull-crossbones:before{content:""}.ic-skyatlas:before{content:""}.ic-skype:before{content:""}.ic-slack:before{content:""}.ic-slack-hash:before{content:""}.ic-slash:before{content:""}.ic-sleigh:before{content:""}.ic-sliders-h:before{content:""}.ic-slideshare:before{content:""}.ic-smile:before{content:""}.ic-smile-beam:before{content:""}.ic-smile-wink:before{content:""}.ic-smog:before{content:""}.ic-smoking:before{content:""}.ic-smoking-ban:before{content:""}.ic-sms:before{content:""}.ic-snapchat:before{content:""}.ic-snapchat-ghost:before{content:""}.ic-snapchat-square:before{content:""}.ic-snowboarding:before{content:""}.ic-snowflake:before{content:""}.ic-snowman:before{content:""}.ic-snowplow:before{content:""}.ic-soap:before{content:""}.ic-socks:before{content:""}.ic-solar-panel:before{content:""}.ic-sort:before{content:""}.ic-sort-alpha-down:before{content:""}.ic-sort-alpha-down-alt:before{content:""}.ic-sort-alpha-up:before{content:""}.ic-sort-alpha-up-alt:before{content:""}.ic-sort-amount-down:before{content:""}.ic-sort-amount-down-alt:before{content:""}.ic-sort-amount-up:before{content:""}.ic-sort-amount-up-alt:before{content:""}.ic-sort-down:before{content:""}.ic-sort-numeric-down:before{content:""}.ic-sort-numeric-down-alt:before{content:""}.ic-sort-numeric-up:before{content:""}.ic-sort-numeric-up-alt:before{content:""}.ic-sort-up:before{content:""}.ic-soundcloud:before{content:""}.ic-sourcetree:before{content:""}.ic-spa:before{content:""}.ic-space-shuttle:before{content:""}.ic-speakap:before{content:""}.ic-speaker-deck:before{content:""}.ic-spell-check:before{content:""}.ic-spider:before{content:""}.ic-spinner:before{content:""}.ic-splotch:before{content:""}.ic-spotify:before{content:""}.ic-spray-can:before{content:""}.ic-square:before{content:""}.ic-square-full:before{content:""}.ic-square-root-alt:before{content:""}.ic-squarespace:before{content:""}.ic-stack-exchange:before{content:""}.ic-stack-overflow:before{content:""}.ic-stackpath:before{content:""}.ic-stamp:before{content:""}.ic-star:before{content:""}.ic-star-and-crescent:before{content:""}.ic-star-half:before{content:""}.ic-star-half-alt:before{content:""}.ic-star-of-david:before{content:""}.ic-star-of-life:before{content:""}.ic-staylinked:before{content:""}.ic-steam:before{content:""}.ic-steam-square:before{content:""}.ic-steam-symbol:before{content:""}.ic-step-backward:before{content:""}.ic-step-forward:before{content:""}.ic-stethoscope:before{content:""}.ic-sticker-mule:before{content:""}.ic-sticky-note:before{content:""}.ic-stop:before{content:""}.ic-stop-circle:before{content:""}.ic-stopwatch:before{content:""}.ic-stopwatch-20:before{content:""}.ic-store:before{content:""}.ic-store-alt:before{content:""}.ic-store-alt-slash:before{content:""}.ic-store-slash:before{content:""}.ic-strava:before{content:""}.ic-stream:before{content:""}.ic-street-view:before{content:""}.ic-strikethrough:before{content:""}.ic-stripe:before{content:""}.ic-stripe-s:before{content:""}.ic-stroopwafel:before{content:""}.ic-studiovinari:before{content:""}.ic-stumbleupon:before{content:""}.ic-stumbleupon-circle:before{content:""}.ic-subscript:before{content:""}.ic-subway:before{content:""}.ic-suitcase:before{content:""}.ic-suitcase-rolling:before{content:""}.ic-sun:before{content:""}.ic-superpowers:before{content:""}.ic-superscript:before{content:""}.ic-supple:before{content:""}.ic-surprise:before{content:""}.ic-suse:before{content:""}.ic-swatchbook:before{content:""}.ic-swift:before{content:""}.ic-swimmer:before{content:""}.ic-swimming-pool:before{content:""}.ic-symfony:before{content:""}.ic-synagogue:before{content:""}.ic-sync:before{content:""}.ic-sync-alt:before{content:""}.ic-syringe:before{content:""}.ic-table:before{content:""}.ic-table-tennis:before{content:""}.ic-tablet:before{content:""}.ic-tablet-alt:before{content:""}.ic-tablets:before{content:""}.ic-tachometer-alt:before{content:""}.ic-tag:before{content:""}.ic-tags:before{content:""}.ic-tape:before{content:""}.ic-tasks:before{content:""}.ic-taxi:before{content:""}.ic-teamspeak:before{content:""}.ic-teeth:before{content:""}.ic-teeth-open:before{content:""}.ic-telegram:before{content:""}.ic-telegram-plane:before{content:""}.ic-temperature-high:before{content:""}.ic-temperature-low:before{content:""}.ic-tencent-weibo:before{content:""}.ic-tenge:before{content:""}.ic-terminal:before{content:""}.ic-text-height:before{content:""}.ic-text-width:before{content:""}.ic-th:before{content:""}.ic-th-large:before{content:""}.ic-th-list:before{content:""}.ic-the-red-yeti:before{content:""}.ic-theater-masks:before{content:""}.ic-themeco:before{content:""}.ic-themeisle:before{content:""}.ic-thermometer:before{content:""}.ic-thermometer-empty:before{content:""}.ic-thermometer-full:before{content:""}.ic-thermometer-half:before{content:""}.ic-thermometer-quarter:before{content:""}.ic-thermometer-three-quarters:before{content:""}.ic-think-peaks:before{content:""}.ic-thumbs-down:before{content:""}.ic-thumbs-up:before{content:""}.ic-thumbtack:before{content:""}.ic-ticket-alt:before{content:""}.ic-tiktok:before{content:""}.ic-times:before{content:""}.ic-times-circle:before{content:""}.ic-tint:before{content:""}.ic-tint-slash:before{content:""}.ic-tired:before{content:""}.ic-toggle-off:before{content:""}.ic-toggle-on:before{content:""}.ic-toilet:before{content:""}.ic-toilet-paper:before{content:""}.ic-toilet-paper-slash:before{content:""}.ic-toolbox:before{content:""}.ic-tools:before{content:""}.ic-tooth:before{content:""}.ic-torah:before{content:""}.ic-torii-gate:before{content:""}.ic-tractor:before{content:""}.ic-trade-federation:before{content:""}.ic-trademark:before{content:""}.ic-traffic-light:before{content:""}.ic-trailer:before{content:""}.ic-train:before{content:""}.ic-tram:before{content:""}.ic-transgender:before{content:""}.ic-transgender-alt:before{content:""}.ic-trash:before{content:""}.ic-trash-alt:before{content:""}.ic-trash-restore:before{content:""}.ic-trash-restore-alt:before{content:""}.ic-tree:before{content:""}.ic-trello:before{content:""}.ic-tripadvisor:before{content:""}.ic-trophy:before{content:""}.ic-truck:before{content:""}.ic-truck-loading:before{content:""}.ic-truck-monster:before{content:""}.ic-truck-moving:before{content:""}.ic-truck-pickup:before{content:""}.ic-tshirt:before{content:""}.ic-tty:before{content:""}.ic-tumblr:before{content:""}.ic-tumblr-square:before{content:""}.ic-tv:before{content:""}.ic-twitch:before{content:""}.ic-twitter:before{content:""}.ic-twitter-square:before{content:""}.ic-typo3:before{content:""}.ic-uber:before{content:""}.ic-ubuntu:before{content:""}.ic-uikit:before{content:""}.ic-umbraco:before{content:""}.ic-umbrella:before{content:""}.ic-umbrella-beach:before{content:""}.ic-uncharted:before{content:""}.ic-underline:before{content:""}.ic-undo:before{content:""}.ic-undo-alt:before{content:""}.ic-uniregistry:before{content:""}.ic-unity:before{content:""}.ic-universal-access:before{content:""}.ic-university:before{content:""}.ic-unlink:before{content:""}.ic-unlock:before{content:""}.ic-unlock-alt:before{content:""}.ic-unsplash:before{content:""}.ic-untappd:before{content:""}.ic-upload:before{content:""}.ic-ups:before{content:""}.ic-usb:before{content:""}.ic-user:before{content:""}.ic-user-alt:before{content:""}.ic-user-alt-slash:before{content:""}.ic-user-astronaut:before{content:""}.ic-user-check:before{content:""}.ic-user-circle:before{content:""}.ic-user-clock:before{content:""}.ic-user-cog:before{content:""}.ic-user-edit:before{content:""}.ic-user-friends:before{content:""}.ic-user-graduate:before{content:""}.ic-user-injured:before{content:""}.ic-user-lock:before{content:""}.ic-user-md:before{content:""}.ic-user-minus:before{content:""}.ic-user-ninja:before{content:""}.ic-user-nurse:before{content:""}.ic-user-plus:before{content:""}.ic-user-secret:before{content:""}.ic-user-shield:before{content:""}.ic-user-slash:before{content:""}.ic-user-tag:before{content:""}.ic-user-tie:before{content:""}.ic-user-times:before{content:""}.ic-users:before{content:""}.ic-users-cog:before{content:""}.ic-users-slash:before{content:""}.ic-usps:before{content:""}.ic-ussunnah:before{content:""}.ic-utensil-spoon:before{content:""}.ic-utensils:before{content:""}.ic-vaadin:before{content:""}.ic-vector-square:before{content:""}.ic-venus:before{content:""}.ic-venus-double:before{content:""}.ic-venus-mars:before{content:""}.ic-vest:before{content:""}.ic-vest-patches:before{content:""}.ic-viacoin:before{content:""}.ic-viadeo:before{content:""}.ic-viadeo-square:before{content:""}.ic-vial:before{content:""}.ic-vials:before{content:""}.ic-viber:before{content:""}.ic-video:before{content:""}.ic-video-slash:before{content:""}.ic-vihara:before{content:""}.ic-vimeo:before{content:""}.ic-vimeo-square:before{content:""}.ic-vimeo-v:before{content:""}.ic-vine:before{content:""}.ic-virus:before{content:""}.ic-virus-slash:before{content:""}.ic-viruses:before{content:""}.ic-vk:before{content:""}.ic-vnv:before{content:""}.ic-voicemail:before{content:""}.ic-volleyball-ball:before{content:""}.ic-volume-down:before{content:""}.ic-volume-mute:before{content:""}.ic-volume-off:before{content:""}.ic-volume-up:before{content:""}.ic-vote-yea:before{content:""}.ic-vr-cardboard:before{content:""}.ic-vuejs:before{content:""}.ic-walking:before{content:""}.ic-wallet:before{content:""}.ic-warehouse:before{content:""}.ic-watchman-monitoring:before{content:""}.ic-water:before{content:""}.ic-wave-square:before{content:""}.ic-waze:before{content:""}.ic-weebly:before{content:""}.ic-weibo:before{content:""}.ic-weight:before{content:""}.ic-weight-hanging:before{content:""}.ic-weixin:before{content:""}.ic-whatsapp:before{content:""}.ic-whatsapp-square:before{content:""}.ic-wheelchair:before{content:""}.ic-whmcs:before{content:""}.ic-wifi:before{content:""}.ic-wikipedia-w:before{content:""}.ic-wind:before{content:""}.ic-window-close:before{content:""}.ic-window-maximize:before{content:""}.ic-window-minimize:before{content:""}.ic-window-restore:before{content:""}.ic-windows:before{content:""}.ic-wine-bottle:before{content:""}.ic-wine-glass:before{content:""}.ic-wine-glass-alt:before{content:""}.ic-wix:before{content:""}.ic-wizards-of-the-coast:before{content:""}.ic-wodu:before{content:""}.ic-wolf-pack-battalion:before{content:""}.ic-won-sign:before{content:""}.ic-wordpress:before{content:""}.ic-wordpress-simple:before{content:""}.ic-wpbeginner:before{content:""}.ic-wpexplorer:before{content:""}.ic-wpforms:before{content:""}.ic-wpressr:before{content:""}.ic-wrench:before{content:""}.ic-x-ray:before{content:""}.ic-xbox:before{content:""}.ic-xing:before{content:""}.ic-xing-square:before{content:""}.ic-y-combinator:before{content:""}.ic-yahoo:before{content:""}.ic-yammer:before{content:""}.ic-yandex:before{content:""}.ic-yandex-international:before{content:""}.ic-yarn:before{content:""}.ic-yelp:before{content:""}.ic-yen-sign:before{content:""}.ic-yin-yang:before{content:""}.ic-yoast:before{content:""}.ic-youtube:before{content:""}.ic-youtube-square:before{content:""}.ic-zhihu:before{content:""}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:Font Awesome\ 5 Free;font-style:normal;font-weight:900;src:url(data:font/woff;base64,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) format("woff")}.fa,.fas,.mapIcon16,.uiIcon16,.uiIcon24{font-family:Font Awesome\ 5 Free;font-weight:900}.mapIcon16,.uiIcon16,.uiIcon24{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;font-style:normal;font-variant:normal;font-weight:400;line-height:1;font-size:12px;padding:2px}.uiIcon24{font-size:24px}.uiIcon24.uiStatusIcon:before{content:""}.uiIcon24.uiStatusIcon.uiStatusGood{color:#080}.uiIcon24.uiStatusIcon.uiStatusAverage{color:#afa404}.uiIcon24.uiStatusIcon.uiStatusBad{color:#c20000}.icon-carat-1-n.mapIcon16:before,.icon-carat-1-n.uiIcon24:before,.uiIcon16.icon-carat-1-n:before{content:""}.icon-carat-1-ne.mapIcon16,.icon-carat-1-ne.uiIcon24,.uiIcon16.icon-carat-1-ne{-ms-transform:rotate(45deg);transform:rotate(45deg)}.icon-carat-1-ne.mapIcon16:before,.icon-carat-1-ne.uiIcon24:before,.uiIcon16.icon-carat-1-ne:before{content:""}.icon-carat-1-e.mapIcon16:before,.icon-carat-1-e.uiIcon24:before,.uiIcon16.icon-carat-1-e:before{content:""}.icon-carat-1-se.mapIcon16,.icon-carat-1-se.uiIcon24,.uiIcon16.icon-carat-1-se{-ms-transform:rotate(45deg);transform:rotate(45deg)}.icon-carat-1-se.mapIcon16:before,.icon-carat-1-se.uiIcon24:before,.uiIcon16.icon-carat-1-se:before{content:""}.icon-carat-1-s.mapIcon16:before,.icon-carat-1-s.uiIcon24:before,.uiIcon16.icon-carat-1-s:before{content:""}.icon-carat-1-sw.mapIcon16,.icon-carat-1-sw.uiIcon24,.uiIcon16.icon-carat-1-sw{-ms-transform:rotate(45deg);transform:rotate(45deg)}.icon-carat-1-sw.mapIcon16:before,.icon-carat-1-sw.uiIcon24:before,.uiIcon16.icon-carat-1-sw:before{content:""}.icon-carat-1-w.mapIcon16:before,.icon-carat-1-w.uiIcon24:before,.uiIcon16.icon-carat-1-w:before{content:""}.icon-carat-1-nw.mapIcon16,.icon-carat-1-nw.uiIcon24,.uiIcon16.icon-carat-1-nw{-ms-transform:rotate(45deg);transform:rotate(45deg)}.icon-carat-1-nw.mapIcon16:before,.icon-carat-1-nw.uiIcon24:before,.uiIcon16.icon-carat-1-nw:before{content:""}.icon-carat-2-n-s.mapIcon16,.icon-carat-2-n-s.uiIcon24,.uiIcon16.icon-carat-2-n-s{-ms-transform:rotate(90deg);transform:rotate(90deg)}.icon-carat-2-e-w.mapIcon16:before,.icon-carat-2-e-w.uiIcon24:before,.icon-carat-2-n-s.mapIcon16:before,.icon-carat-2-n-s.uiIcon24:before,.uiIcon16.icon-carat-2-e-w:before,.uiIcon16.icon-carat-2-n-s:before{content:""}.icon-triangle-1-n.mapIcon16:before,.icon-triangle-1-n.uiIcon24:before,.uiIcon16.icon-triangle-1-n:before{content:""}.icon-triangle-1-ne.mapIcon16,.icon-triangle-1-ne.uiIcon24,.uiIcon16.icon-triangle-1-ne{-ms-transform:rotate(45deg);transform:rotate(45deg)}.icon-triangle-1-ne.mapIcon16:before,.icon-triangle-1-ne.uiIcon24:before,.uiIcon16.icon-triangle-1-ne:before{content:""}.icon-triangle-1-e.mapIcon16:before,.icon-triangle-1-e.uiIcon24:before,.uiIcon16.icon-triangle-1-e:before{content:""}.icon-triangle-1-se.mapIcon16,.icon-triangle-1-se.uiIcon24,.uiIcon16.icon-triangle-1-se{-ms-transform:rotate(45deg);transform:rotate(45deg)}.icon-triangle-1-se.mapIcon16:before,.icon-triangle-1-se.uiIcon24:before,.uiIcon16.icon-triangle-1-se:before{content:""}.icon-triangle-1-s.mapIcon16:before,.icon-triangle-1-s.uiIcon24:before,.uiIcon16.icon-triangle-1-s:before{content:""}.icon-triangle-1-sw.mapIcon16,.icon-triangle-1-sw.uiIcon24,.uiIcon16.icon-triangle-1-sw{-ms-transform:rotate(45deg);transform:rotate(45deg)}.icon-triangle-1-sw.mapIcon16:before,.icon-triangle-1-sw.uiIcon24:before,.uiIcon16.icon-triangle-1-sw:before{content:""}.icon-triangle-1-w.mapIcon16:before,.icon-triangle-1-w.uiIcon24:before,.uiIcon16.icon-triangle-1-w:before{content:""}.icon-triangle-1-nw.mapIcon16,.icon-triangle-1-nw.uiIcon24,.uiIcon16.icon-triangle-1-nw{-ms-transform:rotate(45deg);transform:rotate(45deg)}.icon-triangle-1-nw.mapIcon16:before,.icon-triangle-1-nw.uiIcon24:before,.uiIcon16.icon-triangle-1-nw:before{content:""}.icon-triangle-2-n-s.mapIcon16:before,.icon-triangle-2-n-s.uiIcon24:before,.uiIcon16.icon-triangle-2-n-s:before{content:""}.icon-triangle-2-e-w.mapIcon16:before,.icon-triangle-2-e-w.uiIcon24:before,.uiIcon16.icon-triangle-2-e-w:before{content:" "}.icon-arrow-1-n.mapIcon16:before,.icon-arrow-1-n.uiIcon24:before,.uiIcon16.icon-arrow-1-n:before{content:""}.icon-arrow-1-ne.mapIcon16,.icon-arrow-1-ne.uiIcon24,.uiIcon16.icon-arrow-1-ne{-ms-transform:rotate(45deg);transform:rotate(45deg)}.icon-arrow-1-ne.mapIcon16:before,.icon-arrow-1-ne.uiIcon24:before,.uiIcon16.icon-arrow-1-ne:before{content:""}.icon-arrow-1-e.mapIcon16:before,.icon-arrow-1-e.uiIcon24:before,.uiIcon16.icon-arrow-1-e:before{content:""}.icon-arrow-1-se.mapIcon16,.icon-arrow-1-se.uiIcon24,.uiIcon16.icon-arrow-1-se{-ms-transform:rotate(45deg);transform:rotate(45deg)}.icon-arrow-1-se.mapIcon16:before,.icon-arrow-1-se.uiIcon24:before,.uiIcon16.icon-arrow-1-se:before{content:""}.icon-arrow-1-s.mapIcon16:before,.icon-arrow-1-s.uiIcon24:before,.uiIcon16.icon-arrow-1-s:before{content:""}.icon-arrow-1-sw.mapIcon16,.icon-arrow-1-sw.uiIcon24,.uiIcon16.icon-arrow-1-sw{-ms-transform:rotate(45deg);transform:rotate(45deg)}.icon-arrow-1-sw.mapIcon16:before,.icon-arrow-1-sw.uiIcon24:before,.uiIcon16.icon-arrow-1-sw:before{content:""}.icon-arrow-1-w.mapIcon16:before,.icon-arrow-1-w.uiIcon24:before,.uiIcon16.icon-arrow-1-w:before{content:""}.icon-arrow-1-nw.mapIcon16,.icon-arrow-1-nw.uiIcon24,.uiIcon16.icon-arrow-1-nw{-ms-transform:rotate(45deg);transform:rotate(45deg)}.icon-arrow-1-nw.mapIcon16:before,.icon-arrow-1-nw.uiIcon24:before,.uiIcon16.icon-arrow-1-nw:before{content:""}.icon-arrow-2-n-s.mapIcon16:before,.icon-arrow-2-n-s.uiIcon24:before,.uiIcon16.icon-arrow-2-n-s:before{content:""}.icon-arrow-2-ne-sw.mapIcon16,.icon-arrow-2-ne-sw.uiIcon24,.uiIcon16.icon-arrow-2-ne-sw{-ms-transform:rotate(-45deg);transform:rotate(-45deg)}.icon-arrow-2-e-w.mapIcon16:before,.icon-arrow-2-e-w.uiIcon24:before,.icon-arrow-2-ne-sw.mapIcon16:before,.icon-arrow-2-ne-sw.uiIcon24:before,.uiIcon16.icon-arrow-2-e-w:before,.uiIcon16.icon-arrow-2-ne-sw:before{content:""}.icon-arrow-2-se-nw.mapIcon16,.icon-arrow-2-se-nw.uiIcon24,.uiIcon16.icon-arrow-2-se-nw{-ms-transform:rotate(45deg);transform:rotate(45deg)}.icon-arrow-2-se-nw.mapIcon16:before,.icon-arrow-2-se-nw.uiIcon24:before,.uiIcon16.icon-arrow-2-se-nw:before{content:""}.icon-arrowstop-1-n.mapIcon16,.icon-arrowstop-1-n.uiIcon24,.uiIcon16.icon-arrowstop-1-n{-ms-transform:rotate(-90deg);transform:rotate(-90deg)}.icon-arrowstop-1-e.mapIcon16:before,.icon-arrowstop-1-e.uiIcon24:before,.icon-arrowstop-1-n.mapIcon16:before,.icon-arrowstop-1-n.uiIcon24:before,.uiIcon16.icon-arrowstop-1-e:before,.uiIcon16.icon-arrowstop-1-n:before{content:""}.icon-arrowstop-1-s.mapIcon16,.icon-arrowstop-1-s.uiIcon24,.uiIcon16.icon-arrowstop-1-s{-ms-transform:rotate(90deg);transform:rotate(90deg)}.icon-arrowstop-1-s.mapIcon16:before,.icon-arrowstop-1-s.uiIcon24:before,.uiIcon16.icon-arrowstop-1-s:before{content:""}.icon-arrowstop-1-w.mapIcon16,.icon-arrowstop-1-w.uiIcon24,.uiIcon16.icon-arrowstop-1-w{-ms-transform:rotate(180deg);transform:rotate(180deg)}.icon-arrowstop-1-w.mapIcon16:before,.icon-arrowstop-1-w.uiIcon24:before,.uiIcon16.icon-arrowstop-1-w:before{content:""}.icon-arrowthick-1-n.mapIcon16:before,.icon-arrowthick-1-n.uiIcon24:before,.uiIcon16.icon-arrowthick-1-n:before{content:""}.icon-arrowthick-1-ne.mapIcon16,.icon-arrowthick-1-ne.uiIcon24,.uiIcon16.icon-arrowthick-1-ne{-ms-transform:rotate(45deg);transform:rotate(45deg)}.icon-arrowthick-1-ne.mapIcon16:before,.icon-arrowthick-1-ne.uiIcon24:before,.uiIcon16.icon-arrowthick-1-ne:before{content:""}.icon-arrowthick-1-e.mapIcon16:before,.icon-arrowthick-1-e.uiIcon24:before,.uiIcon16.icon-arrowthick-1-e:before{content:""}.icon-arrowthick-1-se.mapIcon16,.icon-arrowthick-1-se.uiIcon24,.uiIcon16.icon-arrowthick-1-se{-ms-transform:rotate(45deg);transform:rotate(45deg)}.icon-arrowthick-1-se.mapIcon16:before,.icon-arrowthick-1-se.uiIcon24:before,.uiIcon16.icon-arrowthick-1-se:before{content:""}.icon-arrowthick-1-s.mapIcon16:before,.icon-arrowthick-1-s.uiIcon24:before,.uiIcon16.icon-arrowthick-1-s:before{content:""}.icon-arrowthick-1-sw.mapIcon16,.icon-arrowthick-1-sw.uiIcon24,.uiIcon16.icon-arrowthick-1-sw{-ms-transform:rotate(45deg);transform:rotate(45deg)}.icon-arrowthick-1-sw.mapIcon16:before,.icon-arrowthick-1-sw.uiIcon24:before,.uiIcon16.icon-arrowthick-1-sw:before{content:""}.icon-arrowthick-1-w.mapIcon16:before,.icon-arrowthick-1-w.uiIcon24:before,.uiIcon16.icon-arrowthick-1-w:before{content:""}.icon-arrowthick-1-nw.mapIcon16,.icon-arrowthick-1-nw.uiIcon24,.uiIcon16.icon-arrowthick-1-nw{-ms-transform:rotate(45deg);transform:rotate(45deg)}.icon-arrowthick-1-nw.mapIcon16:before,.icon-arrowthick-1-nw.uiIcon24:before,.uiIcon16.icon-arrowthick-1-nw:before{content:""}.icon-arrowthick-2-n-s.mapIcon16:before,.icon-arrowthick-2-n-s.uiIcon24:before,.uiIcon16.icon-arrowthick-2-n-s:before{content:""}.icon-arrowthick-2-ne-sw.mapIcon16,.icon-arrowthick-2-ne-sw.uiIcon24,.uiIcon16.icon-arrowthick-2-ne-sw{-ms-transform:rotate(-45deg);transform:rotate(-45deg)}.icon-arrowthick-2-e-w.mapIcon16:before,.icon-arrowthick-2-e-w.uiIcon24:before,.icon-arrowthick-2-ne-sw.mapIcon16:before,.icon-arrowthick-2-ne-sw.uiIcon24:before,.uiIcon16.icon-arrowthick-2-e-w:before,.uiIcon16.icon-arrowthick-2-ne-sw:before{content:""}.icon-arrowthick-2-se-nw.mapIcon16,.icon-arrowthick-2-se-nw.uiIcon24,.uiIcon16.icon-arrowthick-2-se-nw{-ms-transform:rotate(45deg);transform:rotate(45deg)}.icon-arrowthick-2-se-nw.mapIcon16:before,.icon-arrowthick-2-se-nw.uiIcon24:before,.uiIcon16.icon-arrowthick-2-se-nw:before{content:""}.icon-arrowthickstop-1-n.mapIcon16,.icon-arrowthickstop-1-n.uiIcon24,.uiIcon16.icon-arrowthickstop-1-n{-ms-transform:rotate(-90deg);transform:rotate(-90deg)}.icon-arrowthickstop-1-e.mapIcon16:before,.icon-arrowthickstop-1-e.uiIcon24:before,.icon-arrowthickstop-1-n.mapIcon16:before,.icon-arrowthickstop-1-n.uiIcon24:before,.uiIcon16.icon-arrowthickstop-1-e:before,.uiIcon16.icon-arrowthickstop-1-n:before{content:""}.icon-arrowthickstop-1-s.mapIcon16,.icon-arrowthickstop-1-s.uiIcon24,.uiIcon16.icon-arrowthickstop-1-s{-ms-transform:rotate(90deg);transform:rotate(90deg)}.icon-arrowthickstop-1-s.mapIcon16:before,.icon-arrowthickstop-1-s.uiIcon24:before,.uiIcon16.icon-arrowthickstop-1-s:before{content:""}.icon-arrowthickstop-1-w.mapIcon16,.icon-arrowthickstop-1-w.uiIcon24,.uiIcon16.icon-arrowthickstop-1-w{-ms-transform:rotate(180deg);transform:rotate(180deg)}.icon-arrowthickstop-1-w.mapIcon16:before,.icon-arrowthickstop-1-w.uiIcon24:before,.uiIcon16.icon-arrowthickstop-1-w:before{content:""}.icon-arrowreturnthick-1-w.mapIcon16,.icon-arrowreturnthick-1-w.uiIcon24,.uiIcon16.icon-arrowreturnthick-1-w{-ms-transform:rotate(180deg);transform:rotate(180deg)}.icon-arrowreturnthick-1-w.mapIcon16:before,.icon-arrowreturnthick-1-w.uiIcon24:before,.uiIcon16.icon-arrowreturnthick-1-w:before{content:""}.icon-arrowreturnthick-1-n.mapIcon16,.icon-arrowreturnthick-1-n.uiIcon24,.uiIcon16.icon-arrowreturnthick-1-n{-ms-transform:rotate(-90deg);transform:rotate(-90deg)}.icon-arrowreturnthick-1-e.mapIcon16:before,.icon-arrowreturnthick-1-e.uiIcon24:before,.icon-arrowreturnthick-1-n.mapIcon16:before,.icon-arrowreturnthick-1-n.uiIcon24:before,.uiIcon16.icon-arrowreturnthick-1-e:before,.uiIcon16.icon-arrowreturnthick-1-n:before{content:""}.icon-arrowreturnthick-1-s.mapIcon16,.icon-arrowreturnthick-1-s.uiIcon24,.uiIcon16.icon-arrowreturnthick-1-s{-ms-transform:rotate(90deg);transform:rotate(90deg)}.icon-arrowreturnthick-1-s.mapIcon16:before,.icon-arrowreturnthick-1-s.uiIcon24:before,.uiIcon16.icon-arrowreturnthick-1-s:before{content:""}.icon-arrowreturn-1-w.mapIcon16,.icon-arrowreturn-1-w.uiIcon24,.uiIcon16.icon-arrowreturn-1-w{-ms-transform:rotate(180deg);transform:rotate(180deg)}.icon-arrowreturn-1-w.mapIcon16:before,.icon-arrowreturn-1-w.uiIcon24:before,.uiIcon16.icon-arrowreturn-1-w:before{content:""}.icon-arrowreturn-1-n.mapIcon16,.icon-arrowreturn-1-n.uiIcon24,.uiIcon16.icon-arrowreturn-1-n{-ms-transform:rotate(-90deg);transform:rotate(-90deg)}.icon-arrowreturn-1-e.mapIcon16:before,.icon-arrowreturn-1-e.uiIcon24:before,.icon-arrowreturn-1-n.mapIcon16:before,.icon-arrowreturn-1-n.uiIcon24:before,.uiIcon16.icon-arrowreturn-1-e:before,.uiIcon16.icon-arrowreturn-1-n:before{content:""}.icon-arrowreturn-1-s.mapIcon16,.icon-arrowreturn-1-s.uiIcon24,.uiIcon16.icon-arrowreturn-1-s{-ms-transform:rotate(90deg);transform:rotate(90deg)}.icon-arrowreturn-1-s.mapIcon16:before,.icon-arrowreturn-1-s.uiIcon24:before,.uiIcon16.icon-arrowreturn-1-s:before{content:""}.icon-arrowrefresh-1-w.mapIcon16,.icon-arrowrefresh-1-w.uiIcon24,.uiIcon16.icon-arrowrefresh-1-w{-ms-transform:rotate(180deg);transform:rotate(180deg)}.icon-arrowrefresh-1-w.mapIcon16:before,.icon-arrowrefresh-1-w.uiIcon24:before,.uiIcon16.icon-arrowrefresh-1-w:before{content:""}.icon-arrowrefresh-1-n.mapIcon16,.icon-arrowrefresh-1-n.uiIcon24,.uiIcon16.icon-arrowrefresh-1-n{-ms-transform:rotate(-90deg);transform:rotate(-90deg)}.icon-arrowrefresh-1-e.mapIcon16:before,.icon-arrowrefresh-1-e.uiIcon24:before,.icon-arrowrefresh-1-n.mapIcon16:before,.icon-arrowrefresh-1-n.uiIcon24:before,.uiIcon16.icon-arrowrefresh-1-e:before,.uiIcon16.icon-arrowrefresh-1-n:before{content:""}.icon-arrowrefresh-1-s.mapIcon16,.icon-arrowrefresh-1-s.uiIcon24,.uiIcon16.icon-arrowrefresh-1-s{-ms-transform:rotate(90deg);transform:rotate(90deg)}.icon-arrowrefresh-1-s.mapIcon16:before,.icon-arrowrefresh-1-s.uiIcon24:before,.uiIcon16.icon-arrowrefresh-1-s:before{content:""}.icon-arrow-4.mapIcon16:before,.icon-arrow-4.uiIcon24:before,.uiIcon16.icon-arrow-4:before{content:""}.icon-arrow-4-diag.mapIcon16,.icon-arrow-4-diag.uiIcon24,.uiIcon16.icon-arrow-4-diag{-ms-transform:rotate(45deg);transform:rotate(45deg)}.icon-arrow-4-diag.mapIcon16:before,.icon-arrow-4-diag.uiIcon24:before,.uiIcon16.icon-arrow-4-diag:before{content:""}.icon-extlink.mapIcon16:before,.icon-extlink.uiIcon24:before,.uiIcon16.icon-extlink:before{content:""}.icon-newwin.mapIcon16:before,.icon-newwin.uiIcon24:before,.uiIcon16.icon-newwin:before{content:""}.icon-refresh.mapIcon16:before,.icon-refresh.uiIcon24:before,.uiIcon16.icon-refresh:before{content:""}.icon-shuffle.mapIcon16:before,.icon-shuffle.uiIcon24:before,.uiIcon16.icon-shuffle:before{content:""}.icon-transfer-e-w.mapIcon16:before,.icon-transfer-e-w.uiIcon24:before,.icon-transferthick-e-w.mapIcon16:before,.icon-transferthick-e-w.uiIcon24:before,.uiIcon16.icon-transfer-e-w:before,.uiIcon16.icon-transferthick-e-w:before{content:""}.icon-radiation.mapIcon16:before,.icon-radiation.uiIcon24:before,.uiIcon16.icon-radiation:before{content:""}.icon-folder-collapsed.mapIcon16:before,.icon-folder-collapsed.uiIcon24:before,.uiIcon16.icon-folder-collapsed:before{content:""}.icon-folder-open.mapIcon16:before,.icon-folder-open.uiIcon24:before,.uiIcon16.icon-folder-open:before{content:""}.icon-document.mapIcon16:before,.icon-document.uiIcon24:before,.uiIcon16.icon-document:before{content:""}.icon-document-b.mapIcon16:before,.icon-document-b.uiIcon24:before,.uiIcon16.icon-document-b:before{content:""}.icon-note.mapIcon16:before,.icon-note.uiIcon24:before,.uiIcon16.icon-note:before{content:""}.icon-mail-closed.mapIcon16:before,.icon-mail-closed.uiIcon24:before,.uiIcon16.icon-mail-closed:before{content:""}.icon-mail-open.mapIcon16:before,.icon-mail-open.uiIcon24:before,.uiIcon16.icon-mail-open:before{content:""}.icon-suitcase.mapIcon16:before,.icon-suitcase.uiIcon24:before,.uiIcon16.icon-suitcase:before{content:""}.icon-comment.mapIcon16:before,.icon-comment.uiIcon24:before,.uiIcon16.icon-comment:before{content:""}.icon-person.mapIcon16:before,.icon-person.uiIcon24:before,.uiIcon16.icon-person:before{content:""}.icon-print.mapIcon16:before,.icon-print.uiIcon24:before,.uiIcon16.icon-print:before{content:""}.icon-trash.mapIcon16:before,.icon-trash.uiIcon24:before,.uiIcon16.icon-trash:before{content:""}.icon-locked.mapIcon16:before,.icon-locked.uiIcon24:before,.uiIcon16.icon-locked:before{content:""}.icon-unlocked.mapIcon16:before,.icon-unlocked.uiIcon24:before,.uiIcon16.icon-unlocked:before{content:""}.icon-bookmark.mapIcon16:before,.icon-bookmark.uiIcon24:before,.uiIcon16.icon-bookmark:before{content:""}.icon-tag.mapIcon16:before,.icon-tag.uiIcon24:before,.uiIcon16.icon-tag:before{content:""}.icon-home.mapIcon16:before,.icon-home.uiIcon24:before,.uiIcon16.icon-home:before{content:""}.icon-flag.mapIcon16:before,.icon-flag.uiIcon24:before,.uiIcon16.icon-flag:before{content:""}.icon-calendar.mapIcon16:before,.icon-calendar.uiIcon24:before,.uiIcon16.icon-calendar:before{content:""}.icon-cart.mapIcon16:before,.icon-cart.uiIcon24:before,.uiIcon16.icon-cart:before{content:""}.icon-pencil.mapIcon16:before,.icon-pencil.uiIcon24:before,.uiIcon16.icon-pencil:before{content:""}.icon-clock.mapIcon16:before,.icon-clock.uiIcon24:before,.uiIcon16.icon-clock:before{content:""}.icon-disk.mapIcon16:before,.icon-disk.uiIcon24:before,.uiIcon16.icon-disk:before{content:""}.icon-calculator.mapIcon16:before,.icon-calculator.uiIcon24:before,.uiIcon16.icon-calculator:before{content:""}.icon-zoomin.mapIcon16:before,.icon-zoomin.uiIcon24:before,.uiIcon16.icon-zoomin:before{content:""}.icon-zoomout.mapIcon16:before,.icon-zoomout.uiIcon24:before,.uiIcon16.icon-zoomout:before{content:""}.icon-search.mapIcon16:before,.icon-search.uiIcon24:before,.uiIcon16.icon-search:before{content:""}.icon-wrench.mapIcon16:before,.icon-wrench.uiIcon24:before,.uiIcon16.icon-wrench:before{content:""}.icon-gear.mapIcon16:before,.icon-gear.uiIcon24:before,.uiIcon16.icon-gear:before{content:""}.icon-heart.mapIcon16:before,.icon-heart.uiIcon24:before,.uiIcon16.icon-heart:before{content:""}.icon-star.mapIcon16:before,.icon-star.uiIcon24:before,.uiIcon16.icon-star:before{content:""}.icon-link.mapIcon16:before,.icon-link.uiIcon24:before,.uiIcon16.icon-link:before{content:""}.icon-cancel.mapIcon16:before,.icon-cancel.uiIcon24:before,.uiIcon16.icon-cancel:before{content:""}.icon-plus.mapIcon16:before,.icon-plus.uiIcon24:before,.icon-plusthick.mapIcon16:before,.icon-plusthick.uiIcon24:before,.uiIcon16.icon-plus:before,.uiIcon16.icon-plusthick:before{content:""}.icon-minus.mapIcon16:before,.icon-minus.uiIcon24:before,.icon-minusthick.mapIcon16:before,.icon-minusthick.uiIcon24:before,.uiIcon16.icon-minus:before,.uiIcon16.icon-minusthick:before{content:""}.icon-close.mapIcon16:before,.icon-close.uiIcon24:before,.icon-closethick.mapIcon16:before,.icon-closethick.uiIcon24:before,.uiIcon16.icon-close:before,.uiIcon16.icon-closethick:before{content:""}.icon-key.mapIcon16:before,.icon-key.uiIcon24:before,.uiIcon16.icon-key:before{content:""}.icon-lightbulb.mapIcon16:before,.icon-lightbulb.uiIcon24:before,.uiIcon16.icon-lightbulb:before{content:""}.icon-scissors.mapIcon16:before,.icon-scissors.uiIcon24:before,.uiIcon16.icon-scissors:before{content:""}.icon-clipboard.mapIcon16:before,.icon-clipboard.uiIcon24:before,.uiIcon16.icon-clipboard:before{content:""}.icon-copy.mapIcon16:before,.icon-copy.uiIcon24:before,.uiIcon16.icon-copy:before{content:""}.icon-contact.mapIcon16:before,.icon-contact.uiIcon24:before,.uiIcon16.icon-contact:before{content:""}.icon-image.mapIcon16:before,.icon-image.uiIcon24:before,.uiIcon16.icon-image:before{content:""}.icon-video.mapIcon16:before,.icon-video.uiIcon24:before,.uiIcon16.icon-video:before{content:""}.icon-script.mapIcon16:before,.icon-script.uiIcon24:before,.uiIcon16.icon-script:before{content:""}.icon-alert.mapIcon16:before,.icon-alert.uiIcon24:before,.uiIcon16.icon-alert:before{content:""}.icon-info.mapIcon16:before,.icon-info.uiIcon24:before,.uiIcon16.icon-info:before{content:""}.icon-notice.mapIcon16:before,.icon-notice.uiIcon24:before,.uiIcon16.icon-notice:before{content:""}.icon-help.mapIcon16:before,.icon-help.uiIcon24:before,.uiIcon16.icon-help:before{content:""}.icon-check.mapIcon16:before,.icon-check.uiIcon24:before,.uiIcon16.icon-check:before{content:""}.icon-bullet.mapIcon16:before,.icon-bullet.uiIcon24:before,.uiIcon16.icon-bullet:before{content:""}.icon-pin-w.mapIcon16,.icon-pin-w.uiIcon24,.uiIcon16.icon-pin-w{-ms-transform:rotate(90deg);transform:rotate(90deg)}.icon-pin-s.mapIcon16:before,.icon-pin-s.uiIcon24:before,.icon-pin-w.mapIcon16:before,.icon-pin-w.uiIcon24:before,.uiIcon16.icon-pin-s:before,.uiIcon16.icon-pin-w:before{content:""}.icon-night.mapIcon16:before,.icon-night.uiIcon24:before,.uiIcon16.icon-night:before{content:""}.icon-play.mapIcon16:before,.icon-play.uiIcon24:before,.uiIcon16.icon-play:before{content:""}.icon-pause.mapIcon16:before,.icon-pause.uiIcon24:before,.uiIcon16.icon-pause:before{content:""}.icon-seek-next.mapIcon16:before,.icon-seek-next.uiIcon24:before,.uiIcon16.icon-seek-next:before{content:""}.icon-seek-prev.mapIcon16:before,.icon-seek-prev.uiIcon24:before,.uiIcon16.icon-seek-prev:before{content:""}.icon-seek-end.mapIcon16:before,.icon-seek-end.uiIcon24:before,.uiIcon16.icon-seek-end:before{content:""}.icon-seek-first.mapIcon16:before,.icon-seek-first.uiIcon24:before,.icon-seek-start.mapIcon16:before,.icon-seek-start.uiIcon24:before,.uiIcon16.icon-seek-first:before,.uiIcon16.icon-seek-start:before{content:""}.icon-stop.mapIcon16:before,.icon-stop.uiIcon24:before,.uiIcon16.icon-stop:before{content:""}.icon-eject.mapIcon16:before,.icon-eject.uiIcon24:before,.uiIcon16.icon-eject:before{content:""}.icon-volume-off.mapIcon16:before,.icon-volume-off.uiIcon24:before,.uiIcon16.icon-volume-off:before{content:""}.icon-volume-on.mapIcon16:before,.icon-volume-on.uiIcon24:before,.uiIcon16.icon-volume-on:before{content:""}.icon-power.mapIcon16:before,.icon-power.uiIcon24:before,.uiIcon16.icon-power:before{content:""}.icon-signal-diag.mapIcon16:before,.icon-signal-diag.uiIcon24:before,.icon-signal.mapIcon16:before,.icon-signal.uiIcon24:before,.uiIcon16.icon-signal-diag:before,.uiIcon16.icon-signal:before{content:""}.icon-battery-0.mapIcon16:before,.icon-battery-0.uiIcon24:before,.uiIcon16.icon-battery-0:before{content:""}.icon-battery-1.mapIcon16:before,.icon-battery-1.uiIcon24:before,.uiIcon16.icon-battery-1:before{content:""}.icon-battery-2.mapIcon16:before,.icon-battery-2.uiIcon24:before,.uiIcon16.icon-battery-2:before{content:""}.icon-battery-3.mapIcon16:before,.icon-battery-3.uiIcon24:before,.uiIcon16.icon-battery-3:before{content:""}.icon-circle-plus.mapIcon16:before,.icon-circle-plus.uiIcon24:before,.uiIcon16.icon-circle-plus:before{content:""}.icon-circle-minus.mapIcon16:before,.icon-circle-minus.uiIcon24:before,.uiIcon16.icon-circle-minus:before{content:""}.icon-circle-close.mapIcon16:before,.icon-circle-close.uiIcon24:before,.uiIcon16.icon-circle-close:before{content:""}.icon-circlesmall-plus.mapIcon16:before,.icon-circlesmall-plus.uiIcon24:before,.uiIcon16.icon-circlesmall-plus:before{content:""}.icon-circlesmall-minus.mapIcon16:before,.icon-circlesmall-minus.uiIcon24:before,.uiIcon16.icon-circlesmall-minus:before{content:""}.icon-squaresmall-plus.mapIcon16:before,.icon-squaresmall-plus.uiIcon24:before,.uiIcon16.icon-squaresmall-plus:before{content:""}.icon-squaresmall-minus.mapIcon16:before,.icon-squaresmall-minus.uiIcon24:before,.uiIcon16.icon-squaresmall-minus:before{content:""}.icon-grip-dotted-vertical.mapIcon16:before,.icon-grip-dotted-vertical.uiIcon24:before,.uiIcon16.icon-grip-dotted-vertical:before{content:""}.icon-grip-dotted-horizontal.mapIcon16,.icon-grip-dotted-horizontal.uiIcon24,.uiIcon16.icon-grip-dotted-horizontal{-ms-transform:rotate(90deg);transform:rotate(90deg)}.icon-grip-dotted-horizontal.mapIcon16:before,.icon-grip-dotted-horizontal.uiIcon24:before,.uiIcon16.icon-grip-dotted-horizontal:before{content:""}.mapIcon16{position:absolute;color:#2fd02f}.mapIcon16.red{color:#c00}.mapIcon16.rank-captain:before{content:""}.mapIcon16.rank-headofpersonnel:before{content:""}.mapIcon16.rank-headofsecurity:before{content:""}.mapIcon16.rank-chiefengineer:before{content:""}.mapIcon16.rank-researchdirector:before{content:""}.mapIcon16.rank-chiefmedicalofficer:before{content:""}.mapIcon16.rank-atmospherictechnician:before,.mapIcon16.rank-stationengineer:before{content:""}.mapIcon16.rank-chemist:before,.mapIcon16.rank-medicaldoctor:before,.mapIcon16.rank-psychiatrist:before{content:""}.mapIcon16.rank-geneticist:before,.mapIcon16.rank-roboticist:before,.mapIcon16.rank-scientist:before,.mapIcon16.rank-xenobiologist:before{content:""}.mapIcon16.rank-detective:before,.mapIcon16.rank-securityofficer:before,.mapIcon16.rank-warden:before{content:""}.clear-left{clear:left!important}.clear-right{clear:right!important}.clear-both{clear:both!important}.clear-none{clear:none!important}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-none{display:none!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-right:0!important;margin-left:0!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-5{margin-right:3rem!important;margin-left:3rem!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.mr-0{margin-right:0!important}.mr-1{margin-right:.25rem!important}.mr-2{margin-right:.5rem!important}.mr-3{margin-right:1rem!important}.mr-4{margin-right:1.5rem!important}.mr-5{margin-right:3rem!important}.mr-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ml-0{margin-left:0!important}.ml-1{margin-left:.25rem!important}.ml-2{margin-left:.5rem!important}.ml-3{margin-left:1rem!important}.ml-4{margin-left:1.5rem!important}.ml-5{margin-left:3rem!important}.ml-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-right:0!important;padding-left:0!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-5{padding-right:3rem!important;padding-left:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pr-0{padding-right:0!important}.pr-1{padding-right:.25rem!important}.pr-2{padding-right:.5rem!important}.pr-3{padding-right:1rem!important}.pr-4{padding-right:1.5rem!important}.pr-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.pl-0{padding-left:0!important}.pl-1{padding-left:.25rem!important}.pl-2{padding-left:.5rem!important}.pl-3{padding-left:1rem!important}.pl-4{padding-left:1.5rem!important}.pl-5{padding-left:3rem!important}.fs-small{font-size:12px!important}.fs-normal{font-size:14px!important}.fs-large{font-size:16px!important}.fs-largest{font-size:18px!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-light{font-weight:light!important}.fw-lighter{font-weight:lighter!important}.fw-normal{font-weight:400!important}.fw-bold{font-weight:700!important}.fw-bolder{font-weight:bolder!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}.theme-basic-dark .button,.theme-basic-dark a,.theme-basic-dark button,.theme-basic-dark input[disabled],.theme-basic-dark input[type=button],.theme-basic-dark input[type=reset],.theme-basic-dark input[type=submit],.theme-basic .button,.theme-basic a,.theme-basic button,.theme-basic input[disabled],.theme-basic input[type=button],.theme-basic input[type=reset],.theme-basic input[type=submit]{display:inline;background:none;border:none;border-radius:0;color:#00e;padding:.1em 0 0 0;margin-right:2px;text-decoration:underline}.theme-basic-dark .button:hover,.theme-basic-dark a:hover,.theme-basic-dark button:hover,.theme-basic-dark input[disabled]:hover,.theme-basic-dark input[type=button]:hover,.theme-basic-dark input[type=reset]:hover,.theme-basic-dark input[type=submit]:hover,.theme-basic .button:hover,.theme-basic a:hover,.theme-basic button:hover,.theme-basic input[disabled]:hover,.theme-basic input[type=button]:hover,.theme-basic input[type=reset]:hover,.theme-basic input[type=submit]:hover{background:none;color:#551a8b}.theme-basic-dark .button:active,.theme-basic-dark a:active,.theme-basic-dark button:active,.theme-basic-dark input[disabled]:active,.theme-basic-dark input[type=button]:active,.theme-basic-dark input[type=reset]:active,.theme-basic-dark input[type=submit]:active,.theme-basic .button:active,.theme-basic a:active,.theme-basic button:active,.theme-basic input[disabled]:active,.theme-basic input[type=button]:active,.theme-basic input[type=reset]:active,.theme-basic input[type=submit]:active{color:#e00}.theme-basic-dark .tooltip.content,.theme-basic .tooltip.content{background:#fff;border:1px solid #a9a9a9}.theme-basic-dark{color:#fff;background:#000}.theme-basic-dark .button,.theme-basic-dark a,.theme-basic-dark button,.theme-basic-dark input[disabled],.theme-basic-dark input[type=button],.theme-basic-dark input[type=reset],.theme-basic-dark input[type=submit]{color:#90ee90}.theme-basic-dark .button:hover,.theme-basic-dark a:hover,.theme-basic-dark button:hover,.theme-basic-dark input[disabled]:hover,.theme-basic-dark input[type=button]:hover,.theme-basic-dark input[type=reset]:hover,.theme-basic-dark input[type=submit]:hover{color:#cceb76}.theme-basic-dark .button:active,.theme-basic-dark a:active,.theme-basic-dark button:active,.theme-basic-dark input[disabled]:active,.theme-basic-dark input[type=button]:active,.theme-basic-dark input[type=reset]:active,.theme-basic-dark input[type=submit]:active{color:#1ff}.theme-basic-dark .button:visited,.theme-basic-dark a:visited,.theme-basic-dark button:visited,.theme-basic-dark input[disabled]:visited,.theme-basic-dark input[type=button]:visited,.theme-basic-dark input[type=reset]:visited,.theme-basic-dark input[type=submit]:visited{color:#2e8b57}.theme-basic-dark .uiTitleWrapper{background-color:#464646}.theme-basic-dark .tooltip.content{background:#000}.theme-nano,.theme-nano-light{font-size:12px;line-height:1.9em;font-family:Verdana,Geneva,sans-serif;background:#202020 url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iODAwIiBoZWlnaHQ9IjQzMCI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4Mj0iNDAwIiB5MT0iNDMwIiB4MT0iNDAwIiBpZD0iYiI+PHN0b3Agc3RvcC1jb2xvcj0iIzIwMjAyMCIgb2Zmc2V0PSIuNDEiLz48c3RvcCBzdG9wLWNvbG9yPSIjM2QzYzNjIiBvZmZzZXQ9Ii44NCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB5Mj0iMjQwLjU1IiB4Mj0iMzk5LjkiIHkxPSIxMzYuNTIiIHgxPSIzOTkuOSIgaWQ9ImEiPjxzdG9wIHN0b3AtY29sb3I9IiMxZjFmMWYiIG9mZnNldD0iMCIvPjxzdG9wIHN0b3AtY29sb3I9IiMxNzE3MTciIG9mZnNldD0iMSIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IHhsaW5rOmhyZWY9IiNhIiB5Mj0iMjQwLjU1IiB4Mj0iNDc5LjMyIiB5MT0iMTk3LjY5IiB4MT0iNDc5LjMyIiBpZD0iYyIvPjxsaW5lYXJHcmFkaWVudCB4bGluazpocmVmPSIjYSIgeTI9IjE3OS40MSIgeDI9IjMyMC40MyIgeTE9IjEzNi41NCIgeDE9IjMyMC40MyIgaWQ9ImQiLz48L2RlZnM+PHBhdGggZmlsbD0idXJsKCNiKSIgZD0iTTAgMGg4MDB2NDMwSDB6Ii8+PHBhdGggZD0iTTQ1MS40NCAxNDEuNWMtLjA3LTIuMjUtMS0zLjU1LTIuNzMtMy45M2gtMjQuMnEtMy42LjA5LTMuNzEgNC4wNnY1MC40NGwtMzMuNzItNTRhNSA1IDAgMDAtMy4wNS0xLjVsLS45LS4wN2gtMzEuNDVxLTMuMTkuMjgtMy4zMyA0djk1LjA2Yy4wOCAyLjI1IDEgMy41NiAyLjczIDMuOTNoMjQuMnEzLjYtLjA5IDMuNzEtNC4wNlYxODVsMzMuNzIgNTRhNSA1IDAgMDAzLjA1IDEuNTFjLjI5IDAgLjU5IDAgLjkuMDZoMzEuNDVxMy4xOS0uMjggMy4zMy00eiIgZmlsbD0idXJsKCNhKSIvPjxwYXRoIGQ9Ik00OTYuMzQgMjI4LjNsLTM2LjY3LTMwLjU3djM4Ljg3Yy4wNyAyLjQ3IDEuMTggMy44IDMuMzEgNGgzMC4yNWE1LjQ1IDUuNDUgMCAwMDQuMDUtMiA3LjI0IDcuMjQgMCAwMDAtOS40NiAzLjU5IDMuNTkgMCAwMC0uMzktLjM5bC0uMDYtLjA2eiIgZmlsbD0idXJsKCNjKSIvPjxwYXRoIGQ9Ik0zMDMuNDEgMTQ4Ljc5di4wNWwzNi42NyAzMC41N3YtMzguODdjLS4wNy0yLjQ4LTEuMTgtMy44MS0zLjMxLTRoLTMwLjIxYTUuNDkgNS40OSAwIDAwLTQuMDUgMiA2LjgxIDYuODEgMCAwMC0xLjc2IDQuNzIgNi45MSA2LjkxIDAgMDAxLjc2IDQuNzRxLjE5LjIxLjM5LjM5bC4wNi4wNmE0LjEyIDQuMTIgMCAwMC40NS4zNHoiIGZpbGw9InVybCgjZCkiLz48L3N2Zz4=) 50% 0 repeat-x;scrollbar-base-color:#181818;scrollbar-face-color:#363636;scrollbar-3dlight-color:#202020;scrollbar-highlight-color:#202020;scrollbar-track-color:#181818;scrollbar-arrow-color:#909090;scrollbar-shadow-color:#363636}.theme-nano-light hr,.theme-nano hr{background-color:#40628a;height:1px}.theme-nano-light .uiTitleWrapper,.theme-nano .uiTitleWrapper{background-color:#363636;box-shadow:0 0 8px 4px rgba(0,0,0,.5)}.theme-nano-light .uiTitleWrapper .uiTitleText,.theme-nano .uiTitleWrapper .uiTitleText{color:#e9c183}.theme-nano-light .uiTitleWrapper .uiTitleClose,.theme-nano .uiTitleWrapper .uiTitleClose{color:hsla(0,0%,100%,.5)}.theme-nano-light .button,.theme-nano-light a,.theme-nano-light button,.theme-nano-light input[type=button],.theme-nano-light input[type=reset],.theme-nano-light input[type=submit],.theme-nano .button,.theme-nano a,.theme-nano button,.theme-nano input[type=button],.theme-nano input[type=reset],.theme-nano input[type=submit]{display:inline-block;min-width:15px;height:16px;text-align:center;text-decoration:none;background:#40628a;cursor:default;white-space:nowrap;box-sizing:content-box;color:inherit;border-radius:.15em;padding:2px 4px 2px 4px;line-height:16px;vertical-align:top;margin:0 2px 2px 0}.theme-nano-light .button:hover,.theme-nano-light a:hover,.theme-nano-light button:hover,.theme-nano-light input[type=button]:hover,.theme-nano-light input[type=reset]:hover,.theme-nano-light input[type=submit]:hover,.theme-nano .button:hover,.theme-nano a:hover,.theme-nano button:hover,.theme-nano input[type=button]:hover,.theme-nano input[type=reset]:hover,.theme-nano input[type=submit]:hover{background:#507aac}.theme-nano-light .button:active,.theme-nano-light .button:link,.theme-nano-light .button:visited,.theme-nano-light a:active,.theme-nano-light a:link,.theme-nano-light a:visited,.theme-nano-light button:active,.theme-nano-light button:link,.theme-nano-light button:visited,.theme-nano-light input[type=button]:active,.theme-nano-light input[type=button]:link,.theme-nano-light input[type=button]:visited,.theme-nano-light input[type=reset]:active,.theme-nano-light input[type=reset]:link,.theme-nano-light input[type=reset]:visited,.theme-nano-light input[type=submit]:active,.theme-nano-light input[type=submit]:link,.theme-nano-light input[type=submit]:visited,.theme-nano .button:active,.theme-nano .button:link,.theme-nano .button:visited,.theme-nano a:active,.theme-nano a:link,.theme-nano a:visited,.theme-nano button:active,.theme-nano button:link,.theme-nano button:visited,.theme-nano input[type=button]:active,.theme-nano input[type=button]:link,.theme-nano input[type=button]:visited,.theme-nano input[type=reset]:active,.theme-nano input[type=reset]:link,.theme-nano input[type=reset]:visited,.theme-nano input[type=submit]:active,.theme-nano input[type=submit]:link,.theme-nano input[type=submit]:visited{text-decoration:none}.theme-nano-light .button.on,.theme-nano-light .button.selected,.theme-nano-light a.on,.theme-nano-light a.selected,.theme-nano-light button.on,.theme-nano-light button.selected,.theme-nano-light input[type=button].on,.theme-nano-light input[type=button].selected,.theme-nano-light input[type=reset].on,.theme-nano-light input[type=reset].selected,.theme-nano-light input[type=submit].on,.theme-nano-light input[type=submit].selected,.theme-nano .button.on,.theme-nano .button.selected,.theme-nano a.on,.theme-nano a.selected,.theme-nano button.on,.theme-nano button.selected,.theme-nano input[type=button].on,.theme-nano input[type=button].selected,.theme-nano input[type=reset].on,.theme-nano input[type=reset].selected,.theme-nano input[type=submit].on,.theme-nano input[type=submit].selected{background:#2f943c}.theme-nano-light .button.on:hover,.theme-nano-light .button.selected:hover,.theme-nano-light a.on:hover,.theme-nano-light a.selected:hover,.theme-nano-light button.on:hover,.theme-nano-light button.selected:hover,.theme-nano-light input[type=button].on:hover,.theme-nano-light input[type=button].selected:hover,.theme-nano-light input[type=reset].on:hover,.theme-nano-light input[type=reset].selected:hover,.theme-nano-light input[type=submit].on:hover,.theme-nano-light input[type=submit].selected:hover,.theme-nano .button.on:hover,.theme-nano .button.selected:hover,.theme-nano a.on:hover,.theme-nano a.selected:hover,.theme-nano button.on:hover,.theme-nano button.selected:hover,.theme-nano input[type=button].on:hover,.theme-nano input[type=button].selected:hover,.theme-nano input[type=reset].on:hover,.theme-nano input[type=reset].selected:hover,.theme-nano input[type=submit].on:hover,.theme-nano input[type=submit].selected:hover{background:#5fc96d}.theme-nano-light .button.inactive,.theme-nano-light .button.off,.theme-nano-light .button[disabled],.theme-nano-light a.inactive,.theme-nano-light a.off,.theme-nano-light a[disabled],.theme-nano-light button.inactive,.theme-nano-light button.off,.theme-nano-light button[disabled],.theme-nano-light input[type=button].inactive,.theme-nano-light input[type=button].off,.theme-nano-light input[type=button][disabled],.theme-nano-light input[type=reset].inactive,.theme-nano-light input[type=reset].off,.theme-nano-light input[type=reset][disabled],.theme-nano-light input[type=submit].inactive,.theme-nano-light input[type=submit].off,.theme-nano-light input[type=submit][disabled],.theme-nano .button.inactive,.theme-nano .button.off,.theme-nano .button[disabled],.theme-nano a.inactive,.theme-nano a.off,.theme-nano a[disabled],.theme-nano button.inactive,.theme-nano button.off,.theme-nano button[disabled],.theme-nano input[type=button].inactive,.theme-nano input[type=button].off,.theme-nano input[type=button][disabled],.theme-nano input[type=reset].inactive,.theme-nano input[type=reset].off,.theme-nano input[type=reset][disabled],.theme-nano input[type=submit].inactive,.theme-nano input[type=submit].off,.theme-nano input[type=submit][disabled]{background:#999;border-color:#666}.theme-nano-light .button.danger,.theme-nano-light .button.red,.theme-nano-light a.danger,.theme-nano-light a.red,.theme-nano-light button.danger,.theme-nano-light button.red,.theme-nano-light input[type=button].danger,.theme-nano-light input[type=button].red,.theme-nano-light input[type=reset].danger,.theme-nano-light input[type=reset].red,.theme-nano-light input[type=submit].danger,.theme-nano-light input[type=submit].red,.theme-nano .button.danger,.theme-nano .button.red,.theme-nano a.danger,.theme-nano a.red,.theme-nano button.danger,.theme-nano button.red,.theme-nano input[type=button].danger,.theme-nano input[type=button].red,.theme-nano input[type=reset].danger,.theme-nano input[type=reset].red,.theme-nano input[type=submit].danger,.theme-nano input[type=submit].red{background:red;border-color:#a00}.theme-nano-light .button.danger:hover,.theme-nano-light .button.red:hover,.theme-nano-light a.danger:hover,.theme-nano-light a.red:hover,.theme-nano-light button.danger:hover,.theme-nano-light button.red:hover,.theme-nano-light input[type=button].danger:hover,.theme-nano-light input[type=button].red:hover,.theme-nano-light input[type=reset].danger:hover,.theme-nano-light input[type=reset].red:hover,.theme-nano-light input[type=submit].danger:hover,.theme-nano-light input[type=submit].red:hover,.theme-nano .button.danger:hover,.theme-nano .button.red:hover,.theme-nano a.danger:hover,.theme-nano a.red:hover,.theme-nano button.danger:hover,.theme-nano button.red:hover,.theme-nano input[type=button].danger:hover,.theme-nano input[type=button].red:hover,.theme-nano input[type=reset].danger:hover,.theme-nano input[type=reset].red:hover,.theme-nano input[type=submit].danger:hover,.theme-nano input[type=submit].red:hover{background-color:#f66}.theme-nano-light .button.yellow,.theme-nano-light a.yellow,.theme-nano-light button.yellow,.theme-nano-light input[type=button].yellow,.theme-nano-light input[type=reset].yellow,.theme-nano-light input[type=submit].yellow,.theme-nano .button.yellow,.theme-nano a.yellow,.theme-nano button.yellow,.theme-nano input[type=button].yellow,.theme-nano input[type=reset].yellow,.theme-nano input[type=submit].yellow{color:#000;background:#cacc00}.theme-nano-light .button.yellow:hover,.theme-nano-light a.yellow:hover,.theme-nano-light button.yellow:hover,.theme-nano-light input[type=button].yellow:hover,.theme-nano-light input[type=reset].yellow:hover,.theme-nano-light input[type=submit].yellow:hover,.theme-nano .button.yellow:hover,.theme-nano a.yellow:hover,.theme-nano button.yellow:hover,.theme-nano input[type=button].yellow:hover,.theme-nano input[type=reset].yellow:hover,.theme-nano input[type=submit].yellow:hover{background:#fcff5f}.theme-nano-light ul,.theme-nano ul{padding:4px 0 0 10px;margin:0;list-style-type:none}.theme-nano-light li,.theme-nano li{padding:0 0 2px 0}.theme-nano-light img,.theme-nano img{border-style:none}.theme-nano-light h1,.theme-nano-light h2,.theme-nano-light h3,.theme-nano-light h4,.theme-nano-light h5,.theme-nano-light h6,.theme-nano h1,.theme-nano h2,.theme-nano h3,.theme-nano h4,.theme-nano h5,.theme-nano h6{margin:0;padding:12px 0 6px 0;clear:both}.theme-nano-light h1,.theme-nano h1{font-size:18px}.theme-nano-light h2,.theme-nano h2{font-size:16px}.theme-nano-light h3,.theme-nano h3{font-size:14px}.theme-nano-light h4,.theme-nano h4{font-size:12px}.theme-nano-light .good,.theme-nano .good{color:#4f7529;font-weight:700}.theme-nano-light .average,.theme-nano .average{color:#cd6500;font-weight:700}.theme-nano-light .bad,.theme-nano .bad{color:#e00;font-weight:700}.theme-nano-light .dark,.theme-nano-light .idle,.theme-nano .dark,.theme-nano .idle{color:#272727;font-weight:700}.theme-nano-light .highlight,.theme-nano .highlight{color:#8ba5c4}.theme-nano-light .itemLabel,.theme-nano .itemLabel{color:#e9c183}.theme-nano-light .notice,.theme-nano .notice{background:url(data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD//gATQ3JlYXRlZCB3aXRoIEdJTVD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wgARCAG4AmwDAREAAhEBAxEB/8QAGQABAQEBAQEAAAAAAAAAAAAAAwQCAQAF/8QAFwEBAQEBAAAAAAAAAAAAAAAAAAEEBf/aAAwDAQACEAMQAAAB+zztegCkMyVkx4YmGNADGQxwDgwJsYkKDpMOZMDgmygkFNExUYCKATwpMbEAKDhOVghlABs0EObJSkMMpJzQpOIdJxjwJQTjmTJUTHikjHNk4xwwKEcHANmycU6CUBBlAJscjKDRKVhhjGDghOKaBGOAjGDJQTHRicpPEpYGCWEx4YE2dJykwYGJSoIwVAHikjHOkxWGYKQDI4Bo2AIeCKQgyknOlBKOaJikIwVkxsYmNCE4xwEoCOFJKdFJxzROVhBFRKbHJhzwAp4EcwaOBFIB0YmGNExQZDKgDxsAU2TiHAxjJgoBOik4xomKgjA4R0clEOglBkEUwZGCOjE4ponKQzBSTGhQBjZKOZCKQQzZ4UA6OTDGiYqDMFQJwYmNiE45wnKQjAwQhsmGNkxUGEVkxooJzZoAY4CUgmRQTogQp4nKjAZUTHRyUoNk44RgoAPFBIUBHhiUU2TlJwAoMHBiYQQmKDwAhwwMAaFBGPExSYDKQjI4Ro0TlJgErBMCBnTYAx0EpCBLCc8OAbNhCmQikA8UEw4J0UmFNE45wIcI8MTiCkpScAKgTI4B0YAQ0TFBkEoCODkwxsmKDwBUCZKCYQ2TjHQxDIRSAeGJxDZMUmQikIyUkx06dEJxDZMUmASoA4UkxsQmKThOUmAygA0OTmzoBQZCKADhQSiikpQcBKgDJQCeGJhzQAxgMpJzQpMIITFBwEoCOFJIIKGKTCnScoOAFIB4YAQUmGPE5SZMmwjpQTDngCgIMoCMlBKIbAKDwBSAYKQjR0EU2AUBmCgmOjkwhsmHOBFQRgoJjQoRSTDHSMrMBFAJwcnNCBjmACkM6IAdFJxzQBQEAWE5woJRBCcU6YKScyUAiHScY8CVBmCgmOFBMIbJxzgIxk6OSGxQRgRTZOKeBGCPDgGzROMdAKDJkpJjopMMaBHOAjBmRQTYhOOYDHDMjhGxSYQ6AUmAykEyMTmzQI5wIoAODAmhAig6CIEIZCKic4UEwopKIdAKgThQCdGJjZoAc6GKCdHJBjROUnABgzJSTGxyYY8CIZMFBkwKAIbJioIMqBMCgCmycoPADBDmDAwZkoJRBCcY4EUhhFJOaGBEMhjhmRwDooIholKjIQ4JwpJjoxKUHQxDBkYI6IAIbAHMAlQJwYnEFJRjpOVAwhgwUBHByY2NUkUHgCgMyUE5oYlKDROMeCECOjAGxalhzwBUEGOEdFJhzpOVGAxjBw6GbNgDnKApgqxFRMaNhCngCkydMglAZkoANCkVUx4wOCZKCc0KTjHQSkMMUI4MCaFJygwTlIZoUmEEJhzwBSZDKATwhOIaAHPAldSHoYIY6TFBkIoCDGCKSc4KAMKSFJgEcyZKCY2KTDHQhzBgpJjwxMIdBKDpMVAHBgjQpKUnACgwcGBOjEwh0nGMGSoIMpJTYgIx4ApCMFJKOEeGAENAFBgEpCMlRMbFJhTQQpkIqJjwoAp0EoMBlAJkcnEGJSg8TlBkyKEcKCQU8CUGDBSAcHJhToI50nKwQykEUE8MAdEJxzpOUGQhQzQ5GUGicoMhFAB4cnENgCHgSoIMpAPGwhjpMVhmBwjgxMIITlBkIYIyVEx0cmNnQykIMqJzx48UExs6CMcDHDMDgGxiYc0SlYQRQCeKCQc0TDHAxgzgpgyMTjnScrCDKic4MTDCEhWGEMGcFBEOhiHgigMwVkhsoJSgnNmicQ4GMeMChCCkhSeAHMBFAJ4pJBRCYcyCKGcGDNmgRzxOVhBlAB4YAQQmKDIJQEYFANigDmQyoA4UE50YmKiYQ2TDmQhjB4pJzQxIOaJhwzBSCeGANiEpSZAKQDwoIoxMMdJSsEwOAdHJhjoI5kIoBMjk5o2CUngSgMIqJTYhMKGObJCgyCUBnCklEEJig6SFYYRSAeGAENAFQYJQCcGBEGIyk4AVghFRMdGANmghzAZWSnRScQ2AOdJyoA4VEhockGNmDZMUHAhwjg4BoYlHNExUGCOEdFJhBCcoOAFQJwcnNiE450nKgjBSTnBQBTpOUGQykA4UkwhsnHOAlQQZWSmxiQQ0TlABSYAKwTgwJ0ckHOk5UGEOGeHJRjRIOeDKSc4Uk5s2AOdJioIMqJzwoA50nKDABQGdGJBjYA5wEpCMFJMaGJhDQJSSFJkApDMlBMaHJhDQI5gwUk5koAFNko5kIpBMFJObGJBzROOcCKQDoxKIIAUGQSgA8UExoYmKDhOVBmBwToxMOeJxzpw4EMEeKATggIx4EcyYKScwbDHNkw5kEoDMjE4opOaNBFAZgoBOjkp08ZKTAQ4JwcnNmgSg8CIZMlBOaFAGNExsycFAHMnBgzp0AY0TjHDJSTHBQTZsAqMAFIJgcI2IEbMhFQRgUwdHJBDwYpwMqAMjk50UEY6GICeKSY6IGMeJhwjwoIwZkcIU0TDGiYoMGRwDgoBs0CVGASkE4KCaFCHMgFBgIcI0KTCHgRjIZYTnhic2bAGOmCgAwUk54UEU6AKZDGMGjJkpJzY5IOeJysMIcI8KTCGwRzIBUEYFCNiADnScqBMFROeGJxTxOOcDKQDJUSnRQBzIZUEYKSUQUmFOgjhBjhmTYYwQopIUHSYpMGBwjohMKbAHMhDgniglOigFJwnKwgionNCBiGQSgwGUgHBgBBCUQ6EWABlZMdGJxToYwQZUAeHJSomNDE4xonKQgysmNDk502AOYCKATw5MbGJhjoBWCYKSY0OSlB4EQ4GOAeGJxBSUc8CUhGSolNikpQdJyoIyIGcGJxgzopMOeAKQzA4JsYmEPAlBkEcA6IEdGBEOgFQJgqJjQgI50nGMhlJOeEANCAinQigIwVExoYkKDwRUGEKGcKCU2GIITDHQCsIMqJzxSTCGiccyEVAGCgnNGgSg4AUhGSomOlBKMbJygMMoAOjkxo2TingykEwUk5sYlHNExUZCKSY6MSjiE4oAx4nKDARSEcFCENExUZAKyc8ICbNk454EpCDKADowBs6YGMglZOeKCUQ8EMcBKQzJQTHiglGNADGTgwB0oJBjZKVACHScpDDKATwpOMaJykyCVAHCkmNCkxQcCGMBFIB4YnFOk5UYCKQTw5MIKSjnASkI4MTmhScY8AUGAyonPDkwxonGDFPAjmAyolOjE4ghOUGAikA4UAGhCcoPBDBGRwDQxIMaJyg4CUgHigkFNgingSoI4KCdFJhzxOUGAioA8OTCmyUpPHTwI4IZSCeGJhTROUnAhwTg4Ro6AMaAKgjI5KaGJxTRMUGQikM4MTGxAhTARQYODgGjZKOdAKDARSAeKCcQ0TDnQxwCkEErJjoxMKbJxThkqJzBSCIdAGPAFYRkoJThSSCmyYpMhChmigkNjAFAYRSCYKgDYhGMaJxzIZQCcECGNko50IpJCg4EMEdNk4xsAcyAUAnhwBRSUY4CUBmCgM4IAKcBKDIZQAcGJxTQJSeAGCMlABoUAU8COEZKATopMIdBHMmCsI8cPGwTxSRjGicpPE4wZwpJBRSYc6AIZMDmTxsAQ2SlQYZUCZEBEEJSk4CUhhihHRTBo8CUGASslNjkxs8EUmASoEwKYFCOigDHSQrMBFIB4cmNiExQeDGCOFAB4QAU0AVBAFhOeHJhBSUY8AVBHRATQoBs6COZDKiU6OSjnScc8AUBGSsmFANDACGyUpMglQJwUE2ITDnScpMhjhHDYApoIYwEUgHignNGwhTwBSGYKATooBs4GMZMjk50YmFEAFMGSgEyUADgnBQTRsEpMExSEaGJzZsnKDgBSYMlBObNACHQRDoZUSHhgBzROOZBKQjBUAaFJxjII5gMYM6UkA54IqMAlIB4cmOnjoxKKeCKTgJSTnBgRDZOUHicqCMjk4gpIMeAGMGSkMwUEohoEoMglYBkoANCE5QcJygIwMEaGANmyYY4YKQDhSTGigmpSYc0AUBhlJOeKCY6OTlBkEoCOik5oYlGPAFJgwUkx0YmFNk4poAsJzJQAbNk4x0mKQzBQCeHJRzpMVBglIZwpJTYhOUE4x0AUyGUBHBgDRsIU6TlYJwcE8MSDnQSgwEMEcKCc0IAKeDHCMlRMbEBNnQCgwYKADxsI2ITinQRwjxQSiiE4oIxonHMBjBHCgA0KTFJwEqBDKyY4KAMaJioMMYI4KAKaDNHQykIwVEpoclNmycqMBFRMeEBNmgCkM4KGcKCc2MRlJoM0AOYCFCPDBmzQBSZJi0EwOTmhicU2TFIYZQCZEAENhFAZgqJzJWSmxCUc8GMZCKQDopOaOgDnQygA6UkQwpKOeJSwmKTAJSAeFAGEJxzgBWTmRgDQ5MKaBGMhFIJkclFNAFZkIcIyUkghsmKDwBSYMDgHRiYQ0AMZDLCc6MTCCEhSZBKCYrDBKic4UE4pslKTgBYCEVEx0UnFPBFAYZYTHhiYQ2AUHACsnPFJKaGJRToQpgyUAHSgkGOk5QZDKAjJSSiikhQeJikMQwEUgHRicQQmKDgJSEYKiU6bCGOADmQykA8OTDGicc8CUgmSklEGJTZ0MoBMDgnRyYU2TlBkIoBPFBKIKSlJwnGMhmzJSTHignENk454AoDMFJOdEBGPAFIYJQCaHIxzQBQZBKQjBSTGxSYY4GUgmSgmODAjHSUrDMFAJwoJjYpKUHgBzBkqIikIyMCbFJRjoI5gyOAaGJTRsMpDCHBOFBOaNgFB4mKQzgoRoQnHPE4pw8UE5wYnEEJhzIZSCYKADZsEU8CVBAjHBATgwAgxMbPBlAZgcI2KSGzxgoMBlJOcHJzZoEoPAiGDw5OaFAHPE4hk8UE5oUmFOgDGTBSGYNhmxCcY6EUghmjJ46ZFDENhCmASkMMUwbFJBTwQxkMsJjg5OaNhDnDAoJwpJTZowKeJxwzgoJooJRDQAh0wOGdNkwgxKMcMlAIY4BoQ//EACAQAAMBAQEBAQEAAwEAAAAAAAABAhExIRASQQMiMiD/2gAIAQEAAQUClFPDrzE2JaLxXWkzo8Q3pMlPD+ysKYlolipiW/H6RJVYP1xOF1nySmStODekzo3ib1zJTw61OFMQlhTEtH4myZH8icLoS1pYXQl8p6TI/B+kSVWHXM4VRK0zCmJacTYpKeHRLCn8rz4vCqJWnC60idH4U9Ikujolg+ZpwqiZ04NkyN/k6KRvDNanCmJHiKr9ESN4NtuJKrDrhYXQvflCnThT0iRv4pKozRSUyZ0zBslH6xdczhVYvW5WK6JWnE6JXxikbw60sKYvT8nXM4mJa+KnpE6NpJ+kSU8OkzhTJ9OKnph4inrmRvB+iRTOufC6JX6MWP0iRvCmRJdYdczitkrTMVMlaPwfpKG8OkrCqP6lg2JaeJVWkSViGROFUdczhdezOnFT0idK8W65RTOkrCqM0Xh+yVg2SvV4nWkTo3g3rlF1h1rwbEtEsLekr4yZG/ydFODr5JTEtOKnpMj8Tekzg6w65WF0SjhTJnTib0S8b8JkqsM0zB0YfynpKH4P0mSqw60vyVRK0/lVpKNH6TJTw/vCmJaJeVWmDYvThVaROm4N64kqsPW5nCmL0XhVErR+LSZKeHXM4U8EZg2Jb80SODeuZKrDolhdCWiWJslab43pKLefJWFVglolhbJWjzGxIfhokN4etysV0StPEVWkzpXibJRTw6SsKfvRLCq0md+StfCnpM6Pwp64RVYdJWFUL0Xg6EtOFPSJKeHSZwqsF6JDYlp/G9Jk4P1xJTw64WKqF6+FUL003SZG8OkzhVYJfppfkutEtODekyUP0mRvDoliqhLTiqtJRpTJQ6OkrCqwS15iqiZ04O3vE3okcG9cyN4daWFUL0SKekrThVa5kbxbrmcHWC9EsKfqWnCnpMj8OiQ3h0SwpiWnCmJHBvSZG8PWSsKrBf7PiuiZ04myZH4dJnCn8SLoS04qekrTg3pKG8QlhVCTYvC7JnTcKeihlPRI4N6TI3h1qcLoXolip6TOnFT0iRvDpKwuhetLCqEtOKq0mdNwfokN4dJWFslaeIqtEtPEm9Jkbw9blYVWCWuckutJW/KekyN4N65nCqw6JYVQlp4UyZ0eIb0mSnh0mcKoS04qrSZ01JOtJXyUPwfpMlVh0lYVQlrSwqtJWnCnpKG8OkrC6w65WDYl8b0lG/lbrSKeHWlhdE+i8LrSZ04m9Jkbw65WF0dcrC6EtPMb0SNw65RVYT6JFMU6cKrSVpuFPSZwp4danB0L0XhVaJacVPSUNnR+G6TJVYvW5nCmJaLxVRK04N6Sj9HSZwt4dEsKZK04Nkzo/E3pMlPDolhdEzrSxUxI3E3pMjeHRLB0ZoliqiVpwbJkfg/SZwrw61OFMS04XWkTo/E3pKKeHWlhVGaLwdCnW/E3pEjOv8joQ6w6JYVQlpmFUKdOKnrmSvPiWFVh0SwdErTip6JDeG65WFVh0nwqhLRYU9JnTg3pMjeHWpKZ0SwqtJWnB1pElPDrlYVWC9JWFUL0RVaKfjeikbw6QsKrBLRLxsS04U9JkbwbInDSV9SKZglhTInR+DekyPw60sG/EtaWFMlacKrSZ0fgxIb86JYMwXg3olrfip6RJTw65WFM6ZhTJnTg3pMjeDekSU/i8KZK0XgxIfiIkt4dczhVCWiWKmJacK9Jkp4dJWFVnx+HouUxeiWFUTOjxFPSJKeG6TJTMJWKqEtOK60iRvDrw3DrU4MSfxsS04m9Igp4dczhVC9EsKeiRxVWkyN4N64nB1gvTMGxLTMT9JQ2Nikb/J0mcLoS0XiqhLTg/SUN4P0mcKrBetJH9HR0Xg2KdNwqv0TI6/K1smcKrDNF4v0Ja+KnpMj8G9c+FM6JYNi+OhLTg/SZHWLrmcLoXolhVaJD8TekyPwfrlYU8F1FMS04UxD8N0lDeHSVhViWuVhd6StODekobH6TOFPBekrD9YJYNiWmFMlHmN/oiC3+T1tLB1hPphTJWnE60mRvBvXMj8OinB0Zpwpkr5RKG8H6ROF1hKbOFUStP5TJkp4bpM4U8OtTipiWmYm9FJwr0mR+H9nwqsPzokkrrSVpuDetIrw6SsKrBeiWFUIuvnFVaJb80mTcT9cT+Sq+LwqhL9HCq0iRvBkyN4dEiqJWnE3pK0fg3pKGdJWFVglrX+qpiRwdaTOjeJvXM4UzrU4NiOFVpKG8W6Siqw/qWDYlolhdEzo3ib0lG4t0mcKoXrSwpkrTBLTMKolaPwZElPDdEsKrDrzCmL04qekTo3g3pMlVh0SxVQlovFdaTOnBvSZH8mcKrDr4VRK04N+yvaeD9czhVYdaWDoS04VWkzo3g3rmRvDolgxLXmJ0StODrSJH58hFUJa0vyVQlpw/QvCnpM6fxvRIdeP0hYVWGElUL0zBvSUN4m9cThVH9SwdCWtLCq0mdOJvSZG8PWJYVR1rxXWiR/KrRI4P0lFVh62l+SmStOFPSZ0fib0mSni6SsKYvReFVpK04U/0ShvBvRSN58lYXZM6eIb0SZdaROm4nWiRufEOsF6Zhpmvib0mTg/XE4XWHXKxU/iKolacVPSZKrDpmDfxeFUStGb5KH4dJkbwzXM/kuiVpxUxG4m9JnCnh1ysKoXrKYjidaTIx+kop4dEsKZM6cVVpE/JWm4qekz8YlhTF6JFMlb8b0mdG/yt1zJVYdJWF2JaeIb0S0fib0mSqOinE2dZTJWiKeko3DrmcLrBeiWFUJaLxVWkzo8R0he28OkrCqEtOFMS04N6JG4P1pDeCWkrC7IWnE60SG8HTZxU/ZkbwfZRTwS0SwpkrTib0mRvFXriMLr8peiWFUJa8wt6QtHxvSZG8PW5nCmL1peUxTpwbIkbw6SsKrDNcz+S7JWnFT0mdOFekop4dczhdCWmYUyVo/E/RSN4iZwqjBJIutJjTiutak3DdFHjekSU8N1qcKrBLXmFMS04rrSZG8XSJwusOuV+S6EtOJ1okbhukop4dczhdYT6ZhVEzpwb1qR1i/6couhLSVhdErTiqtJnRvDdJQ6xdEsKolaZiuiV+h+FPSJH4dJWF3hPolhVEzpxXWkSN4N6TODZMjeHSJwqhLRLC2JafxsiRvB+uFhdYdcrC6M35T0lDY3pKG8OtThVCWtLFVaJacG9aRXhukzhVYdJWF0StOFVpKNGSsKefJWFUL0SwqtJnTib0UjeLpKKeHWlhdErTiqtczo3ib0Swb+N4ukzhdYJa8xOiVvyqJkbxP0icKrDrS/JVErReFMidH4N6TJT/J1ysKoS9zFVEToxvSZH4N6TOFVh1pYrola/EVWkyfxkSVWHSZLrBLReFPSJ0fg3pEjY/RIbw60sLola+FVpEjeJttqcGdahfJRTEta8LolacKekI3FuuVg3h1ysKolaLxVWkmj9Jkp4dJnC38RTJnTcKekyN4NtkrCqw6SsKYkcVPSVo3ib0kdHXM4XQlolhT0lesp6TI6w65WFVh1rwuhL5T0mRvBvSUW8P6vD9CnB1h0Xg2StOFPRI/j9Jkp58lYUxTrxJVW/+IRVYdanCmJa8wqhenE2Sh+DeiQ3h0SwpiW/G9InR+DeiQ/krCqJWmYU9JnTg3okU/kobw6IbEtODekofg/SJwp4dEP5Tz5I2StODrRIfyEU8Oi8GxLTiqtJQ/iHWHXM4VXzMKYkcTeko3DokUzpKKoXpwbJnRvBvXKKfxFUSteYVWkrThT0SG8OiQ6OmYUxLTiqtEjfkThVYdaWDYvi9ENiR/GyUV4P0mSnh1qcGL18KeiWnBsSG8OuZwusEteYVQlp/G9EjTdJRTw65WFUKdOIlG4P0lDeHRLBsS/TSSKrSZ0fg3okN4da8GxemYmxLTxFPSZH8lFPPmYUxenF+hLCqJWj8TekyN/kb0mS6w6JfkpiQvFXpKHiTekyPz5CwqjNFiV1olpwp6RJTw6TOF1h63KwuiZ04U9EjgyZKeHRTg2YLxU9JR4inrSNw6SimJaJYXZK04qekSNj9JQ38UlsS0zBvTCqEtNKrSJG8G9cThVYdcr8lUJacH6TOj8GRJT+SsKrBISSKZM6eJU9EjcOuJwqsM1yvyromdOKq0mRsZMlHSVhTF6cKYlp4N65kppHRLB1gloliuiZ04qrSZHWHWpwbP7mFMS04m9JXyZ18TeuZG8G9InC6wzSV+SqFIsSp65Q3i3RIdYdcrCmdP5T9S03ynpElPF0icKeHSVhdCnTib0iRtJP0lFV8SwdCWi8VUJHDSUOsT1kThbM0SwqiZ18VP8ATmCng9ZE4XQuysKozTg60S0fidP43pKG8W64nCqw60sLolacG9InR4h+krDT+zOF1gvTBsSEU9EjTpKKrDoliqiVpwqtJQ2MmSnh15ibJWiSRVaStH4N6JG4Ps+DZ0SKolaPxU9IkbxbrSwbOtLCmJa2UyZ08Sb0UjeuR+D9czhVYL1ysVUTOixFPSUaNkot4ukrCqJWiWFMSP42JG4aSinhjblYVRK04qrSZG8TIWDZ/ZWF0JacLrSFo/FT0lFP4lhTwQkVRM6fyq0iRvB+uZwtnXKwpi9F4qrWlpwb0mfkSMfpKKeHXKwqhe/KZK03DdJQ3h1wsLoS0SxVWkrTg2TJXiJnBs/srCqFOi8VPSUMbJQ6z5KKoS0SxXRM6PxU9cybh0mSmJaJYNiWnFT0mRvE3rlDZ0SxOhenFVaSh+JvSJKeD9H4dEinh1ysKoS04qekycG9Ikp4dczhVYJa8xVRM6cVPXMlPDpM4U8+JFUJacVPSZH4P0mRvDrmcKoU68xVWkTo/E3pMlPDpKwpiWtLCmJHCnpMjeD9Jkbw60sKolaZip6ROj8KekSVWHWpR1pDeHRLCqJWnFVaStNwb0hFVi65nCmJaLxXekrfj9EhvB+koqsEJFUJacVPSJG8G9JkqsOkrCqEtMxUyZ038jeuUN4dJWFUL1pYVQl8qtFI3ifpMlVh1ysKoXovCq0mdH4m9cSVWHRLDUhLE2dEsV0StOFVpM6cG9cyU8OkrCqEtOF1olpwb0SGdEsKrBevhTFOnFVaSjg3pMjeLrlYVQvReFPSZ04U9Jkbw6JDYvXPhdELflPSZKeG65nBvDoliuhLTMVVpK04N65kbw6JYN/KfxLC6FOi8VPSUcKekyN4dEsGxei8V1olpwb0lFPPkzhTw9bSwpkrTit6TI8SfpKG8OtLCmJacGyfTxKnpKH4daWFM6JYqekrTxKnpMj8K9cThbw60sKolaynopODZKKrDrlDYvXh0XhVCXvCnpM6Mb0UlPDrU4WL0zyq0mdODekSN4dakbEvV4VRK04U9JWm4N+zJTw9YlhVCWmYUJacG9Jkbw6ROF0L0zCnpKODrSUaP0SGzpmFMlaLwp6TJxMlDf5OkzhVCWiWDsSwdGacG9EjhTIkt4daWFUJe8TZM6eJU9cyN4brmcKfxDZK0/m6KTgyUU8OuVhdErReFPSVo/B+kSU8OkzhTwXolhTM+U9JRuHRLCn8hFsS/T4qrSZ03FT0lDeD9JnC2L0Swqj0p+4fymStODekSXWHXM4VRPrzCmJaLxU9cyN4P1xOFUL0zBsXrOiQ/kobxdczhdCWmYqZC0fg3rSG8XXM4VWCTblYOiUMbJQ+dJWFPPiRVCWnFdaROj8VPXMlPDpKwtiWiWF1pM6I78bEjcG9JRTw9Ypwu8EtEsKeik4tJkbwfpKwqjoimSt+NiH4bpKHWHSVhdYJfoSwqtJnTif+zUlM6SsKYlrXhVaSt+U9JQ/BsSKeC9J8KoS35VEzp/ym/wBESU8PRLCmZovCmStOH6Zwb0mR+DZKw/XnXE4f5KJnXmDZHymRI3i65WFUda8TYlpxN65nRj9JnBvDovCqEtJxK60idH4N6SUx9U4VWCWiWFUStOJvSUU8XRTg2dEsHR0XhVaKdG0lT0iPG8OtFMXrzCqJWnBvRJlVokN+P0lDZ0SwqsEta8VMSH4NkwN4etyinh1pYNkrT+VWkobxN65RTOiWFMS0XhVEzo/E3pKNw9JnCqwWtpYqZK1/xsSH4m9JnC6wRPhTEtODekycKekSU8OtIbEtMwqtJWnE3pE/JnR+DekyN58lYrYtozyq0mdHxvRDrF0icLrBeiWKqEfxvSVo3ib1zJTw60sGzNOKmStH4N64krz5PhVGa0sV0Sv0cW65RTw3XKKrDrU4qZK0/jZM634NkyU8OuZwp58nwqtJnW/E61zJTw6bg3+nMjeHRIdGaLwqhIQ60lD8OkrC6wS1pflVQlpwbJkfifrmcHWC9FOFMSOFPRTp/G9aRvm60hvDpJdET+j/AJG9Jkbwb0mSngvWlhVErThT0SOD9JQ3h1rwp4L0SGxLT+VWkQU8Oikp6RJTw6JYNnRFUSPhnrefJnCnhmuVhdEzpxU9Ejib0mcHWL1tThdCWn8bEcG9JRfnyUUxLRTiqtJnTxKnpElPBvWkN4vW0vyXRM6+FVpKGNiG8OuUU/eklPSZ04N6RI3g/SJwbWxJTw65WDfuacKZK04U9Jkrw65kusEtaWKqJWnFVaTOjeHRIqsX9lYUxLTibEtODekybh0mcG8EtanFdETo/FT0lDeGtuZKeC9JWF0StOKmSh+JvRSN58SxaJaZibJnTxFV+iJKeHWkVWfKrDrU4UzNa8KetI4V6RJT/J0SwqhLRLFdELThT0mRj9IkbOiWFUTOvMG9JnTi3SUN4dczhdYJacKrSZ04qr9Ez43g/XM4N4dEsVMzThT0idH4N6TJTxdEhsla0sVVpK03CnpEFPD1v84VWCWiSR0hYXRKbeYqZM6PwfpKG8OuVhVYJaJflXRM6+FVpMjeHX+RvDolhTEtfFdaROleDJkp4daWFUJa0sKrSZ04U9Igp4NtuZwpi9EsHQlpwp6QtG8KeuJKZ1ysKZK18LrSJ04m9IkbwesicKrBaxLE69lYVQlovCq0lb8p65Q3i6TOFVgvXKwuiVp4lVaJGj9JnCnh0mSqF6cKrSZ01JN65Q3h1pFsXoliqiZ04qrSZKf5G9JRp1pYVQlolhVaQtG8G9JkqsF6JYU8EiSmTOniKrSZHWLdcrC6w6cTfymJaLErrSJ0fg3rmSnhukyVWC9F4VRM6cKekycG9InC3h1ysLoS18KekyN+N6/8clPDpKwqsOiWF0StP5T0iRvB+kzg6w6SsLolacVPSZ04dczhVYdJnFTEtOKqJWnCnpMjeHSZwqjNMxOhLWhLReKmTOm4V6Sh+D9crCqxL0SwdCWi8TrSZH4m9F4fo61OF0JaLwp6JH8r0mT9HSUUzNF4rolacGxIbxN6TOFPDovB0TOnCq0lHBvSUNnRL8joSEi2JG4U9akfg/RLCqPWJYXQlpuH6ZxVRJw6TI/PmDYvRLCmJacKekzpTwb0zPs+F0SveFMlD8G9JRTz5KKefWxLTib0lGm+zOF1h04MSOKq0hD8G9IRTw6JFMSEsKYl8bFJTw65WDYvSViuhLfnTGU9FIvBvSUPw9ZmFPBeuVhdErTgyUOsG9JRT+IqiVpxVWiRwfopG8QkNiW/KZK04qrSUb8lYVWHRLCmL46InRvE3pCG8OtLCmL42JfG9Jkb/Kb1pYb8XiqhLTg2L5//xAAUEQEAAAAAAAAAAAAAAAAAAADA/9oACAEDAQE/AQYX/8QAFBEBAAAAAAAAAAAAAAAAAAAAwP/aAAgBAgEBPwEGF//EAB4QAAICAwEBAQEAAAAAAAAAACAhEBEBMGEAQDFB/9oACAEBAAY/AvdlHedbDs1g3uvylAw7NY+CsSvzzm87+ygcsEd5CprAMOzWDvTWAvM3nWzrAObz7sd8g5L13k6wd52suggZ1g7yFYhaa3IH+SwU0Tm86OTeTRsEDlgjZ1ieBeY6K0vf073WdYBnWNalaWClA577u5SgYKVrRsKlDyHDCsG5vPlK0dlSgvM9BA5sKwbCsQvVpfxUDOsBf8l7+zWDYKUT1Le5sKxuR9BA5YVsYI2FSjsKwb13kFKnnuGjcv8AYet7+6ryCNmtalH3azQM6O867zL/AHejYLZYI38VY/ZQXndeTR9JHedXPM6wbnvl+nc9BByWFYmsa1CO57Kjhd12ChDeflo+7XrvM2C1dCsa6xPAvOtnQr3C76jc3nXeSXqxrR3kFurAr3Nzm8/vulz15/JZo++U1g2C3IHsoXF/0Kwd7r92anh931jTeTR3n3ZRveprAOWCOzrE8B5i8z3WwR3me+R3k6xv5LBSgvPnFlUoLDs1jWpWjso2ClBeTrAP4LnvuzWJXn+Szr3D7C8p4F5CsBybydYjkXn4GHTcv3ZrWpRsKxKC8nWPrrHl9CnnuHWJW9zefu7vrBs0DNBeysaO7lurG6geu/gcsEbOgYd8oRv4qwF5/DQoLm/d1MFKCzrAOWdfwLydYC8/G/33ZrHxMVFYBzeQWro8jnnL9340bBG9XAZrQpQM6xpZo7yaCzrE88zRs0Dl63DNbV6gcvyla0D/ADUvie5xeQqaBnWjsqELBSgZ1ia/nuTeZf0Oe+7NYBnWA5N5BSgvM9CsHedNYB+cMFrUqeeue62dYCzR3nTWJ4DNAwqUF5OsGwqUDDsqeBfwXnXefiWruuwQWalaXrvMvUxRs0D+JaeTeT4DnuthW5AzW5e5srE1gLDuphWJX5rXuSzoLlmpQMqwd5BStalfnuSwRub1s1peu8ioW9/h0HNSO8gjvMP8lgpWtG9FzeTWujeu8jeTrH4Fh2aO8+7uU1gLl+7NYO8mgvMuLzrYVNYO/wChWNynnmaB7ryN51sKxKBmt1YPoIOS9d5BDWJQXk6wDOsGwrAcJ/oI2aB6UbCprHuSzUrz/NnPc9eZfuzWAcsEd5npVgOSwU1jXWJ4DOsBeTQObyCOwr4F+zWAcv8AQR3k6x+BeTU8C8mvObzPfovJ1ieBedz90ufMvkvJrWpQWHS4DPgXk18CB/Ejetywrci//8QAJRAAAgMAAgMBAQADAQEBAAAAAAERITFBYVFxgRCRobHB0eHx/9oACAEBAAE/IYN0SCT8glDhDn6EXQiRWGl4ML3n8iJ2KX2NXJukSKJAlw+YzcGkSX/BAJWaQJekSEFbEj8ycNJOjhDrMRM/zOYJzbL8jYpfLI6QragQg180fMckkORjQjfYheTIa0MBawTOMEnoUJeEcDCawyDNiC2KWAvYxCdn/oDH/wCiRKwlcIfCcGwY3Y7T3DXkjdkFLSB1XkctipEToJ3RSRwSYDVgdK2xrSyIELNJbdka9GeBM2ERhDnXA5uhwnRJ6JLYhBy1kavSukwmgWkIRgkfQn6ETOiS8CEbZciO9EXsvyNiF7ZZARuQkqGb9HyDcKiBj/iKSLbFJdkChomwQKiWWUMfogk8Ez6LpEJhtzM2PTCEeUxPcagx+hRHwTOsJbeGDNtyRWGoX5mLWXp4dElBBCmq2I7B4bYPBRlCPmOmFzwd3I/8Av2FLdkDsjcLRHREKolVgpvolHhfgWT+M0vJGpY1PsSBElE8/Qa3hDR4ofhhJaUQhjZD5BSwhD7GIJw6GvCElBK6w5QZegwtkJTs12Qr0grkSb/AlqT5iegj5SXwkSWSZoasgXZDh0UvZP8A0DGghRLDjYaHhCR4cg/5hDQ19CNaQKELgESUO1H0HGhrCIpkLDVgShvEaliPdinyMRA/ET6ErB6Qkt4Sv4M2+iawqw79lAiQlLEiingJgo6DgZ4JFeDK4ce4H3CnzP8ABDOgxihA11NHzDameDm6IZMRbktvsgt6Iq0UlfhM4QpCjoiVHBLbwZJZNvJg3p9BaoFJ2VwJ1GCTCwlQOCrBpWR2IfZb8mR9EXYdgShgYXL4TFTUR6IyLBlsf7HDeDJGQr/AITs9pkXsjbSZNoIpCJK4JHgQ8JYmBKSS5nbND0zciS4QlTsgr6GegoS8Ic30TWNxseUV6IEciTby2LXy+SGmvyPcR4CfMPUDgJ1/Dn14FJ2S2a3pk0OYj0JdL+kzoROg5+jnDJCzvSvsj9ixWYmkqBrx/khMYiZC/wDoe0vCHgGtkfkIXZLbywn2I6CTaEISDNg+AiMVDSiA31JEvB0kjLi+dfgmXZArSCkWQiNCalhK6RSXwS/CORiFG25Fl2yNCCSIDhR8Y4XikfIT2G4juRkFvT62X5GIk5ONCgqUTVwLywgl6HJ0cj4JXsbbzyQOzItHUCEhHSOT4BUfH5pLwNEMZsQ29MXIk27Yvu8kSD5CqjJwKbljgSuWcjIF2W3b/FEjQ4EgTVgc94NrqkOUpEdBJrCXSUljrDmETsvsFp2RUEbESoneA/0KToZNwcwS7yNiiyxGhBG/bI4ltA9+iPgldEjl4PC8PI53pHrS27I3ZDX4CSLXWCe3hKWXhMHRP4cs8yQ7VkaNCuASUSJaDm6K6kSEzl4NEbbWbHpDXJDf0UiiA9hJBxsJUslIMYhhjeVlt1pGvSJQ0cwIjI4wbXg09B79Diklie+BtLInyyJzoUnZfcKW9ELyCPAoFtCw+AldQ9+jBm0Nt5dtnfBarQn4Di/CrwJEjo2PBoksaUsjt6LUW/bEpHJDQa9CSBTRgnXg3YwmfkL9x+wIVsQIWjIEIglRgndCpXFDXjgsQQpoGhpg5EpdkAi/yEvoSReifMNjwZNkyS6dC07NeWfaRp6DmElEHUYOe8HB8Ic/RXLPZKpZBJYzuQXrwKXtktuzwLI6WmcKSFhMhYN9CUpL6Odi07G23bNz0wLRL2CEOM65LBwTuhL6DSRjedkcTpA7IfkbPbYhAkuhIRBgWGxgmwcxyBKdjb7DnaQUtEnEiBBJSz81PAk9cHmGlhuw53otYQk5BhaDm6EkkcE6FhCvCixuzQlkfsvsIk8nHoSVCpIJkYJ88EroJPRyvBCvkb0HSWNmsit6eyH2mxaeWRuE7GNBGBEzjBqeGLpD3OUaI2bHpiWiTYjYcC/M1DomN2CMjGNZHbT6BJt2RyMGRCaKJaWE9vBpJwSujke+CH2OWNJwITYEwEzjBKKTKJn0USx4DSI0sPx0ScXJF7OH6JXRCSOBzwsJ04NmIkWRwwlP9F+R/mipomY4Salh6gh6B7dElsZJX+C82MbFixErTfli/cgoSoRRRJSw0PBx6PxmUxUTLN3JiaJNhKE9Br9eSF0IY/RK5eCUG0zNTThaJtvLIe3n9xoirgxcGh4N6eEoskfaOexkW6ROEJNvytosJV4UvR8hJ4BCFyM0PSN5Em8tiFOEfzGSXgmCa2JSUjnlkVvT32b7E+xg0OaEQC6OD5hON4N9Sawksb/ANE7ZD2G/6NNkXsthaKVCFrCeYw5GEU6J/XBdIdew27NI0vSGC/Ij0TuESujNUiR0Osx4DSXSQgk2FJ2NOEm8ESHEw3MIdK/QiX74Lu052kdaEmEmR7ULD5RwvRIJrwQrGMQWyCjnBRxhvoQSsLZhLbwZC227w5GITss4vZBWh2BQceCVeEoO2J7ZB7G/o5wgRySPIhn2LGjhWkmj80tLCXeEHwNe8MWIT8kmIPZFS0TPBX+w48D36FANbokvAsNuZiipejDgQpOxtQkGInzCL4RUxPs/4CI9aXZbZFnWRZojMIkQnRP6K8CGP0ZAlRtxoDiaIxChw/nhRwM0rBnOECsa7Zg2JTsbfdi1vSGi5oEURxLB/qOkvBpTJbIi9jN+zmaR40I4lokskbnyZD+kFISkIsk7hYTLwgt0iQcgVZvA2CJPJGjRJuxEDo0hvUVRSR8xJYdJIyR6Jy0gXZo+4glSWdEQp4JMwnXhKToZnmYvuG33H2CUv/wCNyLQ5owSvoZA0XA6UZguz3/RwtLQIKjxE0ShVQSc0K2uhuYy/wDMI3Y0/Y+sipaMqIBgwS7wlL0Pe8RfLFodt5IljhaI2EJCHNCUnL0jUBjUJEiSYwk3CU6fkuFKd+Bu3bZz9IULRJeRIl2cCG4w/iiYJrwKWWXApW9G4aW3sUnZ/wBgTvRCSCalhLbz/Y4QzZFYWvYjvyyNYz//AAGGCUIRLSwiDSVCR9HIEJZJ5ZoYxLRf0EBDQe/RD0HDwnthtBm1kGBlyscvsItb+Ak1FaOsD9Kj4I1sK7wYa7OdpxNEbYLSvpohgsgK2JKgwLD5Bwl0Nn6OYO9z4Hd+s0Mf2Em2JgcCHsE4+ETOiS2RLHbdsjtjByK3si9m6RIFAToWEi8Hh0PaTlDx7LbyfWRI0MqEUAncInd4J/CPgGQw4NQ0DRyQ1yJOBWyBRxr6K3gqSYOCe+BVhIK1n2Et9iJ2yLNHNBEgmUMJt4I8CRM6OVjI2Gl//BGoWi+4jwieYwl9Ciqwc8Ih6klLBvoUeEeRy/H4HL5ZHnkzLRJ1IiiJ8EoSqaQ/0/EIUa88kVtMHJEuxBUwJEIhVhhWG14NrRKORjx7Gr8sgWMC0SdQlGCd8BPngcehN0FOTIQz7CFL0zrS6LZHomf4KkRIgSJeCEsviLyEbsUsRssfgoEQqOPg38DaTwkO9TlDJBOxSvkipaMhEocbBz9FL0N3mCqqJ0YNQbgMY52QBmEqIENFJkUoRwoSXRR0ZODnF8x9xC5CDNInsIUogbAiAMaOCRLwlMnBjy8IQ+ws8s0kahaJOIRQDoBK+hOPFHwE+jqpGlPJF7I8LRKlopCehIKWDMbOCEwx7IvIJV5IbeWfWQ0EbdHzHYwlS8JXohjdeBCcuyESOypeTAtEm2ISv6f+gOfoojIJnQ0qRgx/s0BpZSHdEVyxwGsVK+Tib+NAuAvQIQfITXgdJ5J2P8QgwtCnyMT2HjYpb6Kr0T0vxg2pXSJXREk09IUnZLbti+xEoFbIJRTGCWVQ5Q4JXLHSZY227GJSx7oTUWxSVvLJ7Po9iEqKRK+hW9GkjHtZUaWL9y4tZ9Zx6FYRGEnoSfQ2ugmdHIx4Y8OyO3piQk2rTF/SiMDX65FHiSHP0TXgZL6H6CJNnM/4Npexm2czSFQtEbEDgrgObocL0Ofo3MXKG8zIkmGHkVuyB3+Ax6IR0WEsJVqhloSrOZ8IB28tipOSpwJYCSSJaWHxFBz9D4l4NJPklyG5pDhCb+WR6ON9/FDoJ8cCRLwdA3oTZiUrROXZHkQUSIGkpVWHyFIOYrl/BQSS7CFXpChaOaDGTf7BvqfJI+UnabwSsv4MJK6kNcuPzPsGb7ke22TITswfhtj+hr9FdRN6ORiQlMzshiCb3oocQf4hIlYjAsNTIKXgYLpEbvg9hsg9kMpaK4EIVP6SOF+BQjmkMb6JbeCk7NyJs9I0aE/nYhI5P+2QBQEuFhMnA6SM2kjUhCVo59hEyzg1yOKggnULBusISYNL8iLCW2RJeilS0U2KTYUTeivEkNqGDeDRBs0k+Aex/wAhC17JdhFlhlFoygSiWkfOJrwIY/RlJsDbYgzogxyyHErbEp2IzQ56Iw4JnRK7wofgb/gPqJfkbFLLGbQjeEQWhjpZyTOiF4V+BkCgbcrIb5IKWjHrWIWOSf8A2D36KgxEyFhseECRs9kDl6RPkl+x9hwrRjwhJUS0sHg3whj9FEhkpbCX7IEaEbEAmcBz7RXQiT0T+AUgkmxpA+DkYlbG2xo5IqOxlBOCVxj8zUeCJSWwhZYzmZqeiUhBT5mQ++fxFIUlCPkJ7eCkp4RIk5XoteyX2H2EVNYyAVV/SZGDnYUnR6wzbGhI2G56KWEEm3YpTj/oa/Qkl6JHRJbw8uB5cmofUa+3+Dj0LOEIUyYNDwbV1Ikzx+RZPTRGTo5IcSI5IHxCjxJHqjdgXcOszY9IF2NXb/MhtPIhJemBaMiQqSOJOiV0NJIkrgc7CZmM3lmhiIL8zFp2bg1uhFQk6GgHjI57I7H0DnyNn1EThaPcEJKiemDnDQvC/NzMZXHP2bHpFhBJ9jFczycI6ZFEcDq8CS3hKVvzD5Py2/lsQl2WAc1CwMawkWGSeEP3+ZHfI0uyNWY1ok6iJBL4OWekXJSBnqT+AXITJkSXo6VckOBCCu2OW/JEuyHHYwFVUSZhKMeB7dEthrMNpmSp5I1CAUnZxIk0ImeEWPAnwRXodv0Q3oSocs+WfQQ00SliQqJ1CJEvBInhDW6OYiDCWLS9I0aEvogHDjknFHiR8RGl4Imf5Ei9EC7IfkZ9Ahf5CRRErCdGCS2DJLoY3RF/oIg5sNRxNEmCpCXwEooSvD4jyC0JBDDeiaclsRStGqIk8mTkQpJ8GCEnhIb6EkMbizGESl6QoWltiE7IfIVWBQHBkWCUu8MXQ9k5WIXsU26zQQqFoyAUNHAsEDa8CJH0SxKG2/gxrIPZU8kNvLEocYkCSS6FNA1MOkl0PcsljQuxK/ZA7I/ISGKAzYJl4OPQnHM0Qilsh3TMtNCQoRxIndeRwnQ9uiW8DJJY259ELkF50tvLESVaPwhGJCTbESJ6WfioM9DlY6SsltkOi86K3bER8Y1xR1GdYS28HSXRMiCBL8jIAipaJNuBIHulhJuCj8ByjjG2xD7EL2ILSPUC/IngkfRMl4LUumQ3ogNZQhpaMiX0SLRkE6zAxjJiB2ashRFS0SbCRD/0EwhW0iR0ieww22aHotIWl+RiELIEliykSaBIUfmTCcU4JX0S2OGlLIreiVhCH2EXseXCFCEJVYfMNiRnl/I58jYtb0xaHVEUokcLCZeDjVJHymTY4IsshJRD7BKRH5Dn6IBuZjCf0NEsaTbIbZCLbs9w1sfAhDRmYbHh/ElHMnwVZ6S5Hoq9iOlpd2KQcaJ3QkjwkPzhLYdJWMpl6JSFbIn2xQs4UJISCmfg4kSuiHSN9CewtJY15Ir0YFok3q2yN2cbEwi6BhLuElJIG6GQ19kKeTiWikFoGZh8goTwkS+iyQqJLG56JWEEIlDVBz1nJSRiJFYT6NpCTZyaFL2W3ZzDgWikIvGZuBLd4SieBsxztDiLfsWl2RuFox6FoSeAb6ldSPjJQISGbCeRSULSG3SsQi2A1xIhxMLcCnWBvqKC6Qx+iWxuY6ZmppGhaIdWsR7E9IeaSOBkhoefkzbILEBr7EJemTRIxBBLWCTPByqSJXRysHsNu4gy9MS0TdwkJQY/Qmuok9El4EJWWZyBoLbzIlezhElQkk8EtB8xRXwWDzj8xD2Ny7ZzdHJC0cxREqCb0VFiRN6J/ALQbchseiU+yJpbYouzgROIwPkJbeFDOorwIkqhEzl4QD6SFIY0E/uL9i7+g5voouDEwnV4KBs0nKITsvyH1EdLRKQkkOBh8godB79HL/Aiw8mQJ5OEQ3jQlex7nAnCiHEOqsJLx+AZtJH5CL2KX+HiDGEwwkrgmfQ49By9HIz3BJvSDLsQ0tODkjnBwMIo8SGg5sCUNLNGhCVCbQQvZZCEChI4Miw52DaEgTSXRO6LZYom1giz0kQtFPYKTs4/6/J4LPwaHgyJHbyyFIob3YjWmDQraCKJaWEg0ekfB+Rol2NzvSFdmRaJN4FVacKJ3QoTwiYJ1LwgQ0uSO9EKtIfYfUUEgUEyMGtqiCSMboollF6M2ESS9I+xAUiahLXghXSG+pJeBFw2uNz380nQpYtez/3B9BSkSLo2PBu1Q1uiVT+Ys2HSyx2VdvRWdPYYirSuAx/CESTKwnt4OCsmckT5PAnsFLCU7IlC0Y0IQlEtYJn0Sl0JiuQ4CTZRemFaKCE0/Il9FVUl+VPeBFwzblmpka7LfkxXsXQGFJJRgWGp4QspDPQ5ghIbl9s+oxcjtuCg4A954KXij4SS8G4Z3C7aEpQrZD7CCcaFzwQ6DAwnJvBtIOazmT0OOWSXgZJEtEdvTjaQwumyYVsKEvCJaGNLwfLg+Y5H8PvL8zIXZBS0c8CIBmOj4hhrZJYbQdvsQk6IuxDfYQhxfQ5uiAt9BzctUNCskZzvSx5E5fliUuyCUw4ICSlhsBvQht2FEsaCW3ZBfJFS0Y0IQpxYJ3RXhRKjgZTYsGBFbVkZbV+RwoTAkqOCJCdE7l4QB7EN64PrGlLdjwJlLI+LIcciWFsShxIa1EB8RNfA2kD3v8T7S5uWQOyI00fEJIkSUw0PCpMRKE1hAbbezU9OJolPsixHEzyfMQvASqwY7eDl5WQWR6F9jIHZE2tDv9ggMiwny8HXggeYnIQo22F2eiVK0MgQtKLYEnoSh4R8xNYQgzuRW0ZuSwhkH+Qa9CToRiDUw0Z4GOQr+BM7L7hJeQ25HpFb0zrRJt5P/acSGt0JKjCdHBqY0Wx7WJ1/CC8jnzM91kMpaTYQiq/pJhYfEOFfgZv0QhaDNpI1LGBCT9iEij+g9+hR0HDwkvBFka9kFvSDWktuxadkbkHuLCidQsJkhqnQ+YjgEL7IbyIbsgrQjgIFElYJvRSXSGP0TBqDt5IrY4uinuf6sSUCLGDKzRuef7Hg4RsEH+ghwS27YtOx1C8ekeaJSjliaP6as9sY/RC5GBYTJwNoHBzaOCS27Z9QxKAxoQklOBg/0JgMbo5WPA22s8SyFGhWCSgimBN6Gl4EifQntg2k0c0kal//AAe8L7CF2MVIRsIkozcDLPESlGN0cghClp8kHsi9iMEwS+Ab6FKeEMbo52eBCy/4N7iBLI3ZDfyzG+nAJnQsAynBzsJSDpn8IAWkclt2fcca0RBmiTbFoewJoi8CRxhLDeEwsY0sgsfaW16Qr0bhdAqDBg+YpNhHyFchActirPRdGiUBC1J6wfEQuhDc4TvgHkMaRDb0jdl9hm58kfk5GMQkGsRbG+gSei+Q8Rt+QQl6cLRJvCFwGbA9+j0IGN0TWHSyxncbGrEpAX0OJo7Ayr6JQvEHCE18DfAl0VMhS9n9GR+yOlorBIhS1CRodEIkgVTg4WGh4RSsYxFCLIXZfkbKnkZYhGwlQwLDRwOEGteEr/wi07H9CDdK4Qx9hIUS0sGN0J/A5o4OcPmJBApeiMaKT2TuzgD3gSeg8uj5BxfgY/8Ao5mfYS27IMuxBS0WVCFyQiUmPX5Xu2VVjtpI15EK7LbsSqQygx4ESeEYlhNbCrR5cnOxSdlt5bIN6QUGPCFLRZSTIhGC4mKnoc3RMNpBjZHaWJh5L8jPvOJaSCFQSKFhM6H+hIUl6NvIz2BHS0hv2L/SqESuhQvBIaiT0NwJNi5NkSOS4okWvZA2mJHQiUzLDlYOk6HHKEL2S27Z9hwtEbwhaEtBNJELo+Q5Q4JZKtNmogULTnyyBHCjiBJdKMCw2NUQCYcrJAjby2RL0jUBG9ECESUsEmxUYEbFCEnoY0sSlGt/w9hwQey/IyJ2RSkxGSVCeh8w3oG9ByhKjPyM0sROForYgkI8QvoKS6HZltjJIbllM6E1aJvySKXtnEHtX0SVE+YcrCCmgc7PeDb8jZo5MC0gSELCJqEukF6LCaw6QiAhuzgCl5olJeTi/od6iSqxEmOCRLwYmBzMQvYreWSOyFQtGVEZIDTUOeWMUKW68kKNJX0TW8/2NPgkWQuWQ+xNsa2ROzsPIxxSUN8Qkd4Ng5HKIkvRmx9RFSCTahYpCcR8BCS6EizbpEUmSTCE5ETsVuyF2NkDmEepnCRLwbXgRKTg5mQrDSPbZHS0YCwoyYJAThdHzHKlELMl9nmOJpLsxEnZwPwJJKh7cLDawbTG8HtL+EFj6yGvln3lsIUsIVJCJ6wfMSkvBsdoQ0lhGTglt5/sZJIms0McewuS2xHuQ+TljokU19J6WCT0iUkSeiSAV3EuRmp6QKNCmgVBPQa14V0Deo1PBoHbGh6LpyO0LSvsrjRlEhrCbAPsx/Ia1i//AAIjsZvybIkvTJoc0CFJqWEjoldCOITuQiQlvLFJLSHNIbVp/wDWKxCUukMqHEwVFvCZvBjyyCXwfYJvyMVJdi+NFoQkUmrB8w2k6Jz8EIm9E0PgUgzayGxDmiTYXrSBC3yNqEUCJ64Jtwak0hzd4Tf4F+VvsEavTMtIgSC0OPB8BCVsGehPbwUTJGQOWR5pDbsQl6awPYRJRNSwnSDehE0sTY5H5LPshy9MDRKAsJaWDSNJeCJ/RPbHUz0Y1mh6QIWlnHIkGcYe1FIZFhNbwlW4GOQ+Tj9xEn5KYDnhCVYRkWD2vBx0HOJ/8BRsB1YcxBY8wd+xfcQ0FZCEioZMDnl4inRDhxbFA5fsi3piWknhaJiJKCyzKGbgkWKsH3EV6P6RTByLTs4kKWEJLqJ3WD7sIrLwfIe0G0Nyy6WR0tFQQiFEtNQ1uhx4IG/QSW1RAkbSEVvTi6KatYrsOExjiSWoJPRcPB0hKyK9Pg+sU9jFL2YBaPAkQsNjBl0I9QTAkS7MaLLGSMgXJ4I3ZoQkOiFonYVJCJgS+h6vCYNdh0nZMj6DGgyNaLo0noTuh0JV0SOXgysGsO0EUI28tiF7ONEhEJQ2iwmXg2lakOuwgtocPNjbyEeiqBKUCRRL4BrdDhOIJ/RzPn5OQQXoXgI+xkfsrCV15ISVhKjgmtjZZtJHRZ9xdmifRxiTUISsncYNxKUngx+l+w5bTyU+Qx5f8IUtCPTllt5YhPLIqQpYoiSlgk7hFT4E5YthFHLfZqdsTRomgSkSsIm8HLJHRXSj4hrsmZjmsjSFQrZ7DFLtjNBzdeSEqKkT0hGxuEsaFcjIKxKfZxoY0CIBFMEnwj0Eh7/6HLgQn4ENsrFpEFacY4f6HR8csSSUMbolvBBXBILyz7iWCvpBDkhoIkjhOj1UOFnEj5D/AIiFr2Se7bND0WszgLEU5L7BPsRwEz0JcCRQsJV4eTJBzhjdmke6R+QdXpmE1NQz0K6hz9Gj4IpMrI2mxFGil+TIXZbAc5CoJVBueDcOhzSczP6Dv2Quy4lo+jRAT+AY/RDwIa3RLbIfY5JkVsZloj9iRZNQY3RC8RLmEtsOgiEVj6i2z2g4qFo16OITqFhs4GkziQ5uuEf+YI3vCG3ZrI75Li0exGd4Gn5Wz7SHyCegVJAuDBNuDj0GbdH/ABBadkt5dkaeSGlpLrRNX0nQPZ+DHSJUcEkPAyWjyILZGoqSHTkWOQMDBIsGZYaHg2mN4OQ8I9gvyM5mkrkJgklMywnyHHiQ5uja/hAGdxtBeNIlWivMT0EziSU+c1PBkt4OsRXoX5GKwtLsjULRlH0WWLB8Q0Muzk+Be9G5b0VDemBaMatEkRJbeWIXy2UxogSIQokzCRLwgg4hUiF2ObiF2ZGjmFUEvg5G+IY8JDqcEl4FIxt2Cg5Za8iliN2cYcCiJYjBgZcGSdDy+jmYgX2EBeR6ULfyEIZFhzcHC+A9xN/gRALEbNENJhW3f4KgccdDcYSvAWg2QgvfBE+z6MSnZw6/AUYHUWHIwcSYPeeDNBHveCTdtkOWMi0RgqrRapLEp2Qg16ESmZYamJSvgb1HIFDLbyLSXpn0I6tIP/SfwE/o9FIk9E9scNGECXp9wk27ICMFbdCSQwoSpeDC1iGwhZ5Lk5FL2Q0tEbiwn8Az1JXiHP1+QlJGNekF8jj7IoWkOji+h7dCEnEjDwSvAQsjHlkQKXyy3sQvZCgOYiWE7hYM3g4fEDHvDJj3XgbXac7TC0UsJZHCuSJxHCvzUCJELCTeEU9ficzEJ2NnIlL0yAjaORUkL+nqBj9DaWFSQx+ie8De2fSIsH1CT7H+Pg+vzEocEqsJLeCkHl7Tj81t+LItEm4tKJAUvBS8Ehr9Er4PzSeWQL0gxyRKhCwvpZAlxwKPAifQ2PBtLLJdgryD7C28tiu4hpDCkElYJc4HCy8GveFkHpEaefBLbsiyxAoWiZvZGguhHriCULBjUKElLCRLwYM3OdjwJBtelItFbfiqhYTSHgQ5uiYGmGNYuuRwfYl7GKH/AECRAiTwjMg93wNpWGYiBwXY028tiV7Ik40TMRgQx0sPiKQnZXLX4jBE8iNCFsUkihfgSSdI4olt4NpLJssjcsiQ5Yhds4kMbFJUSUsJ7efg3qOZjIs27Z41kVLRJsIjUSOMEgo6HxYJKkkpOhGx0G2ORjQ7G232KCvRCULRG1aKSP8AJLSw+QVMwa0cEiChK2NaRNBsb/pDfsRJ2cIk/wCiEhLSwl3B0nge2nkIBDb7IYPYENuiIFehP6K8CRM6JbDgSdkbnv8AoxKwpYgt4JGKAmwJdwigx7IXOj6iWxEWQhjZE6JKQm9FLeCR/kI9mN6aanpGq0RtEWJqJa/oYMUD4cCZhwMJLeFE4iRJysYWWL7GBaI6PxS1gY3Q/AaaJXIUgxrIbekHsViRRBSGP0JKDhEqFhO7wbVh5SQW/wALWRK9HKtDGEkiWUsPCoUTOkObomsOA2250XZmZaW3ZEo8AksVE1cGjAqRjHshYQnZD7CVGv8AEsuhJJDnSwn3BwkOGTaPcDOwgS9GUpcCrInrB8g6dEj6F54/P//aAAwDAQACAAMAAAAQJpNNttpNJJppNNpppJppNJJJJJNJJttNJNpJJtNNtNtNNJpJJNNJJJpppJJNtNNNttJtpNpJNppNNNtJpJJNJppJJNttNNNNNpJppNNpJJtpJJJtJNptpppJtpptpNpptpJNNNNtJJNtJJpNJNpttptpNptNJtNttNJJNNNtJpppptpNNNJptJtJNtJpJtJNttpJNptJNJJtNptJttJJtNJJNJtJpJptpNJtJpNNpttNppNNJtpppNNNNJtNttpNJJptNtJtpJNJtpppJpNtttNpNNJtNpJNtJNNtNtJppNNpppNNNJtNpJNJtpNNptNJpJtNJJpppJJtJptNJNNtptJtNtptJtNJpJpNpJNJpptNNtpNNtJpJJJttNNptJJNttNtNJpJJppNptpNNNtJNppNttJpJNJtJpNNpNtJtJpJtpNptJtptppJpJptJNtppNtNJNNpJpNJNtNtNJppJJtpttNJJJpNtpNNptJJttNtpttJtNNpptptNt//f8A+z/++23+2/8Avv8A5f7b/b/b7b7ff/8ATz232++2+22/62++323+3/233+2/32+3+/223/3zX2332/32++/3/wBt/wD/AP33/wBtv/8A/wD2/wB9/tv9t/8A7fb7b7//AH323+/222++33332++33333/wDt99t/vtv/AL7bb/f7bfbbff8A+/3/ANtvtt/tvvtv99v9t/8Ab7/f/wD+++//APt/vt//APb7b/bf7/7ffb77/wC32/2//wDt/wDfbf7b77b7/f8A/wBtvtt/v/v9v9/tv/v/AL77777bbf7/AH3/APvt/wD/AO3/APvtvtt9/wDf/wC223//APt99/vv/wDf/wD33+2++3+33323/wDtvtv9/v8Af7f7/wC//wBvttvttv8Abf8A+3+2323/ANt9/wDbfb7fbffb/wC+3322++/332+++332/wB/9tvvvv8A7bfffb//AO+//wBtv9vvtvt9v/vtt9t/v9vvtt/9v/8A7b7bfff/AP8Av/8A7/f/AO/+323233222++223332++/3/8A/v8Ab7b7f7/bbb7777fffbbfb/8A+2++2/22/wD/AP8A+323+2++3223/wBvt9v/ALbb7b7b/b7fbffff7/b7/bbb/bffb7f/wC++/8A/wDbb77bbb/f7fff/wC323+3/wD9tt99vv8Afff7/bf/AO+232//ANt99vt/9v8A7f777b/f7fbf7/b/AG33+2+/+3223/3/ANvv/wDfb/f77/b/AG+332+//wBt/t/vvt/v/t//AL/b7ff7f/b/AG++3+/2++/2332/2+332/3/APtv9/tv/vt//vt/vt//AP8A+22+/wD/AP8A+232+/2322+3332/+2/++232223/APtvtv8Abb/7f/b777/b7f8A++/2+/8A9/t99/v9v9//AL//AO/2/wDvtt9tvtt/vttt/tvt99v/APf/AP2/223/APtvtv8A777/AH2/2++22/8A9tvvv9/9/wD7ffb/AP3/AP8A7/8A323/APv9t99/tvt9t9t9tt9/ttv9/tt//vv/ALfff/b/AH3+3+/+2/3+/wBvtvv9/t/vvttt/wDbb/f777/b7/7f/b7bb77bff77/fbb/wD+/wDv9t/9t/ttvtvt9/t/9vt99t/vvt/v/tv9/wD777f/AO+++++//wD/APf/AP2/+3+32/332333/wD/AL7777ff/bf/AH/+++22/wBv9/8A/wC2+22++23+2/8Avtvvv/v/AP7/AO3++3/333+//wDtt/tv9t/v9v8Ab/8A23/3+3332/2++/8A9999vt9/999v/tvvt9/vtvv/AL7/AH/3++/+332/+33/AP8Af7/7fff7b/f7NpNJJJppNptNtpNtpNtNJJpNJtJJpttpJJtJNNNppNJtJppJNppJtppJpNNpJtJtJtNNtNJpNppNNNtpJJNtJpNN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) 50% 50%;color:#000;font-size:12px;font-style:italic;font-weight:700;padding:3px 4px;margin:4px 0 4px 0;border:1px solid #c2a26f}.theme-nano-light .displayBar,.theme-nano .displayBar{background:#000;border-radius:.15em}.theme-nano-light .displayBar .displayBarFill,.theme-nano .displayBar .displayBarFill{background:#40628a;color:#fff}.theme-nano-light .displayBar.good .displayBarFill,.theme-nano .displayBar.good .displayBarFill{background:#4f7529}.theme-nano-light .displayBar.average .displayBarFill,.theme-nano .displayBar.average .displayBarFill{background:#cd6500}.theme-nano-light .displayBar.bad .displayBarFill,.theme-nano .displayBar.bad .displayBarFill{background:#e00}.theme-nano-light .displayBar.highlight .displayBarFill,.theme-nano .displayBar.highlight .displayBarFill{background:#8ba5c4}.theme-nano-light input,.theme-nano input{border-radius:0;padding:2.25px 6px;vertical-align:top;margin:0 2px 2px 0}.theme-nano-light .tooltip.content,.theme-nano .tooltip.content{background:#272727;border:1px solid #a9a9a9}.theme-nano-light{color:#000;background:#c9c9c9 url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iODAwIiBoZWlnaHQ9IjQzMCI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJiIiB4MT0iNDAwIiB5MT0iNDMwIiB4Mj0iNDAwIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIuNDEiIHN0b3AtY29sb3I9IiNjOWM5YzkiLz48c3RvcCBvZmZzZXQ9Ii44NCIgc3RvcC1jb2xvcj0iI2U1ZTVlNSIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJhIiB4MT0iMzk5LjkiIHkxPSIxMzYuNTIiIHgyPSIzOTkuOSIgeTI9IjI0MC41NSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iLjAxIiBzdG9wLWNvbG9yPSIjZDNkM2Q0Ii8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYzJjNGM0Ii8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImMiIHgxPSI0NzkuMzIiIHkxPSIxOTcuNjkiIHgyPSI0NzkuMzIiIHkyPSIyNDAuNTUiIHhsaW5rOmhyZWY9IiNhIi8+PGxpbmVhckdyYWRpZW50IGlkPSJkIiB4MT0iMzIwLjQzIiB5MT0iMTM2LjU0IiB4Mj0iMzIwLjQzIiB5Mj0iMTc5LjQxIiB4bGluazpocmVmPSIjYSIvPjwvZGVmcz48cGF0aCBmaWxsPSJ1cmwoI2IpIiBkPSJNMCAwaDgwMHY0MzBIMHoiLz48cGF0aCBkPSJNNDUxLjQ0IDE0MS41Yy0uMDctMi4yNS0xLTMuNTUtMi43My0zLjkzaC0yNC4ycS0zLjYuMDktMy43MSA0LjA2djUwLjQ0bC0zMy43Mi01NGE1IDUgMCAwMC0zLjA1LTEuNWwtLjktLjA3aC0zMS40NXEtMy4xOS4yOC0zLjMzIDR2OTUuMDZjLjA4IDIuMjUgMSAzLjU2IDIuNzMgMy45M2gyNC4ycTMuNi0uMDkgMy43MS00LjA2VjE4NWwzMy43MiA1NGE1IDUgMCAwMDMuMDUgMS41MWMuMjkgMCAuNTkgMCAuOS4wNmgzMS40NXEzLjE5LS4yOCAzLjMzLTR6IiBmaWxsPSJ1cmwoI2EpIi8+PHBhdGggZD0iTTQ5Ni4zNCAyMjguM2wtMzYuNjctMzAuNTd2MzguODdjLjA3IDIuNDcgMS4xOCAzLjggMy4zMSA0aDMwLjI1YTUuNDUgNS40NSAwIDAwNC4wNS0yIDcuMjQgNy4yNCAwIDAwMC05LjQ2IDMuNTkgMy41OSAwIDAwLS4zOS0uMzlsLS4wNi0uMDZ6IiBmaWxsPSJ1cmwoI2MpIi8+PHBhdGggZD0iTTMwMy40MSAxNDguNzl2LjA1bDM2LjY3IDMwLjU3di0zOC44N2MtLjA3LTIuNDgtMS4xOC0zLjgxLTMuMzEtNGgtMzAuMjFhNS40OSA1LjQ5IDAgMDAtNC4wNSAyIDYuODEgNi44MSAwIDAwLTEuNzYgNC43MiA2LjkxIDYuOTEgMCAwMDEuNzYgNC43NHEuMTkuMjEuMzkuMzlsLjA2LjA2YTQuMTIgNC4xMiAwIDAwLjQ1LjM0eiIgZmlsbD0idXJsKCNkKSIvPjwvc3ZnPg==) 50% 0 repeat-x}.theme-nano-light .itemLabel{color:#4c401c}.theme-nano-light .uiTitleWrapper{background:url(data:image/png;base64,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) repeat 50%}.theme-nano-light .uiTitleWrapper .uiTitleText{color:#4c401c}.theme-nano-light .uiTitleWrapper .uiTitleClose{color:#000}.theme-nano-light .good{color:#5e9653}.theme-nano-light .average{color:#cd6500}.theme-nano-light .bad{color:#e00}.theme-nano-light .dark,.theme-nano-light .idle{color:#272727}.theme-nano-light .displayBar{background:#fff;border:1px solid #666}.theme-nano-light .displayBar .displayBarFill{background:#556d99;color:#fff}.theme-nano-light .displayBar.good .displayBarFill{background:#5e9653}.theme-nano-light .displayBar.average .displayBarFill{background:#cd6500}.theme-nano-light .displayBar.bad .displayBarFill{background:#e00}.theme-nano-light .displayBar.highlight .displayBarFill{background:#8ba5c4}.theme-nano-light .button,.theme-nano-light a,.theme-nano-light button,.theme-nano-light input[disabled],.theme-nano-light input[type=button],.theme-nano-light input[type=reset],.theme-nano-light input[type=submit]{color:#fff;background:#556d99}.theme-nano-light .button:hover,.theme-nano-light a:hover,.theme-nano-light button:hover,.theme-nano-light input[disabled]:hover,.theme-nano-light input[type=button]:hover,.theme-nano-light input[type=reset]:hover,.theme-nano-light input[type=submit]:hover{background:#7c9ede}.theme-nano-light .button:active,.theme-nano-light .button:link,.theme-nano-light .button:visited,.theme-nano-light a:active,.theme-nano-light a:link,.theme-nano-light a:visited,.theme-nano-light button:active,.theme-nano-light button:link,.theme-nano-light button:visited,.theme-nano-light input[disabled]:active,.theme-nano-light input[disabled]:link,.theme-nano-light input[disabled]:visited,.theme-nano-light input[type=button]:active,.theme-nano-light input[type=button]:link,.theme-nano-light input[type=button]:visited,.theme-nano-light input[type=reset]:active,.theme-nano-light input[type=reset]:link,.theme-nano-light input[type=reset]:visited,.theme-nano-light input[type=submit]:active,.theme-nano-light input[type=submit]:link,.theme-nano-light input[type=submit]:visited{text-decoration:none}.theme-nano-light .button.on,.theme-nano-light .button.selected,.theme-nano-light a.on,.theme-nano-light a.selected,.theme-nano-light button.on,.theme-nano-light button.selected,.theme-nano-light input[disabled].on,.theme-nano-light input[disabled].selected,.theme-nano-light input[type=button].on,.theme-nano-light input[type=button].selected,.theme-nano-light input[type=reset].on,.theme-nano-light input[type=reset].selected,.theme-nano-light input[type=submit].on,.theme-nano-light input[type=submit].selected{background:#5e9653}.theme-nano-light .button.on:hover,.theme-nano-light .button.selected:hover,.theme-nano-light a.on:hover,.theme-nano-light a.selected:hover,.theme-nano-light button.on:hover,.theme-nano-light button.selected:hover,.theme-nano-light input[disabled].on:hover,.theme-nano-light input[disabled].selected:hover,.theme-nano-light input[type=button].on:hover,.theme-nano-light input[type=button].selected:hover,.theme-nano-light input[type=reset].on:hover,.theme-nano-light input[type=reset].selected:hover,.theme-nano-light input[type=submit].on:hover,.theme-nano-light input[type=submit].selected:hover{background:#7bc46c}.theme-nano-light .button.inactive,.theme-nano-light .button.off,.theme-nano-light .button[disabled],.theme-nano-light a.inactive,.theme-nano-light a.off,.theme-nano-light a[disabled],.theme-nano-light button.inactive,.theme-nano-light button.off,.theme-nano-light button[disabled],.theme-nano-light input[disabled].inactive,.theme-nano-light input[disabled].off,.theme-nano-light input[disabled][disabled],.theme-nano-light input[type=button].inactive,.theme-nano-light input[type=button].off,.theme-nano-light input[type=button][disabled],.theme-nano-light input[type=reset].inactive,.theme-nano-light input[type=reset].off,.theme-nano-light input[type=reset][disabled],.theme-nano-light input[type=submit].inactive,.theme-nano-light input[type=submit].off,.theme-nano-light input[type=submit][disabled]{background:#999;border-color:#444}.theme-nano-light .button.danger,.theme-nano-light .button.red,.theme-nano-light a.danger,.theme-nano-light a.red,.theme-nano-light button.danger,.theme-nano-light button.red,.theme-nano-light input[disabled].danger,.theme-nano-light input[disabled].red,.theme-nano-light input[type=button].danger,.theme-nano-light input[type=button].red,.theme-nano-light input[type=reset].danger,.theme-nano-light input[type=reset].red,.theme-nano-light input[type=submit].danger,.theme-nano-light input[type=submit].red{background:#f22;border-color:#a00}.theme-nano-light .button.danger:hover,.theme-nano-light .button.red:hover,.theme-nano-light a.danger:hover,.theme-nano-light a.red:hover,.theme-nano-light button.danger:hover,.theme-nano-light button.red:hover,.theme-nano-light input[disabled].danger:hover,.theme-nano-light input[disabled].red:hover,.theme-nano-light input[type=button].danger:hover,.theme-nano-light input[type=button].red:hover,.theme-nano-light input[type=reset].danger:hover,.theme-nano-light input[type=reset].red:hover,.theme-nano-light input[type=submit].danger:hover,.theme-nano-light input[type=submit].red:hover{background-color:#f66}.theme-nano-light .button.yellow,.theme-nano-light a.yellow,.theme-nano-light button.yellow,.theme-nano-light input[disabled].yellow,.theme-nano-light input[type=button].yellow,.theme-nano-light input[type=reset].yellow,.theme-nano-light input[type=submit].yellow{color:#000;background:#cacc00}.theme-nano-light .button.yellow:hover,.theme-nano-light a.yellow:hover,.theme-nano-light button.yellow:hover,.theme-nano-light input[disabled].yellow:hover,.theme-nano-light input[type=button].yellow:hover,.theme-nano-light input[type=reset].yellow:hover,.theme-nano-light input[type=submit].yellow:hover{background:#fcff5f}.theme-nano-light .tooltip.content{color:#000;background:#c9c9c9;border:1px solid #a9a9a9}.text-dept-command{color:#114dc1!important}.bg-dept-command{background-color:#114dc1!important}.border-dept-command{border-color:#114dc1!important}.text-dept-security{color:#991818!important}.bg-dept-security{background-color:#991818!important}.border-dept-security{border-color:#991818!important}.text-dept-engineering{color:#c67519!important}.bg-dept-engineering{background-color:#c67519!important}.border-dept-engineering{border-color:#c67519!important}.text-dept-medical{color:#15903a!important}.bg-dept-medical{background-color:#15903a!important}.border-dept-medical{border-color:#15903a!important}.text-dept-science{color:#a44799!important}.bg-dept-science{background-color:#a44799!important}.border-dept-science{border-color:#a44799!important}.text-dept-cargo{color:#593616!important}.bg-dept-cargo{background-color:#593616!important}.border-dept-cargo{border-color:#593616!important}.text-dept-civilian{color:#90524b!important}.bg-dept-civilian{background-color:#90524b!important}.border-dept-civilian{border-color:#90524b!important}.text-dept-equipment{color:#6c5b73!important}.bg-dept-equipment{background-color:#6c5b73!important}.border-dept-equipment{border-color:#6c5b73!important}.text-dept-miscellaneous{color:#5d6a67!important}.bg-dept-miscellaneous{background-color:#5d6a67!important}.border-dept-miscellaneous{border-color:#5d6a67!important}.dark-theme{color:#fff}body{font-size:14px;margin:0;padding:8px;font-family:Arial,Helvetica,sans-serif;overflow-x:auto;min-width:240px}body.vueui{overflow-y:hidden}#content{height:calc(100vh - 36px)}#content.mcomputer{height:calc(100vh - 72px)}#content.uiDebug{height:calc(50vh - 36px)}#content.uiDebug.mcomputer{height:calc(50vh - 72px)}#debug{height:50vh;display:none}#debug.uiDebug{display:inherit}#content,#debug{overflow-y:auto;margin-right:-8px;margin-top:-8px}#content>div{margin-right:8px;margin-top:8px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAA1SURBVFhH7c4xAQAgEMSwAwnn3wvWWPDwA+nSNavtyWD7fSwAAAAAAAAAAAAAAAAAgN8ByQWAVwE1HJRsowAAAABJRU5ErkJggg==);padding:.5em;box-sizing:border-box}.uiTitleWrapper{margin:-8px -8px 10px;position:relative;float:none;clear:both;user-select:none;-ms-user-select:none;cursor:default}.uiTitleWrapper>.titleBar{height:32px}.uiTitleWrapper>.titleBar:before{content:"";display:inline-block;height:100%;vertical-align:middle;font-size:0}.uiTitleWrapper>.titleBar>*{vertical-align:middle;font-size:24px;display:inline-block;margin-left:8px;line-height:32px}.uiTitleWrapper>.titleBar>.uiTitleText{font-size:16px}.uiTitleWrapper>.titleBar>.uiDebugIcon{cursor:pointer;transition:color .25s}.uiTitleWrapper>.titleBar>.uiDebugIcon.uiNoDebug{display:none}.uiTitleWrapper>.titleBar>.uiDebugIcon:hover{color:#507aac;transition:color 0ms}.uiTitleWrapper>.titleBar>.uiTitleClose{display:block;float:right;width:45px;font-size:20px;text-align:center;transition:color .25s,background-color .25s}.uiTitleWrapper>.titleBar>.uiTitleClose:hover{color:#fff;background-color:#c00;transition:color 0ms,background-color 0ms}code{font-family:Courier New,Courier,monospace}.table.border{border-collapse:collapse;border:1px solid #000;border-radius:.15em;background-color:rgba(0,0,0,.3)}.header.border{border:.5px solid rgba(0,0,0,.5);border-bottom:2px solid #556d99;border-radius:.15em}.item.border{border:.5px solid rgba(0,0,0,.5);border-radius:.15em}.button,button,input,select,textarea{box-sizing:border-box;padding:4px 6px;border-radius:4px;display:inline-block}.button,button{border:1px solid rgba(0,0,0,.2)}input,select,textarea{border:1px solid #000}.button,a,button,input[disabled],input[type=button],input[type=reset],input[type=submit]{user-select:none;-ms-user-select:none;background-color:#d8d8d8;cursor:pointer;padding:2px 4px;vertical-align:top}.button:hover,a:hover,button:hover,input[disabled]:hover,input[type=button]:hover,input[type=reset]:hover,input[type=submit]:hover{background-color:#b2deee}.button .mapIcon16,.button .uiIcon16,.button .uiIcon24,a .mapIcon16,a .uiIcon16,a .uiIcon24,button .mapIcon16,button .uiIcon16,button .uiIcon24,input[disabled] .mapIcon16,input[disabled] .uiIcon16,input[disabled] .uiIcon24,input[type=button] .mapIcon16,input[type=button] .uiIcon16,input[type=button] .uiIcon24,input[type=reset] .mapIcon16,input[type=reset] .uiIcon16,input[type=reset] .uiIcon24,input[type=submit] .mapIcon16,input[type=submit] .uiIcon16,input[type=submit] .uiIcon24{margin:0}.button *,a *,button *,input[disabled] *,input[type=button] *,input[type=reset] *,input[type=submit] *{vertical-align:top}.hidden{display:none!important}.notice{background:#ffac4e;color:#000;font-style:italic;font-weight:700;padding:3px 4px;margin:4px 0;box-sizing:border-box}.displayBar{display:inline-block;background:#fff;margin:0 5px 0 0;border:.5px solid rgba(0,0,0,.2);border-radius:.15em;overflow:hidden;width:236px;height:16px;vertical-align:text-bottom}.displayBar .displayBarFill{width:0;height:100%;background:#acacac;overflow:hidden;float:left;color:#000}.displayBar.good .displayBarFill{background:#5fe42b}.displayBar.average .displayBarFill{background:#ff8000}.displayBar.bad .displayBarFill{background:#ff2323}.displayBar.highlight .displayBarFill{background:#9dc7d6}.csserror{display:none}.tooltip.label{text-decoration:underline}.red{color:red}.green{color:green}.blue{color:#00f}.highlight{color:#00008b}.good{color:#4f7529}.average{color:#cd6500}.bad{color:#e00}.resizeHandle__se[data-v-01c02ad8]{position:fixed;bottom:0;right:0;width:20px;height:20px;cursor:se-resize;transition:opacity .3s;opacity:.5;background-position:100% 100%;background-size:16px 16px;background-repeat:no-repeat;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' version='1' fill='%23fff' viewBox='0 0 567 567'%3E%3Cpath d='M437 0c-6 0-12 2-17 7L7 420c-9 10-9 25 0 34l57 57c9 9 24 9 34 0L511 98c9-10 9-25 0-34L454 7c-5-5-11-7-17-7zm27 199c-6 0-12 3-17 7L206 447c-9 9-9 25 0 34l57 57c9 9 25 9 34 0l241-241c9-9 9-25 0-34l-57-57c-5-4-11-7-17-7zm22 204c-6 0-12 3-17 7l-59 59c-9 10-9 25 0 34l57 57c9 9 25 9 34 0l59-59c9-9 9-25 0-34l-57-57c-4-4-11-7-17-7z'/%3E%3C/svg%3E")}.resizeHandle__se[data-v-01c02ad8]:hover{opacity:1}.resizeHandle__s[data-v-01c02ad8]{position:fixed;bottom:0;left:0;right:0;height:6px;cursor:s-resize}.resizeHandle__e[data-v-01c02ad8]{position:fixed;top:0;bottom:0;right:0;width:3px;cursor:e-resize}.button[data-v-1a3d9578],button[data-v-1a3d9578]{margin-left:6px}.maincont[data-v-1a3d9578]{padding:4px;padding-top:5px;padding-bottom:5px;margin-bottom:-8px;background-color:#202020}.maincont .valign[data-v-1a3d9578]{vertical-align:middle}.uiIcon16[data-v-1a3d9578]{margin-right:0}table[data-v-36dbac0c]{width:100%;text-align:center}tr[data-v-36dbac0c]{line-height:135%}.table[data-v-0d69deee]{display:table;width:100%}.table .header[data-v-0d69deee]{text-align:center;font-weight:700}.table .header[data-v-0d69deee],.table .player[data-v-0d69deee]{display:table-row}.table .header .header-item[data-v-0d69deee],.table .header .item[data-v-0d69deee],.table .player .header-item[data-v-0d69deee],.table .player .item[data-v-0d69deee]{display:table-cell;padding:1px}.complist[data-v-0f00c828]{margin-right:1em}.value[data-v-10d6546a],.value[data-v-729622e4],.value[data-v-b7af1e1c]{color:#fff;font-size:140%;background-color:rgba(0,0,0,.4);padding-left:5px;padding-right:5px;border:1px solid #40628a}.ores[data-v-5716889f]{text-transform:capitalize}.character-image[data-v-36f58934]{float:left;height:64px}.dept-block[data-v-36f58934],.gs-block[data-v-36f58934]{position:relative;border:2px solid}.dept-block .dept[data-v-36f58934],.gs-block .dept[data-v-36f58934]{text-align:center;font-weight:700}.gs-block[data-v-36f58934]{border-color:#41ff41}.gs-block .dept[data-v-36f58934]{background-color:#41ff41;color:#000}.item[data-v-0cce4ea8]{width:100%;margin:4px 0 0 0;clear:both}.statusDisplay[data-v-60faaeb6]{background:#000;color:#fff;border:1px solid #40628a;padding:4px;margin:3px 0}.fixedLeftWide[data-v-60faaeb6]{width:165px;float:left}.item[data-v-60faaeb6]{width:100%;margin:4px 0 0 0;clear:both}ul[data-v-2005209a]{padding:4px 4px 10px 10px}.danger-control[data-v-2005209a]{position:fixed;right:20px;bottom:20px}.control[data-v-2005209a]{position:fixed;left:20px;bottom:20px}table[data-v-561826ba]{width:100%;text-align:center}tr[data-v-561826ba]{line-height:135%}.t-parent>p[data-v-2633030c]{text-align:center;margin-top:0;width:100%}.cancel-button[data-v-2633030c]{width:100%;margin-bottom:5px}p.danger[data-v-2633030c]{color:red}.purchase-icon[data-v-2633030c]{vertical-align:bottom}.food-icon[data-v-2633030c]{-ms-transform:scale(2);transform:scale(2);position:absolute;left:0;right:0;margin-left:auto;margin-right:auto;margin-top:12px}.food-icon.no-stock[data-v-2633030c]{opacity:.2;filter:alpha(opacity=20);-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=20)"}.t-parent[data-v-2633030c]{text-align:center;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;background-color:rgba(0,0,0,.4);outline-style:ridge;outline-color:#000}.t-child[data-v-2633030c]{height:auto;white-space:normal;box-sizing:border-box;margin:4px 4px 4px 4px;background-color:rgba(64,98,138,.4)}.t-container[data-v-2633030c]{position:relative}.statusValue[data-v-2633030c]{width:90%}.no-stock[data-v-2633030c]{color:grey}.cart-icon[data-v-2633030c]{position:absolute;bottom:5px;left:0}.price[data-v-2633030c]{position:absolute;bottom:4px;left:0;right:15px;text-align:center;font-size:10px}.qty[data-v-2633030c]{position:absolute;right:0;bottom:4px;font-size:10px}.no-stock.button[data-v-2633030c]{background:inherit;border-style:none}.tooltip[data-v-2633030c]{position:relative;display:inline-block}.tooltip .tooltiptext[data-v-2633030c]{visibility:hidden;width:120px;background-color:#202020;color:#fff;text-align:center;padding:5px 0;border-radius:6px;opacity:0;transition:opacity 1s;position:absolute;z-index:1;bottom:100%;left:50%;margin-left:-60px;right:auto}.tooltip .tooltiptext[data-v-2633030c]:after{content:" ";position:absolute;top:100%;left:50%;border-width:5px;border-style:solid;border-color:#202020 rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0)}.tooltip:hover .tooltiptext[data-v-2633030c]{visibility:visible;opacity:1}#content>div[data-v-2633030c]{overflow-x:hidden}table[data-v-c49443fe]{width:100%;border-collapse:collapse;color:#fff;background-color:rgba(0,0,0,.6);border:2px solid;margin-top:.5rem}table td[data-v-c49443fe]{padding-left:.5rem;padding-right:.5rem}table td[data-v-c49443fe]:nth-child(2){width:12.5rem}table td[data-v-c49443fe]:last-child{text-align:right;width:6.5rem}.complist[data-v-4021d8a8]{margin-right:1em}.message-chat[data-v-32f14c20]{width:100%;background:#000;color:#fff;border:1px solid #40628a;padding:.4em;box-sizing:border-box;height:20em;overflow-y:scroll}.message-container[data-v-32f14c20]{display:-ms-flexbox;display:flex}.message-input[data-v-32f14c20]{width:80%;-ms-flex-positive:1;flex-grow:1}.recipe-block[data-v-710a36a7]{background-color:rgba(0,0,0,0);border-bottom:2px solid rgba(0,0,0,0);transition:background-color .2s,color .2s,border-bottom .2s;padding:2px}.recipe-block h2[data-v-710a36a7]{color:#4f7999}.recipe-block h2[data-v-710a36a7],.recipe-block h3[data-v-710a36a7]{padding:2px 0}.recipe-block[data-v-710a36a7]:hover{background-color:rgba(0,0,0,.5);border-bottom:2px solid #4f7c9e}.recipe-block:hover .description[data-v-710a36a7]{color:#82a4be}table[data-v-c971b6ac]{width:100%;text-align:center}tr[data-v-c971b6ac]{line-height:135%}table[data-v-1021c617]{width:100%;text-align:center}tr[data-v-1021c617]{line-height:135%}.table[data-v-731c48b4]{display:table;width:100%}.table .header[data-v-731c48b4]{text-align:center;font-weight:700}.table .header[data-v-731c48b4],.table .sensor[data-v-731c48b4]{display:table-row}.table .header .header-item[data-v-731c48b4],.table .header .item[data-v-731c48b4],.table .sensor .header-item[data-v-731c48b4],.table .sensor .item[data-v-731c48b4]{display:table-cell;padding:1px;vertical-align:middle}.table .header .sensor[data-v-731c48b4]:last-child,.table .sensor .sensor[data-v-731c48b4]:last-child{padding-right:0}.item[data-v-731c48b4]{text-align:center}.sensor .item[data-v-731c48b4]{border:.5px solid rgba(0,0,0,.5);border-radius:.15em}.terminal[data-v-3a6a6067]{font-family:monospace;line-height:1em;font-size:1em}.terminal[data-v-3a6a6067],table[data-v-570930e6]{width:100%;text-align:center}tr[data-v-570930e6]{line-height:135%}table[data-v-1844f920]{width:100%;text-align:center}tr[data-v-1844f920]{line-height:135%}.table[data-v-41065424]{display:table;width:100%}.table .cyborg[data-v-41065424],.table .header[data-v-41065424],.table .mech[data-v-41065424]{display:table-row;font-weight:700;width:20%}.table .cyborg .header-item[data-v-41065424],.table .cyborg .item[data-v-41065424],.table .header .header-item[data-v-41065424],.table .header .item[data-v-41065424],.table .mech .header-item[data-v-41065424],.table .mech .item[data-v-41065424]{display:table-cell;padding:1px;vertical-align:middle;font-weight:400}.center[data-v-41065424]{text-align:center}.value-setting[data-v-b23b384c]{width:5em;display:inline-block;text-align:center}table[data-v-f45f2cac]{width:100%}table.queue-list td[data-v-f45f2cac]{padding:.2em}table.queue-list td.action[data-v-f45f2cac],table.queue-list td.name[data-v-f45f2cac]{width:1%;white-space:nowrap}.vui-progress[data-v-f45f2cac]{width:100%}.bodyscanner[data-v-130b946b]{display:table;width:100%}.bodyscanner .header[data-v-130b946b]{display:table-row}.bodyscanner .header .header-item[data-v-130b946b],.bodyscanner .header .item[data-v-130b946b]{display:table-cell;padding:1px;vertical-align:middle}.bodyscanner .column[data-v-130b946b]{float:left;width:45%;margin:1%;padding:10px;outline-style:ridge;outline-color:#000;background-color:rgba(0,0,0,.4);height:500px;overflow:auto}.bodyscanner .row[data-v-130b946b]:after{content:"";display:table;clear:both}.left[data-v-130b946b]{text-align:left}.center[data-v-130b946b]{text-align:center}.right[data-v-130b946b]{text-align:right}table .injury[data-v-130b946b]{border-spacing:20px 0}td[data-v-130b946b],th[data-v-130b946b]{text-align:center}.column[data-v-3783600c]{float:left;width:45%;margin:1%;padding:10px;outline-style:ridge;outline-color:#000;background-color:rgba(0,0,0,.4);height:500px;overflow:auto}.columnHolder[data-v-3783600c]:after{content:"";display:block;height:0;overflow:hidden;clear:both}.text[data-v-3783600c]{color:#b99d71}.float .button[data-v-3783600c]{float:left;padding-left:5px}td .shifted[data-v-3783600c]{padding-left:5px}[data-v-2a491020]{text-transform:capitalize}.tileRow[data-v-58cc165e]{line-height:1em;cursor:pointer}.tileRow .tile[data-v-58cc165e]{height:3em;width:3em;padding:.5em;display:inline-block;vertical-align:bottom}.tileRow .tile .piece[data-v-58cc165e]{font-size:3em;line-height:1em;text-align:center;-ms-user-select:none;user-select:none}.tileRow .tile .piece.ghost[data-v-58cc165e]{opacity:.6}.tileRow .tile .piece.ghost.sel[data-v-58cc165e]{text-shadow:none}.tileRow .tile .piece.sel[data-v-58cc165e]{text-shadow:2px 0 10px #5353ff}.tileRow .tile .piece.black[data-v-58cc165e]{color:#000}.tileRow .tile .piece.red[data-v-58cc165e]{color:red}.tileRow .tile.w[data-v-58cc165e]{background-color:#6cf}.tileRow .tile.w.sel[data-v-58cc165e]{background-color:#a5ccff}.tileRow .tile.b[data-v-58cc165e]{background-color:#3a3a3d}.tileRow .tile.b.sel[data-v-58cc165e]{background-color:#4c3a3d}table[data-v-70766bea]{width:100%}table td[data-v-70766bea],table th[data-v-70766bea]{text-align:center;width:auto}table td.action[data-v-70766bea],table th.action[data-v-70766bea]{width:1%;white-space:nowrap}table th[data-v-70766bea]{font-weight:700}.tagselector[data-v-70766bea]{display:-ms-flexbox;display:flex}input[data-v-c4dbe0aa],textarea[data-v-c4dbe0aa]{width:100%;vertical-align:top}textarea[data-v-c4dbe0aa]{height:3em}table[data-v-8bcc2668]{width:100%}table th[data-v-8bcc2668]{font-weight:700}table td[data-v-8bcc2668],table th[data-v-8bcc2668]{text-align:center}.copylabel[data-v-927b9430]{display:inline-block;width:auto}.copyBlock[data-v-927b9430]{display:inline-block}textarea[data-v-a9c97a54]{height:6em}.photos[data-v-c51ad1c4]{display:inline-block;position:absolute;right:0}.photos [data-v-c51ad1c4]{height:64px;-ms-interpolation-mode:nearest-neighbor;image-rendering:crisp-edges}.bottombuttons[data-v-c51ad1c4]{margin-top:8px}.bottombuttons .button[data-v-c51ad1c4]{margin-right:6px}.newrecord[data-v-df4093f4]{margin-top:6px}.logout[data-v-a1e2a0dc]{margin-right:0;margin-left:auto}div.incidents[data-v-494b07dc]{background-color:hsla(0,0%,50.2%,.2);padding:4px}.modular[data-v-61a5d2f6]{font-family:arial,sans-serif;border-collapse:collapse}.modular td[data-v-61a5d2f6],.modular th[data-v-61a5d2f6]{border:1px solid #ddd;text-align:left;padding:8px}.modular td[data-v-61a5d2f6]{text-align:center}.other td[data-v-61a5d2f6]{padding:5px}.right[data-v-61a5d2f6]{text-align:right}.active_energy[data-v-61a5d2f6]{display:contents}div.item[data-v-68f8b60e]{display:table-row}.itemContent[data-v-68f8b60e],.itemLabel[data-v-68f8b60e]{display:table-cell;width:10%}.itemLabel[data-v-68f8b60e]{padding-right:8px;width:4%;vertical-align:top}div[data-v-b2030120]{display:table;width:100%}div[data-v-8b39c97e]{display:inline-block}input[data-v-8b39c97e]{text-align:center}div[data-v-1c07adff]{display:inline-block}input[data-v-1c07adff]{text-align:center}input[type=range][data-v-1c07adff]{width:100%;border:none}input[type=range][data-v-1c07adff]:focus{outline:none}input[type=range][data-v-1c07adff]::-ms-track{width:100%;height:8.4px;cursor:pointer;background:rgba(0,0,0,0);border-color:rgba(0,0,0,0);border-width:16px 0;color:rgba(0,0,0,0)}input[type=range][data-v-1c07adff]::-ms-fill-lower{background:#2a6495;border:.2px solid #010101;border-radius:2.6px;box-shadow:1px 1px 1px #000,0 0 1px #0d0d0d}input[type=range][data-v-1c07adff]::-ms-fill-upper{background:#3071a9;border:.2px solid #010101;border-radius:2.6px;box-shadow:1px 1px 1px #000,0 0 1px #0d0d0d}input[type=range][data-v-1c07adff]::-ms-thumb{box-shadow:1px 1px 1px #000,0 0 1px #0d0d0d;border:1px solid #000;height:16px;width:8px;border-radius:2px;background:#fff;cursor:pointer}input[type=range][data-v-1c07adff]:focus::-ms-fill-lower{background:#3071a9}input[type=range][data-v-1c07adff]:focus::-ms-fill-upper{background:#367ebd}.item[data-v-48bbd7cd]{width:100%}.itemContent[data-v-48bbd7cd],.itemLabel[data-v-48bbd7cd]{display:inline-block}.itemLabel[data-v-48bbd7cd]{width:30%;vertical-align:top}.displayBar[data-v-041d7f1a]{position:relative;width:236px;height:16px;border:1px solid #666;float:left;margin:0 5px 0 0;overflow:hidden;background:#000}.displayBar.good[data-v-041d7f1a]{border:1px solid #4f7529}.displayBar.average[data-v-041d7f1a]{border:1px solid #cd6500}.displayBar.bad[data-v-041d7f1a]{border:1px solid #e00}.displayBar.highlight[data-v-041d7f1a]{border:1px solid #8ba5c4}.displayBarFill[data-v-041d7f1a]{line-height:1em;white-space:nowrap;overflow:visible;text-align:left}.displayBarFill span[data-v-041d7f1a]{vertical-align:middle;margin-left:2px}.displayBarFill.good[data-v-041d7f1a]{color:#fff;background:#4f7529}.displayBarFill.average[data-v-041d7f1a]{color:#fff;background:#cd6500}.displayBarFill.bad[data-v-041d7f1a]{color:#fff;background:#e00}.displayBarFill.highlight[data-v-041d7f1a]{color:#fff;background:#8ba5c4}span:hover div[data-v-4ea2a2b3]{display:inline-block}span div[data-v-4ea2a2b3]{margin-top:-5px;margin-left:4px;padding:3px;display:none;position:absolute} \ No newline at end of file diff --git a/vueui/dist/app.js b/vueui/dist/app.js index 1da06590937..473a13c8086 100644 --- a/vueui/dist/app.js +++ b/vueui/dist/app.js @@ -1,10 +1,10 @@ -(function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)})({0:function(e,t,n){e.exports=n("56d7")},"00b4":function(e,t,n){"use strict";n("ac1f");var i=n("23e7"),r=n("861d"),s=function(){var e=!1,t=/[ac]/;return t.exec=function(){return e=!0,/./.exec.apply(this,arguments)},!0===t.test("abc")&&e}(),o=/./.test;i({target:"RegExp",proto:!0,forced:!s},{test:function(e){if("function"!==typeof this.exec)return o.call(this,e);var t=this.exec(e);if(null!==t&&!r(t))throw new Error("RegExp exec method returned something other than an Object or null");return!!t}})},"00ee":function(e,t,n){var i=n("b622"),r=i("toStringTag"),s={};s[r]="z",e.exports="[object z]"===String(s)},"00fd":function(e,t,n){var i=n("9e69"),r=Object.prototype,s=r.hasOwnProperty,o=r.toString,a=i?i.toStringTag:void 0;function c(e){var t=s.call(e,a),n=e[a];try{e[a]=void 0;var i=!0}catch(c){}var r=o.call(e);return i&&(t?e[a]=n:delete e[a]),r}e.exports=c},"019f":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("vui-group",[n("vui-group-item",{attrs:{label:"Hard drive:"}},[n("vui-progress",{staticClass:"vui-progress",class:{good:!e.lowHardDrive,average:e.lowHardDrive},attrs:{max:e.s.disk_size,value:e.s.disk_used}},[e._v(e._s(e.s.disk_used)+" GQ / "+e._s(e.s.disk_size)+" GQ")])],1)],1),e.s.queue_size?[n("h2",[e._v("Queue")]),n("table",{staticClass:"queue-list"},[e._m(0),e._l(e.queue,(function(t){return n("tr",{key:t.filename},[n("td",{staticClass:"name"},[e._v(e._s(t.filename))]),n("td",[n("vui-progress",{staticClass:"vui-progress",attrs:{max:t.size,value:t.progress}},[e._v(e._s(t.progress.toFixed(2))+" GQ / "+e._s(t.size)+" GQ")])],1),n("td",{staticClass:"action"},[n("vui-button",{attrs:{params:{cancel:t.filename}}},[e._v("Cancel")])],1)])}))],2)]:e._e(),n("h2",[e._v("Available Programs")]),n("vui-input-search",{staticStyle:{float:"right"},attrs:{input:e.unrestrictedPrograms,keys:["name","filename","desc"],autofocus:""},model:{value:e.search_results,callback:function(t){e.search_results=t},expression:"search_results"}}),n("vui-group",[e._l(e.search_results,(function(t){return[n("vui-group-item",{key:t.filename,attrs:{label:"Program name:"}},[n("b",[e._v(e._s(t.name))])]),n("vui-group-item",{key:t.filename,attrs:{label:"File name:"}},[e._v(e._s(t.filename)+" ("+e._s(t.size)+" GQ)")]),n("vui-group-item",{key:t.filename,attrs:{label:"Description:"}},[e._v(e._s(t.desc))]),n("vui-group-item",{key:t.filename,attrs:{label:"File controls:"}},[n("vui-button",{class:{danger:!e.canDownload(t)},attrs:{params:{download:t.filename}}},[e._v("Download")])],1),n("td",{key:t.filename,attrs:{colspan:"2"}},[n("hr")])]}))],2)],2)},r=[function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("tr",[n("th",[e._v("Name")]),n("th",[e._v("Progress")]),n("th",[e._v("Action")])])}];n("a4d3"),n("e01a"),n("d28b"),n("4de4"),n("a630"),n("e260"),n("d81d"),n("fb6a"),n("b0c0"),n("4fad"),n("d3b7"),n("25f0"),n("3ca3"),n("ddb0");function s(e,t){return u(e)||l(e,t)||a(e,t)||o()}function o(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function a(e,t){if(e){if("string"===typeof e)return c(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?c(e,t):void 0}}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,i=new Array(t);n.8},queue:function(){var e=this;return Object.entries(this.s.queue).map((function(t){var n=s(t,2),i=n[0],r=n[1],o=e.s.available[i];return o.progress=r,o.filename=i,o}))}},methods:{canDownload:function(e){return!(e.size+this.s.queue_size+this.s.disk_used>this.s.disk_size)}}},h=d,f=(n("8b1f"),n("2877")),p=Object(f["a"])(h,i,r,!1,null,"f45f2cac",null);t["default"]=p.exports},"025e":function(e,t,n){"use strict";n.d(t,"b",(function(){return c})),n.d(t,"c",(function(){return h}));n("99af"),n("c975"),n("a15b"),n("13d5"),n("fb6a"),n("cca6"),n("d3b7"),n("ac1f"),n("25f0"),n("1276");var i=n("c0d6"),r=function(){return Math.random().toString(36).substring(13)};function s(e,t){var n=[];for(var i in t)if(Array.isArray(t[i]))for(var r in t[i])n.push(encodeURIComponent(i)+"="+encodeURIComponent(r));else n.push(encodeURIComponent(i)+"="+encodeURIComponent(t[i]));var s=e+"?"+n.join("&");if(s.indexOf("byond://")>=0)window.location.href=s;else{var o=new XMLHttpRequest;o.open("GET",s,!0),o.send()}}function o(e,t,n){var i="__bycallback"+r();window[i]=n,s(e,Object.assign({},t,{callback:i}))}function a(e){s("",e)}function c(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n={src:i["a"].state.uiref,vueuihrefjson:JSON.stringify(e)};t&&(n["vueuistateupdate"]=i["a"].getStatePushDataString()),a(n)}function l(e,t){return t.split(".").reduce((function(e,t){return e[t]}),e)}var u=36e3,d=600;function h(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=t?i["a"].state.roundstart_hour:0,r=Math.floor((e/u+n)%24),s=Math.floor(e%u/d);return"".concat(("0"+r).slice(-2),":").concat(("0"+s).slice(-2))}t["a"]={sendRaw:s,sendRawWithCallback:o,sendToTopicRaw:a,sendToTopic:c,dotNotationRead:l,worldtime2text:h}},"0261":function(e,t,n){var i=n("23e7"),r=n("d039"),s=n("8eb5"),o=Math.abs,a=Math.exp,c=Math.E,l=r((function(){return-2e-17!=Math.sinh(-2e-17)}));i({target:"Math",stat:!0,forced:l},{sinh:function(e){return o(e=+e)<1?(s(e)-s(-e))/2:(a(e-1)-a(-e-1))*(c/2)}})},"0366":function(e,t,n){var i=n("1c0b");e.exports=function(e,t,n){if(i(e),void 0===t)return e;switch(n){case 0:return function(){return e.call(t)};case 1:return function(n){return e.call(t,n)};case 2:return function(n,i){return e.call(t,n,i)};case 3:return function(n,i,r){return e.call(t,n,i,r)}}return function(){return e.apply(t,arguments)}}},"0481":function(e,t,n){"use strict";var i=n("23e7"),r=n("a2bf"),s=n("7b0b"),o=n("50c4"),a=n("a691"),c=n("65f0");i({target:"Array",proto:!0},{flat:function(){var e=arguments.length?arguments[0]:void 0,t=s(this),n=o(t.length),i=c(t,0);return i.length=r(i,t,t,n,0,void 0===e?1:a(e)),i}})},"04d3":function(e,t,n){"use strict";var i=n("23e7"),r=n("857a"),s=n("af03");i({target:"String",proto:!0,forced:s("blink")},{blink:function(){return r(this,"blink","","")}})},"050e":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("h3",[e._v("Jammer Level:")]),n("div",[n("vui-button",{class:{selected:1==e.active},attrs:{params:{set_active:1}}},[e._v("Block All")])],1),n("div",[n("vui-button",{class:{selected:2==e.active},attrs:{params:{set_active:2}}},[e._v("Block Synthetics")])],1),n("div",[n("vui-button",{class:{selected:-1==e.active},attrs:{params:{set_active:-1}}},[e._v("Block Nothing")])],1)])},r=[],s={data:function(){return this.$root.$data.state}},o=s,a=n("2877"),c=Object(a["a"])(o,i,r,!1,null,null,null);t["default"]=c.exports},"0519":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("div",{staticStyle:{clear:"both",margin:"auto",width:"20em"}},[e._l([5,10,20,30,40],(function(t){return n("vui-button",{key:e.amount-e.button-t,class:{selected:e.state.amount==t},attrs:{icon:"cog",params:{amount:t}}},[e._v(e._s(t))])})),n("br"),n("br"),n("div",{staticStyle:{"text-align":"center"}},[n("vui-input-numeric",{attrs:{width:"2.5em","button-count":2,min:1,max:e.state.beakerMaxVolume||120},on:{input:function(t){return e.s({amount:e.state.amount})}},model:{value:e.state.amount,callback:function(t){e.$set(e.state,"amount",t)},expression:"state.amount"}})],1)],2),n("div",{staticStyle:{clear:"both"}}),n("div",{staticStyle:{float:"left",width:"100%"}},[e.state.chemicals.length?n("div",e._l(e.state.chemicals,(function(t){return n("vui-button",{key:t-e.btn,staticClass:"fixedLeftWide",attrs:{icon:"arrow-alt-circle-down",params:{dispense:t.label}}},[e._v(e._s(t.label)+" ("+e._s(t.amount)+")")])})),1):n("span",{staticClass:"bad"},[e._v("No cartridges installed!")])]),n("div",{staticStyle:{clear:"both"}}),n("vui-button",{class:e.state.isBeakerLoaded&&e.disabled,staticStyle:{float:"right"},attrs:{icon:"eject",params:{ejectBeaker:1}}},[e._v("Eject "+e._s(e.state.glass?"Glass":"Beaker"))]),n("div",{staticClass:"statusDisplay",staticStyle:{clear:"both","min-height":"180px"}},[e.state.isBeakerLoaded?n("div",[n("b",[e._v("Volume: "+e._s(e.state.beakerCurrentVolume)+" / "+e._s(e.state.beakerMaxVolume))]),n("br"),e.state.beakerContents.length?n("div",e._l(e.state.beakerContents,(function(t){return n("span",{key:t-e.amt,staticClass:"highlight"},[e._v(e._s(e.u(t.volume))+" of "+e._s(t.name)),n("br")])})),0):n("span",{staticClass:"bad"},[e._v(e._s(e.state.glass?"Glass":"Beaker")+" is empty.")])]):n("div",[n("span",{staticClass:"average"},[n("i",[e._v("No "+e._s(e.state.glass?"glass":"beaker")+" loaded.")])])])])],1)},r=[],s=n("025e"),o={data:function(){return this.$root.$data},methods:{u:function(e){return"".concat(e,1==e?" unit":" units")},s:function(e){s["a"].sendToTopic(e)}}},a=o,c=(n("16ae"),n("2877")),l=Object(c["a"])(a,i,r,!1,null,"60faaeb6",null);t["default"]=l.exports},"0538":function(e,t,n){"use strict";var i=n("1c0b"),r=n("861d"),s=[].slice,o={},a=function(e,t,n){if(!(t in o)){for(var i=[],r=0;r1&&a(c,"")>-1&&(n=RegExp(this.source,i.replace.call(o(this),"g","")),i.replace.call(e.slice(c.index),n,(function(){for(var e=1;ec.index&&this.lastIndex--}return c},s||(RegExp.prototype.test=function(e){var t=i.exec.call(this,e);return t&&this.global&&!t[0].length&&this.lastIndex>t.index&&this.lastIndex--,!!t}))})),ace.define("ace/lib/es5-shim",["require","exports","module"],(function(e,t,n){function i(){}Function.prototype.bind||(Function.prototype.bind=function(e){var t=this;if("function"!=typeof t)throw new TypeError("Function.prototype.bind called on incompatible "+t);var n=h.call(arguments,1),r=function(){if(this instanceof r){var i=t.apply(this,n.concat(h.call(arguments)));return Object(i)===i?i:this}return t.apply(e,n.concat(h.call(arguments)))};return t.prototype&&(i.prototype=t.prototype,r.prototype=new i,i.prototype=null),r});var r,s,o,a,c,l=Function.prototype.call,u=Array.prototype,d=Object.prototype,h=u.slice,f=l.bind(d.toString),p=l.bind(d.hasOwnProperty);if((c=p(d,"__defineGetter__"))&&(r=l.bind(d.__defineGetter__),s=l.bind(d.__defineSetter__),o=l.bind(d.__lookupGetter__),a=l.bind(d.__lookupSetter__)),2!=[1,2].splice(0).length)if(function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t,n=[];if(n.splice.apply(n,e(20)),n.splice.apply(n,e(26)),t=n.length,n.splice(5,0,"XXX"),n.length,t+1==n.length)return!0}()){var g=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?g.apply(this,[void 0===e?0:e,void 0===t?this.length-e:t].concat(h.call(arguments,2))):[]}}else Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):void 0==e?e=0:e<0&&(e=Math.max(n+e,0)),e+ta)for(d=l;d--;)this[c+d]=this[a+d];if(s&&e===u)this.length=u,this.push.apply(this,r);else for(this.length=u+s,d=0;d>>0;if("[object Function]"!=f(e))throw new TypeError;while(++r>>0,r=Array(i),s=arguments[1];if("[object Function]"!=f(e))throw new TypeError(e+" is not a function");for(var o=0;o>>0,s=[],o=arguments[1];if("[object Function]"!=f(e))throw new TypeError(e+" is not a function");for(var a=0;a>>0,r=arguments[1];if("[object Function]"!=f(e))throw new TypeError(e+" is not a function");for(var s=0;s>>0,r=arguments[1];if("[object Function]"!=f(e))throw new TypeError(e+" is not a function");for(var s=0;s>>0;if("[object Function]"!=f(e))throw new TypeError(e+" is not a function");if(!i&&1==arguments.length)throw new TypeError("reduce of empty array with no initial value");var r,s=0;if(arguments.length>=2)r=arguments[1];else do{if(s in n){r=n[s++];break}if(++s>=i)throw new TypeError("reduce of empty array with no initial value")}while(1);for(;s>>0;if("[object Function]"!=f(e))throw new TypeError(e+" is not a function");if(!i&&1==arguments.length)throw new TypeError("reduceRight of empty array with no initial value");var r,s=i-1;if(arguments.length>=2)r=arguments[1];else do{if(s in n){r=n[s--];break}if(--s<0)throw new TypeError("reduceRight of empty array with no initial value")}while(1);do{s in this&&(r=e.call(void 0,r,n[s],s,t))}while(s--);return r}),Array.prototype.indexOf&&-1==[0,1].indexOf(1,2)||(Array.prototype.indexOf=function(e){var t=b&&"[object String]"==f(this)?this.split(""):O(this),n=t.length>>>0;if(!n)return-1;var i=0;for(arguments.length>1&&(i=R(arguments[1])),i=i>=0?i:Math.max(0,n+i);i>>0;if(!n)return-1;var i=n-1;for(arguments.length>1&&(i=Math.min(i,R(arguments[1]))),i=i>=0?i:n-Math.abs(i);i>=0;i--)if(i in t&&e===t[i])return i;return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(e){return e.__proto__||(e.constructor?e.constructor.prototype:d)}),!Object.getOwnPropertyDescriptor){var y="Object.getOwnPropertyDescriptor called on a non-object: ";Object.getOwnPropertyDescriptor=function(e,t){if("object"!=typeof e&&"function"!=typeof e||null===e)throw new TypeError(y+e);if(p(e,t)){var n;if(n={enumerable:!0,configurable:!0},c){var i=e.__proto__;e.__proto__=d;var r=o(e,t),s=a(e,t);if(e.__proto__=i,r||s)return r&&(n.get=r),s&&(n.set=s),n}return n.value=e[t],n}}}(Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(e){return Object.keys(e)}),Object.create)||(m=null===Object.prototype.__proto__?function(){return{__proto__:null}}:function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(e,t){var n;if(null===e)n=m();else{if("object"!=typeof e)throw new TypeError("typeof prototype["+typeof e+"] != 'object'");var i=function(){};i.prototype=e,n=new i,n.__proto__=e}return void 0!==t&&Object.defineProperties(n,t),n});function w(e){try{return Object.defineProperty(e,"sentinel",{}),"sentinel"in e}catch(t){}}if(Object.defineProperty){var _=w({}),x="undefined"==typeof document||w(document.createElement("div"));if(!_||!x)var k=Object.defineProperty}if(!Object.defineProperty||k){var A="Property description must be an object: ",C="Object.defineProperty called on non-object: ",E="getters & setters can not be defined on this javascript engine";Object.defineProperty=function(e,t,n){if("object"!=typeof e&&"function"!=typeof e||null===e)throw new TypeError(C+e);if("object"!=typeof n&&"function"!=typeof n||null===n)throw new TypeError(A+n);if(k)try{return k.call(Object,e,t,n)}catch(l){}if(p(n,"value"))if(c&&(o(e,t)||a(e,t))){var i=e.__proto__;e.__proto__=d,delete e[t],e[t]=n.value,e.__proto__=i}else e[t]=n.value;else{if(!c)throw new TypeError(E);p(n,"get")&&r(e,t,n.get),p(n,"set")&&s(e,t,n.set)}return e}}Object.defineProperties||(Object.defineProperties=function(e,t){for(var n in t)p(t,n)&&Object.defineProperty(e,n,t[n]);return e}),Object.seal||(Object.seal=function(e){return e}),Object.freeze||(Object.freeze=function(e){return e});try{Object.freeze((function(){}))}catch(M){Object.freeze=function(e){return function(t){return"function"==typeof t?t:e(t)}}(Object.freeze)}if(Object.preventExtensions||(Object.preventExtensions=function(e){return e}),Object.isSealed||(Object.isSealed=function(e){return!1}),Object.isFrozen||(Object.isFrozen=function(e){return!1}),Object.isExtensible||(Object.isExtensible=function(e){if(Object(e)===e)throw new TypeError;var t="";while(p(e,t))t+="?";e[t]=!0;var n=p(e,t);return delete e[t],n}),!Object.keys){var S=!0,F=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],$=F.length;for(var T in{toString:null})S=!1;Object.keys=function(e){if("object"!=typeof e&&"function"!=typeof e||null===e)throw new TypeError("Object.keys called on a non-object");var t=[];for(var n in e)p(e,n)&&t.push(n);if(S)for(var i=0,r=$;i0||-1)*Math.floor(Math.abs(e))),e}var O=function(e){if(null==e)throw new TypeError("can't convert "+e+" to object");return Object(e)}})),ace.define("ace/lib/fixoldbrowsers",["require","exports","module","ace/lib/regexp","ace/lib/es5-shim"],(function(e,t,n){"use strict";e("./regexp"),e("./es5-shim")})),ace.define("ace/lib/dom",["require","exports","module"],(function(e,t,n){"use strict";var i="http://www.w3.org/1999/xhtml";t.getDocumentHead=function(e){return e||(e=document),e.head||e.getElementsByTagName("head")[0]||e.documentElement},t.createElement=function(e,t){return document.createElementNS?document.createElementNS(t||i,e):document.createElement(e)},t.hasCssClass=function(e,t){var n=(e.className+"").split(/\s+/g);return-1!==n.indexOf(t)},t.addCssClass=function(e,n){t.hasCssClass(e,n)||(e.className+=" "+n)},t.removeCssClass=function(e,t){var n=e.className.split(/\s+/g);while(1){var i=n.indexOf(t);if(-1==i)break;n.splice(i,1)}e.className=n.join(" ")},t.toggleCssClass=function(e,t){var n=e.className.split(/\s+/g),i=!0;while(1){var r=n.indexOf(t);if(-1==r)break;i=!1,n.splice(r,1)}return i&&n.push(t),e.className=n.join(" "),i},t.setCssClass=function(e,n,i){i?t.addCssClass(e,n):t.removeCssClass(e,n)},t.hasCssString=function(e,t){var n,i=0;if(t=t||document,t.createStyleSheet&&(n=t.styleSheets)){while(i=0?parseFloat((r.match(/(?:MSIE |Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]):parseFloat((r.match(/(?:Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]),t.isOldIE=t.isIE&&t.isIE<9,t.isGecko=t.isMozilla=(window.Controllers||window.controllers)&&"Gecko"===window.navigator.product,t.isOldGecko=t.isGecko&&parseInt((r.match(/rv:(\d+)/)||[])[1],10)<4,t.isOpera=window.opera&&"[object Opera]"==Object.prototype.toString.call(window.opera),t.isWebKit=parseFloat(r.split("WebKit/")[1])||void 0,t.isChrome=parseFloat(r.split(" Chrome/")[1])||void 0,t.isAIR=r.indexOf("AdobeAIR")>=0,t.isIPad=r.indexOf("iPad")>=0,t.isChromeOS=r.indexOf(" CrOS ")>=0,t.isIOS=/iPad|iPhone|iPod/.test(r)&&!window.MSStream,t.isIOS&&(t.isMac=!0)}})),ace.define("ace/lib/event",["require","exports","module","ace/lib/keys","ace/lib/useragent"],(function(e,t,n){"use strict";var i=e("./keys"),r=e("./useragent"),s=null,o=0;t.addListener=function(e,t,n){if(e.addEventListener)return e.addEventListener(t,n,!1);if(e.attachEvent){var i=function(){n.call(e,window.event)};n._wrapper=i,e.attachEvent("on"+t,i)}},t.removeListener=function(e,t,n){if(e.removeEventListener)return e.removeEventListener(t,n,!1);e.detachEvent&&e.detachEvent("on"+t,n._wrapper||n)},t.stopEvent=function(e){return t.stopPropagation(e),t.preventDefault(e),!1},t.stopPropagation=function(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0},t.preventDefault=function(e){e.preventDefault?e.preventDefault():e.returnValue=!1},t.getButton=function(e){return"dblclick"==e.type?0:"contextmenu"==e.type||r.isMac&&e.ctrlKey&&!e.altKey&&!e.shiftKey?2:e.preventDefault?e.button:{1:0,2:2,4:1}[e.button]},t.capture=function(e,n,i){function r(e){n&&n(e),i&&i(e),t.removeListener(document,"mousemove",n,!0),t.removeListener(document,"mouseup",r,!0),t.removeListener(document,"dragstart",r,!0)}return t.addListener(document,"mousemove",n,!0),t.addListener(document,"mouseup",r,!0),t.addListener(document,"dragstart",r,!0),r},t.addTouchMoveListener=function(e,n){var i,r;t.addListener(e,"touchstart",(function(e){var t=e.touches,n=t[0];i=n.clientX,r=n.clientY})),t.addListener(e,"touchmove",(function(e){var t=e.touches;if(!(t.length>1)){var s=t[0];e.wheelX=i-s.clientX,e.wheelY=r-s.clientY,i=s.clientX,r=s.clientY,n(e)}}))},t.addMouseWheelListener=function(e,n){"onmousewheel"in e?t.addListener(e,"mousewheel",(function(e){var t=8;void 0!==e.wheelDeltaX?(e.wheelX=-e.wheelDeltaX/t,e.wheelY=-e.wheelDeltaY/t):(e.wheelX=0,e.wheelY=-e.wheelDelta/t),n(e)})):"onwheel"in e?t.addListener(e,"wheel",(function(e){var t=.35;switch(e.deltaMode){case e.DOM_DELTA_PIXEL:e.wheelX=e.deltaX*t||0,e.wheelY=e.deltaY*t||0;break;case e.DOM_DELTA_LINE:case e.DOM_DELTA_PAGE:e.wheelX=5*(e.deltaX||0),e.wheelY=5*(e.deltaY||0);break}n(e)})):t.addListener(e,"DOMMouseScroll",(function(e){e.axis&&e.axis==e.HORIZONTAL_AXIS?(e.wheelX=5*(e.detail||0),e.wheelY=0):(e.wheelX=0,e.wheelY=5*(e.detail||0)),n(e)}))},t.addMultiMouseDownListener=function(e,n,i,s){var o,a,c,l=0,u={2:"dblclick",3:"tripleclick",4:"quadclick"};function d(e){if(0!==t.getButton(e)?l=0:e.detail>1?(l++,l>4&&(l=1)):l=1,r.isIE){var d=Math.abs(e.clientX-o)>5||Math.abs(e.clientY-a)>5;c&&!d||(l=1),c&&clearTimeout(c),c=setTimeout((function(){c=null}),n[l-1]||600),1==l&&(o=e.clientX,a=e.clientY)}if(e._clicks=l,i[s]("mousedown",e),l>4)l=0;else if(l>1)return i[s](u[l],e)}function h(e){l=2,c&&clearTimeout(c),c=setTimeout((function(){c=null}),n[l-1]||600),i[s]("mousedown",e),i[s](u[l],e)}Array.isArray(e)||(e=[e]),e.forEach((function(e){t.addListener(e,"mousedown",d),r.isOldIE&&t.addListener(e,"dblclick",h)}))};var a=r.isMac&&r.isOpera&&!("KeyboardEvent"in window)?function(e){return 0|(e.metaKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.ctrlKey?8:0)}:function(e){return 0|(e.ctrlKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.metaKey?8:0)};function c(e,t,n){var c=a(t);if(!r.isMac&&s){if(t.getModifierState&&(t.getModifierState("OS")||t.getModifierState("Win"))&&(c|=8),s.altGr){if(3==(3&c))return;s.altGr=0}if(18===n||17===n){var l="location"in t?t.location:t.keyLocation;if(17===n&&1===l)1==s[n]&&(o=t.timeStamp);else if(18===n&&3===c&&2===l){var u=t.timeStamp-o;u<50&&(s.altGr=!0)}}}if(n in i.MODIFIER_KEYS&&(n=-1),8&c&&n>=91&&n<=93&&(n=-1),!c&&13===n){l="location"in t?t.location:t.keyLocation;if(3===l&&(e(t,c,-n),t.defaultPrevented))return}if(r.isChromeOS&&8&c){if(e(t,c,n),t.defaultPrevented)return;c&=-9}return!!(c||n in i.FUNCTION_KEYS||n in i.PRINTABLE_KEYS)&&e(t,c,n)}function l(){s=Object.create(null)}if(t.getModifierString=function(e){return i.KEY_MODS[a(e)]},t.addCommandKeyListener=function(e,n){var i=t.addListener;if(r.isOldGecko||r.isOpera&&!("KeyboardEvent"in window)){var o=null;i(e,"keydown",(function(e){o=e.keyCode})),i(e,"keypress",(function(e){return c(n,e,o)}))}else{var a=null;i(e,"keydown",(function(e){s[e.keyCode]=(s[e.keyCode]||0)+1;var t=c(n,e,e.keyCode);return a=e.defaultPrevented,t})),i(e,"keypress",(function(e){a&&(e.ctrlKey||e.altKey||e.shiftKey||e.metaKey)&&(t.stopEvent(e),a=null)})),i(e,"keyup",(function(e){s[e.keyCode]=null})),s||(l(),i(window,"focus",l))}},"object"==typeof window&&window.postMessage&&!r.isOldIE){var u=1;t.nextTick=function(e,n){n=n||window;var i="zero-timeout-message-"+u;t.addListener(n,"message",(function r(s){s.data==i&&(t.stopPropagation(s),t.removeListener(n,"message",r),e())})),n.postMessage(i,"*")}}t.nextFrame="object"==typeof window&&(window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame),t.nextFrame?t.nextFrame=t.nextFrame.bind(window):t.nextFrame=function(e){setTimeout(e,17)}})),ace.define("ace/lib/lang",["require","exports","module"],(function(e,t,n){"use strict";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split("").reverse().join("")},t.stringRepeat=function(e,t){var n="";while(t>0)1&t&&(n+=e),(t>>=1)&&(e+=e);return n};var i=/^\s\s*/,r=/\s\s*$/;t.stringTrimLeft=function(e){return e.replace(i,"")},t.stringTrimRight=function(e){return e.replace(r,"")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){for(var t=[],n=0,i=e.length;nd.length?e=e.substr(9):e.substr(0,4)==d.substr(0,4)?e=e.substr(4,e.length-d.length+1):e.charAt(e.length-1)==d.charAt(0)&&(e=e.slice(0,-1)),e==d.charAt(0)||e.charAt(e.length-1)==d.charAt(0)&&(e=e.slice(0,-1)),e&&t.onTextInput(e)),h&&(h=!1),E&&(E=!1))},F=function(e){if(!g){var t=n.value;S(t),x()}},$=function(e,t,n){var i=e.clipboardData||window.clipboardData;if(i&&!l){var r=u||n?"Text":"text/plain";try{return t?!1!==i.setData(r,t):i.getData(r)}catch(e){if(!n)return $(e,t,!0)}}},T=function(e,s){var o=t.getCopyText();if(!o)return i.preventDefault(e);$(e,o)?(r.isIOS&&(f=s,n.value="\n aa"+o+"a a\n",n.setSelectionRange(4,4+o.length),h={value:o}),s?t.onCut():t.onCopy(),r.isIOS||i.preventDefault(e)):(h=!0,n.value=o,n.select(),setTimeout((function(){h=!1,x(),_(),s?t.onCut():t.onCopy()})))},L=function(e){T(e,!0)},D=function(e){T(e,!1)},B=function(e){var s=$(e);"string"==typeof s?(s&&t.onPaste(s,e),r.isIE&&setTimeout(_),i.preventDefault(e)):(n.value="",p=!0)};i.addCommandKeyListener(n,t.onCommandKey.bind(t)),i.addListener(n,"select",A),i.addListener(n,"input",F),i.addListener(n,"cut",L),i.addListener(n,"copy",D),i.addListener(n,"paste",B);var R,O=function(e){g||!t.onCompositionStart||t.$readOnly||(g={},g.canUndo=t.session.$undoManager,t.onCompositionStart(),setTimeout(M,0),t.on("mousedown",j),g.canUndo&&!t.selection.isEmpty()&&(t.insert(""),t.session.markUndoGroup(),t.selection.clearSelection()),t.session.markUndoGroup())},M=function(){if(g&&t.onCompositionUpdate&&!t.$readOnly){var e=n.value.replace(/\x01/g,"");if(g.lastValue!==e&&(t.onCompositionUpdate(e),g.lastValue&&t.undo(),g.canUndo&&(g.lastValue=e),g.lastValue)){var i=t.selection.getRange();t.insert(g.lastValue),t.session.markUndoGroup(),g.range=t.selection.getRange(),t.selection.setRange(i),t.selection.clearSelection()}}},j=function(e){if(t.onCompositionEnd&&!t.$readOnly){var i=g;g=!1;var s=setTimeout((function(){s=null;var e=n.value.replace(/\x01/g,"");g||(e==i.lastValue?x():!i.lastValue&&e&&(x(),S(e)))}));C=function(e){return s&&clearTimeout(s),e=e.replace(/\x01/g,""),e==i.lastValue?"":(i.lastValue&&s&&t.undo(),e)},t.onCompositionEnd(),t.removeListener("mousedown",j),"compositionend"==e.type&&i.range&&t.selection.setRange(i.range);var o=!!r.isChrome&&r.isChrome>=53||!!r.isWebKit&&r.isWebKit>=603;o&&F()}},I=o.delayedCall(M,50);function P(){clearTimeout(R),R=setTimeout((function(){m&&(n.style.cssText=m,m=""),null==t.renderer.$keepTextAreaAtCursor&&(t.renderer.$keepTextAreaAtCursor=!0,t.renderer.$moveTextAreaToCursor())}),0)}i.addListener(n,"compositionstart",O),r.isGecko?i.addListener(n,"text",(function(){I.schedule()})):(i.addListener(n,"keyup",(function(){I.schedule()})),i.addListener(n,"keydown",(function(){I.schedule()}))),i.addListener(n,"compositionend",j),this.getElement=function(){return n},this.setReadOnly=function(e){n.readOnly=e},this.onContextMenu=function(e){E=!0,_(t.selection.isEmpty()),t._emit("nativecontextmenu",{target:t,domEvent:e}),this.moveToMouse(e,!0)},this.moveToMouse=function(e,o){m||(m=n.style.cssText),n.style.cssText=(o?"z-index:100000;":"")+"height:"+n.style.height+";"+(r.isIE?"opacity:0.1;":"");var a=t.container.getBoundingClientRect(),c=s.computedStyle(t.container),l=a.top+(parseInt(c.borderTopWidth)||0),u=a.left+(parseInt(a.borderLeftWidth)||0),d=a.bottom-l-n.clientHeight-2,h=function(e){n.style.left=e.clientX-u-2+"px",n.style.top=Math.min(e.clientY-l-2,d)+"px"};h(e),"mousedown"==e.type&&(t.renderer.$keepTextAreaAtCursor&&(t.renderer.$keepTextAreaAtCursor=null),clearTimeout(R),r.isWin&&i.capture(t.container,h,P))},this.onContextMenuClose=P;var N=function(e){t.textInput.onContextMenu(e),P()};if(i.addListener(n,"mouseup",N),i.addListener(n,"mousedown",(function(e){e.preventDefault(),P()})),i.addListener(t.renderer.scroller,"contextmenu",N),i.addListener(n,"contextmenu",N),r.isIOS){var W=null,H=!1;e.addEventListener("keydown",(function(e){W&&clearTimeout(W),H=!0})),e.addEventListener("keyup",(function(e){W=setTimeout((function(){H=!1}),100)}));var V=function(e){if(document.activeElement===n&&!H){if(f)return setTimeout((function(){f=!1}),100);var i=n.selectionStart,r=n.selectionEnd;if(n.setSelectionRange(4,5),i==r)switch(i){case 0:t.onCommandKey(null,0,a.up);break;case 1:t.onCommandKey(null,0,a.home);break;case 2:t.onCommandKey(null,c.option,a.left);break;case 4:t.onCommandKey(null,0,a.left);break;case 5:t.onCommandKey(null,0,a.right);break;case 7:t.onCommandKey(null,c.option,a.right);break;case 8:t.onCommandKey(null,0,a.end);break;case 9:t.onCommandKey(null,0,a.down);break}else{switch(r){case 6:t.onCommandKey(null,c.shift,a.right);break;case 7:t.onCommandKey(null,c.shift|c.option,a.right);break;case 8:t.onCommandKey(null,c.shift,a.end);break;case 9:t.onCommandKey(null,c.shift,a.down);break}switch(i){case 0:t.onCommandKey(null,c.shift,a.up);break;case 1:t.onCommandKey(null,c.shift,a.home);break;case 2:t.onCommandKey(null,c.shift|c.option,a.left);break;case 3:t.onCommandKey(null,c.shift,a.left);break}}}};document.addEventListener("selectionchange",V),t.on("destroy",(function(){document.removeEventListener("selectionchange",V)}))}};t.TextInput=d})),ace.define("ace/keyboard/textinput",["require","exports","module","ace/lib/event","ace/lib/useragent","ace/lib/dom","ace/lib/lang","ace/keyboard/textinput_ios"],(function(e,t,n){"use strict";var i=e("../lib/event"),r=e("../lib/useragent"),s=e("../lib/dom"),o=e("../lib/lang"),a=r.isChrome<18,c=r.isIE,l=e("./textinput_ios").TextInput,u=function(e,t){if(r.isIOS)return l.call(this,e,t);var n=s.createElement("textarea");n.className="ace_text-input",n.setAttribute("wrap","off"),n.setAttribute("autocorrect","off"),n.setAttribute("autocapitalize","off"),n.setAttribute("spellcheck",!1),n.style.opacity="0",e.insertBefore(n,e.firstChild);var u="\u2028\u2028",d=!1,h=!1,f=!1,p="",g=!0;try{var m=document.activeElement===n}catch(P){}i.addListener(n,"blur",(function(e){t.onBlur(e),m=!1})),i.addListener(n,"focus",(function(e){m=!0,t.onFocus(e),y()})),this.focus=function(){if(p)return n.focus();var e=n.style.top;n.style.position="fixed",n.style.top="0px",n.focus(),setTimeout((function(){n.style.position="","0px"==n.style.top&&(n.style.top=e)}),0)},this.blur=function(){n.blur()},this.isFocused=function(){return m};var v=o.delayedCall((function(){m&&y(g)})),b=o.delayedCall((function(){f||(n.value=u,m&&y())}));function y(e){if(!f){if(f=!0,k)var t=0,i=e?0:n.value.length-1;else t=e?2:1,i=2;try{n.setSelectionRange(t,i)}catch(P){}f=!1}}function w(){f||(n.value=u,r.isWebKit&&b.schedule())}r.isWebKit||t.addEventListener("changeSelection",(function(){t.selection.isEmpty()!=g&&(g=!g,v.schedule())})),w(),m&&t.onFocus();var _=function(e){return 0===e.selectionStart&&e.selectionEnd===e.value.length},x=function(e){d?d=!1:_(n)?(t.selectAll(),y()):k&&y(t.selection.isEmpty())},k=null;this.setInputHandler=function(e){k=e},this.getInputHandler=function(){return k};var A=!1,C=function(e){k&&(e=k(e),k=null),h?(y(),e&&t.onPaste(e),h=!1):e==u.charAt(0)?A?t.execCommand("del",{source:"ace"}):t.execCommand("backspace",{source:"ace"}):(e.substring(0,2)==u?e=e.substr(2):e.charAt(0)==u.charAt(0)?e=e.substr(1):e.charAt(e.length-1)==u.charAt(0)&&(e=e.slice(0,-1)),e.charAt(e.length-1)==u.charAt(0)&&(e=e.slice(0,-1)),e&&t.onTextInput(e)),A&&(A=!1)},E=function(e){if(!f){var t=n.value;C(t),w()}},S=function(e,t,n){var i=e.clipboardData||window.clipboardData;if(i&&!a){var r=c||n?"Text":"text/plain";try{return t?!1!==i.setData(r,t):i.getData(r)}catch(e){if(!n)return S(e,t,!0)}}},F=function(e,r){var s=t.getCopyText();if(!s)return i.preventDefault(e);S(e,s)?(r?t.onCut():t.onCopy(),i.preventDefault(e)):(d=!0,n.value=s,n.select(),setTimeout((function(){d=!1,w(),y(),r?t.onCut():t.onCopy()})))},$=function(e){F(e,!0)},T=function(e){F(e,!1)},L=function(e){var s=S(e);"string"==typeof s?(s&&t.onPaste(s,e),r.isIE&&setTimeout(y),i.preventDefault(e)):(n.value="",h=!0)};i.addCommandKeyListener(n,t.onCommandKey.bind(t)),i.addListener(n,"select",x),i.addListener(n,"input",E),i.addListener(n,"cut",$),i.addListener(n,"copy",T),i.addListener(n,"paste",L),"oncut"in n&&"oncopy"in n&&"onpaste"in n||i.addListener(e,"keydown",(function(e){if((!r.isMac||e.metaKey)&&e.ctrlKey)switch(e.keyCode){case 67:T(e);break;case 86:L(e);break;case 88:$(e);break}}));var D,B=function(e){f||!t.onCompositionStart||t.$readOnly||(f={},f.canUndo=t.session.$undoManager,t.onCompositionStart(),setTimeout(R,0),t.on("mousedown",O),f.canUndo&&!t.selection.isEmpty()&&(t.insert(""),t.session.markUndoGroup(),t.selection.clearSelection()),t.session.markUndoGroup())},R=function(){if(f&&t.onCompositionUpdate&&!t.$readOnly){var e=n.value.replace(/\u2028/g,"");if(f.lastValue!==e&&(t.onCompositionUpdate(e),f.lastValue&&t.undo(),f.canUndo&&(f.lastValue=e),f.lastValue)){var i=t.selection.getRange();t.insert(f.lastValue),t.session.markUndoGroup(),f.range=t.selection.getRange(),t.selection.setRange(i),t.selection.clearSelection()}}},O=function(e){if(t.onCompositionEnd&&!t.$readOnly){var i=f;f=!1;var s=setTimeout((function(){s=null;var e=n.value.replace(/\u2028/g,"");f||(e==i.lastValue?w():!i.lastValue&&e&&(w(),C(e)))}));k=function(e){return s&&clearTimeout(s),e=e.replace(/\u2028/g,""),e==i.lastValue?"":(i.lastValue&&s&&t.undo(),e)},t.onCompositionEnd(),t.removeListener("mousedown",O),"compositionend"==e.type&&i.range&&t.selection.setRange(i.range);var o=!!r.isChrome&&r.isChrome>=53||!!r.isWebKit&&r.isWebKit>=603;o&&E()}},M=o.delayedCall(R,50);function j(){clearTimeout(D),D=setTimeout((function(){p&&(n.style.cssText=p,p=""),null==t.renderer.$keepTextAreaAtCursor&&(t.renderer.$keepTextAreaAtCursor=!0,t.renderer.$moveTextAreaToCursor())}),0)}i.addListener(n,"compositionstart",B),r.isGecko?i.addListener(n,"text",(function(){M.schedule()})):(i.addListener(n,"keyup",(function(){M.schedule()})),i.addListener(n,"keydown",(function(){M.schedule()}))),i.addListener(n,"compositionend",O),this.getElement=function(){return n},this.setReadOnly=function(e){n.readOnly=e},this.onContextMenu=function(e){A=!0,y(t.selection.isEmpty()),t._emit("nativecontextmenu",{target:t,domEvent:e}),this.moveToMouse(e,!0)},this.moveToMouse=function(e,o){p||(p=n.style.cssText),n.style.cssText=(o?"z-index:100000;":"")+"height:"+n.style.height+";"+(r.isIE?"opacity:0.1;":"");var a=t.container.getBoundingClientRect(),c=s.computedStyle(t.container),l=a.top+(parseInt(c.borderTopWidth)||0),u=a.left+(parseInt(a.borderLeftWidth)||0),d=a.bottom-l-n.clientHeight-2,h=function(e){n.style.left=e.clientX-u-2+"px",n.style.top=Math.min(e.clientY-l-2,d)+"px"};h(e),"mousedown"==e.type&&(t.renderer.$keepTextAreaAtCursor&&(t.renderer.$keepTextAreaAtCursor=null),clearTimeout(D),r.isWin&&i.capture(t.container,h,j))},this.onContextMenuClose=j;var I=function(e){t.textInput.onContextMenu(e),j()};i.addListener(n,"mouseup",I),i.addListener(n,"mousedown",(function(e){e.preventDefault(),j()})),i.addListener(t.renderer.scroller,"contextmenu",I),i.addListener(n,"contextmenu",I)};t.TextInput=u})),ace.define("ace/mouse/default_handlers",["require","exports","module","ace/lib/dom","ace/lib/event","ace/lib/useragent"],(function(e,t,n){"use strict";e("../lib/dom"),e("../lib/event");var i=e("../lib/useragent"),r=0,s=250;function o(e){e.$clickSelection=null;var t=e.editor;t.setDefaultHandler("mousedown",this.onMouseDown.bind(e)),t.setDefaultHandler("dblclick",this.onDoubleClick.bind(e)),t.setDefaultHandler("tripleclick",this.onTripleClick.bind(e)),t.setDefaultHandler("quadclick",this.onQuadClick.bind(e)),t.setDefaultHandler("mousewheel",this.onMouseWheel.bind(e)),t.setDefaultHandler("touchmove",this.onTouchMove.bind(e));var n=["select","startSelect","selectEnd","selectAllEnd","selectByWordsEnd","selectByLinesEnd","dragWait","dragWaitEnd","focusWait"];n.forEach((function(t){e[t]=this[t]}),this),e.selectByLines=this.extendSelectionBy.bind(e,"getLineRange"),e.selectByWords=this.extendSelectionBy.bind(e,"getWordRange")}function a(e,t,n,i){return Math.sqrt(Math.pow(n-e,2)+Math.pow(i-t,2))}function c(e,t){if(e.start.row==e.end.row)var n=2*t.column-e.start.column-e.end.column;else if(e.start.row!=e.end.row-1||e.start.column||e.end.column)n=2*t.row-e.start.row-e.end.row;else var n=t.column-4;return n<0?{cursor:e.start,anchor:e.end}:{cursor:e.end,anchor:e.start}}(function(){this.onMouseDown=function(e){var t=e.inSelection(),n=e.getDocumentPosition();this.mousedownEvent=e;var r=this.editor,s=e.getButton();if(0!==s){var o=r.getSelectionRange(),a=o.isEmpty();return r.$blockScrolling++,(a||1==s)&&r.selection.moveToPosition(n),r.$blockScrolling--,void(2==s&&(r.textInput.onContextMenu(e.domEvent),i.isMozilla||e.preventDefault()))}return this.mousedownEvent.time=Date.now(),!t||r.isFocused()||(r.focus(),!this.$focusTimout||this.$clickSelection||r.inMultiSelectMode)?(this.captureMouse(e),this.startSelect(n,e.domEvent._clicks>1),e.preventDefault()):(this.setState("focusWait"),void this.captureMouse(e))},this.startSelect=function(e,t){e=e||this.editor.renderer.screenToTextCoordinates(this.x,this.y);var n=this.editor;n.$blockScrolling++,this.mousedownEvent.getShiftKey()?n.selection.selectToPosition(e):t||n.selection.moveToPosition(e),t||this.select(),n.renderer.scroller.setCapture&&n.renderer.scroller.setCapture(),n.setStyle("ace_selecting"),this.setState("select"),n.$blockScrolling--},this.select=function(){var e,t=this.editor,n=t.renderer.screenToTextCoordinates(this.x,this.y);if(t.$blockScrolling++,this.$clickSelection){var i=this.$clickSelection.comparePoint(n);if(-1==i)e=this.$clickSelection.end;else if(1==i)e=this.$clickSelection.start;else{var r=c(this.$clickSelection,n);n=r.cursor,e=r.anchor}t.selection.setSelectionAnchor(e.row,e.column)}t.selection.selectToPosition(n),t.$blockScrolling--,t.renderer.scrollCursorIntoView()},this.extendSelectionBy=function(e){var t,n=this.editor,i=n.renderer.screenToTextCoordinates(this.x,this.y),r=n.selection[e](i.row,i.column);if(n.$blockScrolling++,this.$clickSelection){var s=this.$clickSelection.comparePoint(r.start),o=this.$clickSelection.comparePoint(r.end);if(-1==s&&o<=0)t=this.$clickSelection.end,r.end.row==i.row&&r.end.column==i.column||(i=r.start);else if(1==o&&s>=0)t=this.$clickSelection.start,r.start.row==i.row&&r.start.column==i.column||(i=r.end);else if(-1==s&&1==o)i=r.end,t=r.start;else{var a=c(this.$clickSelection,i);i=a.cursor,t=a.anchor}n.selection.setSelectionAnchor(t.row,t.column)}n.selection.selectToPosition(i),n.$blockScrolling--,n.renderer.scrollCursorIntoView()},this.selectEnd=this.selectAllEnd=this.selectByWordsEnd=this.selectByLinesEnd=function(){this.$clickSelection=null,this.editor.unsetStyle("ace_selecting"),this.editor.renderer.scroller.releaseCapture&&this.editor.renderer.scroller.releaseCapture()},this.focusWait=function(){var e=a(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y),t=Date.now();(e>r||t-this.mousedownEvent.time>this.$focusTimout)&&this.startSelect(this.mousedownEvent.getDocumentPosition())},this.onDoubleClick=function(e){var t=e.getDocumentPosition(),n=this.editor,i=n.session,r=i.getBracketRange(t);r?(r.isEmpty()&&(r.start.column--,r.end.column++),this.setState("select")):(r=n.selection.getWordRange(t.row,t.column),this.setState("selectByWords")),this.$clickSelection=r,this.select()},this.onTripleClick=function(e){var t=e.getDocumentPosition(),n=this.editor;this.setState("selectByLines");var i=n.getSelectionRange();i.isMultiLine()&&i.contains(t.row,t.column)?(this.$clickSelection=n.selection.getLineRange(i.start.row),this.$clickSelection.end=n.selection.getLineRange(i.end.row).end):this.$clickSelection=n.selection.getLineRange(t.row),this.select()},this.onQuadClick=function(e){var t=this.editor;t.selectAll(),this.$clickSelection=t.getSelectionRange(),this.setState("selectAll")},this.onMouseWheel=function(e){if(!e.getAccelKey()){e.getShiftKey()&&e.wheelY&&!e.wheelX&&(e.wheelX=e.wheelY,e.wheelY=0);var t=this.editor;this.$lastScroll||(this.$lastScroll={t:0,vx:0,vy:0,allowed:0});var n=this.$lastScroll,i=e.domEvent.timeStamp,r=i-n.t,o=e.wheelX/r,a=e.wheelY/r;r=1&&t.renderer.isScrollableBy(e.wheelX*e.speed,0)&&(l=!0),c<=1&&t.renderer.isScrollableBy(0,e.wheelY*e.speed)&&(l=!0),l)n.allowed=i;else if(i-n.allowedo.session.documentToScreenRow(u.row,u.column))return d()}if(r!=i)if(r=i.text.join("
"),l.setHtml(r),l.show(),o._signal("showGutterTooltip",l),o.on("mousewheel",d),e.$tooltipFollowsMouse)h(n);else{var f=n.domEvent.target,p=f.getBoundingClientRect(),g=l.getElement().style;g.left=p.right+"px",g.top=p.bottom+"px"}}function d(){t&&(t=clearTimeout(t)),r&&(l.hide(),r=null,o._signal("hideGutterTooltip",l),o.removeEventListener("mousewheel",d))}function h(e){l.setPosition(e.x,e.y)}e.editor.setDefaultHandler("guttermousedown",(function(t){if(o.isFocused()&&0==t.getButton()){var n=a.getRegion(t);if("foldWidgets"!=n){var i=t.getDocumentPosition().row,r=o.session.selection;if(t.getShiftKey())r.selectTo(i,0);else{if(2==t.domEvent.detail)return o.selectAll(),t.preventDefault();e.$clickSelection=o.selection.getLineRange(i)}return e.setState("selectByLines"),e.captureMouse(t),t.preventDefault()}}})),e.editor.setDefaultHandler("guttermousemove",(function(s){var o=s.domEvent.target||s.domEvent.srcElement;if(i.hasCssClass(o,"ace_fold-widget"))return d();r&&e.$tooltipFollowsMouse&&h(s),n=s,t||(t=setTimeout((function(){t=null,n&&!e.isMousePressed?u():d()}),50))})),s.addListener(o.renderer.$gutter,"mouseout",(function(e){n=null,r&&!t&&(t=setTimeout((function(){t=null,d()}),50))})),o.on("changeSession",d)}function c(e){o.call(this,e)}r.inherits(c,o),function(){this.setPosition=function(e,t){var n=window.innerWidth||document.documentElement.clientWidth,i=window.innerHeight||document.documentElement.clientHeight,r=this.getWidth(),s=this.getHeight();e+=15,t+=15,e+r>n&&(e-=e+r-n),t+s>i&&(t-=20+s),o.prototype.setPosition.call(this,e,t)}}.call(c.prototype),t.GutterHandler=a})),ace.define("ace/mouse/mouse_event",["require","exports","module","ace/lib/event","ace/lib/useragent"],(function(e,t,n){"use strict";var i=e("../lib/event"),r=e("../lib/useragent"),s=t.MouseEvent=function(e,t){this.domEvent=e,this.editor=t,this.x=this.clientX=e.clientX,this.y=this.clientY=e.clientY,this.$pos=null,this.$inSelection=null,this.propagationStopped=!1,this.defaultPrevented=!1};(function(){this.stopPropagation=function(){i.stopPropagation(this.domEvent),this.propagationStopped=!0},this.preventDefault=function(){i.preventDefault(this.domEvent),this.defaultPrevented=!0},this.stop=function(){this.stopPropagation(),this.preventDefault()},this.getDocumentPosition=function(){return this.$pos||(this.$pos=this.editor.renderer.screenToTextCoordinates(this.clientX,this.clientY)),this.$pos},this.inSelection=function(){if(null!==this.$inSelection)return this.$inSelection;var e=this.editor,t=e.getSelectionRange();if(t.isEmpty())this.$inSelection=!1;else{var n=this.getDocumentPosition();this.$inSelection=t.contains(n.row,n.column)}return this.$inSelection},this.getButton=function(){return i.getButton(this.domEvent)},this.getShiftKey=function(){return this.domEvent.shiftKey},this.getAccelKey=r.isMac?function(){return this.domEvent.metaKey}:function(){return this.domEvent.ctrlKey}}).call(s.prototype)})),ace.define("ace/mouse/dragdrop_handler",["require","exports","module","ace/lib/dom","ace/lib/event","ace/lib/useragent"],(function(e,t,n){"use strict";var i=e("../lib/dom"),r=e("../lib/event"),s=e("../lib/useragent"),o=200,a=200,c=5;function l(e){var t=e.editor,n=i.createElement("img");n.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",s.isOpera&&(n.style.cssText="width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;");var l=["dragWait","dragWaitEnd","startDrag","dragReadyEnd","onMouseDrag"];l.forEach((function(t){e[t]=this[t]}),this),t.addEventListener("mousedown",this.onMouseDown.bind(e));var d,h,f,p,g,m,v,b,y,w,_,x=t.container,k=0;function A(e,n){var i=Date.now(),r=!n||e.row!=n.row,s=!n||e.column!=n.column;if(!w||r||s)t.$blockScrolling+=1,t.moveCursorToPosition(e),t.$blockScrolling-=1,w=i,_={x:h,y:f};else{var o=u(_.x,_.y,h,f);o>c?w=null:i-w>=a&&(t.renderer.scrollCursorIntoView(),w=null)}}function C(e,n){var i=Date.now(),r=t.renderer.layerConfig.lineHeight,s=t.renderer.layerConfig.characterWidth,a=t.renderer.scroller.getBoundingClientRect(),c={x:{left:h-a.left,right:a.right-h},y:{top:f-a.top,bottom:a.bottom-f}},l=Math.min(c.x.left,c.x.right),u=Math.min(c.y.top,c.y.bottom),d={row:e.row,column:e.column};l/s<=2&&(d.column+=c.x.left=o&&t.renderer.scrollCursorIntoView(d):y=i:y=null}function E(){var e=m;m=t.renderer.screenToTextCoordinates(h,f),A(m,e),C(m,e)}function S(){g=t.selection.toOrientedRange(),d=t.session.addMarker(g,"ace_selection",t.getSelectionStyle()),t.clearSelection(),t.isFocused()&&t.renderer.$cursorLayer.setBlinking(!1),clearInterval(p),E(),p=setInterval(E,20),k=0,r.addListener(document,"mousemove",T)}function F(){clearInterval(p),t.session.removeMarker(d),d=null,t.$blockScrolling+=1,t.selection.fromOrientedRange(g),t.$blockScrolling-=1,t.isFocused()&&!b&&t.renderer.$cursorLayer.setBlinking(!t.getReadOnly()),g=null,m=null,k=0,y=null,w=null,r.removeListener(document,"mousemove",T)}this.onDragStart=function(e){if(this.cancelDrag||!x.draggable){var i=this;return setTimeout((function(){i.startSelect(),i.captureMouse(e)}),0),e.preventDefault()}g=t.getSelectionRange();var r=e.dataTransfer;r.effectAllowed=t.getReadOnly()?"copy":"copyMove",s.isOpera&&(t.container.appendChild(n),n.scrollTop=0),r.setDragImage&&r.setDragImage(n,0,0),s.isOpera&&t.container.removeChild(n),r.clearData(),r.setData("Text",t.session.getTextRange()),b=!0,this.setState("drag")},this.onDragEnd=function(e){if(x.draggable=!1,b=!1,this.setState(null),!t.getReadOnly()){var n=e.dataTransfer.dropEffect;v||"move"!=n||t.session.remove(t.getSelectionRange()),t.renderer.$cursorLayer.setBlinking(!0)}this.editor.unsetStyle("ace_dragging"),this.editor.renderer.setCursorStyle("")},this.onDragEnter=function(e){if(!t.getReadOnly()&&L(e.dataTransfer))return h=e.clientX,f=e.clientY,d||S(),k++,e.dataTransfer.dropEffect=v=D(e),r.preventDefault(e)},this.onDragOver=function(e){if(!t.getReadOnly()&&L(e.dataTransfer))return h=e.clientX,f=e.clientY,d||(S(),k++),null!==$&&($=null),e.dataTransfer.dropEffect=v=D(e),r.preventDefault(e)},this.onDragLeave=function(e){if(k--,k<=0&&d)return F(),v=null,r.preventDefault(e)},this.onDrop=function(e){if(m){var n=e.dataTransfer;if(b)switch(v){case"move":g=g.contains(m.row,m.column)?{start:m,end:m}:t.moveText(g,m);break;case"copy":g=t.moveText(g,m,!0);break}else{var i=n.getData("Text");g={start:m,end:t.session.insert(m,i)},t.focus(),v=null}return F(),r.preventDefault(e)}},r.addListener(x,"dragstart",this.onDragStart.bind(e)),r.addListener(x,"dragend",this.onDragEnd.bind(e)),r.addListener(x,"dragenter",this.onDragEnter.bind(e)),r.addListener(x,"dragover",this.onDragOver.bind(e)),r.addListener(x,"dragleave",this.onDragLeave.bind(e)),r.addListener(x,"drop",this.onDrop.bind(e));var $=null;function T(){null==$&&($=setTimeout((function(){null!=$&&d&&F()}),20))}function L(e){var t=e.types;return!t||Array.prototype.some.call(t,(function(e){return"text/plain"==e||"Text"==e}))}function D(e){var t=["copy","copymove","all","uninitialized"],n=["move","copymove","linkmove","all","uninitialized"],i=s.isMac?e.altKey:e.ctrlKey,r="uninitialized";try{r=e.dataTransfer.effectAllowed.toLowerCase()}catch(e){}var o="none";return i&&t.indexOf(r)>=0?o="copy":n.indexOf(r)>=0?o="move":t.indexOf(r)>=0&&(o="copy"),o}}function u(e,t,n,i){return Math.sqrt(Math.pow(n-e,2)+Math.pow(i-t,2))}(function(){this.dragWait=function(){var e=Date.now()-this.mousedownEvent.time;e>this.editor.getDragDelay()&&this.startDrag()},this.dragWaitEnd=function(){var e=this.editor.container;e.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()),this.selectEnd()},this.dragReadyEnd=function(e){this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly()),this.editor.unsetStyle("ace_dragging"),this.editor.renderer.setCursorStyle(""),this.dragWaitEnd()},this.startDrag=function(){this.cancelDrag=!1;var e=this.editor,t=e.container;t.draggable=!0,e.renderer.$cursorLayer.setBlinking(!1),e.setStyle("ace_dragging");var n=s.isWin?"default":"move";e.renderer.setCursorStyle(n),this.setState("dragReady")},this.onMouseDrag=function(e){var t=this.editor.container;if(s.isIE&&"dragReady"==this.state){var n=u(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y);n>3&&t.dragDrop()}if("dragWait"===this.state){n=u(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y);n>0&&(t.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()))}},this.onMouseDown=function(e){if(this.$dragEnabled){this.mousedownEvent=e;var t=this.editor,n=e.inSelection(),i=e.getButton(),r=e.domEvent.detail||1;if(1===r&&0===i&&n){if(e.editor.inMultiSelectMode&&(e.getAccelKey()||e.getShiftKey()))return;this.mousedownEvent.time=Date.now();var o=e.domEvent.target||e.domEvent.srcElement;if("unselectable"in o&&(o.unselectable="on"),t.getDragDelay()){if(s.isWebKit){this.cancelDrag=!0;var a=t.container;a.draggable=!0}this.setState("dragWait")}else this.startDrag();this.captureMouse(e,this.onMouseDrag.bind(this)),e.defaultPrevented=!0}}}}).call(l.prototype),t.DragdropHandler=l})),ace.define("ace/lib/net",["require","exports","module","ace/lib/dom"],(function(e,t,n){"use strict";var i=e("./dom");t.get=function(e,t){var n=new XMLHttpRequest;n.open("GET",e,!0),n.onreadystatechange=function(){4===n.readyState&&t(n.responseText)},n.send(null)},t.loadScript=function(e,t){var n=i.getDocumentHead(),r=document.createElement("script");r.src=e,n.appendChild(r),r.onload=r.onreadystatechange=function(e,n){!n&&r.readyState&&"loaded"!=r.readyState&&"complete"!=r.readyState||(r=r.onload=r.onreadystatechange=null,n||t())}},t.qualifyURL=function(e){var t=document.createElement("a");return t.href=e,t.href}})),ace.define("ace/lib/event_emitter",["require","exports","module"],(function(e,t,n){"use strict";var i={},r=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};i._emit=i._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],i=this._defaultHandlers[e];if(n.length||i){"object"==typeof t&&t||(t={}),t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=r),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;o1&&(r=n[n.length-2]);var o=c[t+"Path"];return null==o?o=c.basePath:"/"==i&&(t=i=""),o&&"/"!=o.slice(-1)&&(o+="/"),o+t+i+r+this.get("suffix")},t.setModuleUrl=function(e,t){return c.$moduleUrls[e]=t},t.$loading={},t.loadModule=function(n,i){var r,o;Array.isArray(n)&&(o=n[0],n=n[1]);try{r=e(n)}catch(c){}if(r&&!t.$loading[n])return i&&i(r);if(t.$loading[n]||(t.$loading[n]=[]),t.$loading[n].push(i),!(t.$loading[n].length>1)){var a=function(){e([n],(function(e){t._emit("load.module",{name:n,module:e});var i=t.$loading[n];t.$loading[n]=null,i.forEach((function(t){t&&t(e)}))}))};if(!t.get("packaged"))return a();s.loadScript(t.moduleUrl(n,o),a)}},l(!0),t.init=l})),ace.define("ace/mouse/mouse_handler",["require","exports","module","ace/lib/event","ace/lib/useragent","ace/mouse/default_handlers","ace/mouse/default_gutter_handler","ace/mouse/mouse_event","ace/mouse/dragdrop_handler","ace/config"],(function(e,t,n){"use strict";var i=e("../lib/event"),r=e("../lib/useragent"),s=e("./default_handlers").DefaultHandlers,o=e("./default_gutter_handler").GutterHandler,a=e("./mouse_event").MouseEvent,c=e("./dragdrop_handler").DragdropHandler,l=e("../config"),u=function(e){var t=this;this.editor=e,new s(this),new o(this),new c(this);var n=function(t){var n=!document.hasFocus||!document.hasFocus()||!e.isFocused()&&document.activeElement==(e.textInput&&e.textInput.getElement());n&&window.focus(),e.focus()},a=e.renderer.getMouseEventTarget();i.addListener(a,"click",this.onMouseEvent.bind(this,"click")),i.addListener(a,"mousemove",this.onMouseMove.bind(this,"mousemove")),i.addMultiMouseDownListener([a,e.renderer.scrollBarV&&e.renderer.scrollBarV.inner,e.renderer.scrollBarH&&e.renderer.scrollBarH.inner,e.textInput&&e.textInput.getElement()].filter(Boolean),[400,300,250],this,"onMouseEvent"),i.addMouseWheelListener(e.container,this.onMouseWheel.bind(this,"mousewheel")),i.addTouchMoveListener(e.container,this.onTouchMove.bind(this,"touchmove"));var l=e.renderer.$gutter;i.addListener(l,"mousedown",this.onMouseEvent.bind(this,"guttermousedown")),i.addListener(l,"click",this.onMouseEvent.bind(this,"gutterclick")),i.addListener(l,"dblclick",this.onMouseEvent.bind(this,"gutterdblclick")),i.addListener(l,"mousemove",this.onMouseEvent.bind(this,"guttermousemove")),i.addListener(a,"mousedown",n),i.addListener(l,"mousedown",n),r.isIE&&e.renderer.scrollBarV&&(i.addListener(e.renderer.scrollBarV.element,"mousedown",n),i.addListener(e.renderer.scrollBarH.element,"mousedown",n)),e.on("mousemove",(function(n){if(!t.state&&!t.$dragDelay&&t.$dragEnabled){var i=e.renderer.screenToTextCoordinates(n.x,n.y),r=e.session.selection.getRange(),s=e.renderer;!r.isEmpty()&&r.insideStart(i.row,i.column)?s.setCursorStyle("default"):s.setCursorStyle("")}}))};(function(){this.onMouseEvent=function(e,t){this.editor._emit(e,new a(t,this.editor))},this.onMouseMove=function(e,t){var n=this.editor._eventRegistry&&this.editor._eventRegistry.mousemove;n&&n.length&&this.editor._emit(e,new a(t,this.editor))},this.onMouseWheel=function(e,t){var n=new a(t,this.editor);n.speed=2*this.$scrollSpeed,n.wheelX=t.wheelX,n.wheelY=t.wheelY,this.editor._emit(e,n)},this.onTouchMove=function(e,t){var n=new a(t,this.editor);n.speed=1,n.wheelX=t.wheelX,n.wheelY=t.wheelY,this.editor._emit(e,n)},this.setState=function(e){this.state=e},this.captureMouse=function(e,t){this.x=e.x,this.y=e.y,this.isMousePressed=!0;var n=this.editor.renderer;n.$keepTextAreaAtCursor&&(n.$keepTextAreaAtCursor=null);var s=this,o=function(e){if(e){if(r.isWebKit&&!e.which&&s.releaseMouse)return s.releaseMouse();s.x=e.clientX,s.y=e.clientY,t&&t(e),s.mouseEvent=new a(e,s.editor),s.$mouseMoved=!0}},c=function(e){clearInterval(u),l(),s[s.state+"End"]&&s[s.state+"End"](e),s.state="",null==n.$keepTextAreaAtCursor&&(n.$keepTextAreaAtCursor=!0,n.$moveTextAreaToCursor()),s.isMousePressed=!1,s.$onCaptureMouseMove=s.releaseMouse=null,e&&s.onMouseEvent("mouseup",e)},l=function(){s[s.state]&&s[s.state](),s.$mouseMoved=!1};if(r.isOldIE&&"dblclick"==e.domEvent.type)return setTimeout((function(){c(e)}));s.$onCaptureMouseMove=o,s.releaseMouse=i.capture(this.editor.container,o,c);var u=setInterval(l,20)},this.releaseMouse=null,this.cancelContextMenu=function(){var e=function(t){t&&t.domEvent&&"contextmenu"!=t.domEvent.type||(this.editor.off("nativecontextmenu",e),t&&t.domEvent&&i.stopEvent(t.domEvent))}.bind(this);setTimeout(e,10),this.editor.on("nativecontextmenu",e)}}).call(u.prototype),l.defineOptions(u.prototype,"mouseHandler",{scrollSpeed:{initialValue:2},dragDelay:{initialValue:r.isMac?150:0},dragEnabled:{initialValue:!0},focusTimout:{initialValue:0},tooltipFollowsMouse:{initialValue:!0}}),t.MouseHandler=u})),ace.define("ace/mouse/fold_handler",["require","exports","module"],(function(e,t,n){"use strict";function i(e){e.on("click",(function(t){var n=t.getDocumentPosition(),i=e.session,r=i.getFoldAt(n.row,n.column,1);r&&(t.getAccelKey()?i.removeFold(r):i.expandFold(r),t.stop())})),e.on("gutterclick",(function(t){var n=e.renderer.$gutterLayer.getRegion(t);if("foldWidgets"==n){var i=t.getDocumentPosition().row,r=e.session;r.foldWidgets&&r.foldWidgets[i]&&e.session.onFoldWidgetClick(i,t),e.isFocused()||e.focus(),t.stop()}})),e.on("gutterdblclick",(function(t){var n=e.renderer.$gutterLayer.getRegion(t);if("foldWidgets"==n){var i=t.getDocumentPosition().row,r=e.session,s=r.getParentFoldRangeData(i,!0),o=s.range||s.firstRange;if(o){i=o.start.row;var a=r.getFoldAt(i,r.getLine(i).length,1);a?r.removeFold(a):(r.addFold("...",o),e.renderer.scrollCursorIntoView({row:o.start.row,column:0}))}t.stop()}}))}t.FoldHandler=i})),ace.define("ace/keyboard/keybinding",["require","exports","module","ace/lib/keys","ace/lib/event"],(function(e,t,n){"use strict";var i=e("../lib/keys"),r=e("../lib/event"),s=function(e){this.$editor=e,this.$data={editor:e},this.$handlers=[],this.setDefaultHandler(e.commands)};(function(){this.setDefaultHandler=function(e){this.removeKeyboardHandler(this.$defaultHandler),this.$defaultHandler=e,this.addKeyboardHandler(e,0)},this.setKeyboardHandler=function(e){var t=this.$handlers;if(t[t.length-1]!=e){while(t[t.length-1]&&t[t.length-1]!=this.$defaultHandler)this.removeKeyboardHandler(t[t.length-1]);this.addKeyboardHandler(e,1)}},this.addKeyboardHandler=function(e,t){if(e){"function"!=typeof e||e.handleKeyboard||(e.handleKeyboard=e);var n=this.$handlers.indexOf(e);-1!=n&&this.$handlers.splice(n,1),void 0==t?this.$handlers.push(e):this.$handlers.splice(t,0,e),-1==n&&e.attach&&e.attach(this.$editor)}},this.removeKeyboardHandler=function(e){var t=this.$handlers.indexOf(e);return-1!=t&&(this.$handlers.splice(t,1),e.detach&&e.detach(this.$editor),!0)},this.getKeyboardHandler=function(){return this.$handlers[this.$handlers.length-1]},this.getStatusText=function(){var e=this.$data,t=e.editor;return this.$handlers.map((function(n){return n.getStatusText&&n.getStatusText(t,e)||""})).filter(Boolean).join(" ")},this.$callKeyboardHandlers=function(e,t,n,i){for(var s,o=!1,a=this.$editor.commands,c=this.$handlers.length;c--;)if(s=this.$handlers[c].handleKeyboard(this.$data,e,t,n,i),s&&s.command&&(o="null"==s.command||a.exec(s.command,this.$editor,s.args,i),o&&i&&-1!=e&&1!=s.passEvent&&1!=s.command.passEvent&&r.stopEvent(i),o))break;return o||-1!=e||(s={command:"insertstring"},o=a.exec("insertstring",this.$editor,t)),o&&this.$editor._signal&&this.$editor._signal("keyboardActivity",s),o},this.onCommandKey=function(e,t,n){var r=i.keyCodeToString(n);this.$callKeyboardHandlers(t,r,n,e)},this.onTextInput=function(e){this.$callKeyboardHandlers(-1,e)}}).call(s.prototype),t.KeyBinding=s})),ace.define("ace/lib/bidiutil",["require","exports","module"],(function(e,t,n){"use strict";var i=0,r=0,s=!1,o=!1,a=!1,c=[[0,3,0,1,0,0,0],[0,3,0,1,2,2,0],[0,3,0,17,2,0,1],[0,3,5,5,4,1,0],[0,3,21,21,4,0,1],[0,3,5,5,4,2,0]],l=[[2,0,1,1,0,1,0],[2,0,1,1,0,2,0],[2,0,2,1,3,2,0],[2,0,2,33,3,1,1]],u=0,d=1,h=0,f=1,p=2,g=3,m=4,v=5,b=6,y=7,w=8,_=9,x=10,k=11,A=12,C=13,E=14,S=15,F=16,$=17,T=18,L=[T,T,T,T,T,T,T,T,T,b,v,b,w,v,T,T,T,T,T,T,T,T,T,T,T,T,T,T,v,v,v,b,w,m,m,k,k,k,m,m,m,m,m,x,_,x,_,_,p,p,p,p,p,p,p,p,p,p,_,m,m,m,m,m,m,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,m,m,m,m,m,m,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,m,m,m,m,T,T,T,T,T,T,v,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,_,m,k,k,k,k,m,m,m,m,h,m,m,T,m,m,k,k,p,p,m,h,m,m,m,p,h,m,m,m,m,m],D=[w,w,w,w,w,w,w,w,w,w,w,T,T,T,h,f,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,w,v,C,E,S,F,$,_,k,k,k,k,k,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,_,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,w];function B(e,t,n,u){var d=i?l:c,h=null,f=null,p=null,g=0,m=null,y=null,_=-1,x=null,k=null,A=[];if(!u)for(x=0,u=[];x0)if(16==m){for(x=_;x-1){for(x=_;x=0;C--){if(u[C]!=w)break;t[C]=i}}}function R(e,t,n){if(!(r=e){s=h+1;while(s=e)s++;for(a=h,c=s-1;a=t.length||(c=n[r-1])!=p&&c!=g||(l=t[r+1])!=p&&l!=g?m:(s&&(l=g),l==c?l:m);case x:return c=r>0?n[r-1]:v,c==p&&r+10&&n[r-1]==p)return p;if(s)return m;d=r+1,u=t.length;while(d=1425&&D<=2303||64286==D;if(c=t[d],B&&(c==f||c==y))return f}return r<1||(c=t[r-1])==v?m:n[r-1];case v:return s=!1,o=!0,i;case b:return a=!0,m;case C:case E:case F:case $:case S:s=!1;case T:return m}}function M(e){var t=e.charCodeAt(0),n=t>>8;return 0==n?t>191?h:L[t]:5==n?/[\u0591-\u05f4]/.test(e)?f:h:6==n?/[\u0610-\u061a\u064b-\u065f\u06d6-\u06e4\u06e7-\u06ed]/.test(e)?A:/[\u0660-\u0669\u066b-\u066c]/.test(e)?g:1642==t?k:/[\u06f0-\u06f9]/.test(e)?p:y:32==n&&t<=8287?D[255&t]:254==n&&t>=65136?y:m}t.L=h,t.R=f,t.EN=p,t.ON_R=3,t.AN=4,t.R_H=5,t.B=6,t.DOT="·",t.doBidiReorder=function(e,n,r){if(e.length<2)return{};var s=e.split(""),o=new Array(s.length),a=new Array(s.length),c=[];i=r?d:u,B(s,c,s.length,n);for(var l=0;ly&&n[l]0&&"ل"===s[l-1]&&/\u0622|\u0623|\u0625|\u0627/.test(s[l])&&(c[l-1]=c[l]=t.R_H,l++);s[s.length-1]===t.DOT&&(c[s.length-1]=t.B);for(l=0;l=0&&(e=this.session.$docRowCache[n])}return e},this.getSplitIndex=function(){var e=0,t=this.session.$screenRowCache;if(t.length){var n,i=this.session.$getRowCacheIndex(t,this.currentRow);while(this.currentRow-e>0){if(n=this.session.$getRowCacheIndex(t,this.currentRow-e-1),n!==i)break;i=n,e++}}return e},this.updateRowLine=function(e,t){if(void 0===e&&(e=this.getDocumentRow()),this.wrapIndent=0,this.isLastRow=e===this.session.getLength()-1,this.line=this.session.getLine(e),this.session.$useWrapMode){var n=this.session.$wrapData[e];n&&(void 0===t&&(t=this.getSplitIndex()),t>0&&n.length?(this.wrapIndent=n.indent,this.line=t0?e-1:0,this.bidiMap),n=this.bidiMap.bidiLevels,r=0;0===e&&n[t]%2!==0&&t++;for(var s=0;s=l&&rn+o/2){if(n+=o,r===s.length-1){o=0;break}o=this.charWidths[s[++r]]}return r>0&&s[r-1]%2!==0&&s[r]%2===0?(e0&&s[r-1]%2===0&&s[r]%2!==0?t=1+(e>n?this.bidiMap.logicalFromVisual[r]:this.bidiMap.logicalFromVisual[r-1]):this.isRtlDir&&r===s.length-1&&0===o&&s[r-1]%2===0||!this.isRtlDir&&0===r&&s[r]%2!==0?t=1+this.bidiMap.logicalFromVisual[r]:(r>0&&s[r-1]%2!==0&&0!==o&&r--,t=this.bidiMap.logicalFromVisual[r]),t+this.wrapIndent}}).call(a.prototype),t.BidiHandler=a})),ace.define("ace/range",["require","exports","module"],(function(e,t,n){"use strict";var i=function(e,t){return e.row-t.row||e.column-t.column},r=function(e,t,n,i){this.start={row:e,column:t},this.end={row:n,column:i}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return"Range: ["+this.start.row+"/"+this.start.column+"] -> ["+this.end.row+"/"+this.end.column+"]"},this.contains=function(e,t){return 0==this.compare(e,t)},this.compareRange=function(e){var t,n=e.end,i=e.start;return t=this.compare(n.row,n.column),1==t?(t=this.compare(i.row,i.column),1==t?2:0==t?1:0):-1==t?-2:(t=this.compare(i.row,i.column),-1==t?-1:1==t?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return 0==this.comparePoint(e.start)&&0==this.comparePoint(e.end)},this.intersects=function(e){var t=this.compareRange(e);return-1==t||0==t||1==t},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){"object"==typeof e?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){"object"==typeof e?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return 0==this.compare(e,t)&&(!this.isEnd(e,t)&&!this.isStart(e,t))},this.insideStart=function(e,t){return 0==this.compare(e,t)&&!this.isEnd(e,t)},this.insideEnd=function(e,t){return 0==this.compare(e,t)&&!this.isStart(e,t)},this.compare=function(e,t){return this.isMultiLine()||e!==this.start.row?ethis.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0:tthis.end.column?1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.rowt)var i={row:t+1,column:0};else if(this.start.rowt.row||e.row==t.row&&e.column>t.column},this.getRange=function(){var e=this.anchor,t=this.lead;return this.isEmpty()?o.fromPoints(t,t):this.isBackwards()?o.fromPoints(t,e):o.fromPoints(e,t)},this.clearSelection=function(){this.$isEmpty||(this.$isEmpty=!0,this._emit("changeSelection"))},this.selectAll=function(){var e=this.doc.getLength()-1;this.setSelectionAnchor(0,0),this.moveCursorTo(e,this.doc.getLine(e).length)},this.setRange=this.setSelectionRange=function(e,t){t?(this.setSelectionAnchor(e.end.row,e.end.column),this.selectTo(e.start.row,e.start.column)):(this.setSelectionAnchor(e.start.row,e.start.column),this.selectTo(e.end.row,e.end.column)),this.getRange().isEmpty()&&(this.$isEmpty=!0),this.$desiredColumn=null},this.$moveSelection=function(e){var t=this.lead;this.$isEmpty&&this.setSelectionAnchor(t.row,t.column),e.call(this)},this.selectTo=function(e,t){this.$moveSelection((function(){this.moveCursorTo(e,t)}))},this.selectToPosition=function(e){this.$moveSelection((function(){this.moveCursorToPosition(e)}))},this.moveTo=function(e,t){this.clearSelection(),this.moveCursorTo(e,t)},this.moveToPosition=function(e){this.clearSelection(),this.moveCursorToPosition(e)},this.selectUp=function(){this.$moveSelection(this.moveCursorUp)},this.selectDown=function(){this.$moveSelection(this.moveCursorDown)},this.selectRight=function(){this.$moveSelection(this.moveCursorRight)},this.selectLeft=function(){this.$moveSelection(this.moveCursorLeft)},this.selectLineStart=function(){this.$moveSelection(this.moveCursorLineStart)},this.selectLineEnd=function(){this.$moveSelection(this.moveCursorLineEnd)},this.selectFileEnd=function(){this.$moveSelection(this.moveCursorFileEnd)},this.selectFileStart=function(){this.$moveSelection(this.moveCursorFileStart)},this.selectWordRight=function(){this.$moveSelection(this.moveCursorWordRight)},this.selectWordLeft=function(){this.$moveSelection(this.moveCursorWordLeft)},this.getWordRange=function(e,t){if("undefined"==typeof t){var n=e||this.lead;e=n.row,t=n.column}return this.session.getWordRange(e,t)},this.selectWord=function(){this.setSelectionRange(this.getWordRange())},this.selectAWord=function(){var e=this.getCursor(),t=this.session.getAWordRange(e.row,e.column);this.setSelectionRange(t)},this.getLineRange=function(e,t){var n,i="number"==typeof e?e:this.lead.row,r=this.session.getFoldLine(i);return r?(i=r.start.row,n=r.end.row):n=i,!0===t?new o(i,0,n,this.session.getLine(n).length):new o(i,0,n+1,0)},this.selectLine=function(){this.setSelectionRange(this.getLineRange())},this.moveCursorUp=function(){this.moveCursorBy(-1,0)},this.moveCursorDown=function(){this.moveCursorBy(1,0)},this.wouldMoveIntoSoftTab=function(e,t,n){var i=e.column,r=e.column+t;return n<0&&(i=e.column-t,r=e.column),this.session.isTabStop(e)&&this.doc.getLine(e.row).slice(i,r).split(" ").length-1==t},this.moveCursorLeft=function(){var e,t=this.lead.getPosition();if(e=this.session.getFoldAt(t.row,t.column,-1))this.moveCursorTo(e.start.row,e.start.column);else if(0===t.column)t.row>0&&this.moveCursorTo(t.row-1,this.doc.getLine(t.row-1).length);else{var n=this.session.getTabSize();this.wouldMoveIntoSoftTab(t,n,-1)&&!this.session.getNavigateWithinSoftTabs()?this.moveCursorBy(0,-n):this.moveCursorBy(0,-1)}},this.moveCursorRight=function(){var e,t=this.lead.getPosition();if(e=this.session.getFoldAt(t.row,t.column,1))this.moveCursorTo(e.end.row,e.end.column);else if(this.lead.column==this.doc.getLine(this.lead.row).length)this.lead.row0&&(t.column=i)}}this.moveCursorTo(t.row,t.column)},this.moveCursorFileEnd=function(){var e=this.doc.getLength()-1,t=this.doc.getLine(e).length;this.moveCursorTo(e,t)},this.moveCursorFileStart=function(){this.moveCursorTo(0,0)},this.moveCursorLongWordRight=function(){var e=this.lead.row,t=this.lead.column,n=this.doc.getLine(e),i=n.substring(t);this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0;var r=this.session.getFoldAt(e,t,1);if(r)this.moveCursorTo(r.end.row,r.end.column);else{if(this.session.nonTokenRe.exec(i)&&(t+=this.session.nonTokenRe.lastIndex,this.session.nonTokenRe.lastIndex=0,i=n.substring(t)),t>=n.length)return this.moveCursorTo(e,n.length),this.moveCursorRight(),void(e0&&this.moveCursorWordLeft());this.session.tokenRe.exec(s)&&(n-=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0),this.moveCursorTo(t,n)}},this.$shortWordEndIndex=function(e){var t,n=0,i=/\s/,r=this.session.tokenRe;if(r.lastIndex=0,this.session.tokenRe.exec(e))n=this.session.tokenRe.lastIndex;else{while((t=e[n])&&i.test(t))n++;if(n<1){r.lastIndex=0;while((t=e[n])&&!r.test(t))if(r.lastIndex=0,n++,i.test(t)){if(n>2){n--;break}while((t=e[n])&&i.test(t))n++;if(n>2)break}}}return r.lastIndex=0,n},this.moveCursorShortWordRight=function(){var e=this.lead.row,t=this.lead.column,n=this.doc.getLine(e),i=n.substring(t),r=this.session.getFoldAt(e,t,1);if(r)return this.moveCursorTo(r.end.row,r.end.column);if(t==n.length){var s=this.doc.getLength();do{e++,i=this.doc.getLine(e)}while(e0&&/^\s*$/.test(i));n=i.length,/\s+$/.test(i)||(i="")}var s=r.stringReverse(i),o=this.$shortWordEndIndex(s);return this.moveCursorTo(t,n-o)},this.moveCursorWordRight=function(){this.session.$selectLongWords?this.moveCursorLongWordRight():this.moveCursorShortWordRight()},this.moveCursorWordLeft=function(){this.session.$selectLongWords?this.moveCursorLongWordLeft():this.moveCursorShortWordLeft()},this.moveCursorBy=function(e,t){var n,i=this.session.documentToScreenPosition(this.lead.row,this.lead.column);0===t&&(0!==e&&(this.session.$bidiHandler.isBidiRow(i.row,this.lead.row)?(n=this.session.$bidiHandler.getPosLeft(i.column),i.column=Math.round(n/this.session.$bidiHandler.charWidths[0])):n=i.column*this.session.$bidiHandler.charWidths[0]),this.$desiredColumn?i.column=this.$desiredColumn:this.$desiredColumn=i.column);var r=this.session.screenToDocumentPosition(i.row+e,i.column,n);0!==e&&0===t&&r.row===this.lead.row&&r.column===this.lead.column&&this.session.lineWidgets&&this.session.lineWidgets[r.row]&&(r.row>0||e>0)&&r.row++,this.moveCursorTo(r.row,r.column+t,0===t)},this.moveCursorToPosition=function(e){this.moveCursorTo(e.row,e.column)},this.moveCursorTo=function(e,t,n){var i=this.session.getFoldAt(e,t,1);i&&(e=i.start.row,t=i.start.column),this.$keepDesiredColumnOnChange=!0;var r=this.session.getLine(e);/[\uDC00-\uDFFF]/.test(r.charAt(t))&&r.charAt(t-1)&&(this.lead.row==e&&this.lead.column==t+1?t-=1:t+=1),this.lead.setPosition(e,t),this.$keepDesiredColumnOnChange=!1,n||(this.$desiredColumn=null)},this.moveCursorToScreen=function(e,t,n){var i=this.session.screenToDocumentPosition(e,t);this.moveCursorTo(i.row,i.column,n)},this.detach=function(){this.lead.detach(),this.anchor.detach(),this.session=this.doc=null},this.fromOrientedRange=function(e){this.setSelectionRange(e,e.cursor==e.start),this.$desiredColumn=e.desiredColumn||this.$desiredColumn},this.toOrientedRange=function(e){var t=this.getRange();return e?(e.start.column=t.start.column,e.start.row=t.start.row,e.end.column=t.end.column,e.end.row=t.end.row):e=t,e.cursor=this.isBackwards()?e.start:e.end,e.desiredColumn=this.$desiredColumn,e},this.getRangeOfMovements=function(e){var t=this.getCursor();try{e(this);var n=this.getCursor();return o.fromPoints(t,n)}catch(i){return o.fromPoints(t,t)}finally{this.moveCursorToPosition(t)}},this.toJSON=function(){if(this.rangeCount)var e=this.ranges.map((function(e){var t=e.clone();return t.isBackwards=e.cursor==e.start,t}));else{e=this.getRange();e.isBackwards=this.isBackwards()}return e},this.fromJSON=function(e){if(void 0==e.start){if(this.rangeList){this.toSingleRange(e[0]);for(var t=e.length;t--;){var n=o.fromPoints(e[t].start,e[t].end);e[t].isBackwards&&(n.cursor=n.start),this.addRange(n,!0)}return}e=e[0]}this.rangeList&&this.toSingleRange(e),this.setSelectionRange(e,e.isBackwards)},this.isEqual=function(e){if((e.length||this.rangeCount)&&e.length!=this.rangeCount)return!1;if(!e.length||!this.ranges)return this.getRange().isEqual(e);for(var t=this.ranges.length;t--;)if(!this.ranges[t].isEqual(e[t]))return!1;return!0}}).call(a.prototype),t.Selection=a})),ace.define("ace/tokenizer",["require","exports","module","ace/config"],(function(e,t,n){"use strict";var i=e("./config"),r=2e3,s=function(e){for(var t in this.states=e,this.regExps={},this.matchMappings={},this.states){for(var n=this.states[t],i=[],r=0,s=this.matchMappings[t]={defaultToken:"text"},o="g",a=[],c=0;c1?this.$applyToken:l.token),d>1&&(/\\\d/.test(l.regex)?u=l.regex.replace(/\\([0-9]+)/g,(function(e,t){return"\\"+(parseInt(t,10)+r+1)})):(d=1,u=this.removeCapturingGroups(l.regex)),l.splitRegex||"string"==typeof l.token||a.push(l)),s[r]=c,r+=d,i.push(u),l.onMatch||(l.onMatch=null)}}i.length||(s[0]=0,i.push("$")),a.forEach((function(e){e.splitRegex=this.createSplitterRegexp(e.regex,o)}),this),this.regExps[t]=new RegExp("("+i.join(")|(")+")|($)",o)}};(function(){this.$setMaxTokenCount=function(e){r=0|e},this.$applyToken=function(e){var t=this.splitRegex.exec(e).slice(1),n=this.token.apply(this,t);if("string"===typeof n)return[{type:n,value:e}];for(var i=[],r=0,s=n.length;ru){var v=e.substring(u,m-g.length);h.type==f?h.value+=v:(h.type&&l.push(h),h={type:f,value:v})}for(var b=0;br){d>2*e.length&&this.reportError("infinite loop with in ace tokenizer",{startState:t,line:e});while(u1&&n[0]!==i&&n.unshift("#tmp",i),{tokens:l,state:n.length?n:i}},this.reportError=i.reportError}).call(s.prototype),t.Tokenizer=s})),ace.define("ace/mode/text_highlight_rules",["require","exports","module","ace/lib/lang"],(function(e,t,n){"use strict";var i=e("../lib/lang"),r=function(){this.$rules={start:[{token:"empty_line",regex:"^$"},{defaultToken:"text"}]}};(function(){this.addRules=function(e,t){if(t)for(var n in e){for(var i=e[n],r=0;r=this.$rowTokens.length){if(this.$row+=1,e||(e=this.$session.getLength()),this.$row>=e)return this.$row=e-1,null;this.$rowTokens=this.$session.getTokens(this.$row),this.$tokenIndex=0}return this.$rowTokens[this.$tokenIndex]},this.getCurrentToken=function(){return this.$rowTokens[this.$tokenIndex]},this.getCurrentTokenRow=function(){return this.$row},this.getCurrentTokenColumn=function(){var e=this.$rowTokens,t=this.$tokenIndex,n=e[t].start;if(void 0!==n)return n;n=0;while(t>0)t-=1,n+=e[t].value.length;return n},this.getCurrentTokenPosition=function(){return{row:this.$row,column:this.getCurrentTokenColumn()}},this.getCurrentTokenRange=function(){var e=this.$rowTokens[this.$tokenIndex],t=this.getCurrentTokenColumn();return new i(this.$row,t,this.$row,t+e.value.length)}}).call(r.prototype),t.TokenIterator=r})),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],(function(e,t,n){"use strict";var i,r=e("../../lib/oop"),s=e("../behaviour").Behaviour,o=e("../../token_iterator").TokenIterator,a=e("../../lib/lang"),c=["text","paren.rparen","punctuation.operator"],l=["text","paren.rparen","punctuation.operator","comment"],u={},d={'"':'"',"'":"'"},h=function(e){var t=-1;if(e.multiSelect&&(t=e.selection.index,u.rangeCount!=e.multiSelect.rangeCount&&(u={rangeCount:e.multiSelect.rangeCount})),u[t])return i=u[t];i=u[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:"",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:"",maybeInsertedLineEnd:""}},f=function(e,t,n,i){var r=e.end.row-e.start.row;return{text:n+t+i,selection:[0,e.start.column+1,r,e.end.column+(r?0:1)]}},p=function(e){this.add("braces","insertion",(function(t,n,r,s,o){var c=r.getCursorPosition(),l=s.doc.getLine(c.row);if("{"==o){h(r);var u=r.getSelectionRange(),d=s.doc.getTextRange(u);if(""!==d&&"{"!==d&&r.getWrapBehavioursEnabled())return f(u,d,"{","}");if(p.isSaneInsertion(r,s))return/[\]\}\)]/.test(l[c.column])||r.inMultiSelectMode||e&&e.braces?(p.recordAutoInsert(r,s,"}"),{text:"{}",selection:[1,1]}):(p.recordMaybeInsert(r,s,"{"),{text:"{",selection:[1,1]})}else if("}"==o){h(r);var g=l.substring(c.column,c.column+1);if("}"==g){var m=s.$findOpeningBracket("}",{column:c.column+1,row:c.row});if(null!==m&&p.isAutoInsertedClosing(c,l,o))return p.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else{if("\n"==o||"\r\n"==o){h(r);var v="";p.isMaybeInsertedClosing(c,l)&&(v=a.stringRepeat("}",i.maybeInsertedBrackets),p.clearMaybeInsertedClosing());g=l.substring(c.column,c.column+1);if("}"===g){var b=s.findMatchingBracket({row:c.row,column:c.column+1},"}");if(!b)return null;var y=this.$getIndent(s.getLine(b.row))}else{if(!v)return void p.clearMaybeInsertedClosing();y=this.$getIndent(l)}var w=y+s.getTabString();return{text:"\n"+w+"\n"+y+v,selection:[1,w.length,1,w.length]}}p.clearMaybeInsertedClosing()}})),this.add("braces","deletion",(function(e,t,n,r,s){var o=r.doc.getTextRange(s);if(!s.isMultiLine()&&"{"==o){h(n);var a=r.doc.getLine(s.start.row),c=a.substring(s.end.column,s.end.column+1);if("}"==c)return s.end.column++,s;i.maybeInsertedBrackets--}})),this.add("parens","insertion",(function(e,t,n,i,r){if("("==r){h(n);var s=n.getSelectionRange(),o=i.doc.getTextRange(s);if(""!==o&&n.getWrapBehavioursEnabled())return f(s,o,"(",")");if(p.isSaneInsertion(n,i))return p.recordAutoInsert(n,i,")"),{text:"()",selection:[1,1]}}else if(")"==r){h(n);var a=n.getCursorPosition(),c=i.doc.getLine(a.row),l=c.substring(a.column,a.column+1);if(")"==l){var u=i.$findOpeningBracket(")",{column:a.column+1,row:a.row});if(null!==u&&p.isAutoInsertedClosing(a,c,r))return p.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}})),this.add("parens","deletion",(function(e,t,n,i,r){var s=i.doc.getTextRange(r);if(!r.isMultiLine()&&"("==s){h(n);var o=i.doc.getLine(r.start.row),a=o.substring(r.start.column+1,r.start.column+2);if(")"==a)return r.end.column++,r}})),this.add("brackets","insertion",(function(e,t,n,i,r){if("["==r){h(n);var s=n.getSelectionRange(),o=i.doc.getTextRange(s);if(""!==o&&n.getWrapBehavioursEnabled())return f(s,o,"[","]");if(p.isSaneInsertion(n,i))return p.recordAutoInsert(n,i,"]"),{text:"[]",selection:[1,1]}}else if("]"==r){h(n);var a=n.getCursorPosition(),c=i.doc.getLine(a.row),l=c.substring(a.column,a.column+1);if("]"==l){var u=i.$findOpeningBracket("]",{column:a.column+1,row:a.row});if(null!==u&&p.isAutoInsertedClosing(a,c,r))return p.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}})),this.add("brackets","deletion",(function(e,t,n,i,r){var s=i.doc.getTextRange(r);if(!r.isMultiLine()&&"["==s){h(n);var o=i.doc.getLine(r.start.row),a=o.substring(r.start.column+1,r.start.column+2);if("]"==a)return r.end.column++,r}})),this.add("string_dquotes","insertion",(function(e,t,n,i,r){var s=i.$mode.$quotes||d;if(1==r.length&&s[r]){if(this.lineCommentStart&&-1!=this.lineCommentStart.indexOf(r))return;h(n);var o=r,a=n.getSelectionRange(),c=i.doc.getTextRange(a);if(!(""===c||1==c.length&&s[c])&&n.getWrapBehavioursEnabled())return f(a,c,o,o);if(!c){var l=n.getCursorPosition(),u=i.doc.getLine(l.row),p=u.substring(l.column-1,l.column),g=u.substring(l.column,l.column+1),m=i.getTokenAt(l.row,l.column),v=i.getTokenAt(l.row,l.column+1);if("\\"==p&&m&&/escape/.test(m.type))return null;var b,y=m&&/string|escape/.test(m.type),w=!v||/string|escape/.test(v.type);if(g==o)b=y!==w,b&&/string\.end/.test(v.type)&&(b=!1);else{if(y&&!w)return null;if(y&&w)return null;var _=i.$mode.tokenRe;_.lastIndex=0;var x=_.test(p);_.lastIndex=0;var k=_.test(p);if(x||k)return null;if(g&&!/[\s;,.})\]\\]/.test(g))return null;b=!0}return{text:b?o+o:"",selection:[1,1]}}}})),this.add("string_dquotes","deletion",(function(e,t,n,i,r){var s=i.doc.getTextRange(r);if(!r.isMultiLine()&&('"'==s||"'"==s)){h(n);var o=i.doc.getLine(r.start.row),a=o.substring(r.start.column+1,r.start.column+2);if(a==s)return r.end.column++,r}}))};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),i=new o(t,n.row,n.column);if(!this.$matchTokenType(i.getCurrentToken()||"text",c)){var r=new o(t,n.row,n.column+1);if(!this.$matchTokenType(r.getCurrentToken()||"text",c))return!1}return i.stepForward(),i.getCurrentTokenRow()!==n.row||this.$matchTokenType(i.getCurrentToken()||"text",l)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),s=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,s,i.autoInsertedLineEnd[0])||(i.autoInsertedBrackets=0),i.autoInsertedRow=r.row,i.autoInsertedLineEnd=n+s.substr(r.column),i.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),s=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,s)||(i.maybeInsertedBrackets=0),i.maybeInsertedRow=r.row,i.maybeInsertedLineStart=s.substr(0,r.column)+n,i.maybeInsertedLineEnd=s.substr(r.column),i.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return i.autoInsertedBrackets>0&&e.row===i.autoInsertedRow&&n===i.autoInsertedLineEnd[0]&&t.substr(e.column)===i.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return i.maybeInsertedBrackets>0&&e.row===i.maybeInsertedRow&&t.substr(e.column)===i.maybeInsertedLineEnd&&t.substr(0,e.column)==i.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){i.autoInsertedLineEnd=i.autoInsertedLineEnd.substr(1),i.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){i&&(i.maybeInsertedBrackets=0,i.maybeInsertedRow=-1)},r.inherits(p,s),t.CstyleBehaviour=p})),ace.define("ace/unicode",["require","exports","module"],(function(e,t,n){"use strict";function i(e){var n=/\w{4}/g;for(var i in e)t.packages[i]=e[i].replace(n,"\\u$&")}t.packages={},i({L:"0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05250531-055605590561-058705D0-05EA05F0-05F20621-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280904-0939093D09500958-0961097109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510D0-10FA10FC1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209421022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2D00-2D252D30-2D652D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A65FA662-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78BA78CA7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC",Ll:"0061-007A00AA00B500BA00DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02AF037103730377037B-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F0521052305250561-05871D00-1D2B1D62-1D771D79-1D9A1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF7210A210E210F2113212F21342139213C213D2146-2149214E21842C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7C2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2D00-2D25A641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76FA771-A778A77AA77CA77FA781A783A785A787A78CFB00-FB06FB13-FB17FF41-FF5A",Lu:"0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E0520052205240531-055610A0-10C51E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CEDA640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BFF21-FF3A",Lt:"01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC",Lm:"02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D611D781D9B-1DBF2071207F2090-20942C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A9CFAA70AADDFF70FF9EFF9F",Lo:"01BB01C0-01C3029405D0-05EA05F0-05F20621-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150904-0939093D09500958-096109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF12135-21382D30-2D652D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC",M:"0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DE-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0903093C093E-094E0951-0955096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F90-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135F1712-17141732-1734175217531772177317B6-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAA1C24-1C371CD0-1CD21CD4-1CE81CED1CF21DC0-1DE61DFD-1DFF20D0-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66F-A672A67CA67DA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26",Mn:"0300-036F0483-04870591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0902093C0941-0948094D0951-095509620963098109BC09C1-09C409CD09E209E30A010A020A3C0A410A420A470A480A4B-0A4D0A510A700A710A750A810A820ABC0AC1-0AC50AC70AC80ACD0AE20AE30B010B3C0B3F0B41-0B440B4D0B560B620B630B820BC00BCD0C3E-0C400C46-0C480C4A-0C4D0C550C560C620C630CBC0CBF0CC60CCC0CCD0CE20CE30D41-0D440D4D0D620D630DCA0DD2-0DD40DD60E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F71-0F7E0F80-0F840F860F870F90-0F970F99-0FBC0FC6102D-10301032-10371039103A103D103E10581059105E-10601071-1074108210851086108D109D135F1712-17141732-1734175217531772177317B7-17BD17C617C9-17D317DD180B-180D18A91920-19221927192819321939-193B1A171A181A561A58-1A5E1A601A621A65-1A6C1A73-1A7C1A7F1B00-1B031B341B36-1B3A1B3C1B421B6B-1B731B801B811BA2-1BA51BA81BA91C2C-1C331C361C371CD0-1CD21CD4-1CE01CE2-1CE81CED1DC0-1DE61DFD-1DFF20D0-20DC20E120E5-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66FA67CA67DA6F0A6F1A802A806A80BA825A826A8C4A8E0-A8F1A926-A92DA947-A951A980-A982A9B3A9B6-A9B9A9BCAA29-AA2EAA31AA32AA35AA36AA43AA4CAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE5ABE8ABEDFB1EFE00-FE0FFE20-FE26",Mc:"0903093E-09400949-094C094E0982098309BE-09C009C709C809CB09CC09D70A030A3E-0A400A830ABE-0AC00AC90ACB0ACC0B020B030B3E0B400B470B480B4B0B4C0B570BBE0BBF0BC10BC20BC6-0BC80BCA-0BCC0BD70C01-0C030C41-0C440C820C830CBE0CC0-0CC40CC70CC80CCA0CCB0CD50CD60D020D030D3E-0D400D46-0D480D4A-0D4C0D570D820D830DCF-0DD10DD8-0DDF0DF20DF30F3E0F3F0F7F102B102C10311038103B103C105610571062-10641067-106D108310841087-108C108F109A-109C17B617BE-17C517C717C81923-19261929-192B193019311933-193819B0-19C019C819C91A19-1A1B1A551A571A611A631A641A6D-1A721B041B351B3B1B3D-1B411B431B441B821BA11BA61BA71BAA1C24-1C2B1C341C351CE11CF2A823A824A827A880A881A8B4-A8C3A952A953A983A9B4A9B5A9BAA9BBA9BD-A9C0AA2FAA30AA33AA34AA4DAA7BABE3ABE4ABE6ABE7ABE9ABEAABEC",Me:"0488048906DE20DD-20E020E2-20E4A670-A672",N:"0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19",Nd:"0030-00390660-066906F0-06F907C0-07C90966-096F09E6-09EF0A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BEF0C66-0C6F0CE6-0CEF0D66-0D6F0E50-0E590ED0-0ED90F20-0F291040-10491090-109917E0-17E91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C59A620-A629A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19",Nl:"16EE-16F02160-21822185-218830073021-30293038-303AA6E6-A6EF",No:"00B200B300B900BC-00BE09F4-09F90BF0-0BF20C78-0C7E0D70-0D750F2A-0F331369-137C17F0-17F920702074-20792080-20892150-215F21892460-249B24EA-24FF2776-27932CFD3192-31953220-32293251-325F3280-328932B1-32BFA830-A835",P:"0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100AB00B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F3A-0F3D0F850FD0-0FD4104A-104F10FB1361-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2E00-2E2E2E302E313001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65",Pd:"002D058A05BE140018062010-20152E172E1A301C303030A0FE31FE32FE58FE63FF0D",Ps:"0028005B007B0F3A0F3C169B201A201E2045207D208D23292768276A276C276E27702772277427C527E627E827EA27EC27EE2983298529872989298B298D298F299129932995299729D829DA29FC2E222E242E262E283008300A300C300E3010301430163018301A301DFD3EFE17FE35FE37FE39FE3BFE3DFE3FFE41FE43FE47FE59FE5BFE5DFF08FF3BFF5BFF5FFF62",Pe:"0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63",Pi:"00AB2018201B201C201F20392E022E042E092E0C2E1C2E20",Pf:"00BB2019201D203A2E032E052E0A2E0D2E1D2E21",Pc:"005F203F20402054FE33FE34FE4D-FE4FFF3F",Po:"0021-00230025-0027002A002C002E002F003A003B003F0040005C00A100B700BF037E0387055A-055F058905C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F850FD0-0FD4104A-104F10FB1361-1368166D166E16EB-16ED1735173617D4-17D617D8-17DA1800-18051807-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD3201620172020-20272030-2038203B-203E2041-20432047-205120532055-205E2CF9-2CFC2CFE2CFF2E002E012E06-2E082E0B2E0E-2E162E182E192E1B2E1E2E1F2E2A-2E2E2E302E313001-3003303D30FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFE10-FE16FE19FE30FE45FE46FE49-FE4CFE50-FE52FE54-FE57FE5F-FE61FE68FE6AFE6BFF01-FF03FF05-FF07FF0AFF0CFF0EFF0FFF1AFF1BFF1FFF20FF3CFF61FF64FF65",S:"0024002B003C-003E005E0060007C007E00A2-00A900AC00AE-00B100B400B600B800D700F702C2-02C502D2-02DF02E5-02EB02ED02EF-02FF03750384038503F604820606-0608060B060E060F06E906FD06FE07F609F209F309FA09FB0AF10B700BF3-0BFA0C7F0CF10CF20D790E3F0F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-139917DB194019E0-19FF1B61-1B6A1B74-1B7C1FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE20442052207A-207C208A-208C20A0-20B8210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B2140-2144214A-214D214F2190-2328232B-23E82400-24262440-244A249C-24E92500-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE27C0-27C427C7-27CA27CC27D0-27E527F0-29822999-29D729DC-29FB29FE-2B4C2B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F309B309C319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A700-A716A720A721A789A78AA828-A82BA836-A839AA77-AA79FB29FDFCFDFDFE62FE64-FE66FE69FF04FF0BFF1C-FF1EFF3EFF40FF5CFF5EFFE0-FFE6FFE8-FFEEFFFCFFFD",Sm:"002B003C-003E007C007E00AC00B100D700F703F60606-060820442052207A-207C208A-208C2140-2144214B2190-2194219A219B21A021A321A621AE21CE21CF21D221D421F4-22FF2308-230B23202321237C239B-23B323DC-23E125B725C125F8-25FF266F27C0-27C427C7-27CA27CC27D0-27E527F0-27FF2900-29822999-29D729DC-29FB29FE-2AFF2B30-2B442B47-2B4CFB29FE62FE64-FE66FF0BFF1C-FF1EFF5CFF5EFFE2FFE9-FFEC",Sc:"002400A2-00A5060B09F209F309FB0AF10BF90E3F17DB20A0-20B8A838FDFCFE69FF04FFE0FFE1FFE5FFE6",Sk:"005E006000A800AF00B400B802C2-02C502D2-02DF02E5-02EB02ED02EF-02FF0375038403851FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE309B309CA700-A716A720A721A789A78AFF3EFF40FFE3",So:"00A600A700A900AE00B000B60482060E060F06E906FD06FE07F609FA0B700BF3-0BF80BFA0C7F0CF10CF20D790F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-1399194019E0-19FF1B61-1B6A1B74-1B7C210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B214A214C214D214F2195-2199219C-219F21A121A221A421A521A7-21AD21AF-21CD21D021D121D321D5-21F32300-2307230C-231F2322-2328232B-237B237D-239A23B4-23DB23E2-23E82400-24262440-244A249C-24E92500-25B625B8-25C025C2-25F72600-266E2670-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE2800-28FF2B00-2B2F2B452B462B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A828-A82BA836A837A839AA77-AA79FDFDFFE4FFE8FFEDFFEEFFFCFFFD",Z:"002000A01680180E2000-200A20282029202F205F3000",Zs:"002000A01680180E2000-200A202F205F3000",Zl:"2028",Zp:"2029",C:"0000-001F007F-009F00AD03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-0605061C061D0620065F06DD070E070F074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17B417B517DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF200B-200F202A-202E2060-206F20722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-F8FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFD-FF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFFBFFFEFFFF",Cc:"0000-001F007F-009F",Cf:"00AD0600-060306DD070F17B417B5200B-200F202A-202E2060-2064206A-206FFEFFFFF9-FFFB",Co:"E000-F8FF",Cs:"D800-DFFF",Cn:"03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-05FF06040605061C061D0620065F070E074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF2065-206920722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-D7FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFDFEFEFF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFF8FFFEFFFF"})})),ace.define("ace/mode/text",["require","exports","module","ace/tokenizer","ace/mode/text_highlight_rules","ace/mode/behaviour/cstyle","ace/unicode","ace/lib/lang","ace/token_iterator","ace/range"],(function(e,t,n){"use strict";var i=e("../tokenizer").Tokenizer,r=e("./text_highlight_rules").TextHighlightRules,s=e("./behaviour/cstyle").CstyleBehaviour,o=e("../unicode"),a=e("../lib/lang"),c=e("../token_iterator").TokenIterator,l=e("../range").Range,u=function(){this.HighlightRules=r};(function(){this.$defaultBehaviour=new s,this.tokenRe=new RegExp("^["+o.packages.L+o.packages.Mn+o.packages.Mc+o.packages.Nd+o.packages.Pc+"\\$_]+","g"),this.nonTokenRe=new RegExp("^(?:[^"+o.packages.L+o.packages.Mn+o.packages.Mc+o.packages.Nd+o.packages.Pc+"\\$_]|\\s])+","g"),this.getTokenizer=function(){return this.$tokenizer||(this.$highlightRules=this.$highlightRules||new this.HighlightRules(this.$highlightRuleConfig),this.$tokenizer=new i(this.$highlightRules.getRules())),this.$tokenizer},this.lineCommentStart="",this.blockComment="",this.toggleCommentLines=function(e,t,n,i){var r=t.doc,s=!0,o=!0,c=1/0,l=t.getTabSize(),u=!1;if(this.lineCommentStart){if(Array.isArray(this.lineCommentStart))g=this.lineCommentStart.map(a.escapeRegExp).join("|"),f=this.lineCommentStart[0];else g=a.escapeRegExp(this.lineCommentStart),f=this.lineCommentStart;g=new RegExp("^(\\s*)(?:"+g+") ?"),u=t.getUseSoftTabs();b=function(e,t){var n=e.match(g);if(n){var i=n[1].length,s=n[0].length;h(e,i,s)||" "!=n[0][s-1]||s--,r.removeInLine(t,i,s)}};var d=f+" ",h=(v=function(e,t){s&&!/\S/.test(e)||(h(e,c,c)?r.insertInLine({row:t,column:c},d):r.insertInLine({row:t,column:c},f))},y=function(e,t){return g.test(e)},function(e,t,n){var i=0;while(t--&&" "==e.charAt(t))i++;if(i%l!=0)return!1;i=0;while(" "==e.charAt(n++))i++;return l>2?i%l!=l-1:i%l==0})}else{if(!this.blockComment)return!1;var f=this.blockComment.start,p=this.blockComment.end,g=new RegExp("^(\\s*)(?:"+a.escapeRegExp(f)+")"),m=new RegExp("(?:"+a.escapeRegExp(p)+")\\s*$"),v=function(e,t){y(e,t)||s&&!/\S/.test(e)||(r.insertInLine({row:t,column:e.length},p),r.insertInLine({row:t,column:c},f))},b=function(e,t){var n;(n=e.match(m))&&r.removeInLine(t,e.length-n[0].length,e.length),(n=e.match(g))&&r.removeInLine(t,n[1].length,n[0].length)},y=function(e,n){if(g.test(e))return!0;for(var i=t.getTokens(n),r=0;re.length&&(_=e.length)})),c==1/0&&(c=_,s=!1,o=!1),u&&c%l!=0&&(c=Math.floor(c/l)*l),w(o?b:v)},this.toggleBlockComment=function(e,t,n,i){var r=this.blockComment;if(r){!r.start&&r[0]&&(r=r[0]);var s,o,a=new c(t,i.row,i.column),u=a.getCurrentToken(),d=(t.selection,t.selection.toOrientedRange());if(u&&/comment/.test(u.type)){var h,f;while(u&&/comment/.test(u.type)){var p=u.value.indexOf(r.start);if(-1!=p){var g=a.getCurrentTokenRow(),m=a.getCurrentTokenColumn()+p;h=new l(g,m,g,m+r.start.length);break}u=a.stepBackward()}a=new c(t,i.row,i.column),u=a.getCurrentToken();while(u&&/comment/.test(u.type)){p=u.value.indexOf(r.end);if(-1!=p){g=a.getCurrentTokenRow(),m=a.getCurrentTokenColumn()+p;f=new l(g,m,g,m+r.end.length);break}u=a.stepForward()}f&&t.remove(f),h&&(t.remove(h),s=h.start.row,o=-r.start.length)}else o=r.start.length,s=n.start.row,t.insert(n.end,r.end),t.insert(n.start,r.start);d.start.row==s&&(d.start.column+=o),d.end.row==s&&(d.end.column+=o),t.selection.fromOrientedRange(d)}},this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.autoOutdent=function(e,t,n){},this.$getIndent=function(e){return e.match(/^\s*/)[0]},this.createWorker=function(e){return null},this.createModeDelegates=function(e){for(var t in this.$embeds=[],this.$modes={},e)e[t]&&(this.$embeds.push(t),this.$modes[t]=new e[t]);var n=["toggleBlockComment","toggleCommentLines","getNextLineIndent","checkOutdent","autoOutdent","transformAction","getCompletions"];for(t=0;tthis.row)){var n=t(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)}},this.setPosition=function(e,t,n){var i;if(i=n?{row:e,column:t}:this.$clipPositionToDocument(e,t),this.row!=i.row||this.column!=i.column){var r={row:this.row,column:this.column};this.row=i.row,this.column=i.column,this._signal("change",{old:r,value:i})}},this.detach=function(){this.document.removeEventListener("change",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on("change",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)})),ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"],(function(e,t,n){"use strict";var i=e("./lib/oop"),r=e("./apply_delta").applyDelta,s=e("./lib/event_emitter").EventEmitter,o=e("./range").Range,a=e("./anchor").Anchor,c=function(e){this.$lines=[""],0===e.length?this.$lines=[""]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){i.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new o(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new a(this,e,t)},0==="aaa".split(/a/).length?this.$split=function(e){return e.replace(/\r\n|\r/g,"\n").split("\n")}:this.$split=function(e){return e.split(/\r\n|\r|\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\r\n|\r|\n)/m);this.$autoNewLine=t?t[1]:"\n",this._signal("changeNewLineMode")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case"windows":return"\r\n";case"unix":return"\n";default:return this.$autoNewLine||"\n"}},this.$autoNewLine="",this.$newLineMode="auto",this.setNewLineMode=function(e){this.$newLineMode!==e&&(this.$newLineMode=e,this._signal("changeNewLineMode"))},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return"\r\n"==e||"\r"==e||"\n"==e},this.getLine=function(e){return this.$lines[e]||""},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{t=this.getLines(e.start.row,e.end.row),t[0]=(t[0]||"").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead."),this.insertMergedLines(e,["",""])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),i=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:i,action:"insert",lines:[t]},!0),this.clonePos(i)},this.clippedPos=function(e,t){var n=this.getLength();void 0===e?e=n:e<0?e=0:e>=n&&(e=n-1,t=void 0);var i=this.getLine(e);return void 0==t&&(t=i.length),t=Math.min(Math.max(t,0),i.length),{row:e,column:t}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){e=Math.min(Math.max(e,0),this.getLength());var n=0;e0,i=t=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:"remove",lines:["",""]})},this.replace=function(e,t){return e instanceof o||(e=o.fromPoints(e.start,e.end)),0===t.length&&e.isEmpty()?e.start:t==this.getTextRange(e)?e.end:(this.remove(e),n=t?this.insert(e.start,t):e.start,n);var n},this.applyDeltas=function(e){for(var t=0;t=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n="insert"==e.action;(n?e.lines.length<=1&&!e.lines[0]:!o.comparePoints(e.start,e.end))||(n&&e.lines.length>2e4&&this.$splitAndapplyLargeDelta(e,2e4),r(this.$lines,e,t),this._signal("change",e))},this.$splitAndapplyLargeDelta=function(e,t){var n=e.lines,i=n.length,r=e.start.row,s=e.start.column,o=0,a=0;do{o=a,a+=t-1;var c=n.slice(o,a);if(a>i){e.lines=c,e.start.row=r+o,e.start.column=s;break}c.push(""),this.applyDelta({start:this.pos(r+o,s),end:this.pos(r+a,s=0),action:e.action,lines:c},!0)}while(1)},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:"insert"==e.action?"remove":"insert",lines:e.lines.slice()})},this.indexToPosition=function(e,t){for(var n=this.$lines||this.getAllLines(),i=this.getNewLineCharacter().length,r=t||0,s=n.length;r20){n.running=setTimeout(n.$worker,20);break}}n.currentLine=t,-1==i&&(i=t),s<=i&&n.fireUpdateEvent(s,i)}}};(function(){i.implement(this,r),this.setTokenizer=function(e){this.tokenizer=e,this.lines=[],this.states=[],this.start(0)},this.setDocument=function(e){this.doc=e,this.lines=[],this.states=[],this.stop()},this.fireUpdateEvent=function(e,t){var n={first:e,last:t};this._signal("update",{data:n})},this.start=function(e){this.currentLine=Math.min(e||0,this.currentLine,this.doc.getLength()),this.lines.splice(this.currentLine,this.lines.length),this.states.splice(this.currentLine,this.states.length),this.stop(),this.running=setTimeout(this.$worker,700)},this.scheduleStart=function(){this.running||(this.running=setTimeout(this.$worker,700))},this.$updateOnChange=function(e){var t=e.start.row,n=e.end.row-t;if(0===n)this.lines[t]=null;else if("remove"==e.action)this.lines.splice(t,n+1,null),this.states.splice(t,n+1,null);else{var i=Array(n+1);i.unshift(t,1),this.lines.splice.apply(this.lines,i),this.states.splice.apply(this.states,i)}this.currentLine=Math.min(t,this.currentLine,this.doc.getLength()),this.stop()},this.stop=function(){this.running&&clearTimeout(this.running),this.running=!1},this.getTokens=function(e){return this.lines[e]||this.$tokenizeRow(e)},this.getState=function(e){return this.currentLine==e&&this.$tokenizeRow(e),this.states[e]||"start"},this.$tokenizeRow=function(e){var t=this.doc.getLine(e),n=this.states[e-1],i=this.tokenizer.getLineTokens(t,n,e);return this.states[e]+""!==i.state+""?(this.states[e]=i.state,this.lines[e+1]=null,this.currentLine>e+1&&(this.currentLine=e+1)):this.currentLine==e&&(this.currentLine=e+1),this.lines[e]=i.tokens}}).call(s.prototype),t.BackgroundTokenizer=s})),ace.define("ace/search_highlight",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"],(function(e,t,n){"use strict";var i=e("./lib/lang"),r=(e("./lib/oop"),e("./range").Range),s=function(e,t,n){this.setRegexp(e),this.clazz=t,this.type=n||"text"};(function(){this.MAX_RANGES=500,this.setRegexp=function(e){this.regExp+""!=e+""&&(this.regExp=e,this.cache=[])},this.update=function(e,t,n,s){if(this.regExp)for(var o=s.firstRow,a=s.lastRow,c=o;c<=a;c++){var l=this.cache[c];null==l&&(l=i.getMatchOffsets(n.getLine(c),this.regExp),l.length>this.MAX_RANGES&&(l=l.slice(0,this.MAX_RANGES)),l=l.map((function(e){return new r(c,e.offset,c,e.offset+e.length)})),this.cache[c]=l.length?l:"");for(var u=l.length;u--;)t.drawSingleLineMarker(e,l[u].toScreenRange(n),this.clazz,s)}}}).call(s.prototype),t.SearchHighlight=s})),ace.define("ace/edit_session/fold_line",["require","exports","module","ace/range"],(function(e,t,n){"use strict";var i=e("../range").Range;function r(e,t){this.foldData=e,Array.isArray(t)?this.folds=t:t=this.folds=[t];var n=t[t.length-1];this.range=new i(t[0].start.row,t[0].start.column,n.end.row,n.end.column),this.start=this.range.start,this.end=this.range.end,this.folds.forEach((function(e){e.setFoldLine(this)}),this)}(function(){this.shiftRow=function(e){this.start.row+=e,this.end.row+=e,this.folds.forEach((function(t){t.start.row+=e,t.end.row+=e}))},this.addFold=function(e){if(e.sameRow){if(e.start.rowthis.endRow)throw new Error("Can't add a fold to this FoldLine as it has no connection");this.folds.push(e),this.folds.sort((function(e,t){return-e.range.compareEnd(t.start.row,t.start.column)})),this.range.compareEnd(e.start.row,e.start.column)>0?(this.end.row=e.end.row,this.end.column=e.end.column):this.range.compareStart(e.end.row,e.end.column)<0&&(this.start.row=e.start.row,this.start.column=e.start.column)}else if(e.start.row==this.end.row)this.folds.push(e),this.end.row=e.end.row,this.end.column=e.end.column;else{if(e.end.row!=this.start.row)throw new Error("Trying to add fold to FoldRow that doesn't have a matching row");this.folds.unshift(e),this.start.row=e.start.row,this.start.column=e.start.column}e.foldLine=this},this.containsRow=function(e){return e>=this.start.row&&e<=this.end.row},this.walk=function(e,t,n){var i,r,s,o=0,a=this.folds,c=!0;null==t&&(t=this.end.row,n=this.end.column);for(var l=0;l0)){var c=r(e,o.start);return 0===a?t&&0!==c?-s-2:s:c>0||0===c&&!t?s:-s-1}}return-s-1},this.add=function(e){var t=!e.isEmpty(),n=this.pointIndex(e.start,t);n<0&&(n=-n-1);var i=this.pointIndex(e.end,t,n);return i<0?i=-i-1:i++,this.ranges.splice(n,i-n,e)},this.addList=function(e){for(var t=[],n=e.length;n--;)t.push.apply(t,this.add(e[n]));return t},this.substractPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges.splice(t,1)},this.merge=function(){var e=[],t=this.ranges;t=t.sort((function(e,t){return r(e.start,t.start)}));for(var n,i=t[0],s=1;s=0},this.containsPoint=function(e){return this.pointIndex(e)>=0},this.rangeAtPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges[t]},this.clipRows=function(e,t){var n=this.ranges;if(n[0].start.row>t||n[n.length-1].start.rowi)break;if(u.start.row==i&&u.start.column>=t.column&&(u.start.column==t.column&&this.$insertRight||(u.start.column+=o,u.start.row+=s)),u.end.row==i&&u.end.column>=t.column){if(u.end.column==t.column&&this.$insertRight)continue;u.end.column==t.column&&o>0&&cu.start.column&&u.end.column==a[c+1].start.column&&(u.end.column-=o),u.end.column+=o,u.end.row+=s}}}if(0!=s&&c=e)return r;if(r.end.row>e)return null}return null},this.getNextFoldLine=function(e,t){var n=this.$foldData,i=0;for(t&&(i=n.indexOf(t)),-1==i&&(i=0),i;i=e)return r}return null},this.getFoldedRowCount=function(e,t){for(var n=this.$foldData,i=t-e+1,r=0;r=t){a=e?i-=t-a:i=0);break}o>=e&&(i-=a>=e?o-a:o-e+1)}return i},this.$addFoldLine=function(e){return this.$foldData.push(e),this.$foldData.sort((function(e,t){return e.start.row-t.start.row})),e},this.addFold=function(e,t){var n,i=this.$foldData,o=!1;e instanceof s?n=e:(n=new s(t,e),n.collapseChildren=t.collapseChildren),this.$clipRangeToDocument(n.range);var a=n.start.row,c=n.start.column,l=n.end.row,u=n.end.column;if(!(a0&&(this.removeFolds(f),f.forEach((function(e){n.addSubFold(e)})));for(var p=0;p0&&this.foldAll(e.start.row+1,e.end.row,e.collapseChildren-1),e.subFolds=[]},this.expandFolds=function(e){e.forEach((function(e){this.expandFold(e)}),this)},this.unfold=function(e,t){var n,r;if(null==e?(n=new i(0,0,this.getLength(),0),t=!0):n="number"==typeof e?new i(e,0,e,this.getLine(e).length):"row"in e?i.fromPoints(e,e):e,r=this.getFoldsInRangeList(n),t)this.removeFolds(r);else{var s=r;while(s.length)this.expandFolds(s),s=this.getFoldsInRangeList(n)}if(r.length)return r},this.isRowFolded=function(e,t){return!!this.getFoldLine(e,t)},this.getRowFoldEnd=function(e,t){var n=this.getFoldLine(e,t);return n?n.end.row:e},this.getRowFoldStart=function(e,t){var n=this.getFoldLine(e,t);return n?n.start.row:e},this.getFoldDisplayLine=function(e,t,n,i,r){null==i&&(i=e.start.row),null==r&&(r=0),null==t&&(t=e.end.row),null==n&&(n=this.getLine(t).length);var s=this.doc,o="";return e.walk((function(e,t,n,a){if(!(tu)break}while(s&&c.test(s.type));s=r.stepBackward()}else s=r.getCurrentToken();return l.end.row=r.getCurrentTokenRow(),l.end.column=r.getCurrentTokenColumn()+s.value.length-2,l}},this.foldAll=function(e,t,n){void 0==n&&(n=1e5);var i=this.foldWidgets;if(i){t=t||this.getLength(),e=e||0;for(var r=e;r=e){r=s.end.row;try{var o=this.addFold("...",s);o&&(o.collapseChildren=n)}catch(a){}}}}},this.$foldStyles={manual:1,markbegin:1,markbeginend:1},this.$foldStyle="markbegin",this.setFoldStyle=function(e){if(!this.$foldStyles[e])throw new Error("invalid fold style: "+e+"["+Object.keys(this.$foldStyles).join(", ")+"]");if(this.$foldStyle!=e){this.$foldStyle=e,"manual"==e&&this.unfold();var t=this.$foldMode;this.$setFolding(null),this.$setFolding(t)}},this.$setFolding=function(e){this.$foldMode!=e&&(this.$foldMode=e,this.off("change",this.$updateFoldWidgets),this.off("tokenizerUpdate",this.$tokenizerUpdateFoldWidgets),this._signal("changeAnnotation"),e&&"manual"!=this.$foldStyle?(this.foldWidgets=[],this.getFoldWidget=e.getFoldWidget.bind(e,this,this.$foldStyle),this.getFoldWidgetRange=e.getFoldWidgetRange.bind(e,this,this.$foldStyle),this.$updateFoldWidgets=this.updateFoldWidgets.bind(this),this.$tokenizerUpdateFoldWidgets=this.tokenizerUpdateFoldWidgets.bind(this),this.on("change",this.$updateFoldWidgets),this.on("tokenizerUpdate",this.$tokenizerUpdateFoldWidgets)):this.foldWidgets=null)},this.getParentFoldRangeData=function(e,t){var n=this.foldWidgets;if(!n||t&&n[e])return{};var i,r=e-1;while(r>=0){var s=n[r];if(null==s&&(s=n[r]=this.getFoldWidget(r)),"start"==s){var o=this.getFoldWidgetRange(r);if(i||(i=o),o&&o.end.row>=e)break}r--}return{range:-1!==r&&o,firstRange:i}},this.onFoldWidgetClick=function(e,t){t=t.domEvent;var n={children:t.shiftKey,all:t.ctrlKey||t.metaKey,siblings:t.altKey},i=this.$toggleFoldWidget(e,n);if(!i){var r=t.target||t.srcElement;r&&/ace_fold-widget/.test(r.className)&&(r.className+=" ace_invalid")}},this.$toggleFoldWidget=function(e,t){if(this.getFoldWidget){var n=this.getFoldWidget(e),i=this.getLine(e),r="end"===n?-1:1,s=this.getFoldAt(e,-1===r?0:i.length,r);if(s)return t.children||t.all?this.removeFold(s):this.expandFold(s),s;var o=this.getFoldWidgetRange(e,!0);if(o&&!o.isMultiLine()&&(s=this.getFoldAt(o.start.row,o.start.column,1),s&&o.isEqual(s.range)))return this.removeFold(s),s;if(t.siblings){var a=this.getParentFoldRangeData(e);if(a.range)var c=a.range.start.row+1,l=a.range.end.row;this.foldAll(c,l,t.all?1e4:0)}else t.children?(l=o?o.end.row:this.getLength(),this.foldAll(e+1,l,t.all?1e4:0)):o&&(t.all&&(o.collapseChildren=1e4),this.addFold("...",o));return o}},this.toggleFoldWidget=function(e){var t=this.selection.getCursor().row;t=this.getRowFoldStart(t);var n=this.$toggleFoldWidget(t,{});if(!n){var i=this.getParentFoldRangeData(t,!0);if(n=i.range||i.firstRange,n){t=n.start.row;var r=this.getFoldAt(t,this.getLine(t).length,1);r?this.removeFold(r):this.addFold("...",n)}}},this.updateFoldWidgets=function(e){var t=e.start.row,n=e.end.row-t;if(0===n)this.foldWidgets[t]=null;else if("remove"==e.action)this.foldWidgets.splice(t,n+1,null);else{var i=Array(n+1);i.unshift(t,1),this.foldWidgets.splice.apply(this.foldWidgets,i)}},this.tokenizerUpdateFoldWidgets=function(e){var t=e.data;t.first!=t.last&&this.foldWidgets.length>t.first&&this.foldWidgets.splice(t.first,this.foldWidgets.length)}}t.Folding=a})),ace.define("ace/edit_session/bracket_match",["require","exports","module","ace/token_iterator","ace/range"],(function(e,t,n){"use strict";var i=e("../token_iterator").TokenIterator,r=e("../range").Range;function s(){this.findMatchingBracket=function(e,t){if(0==e.column)return null;var n=t||this.getLine(e.row).charAt(e.column-1);if(""==n)return null;var i=n.match(/([\(\[\{])|([\)\]\}])/);return i?i[1]?this.$findClosingBracket(i[1],e):this.$findOpeningBracket(i[2],e):null},this.getBracketRange=function(e){var t,n=this.getLine(e.row),i=!0,s=n.charAt(e.column-1),o=s&&s.match(/([\(\[\{])|([\)\]\}])/);if(o||(s=n.charAt(e.column),e={row:e.row,column:e.column+1},o=s&&s.match(/([\(\[\{])|([\)\]\}])/),i=!1),!o)return null;if(o[1]){var a=this.$findClosingBracket(o[1],e);if(!a)return null;t=r.fromPoints(e,a),i||(t.end.column++,t.start.column--),t.cursor=t.end}else{a=this.$findOpeningBracket(o[2],e);if(!a)return null;t=r.fromPoints(a,e),i||(t.start.column++,t.end.column--),t.cursor=t.start}return t},this.$brackets={")":"(","(":")","]":"[","[":"]","{":"}","}":"{"},this.$findOpeningBracket=function(e,t,n){var r=this.$brackets[e],s=1,o=new i(this,t.row,t.column),a=o.getCurrentToken();if(a||(a=o.stepForward()),a){n||(n=new RegExp("(\\.?"+a.type.replace(".","\\.").replace("rparen",".paren").replace(/\b(?:end)\b/,"(?:start|begin|end)")+")+"));var c=t.column-o.getCurrentTokenColumn()-2,l=a.value;while(1){while(c>=0){var u=l.charAt(c);if(u==r){if(s-=1,0==s)return{row:o.getCurrentTokenRow(),column:c+o.getCurrentTokenColumn()}}else u==e&&(s+=1);c-=1}do{a=o.stepBackward()}while(a&&!n.test(a.type));if(null==a)break;l=a.value,c=l.length-1}return null}},this.$findClosingBracket=function(e,t,n){var r=this.$brackets[e],s=1,o=new i(this,t.row,t.column),a=o.getCurrentToken();if(a||(a=o.stepForward()),a){n||(n=new RegExp("(\\.?"+a.type.replace(".","\\.").replace("lparen",".paren").replace(/\b(?:start|begin)\b/,"(?:start|begin|end)")+")+"));var c=t.column-o.getCurrentTokenColumn();while(1){var l=a.value,u=l.length;while(cn&&(this.$docRowCache.splice(n,t),this.$screenRowCache.splice(n,t))},this.$getRowCacheIndex=function(e,t){var n=0,i=e.length-1;while(n<=i){var r=n+i>>1,s=e[r];if(t>s)n=r+1;else{if(!(t=t)break;return n=i[s],n?(n.index=s,n.start=r-n.value.length,n):null},this.setUndoManager=function(e){if(this.$undoManager=e,this.$deltas=[],this.$deltasDoc=[],this.$deltasFold=[],this.$informUndoManager&&this.$informUndoManager.cancel(),e){var t=this;this.$syncInformUndoManager=function(){t.$informUndoManager.cancel(),t.$deltasFold.length&&(t.$deltas.push({group:"fold",deltas:t.$deltasFold}),t.$deltasFold=[]),t.$deltasDoc.length&&(t.$deltas.push({group:"doc",deltas:t.$deltasDoc}),t.$deltasDoc=[]),t.$deltas.length>0&&e.execute({action:"aceupdate",args:[t.$deltas,t],merge:t.mergeUndoDeltas}),t.mergeUndoDeltas=!1,t.$deltas=[]},this.$informUndoManager=r.delayedCall(this.$syncInformUndoManager)}},this.markUndoGroup=function(){this.$syncInformUndoManager&&this.$syncInformUndoManager()},this.$defaultUndoManager={undo:function(){},redo:function(){},reset:function(){}},this.getUndoManager=function(){return this.$undoManager||this.$defaultUndoManager},this.getTabString=function(){return this.getUseSoftTabs()?r.stringRepeat(" ",this.getTabSize()):"\t"},this.setUseSoftTabs=function(e){this.setOption("useSoftTabs",e)},this.getUseSoftTabs=function(){return this.$useSoftTabs&&!this.$mode.$indentWithTabs},this.setTabSize=function(e){this.setOption("tabSize",e)},this.getTabSize=function(){return this.$tabSize},this.isTabStop=function(e){return this.$useSoftTabs&&e.column%this.$tabSize===0},this.setNavigateWithinSoftTabs=function(e){this.setOption("navigateWithinSoftTabs",e)},this.getNavigateWithinSoftTabs=function(){return this.$navigateWithinSoftTabs},this.$overwrite=!1,this.setOverwrite=function(e){this.setOption("overwrite",e)},this.getOverwrite=function(){return this.$overwrite},this.toggleOverwrite=function(){this.setOverwrite(!this.$overwrite)},this.addGutterDecoration=function(e,t){this.$decorations[e]||(this.$decorations[e]=""),this.$decorations[e]+=" "+t,this._signal("changeBreakpoint",{})},this.removeGutterDecoration=function(e,t){this.$decorations[e]=(this.$decorations[e]||"").replace(" "+t,""),this._signal("changeBreakpoint",{})},this.getBreakpoints=function(){return this.$breakpoints},this.setBreakpoints=function(e){this.$breakpoints=[];for(var t=0;t0&&(i=!!n.charAt(t-1).match(this.tokenRe)),i||(i=!!n.charAt(t).match(this.tokenRe)),i)var r=this.tokenRe;else if(/^\s+$/.test(n.slice(t-1,t+1)))r=/\s/;else r=this.nonTokenRe;var s=t;if(s>0){do{s--}while(s>=0&&n.charAt(s).match(r));s++}var o=t;while(oe&&(e=t.screenWidth)})),this.lineWidgetWidth=e},this.$computeWidth=function(e){if(this.$modified||e){if(this.$modified=!1,this.$useWrapMode)return this.screenWidth=this.$wrapLimit;for(var t=this.doc.getAllLines(),n=this.$rowLengthCache,i=0,r=0,s=this.$foldData[r],o=s?s.start.row:1/0,a=t.length,c=0;co){if(c=s.end.row+1,c>=a)break;s=this.$foldData[r++],o=s?s.start.row:1/0}null==n[c]&&(n[c]=this.$getStringScreenWidth(t[c])[0]),n[c]>i&&(i=n[c])}this.screenWidth=i}},this.getLine=function(e){return this.doc.getLine(e)},this.getLines=function(e,t){return this.doc.getLines(e,t)},this.getLength=function(){return this.doc.getLength()},this.getTextRange=function(e){return this.doc.getTextRange(e||this.selection.getRange())},this.insert=function(e,t){return this.doc.insert(e,t)},this.remove=function(e){return this.doc.remove(e)},this.removeFullLines=function(e,t){return this.doc.removeFullLines(e,t)},this.undoChanges=function(e,t){if(e.length){this.$fromUndo=!0;for(var n=null,i=e.length-1;-1!=i;i--){var r=e[i];"doc"==r.group?(this.doc.revertDeltas(r.deltas),n=this.$getUndoSelection(r.deltas,!0,n)):r.deltas.forEach((function(e){this.addFolds(e.folds)}),this)}return this.$fromUndo=!1,n&&this.$undoSelect&&!t&&this.selection.setSelectionRange(n),n}},this.redoChanges=function(e,t){if(e.length){this.$fromUndo=!0;for(var n=null,i=0;ie.end.column&&(s.start.column+=a),s.end.row==e.end.row&&s.end.column>e.end.column&&(s.end.column+=a)),o&&s.start.row>=e.end.row&&(s.start.row+=o,s.end.row+=o)}if(s.end=this.insert(s.start,i),r.length){var c=e.start,l=s.start;o=l.row-c.row,a=l.column-c.column;this.addFolds(r.map((function(e){return e=e.clone(),e.start.row==c.row&&(e.start.column+=a),e.end.row==c.row&&(e.end.column+=a),e.start.row+=o,e.end.row+=o,e})))}return s},this.indentRows=function(e,t,n){n=n.replace(/\t/g,this.getTabString());for(var i=e;i<=t;i++)this.doc.insertInLine({row:i,column:0},n)},this.outdentRows=function(e){for(var t=e.collapseRows(),n=new u(0,0,0,0),i=this.getTabSize(),r=t.start.row;r<=t.end.row;++r){var s=this.getLine(r);n.start.row=r,n.end.row=r;for(var o=0;o0){i=this.getRowFoldEnd(t+n);if(i>this.doc.getLength()-1)return 0;r=i-t}else{e=this.$clipRowToDocument(e),t=this.$clipRowToDocument(t);r=t-e+1}var s=new u(e,0,t,Number.MAX_VALUE),o=this.getFoldsInRange(s).map((function(e){return e=e.clone(),e.start.row+=r,e.end.row+=r,e})),a=0==n?this.doc.getLines(e,t):this.doc.removeFullLines(e,t);return this.doc.insertFullLines(e+r,a),o.length&&this.addFolds(o),r},this.moveLinesUp=function(e,t){return this.$moveLines(e,t,-1)},this.moveLinesDown=function(e,t){return this.$moveLines(e,t,1)},this.duplicateLines=function(e,t){return this.$moveLines(e,t,0)},this.$clipRowToDocument=function(e){return Math.max(0,Math.min(e,this.doc.getLength()-1))},this.$clipColumnToRow=function(e,t){return t<0?0:Math.min(this.doc.getLine(e).length,t)},this.$clipPositionToDocument=function(e,t){if(t=Math.max(0,t),e<0)e=0,t=0;else{var n=this.doc.getLength();e>=n?(e=n-1,t=this.doc.getLine(n-1).length):t=Math.min(this.doc.getLine(e).length,t)}return{row:e,column:t}},this.$clipRangeToDocument=function(e){e.start.row<0?(e.start.row=0,e.start.column=0):e.start.column=this.$clipColumnToRow(e.start.row,e.start.column);var t=this.doc.getLength()-1;return e.end.row>t?(e.end.row=t,e.end.column=this.doc.getLine(t).length):e.end.column=this.$clipColumnToRow(e.end.row,e.end.column),e},this.$wrapLimit=80,this.$useWrapMode=!1,this.$wrapLimitRange={min:null,max:null},this.setUseWrapMode=function(e){if(e!=this.$useWrapMode){if(this.$useWrapMode=e,this.$modified=!0,this.$resetRowCache(0),e){var t=this.getLength();this.$wrapData=Array(t),this.$updateWrapData(0,t-1)}this._signal("changeWrapMode")}},this.getUseWrapMode=function(){return this.$useWrapMode},this.setWrapLimitRange=function(e,t){this.$wrapLimitRange.min===e&&this.$wrapLimitRange.max===t||(this.$wrapLimitRange={min:e,max:t},this.$modified=!0,this.$bidiHandler.markAsDirty(),this.$useWrapMode&&this._signal("changeWrapMode"))},this.adjustWrapLimit=function(e,t){var n=this.$wrapLimitRange;n.max<0&&(n={min:t,max:t});var i=this.$constrainWrapLimit(e,n.min,n.max);return i!=this.$wrapLimit&&i>1&&(this.$wrapLimit=i,this.$modified=!0,this.$useWrapMode&&(this.$updateWrapData(0,this.getLength()-1),this.$resetRowCache(0),this._signal("changeWrapLimit")),!0)},this.$constrainWrapLimit=function(e,t,n){return t&&(e=Math.max(t,e)),n&&(e=Math.min(n,e)),e},this.getWrapLimit=function(){return this.$wrapLimit},this.setWrapLimit=function(e){this.setWrapLimitRange(e,e)},this.getWrapLimitRange=function(){return{min:this.$wrapLimitRange.min,max:this.$wrapLimitRange.max}},this.$updateInternalDataOnChange=function(e){var t=this.$useWrapMode,n=e.action,i=e.start,r=e.end,s=i.row,o=r.row,a=o-s,c=null;if(this.$updating=!0,0!=a)if("remove"===n){this[t?"$wrapData":"$rowLengthCache"].splice(s,a);var l=this.$foldData;c=this.getFoldsInRange(e),this.removeFolds(c);var u=this.getFoldLine(r.row),d=0;if(u){u.addRemoveChars(r.row,r.column,i.column-r.column),u.shiftRow(-a);var h=this.getFoldLine(s);h&&h!==u&&(h.merge(u),u=h),d=l.indexOf(u)+1}for(d;d=r.row&&u.shiftRow(-a)}o=s}else{var f=Array(a);f.unshift(s,0);var p=t?this.$wrapData:this.$rowLengthCache;p.splice.apply(p,f);l=this.$foldData,u=this.getFoldLine(s),d=0;if(u){var g=u.range.compareInside(i.row,i.column);0==g?(u=u.split(i.row,i.column),u&&(u.shiftRow(a),u.addRemoveChars(o,0,r.column-i.column))):-1==g&&(u.addRemoveChars(s,0,r.column-i.column),u.shiftRow(a)),d=l.indexOf(u)+1}for(d;d=s&&u.shiftRow(a)}}else{a=Math.abs(e.start.column-e.end.column),"remove"===n&&(c=this.getFoldsInRange(e),this.removeFolds(c),a=-a);u=this.getFoldLine(s);u&&u.addRemoveChars(s,i.column,a)}return t&&this.$wrapData.length!=this.doc.getLength()&&console.error("doc.getLength() and $wrapData.length have to be the same!"),this.$updating=!1,t?this.$updateWrapData(s,o):this.$updateRowLengthCache(s,o),c},this.$updateRowLengthCache=function(e,t,n){this.$rowLengthCache[e]=null,this.$rowLengthCache[t]=null},this.$updateWrapData=function(e,t){var i,r,o=this.doc.getAllLines(),a=this.getTabSize(),c=this.$wrapData,l=this.$wrapLimit,u=e;t=Math.min(t,o.length-1);while(u<=t)r=this.getFoldLine(u,r),r?(i=[],r.walk(function(e,t,r,a){var c;if(null!=e){c=this.$getDisplayTokens(e,i.length),c[0]=n;for(var l=1;l=4352&&e<=4447||e>=4515&&e<=4519||e>=4602&&e<=4607||e>=9001&&e<=9002||e>=11904&&e<=11929||e>=11931&&e<=12019||e>=12032&&e<=12245||e>=12272&&e<=12283||e>=12288&&e<=12350||e>=12353&&e<=12438||e>=12441&&e<=12543||e>=12549&&e<=12589||e>=12593&&e<=12686||e>=12688&&e<=12730||e>=12736&&e<=12771||e>=12784&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=13054||e>=13056&&e<=19903||e>=19968&&e<=42124||e>=42128&&e<=42182||e>=43360&&e<=43388||e>=44032&&e<=55203||e>=55216&&e<=55238||e>=55243&&e<=55291||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=65281&&e<=65376||e>=65504&&e<=65510)}this.$computeWrapSplits=function(e,i,r){if(0==e.length)return[];var o=[],a=e.length,l=0,u=0,h=this.$wrapAsCode,f=this.$indentedSoftWrap,m=i<=Math.max(2*r,8)||!1===f?0:Math.floor(i/2);function v(){var t=0;if(0===m)return t;if(f)for(var n=0;ni-y){var w=l+i-y;if(e[w-1]>=d&&e[w]>=d)b(w);else if(e[w]!=n&&e[w]!=s){var _=Math.max(w-(i-(i>>2)),l-1);while(w>_&&e[w]_&&e[w]_&&e[w]==c)w--}else while(w>_&&e[w]_?b(++w):(w=l+i,e[w]==t&&w--,b(w-y))}else{for(w;w!=l-1;w--)if(e[w]==n)break;if(w>l){b(w);continue}for(w=l+i,w;w39&&a<48||a>57&&a<64?s.push(c):a>=4352&&m(a)?s.push(e,t):s.push(e)}return s},this.$getStringScreenWidth=function(e,t,n){if(0==t)return[0,0];var i,r;for(null==t&&(t=1/0),n=n||0,r=0;r=4352&&m(i)?n+=2:n+=1,n>t)break;return[n,r]},this.lineWidgets=null,this.getRowLength=function(e){if(this.lineWidgets)var t=this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0;else t=0;return this.$useWrapMode&&this.$wrapData[e]?this.$wrapData[e].length+1+t:1+t},this.getRowLineCount=function(e){return this.$useWrapMode&&this.$wrapData[e]?this.$wrapData[e].length+1:1},this.getRowWrapIndent=function(e){if(this.$useWrapMode){var t=this.screenToDocumentPosition(e,Number.MAX_VALUE),n=this.$wrapData[t.row];return n.length&&n[0]=0){a=l[u],s=this.$docRowCache[u];var h=e>l[d-1]}else h=!d;var f=this.getLength()-1,p=this.getNextFoldLine(s),g=p?p.start.row:1/0;while(a<=e){if(c=this.getRowLength(s),a+c>e||s>=f)break;a+=c,s++,s>g&&(s=p.end.row+1,p=this.getNextFoldLine(s,p),g=p?p.start.row:1/0),h&&(this.$docRowCache.push(s),this.$screenRowCache.push(a))}if(p&&p.start.row<=s)i=this.getFoldDisplayLine(p),s=p.start.row;else{if(a+c<=e||s>f)return{row:f,column:this.getLine(f).length};i=this.getLine(s),p=null}var m=0,v=Math.floor(e-a);if(this.$useWrapMode){var b=this.$wrapData[s];b&&(r=b[v],v>0&&b.length&&(m=b.indent,o=b[v-1]||b[b.length-1],i=i.substring(o)))}return void 0!==n&&this.$bidiHandler.isBidiRow(a+v,s,v)&&(t=this.$bidiHandler.offsetToCol(n)),o+=this.$getStringScreenWidth(i,t-m)[1],this.$useWrapMode&&o>=r&&(o=r-1),p?p.idxToPosition(o):{row:s,column:o}},this.documentToScreenPosition=function(e,t){if("undefined"===typeof t)var n=this.$clipPositionToDocument(e.row,e.column);else n=this.$clipPositionToDocument(e,t);e=n.row,t=n.column;var i=0,r=null,s=null;s=this.getFoldAt(e,t,1),s&&(e=s.start.row,t=s.start.column);var o,a=0,c=this.$docRowCache,l=this.$getRowCacheIndex(c,e),u=c.length;if(u&&l>=0){a=c[l],i=this.$screenRowCache[l];var d=e>c[u-1]}else d=!u;var h=this.getNextFoldLine(a),f=h?h.start.row:1/0;while(a=f){if(o=h.end.row+1,o>e)break;h=this.getNextFoldLine(o,h),f=h?h.start.row:1/0}else o=a+1;i+=this.getRowLength(a),a=o,d&&(this.$docRowCache.push(a),this.$screenRowCache.push(i))}var p="";h&&a>=f?(p=this.getFoldDisplayLine(h,e,t),r=h.start.row):(p=this.getLine(e).substring(0,t),r=e);var g=0;if(this.$useWrapMode){var m=this.$wrapData[r];if(m){var v=0;while(p.length>=m[v])i++,v++;p=p.substring(m[v-1]||0,p.length),g=v>0?m.indent:0}}return{row:i,column:g+this.$getStringScreenWidth(p)[0]}},this.documentToScreenColumn=function(e,t){return this.documentToScreenPosition(e,t).column},this.documentToScreenRow=function(e,t){return this.documentToScreenPosition(e,t).row},this.getScreenLength=function(){var e=0,t=null;if(this.$useWrapMode){var n=this.$wrapData.length,i=0,r=(a=0,t=this.$foldData[a++],t?t.start.row:1/0);while(ir&&(i=t.end.row+1,t=this.$foldData[a++],r=t?t.start.row:1/0)}}else{e=this.getLength();for(var o=this.$foldData,a=0;an)break;return[i,s]})},this.destroy=function(){this.bgTokenizer&&(this.bgTokenizer.setDocument(null),this.bgTokenizer=null),this.$stopWorker()},this.isFullWidth=m}.call(p.prototype),e("./edit_session/folding").Folding.call(p.prototype),e("./edit_session/bracket_match").BracketMatch.call(p.prototype),o.defineOptions(p.prototype,"session",{wrap:{set:function(e){if(e&&"off"!=e?"free"==e?e=!0:"printMargin"==e?e=-1:"string"==typeof e&&(e=parseInt(e,10)||!1):e=!1,this.$wrap!=e)if(this.$wrap=e,e){var t="number"==typeof e?e:null;this.setWrapLimitRange(t,t),this.setUseWrapMode(!0)}else this.setUseWrapMode(!1)},get:function(){return this.getUseWrapMode()?-1==this.$wrap?"printMargin":this.getWrapLimitRange().min?this.$wrap:"free":"off"},handlesSet:!0},wrapMethod:{set:function(e){e="auto"==e?"text"!=this.$mode.type:"text"!=e,e!=this.$wrapAsCode&&(this.$wrapAsCode=e,this.$useWrapMode&&(this.$modified=!0,this.$resetRowCache(0),this.$updateWrapData(0,this.getLength()-1)))},initialValue:"auto"},indentedSoftWrap:{initialValue:!0},firstLineNumber:{set:function(){this._signal("changeBreakpoint")},initialValue:1},useWorker:{set:function(e){this.$useWorker=e,this.$stopWorker(),e&&this.$startWorker()},initialValue:!0},useSoftTabs:{initialValue:!0},tabSize:{set:function(e){isNaN(e)||this.$tabSize===e||(this.$modified=!0,this.$rowLengthCache=[],this.$tabSize=e,this._signal("changeTabSize"))},initialValue:4,handlesSet:!0},navigateWithinSoftTabs:{initialValue:!1},overwrite:{set:function(e){this._signal("changeOverwrite")},initialValue:!1},newLineMode:{set:function(e){this.doc.setNewLineMode(e)},get:function(){return this.doc.getNewLineMode()},handlesSet:!0},mode:{set:function(e){this.setMode(e)},get:function(){return this.$modeId}}}),t.EditSession=p})),ace.define("ace/search",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"],(function(e,t,n){"use strict";var i=e("./lib/lang"),r=e("./lib/oop"),s=e("./range").Range,o=function(){this.$options={}};function a(e,t){function n(e){return/\w/.test(e)||t.regExp?"\\b":""}return n(e[0])+e+n(e[e.length-1])}(function(){this.set=function(e){return r.mixin(this.$options,e),this},this.getOptions=function(){return i.copyObject(this.$options)},this.setOptions=function(e){this.$options=e},this.find=function(e){var t=this.$options,n=this.$matchIterator(e,t);if(!n)return!1;var i=null;return n.forEach((function(e,n,r,o){return i=new s(e,n,r,o),!(n==o&&t.start&&t.start.start&&0!=t.skipCurrent&&i.isEqual(t.start))||(i=null,!1)})),i},this.findAll=function(e){var t=this.$options;if(!t.needle)return[];this.$assembleRegExp(t);var n=t.range,r=n?e.getLines(n.start.row,n.end.row):e.doc.getAllLines(),o=[],a=t.re;if(t.$isMultiLine){var c,l=a.length,u=r.length-l;e:for(var d=a.offset||0;d<=u;d++){for(var h=0;hg||(o.push(c=new s(d,g,d+l-1,m)),l>2&&(d=d+l-2))}}else for(var v=0;v_&&o[h].end.row==n.end.row)h--;for(o=o.slice(v,h+1),v=0,h=o.length;v=a;n--)if(d(n,Number.MAX_VALUE,e))return;if(0!=t.wrap)for(n=c,a=o.row;n>=a;n--)if(d(n,Number.MAX_VALUE,e))return}};else l=function(e){var n=o.row;if(!d(n,o.column,e)){for(n+=1;n<=c;n++)if(d(n,0,e))return;if(0!=t.wrap)for(n=a,c=o.row;n<=c;n++)if(d(n,0,e))return}};if(t.$isMultiLine)var u=n.length,d=function(t,r,s){var o=i?t-u+1:t;if(!(o<0)){var a=e.getLine(o),c=a.search(n[0]);if(!(!i&&cr))return!!s(o,c,o+u-1,d)||void 0}}};else if(i)d=function(t,i,r){var s,o=e.getLine(t),a=[],c=0;n.lastIndex=0;while(s=n.exec(o)){var l=s[0].length;if(c=s.index,!l){if(c>=o.length)break;n.lastIndex=c+=1}if(s.index+l>i)break;a.push(s.index,l)}for(var u=a.length-1;u>=0;u-=2){var d=a[u-1];l=a[u];if(r(t,d,t,d+l))return!0}};else d=function(t,i,r){var s,o=e.getLine(t),a=i;n.lastIndex=i;while(s=n.exec(o)){var c=s[0].length;if(a=s.index,r(t,a,t,a+c))return!0;if(!c&&(n.lastIndex=a+=1,a>=o.length))return!1}};return{forEach:l}}}).call(o.prototype),t.Search=o})),ace.define("ace/keyboard/hash_handler",["require","exports","module","ace/lib/keys","ace/lib/useragent"],(function(e,t,n){"use strict";var i=e("../lib/keys"),r=e("../lib/useragent"),s=i.KEY_MODS;function o(e,t){this.platform=t||(r.isMac?"mac":"win"),this.commands={},this.commandKeyBinding={},this.addCommands(e),this.$singleCommand=!0}function a(e,t){o.call(this,e,t),this.$singleCommand=!1}a.prototype=o.prototype,function(){function e(e){return"object"==typeof e&&e.bindKey&&e.bindKey.position||(e.isDefault?-100:0)}this.addCommand=function(e){this.commands[e.name]&&this.removeCommand(e),this.commands[e.name]=e,e.bindKey&&this._buildKeyHash(e)},this.removeCommand=function(e,t){var n=e&&("string"===typeof e?e:e.name);e=this.commands[n],t||delete this.commands[n];var i=this.commandKeyBinding;for(var r in i){var s=i[r];if(s==e)delete i[r];else if(Array.isArray(s)){var o=s.indexOf(e);-1!=o&&(s.splice(o,1),1==s.length&&(i[r]=s[0]))}}},this.bindKey=function(e,t,n){if("object"==typeof e&&e&&(void 0==n&&(n=e.position),e=e[this.platform]),e)return"function"==typeof t?this.addCommand({exec:t,bindKey:e,name:t.name||e}):void e.split("|").forEach((function(e){var i="";if(-1!=e.indexOf(" ")){var r=e.split(/\s+/);e=r.pop(),r.forEach((function(e){var t=this.parseKeys(e),n=s[t.hashId]+t.key;i+=(i?" ":"")+n,this._addCommandToBinding(i,"chainKeys")}),this),i+=" "}var o=this.parseKeys(e),a=s[o.hashId]+o.key;this._addCommandToBinding(i+a,t,n)}),this)},this._addCommandToBinding=function(t,n,i){var r,s=this.commandKeyBinding;if(n)if(!s[t]||this.$singleCommand)s[t]=n;else{Array.isArray(s[t])?-1!=(r=s[t].indexOf(n))&&s[t].splice(r,1):s[t]=[s[t]],"number"!=typeof i&&(i=e(n));var o=s[t];for(r=0;ri)break}o.splice(r,0,n)}else delete s[t]},this.addCommands=function(e){e&&Object.keys(e).forEach((function(t){var n=e[t];if(n){if("string"===typeof n)return this.bindKey(n,t);"function"===typeof n&&(n={exec:n}),"object"===typeof n&&(n.name||(n.name=t),this.addCommand(n))}}),this)},this.removeCommands=function(e){Object.keys(e).forEach((function(t){this.removeCommand(e[t])}),this)},this.bindKeys=function(e){Object.keys(e).forEach((function(t){this.bindKey(t,e[t])}),this)},this._buildKeyHash=function(e){this.bindKey(e.bindKey,e)},this.parseKeys=function(e){var t=e.toLowerCase().split(/[\-\+]([\-\+])?/).filter((function(e){return e})),n=t.pop(),r=i[n];if(i.FUNCTION_KEYS[r])n=i.FUNCTION_KEYS[r].toLowerCase();else{if(!t.length)return{key:n,hashId:-1};if(1==t.length&&"shift"==t[0])return{key:n.toUpperCase(),hashId:-1}}for(var s=0,o=t.length;o--;){var a=i.KEY_MODS[t[o]];if(null==a)return"undefined"!=typeof console&&console.error("invalid modifier "+t[o]+" in "+e),!1;s|=a}return{key:n,hashId:s}},this.findKeyCommand=function(e,t){var n=s[e]+t;return this.commandKeyBinding[n]},this.handleKeyboard=function(e,t,n,i){if(!(i<0)){var r=s[t]+n,o=this.commandKeyBinding[r];return e.$keyChain&&(e.$keyChain+=" "+r,o=this.commandKeyBinding[e.$keyChain]||o),!o||"chainKeys"!=o&&"chainKeys"!=o[o.length-1]?(e.$keyChain&&(t&&4!=t||1!=n.length?(-1==t||i>0)&&(e.$keyChain=""):e.$keyChain=e.$keyChain.slice(0,-r.length-1)),{command:o}):(e.$keyChain=e.$keyChain||r,{command:"null"})}},this.getStatusText=function(e,t){return t.$keyChain||""}}.call(o.prototype),t.HashHandler=o,t.MultiHashHandler=a})),ace.define("ace/commands/command_manager",["require","exports","module","ace/lib/oop","ace/keyboard/hash_handler","ace/lib/event_emitter"],(function(e,t,n){"use strict";var i=e("../lib/oop"),r=e("../keyboard/hash_handler").MultiHashHandler,s=e("../lib/event_emitter").EventEmitter,o=function(e,t){r.call(this,t,e),this.byName=this.commands,this.setDefaultHandler("exec",(function(e){return e.command.exec(e.editor,e.args||{})}))};i.inherits(o,r),function(){i.implement(this,s),this.exec=function(e,t,n){if(Array.isArray(e)){for(var i=e.length;i--;)if(this.exec(e[i],t,n))return!0;return!1}if("string"===typeof e&&(e=this.commands[e]),!e)return!1;if(t&&t.$readOnly&&!e.readOnly)return!1;if(e.isAvailable&&!e.isAvailable(t))return!1;var r={editor:t,command:e,args:n};return r.returnValue=this._emit("exec",r),this._signal("afterExec",r),!1!==r.returnValue},this.toggleRecording=function(e){if(!this.$inReplay)return e&&e._emit("changeStatus"),this.recording?(this.macro.pop(),this.removeEventListener("exec",this.$addCommandToMacro),this.macro.length||(this.macro=this.oldMacro),this.recording=!1):(this.$addCommandToMacro||(this.$addCommandToMacro=function(e){this.macro.push([e.command,e.args])}.bind(this)),this.oldMacro=this.macro,this.macro=[],this.on("exec",this.$addCommandToMacro),this.recording=!0)},this.replay=function(e){if(!this.$inReplay&&this.macro){if(this.recording)return this.toggleRecording(e);try{this.$inReplay=!0,this.macro.forEach((function(t){"string"==typeof t?this.exec(t,e):this.exec(t[0],e,t[1])}),this)}finally{this.$inReplay=!1}}},this.trimMacro=function(e){return e.map((function(e){return"string"!=typeof e[0]&&(e[0]=e[0].name),e[1]||(e=e[0]),e}))}}.call(o.prototype),t.CommandManager=o})),ace.define("ace/commands/default_commands",["require","exports","module","ace/lib/lang","ace/config","ace/range"],(function(e,t,n){"use strict";var i=e("../lib/lang"),r=e("../config"),s=e("../range").Range;function o(e,t){return{win:e,mac:t}}t.commands=[{name:"showSettingsMenu",bindKey:o("Ctrl-,","Command-,"),exec:function(e){r.loadModule("ace/ext/settings_menu",(function(t){t.init(e),e.showSettingsMenu()}))},readOnly:!0},{name:"goToNextError",bindKey:o("Alt-E","F4"),exec:function(e){r.loadModule("ace/ext/error_marker",(function(t){t.showErrorMarker(e,1)}))},scrollIntoView:"animate",readOnly:!0},{name:"goToPreviousError",bindKey:o("Alt-Shift-E","Shift-F4"),exec:function(e){r.loadModule("ace/ext/error_marker",(function(t){t.showErrorMarker(e,-1)}))},scrollIntoView:"animate",readOnly:!0},{name:"selectall",bindKey:o("Ctrl-A","Command-A"),exec:function(e){e.selectAll()},readOnly:!0},{name:"centerselection",bindKey:o(null,"Ctrl-L"),exec:function(e){e.centerSelection()},readOnly:!0},{name:"gotoline",bindKey:o("Ctrl-L","Command-L"),exec:function(e){var t=parseInt(prompt("Enter line number:"),10);isNaN(t)||e.gotoLine(t)},readOnly:!0},{name:"fold",bindKey:o("Alt-L|Ctrl-F1","Command-Alt-L|Command-F1"),exec:function(e){e.session.toggleFold(!1)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"unfold",bindKey:o("Alt-Shift-L|Ctrl-Shift-F1","Command-Alt-Shift-L|Command-Shift-F1"),exec:function(e){e.session.toggleFold(!0)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"toggleFoldWidget",bindKey:o("F2","F2"),exec:function(e){e.session.toggleFoldWidget()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"toggleParentFoldWidget",bindKey:o("Alt-F2","Alt-F2"),exec:function(e){e.session.toggleFoldWidget(!0)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"foldall",bindKey:o(null,"Ctrl-Command-Option-0"),exec:function(e){e.session.foldAll()},scrollIntoView:"center",readOnly:!0},{name:"foldOther",bindKey:o("Alt-0","Command-Option-0"),exec:function(e){e.session.foldAll(),e.session.unfold(e.selection.getAllRanges())},scrollIntoView:"center",readOnly:!0},{name:"unfoldall",bindKey:o("Alt-Shift-0","Command-Option-Shift-0"),exec:function(e){e.session.unfold()},scrollIntoView:"center",readOnly:!0},{name:"findnext",bindKey:o("Ctrl-K","Command-G"),exec:function(e){e.findNext()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"findprevious",bindKey:o("Ctrl-Shift-K","Command-Shift-G"),exec:function(e){e.findPrevious()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"selectOrFindNext",bindKey:o("Alt-K","Ctrl-G"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findNext()},readOnly:!0},{name:"selectOrFindPrevious",bindKey:o("Alt-Shift-K","Ctrl-Shift-G"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findPrevious()},readOnly:!0},{name:"find",bindKey:o("Ctrl-F","Command-F"),exec:function(e){r.loadModule("ace/ext/searchbox",(function(t){t.Search(e)}))},readOnly:!0},{name:"overwrite",bindKey:"Insert",exec:function(e){e.toggleOverwrite()},readOnly:!0},{name:"selecttostart",bindKey:o("Ctrl-Shift-Home","Command-Shift-Home|Command-Shift-Up"),exec:function(e){e.getSelection().selectFileStart()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"gotostart",bindKey:o("Ctrl-Home","Command-Home|Command-Up"),exec:function(e){e.navigateFileStart()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"selectup",bindKey:o("Shift-Up","Shift-Up|Ctrl-Shift-P"),exec:function(e){e.getSelection().selectUp()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"golineup",bindKey:o("Up","Up|Ctrl-P"),exec:function(e,t){e.navigateUp(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttoend",bindKey:o("Ctrl-Shift-End","Command-Shift-End|Command-Shift-Down"),exec:function(e){e.getSelection().selectFileEnd()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"gotoend",bindKey:o("Ctrl-End","Command-End|Command-Down"),exec:function(e){e.navigateFileEnd()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"selectdown",bindKey:o("Shift-Down","Shift-Down|Ctrl-Shift-N"),exec:function(e){e.getSelection().selectDown()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"golinedown",bindKey:o("Down","Down|Ctrl-N"),exec:function(e,t){e.navigateDown(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectwordleft",bindKey:o("Ctrl-Shift-Left","Option-Shift-Left"),exec:function(e){e.getSelection().selectWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotowordleft",bindKey:o("Ctrl-Left","Option-Left"),exec:function(e){e.navigateWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttolinestart",bindKey:o("Alt-Shift-Left","Command-Shift-Left|Ctrl-Shift-A"),exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotolinestart",bindKey:o("Alt-Left|Home","Command-Left|Home|Ctrl-A"),exec:function(e){e.navigateLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectleft",bindKey:o("Shift-Left","Shift-Left|Ctrl-Shift-B"),exec:function(e){e.getSelection().selectLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotoleft",bindKey:o("Left","Left|Ctrl-B"),exec:function(e,t){e.navigateLeft(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectwordright",bindKey:o("Ctrl-Shift-Right","Option-Shift-Right"),exec:function(e){e.getSelection().selectWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotowordright",bindKey:o("Ctrl-Right","Option-Right"),exec:function(e){e.navigateWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttolineend",bindKey:o("Alt-Shift-Right","Command-Shift-Right|Shift-End|Ctrl-Shift-E"),exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotolineend",bindKey:o("Alt-Right|End","Command-Right|End|Ctrl-E"),exec:function(e){e.navigateLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectright",bindKey:o("Shift-Right","Shift-Right"),exec:function(e){e.getSelection().selectRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotoright",bindKey:o("Right","Right|Ctrl-F"),exec:function(e,t){e.navigateRight(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectpagedown",bindKey:"Shift-PageDown",exec:function(e){e.selectPageDown()},readOnly:!0},{name:"pagedown",bindKey:o(null,"Option-PageDown"),exec:function(e){e.scrollPageDown()},readOnly:!0},{name:"gotopagedown",bindKey:o("PageDown","PageDown|Ctrl-V"),exec:function(e){e.gotoPageDown()},readOnly:!0},{name:"selectpageup",bindKey:"Shift-PageUp",exec:function(e){e.selectPageUp()},readOnly:!0},{name:"pageup",bindKey:o(null,"Option-PageUp"),exec:function(e){e.scrollPageUp()},readOnly:!0},{name:"gotopageup",bindKey:"PageUp",exec:function(e){e.gotoPageUp()},readOnly:!0},{name:"scrollup",bindKey:o("Ctrl-Up",null),exec:function(e){e.renderer.scrollBy(0,-2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:"scrolldown",bindKey:o("Ctrl-Down",null),exec:function(e){e.renderer.scrollBy(0,2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:"selectlinestart",bindKey:"Shift-Home",exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectlineend",bindKey:"Shift-End",exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"togglerecording",bindKey:o("Ctrl-Alt-E","Command-Option-E"),exec:function(e){e.commands.toggleRecording(e)},readOnly:!0},{name:"replaymacro",bindKey:o("Ctrl-Shift-E","Command-Shift-E"),exec:function(e){e.commands.replay(e)},readOnly:!0},{name:"jumptomatching",bindKey:o("Ctrl-P","Ctrl-P"),exec:function(e){e.jumpToMatching()},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"selecttomatching",bindKey:o("Ctrl-Shift-P","Ctrl-Shift-P"),exec:function(e){e.jumpToMatching(!0)},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"expandToMatching",bindKey:o("Ctrl-Shift-M","Ctrl-Shift-M"),exec:function(e){e.jumpToMatching(!0,!0)},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"passKeysToBrowser",bindKey:o(null,null),exec:function(){},passEvent:!0,readOnly:!0},{name:"copy",exec:function(e){},readOnly:!0},{name:"cut",exec:function(e){var t=e.getSelectionRange();e._emit("cut",t),e.selection.isEmpty()||(e.session.remove(t),e.clearSelection())},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"paste",exec:function(e,t){e.$handlePaste(t)},scrollIntoView:"cursor"},{name:"removeline",bindKey:o("Ctrl-D","Command-D"),exec:function(e){e.removeLines()},scrollIntoView:"cursor",multiSelectAction:"forEachLine"},{name:"duplicateSelection",bindKey:o("Ctrl-Shift-D","Command-Shift-D"),exec:function(e){e.duplicateSelection()},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"sortlines",bindKey:o("Ctrl-Alt-S","Command-Alt-S"),exec:function(e){e.sortLines()},scrollIntoView:"selection",multiSelectAction:"forEachLine"},{name:"togglecomment",bindKey:o("Ctrl-/","Command-/"),exec:function(e){e.toggleCommentLines()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"toggleBlockComment",bindKey:o("Ctrl-Shift-/","Command-Shift-/"),exec:function(e){e.toggleBlockComment()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"modifyNumberUp",bindKey:o("Ctrl-Shift-Up","Alt-Shift-Up"),exec:function(e){e.modifyNumber(1)},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"modifyNumberDown",bindKey:o("Ctrl-Shift-Down","Alt-Shift-Down"),exec:function(e){e.modifyNumber(-1)},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"replace",bindKey:o("Ctrl-H","Command-Option-F"),exec:function(e){r.loadModule("ace/ext/searchbox",(function(t){t.Search(e,!0)}))}},{name:"undo",bindKey:o("Ctrl-Z","Command-Z"),exec:function(e){e.undo()}},{name:"redo",bindKey:o("Ctrl-Shift-Z|Ctrl-Y","Command-Shift-Z|Command-Y"),exec:function(e){e.redo()}},{name:"copylinesup",bindKey:o("Alt-Shift-Up","Command-Option-Up"),exec:function(e){e.copyLinesUp()},scrollIntoView:"cursor"},{name:"movelinesup",bindKey:o("Alt-Up","Option-Up"),exec:function(e){e.moveLinesUp()},scrollIntoView:"cursor"},{name:"copylinesdown",bindKey:o("Alt-Shift-Down","Command-Option-Down"),exec:function(e){e.copyLinesDown()},scrollIntoView:"cursor"},{name:"movelinesdown",bindKey:o("Alt-Down","Option-Down"),exec:function(e){e.moveLinesDown()},scrollIntoView:"cursor"},{name:"del",bindKey:o("Delete","Delete|Ctrl-D|Shift-Delete"),exec:function(e){e.remove("right")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"backspace",bindKey:o("Shift-Backspace|Backspace","Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H"),exec:function(e){e.remove("left")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"cut_or_delete",bindKey:o("Shift-Delete",null),exec:function(e){if(!e.selection.isEmpty())return!1;e.remove("left")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolinestart",bindKey:o("Alt-Backspace","Command-Backspace"),exec:function(e){e.removeToLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolineend",bindKey:o("Alt-Delete","Ctrl-K|Command-Delete"),exec:function(e){e.removeToLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolinestarthard",bindKey:o("Ctrl-Shift-Backspace",null),exec:function(e){var t=e.selection.getRange();t.start.column=0,e.session.remove(t)},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolineendhard",bindKey:o("Ctrl-Shift-Delete",null),exec:function(e){var t=e.selection.getRange();t.end.column=Number.MAX_VALUE,e.session.remove(t)},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removewordleft",bindKey:o("Ctrl-Backspace","Alt-Backspace|Ctrl-Alt-Backspace"),exec:function(e){e.removeWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removewordright",bindKey:o("Ctrl-Delete","Alt-Delete"),exec:function(e){e.removeWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"outdent",bindKey:o("Shift-Tab","Shift-Tab"),exec:function(e){e.blockOutdent()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"indent",bindKey:o("Tab","Tab"),exec:function(e){e.indent()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"blockoutdent",bindKey:o("Ctrl-[","Ctrl-["),exec:function(e){e.blockOutdent()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"blockindent",bindKey:o("Ctrl-]","Ctrl-]"),exec:function(e){e.blockIndent()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"insertstring",exec:function(e,t){e.insert(t)},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"inserttext",exec:function(e,t){e.insert(i.stringRepeat(t.text||"",t.times||1))},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"splitline",bindKey:o(null,"Ctrl-O"),exec:function(e){e.splitLine()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"transposeletters",bindKey:o("Alt-Shift-X","Ctrl-T"),exec:function(e){e.transposeLetters()},multiSelectAction:function(e){e.transposeSelections(1)},scrollIntoView:"cursor"},{name:"touppercase",bindKey:o("Ctrl-U","Ctrl-U"),exec:function(e){e.toUpperCase()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"tolowercase",bindKey:o("Ctrl-Shift-U","Ctrl-Shift-U"),exec:function(e){e.toLowerCase()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"expandtoline",bindKey:o("Ctrl-Shift-L","Command-Shift-L"),exec:function(e){var t=e.selection.getRange();t.start.column=t.end.column=0,t.end.row++,e.selection.setRange(t,!1)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"joinlines",bindKey:o(null,null),exec:function(e){for(var t=e.selection.isBackwards(),n=t?e.selection.getSelectionLead():e.selection.getSelectionAnchor(),r=t?e.selection.getSelectionAnchor():e.selection.getSelectionLead(),o=e.session.doc.getLine(n.row).length,a=e.session.doc.getTextRange(e.selection.getRange()),c=a.replace(/\n\s*/," ").length,l=e.session.doc.getLine(n.row),u=n.row+1;u<=r.row+1;u++){var d=i.stringTrimLeft(i.stringTrimRight(e.session.doc.getLine(u)));0!==d.length&&(d=" "+d),l+=d}r.row+10?(e.selection.moveCursorTo(n.row,n.column),e.selection.selectTo(n.row,n.column+c)):(o=e.session.doc.getLine(n.row).length>o?o+1:o,e.selection.moveCursorTo(n.row,o))},multiSelectAction:"forEach",readOnly:!0},{name:"invertSelection",bindKey:o(null,null),exec:function(e){var t=e.session.doc.getLength()-1,n=e.session.doc.getLine(t).length,i=e.selection.rangeList.ranges,r=[];i.length<1&&(i=[e.selection.getRange()]);for(var o=0;o0&&this.$blockScrolling--;var n=t&&t.scrollIntoView;if(n){switch(n){case"center-animate":n="animate";case"center":this.renderer.scrollCursorIntoView(null,.5);break;case"animate":case"cursor":this.renderer.scrollCursorIntoView();break;case"selectionPart":var i=this.selection.getRange(),r=this.renderer.layerConfig;(i.start.row>=r.lastRow||i.end.row<=r.firstRow)&&this.renderer.scrollSelectionIntoView(this.selection.anchor,this.selection.lead);break;default:break}"animate"==n&&this.renderer.animateScrolling(this.curOp.scrollTop)}this.prevOp=this.curOp,this.curOp=null}},this.$mergeableCommands=["backspace","del","insertstring"],this.$historyTracker=function(e){if(this.$mergeUndoDeltas){var t=this.prevOp,n=this.$mergeableCommands,i=t.command&&e.command.name==t.command.name;if("insertstring"==e.command.name){var r=e.args;void 0===this.mergeNextCommand&&(this.mergeNextCommand=!0),i=i&&this.mergeNextCommand&&(!/\s/.test(r)||/\s/.test(t.args)),this.mergeNextCommand=!0}else i=i&&-1!==n.indexOf(e.command.name);"always"!=this.$mergeUndoDeltas&&Date.now()-this.sequenceStartTime>2e3&&(i=!1),i?this.session.mergeUndoDeltas=!0:-1!==n.indexOf(e.command.name)&&(this.sequenceStartTime=Date.now())}},this.setKeyboardHandler=function(e,t){if(e&&"string"===typeof e){this.$keybindingId=e;var n=this;v.loadModule(["keybinding",e],(function(i){n.$keybindingId==e&&n.keyBinding.setKeyboardHandler(i&&i.handler),t&&t()}))}else this.$keybindingId=null,this.keyBinding.setKeyboardHandler(e),t&&t()},this.getKeyboardHandler=function(){return this.keyBinding.getKeyboardHandler()},this.setSession=function(e){if(this.session!=e){this.curOp&&this.endOperation(),this.curOp={};var t=this.session;if(t){this.session.off("change",this.$onDocumentChange),this.session.off("changeMode",this.$onChangeMode),this.session.off("tokenizerUpdate",this.$onTokenizerUpdate),this.session.off("changeTabSize",this.$onChangeTabSize),this.session.off("changeWrapLimit",this.$onChangeWrapLimit),this.session.off("changeWrapMode",this.$onChangeWrapMode),this.session.off("changeFold",this.$onChangeFold),this.session.off("changeFrontMarker",this.$onChangeFrontMarker),this.session.off("changeBackMarker",this.$onChangeBackMarker),this.session.off("changeBreakpoint",this.$onChangeBreakpoint),this.session.off("changeAnnotation",this.$onChangeAnnotation),this.session.off("changeOverwrite",this.$onCursorChange),this.session.off("changeScrollTop",this.$onScrollTopChange),this.session.off("changeScrollLeft",this.$onScrollLeftChange);var n=this.session.getSelection();n.off("changeCursor",this.$onCursorChange),n.off("changeSelection",this.$onSelectionChange)}this.session=e,e?(this.$onDocumentChange=this.onDocumentChange.bind(this),e.on("change",this.$onDocumentChange),this.renderer.setSession(e),this.$onChangeMode=this.onChangeMode.bind(this),e.on("changeMode",this.$onChangeMode),this.$onTokenizerUpdate=this.onTokenizerUpdate.bind(this),e.on("tokenizerUpdate",this.$onTokenizerUpdate),this.$onChangeTabSize=this.renderer.onChangeTabSize.bind(this.renderer),e.on("changeTabSize",this.$onChangeTabSize),this.$onChangeWrapLimit=this.onChangeWrapLimit.bind(this),e.on("changeWrapLimit",this.$onChangeWrapLimit),this.$onChangeWrapMode=this.onChangeWrapMode.bind(this),e.on("changeWrapMode",this.$onChangeWrapMode),this.$onChangeFold=this.onChangeFold.bind(this),e.on("changeFold",this.$onChangeFold),this.$onChangeFrontMarker=this.onChangeFrontMarker.bind(this),this.session.on("changeFrontMarker",this.$onChangeFrontMarker),this.$onChangeBackMarker=this.onChangeBackMarker.bind(this),this.session.on("changeBackMarker",this.$onChangeBackMarker),this.$onChangeBreakpoint=this.onChangeBreakpoint.bind(this),this.session.on("changeBreakpoint",this.$onChangeBreakpoint),this.$onChangeAnnotation=this.onChangeAnnotation.bind(this),this.session.on("changeAnnotation",this.$onChangeAnnotation),this.$onCursorChange=this.onCursorChange.bind(this),this.session.on("changeOverwrite",this.$onCursorChange),this.$onScrollTopChange=this.onScrollTopChange.bind(this),this.session.on("changeScrollTop",this.$onScrollTopChange),this.$onScrollLeftChange=this.onScrollLeftChange.bind(this),this.session.on("changeScrollLeft",this.$onScrollLeftChange),this.selection=e.getSelection(),this.selection.on("changeCursor",this.$onCursorChange),this.$onSelectionChange=this.onSelectionChange.bind(this),this.selection.on("changeSelection",this.$onSelectionChange),this.onChangeMode(),this.$blockScrolling+=1,this.onCursorChange(),this.$blockScrolling-=1,this.onScrollTopChange(),this.onScrollLeftChange(),this.onSelectionChange(),this.onChangeFrontMarker(),this.onChangeBackMarker(),this.onChangeBreakpoint(),this.onChangeAnnotation(),this.session.getUseWrapMode()&&this.renderer.adjustWrapLimit(),this.renderer.updateFull()):(this.selection=null,this.renderer.setSession(e)),this._signal("changeSession",{session:e,oldSession:t}),this.curOp=null,t&&t._signal("changeEditor",{oldEditor:this}),e&&e._signal("changeEditor",{editor:this}),e&&e.bgTokenizer&&e.bgTokenizer.scheduleStart()}},this.getSession=function(){return this.session},this.setValue=function(e,t){return this.session.doc.setValue(e),t?1==t?this.navigateFileEnd():-1==t&&this.navigateFileStart():this.selectAll(),e},this.getValue=function(){return this.session.getValue()},this.getSelection=function(){return this.selection},this.resize=function(e){this.renderer.onResize(e)},this.setTheme=function(e,t){this.renderer.setTheme(e,t)},this.getTheme=function(){return this.renderer.getTheme()},this.setStyle=function(e){this.renderer.setStyle(e)},this.unsetStyle=function(e){this.renderer.unsetStyle(e)},this.getFontSize=function(){return this.getOption("fontSize")||r.computedStyle(this.container,"fontSize")},this.setFontSize=function(e){this.setOption("fontSize",e)},this.$highlightBrackets=function(){if(this.session.$bracketHighlight&&(this.session.removeMarker(this.session.$bracketHighlight),this.session.$bracketHighlight=null),!this.$highlightPending){var e=this;this.$highlightPending=!0,setTimeout((function(){e.$highlightPending=!1;var t=e.session;if(t&&t.bgTokenizer){var n=t.findMatchingBracket(e.getCursorPosition());if(n)var i=new f(n.row,n.column,n.row,n.column+1);else if(t.$mode.getMatching)i=t.$mode.getMatching(e.session);i&&(t.$bracketHighlight=t.addMarker(i,"ace_bracket","text"))}}),50)}},this.$highlightTags=function(){if(!this.$highlightTagPending){var e=this;this.$highlightTagPending=!0,setTimeout((function(){e.$highlightTagPending=!1;var t=e.session;if(t&&t.bgTokenizer){var n=e.getCursorPosition(),i=new b(e.session,n.row,n.column),r=i.getCurrentToken();if(!r||!/\b(?:tag-open|tag-name)/.test(r.type))return t.removeMarker(t.$tagHighlight),void(t.$tagHighlight=null);if(-1==r.type.indexOf("tag-open")||(r=i.stepForward(),r)){var s=r.value,o=0,a=i.stepBackward();if("<"==a.value)do{a=r,r=i.stepForward(),r&&r.value===s&&-1!==r.type.indexOf("tag-name")&&("<"===a.value?o++:"=0);else{do{r=a,a=i.stepBackward(),r&&r.value===s&&-1!==r.type.indexOf("tag-name")&&("<"===a.value?o++:"1||(e=!1)),t.$highlightLineMarker&&!e)t.removeMarker(t.$highlightLineMarker.id),t.$highlightLineMarker=null;else if(!t.$highlightLineMarker&&e){var n=new f(e.row,e.column,e.row,1/0);n.id=t.addMarker(n,"ace_active-line","screenLine"),t.$highlightLineMarker=n}else e&&(t.$highlightLineMarker.start.row=e.row,t.$highlightLineMarker.end.row=e.row,t.$highlightLineMarker.start.column=e.column,t._signal("changeBackMarker"))},this.onSelectionChange=function(e){var t=this.session;if(t.$selectionMarker&&t.removeMarker(t.$selectionMarker),t.$selectionMarker=null,this.selection.isEmpty())this.$updateHighlightActiveLine();else{var n=this.selection.getRange(),i=this.getSelectionStyle();t.$selectionMarker=t.addMarker(n,"ace_selection",i)}var r=this.$highlightSelectedWord&&this.$getSelectionHighLightRegexp();this.session.highlight(r),this._signal("changeSelection")},this.$getSelectionHighLightRegexp=function(){var e=this.session,t=this.getSelectionRange();if(!t.isEmpty()&&!t.isMultiLine()){var n=t.start.column-1,i=t.end.column+1,r=e.getLine(t.start.row),s=r.length,o=r.substring(Math.max(n,0),Math.min(i,s));if(!(n>=0&&/^[\w\d]/.test(o)||i<=s&&/[\w\d]$/.test(o))&&(o=r.substring(t.start.column,t.end.column),/^[\w\d]+$/.test(o))){var a=this.$search.$assembleRegExp({wholeWord:!0,caseSensitive:!0,needle:o});return a}}},this.onChangeFrontMarker=function(){this.renderer.updateFrontMarkers()},this.onChangeBackMarker=function(){this.renderer.updateBackMarkers()},this.onChangeBreakpoint=function(){this.renderer.updateBreakpoints()},this.onChangeAnnotation=function(){this.renderer.setAnnotations(this.session.getAnnotations())},this.onChangeMode=function(e){this.renderer.updateText(),this._emit("changeMode",e)},this.onChangeWrapLimit=function(){this.renderer.updateFull()},this.onChangeWrapMode=function(){this.renderer.onResize(!0)},this.onChangeFold=function(){this.$updateHighlightActiveLine(),this.renderer.updateFull()},this.getSelectedText=function(){return this.session.getTextRange(this.getSelectionRange())},this.getCopyText=function(){var e=this.getSelectedText();return this._signal("copy",e),e},this.onCopy=function(){this.commands.exec("copy",this)},this.onCut=function(){this.commands.exec("cut",this)},this.onPaste=function(e,t){var n={text:e,event:t};this.commands.exec("paste",this,n)},this.$handlePaste=function(e){"string"==typeof e&&(e={text:e}),this._signal("paste",e);var t=e.text;if(!this.inMultiSelectMode||this.inVirtualSelectionMode)this.insert(t);else{var n=t.split(/\r\n|\r|\n/),i=this.selection.rangeList.ranges;if(n.length>i.length||n.length<2||!n[1])return this.commands.exec("insertstring",this,t);for(var r=i.length;r--;){var s=i[r];s.isEmpty()||this.session.remove(s),this.session.insert(s.start,n[r])}}},this.execCommand=function(e,t){return this.commands.exec(e,this,t)},this.insert=function(e,t){var n=this.session,i=n.getMode(),r=this.getCursorPosition();if(this.getBehavioursEnabled()&&!t){var s=i.transformAction(n.getState(r.row),"insertion",this,n,e);s&&(e!==s.text&&(this.session.mergeUndoDeltas=!1,this.$mergeNextCommand=!1),e=s.text)}if("\t"==e&&(e=this.session.getTabString()),this.selection.isEmpty()){if(this.session.getOverwrite()&&-1==e.indexOf("\n")){o=new f.fromPoints(r,r);o.end.column+=e.length,this.session.remove(o)}}else{var o=this.getSelectionRange();r=this.session.remove(o),this.clearSelection()}if("\n"==e||"\r\n"==e){var a=n.getLine(r.row);if(r.column>a.search(/\S|$/)){var c=a.substr(r.column).search(/\S|$/);n.doc.removeInLine(r.row,r.column,r.column+c)}}this.clearSelection();var l=r.column,u=n.getState(r.row),d=(a=n.getLine(r.row),i.checkOutdent(u,a,e));n.insert(r,e);if(s&&s.selection&&(2==s.selection.length?this.selection.setSelectionRange(new f(r.row,l+s.selection[0],r.row,l+s.selection[1])):this.selection.setSelectionRange(new f(r.row+s.selection[0],s.selection[1],r.row+s.selection[2],s.selection[3]))),n.getDocument().isNewLine(e)){var h=i.getNextLineIndent(u,a.slice(0,r.column),n.getTabString());n.insert({row:r.row+1,column:0},h)}d&&i.autoOutdent(u,n,r.row)},this.onTextInput=function(e){this.keyBinding.onTextInput(e)},this.onCommandKey=function(e,t,n){this.keyBinding.onCommandKey(e,t,n)},this.setOverwrite=function(e){this.session.setOverwrite(e)},this.getOverwrite=function(){return this.session.getOverwrite()},this.toggleOverwrite=function(){this.session.toggleOverwrite()},this.setScrollSpeed=function(e){this.setOption("scrollSpeed",e)},this.getScrollSpeed=function(){return this.getOption("scrollSpeed")},this.setDragDelay=function(e){this.setOption("dragDelay",e)},this.getDragDelay=function(){return this.getOption("dragDelay")},this.setSelectionStyle=function(e){this.setOption("selectionStyle",e)},this.getSelectionStyle=function(){return this.getOption("selectionStyle")},this.setHighlightActiveLine=function(e){this.setOption("highlightActiveLine",e)},this.getHighlightActiveLine=function(){return this.getOption("highlightActiveLine")},this.setHighlightGutterLine=function(e){this.setOption("highlightGutterLine",e)},this.getHighlightGutterLine=function(){return this.getOption("highlightGutterLine")},this.setHighlightSelectedWord=function(e){this.setOption("highlightSelectedWord",e)},this.getHighlightSelectedWord=function(){return this.$highlightSelectedWord},this.setAnimatedScroll=function(e){this.renderer.setAnimatedScroll(e)},this.getAnimatedScroll=function(){return this.renderer.getAnimatedScroll()},this.setShowInvisibles=function(e){this.renderer.setShowInvisibles(e)},this.getShowInvisibles=function(){return this.renderer.getShowInvisibles()},this.setDisplayIndentGuides=function(e){this.renderer.setDisplayIndentGuides(e)},this.getDisplayIndentGuides=function(){return this.renderer.getDisplayIndentGuides()},this.setShowPrintMargin=function(e){this.renderer.setShowPrintMargin(e)},this.getShowPrintMargin=function(){return this.renderer.getShowPrintMargin()},this.setPrintMarginColumn=function(e){this.renderer.setPrintMarginColumn(e)},this.getPrintMarginColumn=function(){return this.renderer.getPrintMarginColumn()},this.setReadOnly=function(e){this.setOption("readOnly",e)},this.getReadOnly=function(){return this.getOption("readOnly")},this.setBehavioursEnabled=function(e){this.setOption("behavioursEnabled",e)},this.getBehavioursEnabled=function(){return this.getOption("behavioursEnabled")},this.setWrapBehavioursEnabled=function(e){this.setOption("wrapBehavioursEnabled",e)},this.getWrapBehavioursEnabled=function(){return this.getOption("wrapBehavioursEnabled")},this.setShowFoldWidgets=function(e){this.setOption("showFoldWidgets",e)},this.getShowFoldWidgets=function(){return this.getOption("showFoldWidgets")},this.setFadeFoldWidgets=function(e){this.setOption("fadeFoldWidgets",e)},this.getFadeFoldWidgets=function(){return this.getOption("fadeFoldWidgets")},this.remove=function(e){this.selection.isEmpty()&&("left"==e?this.selection.selectLeft():this.selection.selectRight());var t=this.getSelectionRange();if(this.getBehavioursEnabled()){var n=this.session,i=n.getState(t.start.row),r=n.getMode().transformAction(i,"deletion",this,n,t);if(0===t.end.column){var s=n.getTextRange(t);if("\n"==s[s.length-1]){var o=n.getLine(t.end.row);/^\s+$/.test(o)&&(t.end.column=o.length)}}r&&(t=r)}this.session.remove(t),this.clearSelection()},this.removeWordRight=function(){this.selection.isEmpty()&&this.selection.selectWordRight(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeWordLeft=function(){this.selection.isEmpty()&&this.selection.selectWordLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineStart=function(){this.selection.isEmpty()&&this.selection.selectLineStart(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineEnd=function(){this.selection.isEmpty()&&this.selection.selectLineEnd();var e=this.getSelectionRange();e.start.column==e.end.column&&e.start.row==e.end.row&&(e.end.column=0,e.end.row++),this.session.remove(e),this.clearSelection()},this.splitLine=function(){this.selection.isEmpty()||(this.session.remove(this.getSelectionRange()),this.clearSelection());var e=this.getCursorPosition();this.insert("\n"),this.moveCursorToPosition(e)},this.transposeLetters=function(){if(this.selection.isEmpty()){var e=this.getCursorPosition(),t=e.column;if(0!==t){var n,i,r=this.session.getLine(e.row);tt.toLowerCase()?1:0}));var r=new f(0,0,0,0);for(i=e.first;i<=e.last;i++){var s=t.getLine(i);r.start.row=i,r.end.row=i,r.end.column=s.length,t.replace(r,n[i-e.first])}},this.toggleCommentLines=function(){var e=this.session.getState(this.getCursorPosition().row),t=this.$getSelectedRows();this.session.getMode().toggleCommentLines(e,this.session,t.first,t.last)},this.toggleBlockComment=function(){var e=this.getCursorPosition(),t=this.session.getState(e.row),n=this.getSelectionRange();this.session.getMode().toggleBlockComment(t,this.session,n,e)},this.getNumberAt=function(e,t){var n=/[\-]?[0-9]+(?:\.[0-9]+)?/g;n.lastIndex=0;var i=this.session.getLine(e);while(n.lastIndex=t){var s={value:r[0],start:r.index,end:r.index+r[0].length};return s}}return null},this.modifyNumber=function(e){var t=this.selection.getCursor().row,n=this.selection.getCursor().column,i=new f(t,n-1,t,n),r=this.session.getTextRange(i);if(!isNaN(parseFloat(r))&&isFinite(r)){var s=this.getNumberAt(t,n);if(s){var o=s.value.indexOf(".")>=0?s.start+s.value.indexOf(".")+1:s.end,a=s.start+s.value.length-o,c=parseFloat(s.value);c*=Math.pow(10,a),o!==s.end&&nf+1)break;f=p.last}u--,a=this.session.$moveLines(h,f,t?0:e),t&&-1==e&&(d=u+1);while(d<=u)o[d].moveBy(a,0),d++;t||(a=0),c+=a}r.fromOrientedRange(r.ranges[0]),r.rangeList.attach(this.session),this.inVirtualSelectionMode=!1}},this.$getSelectedRows=function(e){return e=(e||this.getSelectionRange()).collapseRows(),{first:this.session.getRowFoldStart(e.start.row),last:this.session.getRowFoldEnd(e.end.row)}},this.onCompositionStart=function(e){this.renderer.showComposition(this.getCursorPosition())},this.onCompositionUpdate=function(e){this.renderer.setCompositionText(e)},this.onCompositionEnd=function(){this.renderer.hideComposition()},this.getFirstVisibleRow=function(){return this.renderer.getFirstVisibleRow()},this.getLastVisibleRow=function(){return this.renderer.getLastVisibleRow()},this.isRowVisible=function(e){return e>=this.getFirstVisibleRow()&&e<=this.getLastVisibleRow()},this.isRowFullyVisible=function(e){return e>=this.renderer.getFirstFullyVisibleRow()&&e<=this.renderer.getLastFullyVisibleRow()},this.$getVisibleRowCount=function(){return this.renderer.getScrollBottomRow()-this.renderer.getScrollTopRow()+1},this.$moveByPage=function(e,t){var n=this.renderer,i=this.renderer.layerConfig,r=e*Math.floor(i.height/i.lineHeight);this.$blockScrolling++,!0===t?this.selection.$moveSelection((function(){this.moveCursorBy(r,0)})):!1===t&&(this.selection.moveCursorBy(r,0),this.selection.clearSelection()),this.$blockScrolling--;var s=n.scrollTop;n.scrollBy(0,r*i.lineHeight),null!=t&&n.scrollCursorIntoView(null,.5),n.animateScrolling(s)},this.selectPageDown=function(){this.$moveByPage(1,!0)},this.selectPageUp=function(){this.$moveByPage(-1,!0)},this.gotoPageDown=function(){this.$moveByPage(1,!1)},this.gotoPageUp=function(){this.$moveByPage(-1,!1)},this.scrollPageDown=function(){this.$moveByPage(1)},this.scrollPageUp=function(){this.$moveByPage(-1)},this.scrollToRow=function(e){this.renderer.scrollToRow(e)},this.scrollToLine=function(e,t,n,i){this.renderer.scrollToLine(e,t,n,i)},this.centerSelection=function(){var e=this.getSelectionRange(),t={row:Math.floor(e.start.row+(e.end.row-e.start.row)/2),column:Math.floor(e.start.column+(e.end.column-e.start.column)/2)};this.renderer.alignCursor(t,.5)},this.getCursorPosition=function(){return this.selection.getCursor()},this.getCursorPositionScreen=function(){return this.session.documentToScreenPosition(this.getCursorPosition())},this.getSelectionRange=function(){return this.selection.getRange()},this.selectAll=function(){this.$blockScrolling+=1,this.selection.selectAll(),this.$blockScrolling-=1},this.clearSelection=function(){this.selection.clearSelection()},this.moveCursorTo=function(e,t){this.selection.moveCursorTo(e,t)},this.moveCursorToPosition=function(e){this.selection.moveCursorToPosition(e)},this.jumpToMatching=function(e,t){var n=this.getCursorPosition(),i=new b(this.session,n.row,n.column),r=i.getCurrentToken(),s=r||i.stepForward();if(s){var o,a,c=!1,l={},u=n.column-s.start,d={")":"(","(":"(","]":"[","[":"[","{":"{","}":"{"};do{if(s.value.match(/[{}()\[\]]/g)){for(;u=0;--s)this.$tryReplace(n[s],e)&&i++;return this.selection.setSelectionRange(r),this.$blockScrolling-=1,i},this.$tryReplace=function(e,t){var n=this.session.getTextRange(e);return t=this.$search.replace(n,t),null!==t?(e.end=this.session.replace(e,t),e):null},this.getLastSearchOptions=function(){return this.$search.getOptions()},this.find=function(e,t,n){t||(t={}),"string"==typeof e||e instanceof RegExp?t.needle=e:"object"==typeof e&&i.mixin(t,e);var r=this.selection.getRange();null==t.needle&&(e=this.session.getTextRange(r)||this.$search.$options.needle,e||(r=this.session.getWordRange(r.start.row,r.start.column),e=this.session.getTextRange(r)),this.$search.set({needle:e})),this.$search.set(t),t.start||this.$search.set({start:r});var s=this.$search.find(this.session);return t.preventScroll?s:s?(this.revealRange(s,n),s):(t.backwards?r.start=r.end:r.end=r.start,void this.selection.setRange(r))},this.findNext=function(e,t){this.find({skipCurrent:!0,backwards:!1},e,t)},this.findPrevious=function(e,t){this.find(e,{skipCurrent:!0,backwards:!0},t)},this.revealRange=function(e,t){this.$blockScrolling+=1,this.session.unfold(e),this.selection.setSelectionRange(e),this.$blockScrolling-=1;var n=this.renderer.scrollTop;this.renderer.scrollSelectionIntoView(e.start,e.end,.5),!1!==t&&this.renderer.animateScrolling(n)},this.undo=function(){this.$blockScrolling++,this.session.getUndoManager().undo(),this.$blockScrolling--,this.renderer.scrollCursorIntoView(null,.5)},this.redo=function(){this.$blockScrolling++,this.session.getUndoManager().redo(),this.$blockScrolling--,this.renderer.scrollCursorIntoView(null,.5)},this.destroy=function(){this.renderer.destroy(),this._signal("destroy",this),this.session&&this.session.destroy()},this.setAutoScrollEditorIntoView=function(e){if(e){var t,n=this,i=!1;this.$scrollAnchor||(this.$scrollAnchor=document.createElement("div"));var r=this.$scrollAnchor;r.style.cssText="position:absolute",this.container.insertBefore(r,this.container.firstChild);var s=this.on("changeSelection",(function(){i=!0})),o=this.renderer.on("beforeRender",(function(){i&&(t=n.renderer.container.getBoundingClientRect())})),a=this.renderer.on("afterRender",(function(){if(i&&t&&(n.isFocused()||n.searchBox&&n.searchBox.isFocused())){var e=n.renderer,s=e.$cursorLayer.$pixelPos,o=e.layerConfig,a=s.top-o.offset;i=s.top>=0&&a+t.top<0||!(s.topwindow.innerHeight)&&null,null!=i&&(r.style.top=a+"px",r.style.left=s.left+"px",r.style.height=o.lineHeight+"px",r.scrollIntoView(i)),i=t=null}}));this.setAutoScrollEditorIntoView=function(e){e||(delete this.setAutoScrollEditorIntoView,this.off("changeSelection",s),this.renderer.off("afterRender",a),this.renderer.off("beforeRender",o))}}},this.$resetCursorStyle=function(){var e=this.$cursorStyle||"ace",t=this.renderer.$cursorLayer;t&&(t.setSmoothBlinking(/smooth/.test(e)),t.isBlinking=!this.$readOnly&&"wide"!=e,r.setCssClass(t.element,"ace_slim-cursors",/slim/.test(e)))}}.call(y.prototype),v.defineOptions(y.prototype,"editor",{selectionStyle:{set:function(e){this.onSelectionChange(),this._signal("changeSelectionStyle",{data:e})},initialValue:"line"},highlightActiveLine:{set:function(){this.$updateHighlightActiveLine()},initialValue:!0},highlightSelectedWord:{set:function(e){this.$onSelectionChange()},initialValue:!0},readOnly:{set:function(e){this.$resetCursorStyle()},initialValue:!1},cursorStyle:{set:function(e){this.$resetCursorStyle()},values:["ace","slim","smooth","wide"],initialValue:"ace"},mergeUndoDeltas:{values:[!1,!0,"always"],initialValue:!0},behavioursEnabled:{initialValue:!0},wrapBehavioursEnabled:{initialValue:!0},autoScrollEditorIntoView:{set:function(e){this.setAutoScrollEditorIntoView(e)}},keyboardHandler:{set:function(e){this.setKeyboardHandler(e)},get:function(){return this.keybindingId},handlesSet:!0},hScrollBarAlwaysVisible:"renderer",vScrollBarAlwaysVisible:"renderer",highlightGutterLine:"renderer",animatedScroll:"renderer",showInvisibles:"renderer",showPrintMargin:"renderer",printMarginColumn:"renderer",printMargin:"renderer",fadeFoldWidgets:"renderer",showFoldWidgets:"renderer",showLineNumbers:"renderer",showGutter:"renderer",displayIndentGuides:"renderer",fontSize:"renderer",fontFamily:"renderer",maxLines:"renderer",minLines:"renderer",scrollPastEnd:"renderer",fixedWidthGutter:"renderer",theme:"renderer",scrollSpeed:"$mouseHandler",dragDelay:"$mouseHandler",dragEnabled:"$mouseHandler",focusTimout:"$mouseHandler",tooltipFollowsMouse:"$mouseHandler",firstLineNumber:"session",overwrite:"session",newLineMode:"session",useWorker:"session",useSoftTabs:"session",tabSize:"session",wrap:"session",indentedSoftWrap:"session",foldStyle:"session",mode:"session"}),t.Editor=y})),ace.define("ace/undomanager",["require","exports","module"],(function(e,t,n){"use strict";var i=function(){this.reset()};(function(){function e(e){return{action:e.action,start:e.start,end:e.end,lines:1==e.lines.length?null:e.lines,text:1==e.lines.length?e.lines[0]:null}}function t(e){return{action:e.action,start:e.start,end:e.end,lines:e.lines||[e.text]}}function n(e,t){for(var n=new Array(e.length),i=0;i0},this.hasRedo=function(){return this.$redoStack.length>0},this.markClean=function(){this.dirtyCounter=0},this.isClean=function(){return 0===this.dirtyCounter},this.$serializeDeltas=function(t){return n(t,e)},this.$deserializeDeltas=function(e){return n(e,t)}}).call(i.prototype),t.UndoManager=i})),ace.define("ace/layer/gutter",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter"],(function(e,t,n){"use strict";var i=e("../lib/dom"),r=e("../lib/oop"),s=e("../lib/lang"),o=e("../lib/event_emitter").EventEmitter,a=function(e){this.element=i.createElement("div"),this.element.className="ace_layer ace_gutter-layer",e.appendChild(this.element),this.setShowFoldWidgets(this.$showFoldWidgets),this.gutterWidth=0,this.$annotations=[],this.$updateAnnotations=this.$updateAnnotations.bind(this),this.$cells=[]};(function(){r.implement(this,o),this.setSession=function(e){this.session&&this.session.removeEventListener("change",this.$updateAnnotations),this.session=e,e&&e.on("change",this.$updateAnnotations)},this.addGutterDecoration=function(e,t){window.console&&console.warn&&console.warn("deprecated use session.addGutterDecoration"),this.session.addGutterDecoration(e,t)},this.removeGutterDecoration=function(e,t){window.console&&console.warn&&console.warn("deprecated use session.removeGutterDecoration"),this.session.removeGutterDecoration(e,t)},this.setAnnotations=function(e){this.$annotations=[];for(var t=0;to&&(g=s.end.row+1,s=t.getNextFoldLine(g,s),o=s?s.start.row:1/0),g>r){while(this.$cells.length>p+1)f=this.$cells.pop(),this.element.removeChild(f.element);break}f=this.$cells[++p],f||(f={element:null,textNode:null,foldWidget:null},f.element=i.createElement("div"),f.textNode=document.createTextNode(""),f.element.appendChild(f.textNode),this.element.appendChild(f.element),this.$cells[p]=f);var m="ace_gutter-cell ";c[g]&&(m+=c[g]),l[g]&&(m+=l[g]),this.$annotations[g]&&(m+=this.$annotations[g].className),f.element.className!=m&&(f.element.className=m);var v=t.getRowLength(g)*e.lineHeight+"px";if(v!=f.element.style.height&&(f.element.style.height=v),a){var b=a[g];null==b&&(b=a[g]=t.getFoldWidget(g))}if(b){f.foldWidget||(f.foldWidget=i.createElement("span"),f.element.appendChild(f.foldWidget));m="ace_fold-widget ace_"+b;"start"==b&&g==o&&gn.right-t.right?"foldWidgets":void 0}}).call(a.prototype),t.Gutter=a})),ace.define("ace/layer/marker",["require","exports","module","ace/range","ace/lib/dom"],(function(e,t,n){"use strict";var i=e("../range").Range,r=e("../lib/dom"),s=function(e){this.element=r.createElement("div"),this.element.className="ace_layer ace_marker-layer",e.appendChild(this.element)};(function(){function e(e,t,n,i){return(e?1:0)|(t?2:0)|(n?4:0)|(i?8:0)}this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setMarkers=function(e){this.markers=e},this.update=function(e){if(e){this.config=e;var t=[];for(var n in this.markers){var i=this.markers[n];if(i.range){var r=i.range.clipRows(e.firstRow,e.lastRow);if(!r.isEmpty())if(r=r.toScreenRange(this.session),i.renderer){var s=this.$getTop(r.start.row,e),o=this.$padding+(this.session.$bidiHandler.isBidiRow(r.start.row)?this.session.$bidiHandler.getPosLeft(r.start.column):r.start.column*e.characterWidth);i.renderer(t,r,o,s,e)}else"fullLine"==i.type?this.drawFullLineMarker(t,r,i.clazz,e):"screenLine"==i.type?this.drawScreenLineMarker(t,r,i.clazz,e):r.isMultiLine()?"text"==i.type?this.drawTextMarker(t,r,i.clazz,e):this.drawMultiLineMarker(t,r,i.clazz,e):this.session.$bidiHandler.isBidiRow(r.start.row)?this.drawBidiSingleLineMarker(t,r,i.clazz+" ace_start ace_br15",e):this.drawSingleLineMarker(t,r,i.clazz+" ace_start ace_br15",e)}else i.update(t,this,this.session,e)}this.element.innerHTML=t.join("")}},this.$getTop=function(e,t){return(e-t.firstRowScreen)*t.lineHeight},this.drawTextMarker=function(t,n,r,s,o){for(var a=this.session,c=n.start.row,l=n.end.row,u=c,d=0,h=0,f=a.getScreenLastRowColumn(u),p=null,g=new i(u,n.start.column,u,h);u<=l;u++)g.start.row=g.end.row=u,g.start.column=u==c?n.start.column:a.getRowWrapIndent(u),g.end.column=f,d=h,h=f,f=u+1f,u==l),this.session.$bidiHandler.isBidiRow(u)?this.drawBidiSingleLineMarker(t,g,p,s,u==l?0:1,o):this.drawSingleLineMarker(t,g,p,s,u==l?0:1,o)},this.drawMultiLineMarker=function(e,t,n,i,r){var s,o,a,c=this.$padding;if(r=r||"",this.session.$bidiHandler.isBidiRow(t.start.row)){var l=t.clone();l.end.row=l.start.row,l.end.column=this.session.getLine(l.start.row).length,this.drawBidiSingleLineMarker(e,l,n+" ace_br1 ace_start",i,null,r)}else s=i.lineHeight,o=this.$getTop(t.start.row,i),a=c+t.start.column*i.characterWidth,e.push("
");if(this.session.$bidiHandler.isBidiRow(t.end.row)){l=t.clone();l.start.row=l.end.row,l.start.column=0,this.drawBidiSingleLineMarker(e,l,n+" ace_br12",i,null,r)}else{var u=t.end.column*i.characterWidth;s=i.lineHeight,o=this.$getTop(t.end.row,i),e.push("
")}if(s=(t.end.row-t.start.row-1)*i.lineHeight,!(s<=0)){o=this.$getTop(t.start.row+1,i);var d=(t.start.column?1:0)|(t.end.column?0:8);e.push("
")}},this.drawSingleLineMarker=function(e,t,n,i,r,s){var o=i.lineHeight,a=(t.end.column+(r||0)-t.start.column)*i.characterWidth,c=this.$getTop(t.start.row,i),l=this.$padding+t.start.column*i.characterWidth;e.push("
")},this.drawBidiSingleLineMarker=function(e,t,n,i,r,s){var o=i.lineHeight,a=this.$getTop(t.start.row,i),c=this.$padding,l=this.session.$bidiHandler.getSelections(t.start.column,t.end.column);l.forEach((function(t){e.push("
")}))},this.drawFullLineMarker=function(e,t,n,i,r){var s=this.$getTop(t.start.row,i),o=i.lineHeight;t.start.row!=t.end.row&&(o+=this.$getTop(t.end.row,i)-s),e.push("
")},this.drawScreenLineMarker=function(e,t,n,i,r){var s=this.$getTop(t.start.row,i),o=i.lineHeight;e.push("
")}}).call(s.prototype),t.Marker=s})),ace.define("ace/layer/text",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/lib/event_emitter"],(function(e,t,n){"use strict";var i=e("../lib/oop"),r=e("../lib/dom"),s=e("../lib/lang"),o=(e("../lib/useragent"),e("../lib/event_emitter").EventEmitter),a=function(e){this.element=r.createElement("div"),this.element.className="ace_layer ace_text-layer",e.appendChild(this.element),this.$updateEolChar=this.$updateEolChar.bind(this)};(function(){i.implement(this,o),this.EOF_CHAR="¶",this.EOL_CHAR_LF="¬",this.EOL_CHAR_CRLF="¤",this.EOL_CHAR=this.EOL_CHAR_LF,this.TAB_CHAR="—",this.SPACE_CHAR="·",this.$padding=0,this.$updateEolChar=function(){var e="\n"==this.session.doc.getNewLineCharacter()?this.EOL_CHAR_LF:this.EOL_CHAR_CRLF;if(this.EOL_CHAR!=e)return this.EOL_CHAR=e,!0},this.setPadding=function(e){this.$padding=e,this.element.style.padding="0 "+e+"px"},this.getLineHeight=function(){return this.$fontMetrics.$characterSize.height||0},this.getCharacterWidth=function(){return this.$fontMetrics.$characterSize.width||0},this.$setFontMetrics=function(e){this.$fontMetrics=e,this.$fontMetrics.on("changeCharacterSize",function(e){this._signal("changeCharacterSize",e)}.bind(this)),this.$pollSizeChanges()},this.checkForSizeChanges=function(){this.$fontMetrics.checkForSizeChanges()},this.$pollSizeChanges=function(){return this.$pollSizeChangesTimer=this.$fontMetrics.$pollSizeChanges()},this.setSession=function(e){this.session=e,e&&this.$computeTabString()},this.showInvisibles=!1,this.setShowInvisibles=function(e){return this.showInvisibles!=e&&(this.showInvisibles=e,this.$computeTabString(),!0)},this.displayIndentGuides=!0,this.setDisplayIndentGuides=function(e){return this.displayIndentGuides!=e&&(this.displayIndentGuides=e,this.$computeTabString(),!0)},this.$tabStrings=[],this.onChangeTabSize=this.$computeTabString=function(){var e=this.session.getTabSize();this.tabSize=e;for(var t=this.$tabStrings=[0],n=1;n"+s.stringRepeat(this.TAB_CHAR,n)+""):t.push(s.stringRepeat(" ",n));if(this.displayIndentGuides){this.$indentGuideRe=/\s\S| \t|\t |\s$/;var i="ace_indent-guide",r="",o="";if(this.showInvisibles){i+=" ace_invisible",r=" ace_invisible_space",o=" ace_invisible_tab";var a=s.stringRepeat(this.SPACE_CHAR,this.tabSize),c=s.stringRepeat(this.TAB_CHAR,this.tabSize)}else a=s.stringRepeat(" ",this.tabSize),c=a;this.$tabStrings[" "]=""+a+"",this.$tabStrings["\t"]=""+c+""}},this.updateLines=function(e,t,n){this.config.lastRow==e.lastRow&&this.config.firstRow==e.firstRow||this.scrollLines(e),this.config=e;for(var i=Math.max(t,e.firstRow),r=Math.min(n,e.lastRow),s=this.element.childNodes,o=0,a=e.firstRow;al&&(a=c.end.row+1,c=this.session.getNextFoldLine(a,c),l=c?c.start.row:1/0),a>r)break;var u=s[o++];if(u){var d=[];this.$renderLine(d,a,!this.$useLineGroups(),a==l&&c),u.style.height=e.lineHeight*this.session.getRowLength(a)+"px",u.innerHTML=d.join("")}a++}},this.scrollLines=function(e){var t=this.config;if(this.config=e,!t||t.lastRow0;i--)n.removeChild(n.firstChild);if(t.lastRow>e.lastRow)for(i=this.session.getFoldedRowCount(e.lastRow+1,t.lastRow);i>0;i--)n.removeChild(n.lastChild);if(e.firstRowt.lastRow){r=this.$renderLinesFragment(e,t.lastRow+1,e.lastRow);n.appendChild(r)}},this.$renderLinesFragment=function(e,t,n){var i=this.element.ownerDocument.createDocumentFragment(),s=t,o=this.session.getNextFoldLine(s),a=o?o.start.row:1/0;while(1){if(s>a&&(s=o.end.row+1,o=this.session.getNextFoldLine(s,o),a=o?o.start.row:1/0),s>n)break;var c=r.createElement("div"),l=[];if(this.$renderLine(l,s,!1,s==a&&o),c.innerHTML=l.join(""),this.$useLineGroups())c.className="ace_line_group",i.appendChild(c),c.style.height=e.lineHeight*this.session.getRowLength(s)+"px";else while(c.firstChild)i.appendChild(c.firstChild);s++}return i},this.update=function(e){this.config=e;var t=[],n=e.firstRow,i=e.lastRow,r=n,s=this.session.getNextFoldLine(r),o=s?s.start.row:1/0;while(1){if(r>o&&(r=s.end.row+1,s=this.session.getNextFoldLine(r,s),o=s?s.start.row:1/0),r>i)break;this.$useLineGroups()&&t.push("
"),this.$renderLine(t,r,!1,r==o&&s),this.$useLineGroups()&&t.push("
"),r++}this.element.innerHTML=t.join("")},this.$textToken={text:!0,rparen:!0,lparen:!0},this.$renderToken=function(e,t,n,i){var r=this,o=/\t|&|<|>|( +)|([\x00-\x1f\x80-\xa0\xad\u1680\u180E\u2000-\u200f\u2028\u2029\u202F\u205F\u3000\uFEFF\uFFF9-\uFFFC])|[\u1100-\u115F\u11A3-\u11A7\u11FA-\u11FF\u2329-\u232A\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3000-\u303E\u3041-\u3096\u3099-\u30FF\u3105-\u312D\u3131-\u318E\u3190-\u31BA\u31C0-\u31E3\u31F0-\u321E\u3220-\u3247\u3250-\u32FE\u3300-\u4DBF\u4E00-\uA48C\uA490-\uA4C6\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFAFF\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFF01-\uFF60\uFFE0-\uFFE6]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,a=function(e,n,i,o,a){if(n)return r.showInvisibles?""+s.stringRepeat(r.SPACE_CHAR,e.length)+"":e;if("&"==e)return"&";if("<"==e)return"<";if(">"==e)return">";if("\t"==e){var c=r.session.getScreenTabSize(t+o);return t+=c-1,r.$tabStrings[c]}if(" "==e){var l=r.showInvisibles?"ace_cjk ace_invisible ace_invisible_space":"ace_cjk",u=r.showInvisibles?r.SPACE_CHAR:"";return t+=1,""+u+""}return i?""+r.SPACE_CHAR+"":(t+=1,""+e+"")},c=i.replace(o,a);if(this.$textToken[n.type])e.push(c);else{var l="ace_"+n.type.replace(/\./g," ace_"),u="";"fold"==n.type&&(u=" style='width:"+n.value.length*this.config.characterWidth+"px;' "),e.push("",c,"")}return t+i.length},this.renderIndentGuide=function(e,t,n){var i=t.search(this.$indentGuideRe);return i<=0||i>=n?t:" "==t[0]?(i-=i%this.tabSize,e.push(s.stringRepeat(this.$tabStrings[" "],i/this.tabSize)),t.substr(i)):"\t"==t[0]?(e.push(s.stringRepeat(this.$tabStrings["\t"],i)),t.substr(i)):t},this.$renderWrappedLine=function(e,t,n,i){for(var r=0,o=0,a=n[0],c=0,l=0;l=a)c=this.$renderToken(e,c,u,d.substring(0,a-r)),d=d.substring(a-r),r=a,i||e.push("
","
"),e.push(s.stringRepeat(" ",n.indent)),o++,c=0,a=n[o]||Number.MAX_VALUE;0!=d.length&&(r+=d.length,c=this.$renderToken(e,c,u,d))}}},this.$renderSimpleLine=function(e,t){var n=0,i=t[0],r=i.value;this.displayIndentGuides&&(r=this.renderIndentGuide(e,r)),r&&(n=this.$renderToken(e,n,i,r));for(var s=1;s"),r.length){var s=this.session.getRowSplitData(t);s&&s.length?this.$renderWrappedLine(e,r,s,n):this.$renderSimpleLine(e,r)}this.showInvisibles&&(i&&(t=i.end.row),e.push("",t==this.session.getLength()-1?this.EOF_CHAR:this.EOL_CHAR,"")),n||e.push("
")},this.$getFoldLineTokens=function(e,t){var n=this.session,i=[];function r(e,t,n){var r=0,s=0;while(s+e[r].value.lengthn-t&&(o=o.substring(0,n-t)),i.push({type:e[r].type,value:o}),s=t+o.length,r+=1}while(sn?i.push({type:e[r].type,value:o.substring(0,n-s)}):i.push(e[r]),s+=o.length,r+=1}}var s=n.getTokens(e);return t.walk((function(e,t,o,a,c){null!=e?i.push({type:"fold",value:e}):(c&&(s=n.getTokens(t)),s.length&&r(s,a,o))}),t.end.row,this.session.getLine(t.end.row).length),i},this.$useLineGroups=function(){return this.session.getUseWrapMode()},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.$measureNode&&this.$measureNode.parentNode.removeChild(this.$measureNode),delete this.$measureNode}}).call(a.prototype),t.Text=a})),ace.define("ace/layer/cursor",["require","exports","module","ace/lib/dom"],(function(e,t,n){"use strict";var i,r=e("../lib/dom"),s=function(e){this.element=r.createElement("div"),this.element.className="ace_layer ace_cursor-layer",e.appendChild(this.element),void 0===i&&(i=!("opacity"in this.element.style)),this.isVisible=!1,this.isBlinking=!0,this.blinkInterval=1e3,this.smoothBlinking=!1,this.cursors=[],this.cursor=this.addCursor(),r.addCssClass(this.element,"ace_hidden-cursors"),this.$updateCursors=(i?this.$updateVisibility:this.$updateOpacity).bind(this)};(function(){this.$updateVisibility=function(e){for(var t=this.cursors,n=t.length;n--;)t[n].style.visibility=e?"":"hidden"},this.$updateOpacity=function(e){for(var t=this.cursors,n=t.length;n--;)t[n].style.opacity=e?"":"0"},this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setBlinking=function(e){e!=this.isBlinking&&(this.isBlinking=e,this.restartTimer())},this.setBlinkInterval=function(e){e!=this.blinkInterval&&(this.blinkInterval=e,this.restartTimer())},this.setSmoothBlinking=function(e){e==this.smoothBlinking||i||(this.smoothBlinking=e,r.setCssClass(this.element,"ace_smooth-blinking",e),this.$updateCursors(!0),this.$updateCursors=this.$updateOpacity.bind(this),this.restartTimer())},this.addCursor=function(){var e=r.createElement("div");return e.className="ace_cursor",this.element.appendChild(e),this.cursors.push(e),e},this.removeCursor=function(){if(this.cursors.length>1){var e=this.cursors.pop();return e.parentNode.removeChild(e),e}},this.hideCursor=function(){this.isVisible=!1,r.addCssClass(this.element,"ace_hidden-cursors"),this.restartTimer()},this.showCursor=function(){this.isVisible=!0,r.removeCssClass(this.element,"ace_hidden-cursors"),this.restartTimer()},this.restartTimer=function(){var e=this.$updateCursors;if(clearInterval(this.intervalId),clearTimeout(this.timeoutId),this.smoothBlinking&&r.removeCssClass(this.element,"ace_smooth-blinking"),e(!0),this.isBlinking&&this.blinkInterval&&this.isVisible){this.smoothBlinking&&setTimeout(function(){r.addCssClass(this.element,"ace_smooth-blinking")}.bind(this));var t=function(){this.timeoutId=setTimeout((function(){e(!1)}),.6*this.blinkInterval)}.bind(this);this.intervalId=setInterval((function(){e(!0),t()}),this.blinkInterval),t()}},this.getPixelPosition=function(e,t){if(!this.config||!this.session)return{left:0,top:0};e||(e=this.session.selection.getCursor());var n=this.session.documentToScreenPosition(e),i=this.$padding+(this.session.$bidiHandler.isBidiRow(n.row,e.row)?this.session.$bidiHandler.getPosLeft(n.column):n.column*this.config.characterWidth),r=(n.row-(t?this.config.firstRowScreen:0))*this.config.lineHeight;return{left:i,top:r}},this.update=function(e){this.config=e;var t=this.session.$selectionMarkers,n=0,i=0;void 0!==t&&0!==t.length||(t=[{cursor:null}]);n=0;for(var r=t.length;ne.height+e.offset||s.top<0)&&n>1)){var o=(this.cursors[i++]||this.addCursor()).style;this.drawCursor?this.drawCursor(o,s,e,t[n],this.session):(o.left=s.left+"px",o.top=s.top+"px",o.width=e.characterWidth+"px",o.height=e.lineHeight+"px")}}while(this.cursors.length>i)this.removeCursor();var a=this.session.getOverwrite();this.$setOverwrite(a),this.$pixelPos=s,this.restartTimer()},this.drawCursor=null,this.$setOverwrite=function(e){e!=this.overwrite&&(this.overwrite=e,e?r.addCssClass(this.element,"ace_overwrite-cursors"):r.removeCssClass(this.element,"ace_overwrite-cursors"))},this.destroy=function(){clearInterval(this.intervalId),clearTimeout(this.timeoutId)}}).call(s.prototype),t.Cursor=s})),ace.define("ace/scrollbar",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/event_emitter"],(function(e,t,n){"use strict";var i=e("./lib/oop"),r=e("./lib/dom"),s=e("./lib/event"),o=e("./lib/event_emitter").EventEmitter,a=32768,c=function(e){this.element=r.createElement("div"),this.element.className="ace_scrollbar ace_scrollbar"+this.classSuffix,this.inner=r.createElement("div"),this.inner.className="ace_scrollbar-inner",this.element.appendChild(this.inner),e.appendChild(this.element),this.setVisible(!1),this.skipEvent=!1,s.addListener(this.element,"scroll",this.onScroll.bind(this)),s.addListener(this.element,"mousedown",s.preventDefault)};(function(){i.implement(this,o),this.setVisible=function(e){this.element.style.display=e?"":"none",this.isVisible=e,this.coeff=1}}).call(c.prototype);var l=function(e,t){c.call(this,e),this.scrollTop=0,this.scrollHeight=0,t.$scrollbarWidth=this.width=r.scrollbarWidth(e.ownerDocument),this.inner.style.width=this.element.style.width=(this.width||15)+5+"px",this.$minWidth=0};i.inherits(l,c),function(){this.classSuffix="-v",this.onScroll=function(){if(!this.skipEvent){if(this.scrollTop=this.element.scrollTop,1!=this.coeff){var e=this.element.clientHeight/this.scrollHeight;this.scrollTop=this.scrollTop*(1-e)/(this.coeff-e)}this._emit("scroll",{data:this.scrollTop})}this.skipEvent=!1},this.getWidth=function(){return Math.max(this.isVisible?this.width:0,this.$minWidth||0)},this.setHeight=function(e){this.element.style.height=e+"px"},this.setInnerHeight=this.setScrollHeight=function(e){this.scrollHeight=e,e>a?(this.coeff=a/e,e=a):1!=this.coeff&&(this.coeff=1),this.inner.style.height=e+"px"},this.setScrollTop=function(e){this.scrollTop!=e&&(this.skipEvent=!0,this.scrollTop=e,this.element.scrollTop=e*this.coeff)}}.call(l.prototype);var u=function(e,t){c.call(this,e),this.scrollLeft=0,this.height=t.$scrollbarWidth,this.inner.style.height=this.element.style.height=(this.height||15)+5+"px"};i.inherits(u,c),function(){this.classSuffix="-h",this.onScroll=function(){this.skipEvent||(this.scrollLeft=this.element.scrollLeft,this._emit("scroll",{data:this.scrollLeft})),this.skipEvent=!1},this.getHeight=function(){return this.isVisible?this.height:0},this.setWidth=function(e){this.element.style.width=e+"px"},this.setInnerWidth=function(e){this.inner.style.width=e+"px"},this.setScrollWidth=function(e){this.inner.style.width=e+"px"},this.setScrollLeft=function(e){this.scrollLeft!=e&&(this.skipEvent=!0,this.scrollLeft=this.element.scrollLeft=e)}}.call(u.prototype),t.ScrollBar=l,t.ScrollBarV=l,t.ScrollBarH=u,t.VScrollBar=l,t.HScrollBar=u})),ace.define("ace/renderloop",["require","exports","module","ace/lib/event"],(function(e,t,n){"use strict";var i=e("./lib/event"),r=function(e,t){this.onRender=e,this.pending=!1,this.changes=0,this.window=t||window};(function(){this.schedule=function(e){if(this.changes=this.changes|e,!this.pending&&this.changes){this.pending=!0;var t=this;i.nextFrame((function(){var e;t.pending=!1;while(e=t.changes)t.changes=0,t.onRender(e)}),this.window)}}}).call(r.prototype),t.RenderLoop=r})),ace.define("ace/layer/font_metrics",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/lib/event_emitter"],(function(e,t,n){var i=e("../lib/oop"),r=e("../lib/dom"),s=e("../lib/lang"),o=e("../lib/useragent"),a=e("../lib/event_emitter").EventEmitter,c=0,l=t.FontMetrics=function(e){this.el=r.createElement("div"),this.$setMeasureNodeStyles(this.el.style,!0),this.$main=r.createElement("div"),this.$setMeasureNodeStyles(this.$main.style),this.$measureNode=r.createElement("div"),this.$setMeasureNodeStyles(this.$measureNode.style),this.el.appendChild(this.$main),this.el.appendChild(this.$measureNode),e.appendChild(this.el),c||this.$testFractionalRect(),this.$measureNode.innerHTML=s.stringRepeat("X",c),this.$characterSize={width:0,height:0},this.checkForSizeChanges()};(function(){i.implement(this,a),this.$characterSize={width:0,height:0},this.$testFractionalRect=function(){var e=r.createElement("div");this.$setMeasureNodeStyles(e.style),e.style.width="0.2px",document.documentElement.appendChild(e);var t=e.getBoundingClientRect().width;c=t>0&&t<1?50:100,e.parentNode.removeChild(e)},this.$setMeasureNodeStyles=function(e,t){e.width=e.height="auto",e.left=e.top="0px",e.visibility="hidden",e.position="absolute",e.whiteSpace="pre",o.isIE<8?e["font-family"]="inherit":e.font="inherit",e.overflow=t?"hidden":"visible"},this.checkForSizeChanges=function(){var e=this.$measureSizes();if(e&&(this.$characterSize.width!==e.width||this.$characterSize.height!==e.height)){this.$measureNode.style.fontWeight="bold";var t=this.$measureSizes();this.$measureNode.style.fontWeight="",this.$characterSize=e,this.charSizes=Object.create(null),this.allowBoldFonts=t&&t.width===e.width&&t.height===e.height,this._emit("changeCharacterSize",{data:e})}},this.$pollSizeChanges=function(){if(this.$pollSizeChangesTimer)return this.$pollSizeChangesTimer;var e=this;return this.$pollSizeChangesTimer=setInterval((function(){e.checkForSizeChanges()}),500)},this.setPolling=function(e){e?this.$pollSizeChanges():this.$pollSizeChangesTimer&&(clearInterval(this.$pollSizeChangesTimer),this.$pollSizeChangesTimer=0)},this.$measureSizes=function(){if(50===c){var e=null;try{e=this.$measureNode.getBoundingClientRect()}catch(n){e={width:0,height:0}}var t={height:e.height,width:e.width/c}}else t={height:this.$measureNode.clientHeight,width:this.$measureNode.clientWidth/c};return 0===t.width||0===t.height?null:t},this.$measureCharWidth=function(e){this.$main.innerHTML=s.stringRepeat(e,c);var t=this.$main.getBoundingClientRect();return t.width/c},this.getCharacterWidth=function(e){var t=this.charSizes[e];return void 0===t&&(t=this.charSizes[e]=this.$measureCharWidth(e)/this.$characterSize.width),t},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.el&&this.el.parentNode&&this.el.parentNode.removeChild(this.el)}}).call(l.prototype)})),ace.define("ace/virtual_renderer",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/config","ace/lib/useragent","ace/layer/gutter","ace/layer/marker","ace/layer/text","ace/layer/cursor","ace/scrollbar","ace/scrollbar","ace/renderloop","ace/layer/font_metrics","ace/lib/event_emitter"],(function(e,t,n){"use strict";var i=e("./lib/oop"),r=e("./lib/dom"),s=e("./config"),o=e("./lib/useragent"),a=e("./layer/gutter").Gutter,c=e("./layer/marker").Marker,l=e("./layer/text").Text,u=e("./layer/cursor").Cursor,d=e("./scrollbar").HScrollBar,h=e("./scrollbar").VScrollBar,f=e("./renderloop").RenderLoop,p=e("./layer/font_metrics").FontMetrics,g=e("./lib/event_emitter").EventEmitter,m='.ace_editor {position: relative;overflow: hidden;font: 12px/normal \'Monaco\', \'Menlo\', \'Ubuntu Mono\', \'Consolas\', \'source-code-pro\', monospace;direction: ltr;text-align: left;-webkit-tap-highlight-color: rgba(0, 0, 0, 0);}.ace_scroller {position: absolute;overflow: hidden;top: 0;bottom: 0;background-color: inherit;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;cursor: text;}.ace_content {position: absolute;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;min-width: 100%;}.ace_dragging .ace_scroller:before{position: absolute;top: 0;left: 0;right: 0;bottom: 0;content: \'\';background: rgba(250, 250, 250, 0.01);z-index: 1000;}.ace_dragging.ace_dark .ace_scroller:before{background: rgba(0, 0, 0, 0.01);}.ace_selecting, .ace_selecting * {cursor: text !important;}.ace_gutter {position: absolute;overflow : hidden;width: auto;top: 0;bottom: 0;left: 0;cursor: default;z-index: 4;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;}.ace_gutter-active-line {position: absolute;left: 0;right: 0;}.ace_scroller.ace_scroll-left {box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;}.ace_gutter-cell {padding-left: 19px;padding-right: 6px;background-repeat: no-repeat;}.ace_gutter-cell.ace_error {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==");background-repeat: no-repeat;background-position: 2px center;}.ace_gutter-cell.ace_warning {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==");background-position: 2px center;}.ace_gutter-cell.ace_info {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=");background-position: 2px center;}.ace_dark .ace_gutter-cell.ace_info {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC");}.ace_scrollbar {position: absolute;right: 0;bottom: 0;z-index: 6;}.ace_scrollbar-inner {position: absolute;cursor: text;left: 0;top: 0;}.ace_scrollbar-v{overflow-x: hidden;overflow-y: scroll;top: 0;}.ace_scrollbar-h {overflow-x: scroll;overflow-y: hidden;left: 0;}.ace_print-margin {position: absolute;height: 100%;}.ace_text-input {position: absolute;z-index: 0;width: 0.5em;height: 1em;opacity: 0;background: transparent;-moz-appearance: none;appearance: none;border: none;resize: none;outline: none;overflow: hidden;font: inherit;padding: 0 1px;margin: 0 -1px;text-indent: -1em;-ms-user-select: text;-moz-user-select: text;-webkit-user-select: text;user-select: text;white-space: pre!important;}.ace_text-input.ace_composition {background: inherit;color: inherit;z-index: 1000;opacity: 1;text-indent: 0;}.ace_layer {z-index: 1;position: absolute;overflow: hidden;word-wrap: normal;white-space: pre;height: 100%;width: 100%;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;pointer-events: none;}.ace_gutter-layer {position: relative;width: auto;text-align: right;pointer-events: auto;}.ace_text-layer {font: inherit !important;}.ace_cjk {display: inline-block;text-align: center;}.ace_cursor-layer {z-index: 4;}.ace_cursor {z-index: 4;position: absolute;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;border-left: 2px solid;transform: translatez(0);}.ace_multiselect .ace_cursor {border-left-width: 1px;}.ace_slim-cursors .ace_cursor {border-left-width: 1px;}.ace_overwrite-cursors .ace_cursor {border-left-width: 0;border-bottom: 1px solid;}.ace_hidden-cursors .ace_cursor {opacity: 0.2;}.ace_smooth-blinking .ace_cursor {-webkit-transition: opacity 0.18s;transition: opacity 0.18s;}.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {position: absolute;z-index: 3;}.ace_marker-layer .ace_selection {position: absolute;z-index: 5;}.ace_marker-layer .ace_bracket {position: absolute;z-index: 6;}.ace_marker-layer .ace_active-line {position: absolute;z-index: 2;}.ace_marker-layer .ace_selected-word {position: absolute;z-index: 4;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;}.ace_line .ace_fold {-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;display: inline-block;height: 11px;margin-top: -2px;vertical-align: middle;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII="),url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=");background-repeat: no-repeat, repeat-x;background-position: center center, top left;color: transparent;border: 1px solid black;border-radius: 2px;cursor: pointer;pointer-events: auto;}.ace_dark .ace_fold {}.ace_fold:hover{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII="),url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC");}.ace_tooltip {background-color: #FFF;background-image: -webkit-linear-gradient(top, transparent, rgba(0, 0, 0, 0.1));background-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));border: 1px solid gray;border-radius: 1px;box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);color: black;max-width: 100%;padding: 3px 4px;position: fixed;z-index: 999999;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;cursor: default;white-space: pre;word-wrap: break-word;line-height: normal;font-style: normal;font-weight: normal;letter-spacing: normal;pointer-events: none;}.ace_folding-enabled > .ace_gutter-cell {padding-right: 13px;}.ace_fold-widget {-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0 -12px 0 1px;display: none;width: 11px;vertical-align: top;background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==");background-repeat: no-repeat;background-position: center;border-radius: 3px;border: 1px solid transparent;cursor: pointer;}.ace_folding-enabled .ace_fold-widget {display: inline-block; }.ace_fold-widget.ace_end {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==");}.ace_fold-widget.ace_closed {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==");}.ace_fold-widget:hover {border: 1px solid rgba(0, 0, 0, 0.3);background-color: rgba(255, 255, 255, 0.2);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);}.ace_fold-widget:active {border: 1px solid rgba(0, 0, 0, 0.4);background-color: rgba(0, 0, 0, 0.05);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);}.ace_dark .ace_fold-widget {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC");}.ace_dark .ace_fold-widget.ace_end {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==");}.ace_dark .ace_fold-widget.ace_closed {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==");}.ace_dark .ace_fold-widget:hover {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);background-color: rgba(255, 255, 255, 0.1);}.ace_dark .ace_fold-widget:active {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);}.ace_fold-widget.ace_invalid {background-color: #FFB4B4;border-color: #DE5555;}.ace_fade-fold-widgets .ace_fold-widget {-webkit-transition: opacity 0.4s ease 0.05s;transition: opacity 0.4s ease 0.05s;opacity: 0;}.ace_fade-fold-widgets:hover .ace_fold-widget {-webkit-transition: opacity 0.05s ease 0.05s;transition: opacity 0.05s ease 0.05s;opacity:1;}.ace_underline {text-decoration: underline;}.ace_bold {font-weight: bold;}.ace_nobold .ace_bold {font-weight: normal;}.ace_italic {font-style: italic;}.ace_error-marker {background-color: rgba(255, 0, 0,0.2);position: absolute;z-index: 9;}.ace_highlight-marker {background-color: rgba(255, 255, 0,0.2);position: absolute;z-index: 8;}.ace_br1 {border-top-left-radius : 3px;}.ace_br2 {border-top-right-radius : 3px;}.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}.ace_br4 {border-bottom-right-radius: 3px;}.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}.ace_br8 {border-bottom-left-radius : 3px;}.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_text-input-ios {position: absolute !important;top: -100000px !important;left: -100000px !important;}';r.importCssString(m,"ace_editor.css");var v=function(e,t){var n=this;this.container=e||r.createElement("div"),this.$keepTextAreaAtCursor=!o.isOldIE,r.addCssClass(this.container,"ace_editor"),this.setTheme(t),this.$gutter=r.createElement("div"),this.$gutter.className="ace_gutter",this.container.appendChild(this.$gutter),this.$gutter.setAttribute("aria-hidden",!0),this.scroller=r.createElement("div"),this.scroller.className="ace_scroller",this.container.appendChild(this.scroller),this.content=r.createElement("div"),this.content.className="ace_content",this.scroller.appendChild(this.content),this.$gutterLayer=new a(this.$gutter),this.$gutterLayer.on("changeGutterWidth",this.onGutterResize.bind(this)),this.$markerBack=new c(this.content);var i=this.$textLayer=new l(this.content);this.canvas=i.element,this.$markerFront=new c(this.content),this.$cursorLayer=new u(this.content),this.$horizScroll=!1,this.$vScroll=!1,this.scrollBar=this.scrollBarV=new h(this.container,this),this.scrollBarH=new d(this.container,this),this.scrollBarV.addEventListener("scroll",(function(e){n.$scrollAnimation||n.session.setScrollTop(e.data-n.scrollMargin.top)})),this.scrollBarH.addEventListener("scroll",(function(e){n.$scrollAnimation||n.session.setScrollLeft(e.data-n.scrollMargin.left)})),this.scrollTop=0,this.scrollLeft=0,this.cursorPos={row:0,column:0},this.$fontMetrics=new p(this.container),this.$textLayer.$setFontMetrics(this.$fontMetrics),this.$textLayer.addEventListener("changeCharacterSize",(function(e){n.updateCharacterSize(),n.onResize(!0,n.gutterWidth,n.$size.width,n.$size.height),n._signal("changeCharacterSize",e)})),this.$size={width:0,height:0,scrollerHeight:0,scrollerWidth:0,$dirty:!0},this.layerConfig={width:1,padding:0,firstRow:0,firstRowScreen:0,lastRow:0,lineHeight:0,characterWidth:0,minHeight:1,maxHeight:1,offset:0,height:1,gutterOffset:1},this.scrollMargin={left:0,right:0,top:0,bottom:0,v:0,h:0},this.$loop=new f(this.$renderChanges.bind(this),this.container.ownerDocument.defaultView),this.$loop.schedule(this.CHANGE_FULL),this.updateCharacterSize(),this.setPadding(4),s.resetOptions(this),s._emit("renderer",this)};(function(){this.CHANGE_CURSOR=1,this.CHANGE_MARKER=2,this.CHANGE_GUTTER=4,this.CHANGE_SCROLL=8,this.CHANGE_LINES=16,this.CHANGE_TEXT=32,this.CHANGE_SIZE=64,this.CHANGE_MARKER_BACK=128,this.CHANGE_MARKER_FRONT=256,this.CHANGE_FULL=512,this.CHANGE_H_SCROLL=1024,i.implement(this,g),this.updateCharacterSize=function(){this.$textLayer.allowBoldFonts!=this.$allowBoldFonts&&(this.$allowBoldFonts=this.$textLayer.allowBoldFonts,this.setStyle("ace_nobold",!this.$allowBoldFonts)),this.layerConfig.characterWidth=this.characterWidth=this.$textLayer.getCharacterWidth(),this.layerConfig.lineHeight=this.lineHeight=this.$textLayer.getLineHeight(),this.$updatePrintMargin()},this.setSession=function(e){this.session&&this.session.doc.off("changeNewLineMode",this.onChangeNewLineMode),this.session=e,e&&this.scrollMargin.top&&e.getScrollTop()<=0&&e.setScrollTop(-this.scrollMargin.top),this.$cursorLayer.setSession(e),this.$markerBack.setSession(e),this.$markerFront.setSession(e),this.$gutterLayer.setSession(e),this.$textLayer.setSession(e),e&&(this.$loop.schedule(this.CHANGE_FULL),this.session.$setFontMetrics(this.$fontMetrics),this.scrollBarH.scrollLeft=this.scrollBarV.scrollTop=null,this.onChangeNewLineMode=this.onChangeNewLineMode.bind(this),this.onChangeNewLineMode(),this.session.doc.on("changeNewLineMode",this.onChangeNewLineMode))},this.updateLines=function(e,t,n){if(void 0===t&&(t=1/0),this.$changedLines?(this.$changedLines.firstRow>e&&(this.$changedLines.firstRow=e),this.$changedLines.lastRowthis.layerConfig.lastRow||this.$loop.schedule(this.CHANGE_LINES)},this.onChangeNewLineMode=function(){this.$loop.schedule(this.CHANGE_TEXT),this.$textLayer.$updateEolChar(),this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR)},this.onChangeTabSize=function(){this.$loop.schedule(this.CHANGE_TEXT|this.CHANGE_MARKER),this.$textLayer.onChangeTabSize()},this.updateText=function(){this.$loop.schedule(this.CHANGE_TEXT)},this.updateFull=function(e){e?this.$renderChanges(this.CHANGE_FULL,!0):this.$loop.schedule(this.CHANGE_FULL)},this.updateFontSize=function(){this.$textLayer.checkForSizeChanges()},this.$changes=0,this.$updateSizeAsync=function(){this.$loop.pending?this.$size.$dirty=!0:this.onResize()},this.onResize=function(e,t,n,i){if(!(this.resizing>2)){this.resizing>0?this.resizing++:this.resizing=e?1:0;var r=this.container;i||(i=r.clientHeight||r.scrollHeight),n||(n=r.clientWidth||r.scrollWidth);var s=this.$updateCachedSize(e,t,n,i);if(!this.$size.scrollerHeight||!n&&!i)return this.resizing=0;e&&(this.$gutterLayer.$padding=null),e?this.$renderChanges(s|this.$changes,!0):this.$loop.schedule(s|this.$changes),this.resizing&&(this.resizing=0),this.scrollBarV.scrollLeft=this.scrollBarV.scrollTop=null}},this.$updateCachedSize=function(e,t,n,i){i-=this.$extraHeight||0;var r=0,s=this.$size,o={width:s.width,height:s.height,scrollerHeight:s.scrollerHeight,scrollerWidth:s.scrollerWidth};return i&&(e||s.height!=i)&&(s.height=i,r|=this.CHANGE_SIZE,s.scrollerHeight=s.height,this.$horizScroll&&(s.scrollerHeight-=this.scrollBarH.getHeight()),this.scrollBarV.element.style.bottom=this.scrollBarH.getHeight()+"px",r|=this.CHANGE_SCROLL),n&&(e||s.width!=n)&&(r|=this.CHANGE_SIZE,s.width=n,null==t&&(t=this.$showGutter?this.$gutter.offsetWidth:0),this.gutterWidth=t,this.scrollBarH.element.style.left=this.scroller.style.left=t+"px",s.scrollerWidth=Math.max(0,n-t-this.scrollBarV.getWidth()),this.scrollBarH.element.style.right=this.scroller.style.right=this.scrollBarV.getWidth()+"px",this.scroller.style.bottom=this.scrollBarH.getHeight()+"px",(this.session&&this.session.getUseWrapMode()&&this.adjustWrapLimit()||e)&&(r|=this.CHANGE_FULL)),s.$dirty=!n||!i,r&&this._signal("resize",o),r},this.onGutterResize=function(){var e=this.$showGutter?this.$gutter.offsetWidth:0;e!=this.gutterWidth&&(this.$changes|=this.$updateCachedSize(!0,e,this.$size.width,this.$size.height)),this.session.getUseWrapMode()&&this.adjustWrapLimit()||this.$size.$dirty?this.$loop.schedule(this.CHANGE_FULL):(this.$computeLayerConfig(),this.$loop.schedule(this.CHANGE_MARKER))},this.adjustWrapLimit=function(){var e=this.$size.scrollerWidth-2*this.$padding,t=Math.floor(e/this.characterWidth);return this.session.adjustWrapLimit(t,this.$showPrintMargin&&this.$printMarginColumn)},this.setAnimatedScroll=function(e){this.setOption("animatedScroll",e)},this.getAnimatedScroll=function(){return this.$animatedScroll},this.setShowInvisibles=function(e){this.setOption("showInvisibles",e),this.session.$bidiHandler.setShowInvisibles(e)},this.getShowInvisibles=function(){return this.getOption("showInvisibles")},this.getDisplayIndentGuides=function(){return this.getOption("displayIndentGuides")},this.setDisplayIndentGuides=function(e){this.setOption("displayIndentGuides",e)},this.setShowPrintMargin=function(e){this.setOption("showPrintMargin",e)},this.getShowPrintMargin=function(){return this.getOption("showPrintMargin")},this.setPrintMarginColumn=function(e){this.setOption("printMarginColumn",e)},this.getPrintMarginColumn=function(){return this.getOption("printMarginColumn")},this.getShowGutter=function(){return this.getOption("showGutter")},this.setShowGutter=function(e){return this.setOption("showGutter",e)},this.getFadeFoldWidgets=function(){return this.getOption("fadeFoldWidgets")},this.setFadeFoldWidgets=function(e){this.setOption("fadeFoldWidgets",e)},this.setHighlightGutterLine=function(e){this.setOption("highlightGutterLine",e)},this.getHighlightGutterLine=function(){return this.getOption("highlightGutterLine")},this.$updateGutterLineHighlight=function(){var e=this.$cursorLayer.$pixelPos,t=this.layerConfig.lineHeight;if(this.session.getUseWrapMode()){var n=this.session.selection.getCursor();n.column=0,e=this.$cursorLayer.getPixelPosition(n,!0),t*=this.session.getRowLength(n.row)}this.$gutterLineHighlight.style.top=e.top-this.layerConfig.offset+"px",this.$gutterLineHighlight.style.height=t+"px"},this.$updatePrintMargin=function(){if(this.$showPrintMargin||this.$printMarginEl){if(!this.$printMarginEl){var e=r.createElement("div");e.className="ace_layer ace_print-margin-layer",this.$printMarginEl=r.createElement("div"),this.$printMarginEl.className="ace_print-margin",e.appendChild(this.$printMarginEl),this.content.insertBefore(e,this.content.firstChild)}var t=this.$printMarginEl.style;t.left=this.characterWidth*this.$printMarginColumn+this.$padding+"px",t.visibility=this.$showPrintMargin?"visible":"hidden",this.session&&-1==this.session.$wrap&&this.adjustWrapLimit()}},this.getContainerElement=function(){return this.container},this.getMouseEventTarget=function(){return this.scroller},this.getTextAreaContainer=function(){return this.container},this.$moveTextAreaToCursor=function(){if(this.$keepTextAreaAtCursor){var e=this.layerConfig,t=this.$cursorLayer.$pixelPos.top,n=this.$cursorLayer.$pixelPos.left;t-=e.offset;var i=this.textarea.style,r=this.lineHeight;if(t<0||t>e.height-r)i.top=i.left="0";else{var s=this.characterWidth;if(this.$composition){var o=this.textarea.value.replace(/^\x01+/,"");s*=this.session.$getStringScreenWidth(o)[0]+2,r+=2}n-=this.scrollLeft,n>this.$size.scrollerWidth-s&&(n=this.$size.scrollerWidth-s),n+=this.gutterWidth,i.height=r+"px",i.width=s+"px",i.left=Math.min(n,this.$size.scrollerWidth-s)+"px",i.top=Math.min(t,this.$size.height-r)+"px"}}},this.getFirstVisibleRow=function(){return this.layerConfig.firstRow},this.getFirstFullyVisibleRow=function(){return this.layerConfig.firstRow+(0===this.layerConfig.offset?0:1)},this.getLastFullyVisibleRow=function(){var e=this.layerConfig,t=e.lastRow,n=this.session.documentToScreenRow(t,0)*e.lineHeight;return n-this.session.getScrollTop()>e.height-e.lineHeight?t-1:t},this.getLastVisibleRow=function(){return this.layerConfig.lastRow},this.$padding=null,this.setPadding=function(e){this.$padding=e,this.$textLayer.setPadding(e),this.$cursorLayer.setPadding(e),this.$markerFront.setPadding(e),this.$markerBack.setPadding(e),this.$loop.schedule(this.CHANGE_FULL),this.$updatePrintMargin()},this.setScrollMargin=function(e,t,n,i){var r=this.scrollMargin;r.top=0|e,r.bottom=0|t,r.right=0|i,r.left=0|n,r.v=r.top+r.bottom,r.h=r.left+r.right,r.top&&this.scrollTop<=0&&this.session&&this.session.setScrollTop(-r.top),this.updateFull()},this.getHScrollBarAlwaysVisible=function(){return this.$hScrollBarAlwaysVisible},this.setHScrollBarAlwaysVisible=function(e){this.setOption("hScrollBarAlwaysVisible",e)},this.getVScrollBarAlwaysVisible=function(){return this.$vScrollBarAlwaysVisible},this.setVScrollBarAlwaysVisible=function(e){this.setOption("vScrollBarAlwaysVisible",e)},this.$updateScrollBarV=function(){var e=this.layerConfig.maxHeight,t=this.$size.scrollerHeight;!this.$maxLines&&this.$scrollPastEnd&&(e-=(t-this.lineHeight)*this.$scrollPastEnd,this.scrollTop>e-t&&(e=this.scrollTop+t,this.scrollBarV.scrollTop=null)),this.scrollBarV.setScrollHeight(e+this.scrollMargin.v),this.scrollBarV.setScrollTop(this.scrollTop+this.scrollMargin.top)},this.$updateScrollBarH=function(){this.scrollBarH.setScrollWidth(this.layerConfig.width+2*this.$padding+this.scrollMargin.h),this.scrollBarH.setScrollLeft(this.scrollLeft+this.scrollMargin.left)},this.$frozen=!1,this.freeze=function(){this.$frozen=!0},this.unfreeze=function(){this.$frozen=!1},this.$renderChanges=function(e,t){if(this.$changes&&(e|=this.$changes,this.$changes=0),this.session&&this.container.offsetWidth&&!this.$frozen&&(e||t)){if(this.$size.$dirty)return this.$changes|=e,this.onResize(!0);this.lineHeight||this.$textLayer.checkForSizeChanges(),this._signal("beforeRender"),this.session&&this.session.$bidiHandler&&this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);var n=this.layerConfig;if(e&this.CHANGE_FULL||e&this.CHANGE_SIZE||e&this.CHANGE_TEXT||e&this.CHANGE_LINES||e&this.CHANGE_SCROLL||e&this.CHANGE_H_SCROLL){if(e|=this.$computeLayerConfig(),n.firstRow!=this.layerConfig.firstRow&&n.firstRowScreen==this.layerConfig.firstRowScreen){var i=this.scrollTop+(n.firstRow-this.layerConfig.firstRow)*this.lineHeight;i>0&&(this.scrollTop=i,e|=this.CHANGE_SCROLL,e|=this.$computeLayerConfig())}n=this.layerConfig,this.$updateScrollBarV(),e&this.CHANGE_H_SCROLL&&this.$updateScrollBarH(),this.$gutterLayer.element.style.marginTop=-n.offset+"px",this.content.style.marginTop=-n.offset+"px",this.content.style.width=n.width+2*this.$padding+"px",this.content.style.height=n.minHeight+"px"}if(e&this.CHANGE_H_SCROLL&&(this.content.style.marginLeft=-this.scrollLeft+"px",this.scroller.className=this.scrollLeft<=0?"ace_scroller":"ace_scroller ace_scroll-left"),e&this.CHANGE_FULL)return this.$textLayer.update(n),this.$showGutter&&this.$gutterLayer.update(n),this.$markerBack.update(n),this.$markerFront.update(n),this.$cursorLayer.update(n),this.$moveTextAreaToCursor(),this.$highlightGutterLine&&this.$updateGutterLineHighlight(),void this._signal("afterRender");if(e&this.CHANGE_SCROLL)return e&this.CHANGE_TEXT||e&this.CHANGE_LINES?this.$textLayer.update(n):this.$textLayer.scrollLines(n),this.$showGutter&&this.$gutterLayer.update(n),this.$markerBack.update(n),this.$markerFront.update(n),this.$cursorLayer.update(n),this.$highlightGutterLine&&this.$updateGutterLineHighlight(),this.$moveTextAreaToCursor(),void this._signal("afterRender");e&this.CHANGE_TEXT?(this.$textLayer.update(n),this.$showGutter&&this.$gutterLayer.update(n)):e&this.CHANGE_LINES?(this.$updateLines()||e&this.CHANGE_GUTTER&&this.$showGutter)&&this.$gutterLayer.update(n):(e&this.CHANGE_TEXT||e&this.CHANGE_GUTTER)&&this.$showGutter&&this.$gutterLayer.update(n),e&this.CHANGE_CURSOR&&(this.$cursorLayer.update(n),this.$moveTextAreaToCursor(),this.$highlightGutterLine&&this.$updateGutterLineHighlight()),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_FRONT)&&this.$markerFront.update(n),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_BACK)&&this.$markerBack.update(n),this._signal("afterRender")}else this.$changes|=e},this.$autosize=function(){var e=this.session.getScreenLength()*this.lineHeight,t=this.$maxLines*this.lineHeight,n=Math.min(t,Math.max((this.$minLines||1)*this.lineHeight,e))+this.scrollMargin.v+(this.$extraHeight||0);this.$horizScroll&&(n+=this.scrollBarH.getHeight()),this.$maxPixelHeight&&n>this.$maxPixelHeight&&(n=this.$maxPixelHeight);var i=e>t;if(n!=this.desiredHeight||this.$size.height!=this.desiredHeight||i!=this.$vScroll){i!=this.$vScroll&&(this.$vScroll=i,this.scrollBarV.setVisible(i));var r=this.container.clientWidth;this.container.style.height=n+"px",this.$updateCachedSize(!0,this.$gutterWidth,r,n),this.desiredHeight=n,this._signal("autosize")}},this.$computeLayerConfig=function(){var e=this.session,t=this.$size,n=t.height<=2*this.lineHeight,i=this.session.getScreenLength(),r=i*this.lineHeight,s=this.$getLongestLine(),o=!n&&(this.$hScrollBarAlwaysVisible||t.scrollerWidth-s-2*this.$padding<0),a=this.$horizScroll!==o;a&&(this.$horizScroll=o,this.scrollBarH.setVisible(o));var c=this.$vScroll;this.$maxLines&&this.lineHeight>1&&this.$autosize();var l=this.scrollTop%this.lineHeight,u=t.scrollerHeight+this.lineHeight,d=!this.$maxLines&&this.$scrollPastEnd?(t.scrollerHeight-this.lineHeight)*this.$scrollPastEnd:0;r+=d;var h=this.scrollMargin;this.session.setScrollTop(Math.max(-h.top,Math.min(this.scrollTop,r-t.scrollerHeight+h.bottom))),this.session.setScrollLeft(Math.max(-h.left,Math.min(this.scrollLeft,s+2*this.$padding-t.scrollerWidth+h.right)));var f=!n&&(this.$vScrollBarAlwaysVisible||t.scrollerHeight-r+d<0||this.scrollTop>h.top),p=c!==f;p&&(this.$vScroll=f,this.scrollBarV.setVisible(f));var g,m,v=Math.ceil(u/this.lineHeight)-1,b=Math.max(0,Math.round((this.scrollTop-l)/this.lineHeight)),y=b+v,w=this.lineHeight;b=e.screenToDocumentRow(b,0);var _=e.getFoldLine(b);_&&(b=_.start.row),g=e.documentToScreenRow(b,0),m=e.getRowLength(b)*w,y=Math.min(e.screenToDocumentRow(y,0),e.getLength()-1),u=t.scrollerHeight+e.getRowLength(y)*w+m,l=this.scrollTop-g*w;var x=0;return this.layerConfig.width!=s&&(x=this.CHANGE_H_SCROLL),(a||p)&&(x=this.$updateCachedSize(!0,this.gutterWidth,t.width,t.height),this._signal("scrollbarVisibilityChanged"),p&&(s=this.$getLongestLine())),this.layerConfig={width:s,padding:this.$padding,firstRow:b,firstRowScreen:g,lastRow:y,lineHeight:w,characterWidth:this.characterWidth,minHeight:u,maxHeight:r,offset:l,gutterOffset:w?Math.max(0,Math.ceil((l+t.height-t.scrollerHeight)/w)):0,height:this.$size.scrollerHeight},x},this.$updateLines=function(){if(this.$changedLines){var e=this.$changedLines.firstRow,t=this.$changedLines.lastRow;this.$changedLines=null;var n=this.layerConfig;if(!(e>n.lastRow+1)&&!(ts?(t&&c+o>s+this.lineHeight&&(s-=t*this.$size.scrollerHeight),0===s&&(s=-this.scrollMargin.top),this.session.setScrollTop(s)):c+this.$size.scrollerHeight-ar?(r=1-this.scrollMargin.top||(t>0&&this.session.getScrollTop()+this.$size.scrollerHeight-this.layerConfig.maxHeight<-1+this.scrollMargin.bottom||(e<0&&this.session.getScrollLeft()>=1-this.scrollMargin.left||(e>0&&this.session.getScrollLeft()+this.$size.scrollerWidth-this.layerConfig.width<-1+this.scrollMargin.right||void 0)))},this.pixelToScreenCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),i=e+this.scrollLeft-n.left-this.$padding,r=i/this.characterWidth,s=Math.floor((t+this.scrollTop-n.top)/this.lineHeight),o=Math.round(r);return{row:s,column:o,side:r-o>0?1:-1,offsetX:i}},this.screenToTextCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),i=e+this.scrollLeft-n.left-this.$padding,r=Math.round(i/this.characterWidth),s=(t+this.scrollTop-n.top)/this.lineHeight;return this.session.screenToDocumentPosition(s,Math.max(r,0),i)},this.textToScreenCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),i=this.session.documentToScreenPosition(e,t),r=this.$padding+(this.session.$bidiHandler.isBidiRow(i.row,e)?this.session.$bidiHandler.getPosLeft(i.column):Math.round(i.column*this.characterWidth)),s=i.row*this.lineHeight;return{pageX:n.left+r-this.scrollLeft,pageY:n.top+s-this.scrollTop}},this.visualizeFocus=function(){r.addCssClass(this.container,"ace_focus")},this.visualizeBlur=function(){r.removeCssClass(this.container,"ace_focus")},this.showComposition=function(e){this.$composition||(this.$composition={keepTextAreaAtCursor:this.$keepTextAreaAtCursor,cssText:this.textarea.style.cssText}),this.$keepTextAreaAtCursor=!0,r.addCssClass(this.textarea,"ace_composition"),this.textarea.style.cssText="",this.$moveTextAreaToCursor()},this.setCompositionText=function(e){this.$moveTextAreaToCursor()},this.hideComposition=function(){this.$composition&&(r.removeCssClass(this.textarea,"ace_composition"),this.$keepTextAreaAtCursor=this.$composition.keepTextAreaAtCursor,this.textarea.style.cssText=this.$composition.cssText,this.$composition=null)},this.setTheme=function(e,t){var n=this;if(this.$themeId=e,n._dispatchEvent("themeChange",{theme:e}),e&&"string"!=typeof e)o(e);else{var i=e||this.$options.theme.initialValue;s.loadModule(["theme",i],o)}function o(i){if(n.$themeId!=e)return t&&t();if(!i||!i.cssClass)throw new Error("couldn't load module "+e+" or it didn't call define");r.importCssString(i.cssText,i.cssClass,n.container.ownerDocument),n.theme&&r.removeCssClass(n.container,n.theme.cssClass);var s="padding"in i?i.padding:"padding"in(n.theme||{})?4:n.$padding;n.$padding&&s!=n.$padding&&n.setPadding(s),n.$theme=i.cssClass,n.theme=i,r.addCssClass(n.container,i.cssClass),r.setCssClass(n.container,"ace_dark",i.isDark),n.$size&&(n.$size.width=0,n.$updateSizeAsync()),n._dispatchEvent("themeLoaded",{theme:i}),t&&t()}},this.getTheme=function(){return this.$themeId},this.setStyle=function(e,t){r.setCssClass(this.container,e,!1!==t)},this.unsetStyle=function(e){r.removeCssClass(this.container,e)},this.setCursorStyle=function(e){this.scroller.style.cursor!=e&&(this.scroller.style.cursor=e)},this.setMouseCursor=function(e){this.scroller.style.cursor=e},this.destroy=function(){this.$textLayer.destroy(),this.$cursorLayer.destroy()}}).call(v.prototype),s.defineOptions(v.prototype,"renderer",{animatedScroll:{initialValue:!1},showInvisibles:{set:function(e){this.$textLayer.setShowInvisibles(e)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!1},showPrintMargin:{set:function(){this.$updatePrintMargin()},initialValue:!0},printMarginColumn:{set:function(){this.$updatePrintMargin()},initialValue:80},printMargin:{set:function(e){"number"==typeof e&&(this.$printMarginColumn=e),this.$showPrintMargin=!!e,this.$updatePrintMargin()},get:function(){return this.$showPrintMargin&&this.$printMarginColumn}},showGutter:{set:function(e){this.$gutter.style.display=e?"block":"none",this.$loop.schedule(this.CHANGE_FULL),this.onGutterResize()},initialValue:!0},fadeFoldWidgets:{set:function(e){r.setCssClass(this.$gutter,"ace_fade-fold-widgets",e)},initialValue:!1},showFoldWidgets:{set:function(e){this.$gutterLayer.setShowFoldWidgets(e)},initialValue:!0},showLineNumbers:{set:function(e){this.$gutterLayer.setShowLineNumbers(e),this.$loop.schedule(this.CHANGE_GUTTER)},initialValue:!0},displayIndentGuides:{set:function(e){this.$textLayer.setDisplayIndentGuides(e)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!0},highlightGutterLine:{set:function(e){if(!this.$gutterLineHighlight)return this.$gutterLineHighlight=r.createElement("div"),this.$gutterLineHighlight.className="ace_gutter-active-line",void this.$gutter.appendChild(this.$gutterLineHighlight);this.$gutterLineHighlight.style.display=e?"":"none",this.$cursorLayer.$pixelPos&&this.$updateGutterLineHighlight()},initialValue:!1,value:!0},hScrollBarAlwaysVisible:{set:function(e){this.$hScrollBarAlwaysVisible&&this.$horizScroll||this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},vScrollBarAlwaysVisible:{set:function(e){this.$vScrollBarAlwaysVisible&&this.$vScroll||this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},fontSize:{set:function(e){"number"==typeof e&&(e+="px"),this.container.style.fontSize=e,this.updateFontSize()},initialValue:12},fontFamily:{set:function(e){this.container.style.fontFamily=e,this.updateFontSize()}},maxLines:{set:function(e){this.updateFull()}},minLines:{set:function(e){this.updateFull()}},maxPixelHeight:{set:function(e){this.updateFull()},initialValue:0},scrollPastEnd:{set:function(e){e=+e||0,this.$scrollPastEnd!=e&&(this.$scrollPastEnd=e,this.$loop.schedule(this.CHANGE_SCROLL))},initialValue:0,handlesSet:!0},fixedWidthGutter:{set:function(e){this.$gutterLayer.$fixedWidth=!!e,this.$loop.schedule(this.CHANGE_GUTTER)}},theme:{set:function(e){this.setTheme(e)},get:function(){return this.$themeId||this.theme},initialValue:"./theme/textmate",handlesSet:!0}}),t.VirtualRenderer=v})),ace.define("ace/worker/worker_client",["require","exports","module","ace/lib/oop","ace/lib/net","ace/lib/event_emitter","ace/config"],(function(e,t,n){"use strict";var i=e("../lib/oop"),r=e("../lib/net"),s=e("../lib/event_emitter").EventEmitter,o=e("../config");function a(e,t){var n=t.src;r.qualifyURL(e);try{return new Blob([n],{type:"application/javascript"})}catch(o){var i=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder,s=new i;return s.append(n),s.getBlob("application/javascript")}}function c(e,t){var n=a(e,t),i=window.URL||window.webkitURL,r=i.createObjectURL(n);return new Worker(r)}var l=function(t,n,i,r,s){if(this.$sendDeltaQueue=this.$sendDeltaQueue.bind(this),this.changeListener=this.changeListener.bind(this),this.onMessage=this.onMessage.bind(this),e.nameToUrl&&!e.toUrl&&(e.toUrl=e.nameToUrl),o.get("packaged")||!e.toUrl)r=r||o.moduleUrl(n.id,"worker");else{var a=this.$normalizePath;r=r||a(e.toUrl("ace/worker/worker.js",null,"_"));var l={};t.forEach((function(t){l[t]=a(e.toUrl(t,null,"_").replace(/(\.js)?(\?.*)?$/,""))}))}this.$worker=c(r,n),s&&this.send("importScripts",s),this.$worker.postMessage({init:!0,tlns:l,module:n.id,classname:i}),this.callbackId=1,this.callbacks={},this.$worker.onmessage=this.onMessage};(function(){i.implement(this,s),this.onMessage=function(e){var t=e.data;switch(t.type){case"event":this._signal(t.name,{data:t.data});break;case"call":var n=this.callbacks[t.id];n&&(n(t.data),delete this.callbacks[t.id]);break;case"error":this.reportError(t.data);break;case"log":window.console&&console.log&&console.log.apply(console,t.data);break}},this.reportError=function(e){window.console&&console.error&&console.error(e)},this.$normalizePath=function(e){return r.qualifyURL(e)},this.terminate=function(){this._signal("terminate",{}),this.deltaQueue=null,this.$worker.terminate(),this.$worker=null,this.$doc&&this.$doc.off("change",this.changeListener),this.$doc=null},this.send=function(e,t){this.$worker.postMessage({command:e,args:t})},this.call=function(e,t,n){if(n){var i=this.callbackId++;this.callbacks[i]=n,t.push(i)}this.send(e,t)},this.emit=function(e,t){try{this.$worker.postMessage({event:e,data:{data:t.data}})}catch(n){console.error(n.stack)}},this.attachToDocument=function(e){this.$doc&&this.terminate(),this.$doc=e,this.call("setValue",[e.getValue()]),e.on("change",this.changeListener)},this.changeListener=function(e){this.deltaQueue||(this.deltaQueue=[],setTimeout(this.$sendDeltaQueue,0)),"insert"==e.action?this.deltaQueue.push(e.start,e.lines):this.deltaQueue.push(e.start,e.end)},this.$sendDeltaQueue=function(){var e=this.deltaQueue;e&&(this.deltaQueue=null,e.length>50&&e.length>this.$doc.getLength()>>1?this.call("setValue",[this.$doc.getValue()]):this.emit("change",{data:e}))}}).call(l.prototype);var u=function(e,t,n){this.$sendDeltaQueue=this.$sendDeltaQueue.bind(this),this.changeListener=this.changeListener.bind(this),this.callbackId=1,this.callbacks={},this.messageBuffer=[];var i=null,r=!1,a=Object.create(s),c=this;this.$worker={},this.$worker.terminate=function(){},this.$worker.postMessage=function(e){c.messageBuffer.push(e),i&&(r?setTimeout(l):l())},this.setEmitSync=function(e){r=e};var l=function(){var e=c.messageBuffer.shift();e.command?i[e.command].apply(i,e.args):e.event&&a._signal(e.event,e.data)};a.postMessage=function(e){c.onMessage({data:e})},a.callback=function(e,t){this.postMessage({type:"call",id:t,data:e})},a.emit=function(e,t){this.postMessage({type:"event",name:e,data:t})},o.loadModule(["worker",t],(function(e){i=new e[n](a);while(c.messageBuffer.length)l()}))};u.prototype=l.prototype,t.UIWorkerClient=u,t.WorkerClient=l,t.createWorker=c})),ace.define("ace/placeholder",["require","exports","module","ace/range","ace/lib/event_emitter","ace/lib/oop"],(function(e,t,n){"use strict";var i=e("./range").Range,r=e("./lib/event_emitter").EventEmitter,s=e("./lib/oop"),o=function(e,t,n,i,r,s){var o=this;this.length=t,this.session=e,this.doc=e.getDocument(),this.mainClass=r,this.othersClass=s,this.$onUpdate=this.onUpdate.bind(this),this.doc.on("change",this.$onUpdate),this.$others=i,this.$onCursorChange=function(){setTimeout((function(){o.onCursorChange()}))},this.$pos=n;var a=e.getUndoManager().$undoStack||e.getUndoManager().$undostack||{length:-1};this.$undoStackDepth=a.length,this.setup(),e.selection.on("changeCursor",this.$onCursorChange)};(function(){s.implement(this,r),this.setup=function(){var e=this,t=this.doc,n=this.session;this.selectionBefore=n.selection.toJSON(),n.selection.inMultiSelectMode&&n.selection.toSingleRange(),this.pos=t.createAnchor(this.$pos.row,this.$pos.column);var r=this.pos;r.$insertRight=!0,r.detach(),r.markerId=n.addMarker(new i(r.row,r.column,r.row,r.column+this.length),this.mainClass,null,!1),this.others=[],this.$others.forEach((function(n){var i=t.createAnchor(n.row,n.column);i.$insertRight=!0,i.detach(),e.others.push(i)})),n.setUndoSelect(!1)},this.showOtherMarkers=function(){if(!this.othersActive){var e=this.session,t=this;this.othersActive=!0,this.others.forEach((function(n){n.markerId=e.addMarker(new i(n.row,n.column,n.row,n.column+t.length),t.othersClass,null,!1)}))}},this.hideOtherMarkers=function(){if(this.othersActive){this.othersActive=!1;for(var e=0;e=this.pos.column&&t.start.column<=this.pos.column+this.length+1,s=t.start.column-this.pos.column;if(this.updateAnchors(e),r&&(this.length+=n),r&&!this.session.$fromUndo)if("insert"===e.action)for(var o=this.others.length-1;o>=0;o--){var a=this.others[o],c={row:a.row,column:a.column+s};this.doc.insertMergedLines(c,e.lines)}else if("remove"===e.action)for(o=this.others.length-1;o>=0;o--){a=this.others[o],c={row:a.row,column:a.column+s};this.doc.remove(new i(c.row,c.column,c.row,c.column-n))}this.$updating=!1,this.updateMarkers()}},this.updateAnchors=function(e){this.pos.onChange(e);for(var t=this.others.length;t--;)this.others[t].onChange(e);this.updateMarkers()},this.updateMarkers=function(){if(!this.$updating){var e=this,t=this.session,n=function(n,r){t.removeMarker(n.markerId),n.markerId=t.addMarker(new i(n.row,n.column,n.row,n.column+e.length),r,null,!1)};n(this.pos,this.mainClass);for(var r=this.others.length;r--;)n(this.others[r],this.othersClass)}},this.onCursorChange=function(e){if(!this.$updating&&this.session){var t=this.session.selection.getCursor();t.row===this.pos.row&&t.column>=this.pos.column&&t.column<=this.pos.column+this.length?(this.showOtherMarkers(),this._emit("cursorEnter",e)):(this.hideOtherMarkers(),this._emit("cursorLeave",e))}},this.detach=function(){this.session.removeMarker(this.pos&&this.pos.markerId),this.hideOtherMarkers(),this.doc.removeEventListener("change",this.$onUpdate),this.session.selection.removeEventListener("changeCursor",this.$onCursorChange),this.session.setUndoSelect(!0),this.session=null},this.cancel=function(){if(-1!==this.$undoStackDepth){for(var e=this.session.getUndoManager(),t=(e.$undoStack||e.$undostack).length-this.$undoStackDepth,n=0;n1&&!this.inMultiSelectMode&&(this._signal("multiSelect"),this.inMultiSelectMode=!0,this.session.$undoSelect=!1,this.rangeList.attach(this.session)),t||this.fromOrientedRange(e)}},this.toSingleRange=function(e){e=e||this.ranges[0];var t=this.rangeList.removeAll();t.length&&this.$onRemoveRange(t),e&&this.fromOrientedRange(e)},this.substractPoint=function(e){var t=this.rangeList.substractPoint(e);if(t)return this.$onRemoveRange(t),t[0]},this.mergeOverlappingRanges=function(){var e=this.rangeList.merge();e.length?this.$onRemoveRange(e):this.ranges[0]&&this.fromOrientedRange(this.ranges[0])},this.$onAddRange=function(e){this.rangeCount=this.rangeList.ranges.length,this.ranges.unshift(e),this._signal("addRange",{range:e})},this.$onRemoveRange=function(e){if(this.rangeCount=this.rangeList.ranges.length,1==this.rangeCount&&this.inMultiSelectMode){var t=this.rangeList.ranges.pop();e.push(t),this.rangeCount=0}for(var n=e.length;n--;){var i=this.ranges.indexOf(e[n]);this.ranges.splice(i,1)}this._signal("removeRange",{ranges:e}),0===this.rangeCount&&this.inMultiSelectMode&&(this.inMultiSelectMode=!1,this._signal("singleSelect"),this.session.$undoSelect=!0,this.rangeList.detach(this.session)),t=t||this.ranges[0],t&&!t.isEqual(this.getRange())&&this.fromOrientedRange(t)},this.$initRangeList=function(){this.rangeList||(this.rangeList=new i,this.ranges=[],this.rangeCount=0)},this.getAllRanges=function(){return this.rangeCount?this.rangeList.ranges.concat():[this.getRange()]},this.splitIntoLines=function(){if(this.rangeCount>1){var e=this.rangeList.ranges,t=e[e.length-1],n=r.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(n,t.cursor==t.start)}else{n=this.getRange();var i=this.isBackwards(),s=n.start.row,o=n.end.row;if(s==o){if(i)var a=n.end,c=n.start;else a=n.start,c=n.end;return this.addRange(r.fromPoints(c,c)),void this.addRange(r.fromPoints(a,a))}var l=[],u=this.getLineRange(s,!0);u.start.column=n.start.column,l.push(u);for(var d=s+1;d1){var e=this.rangeList.ranges,t=e[e.length-1],n=r.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(n,t.cursor==t.start)}else{var i=this.session.documentToScreenPosition(this.selectionLead),s=this.session.documentToScreenPosition(this.selectionAnchor),o=this.rectangularRangeBlock(i,s);o.forEach(this.addRange,this)}},this.rectangularRangeBlock=function(e,t,n){var i=[],s=e.column0)v--;if(v>0){var b=0;while(i[b].isEmpty())b++}for(var y=v;y>=b;y--)i[y].isEmpty()&&i.splice(y,1)}return i}}.call(s.prototype);var p=e("./editor").Editor;function g(e,t){return e.row==t.row&&e.column==t.column}function m(e){e.$multiselectOnSessionChange||(e.$onAddRange=e.$onAddRange.bind(e),e.$onRemoveRange=e.$onRemoveRange.bind(e),e.$onMultiSelect=e.$onMultiSelect.bind(e),e.$onSingleSelect=e.$onSingleSelect.bind(e),e.$multiselectOnSessionChange=t.onSessionChange.bind(e),e.$checkMultiselectChange=e.$checkMultiselectChange.bind(e),e.$multiselectOnSessionChange(e),e.on("changeSession",e.$multiselectOnSessionChange),e.on("mousedown",o),e.commands.addCommands(l.defaultCommands),v(e))}function v(e){var t=e.textInput.getElement(),n=!1;function i(t){n&&(e.renderer.setMouseCursor(""),n=!1)}a.addListener(t,"keydown",(function(t){var r=18==t.keyCode&&!(t.ctrlKey||t.shiftKey||t.metaKey);e.$blockSelectEnabled&&r?n||(e.renderer.setMouseCursor("crosshair"),n=!0):n&&i()})),a.addListener(t,"keyup",i),a.addListener(t,"blur",i)}(function(){this.updateSelectionMarkers=function(){this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.addSelectionMarker=function(e){e.cursor||(e.cursor=e.end);var t=this.getSelectionStyle();return e.marker=this.session.addMarker(e,"ace_selection",t),this.session.$selectionMarkers.push(e),this.session.selectionMarkerCount=this.session.$selectionMarkers.length,e},this.removeSelectionMarker=function(e){if(e.marker){this.session.removeMarker(e.marker);var t=this.session.$selectionMarkers.indexOf(e);-1!=t&&this.session.$selectionMarkers.splice(t,1),this.session.selectionMarkerCount=this.session.$selectionMarkers.length}},this.removeSelectionMarkers=function(e){for(var t=this.session.$selectionMarkers,n=e.length;n--;){var i=e[n];if(i.marker){this.session.removeMarker(i.marker);var r=t.indexOf(i);-1!=r&&t.splice(r,1)}}this.session.selectionMarkerCount=t.length},this.$onAddRange=function(e){this.addSelectionMarker(e.range),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onRemoveRange=function(e){this.removeSelectionMarkers(e.ranges),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onMultiSelect=function(e){this.inMultiSelectMode||(this.inMultiSelectMode=!0,this.setStyle("ace_multiselect"),this.keyBinding.addKeyboardHandler(l.keyboardHandler),this.commands.setDefaultHandler("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers())},this.$onSingleSelect=function(e){this.session.multiSelect.inVirtualMode||(this.inMultiSelectMode=!1,this.unsetStyle("ace_multiselect"),this.keyBinding.removeKeyboardHandler(l.keyboardHandler),this.commands.removeDefaultHandler("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers(),this._emit("changeSelection"))},this.$onMultiSelectExec=function(e){var t=e.command,n=e.editor;if(n.multiSelect){if(t.multiSelectAction)"forEach"==t.multiSelectAction?i=n.forEachSelection(t,e.args):"forEachLine"==t.multiSelectAction?i=n.forEachSelection(t,e.args,!0):"single"==t.multiSelectAction?(n.exitMultiSelectMode(),i=t.exec(n,e.args||{})):i=t.multiSelectAction(n,e.args||{});else{var i=t.exec(n,e.args||{});n.multiSelect.addRange(n.multiSelect.toOrientedRange()),n.multiSelect.mergeOverlappingRanges()}return i}},this.forEachSelection=function(e,t,n){if(!this.inVirtualSelectionMode){var i,r=n&&n.keepOrder,o=1==n||n&&n.$byLines,a=this.session,c=this.selection,l=c.rangeList,u=(r?c:l).ranges;if(!u.length)return e.exec?e.exec(this,t||{}):e(this,t||{});var d=c._eventRegistry;c._eventRegistry={};var h=new s(a);this.inVirtualSelectionMode=!0;for(var f=u.length;f--;){if(o)while(f>0&&u[f].start.row==u[f-1].end.row)f--;h.fromOrientedRange(u[f]),h.index=f,this.selection=a.selection=h;var p=e.exec?e.exec(this,t||{}):e(this,t||{});i||void 0===p||(i=p),h.toOrientedRange(u[f])}h.detach(),this.selection=a.selection=c,this.inVirtualSelectionMode=!1,c._eventRegistry=d,c.mergeOverlappingRanges();var g=this.renderer.$scrollAnimation;return this.onCursorChange(),this.onSelectionChange(),g&&g.from==g.to&&this.renderer.animateScrolling(g.from),i}},this.exitMultiSelectMode=function(){this.inMultiSelectMode&&!this.inVirtualSelectionMode&&this.multiSelect.toSingleRange()},this.getSelectedText=function(){var e="";if(this.inMultiSelectMode&&!this.inVirtualSelectionMode){for(var t=this.multiSelect.rangeList.ranges,n=[],i=0;io&&(o=n.column),ru?e.insert(i,c.stringRepeat(" ",s-u)):e.remove(new r(i.row,i.column,i.row,i.column-s+u)),t.start.column=t.end.column=o,t.start.row=t.end.row=i.row,t.cursor=t.end})),t.fromOrientedRange(n[0]),this.renderer.updateCursor(),this.renderer.updateBackMarkers()}else{var u=this.selection.getRange(),d=u.start.row,h=u.end.row,f=d==h;if(f){var p,g=this.session.getLength();do{p=this.session.getLine(h)}while(/[=:]/.test(p)&&++h0);d<0&&(d=0),h>=g&&(h=g-1)}var m=this.session.removeFullLines(d,h);m=this.$reAlignText(m,f),this.session.insert({row:d,column:0},m.join("\n")+"\n"),f||(u.start.column=0,u.end.column=m[m.length-1].length),this.selection.setRange(u)}},this.$reAlignText=function(e,t){var n,i,r,s=!0,o=!0;return e.map((function(e){var t=e.match(/(\s*)(.*?)(\s*)([=:].*)/);return t?null==n?(n=t[1].length,i=t[2].length,r=t[3].length,t):(n+i+r!=t[1].length+t[2].length+t[3].length&&(o=!1),n!=t[1].length&&(s=!1),n>t[1].length&&(n=t[1].length),it[3].length&&(r=t[3].length),t):[e]})).map(t?l:s?o?u:l:d);function a(e){return c.stringRepeat(" ",e)}function l(e){return e[2]?a(n)+e[2]+a(i-e[2].length+r)+e[4].replace(/^([=:])\s+/,"$1 "):e[0]}function u(e){return e[2]?a(n+i-e[2].length)+e[2]+a(r," ")+e[4].replace(/^([=:])\s+/,"$1 "):e[0]}function d(e){return e[2]?a(n)+e[2]+a(r)+e[4].replace(/^([=:])\s+/,"$1 "):e[0]}}}).call(p.prototype),t.onSessionChange=function(e){var t=e.session;t&&!t.multiSelect&&(t.$selectionMarkers=[],t.selection.$initRangeList(),t.multiSelect=t.selection),this.multiSelect=t&&t.multiSelect;var n=e.oldSession;n&&(n.multiSelect.off("addRange",this.$onAddRange),n.multiSelect.off("removeRange",this.$onRemoveRange),n.multiSelect.off("multiSelect",this.$onMultiSelect),n.multiSelect.off("singleSelect",this.$onSingleSelect),n.multiSelect.lead.off("change",this.$checkMultiselectChange),n.multiSelect.anchor.off("change",this.$checkMultiselectChange)),t&&(t.multiSelect.on("addRange",this.$onAddRange),t.multiSelect.on("removeRange",this.$onRemoveRange),t.multiSelect.on("multiSelect",this.$onMultiSelect),t.multiSelect.on("singleSelect",this.$onSingleSelect),t.multiSelect.lead.on("change",this.$checkMultiselectChange),t.multiSelect.anchor.on("change",this.$checkMultiselectChange)),t&&this.inMultiSelectMode!=t.selection.inMultiSelectMode&&(t.selection.inMultiSelectMode?this.$onMultiSelect():this.$onSingleSelect())},t.MultiSelect=m,e("./config").defineOptions(p.prototype,"editor",{enableMultiselect:{set:function(e){m(this),e?(this.on("changeSession",this.$multiselectOnSessionChange),this.on("mousedown",o)):(this.off("changeSession",this.$multiselectOnSessionChange),this.off("mousedown",o))},value:!0},enableBlockSelect:{set:function(e){this.$blockSelectEnabled=e},value:!0}})})),ace.define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"],(function(e,t,n){"use strict";var i=e("../../range").Range,r=t.FoldMode=function(){};(function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(e,t,n){var i=e.getLine(n);return this.foldingStartMarker.test(i)?"start":"markbeginend"==t&&this.foldingStopMarker&&this.foldingStopMarker.test(i)?"end":""},this.getFoldWidgetRange=function(e,t,n){return null},this.indentationBlock=function(e,t,n){var r=/\S/,s=e.getLine(t),o=s.search(r);if(-1!=o){var a=n||s.length,c=e.getLength(),l=t,u=t;while(++tl){var h=e.getLine(u).length;return new i(l,a,u,h)}}},this.openingBracketBlock=function(e,t,n,r,s){var o={row:n,column:r+1},a=e.$findClosingBracket(t,o,s);if(a){var c=e.foldWidgets[a.row];return null==c&&(c=e.getFoldWidget(a.row)),"start"==c&&a.row>o.row&&(a.row--,a.column=e.getLine(a.row).length),i.fromPoints(o,a)}},this.closingBracketBlock=function(e,t,n,r,s){var o={row:n,column:r},a=e.$findOpeningBracket(t,o);if(a)return a.column++,o.column--,i.fromPoints(a,o)}}).call(r.prototype)})),ace.define("ace/theme/textmate",["require","exports","module","ace/lib/dom"],(function(e,t,n){"use strict";t.isDark=!1,t.cssClass="ace-tm",t.cssText='.ace-tm .ace_gutter {background: #f0f0f0;color: #333;}.ace-tm .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-tm .ace_fold {background-color: #6B72E6;}.ace-tm {background-color: #FFFFFF;color: black;}.ace-tm .ace_cursor {color: black;}.ace-tm .ace_invisible {color: rgb(191, 191, 191);}.ace-tm .ace_storage,.ace-tm .ace_keyword {color: blue;}.ace-tm .ace_constant {color: rgb(197, 6, 11);}.ace-tm .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-tm .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-tm .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-tm .ace_invalid {background-color: rgba(255, 0, 0, 0.1);color: red;}.ace-tm .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-tm .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-tm .ace_support.ace_type,.ace-tm .ace_support.ace_class {color: rgb(109, 121, 222);}.ace-tm .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-tm .ace_string {color: rgb(3, 106, 7);}.ace-tm .ace_comment {color: rgb(76, 136, 107);}.ace-tm .ace_comment.ace_doc {color: rgb(0, 102, 255);}.ace-tm .ace_comment.ace_doc.ace_tag {color: rgb(128, 159, 191);}.ace-tm .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-tm .ace_variable {color: rgb(49, 132, 149);}.ace-tm .ace_xml-pe {color: rgb(104, 104, 91);}.ace-tm .ace_entity.ace_name.ace_function {color: #0000A2;}.ace-tm .ace_heading {color: rgb(12, 7, 255);}.ace-tm .ace_list {color:rgb(185, 6, 144);}.ace-tm .ace_meta.ace_tag {color:rgb(0, 22, 142);}.ace-tm .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-tm .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-tm.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px white;}.ace-tm .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-tm .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-tm .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-tm .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-tm .ace_gutter-active-line {background-color : #dcdcdc;}.ace-tm .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-tm .ace_indent-guide {background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==") right repeat-y;}';var i=e("../lib/dom");i.importCssString(t.cssText,t.cssClass)})),ace.define("ace/line_widgets",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/range"],(function(e,t,n){"use strict";e("./lib/oop");var i=e("./lib/dom");e("./range").Range;function r(e){this.session=e,this.session.widgetManager=this,this.session.getRowLength=this.getRowLength,this.session.$getWidgetScreenLength=this.$getWidgetScreenLength,this.updateOnChange=this.updateOnChange.bind(this),this.renderWidgets=this.renderWidgets.bind(this),this.measureWidgets=this.measureWidgets.bind(this),this.session._changedWidgets=[],this.$onChangeEditor=this.$onChangeEditor.bind(this),this.session.on("change",this.updateOnChange),this.session.on("changeFold",this.updateOnFold),this.session.on("changeEditor",this.$onChangeEditor)}(function(){this.getRowLength=function(e){var t;return t=this.lineWidgets&&this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0,this.$useWrapMode&&this.$wrapData[e]?this.$wrapData[e].length+1+t:1+t},this.$getWidgetScreenLength=function(){var e=0;return this.lineWidgets.forEach((function(t){t&&t.rowCount&&!t.hidden&&(e+=t.rowCount)})),e},this.$onChangeEditor=function(e){this.attach(e.editor)},this.attach=function(e){e&&e.widgetManager&&e.widgetManager!=this&&e.widgetManager.detach(),this.editor!=e&&(this.detach(),this.editor=e,e&&(e.widgetManager=this,e.renderer.on("beforeRender",this.measureWidgets),e.renderer.on("afterRender",this.renderWidgets)))},this.detach=function(e){var t=this.editor;if(t){this.editor=null,t.widgetManager=null,t.renderer.off("beforeRender",this.measureWidgets),t.renderer.off("afterRender",this.renderWidgets);var n=this.session.lineWidgets;n&&n.forEach((function(e){e&&e.el&&e.el.parentNode&&(e._inDocument=!1,e.el.parentNode.removeChild(e.el))}))}},this.updateOnFold=function(e,t){var n=t.lineWidgets;if(n&&e.action){for(var i=e.data,r=i.start.row,s=i.end.row,o="add"==e.action,a=r+1;a0&&!i[r])r--;this.firstRow=n.firstRow,this.lastRow=n.lastRow,t.$cursorLayer.config=n;for(var o=r;o<=s;o++){var a=i[o];if(a&&a.el)if(a.hidden)a.el.style.top=-100-(a.pixelHeight||0)+"px";else{a._inDocument||(a._inDocument=!0,t.container.appendChild(a.el));var c=t.$cursorLayer.getPixelPosition({row:o,column:0},!0).top;a.coverLine||(c+=n.lineHeight*this.session.getRowLineCount(a.row)),a.el.style.top=c-n.offset+"px";var l=a.coverGutter?0:t.gutterWidth;a.fixedWidth||(l-=t.scrollLeft),a.el.style.left=l+"px",a.fullWidth&&a.screenWidth&&(a.el.style.minWidth=n.width+2*n.padding+"px"),a.fixedWidth?a.el.style.right=t.scrollBar.getWidth()+"px":a.el.style.right=""}}}}}).call(r.prototype),t.LineWidgets=r})),ace.define("ace/ext/error_marker",["require","exports","module","ace/line_widgets","ace/lib/dom","ace/range"],(function(e,t,n){"use strict";var i=e("../line_widgets").LineWidgets,r=e("../lib/dom"),s=e("../range").Range;function o(e,t,n){var i=0,r=e.length-1;while(i<=r){var s=i+r>>1,o=n(t,e[s]);if(o>0)i=s+1;else{if(!(o<0))return s;r=s-1}}return-(i+1)}function a(e,t,n){var i=e.getAnnotations().sort(s.comparePoints);if(i.length){var r=o(i,{row:t,column:-1},s.comparePoints);r<0&&(r=-r-1),r>=i.length?r=n>0?0:i.length-1:0===r&&n<0&&(r=i.length-1);var a=i[r];if(a&&n){if(a.row===t){do{a=i[r+=n]}while(a&&a.row===t);if(!a)return i.slice()}var c=[];t=a.row;do{c[n<0?"unshift":"push"](a),a=i[r+=n]}while(a&&a.row==t);return c.length&&c}}}t.showErrorMarker=function(e,t){var n=e.session;n.widgetManager||(n.widgetManager=new i(n),n.widgetManager.attach(e));var s=e.getCursorPosition(),o=s.row,c=n.widgetManager.getWidgetsAtRow(o).filter((function(e){return"errorMarker"==e.type}))[0];c?c.destroy():o-=t;var l,u=a(n,o,t);if(u){var d=u[0];s.column=(d.pos&&"number"!=typeof d.column?d.pos.sc:d.column)||0,s.row=d.row,l=e.renderer.$gutterLayer.$annotations[s.row]}else{if(c)return;l={text:["Looks good!"],className:"ace_ok"}}e.session.unfold(s.row),e.selection.moveToPosition(s);var h={row:s.row,fixedWidth:!0,coverGutter:!0,el:r.createElement("div"),type:"errorMarker"},f=h.el.appendChild(r.createElement("div")),p=h.el.appendChild(r.createElement("div"));p.className="error_widget_arrow "+l.className;var g=e.renderer.$cursorLayer.getPixelPosition(s).left;p.style.left=g+e.renderer.gutterWidth-5+"px",h.el.className="error_widget_wrapper",f.className="error_widget "+l.className,f.innerHTML=l.text.join("
"),f.appendChild(r.createElement("div"));var m=function(e,t,n){if(0===t&&("esc"===n||"return"===n))return h.destroy(),{command:"null"}};h.destroy=function(){e.$mouseHandler.isMousePressed||(e.keyBinding.removeKeyboardHandler(m),n.widgetManager.removeLineWidget(h),e.off("changeSelection",h.destroy),e.off("changeSession",h.destroy),e.off("mouseup",h.destroy),e.off("change",h.destroy))},e.keyBinding.addKeyboardHandler(m),e.on("changeSelection",h.destroy),e.on("changeSession",h.destroy),e.on("mouseup",h.destroy),e.on("change",h.destroy),e.session.widgetManager.addLineWidget(h),h.el.onmousedown=e.focus.bind(e),e.renderer.scrollCursorIntoView(null,.5,{bottom:h.el.offsetHeight})},r.importCssString(" .error_widget_wrapper { background: inherit; color: inherit; border:none } .error_widget { border-top: solid 2px; border-bottom: solid 2px; margin: 5px 0; padding: 10px 40px; white-space: pre-wrap; } .error_widget.ace_error, .error_widget_arrow.ace_error{ border-color: #ff5a5a } .error_widget.ace_warning, .error_widget_arrow.ace_warning{ border-color: #F1D817 } .error_widget.ace_info, .error_widget_arrow.ace_info{ border-color: #5a5a5a } .error_widget.ace_ok, .error_widget_arrow.ace_ok{ border-color: #5aaa5a } .error_widget_arrow { position: absolute; border: solid 5px; border-top-color: transparent!important; border-right-color: transparent!important; border-left-color: transparent!important; top: -5px; }","")})),ace.define("ace/ace",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/dom","ace/lib/event","ace/editor","ace/edit_session","ace/undomanager","ace/virtual_renderer","ace/worker/worker_client","ace/keyboard/hash_handler","ace/placeholder","ace/multi_select","ace/mode/folding/fold_mode","ace/theme/textmate","ace/ext/error_marker","ace/config"],(function(e,t,i){"use strict";e("./lib/fixoldbrowsers");var r=e("./lib/dom"),s=e("./lib/event"),o=e("./editor").Editor,a=e("./edit_session").EditSession,c=e("./undomanager").UndoManager,l=e("./virtual_renderer").VirtualRenderer;e("./worker/worker_client"),e("./keyboard/hash_handler"),e("./placeholder"),e("./multi_select"),e("./mode/folding/fold_mode"),e("./theme/textmate"),e("./ext/error_marker"),t.config=e("./config"),t.acequire=e,t.define=n("07d6"),t.edit=function(e){if("string"==typeof e){var n=e;if(e=document.getElementById(n),!e)throw new Error("ace.edit can't find div #"+n)}if(e&&e.env&&e.env.editor instanceof o)return e.env.editor;var i="";if(e&&/input|textarea/i.test(e.tagName)){var a=e;i=a.value,e=r.createElement("pre"),a.parentNode.replaceChild(e,a)}else e&&(i=r.getInnerText(e),e.innerHTML="");var c=t.createEditSession(i),u=new o(new l(e));u.setSession(c);var d={document:c,editor:u,onResize:u.resize.bind(u,null)};return a&&(d.textarea=a),s.addListener(window,"resize",d.onResize),u.on("destroy",(function(){s.removeListener(window,"resize",d.onResize),d.editor.container.env=null})),u.container.env=u.env=d,u},t.createEditSession=function(e,t){var n=new a(e,t);return n.setUndoManager(new c),n},t.EditSession=a,t.UndoManager=c,t.version="1.2.9"})),function(){ace.acequire(["ace/ace"],(function(e){for(var t in e&&(e.config.init(!0),e.define=ace.define),window.ace||(window.ace=e),e)e.hasOwnProperty(t)&&(window.ace[t]=e[t])}))}(),e.exports=window.ace.acequire("ace/ace")},"0687":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"ores"},[n("h3",[e._v("Selected Ores:")]),e._l(e.ore_names,(function(t){return n("div",{key:t},[n("vui-button",{class:{selected:e.selected_ores.includes(t)},attrs:{params:{chosen_ore:t}}},[e._v(e._s(t))])],1)}))],2)},r=[],s={data:function(){return this.$root.$data.state}},o=s,a=(n("3315"),n("2877")),c=Object(a["a"])(o,i,r,!1,null,"5716889f",null);t["default"]=c.exports},"068f":function(e,t,n){"use strict";n("e16d")},"06cf":function(e,t,n){var i=n("83ab"),r=n("d1e7"),s=n("5c6c"),o=n("fc6a"),a=n("c04e"),c=n("5135"),l=n("0cfb"),u=Object.getOwnPropertyDescriptor;t.f=i?u:function(e,t){if(e=o(e),t=a(t,!0),l)try{return u(e,t)}catch(n){}if(c(e,t))return s(!r.f.call(e,t),e[t])}},"07ac":function(e,t,n){var i=n("23e7"),r=n("6f53").values;i({target:"Object",stat:!0},{values:function(e){return r(e)}})},"07c3":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("i",[e._v("Welcome to the NanoTrasen™ computer configuration utility. Please consult your system administrator if you have any questions about your device.")]),n("hr"),n("h2",[e._v("Power Supply")]),n("vui-item",{attrs:{label:"Battery Status:"}},[e.battery?n("span",[e._v("Active")]):n("span",[e._v("Not Available")])]),e.battery?n("vui-item",{attrs:{label:"Battery Rating:"}},[e._v(e._s(e.battery.rating)+" Wh")]):e._e(),e.battery?n("vui-item",{attrs:{label:"Battery Charge:"}},[n("vui-progress",{attrs:{value:e.battery.percent}},[e._v(e._s(e.battery.percent)+"%")])],1):e._e(),n("vui-item",{attrs:{label:"Power Usage:"}},[e._v(e._s(e.power_usage)+" W")]),n("h2",[e._v("File System")]),e.battery?n("vui-item",{attrs:{label:"Used Capacity:"}},[n("vui-progress",{attrs:{value:e.disk_used,min:"0",max:e.disk_size}},[e._v(e._s(e.disk_used)+" GQ / "+e._s(e.disk_size)+" GQ")])],1):e._e(),n("h2",[e._v("Misc. Settings")]),n("vui-item",{attrs:{label:"Registered ID:"}},[n("vui-button",{attrs:{params:{PC_register:1},disabled:!e.card_slot}},[e._v(e._s(e.registered?e.registered:"Unregistered"))])],1),null!==e.brightness?n("vui-item",{attrs:{label:"Brightness:"}},[n("vui-input-slider",{attrs:{min:0,max:10},model:{value:e.brightness,callback:function(t){e.brightness=t},expression:"brightness"}})],1):e._e(),n("h2",[e._v("Computer Components")]),e._l(e.hardware,(function(t,i){return n("div",{key:i},[n("h3",[e._v(e._s(i))]),n("vui-item",{attrs:{label:"State:"}},[t.enabled?n("span",[e._v("Enabled")]):n("span",[e._v("Disabled")])]),t.power_usage>0?n("vui-item",{attrs:{label:"Power Usage:"}},[e._v(e._s(t.power_usage)+" W")]):e._e(),t.critical?e._e():n("vui-item",{attrs:{label:"Toggle Component:"}},[n("vui-button",{attrs:{params:{PC_enable_component:i},disabled:!!t.enabled}},[e._v("ON")]),n("vui-button",{attrs:{params:{PC_disable_component:i},disabled:!t.enabled}},[e._v("OFF")])],1)],1)})),n("i",[e._v("ntOS v2.1.0 -- © NanoTrasen 2457 - 2462")])],2)},r=[],s={data:function(){return this.$root.$data.state}},o=s,a=n("2877"),c=Object(a["a"])(o,i,r,!1,null,null,null);t["default"]=c.exports},"07d6":function(e,t){e.exports=function(){throw new Error("define cannot be used indirect")}},"08c0":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("h2",[e._v("Engine Status:")]),e.is_on?n("div",[e._v(" The engine is currently running. "),n("vui-button",{attrs:{params:{toggle_engine:1}}},[e._v("Stop")])],1):n("div",[e._v(" The engine is off. "),n("vui-button",{attrs:{disabled:!e.has_key||!e.has_cell,params:{toggle_engine:1}}},[e._v("Start")])],1),e.has_key?n("div",[e._v(" There is a key inserted into the ignition. "),n("vui-button",{attrs:{params:{key:1}}},[e._v("Remove Key")])],1):n("div",[e._v(" There is no key in the ignition. ")]),e.has_cell?n("div",[e._v(" Cell Charge: "),n("vui-progress",{attrs:{value:e.cell_charge,max:e.cell_max_charge,min:0}},[e._v(e._s(e.cell_charge)+"J")]),e._v(" "),n("vui-tooltip",{attrs:{label:"?"}},[e._v("The cell can be removed by using a screwdriver to open the maintenance panel, then using a crowbar to shimmy it out.")])],1):n("div",[e._v(" There is no cell installed. "),n("vui-tooltip",{attrs:{label:"?"}},[e._v("The cell can be installed by using a screwdriver to open the maintenance panel, then clicking on the engine with a compatible power cell.")])],1),e.is_towing?n("div",[e._v(" This engine is currently towing the "+e._s(e.tow)+". "),n("vui-button",{attrs:{params:{unlatch:1}}},[e._v("Unlatch")])],1):n("div",[e._v(" This engine isn't towing anything currently. "),n("vui-tooltip",{attrs:{label:"?"}},[e._v("You can latch vehicles together by dragging from the vehicle you want to be the anchor point, to the trolley you wish to latch.")])],1)])},r=[],s={data:function(){return this.$root.$data.state}},o=s,a=n("2877"),c=Object(a["a"])(o,i,r,!1,null,null,null);t["default"]=c.exports},"09cd":function(e,t,n){"use strict";n("bfa1")},"0ac8":function(e,t,n){var i=n("23e7"),r=n("8eb5");i({target:"Math",stat:!0,forced:r!=Math.expm1},{expm1:r})},"0b25":function(e,t,n){var i=n("a691"),r=n("50c4");e.exports=function(e){if(void 0===e)return 0;var t=i(e),n=r(t);if(t!==n)throw RangeError("Wrong length or index");return n}},"0c47":function(e,t,n){var i=n("da84"),r=n("d44e");r(i.JSON,"JSON",!0)},"0ccb":function(e,t,n){var i=n("50c4"),r=n("1148"),s=n("1d80"),o=Math.ceil,a=function(e){return function(t,n,a){var c,l,u=String(s(t)),d=u.length,h=void 0===a?" ":String(a),f=i(n);return f<=d||""==h?u:(c=f-d,l=r.call(h,o(c/h.length)),l.length>c&&(l=l.slice(0,c)),e?u+l:l+u)}};e.exports={start:a(!1),end:a(!0)}},"0cfb":function(e,t,n){var i=n("83ab"),r=n("d039"),s=n("cc12");e.exports=!i&&!r((function(){return 7!=Object.defineProperty(s("div"),"a",{get:function(){return 7}}).a}))},"0d03":function(e,t,n){var i=n("6eeb"),r=Date.prototype,s="Invalid Date",o="toString",a=r[o],c=r.getTime;new Date(NaN)+""!=s&&i(r,o,(function(){var e=c.call(this);return e===e?a.call(this):s}))},"0d3b":function(e,t,n){var i=n("d039"),r=n("b622"),s=n("c430"),o=r("iterator");e.exports=!i((function(){var e=new URL("b?a=1&b=2&c=3","http://a"),t=e.searchParams,n="";return e.pathname="c%20d",t.forEach((function(e,i){t["delete"]("b"),n+=i+e})),s&&!e.toJSON||!t.sort||"http://a/c%20d?a=1&c=3"!==e.href||"3"!==t.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!t[o]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("http://тест").host||"#%D0%B1"!==new URL("http://a#б").hash||"a1c3"!==n||"x"!==new URL("http://x",void 0).host}))},"0ea6":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("input",{directives:[{name:"model",rawName:"v-model",value:e.passcode,expression:"passcode"}],attrs:{placeholder:"Enter passcode...",autofocus:""},domProps:{value:e.passcode},on:{input:function(t){t.target.composing||(e.passcode=t.target.value)}}}),n("vui-button",{attrs:{params:{set_passcode:e.passcode}}},[e._v("Set")]),n("vui-button",{attrs:{params:{lock:1}}},[e._v("Lock")])],1)},r=[],s={data:function(){return this.$root.$data.state}},o=s,a=n("2877"),c=Object(a["a"])(o,i,r,!1,null,null,null);t["default"]=c.exports},"0ec3":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("span",{staticClass:"tooltip label"},[e._t("label",[e._v(e._s(e.label))]),n("div",{staticClass:"tooltip content"},[e._t("default")],2)],2)},r=[],s={props:{label:{type:String,default:""}}},o=s,a=(n("09cd"),n("2877")),c=Object(a["a"])(o,i,r,!1,null,"4ea2a2b3",null);t["default"]=c.exports},"0eec":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("input",{ref:"input",style:{width:e.width},attrs:{type:"range",min:e.min,max:e.max},domProps:{value:e.val},on:{change:function(t){return e.onFieldUpdate(t.target)}}})])},r=[],s=(n("a9e3"),n("8a79"),n("c0d6")),o={props:{value:{type:Number,default:0},min:{type:Number,default:0},max:{type:Number,default:100},pushState:{type:Boolean,default:!0},width:{type:String,default:"10em"},decimalPlaces:{type:Number,default:0}},data:function(){return{val:this.value}},methods:{onFieldUpdate:function(e){var t=this.val,n=Number(e.value);isNaN(n)&&(n=this.val),console.log(n,e.value,this.value,this.val),this.UpdateValue(n),t!=this.val||e.value.endsWith(".")||(this.$refs.input.value=this.val)},onUpdatedValue:function(e){var t=this.value;e&&(t+=e),this.UpdateValue(t)},UpdateValue:function(e){e=+(Math.round(e+"e+"+this.decimalPlaces)+"e-"+this.decimalPlaces),e>this.max&&(e=this.max),e0;(s>>>=1)&&(t+=t))1&s&&(n+=t);return n}},"11f5":function(e,t,n){"use strict";n("5d50")},1253:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"displayBar"},[n("div",{staticClass:"displayBarFill",style:{width:e.percentage+"%"}},[n("span",[e._t("default")],2)])])},r=[],s=(n("a9e3"),{props:{value:{type:Number,default:50},max:{type:Number,default:100},min:{type:Number,default:0}},computed:{percentage:function(){return(Math.min(this.max,Math.max(this.value,this.min))-this.min)/(this.max-this.min)*100}}}),o=s,a=(n("d115"),n("2877")),c=Object(a["a"])(o,i,r,!1,null,"2a4ee906",null);t["default"]=c.exports},"126d":function(e,t,n){var i=n("6da8"),r=n("aaec"),s=n("d094");function o(e){return r(e)?s(e):i(e)}e.exports=o},1276:function(e,t,n){"use strict";var i=n("d784"),r=n("44e7"),s=n("825a"),o=n("1d80"),a=n("4840"),c=n("8aa5"),l=n("50c4"),u=n("14c3"),d=n("9263"),h=n("d039"),f=[].push,p=Math.min,g=4294967295,m=!h((function(){return!RegExp(g,"y")}));i("split",2,(function(e,t,n){var i;return i="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(e,n){var i=String(o(this)),s=void 0===n?g:n>>>0;if(0===s)return[];if(void 0===e)return[i];if(!r(e))return t.call(i,e,s);var a,c,l,u=[],h=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),p=0,m=new RegExp(e.source,h+"g");while(a=d.call(m,i)){if(c=m.lastIndex,c>p&&(u.push(i.slice(p,a.index)),a.length>1&&a.index=s))break;m.lastIndex===a.index&&m.lastIndex++}return p===i.length?!l&&m.test("")||u.push(""):u.push(i.slice(p)),u.length>s?u.slice(0,s):u}:"0".split(void 0,0).length?function(e,n){return void 0===e&&0===n?[]:t.call(this,e,n)}:t,[function(t,n){var r=o(this),s=void 0==t?void 0:t[e];return void 0!==s?s.call(t,r,n):i.call(String(r),t,n)},function(e,r){var o=n(i,e,this,r,i!==t);if(o.done)return o.value;var d=s(e),h=String(this),f=a(d,RegExp),v=d.unicode,b=(d.ignoreCase?"i":"")+(d.multiline?"m":"")+(d.unicode?"u":"")+(m?"y":"g"),y=new f(m?d:"^(?:"+d.source+")",b),w=void 0===r?g:r>>>0;if(0===w)return[];if(0===h.length)return null===u(y,h)?[h]:[];var _=0,x=0,k=[];while(xe.length)&&(t=e.length);for(var n=0,i=new Array(t);n79&&a<83;i({target:"Array",proto:!0,forced:!l||!u||d},{reduce:function(e){return r(this,e,arguments.length,arguments.length>1?arguments[1]:void 0)}})},"143c":function(e,t,n){var i=n("74e8");i("Int32",(function(e){return function(t,n,i){return e(this,t,n,i)}}))},"145e":function(e,t,n){"use strict";var i=n("7b0b"),r=n("23cb"),s=n("50c4"),o=Math.min;e.exports=[].copyWithin||function(e,t){var n=i(this),a=s(n.length),c=r(e,a),l=r(t,a),u=arguments.length>2?arguments[2]:void 0,d=o((void 0===u?a:r(u,a))-l,a-c),h=1;l0)l in n?n[c]=n[l]:delete n[c],c+=h,l+=h;return n}},"14c3":function(e,t,n){var i=n("c6b6"),r=n("9263");e.exports=function(e,t){var n=e.exec;if("function"===typeof n){var s=n.call(e,t);if("object"!==typeof s)throw TypeError("RegExp exec method returned something other than an Object or null");return s}if("RegExp"!==i(e))throw TypeError("RegExp#exec called on incompatible receiver");return r.call(e,t)}},"14d4":function(e,t){ace.define("ace/theme/monokai",["require","exports","module","ace/lib/dom"],(function(e,t,n){t.isDark=!0,t.cssClass="ace-monokai",t.cssText=".ace-monokai .ace_gutter {background: #2F3129;color: #8F908A}.ace-monokai .ace_print-margin {width: 1px;background: #555651}.ace-monokai {background-color: #272822;color: #F8F8F2}.ace-monokai .ace_cursor {color: #F8F8F0}.ace-monokai .ace_marker-layer .ace_selection {background: #49483E}.ace-monokai.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #272822;}.ace-monokai .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-monokai .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #49483E}.ace-monokai .ace_marker-layer .ace_active-line {background: #202020}.ace-monokai .ace_gutter-active-line {background-color: #272727}.ace-monokai .ace_marker-layer .ace_selected-word {border: 1px solid #49483E}.ace-monokai .ace_invisible {color: #52524d}.ace-monokai .ace_entity.ace_name.ace_tag,.ace-monokai .ace_keyword,.ace-monokai .ace_meta.ace_tag,.ace-monokai .ace_storage {color: #F92672}.ace-monokai .ace_punctuation,.ace-monokai .ace_punctuation.ace_tag {color: #fff}.ace-monokai .ace_constant.ace_character,.ace-monokai .ace_constant.ace_language,.ace-monokai .ace_constant.ace_numeric,.ace-monokai .ace_constant.ace_other {color: #AE81FF}.ace-monokai .ace_invalid {color: #F8F8F0;background-color: #F92672}.ace-monokai .ace_invalid.ace_deprecated {color: #F8F8F0;background-color: #AE81FF}.ace-monokai .ace_support.ace_constant,.ace-monokai .ace_support.ace_function {color: #66D9EF}.ace-monokai .ace_fold {background-color: #A6E22E;border-color: #F8F8F2}.ace-monokai .ace_storage.ace_type,.ace-monokai .ace_support.ace_class,.ace-monokai .ace_support.ace_type {font-style: italic;color: #66D9EF}.ace-monokai .ace_entity.ace_name.ace_function,.ace-monokai .ace_entity.ace_other,.ace-monokai .ace_entity.ace_other.ace_attribute-name,.ace-monokai .ace_variable {color: #A6E22E}.ace-monokai .ace_variable.ace_parameter {font-style: italic;color: #FD971F}.ace-monokai .ace_string {color: #E6DB74}.ace-monokai .ace_comment {color: #75715E}.ace-monokai .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ0FD0ZXBzd/wPAAjVAoxeSgNeAAAAAElFTkSuQmCC) right repeat-y}";var i=e("../lib/dom");i.importCssString(t.cssText,t.cssClass)}))},1503:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("div",{directives:[{name:"show",rawName:"v-show",value:!e.spawnpoint,expression:"!spawnpoint"}],staticClass:"tagselector"},e._l(e.tags,(function(t,i){return n("vui-button",{key:i,class:{selected:e.current_tag==i},on:{click:function(t){e.current_tag=i}}},[e._v(e._s(i)+" ("+e._s(t)+")")])})),1),n("hr",{directives:[{name:"show",rawName:"v-show",value:!e.spawnpoint,expression:"!spawnpoint"}]}),n("table",[e._m(0),e._l(e.spawners,(function(t,i){return n("tr",{directives:[{name:"show",rawName:"v-show",value:e.showEntry(t),expression:"showEntry(data)"}],key:i},[n("td",[e._v(e._s(t.name))]),n("td",[e._v(e._s(t.desc))]),t.max_count>0?n("td",[e._v(e._s(t.max_count-t.count)+" / "+e._s(t.max_count))]):t.spawnatoms>0?n("td",[e._v(e._s(t.spawnatoms))]):n("td",[e._v("∞")]),n("td",{staticClass:"action"},[n("vui-button",{attrs:{disabled:0!==t.cant_spawn,params:{spawn:i,spawnpoint:e.spawnpoint},icon:"star"}},[e._v("Spawn")]),1==t.can_edit?n("vui-button",{attrs:{disabled:1==t.enabled,params:{enable:i}}},[e._v("Enable")]):e._e(),1==t.can_edit?n("vui-button",{attrs:{disabled:0==t.enabled,params:{disable:i}}},[e._v("Disable")]):e._e()],1)])}))],2)])},r=[function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("tr",[n("th",[e._v("Name")]),n("th",[e._v("Description")]),n("th",[e._v("Available Slots")]),n("th",{staticClass:"action"},[e._v("Actions")])])}],s=(n("4de4"),n("5db7"),n("4160"),n("c975"),n("73d9"),n("07ac"),n("159b"),{data:function(){return this.$root.$data.state},computed:{tags:function(){var e=Object.values(this.spawners).flatMap((function(e){return e.tags})),t={All:Object.values(this.spawners).length};return e.filter((function(e,t,n){return n.indexOf(e)===t})).forEach((function(n){t[n]=e.filter((function(e){return e==n})).length})),t}},methods:{showEntry:function(e){return this.spawnpoint?!!Object.prototype.hasOwnProperty.apply(e,["spawnpoints"])&&(e.spawnpoints&&!e.spawnpoints.indexOf(this.spawnpoint)):!e.tags.indexOf(this.current_tag)||"All"==this.current_tag}}}),o=s,a=(n("068f"),n("2877")),c=Object(a["a"])(o,i,r,!1,null,"70766bea",null);t["default"]=c.exports},"159b":function(e,t,n){var i=n("da84"),r=n("fdbc"),s=n("17c2"),o=n("9112");for(var a in r){var c=i[a],l=c&&c.prototype;if(l&&l.forEach!==s)try{o(l,"forEach",s)}catch(u){l.forEach=s}}},1650:function(e,t,n){},"16ae":function(e,t,n){"use strict";n("f415")},"170b":function(e,t,n){"use strict";var i=n("ebb5"),r=n("50c4"),s=n("23cb"),o=n("4840"),a=i.aTypedArray,c=i.exportTypedArrayMethod;c("subarray",(function(e,t){var n=a(this),i=n.length,c=s(e,i);return new(o(n,n.constructor))(n.buffer,n.byteOffset+c*n.BYTES_PER_ELEMENT,r((void 0===t?i:s(t,i))-c))}))},1715:function(e,t,n){n("159b"),n("ddb0"),n("130f"),n("9f96"),n("4795"),n("2b3d"),n("bf19"),n("9861");var i=n("428f");e.exports=i},"17c2":function(e,t,n){"use strict";var i=n("b727").forEach,r=n("a640"),s=n("ae40"),o=r("forEach"),a=s("forEach");e.exports=o&&a?[].forEach:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}},"182d":function(e,t,n){var i=n("f8cd");e.exports=function(e,t){var n=i(e);if(n%t)throw RangeError("Wrong offset");return n}},"18a5":function(e,t,n){"use strict";var i=n("23e7"),r=n("857a"),s=n("af03");i({target:"String",proto:!0,forced:s("anchor")},{anchor:function(e){return r(this,"a","name",e)}})},1913:function(e,t,n){"use strict";var i=n("23e7"),r=n("857a"),s=n("af03");i({target:"String",proto:!0,forced:s("fontsize")},{fontsize:function(e){return r(this,"font","size",e)}})},"197b":function(e,t,n){var i=n("746f");i("species")},"19aa":function(e,t){e.exports=function(e,t,n){if(!(e instanceof t))throw TypeError("Incorrect "+(n?n+" ":"")+"invocation");return e}},"19fa":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("div",[n("vui-button",{staticClass:"fixedLeft",attrs:{icon:"cog",params:{close:1}}},[e._v("Close")])],1),n("div",[n("h2",[e._v("Storage")]),e.secure?n("span",{staticClass:"notice"},[e._v(" "+e._s(-1==e.locked?"Sec.re ACC_** //):securi_nt.diag=>##'or 1=1'%($...":"Secure Access: Please have your identification ready.")+" ")]):e._e()]),e.contents?e._l(e.contents,(function(t){return n("div",{key:t.vend},[n("div",[n("span",{staticClass:"highlight"},[e._v(e._s(t.display_name)+" ("+e._s(t.quantity)+" available)")])]),n("div",{staticStyle:{float:"left"}},[e._v("Vend: ")]),n("vui-button",{staticClass:"statusValue",attrs:{params:{vendItem:t.vend,amount:1},icon:"arrow-alt-circle-down"}},[e._v("x1")]),t.quantity>=5?n("vui-button",{staticClass:"statusValue",attrs:{params:{vendItem:t.vend,amount:5},icon:"arrow-alt-circle-down"}},[e._v("x5")]):e._e(),t.quantity>=10?n("vui-button",{staticClass:"statusValue",attrs:{params:{vendItem:t.vend,amount:10},icon:"arrow-alt-circle-down"}},[e._v("x10")]):e._e(),t.quantity>=25?n("vui-button",{staticClass:"statusValue",attrs:{params:{vendItem:t.vend,amount:25},icon:"arrow-alt-circle-down"}},[e._v("x25")]):e._e(),t.quantity>1?n("vui-button",{staticClass:"statusValue",attrs:{params:{vendItem:t.vend,amount:t.quantity},icon:"arrow-alt-circle-down"}},[e._v("All")]):e._e()],1)})):n("div",{staticClass:"average"},[e._v(" No products loaded. ")])],2)},r=[],s={data:function(){return this.$root.$data.state}},o=s,a=n("2877"),c=Object(a["a"])(o,i,r,!1,null,null,null);t["default"]=c.exports},"1be4":function(e,t,n){var i=n("d066");e.exports=i("document","documentElement")},"1bf2":function(e,t,n){var i=n("23e7"),r=n("56ef");i({target:"Reflect",stat:!0},{ownKeys:r})},"1c0b":function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(String(e)+" is not a function");return e}},"1c7e":function(e,t,n){var i=n("b622"),r=i("iterator"),s=!1;try{var o=0,a={next:function(){return{done:!!o++}},return:function(){s=!0}};a[r]=function(){return this},Array.from(a,(function(){throw 2}))}catch(c){}e.exports=function(e,t){if(!t&&!s)return!1;var n=!1;try{var i={};i[r]=function(){return{next:function(){return{done:n=!0}}}},e(i)}catch(c){}return n}},"1cdc":function(e,t,n){var i=n("342f");e.exports=/(iphone|ipod|ipad).*applewebkit/i.test(i)},"1d1c":function(e,t,n){var i=n("23e7"),r=n("83ab"),s=n("37e8");i({target:"Object",stat:!0,forced:!r,sham:!r},{defineProperties:s})},"1d73":function(e,t,n){},"1d80":function(e,t){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},"1dbb":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[null==e.password?n("vui-button",{on:{click:e.join}},[e._v(e._s(e.ch.title))]):[n("input",{directives:[{name:"model",rawName:"v-model",value:e.password,expression:"password"}],attrs:{type:"text"},domProps:{value:e.password},on:{keydown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.join_with(t)},input:function(t){t.target.composing||(e.password=t.target.value)}}}),n("vui-button",{attrs:{params:{join:{target:e.re,password:e.password}}}},[e._v("Join "+e._s(e.ch.title))])]],2)},r=[],s=n("025e"),o={data:function(){return{password:null}},methods:{join:function(){this.ch.password?this.password="":Object(s["b"])({join:{target:this.re}})},join_with:function(){Object(s["b"])({join:{target:this.re,password:this.password}})}},props:{ch:{type:Object,default:function(){return{}}},re:{type:String,default:""}}},a=o,c=n("2877"),l=Object(c["a"])(a,i,r,!1,null,null,null);t["default"]=l.exports},"1dde":function(e,t,n){var i=n("d039"),r=n("b622"),s=n("2d00"),o=r("species");e.exports=function(e){return s>=51||!i((function(){var t=[],n=t.constructor={};return n[o]=function(){return{foo:1}},1!==t[e](Boolean).foo}))}},"1e25":function(e,t,n){"use strict";var i=n("23e7"),r=n("58a8").end,s=n("c8d2"),o=s("trimEnd"),a=o?function(){return r(this)}:"".trimEnd;i({target:"String",proto:!0,forced:o},{trimEnd:a,trimRight:a})},"1ec1":function(e,t){var n=Math.log;e.exports=Math.log1p||function(e){return(e=+e)>-1e-8&&e<1e-8?e-e*e/2:n(1+e)}},"1ee6":function(e,t,n){},"1fb5":function(e,t,n){"use strict";n("7da4")},"1fe2":function(e,t,n){"use strict";var i=n("6d61"),r=n("acac");i("WeakSet",(function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}}),r)},"203b":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.active?n("div",[n("view-records-general",{attrs:{"hide-advanced":""}},[n("vui-group-item",{attrs:{label:"Blood type:"}},[n("view-records-field",{attrs:{editable:(2&e.editable)>0,path:"active.medical.blood_type"}},[n("select",{directives:[{name:"model",rawName:"v-model",value:e.$root.$data.state.editingvalue,expression:"$root.$data.state.editingvalue"}],on:{change:function(t){var n=Array.prototype.filter.call(t.target.options,(function(e){return e.selected})).map((function(e){var t="_value"in e?e._value:e.value;return t}));e.$set(e.$root.$data.state,"editingvalue",t.target.multiple?n:n[0])}}},e._l(e.choices.medical.blood_type,(function(t){return n("option",{key:t,domProps:{value:t}},[e._v(e._s(t))])})),0)])],1),n("vui-group-item",{attrs:{label:"DNA:"}},[n("view-records-field",{attrs:{editable:(2&e.editable)>0,path:"active.medical.blood_dna"}})],1),n("vui-group-item",{attrs:{label:"Disabilities:"}},[n("view-records-field",{attrs:{editable:(2&e.editable)>0,path:"active.medical.disabilities"}},[n("textarea",{directives:[{name:"model",rawName:"v-model",value:e.$root.$data.state.editingvalue,expression:"$root.$data.state.editingvalue"}],domProps:{value:e.$root.$data.state.editingvalue},on:{input:function(t){t.target.composing||e.$set(e.$root.$data.state,"editingvalue",t.target.value)}}})])],1),n("vui-group-item",{attrs:{label:"Allergies:"}},[n("view-records-field",{attrs:{editable:(2&e.editable)>0,path:"active.medical.allergies"}},[n("textarea",{directives:[{name:"model",rawName:"v-model",value:e.$root.$data.state.editingvalue,expression:"$root.$data.state.editingvalue"}],domProps:{value:e.$root.$data.state.editingvalue},on:{input:function(t){t.target.composing||e.$set(e.$root.$data.state,"editingvalue",t.target.value)}}})])],1),n("vui-group-item",{attrs:{label:"Diseases:"}},[n("view-records-field",{attrs:{editable:(2&e.editable)>0,path:"active.medical.diseases"}},[n("textarea",{directives:[{name:"model",rawName:"v-model",value:e.$root.$data.state.editingvalue,expression:"$root.$data.state.editingvalue"}],domProps:{value:e.$root.$data.state.editingvalue},on:{input:function(t){t.target.composing||e.$set(e.$root.$data.state,"editingvalue",t.target.value)}}})])],1),n("vui-group-item",{attrs:{label:"Comments:"}},[e._l(e.active.medical.comments,(function(t){return n("div",{key:t},[e._v(e._s(t)+" "),(2&e.editable)>0?n("vui-button",{staticClass:"danger",attrs:{params:{removefromrecord:{value:t,key:["active","medical","comments"]}},icon:"trash-alt"}}):e._e()],1)})),0==e.active.medical.comments.length?n("div",[e._v("There are no comments.")]):e._e(),(2&e.editable)>0?n("view-records-field",{attrs:{"edit-button":"Add"},on:{save:function(t){return e.add("active.medical.comments",t)}}}):e._e()],2),n("vui-group-item",{attrs:{label:"Notes:"}},[n("view-records-field",{attrs:{editable:(2&e.editable)>0,path:"active.medical.notes"}},[n("textarea",{directives:[{name:"model",rawName:"v-model",value:e.$root.$data.state.editingvalue,expression:"$root.$data.state.editingvalue"}],domProps:{value:e.$root.$data.state.editingvalue},on:{input:function(t){t.target.composing||e.$set(e.$root.$data.state,"editingvalue",t.target.value)}}})])],1)],1)],1):e._e()},r=[],s=(n("ac1f"),n("1276"),n("025e")),o={data:function(){return this.$root.$data.state},methods:{add:function(e,t){s["a"].sendToTopic({addtorecord:{value:t,key:e.split(".")}})}}},a=o,c=n("2877"),l=Object(c["a"])(a,i,r,!1,null,null,null);t["default"]=l.exports},"207c":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("vui-group",[n("vui-group-item",{attrs:{label:"Microphone:"}},[n("vui-button",{class:{selected:e.listening},attrs:{params:{talk:1,nowindow:1}}},[e._v("On")]),n("vui-button",{class:{selected:!e.listening},attrs:{params:{talk:1,nowindow:1}}},[e._v("Off")])],1),n("vui-group-item",{attrs:{label:"Frequency:"}},[n("vui-button",{attrs:{params:{freq:-10,nowindow:1}}},[e._v("--")]),n("vui-button",{attrs:{params:{freq:-2,nowindow:1}}},[e._v("-")]),n("span",[e._v(e._s(e.frequency))]),n("vui-button",{attrs:{params:{freq:2,nowindow:1}}},[e._v("+")]),n("vui-button",{attrs:{params:{freq:10,nowindow:1}}},[e._v("++")])],1),n("vui-item",{attrs:{label:"Range:"}},[n("vui-input-slider",{attrs:{min:0,max:4},model:{value:e.radio_range,callback:function(t){e.radio_range=t},expression:"radio_range"}})],1),n("hr"),e._l(e.channels,(function(t){return n("vui-group-item",{key:t.name,attrs:{label:t.name}},[n("vui-button",{class:{selected:t.listening},attrs:{params:{ch_name:t.name,listen:1,nowindow:1}}},[e._v("On")]),n("vui-button",{class:{selected:!t.listening},attrs:{params:{ch_name:t.name,listen:1,nowindow:1}}},[e._v("Off")])],1)}))],2)],1)},r=[],s={data:function(){return this.$root.$data.state}},o=s,a=n("2877"),c=Object(a["a"])(o,i,r,!1,null,null,null);t["default"]=c.exports},2099:function(e,t){ace.define("ace/snippets",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/lib/lang","ace/range","ace/anchor","ace/keyboard/hash_handler","ace/tokenizer","ace/lib/dom","ace/editor"],(function(e,t,n){"use strict";var i=e("./lib/oop"),r=e("./lib/event_emitter").EventEmitter,s=e("./lib/lang"),o=e("./range").Range,a=e("./anchor").Anchor,c=e("./keyboard/hash_handler").HashHandler,l=e("./tokenizer").Tokenizer,u=o.comparePoints,d=function(){this.snippetMap={},this.snippetNameMap={}};(function(){i.implement(this,r),this.getTokenizer=function(){function e(e,t,n){return e=e.substr(1),/^\d+$/.test(e)&&!n.inFormatString?[{tabstopId:parseInt(e,10)}]:[{text:e}]}function t(e){return"(?:[^\\\\"+e+"]|\\\\.)"}return d.$tokenizer=new l({start:[{regex:/:/,onMatch:function(e,t,n){return n.length&&n[0].expectIf?(n[0].expectIf=!1,n[0].elseBranch=n[0],[n[0]]):":"}},{regex:/\\./,onMatch:function(e,t,n){var i=e[1];return"}"==i&&n.length||-1!="`$\\".indexOf(i)?e=i:n.inFormatString&&("n"==i||"t"==i?e="\n":-1!="ulULE".indexOf(i)&&(e={changeCase:i,local:i>"a"})),[e]}},{regex:/}/,onMatch:function(e,t,n){return[n.length?n.shift():e]}},{regex:/\$(?:\d+|\w+)/,onMatch:e},{regex:/\$\{[\dA-Z_a-z]+/,onMatch:function(t,n,i){var r=e(t.substr(1),n,i);return i.unshift(r[0]),r},next:"snippetVar"},{regex:/\n/,token:"newline",merge:!1}],snippetVar:[{regex:"\\|"+t("\\|")+"*\\|",onMatch:function(e,t,n){n[0].choices=e.slice(1,-1).split(",")},next:"start"},{regex:"/("+t("/")+"+)/(?:("+t("/")+"*)/)(\\w*):?",onMatch:function(e,t,n){var i=n[0];return i.fmtString=e,e=this.splitRegex.exec(e),i.guard=e[1],i.fmt=e[2],i.flag=e[3],""},next:"start"},{regex:"`"+t("`")+"*`",onMatch:function(e,t,n){return n[0].code=e.splice(1,-1),""},next:"start"},{regex:"\\?",onMatch:function(e,t,n){n[0]&&(n[0].expectIf=!0)},next:"start"},{regex:"([^:}\\\\]|\\\\.)*:?",token:"",next:"start"}],formatString:[{regex:"/("+t("/")+"+)/",token:"regex"},{regex:"",onMatch:function(e,t,n){n.inFormatString=!0},next:"start"}]}),d.prototype.getTokenizer=function(){return d.$tokenizer},d.$tokenizer},this.tokenizeTmSnippet=function(e,t){return this.getTokenizer().getLineTokens(e,t).tokens.map((function(e){return e.value||e}))},this.$getDefaultValue=function(e,t){if(/^[A-Z]\d+$/.test(t)){var n=t.substr(1);return(this.variables[t[0]+"__"]||{})[n]}if(/^\d+$/.test(t))return(this.variables.__||{})[t];if(t=t.replace(/^TM_/,""),e){var i=e.session;switch(t){case"CURRENT_WORD":var r=i.getWordRange();case"SELECTION":case"SELECTED_TEXT":return i.getTextRange(r);case"CURRENT_LINE":return i.getLine(e.getCursorPosition().row);case"PREV_LINE":return i.getLine(e.getCursorPosition().row-1);case"LINE_INDEX":return e.getCursorPosition().column;case"LINE_NUMBER":return e.getCursorPosition().row+1;case"SOFT_TABS":return i.getUseSoftTabs()?"YES":"NO";case"TAB_SIZE":return i.getTabSize();case"FILENAME":case"FILEPATH":return"";case"FULLNAME":return"Ace"}}},this.variables={},this.getVariableValue=function(e,t){return this.variables.hasOwnProperty(t)?this.variables[t](e,t)||"":this.$getDefaultValue(e,t)||""},this.tmStrFormat=function(e,t,n){var i=t.flag||"",r=t.guard;r=new RegExp(r,i.replace(/[^gi]/,""));var s=this.tokenizeTmSnippet(t.fmt,"formatString"),o=this,a=e.replace(r,(function(){o.variables.__=arguments;for(var e=o.resolveVariables(s,n),t="E",i=0;i1?(b=t[t.length-1].length,v+=t.length-1):b+=e.length,y+=e}else e.start?e.end={row:v,column:b}:e.start={row:v,column:b}}));var w=e.getSelectionRange(),_=e.session.replace(w,y),x=new h(e),k=e.inVirtualSelectionMode&&e.selection.index;x.addTabstops(a,w.start,_,k)},this.insertSnippet=function(e,t){var n=this;if(e.inVirtualSelectionMode)return n.insertSnippetForSelection(e,t);e.forEachSelection((function(){n.insertSnippetForSelection(e,t)}),null,{keepOrder:!0}),e.tabstopManager&&e.tabstopManager.tabNext()},this.$getScope=function(e){var t=e.session.$mode.$id||"";if(t=t.split("/").pop(),"html"===t||"php"===t){"php"!==t||e.session.$mode.inlinePhp||(t="html");var n=e.getCursorPosition(),i=e.session.getState(n.row);"object"===typeof i&&(i=i[0]),i.substring&&("js-"==i.substring(0,3)?t="javascript":"css-"==i.substring(0,4)?t="css":"php-"==i.substring(0,4)&&(t="php"))}return t},this.getActiveScopes=function(e){var t=this.$getScope(e),n=[t],i=this.snippetMap;return i[t]&&i[t].includeScopes&&n.push.apply(n,i[t].includeScopes),n.push("_"),n},this.expandWithTab=function(e,t){var n=this,i=e.forEachSelection((function(){return n.expandSnippetForSelection(e,t)}),null,{keepOrder:!0});return i&&e.tabstopManager&&e.tabstopManager.tabNext(),i},this.expandSnippetForSelection=function(e,t){var n,i=e.getCursorPosition(),r=e.session.getLine(i.row),s=r.substring(0,i.column),o=r.substr(i.column),a=this.snippetMap;return this.getActiveScopes(e).some((function(e){var t=a[e];return t&&(n=this.findMatchingSnippet(t,s,o)),!!n}),this),!!n&&(t&&t.dryRun||(e.session.doc.removeInLine(i.row,i.column-n.replaceBefore.length,i.column+n.replaceAfter.length),this.variables.M__=n.matchBefore,this.variables.T__=n.matchAfter,this.insertSnippetForSelection(e,n.content),this.variables.M__=this.variables.T__=null),!0)},this.findMatchingSnippet=function(e,t,n){for(var i=e.length;i--;){var r=e[i];if((!r.startRe||r.startRe.test(t))&&((!r.endRe||r.endRe.test(n))&&(r.startRe||r.endRe)))return r.matchBefore=r.startRe?r.startRe.exec(t):[""],r.matchAfter=r.endRe?r.endRe.exec(n):[""],r.replaceBefore=r.triggerRe?r.triggerRe.exec(t)[0]:"",r.replaceAfter=r.endTriggerRe?r.endTriggerRe.exec(n)[0]:"",r}},this.snippetMap={},this.snippetNameMap={},this.register=function(e,t){var n=this.snippetMap,i=this.snippetNameMap,r=this;function o(e){return e&&!/^\^?\(.*\)\$?$|^\\b$/.test(e)&&(e="(?:"+e+")"),e||""}function a(e,t,n){return e=o(e),t=o(t),n?(e=t+e,e&&"$"!=e[e.length-1]&&(e+="$")):(e+=t,e&&"^"!=e[0]&&(e="^"+e)),new RegExp(e)}function c(e){e.scope||(e.scope=t||"_"),t=e.scope,n[t]||(n[t]=[],i[t]={});var o=i[t];if(e.name){var c=o[e.name];c&&r.unregister(c),o[e.name]=e}n[t].push(e),e.tabTrigger&&!e.trigger&&(!e.guard&&/^\w/.test(e.tabTrigger)&&(e.guard="\\b"),e.trigger=s.escapeRegExp(e.tabTrigger)),(e.trigger||e.guard||e.endTrigger||e.endGuard)&&(e.startRe=a(e.trigger,e.guard,!0),e.triggerRe=new RegExp(e.trigger,"",!0),e.endRe=a(e.endTrigger,e.endGuard,!0),e.endTriggerRe=new RegExp(e.endTrigger,"",!0))}e||(e=[]),e&&e.content?c(e):Array.isArray(e)&&e.forEach(c),this._signal("registerSnippets",{scope:t})},this.unregister=function(e,t){var n=this.snippetMap,i=this.snippetNameMap;function r(e){var r=i[e.scope||t];if(r&&r[e.name]){delete r[e.name];var s=n[e.scope||t],o=s&&s.indexOf(e);o>=0&&s.splice(o,1)}}e.content?r(e):Array.isArray(e)&&e.forEach(r)},this.parseSnippetFile=function(e){e=e.replace(/\r/g,"");var t,n=[],i={},r=/^#.*|^({[\s\S]*})\s*$|^(\S+) (.*)$|^((?:\n*\t.*)+)/gm;while(t=r.exec(e)){if(t[1])try{i=JSON.parse(t[1]),n.push(i)}catch(c){}if(t[4])i.content=t[4].replace(/^\t/gm,""),n.push(i),i={};else{var s=t[2],o=t[3];if("regex"==s){var a=/\/((?:[^\/\\]|\\.)*)|$/g;i.guard=a.exec(o)[1],i.trigger=a.exec(o)[1],i.endTrigger=a.exec(o)[1],i.endGuard=a.exec(o)[1]}else"snippet"==s?(i.tabTrigger=o.match(/^\S*/)[0],i.name||(i.name=o)):i[s]=o}}return n},this.getSnippetByName=function(e,t){var n,i=this.snippetNameMap;return this.getActiveScopes(t).some((function(t){var r=i[t];return r&&(n=r[e]),!!n}),this),n}}).call(d.prototype);var h=function(e){if(e.tabstopManager)return e.tabstopManager;e.tabstopManager=this,this.$onChange=this.onChange.bind(this),this.$onChangeSelection=s.delayedCall(this.onChangeSelection.bind(this)).schedule,this.$onChangeSession=this.onChangeSession.bind(this),this.$onAfterExec=this.onAfterExec.bind(this),this.attach(e)};(function(){this.attach=function(e){this.index=0,this.ranges=[],this.tabstops=[],this.$openTabstops=null,this.selectedTabstop=null,this.editor=e,this.editor.on("change",this.$onChange),this.editor.on("changeSelection",this.$onChangeSelection),this.editor.on("changeSession",this.$onChangeSession),this.editor.commands.on("afterExec",this.$onAfterExec),this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler)},this.detach=function(){this.tabstops.forEach(this.removeTabstopMarkers,this),this.ranges=null,this.tabstops=null,this.selectedTabstop=null,this.editor.removeListener("change",this.$onChange),this.editor.removeListener("changeSelection",this.$onChangeSelection),this.editor.removeListener("changeSession",this.$onChangeSession),this.editor.commands.removeListener("afterExec",this.$onAfterExec),this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler),this.editor.tabstopManager=null,this.editor=null},this.onChange=function(e){var t="r"==e.action[0],n=e.start,i=e.end,r=n.row,s=i.row,o=s-r,a=i.column-n.column;if(t&&(o=-o,a=-a),!this.$inChange&&t){var c=this.selectedTabstop,l=c&&!c.some((function(e){return u(e.start,n)<=0&&u(e.end,i)>=0}));if(l)return this.detach()}for(var d=this.ranges,h=0;h0?(this.removeRange(f),h--):(f.start.row==r&&f.start.column>n.column&&(f.start.column+=a),f.end.row==r&&f.end.column>=n.column&&(f.end.column+=a),f.start.row>=r&&(f.start.row+=o),f.end.row>=r&&(f.end.row+=o),u(f.start,f.end)>0&&this.removeRange(f)))}d.length||this.detach()},this.updateLinkedFields=function(){var e=this.selectedTabstop;if(e&&e.hasLinkedRanges){this.$inChange=!0;for(var n=this.editor.session,i=n.getTextRange(e.firstNonLinked),r=e.length;r--;){var s=e[r];if(s.linked){var o=t.snippetManager.tmStrFormat(i,s.original);n.replace(s,o)}}this.$inChange=!1}},this.onAfterExec=function(e){e.command&&!e.command.readOnly&&this.updateLinkedFields()},this.onChangeSelection=function(){if(this.editor){for(var e=this.editor.selection.lead,t=this.editor.selection.anchor,n=this.editor.selection.isEmpty(),i=this.ranges.length;i--;)if(!this.ranges[i].linked){var r=this.ranges[i].contains(e.row,e.column),s=n||this.ranges[i].contains(t.row,t.column);if(r&&s)return}this.detach()}},this.onChangeSession=function(){this.detach()},this.tabNext=function(e){var t=this.tabstops.length,n=this.index+(e||1);n=Math.min(Math.max(n,1),t),n==t&&(n=0),this.selectTabstop(n),0===n&&this.detach()},this.selectTabstop=function(e){this.$openTabstops=null;var t=this.tabstops[this.index];if(t&&this.addTabstopMarkers(t),this.index=e,t=this.tabstops[this.index],t&&t.length){if(this.selectedTabstop=t,this.editor.inVirtualSelectionMode)this.editor.selection.setRange(t.firstNonLinked);else{var n=this.editor.multiSelect;n.toSingleRange(t.firstNonLinked.clone());for(var i=t.length;i--;)t.hasLinkedRanges&&t[i].linked||n.addRange(t[i].clone(),!0);n.ranges[0]&&n.addRange(n.ranges[0].clone())}this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler)}},this.addTabstops=function(e,t,n){if(this.$openTabstops||(this.$openTabstops=[]),!e[0]){var i=o.fromPoints(n,n);g(i.start,t),g(i.end,t),e[0]=[i],e[0].index=0}var r=this.index,s=[r+1,0],a=this.ranges;e.forEach((function(e,n){for(var i=this.$openTabstops[n]||e,r=e.length;r--;){var c=e[r],l=o.fromPoints(c.start,c.end||c.start);p(l.start,t),p(l.end,t),l.original=c,l.tabstop=i,a.push(l),i!=e?i.unshift(l):i[r]=l,c.fmtString?(l.linked=!0,i.hasLinkedRanges=!0):i.firstNonLinked||(i.firstNonLinked=l)}i.firstNonLinked||(i.hasLinkedRanges=!1),i===e&&(s.push(i),this.$openTabstops[n]=i),this.addTabstopMarkers(i)}),this),s.length>2&&(this.tabstops.length&&s.push(s.splice(2,1)[0]),this.tabstops.splice.apply(this.tabstops,s))},this.addTabstopMarkers=function(e){var t=this.editor.session;e.forEach((function(e){e.markerId||(e.markerId=t.addMarker(e,"ace_snippet-marker","text"))}))},this.removeTabstopMarkers=function(e){var t=this.editor.session;e.forEach((function(e){t.removeMarker(e.markerId),e.markerId=null}))},this.removeRange=function(e){var t=e.tabstop.indexOf(e);e.tabstop.splice(t,1),t=this.ranges.indexOf(e),this.ranges.splice(t,1),this.editor.session.removeMarker(e.markerId),e.tabstop.length||(t=this.tabstops.indexOf(e.tabstop),-1!=t&&this.tabstops.splice(t,1),this.tabstops.length||this.detach())},this.keyboardHandler=new c,this.keyboardHandler.bindKeys({Tab:function(e){t.snippetManager&&t.snippetManager.expandWithTab(e)||e.tabstopManager.tabNext(1)},"Shift-Tab":function(e){e.tabstopManager.tabNext(-1)},Esc:function(e){e.tabstopManager.detach()},Return:function(e){return!1}})}).call(h.prototype);var f={};f.onChange=a.prototype.onChange,f.setPosition=function(e,t){this.pos.row=e,this.pos.column=t},f.update=function(e,t,n){this.$insertRight=n,this.pos=e,this.onChange(t)};var p=function(e,t){0==e.row&&(e.column+=t.column),e.row+=t.row},g=function(e,t){e.row==t.row&&(e.column-=t.column),e.row-=t.row};e("./lib/dom").importCssString(".ace_snippet-marker { -moz-box-sizing: border-box; box-sizing: border-box; background: rgba(194, 193, 208, 0.09); border: 1px dotted rgba(211, 208, 235, 0.62); position: absolute;}"),t.snippetManager=new d;var m=e("./editor").Editor;(function(){this.insertSnippet=function(e,n){return t.snippetManager.insertSnippet(this,e,n)},this.expandSnippet=function(e){return t.snippetManager.expandWithTab(this,e)}}).call(m.prototype)})),ace.define("ace/autocomplete/popup",["require","exports","module","ace/virtual_renderer","ace/editor","ace/range","ace/lib/event","ace/lib/lang","ace/lib/dom"],(function(e,t,n){"use strict";var i=e("../virtual_renderer").VirtualRenderer,r=e("../editor").Editor,s=e("../range").Range,o=e("../lib/event"),a=e("../lib/lang"),c=e("../lib/dom"),l=function(e){var t=new i(e);t.$maxLines=4;var n=new r(t);return n.setHighlightActiveLine(!1),n.setShowPrintMargin(!1),n.renderer.setShowGutter(!1),n.renderer.setHighlightGutterLine(!1),n.$mouseHandler.$focusWaitTimout=0,n.$highlightTagPending=!0,n},u=function(e){var t=c.createElement("div"),n=new l(t);e&&e.appendChild(t),t.style.display="none",n.renderer.content.style.cursor="default",n.renderer.setStyle("ace_autocomplete"),n.setOption("displayIndentGuides",!1),n.setOption("dragDelay",150);var i,r=function(){};n.focus=r,n.$isFocused=!0,n.renderer.$cursorLayer.restartTimer=r,n.renderer.$cursorLayer.element.style.opacity=0,n.renderer.$maxLines=8,n.renderer.$keepTextAreaAtCursor=!1,n.setHighlightActiveLine(!1),n.session.highlight(""),n.session.$searchHighlight.clazz="ace_highlight-marker",n.on("mousedown",(function(e){var t=e.getDocumentPosition();n.selection.moveToPosition(t),d.start.row=d.end.row=t.row,e.stop()}));var u=new s(-1,0,-1,1/0),d=new s(-1,0,-1,1/0);d.id=n.session.addMarker(d,"ace_active-line","fullLine"),n.setSelectOnHover=function(e){e?u.id&&(n.session.removeMarker(u.id),u.id=null):u.id=n.session.addMarker(u,"ace_line-hover","fullLine")},n.setSelectOnHover(!1),n.on("mousemove",(function(e){if(i){if(i.x!=e.x||i.y!=e.y){i=e,i.scrollTop=n.renderer.scrollTop;var t=i.getDocumentPosition().row;u.start.row!=t&&(u.id||n.setRow(t),f(t))}}else i=e})),n.renderer.on("beforeRender",(function(){if(i&&-1!=u.start.row){i.$pos=null;var e=i.getDocumentPosition().row;u.id||n.setRow(e),f(e,!0)}})),n.renderer.on("afterRender",(function(){var e=n.getRow(),t=n.renderer.$textLayer,i=t.element.childNodes[e-t.config.firstRow];i!=t.selectedNode&&(t.selectedNode&&c.removeCssClass(t.selectedNode,"ace_selected"),t.selectedNode=i,i&&c.addCssClass(i,"ace_selected"))}));var h=function(){f(-1)},f=function(e,t){e!==u.start.row&&(u.start.row=u.end.row=e,t||n.session._emit("changeBackMarker"),n._emit("changeHoverMarker"))};n.getHoveredRow=function(){return u.start.row},o.addListener(n.container,"mouseout",h),n.on("hide",h),n.on("changeSelection",h),n.session.doc.getLength=function(){return n.data.length},n.session.doc.getLine=function(e){var t=n.data[e];return"string"==typeof t?t:t&&t.value||""};var p=n.session.bgTokenizer;return p.$tokenizeRow=function(e){var t=n.data[e],i=[];if(!t)return i;"string"==typeof t&&(t={value:t}),t.caption||(t.caption=t.value||t.name);for(var r,s,o=-1,a=0;ac-2&&(l=l.substr(0,c-t.caption.length-3)+"…"),i.push({type:"rightAlignedText",value:l})}return i},p.$updateOnChange=r,p.start=r,n.session.$computeWidth=function(){return this.screenWidth=0},n.$blockScrolling=1/0,n.isOpen=!1,n.isTopdown=!1,n.autoSelect=!0,n.data=[],n.setData=function(e){n.setValue(a.stringRepeat("\n",e.length),-1),n.data=e||[],n.setRow(0)},n.getData=function(e){return n.data[e]},n.getRow=function(){return d.start.row},n.setRow=function(e){e=Math.max(this.autoSelect?0:-1,Math.min(this.data.length,e)),d.start.row!=e&&(n.selection.clearSelection(),d.start.row=d.end.row=e||0,n.session._emit("changeBackMarker"),n.moveCursorTo(e||0,0),n.isOpen&&n._signal("select"))},n.on("changeSelection",(function(){n.isOpen&&n.setRow(n.selection.lead.row),n.renderer.scrollCursorIntoView()})),n.hide=function(){this.container.style.display="none",this._signal("hide"),n.isOpen=!1},n.show=function(e,t,r){var s=this.container,o=window.innerHeight,a=window.innerWidth,c=this.renderer,l=c.$maxLines*t*1.4,u=e.top+this.$borderSize,d=u>o/2&&!r;d&&u+t+l>o?(c.$maxPixelHeight=u-2*this.$borderSize,s.style.top="",s.style.bottom=o-u+"px",n.isTopdown=!1):(u+=t,c.$maxPixelHeight=o-u-.2*t,s.style.top=u+"px",s.style.bottom="",n.isTopdown=!0),s.style.display="",this.renderer.$textLayer.checkForSizeChanges();var h=e.left;h+s.offsetWidth>a&&(h=a-s.offsetWidth),s.style.left=h+"px",this._signal("show"),i=null,n.isOpen=!0},n.getTextLeftOffset=function(){return this.$borderSize+this.renderer.$padding+this.$imageSize},n.$imageSize=0,n.$borderSize=1,n};c.importCssString(".ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line { background-color: #CAD6FA; z-index: 1;}.ace_editor.ace_autocomplete .ace_line-hover { border: 1px solid #abbffe; margin-top: -1px; background: rgba(233,233,253,0.4);}.ace_editor.ace_autocomplete .ace_line-hover { position: absolute; z-index: 2;}.ace_editor.ace_autocomplete .ace_scroller { background: none; border: none; box-shadow: none;}.ace_rightAlignedText { color: gray; display: inline-block; position: absolute; right: 4px; text-align: right; z-index: -1;}.ace_editor.ace_autocomplete .ace_completion-highlight{ color: #000; text-shadow: 0 0 0.01em;}.ace_editor.ace_autocomplete { width: 280px; z-index: 200000; background: #fbfbfb; color: #444; border: 1px lightgray solid; position: fixed; box-shadow: 2px 3px 5px rgba(0,0,0,.2); line-height: 1.4;}"),t.AcePopup=u})),ace.define("ace/autocomplete/util",["require","exports","module"],(function(e,t,n){"use strict";t.parForEach=function(e,t,n){var i=0,r=e.length;0===r&&n();for(var s=0;s=0;s--){if(!n.test(e[s]))break;r.push(e[s])}return r.reverse().join("")},t.retrieveFollowingIdentifier=function(e,t,n){n=n||i;for(var r=[],s=t;s=n?-1:t+1;break;case"start":t=0;break;case"end":t=n;break}this.popup.setRow(t)},this.insertMatch=function(e,t){if(e||(e=this.popup.getData(this.popup.getRow())),!e)return!1;if(e.completer&&e.completer.insertMatch)e.completer.insertMatch(this.editor,e);else{if(this.completions.filterText)for(var n,i=this.editor.selection.getAllRanges(),r=0;n=i[r];r++)n.start.column-=this.completions.filterText.length,this.editor.session.remove(n);e.snippet?c.insertSnippet(this.editor,e.snippet):this.editor.execCommand("insertstring",e.value||e)}this.detach()},this.commands={Up:function(e){e.completer.goTo("up")},Down:function(e){e.completer.goTo("down")},"Ctrl-Up|Ctrl-Home":function(e){e.completer.goTo("start")},"Ctrl-Down|Ctrl-End":function(e){e.completer.goTo("end")},Esc:function(e){e.completer.detach()},Return:function(e){return e.completer.insertMatch()},"Shift-Return":function(e){e.completer.insertMatch(null,{deleteSuffix:!0})},Tab:function(e){var t=e.completer.insertMatch();if(t||e.tabstopManager)return t;e.completer.goTo("down")},PageUp:function(e){e.completer.popup.gotoPageUp()},PageDown:function(e){e.completer.popup.gotoPageDown()}},this.gatherCompletions=function(e,t){var n=e.getSession(),i=e.getCursorPosition(),r=s.getCompletionPrefix(e);this.base=n.doc.createAnchor(i.row,i.column-r.length),this.base.$insertRight=!0;var o=[],a=e.completers.length;return e.completers.forEach((function(c,l){c.getCompletions(e,n,i,r,(function(n,i){!n&&i&&(o=o.concat(i)),t(null,{prefix:s.getCompletionPrefix(e),matches:o,finished:0===--a})}))})),!0},this.showPopup=function(e){this.editor&&this.detach(),this.activated=!0,this.editor=e,e.completer!=this&&(e.completer&&e.completer.detach(),e.completer=this),e.on("changeSelection",this.changeListener),e.on("blur",this.blurListener),e.on("mousedown",this.mousedownListener),e.on("mousewheel",this.mousewheelListener),this.updateCompletions()},this.updateCompletions=function(e){if(e&&this.base&&this.completions){var t=this.editor.getCursorPosition(),n=this.editor.session.getTextRange({start:this.base,end:t});if(n==this.completions.filterText)return;return this.completions.setFilter(n),this.completions.filtered.length?1!=this.completions.filtered.length||this.completions.filtered[0].value!=n||this.completions.filtered[0].snippet?void this.openPopup(this.editor,n,e):this.detach():this.detach()}var i=this.gatherCompletionsId;this.gatherCompletions(this.editor,function(t,n){var r=function(){if(n.finished)return this.detach()}.bind(this),s=n.prefix,o=n&&n.matches;if(!o||!o.length)return r();if(0===s.indexOf(n.prefix)&&i==this.gatherCompletionsId){this.completions=new u(o),this.exactMatch&&(this.completions.exactMatch=!0),this.completions.setFilter(s);var a=this.completions.filtered;return a.length&&(1!=a.length||a[0].value!=s||a[0].snippet)?this.autoInsert&&1==a.length&&n.finished?this.insertMatch(a[0]):void this.openPopup(this.editor,s,e):r()}}.bind(this))},this.cancelContextMenu=function(){this.editor.$mouseHandler.cancelContextMenu()},this.updateDocTooltip=function(){var e=this.popup,t=e.data,n=t&&(t[e.getHoveredRow()]||t[e.getRow()]),i=null;return n&&this.editor&&this.popup.isOpen?(this.editor.completers.some((function(e){return e.getDocTooltip&&(i=e.getDocTooltip(n)),i})),i||(i=n),"string"==typeof i&&(i={docText:i}),i&&(i.docHTML||i.docText)?void this.showDocTooltip(i):this.hideDocTooltip()):this.hideDocTooltip()},this.showDocTooltip=function(e){this.tooltipNode||(this.tooltipNode=a.createElement("div"),this.tooltipNode.className="ace_tooltip ace_doc-tooltip",this.tooltipNode.style.margin=0,this.tooltipNode.style.pointerEvents="auto",this.tooltipNode.tabIndex=-1,this.tooltipNode.onblur=this.blurListener.bind(this),this.tooltipNode.onclick=this.onTooltipClick.bind(this));var t=this.tooltipNode;e.docHTML?t.innerHTML=e.docHTML:e.docText&&(t.textContent=e.docText),t.parentNode||document.body.appendChild(t);var n=this.popup,i=n.container.getBoundingClientRect();t.style.top=n.container.style.top,t.style.bottom=n.container.style.bottom,window.innerWidth-i.right<320?(t.style.right=window.innerWidth-i.left+"px",t.style.left=""):(t.style.left=i.right+1+"px",t.style.right=""),t.style.display="block"},this.hideDocTooltip=function(){if(this.tooltipTimer.cancel(),this.tooltipNode){var e=this.tooltipNode;this.editor.isFocused()||document.activeElement!=e||this.editor.focus(),this.tooltipNode=null,e.parentNode&&e.parentNode.removeChild(e)}},this.onTooltipClick=function(e){var t=e.target;while(t&&t!=this.tooltipNode){if("A"==t.nodeName&&t.href){t.rel="noreferrer",t.target="_blank";break}t=t.parentNode}}}).call(l.prototype),l.startCommand={name:"startAutocomplete",exec:function(e){e.completer||(e.completer=new l),e.completer.autoInsert=!1,e.completer.autoSelect=!0,e.completer.showPopup(e),e.completer.cancelContextMenu()},bindKey:"Ctrl-Space|Ctrl-Shift-Space|Alt-Space"};var u=function(e,t){this.all=e,this.filtered=e,this.filterText=t||"",this.exactMatch=!1};(function(){this.setFilter=function(e){if(e.length>this.filterText&&0===e.lastIndexOf(this.filterText,0))var t=this.filtered;else t=this.all;this.filterText=e,t=this.filterCompletions(t,this.filterText),t=t.sort((function(e,t){return t.exactMatch-e.exactMatch||t.score-e.score}));var n=null;t=t.filter((function(e){var t=e.snippet||e.caption||e.value;return t!==n&&(n=t,!0)})),this.filtered=t},this.filterCompletions=function(e,t){var n=[],i=t.toUpperCase(),r=t.toLowerCase();e:for(var s,o=0;s=e[o];o++){var a=s.value||s.caption||s.snippet;if(a){var c,l,u=-1,d=0,h=0;if(this.exactMatch){if(t!==a.substr(0,t.length))continue e}else for(var f=0;f=0&&(g<0||p0&&(-1===u&&(h+=10),h+=l),d|=1<",o.escapeHTML(e.caption),"","
",o.escapeHTML(e.snippet)].join(""))}},d=[u,c,l];t.setCompleters=function(e){d.length=0,e&&d.push.apply(d,e)},t.addCompleter=function(e){d.push(e)},t.textCompleter=c,t.keyWordCompleter=l,t.snippetCompleter=u;var h={name:"expandSnippet",exec:function(e){return i.expandWithTab(e)},bindKey:"Tab"},f=function(e,t){p(t.session.$mode)},p=function(e){var t=e.$id;i.files||(i.files={}),g(t),e.modes&&e.modes.forEach(p)},g=function(e){if(e&&!i.files[e]){var t=e.replace("mode","snippets");i.files[e]={},s.loadModule(t,(function(t){t&&(i.files[e]=t,!t.snippets&&t.snippetText&&(t.snippets=i.parseSnippetFile(t.snippetText)),i.register(t.snippets||[],t.scope),t.includeScopes&&(i.snippetMap[t.scope].includeScopes=t.includeScopes,t.includeScopes.forEach((function(e){g("ace/mode/"+e)}))))}))}},m=function(e){var t=e.editor,n=t.completer&&t.completer.activated;if("backspace"===e.command.name)n&&!a.getCompletionPrefix(t)&&t.completer.detach();else if("insertstring"===e.command.name){var i=a.getCompletionPrefix(t);i&&!n&&(t.completer||(t.completer=new r),t.completer.autoInsert=!1,t.completer.showPopup(t))}},v=e("../editor").Editor;e("../config").defineOptions(v.prototype,"editor",{enableBasicAutocompletion:{set:function(e){e?(this.completers||(this.completers=Array.isArray(e)?e:d),this.commands.addCommand(r.startCommand)):this.commands.removeCommand(r.startCommand)},value:!1},enableLiveAutocompletion:{set:function(e){e?(this.completers||(this.completers=Array.isArray(e)?e:d),this.commands.on("afterExec",m)):this.commands.removeListener("afterExec",m)},value:!1},enableSnippets:{set:function(e){e?(this.commands.addCommand(h),this.on("changeMode",f),f(null,this)):(this.commands.removeCommand(h),this.off("changeMode",f))},value:!1}})})),function(){ace.acequire(["ace/ext/language_tools"],(function(){}))}()},"20a6":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("input",{directives:[{name:"model",rawName:"v-model",value:e.passcode,expression:"passcode"}],attrs:{placeholder:"Enter passcode...",autofocus:""},domProps:{value:e.passcode},on:{input:function(t){t.target.composing||(e.passcode=t.target.value)}}}),n("vui-button",{attrs:{params:{passcode:e.passcode}}},[e._v("Submit")])],1)},r=[],s={data:function(){return{passcode:""}}},o=s,a=n("2877"),c=Object(a["a"])(o,i,r,!1,null,null,null);t["default"]=c.exports},"20bf":function(e,t,n){"use strict";var i=n("8aa7"),r=n("ebb5").exportTypedArrayStaticMethod,s=n("a078");r("from",s,i)},"210c":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[e._l(e.subButtons,(function(t){return n("vui-button",{key:"-"+t,attrs:{disabled:e.val-te.max},on:{click:function(n){return e.onUpdatedValue(Math.pow(10,t))}}},[e._v("+")])}))],2)},r=[],s=(n("a9e3"),n("8a79"),n("c0d6")),o={props:{value:{type:Number,default:0},buttonCount:{type:Number,default:1},min:{type:Number,default:0},max:{type:Number,default:100},pushState:{type:Boolean,default:!0},width:{type:String,default:"10em"},decimalPlaces:{type:Number,default:0}},data:function(){return{val:this.value}},computed:{subButtons:function(){if(!this.buttonCount)return[];for(var e=[],t=this.buttonCount-1;t>=0;t--)e.push(t);return e},addButtons:function(){if(!this.buttonCount)return[];for(var e=[],t=0;tthis.max&&(e=this.max),eh;h++)if(p=k(e[h]),p&&p instanceof l)return p;return new l(!1)}u=d.call(e)}g=u.next;while(!(m=g.call(u)).done){try{p=k(m.value)}catch(A){throw c(u),A}if("object"==typeof p&&p&&p instanceof l)return p}return new l(!1)}},2315:function(e,t,n){"use strict";var i=n("23e7"),r=n("857a"),s=n("af03");i({target:"String",proto:!0,forced:s("strike")},{strike:function(){return r(this,"strike","","")}})},2351:function(e,t,n){var i=n("746f");i("split")},"23cb":function(e,t,n){var i=n("a691"),r=Math.max,s=Math.min;e.exports=function(e,t){var n=i(e);return n<0?r(n+t,0):s(n,t)}},"23dc":function(e,t,n){var i=n("d44e");i(Math,"Math",!0)},"23e7":function(e,t,n){var i=n("da84"),r=n("06cf").f,s=n("9112"),o=n("6eeb"),a=n("ce4e"),c=n("e893"),l=n("94ca");e.exports=function(e,t){var n,u,d,h,f,p,g=e.target,m=e.global,v=e.stat;if(u=m?i:v?i[g]||a(g,{}):(i[g]||{}).prototype,u)for(d in t){if(f=t[d],e.noTargetGet?(p=r(u,d),h=p&&p.value):h=u[d],n=l(m?d:g+(v?".":"#")+d,e.forced),!n&&void 0!==h){if(typeof f===typeof h)continue;c(f,h)}(e.sham||h&&h.sham)&&s(f,"sham",!0),o(u,d,f,e)}}},"241c":function(e,t,n){var i=n("ca84"),r=n("7839"),s=r.concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return i(e,s)}},2480:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("vui-button",{attrs:{params:{stop:1}}},[e._v("Stop")]),n("br"),n(e.term,{tag:"component",staticClass:"terminal"})],1)},r=[],s=n("025e"),o={props:["fg","bg"],computed:{style:function(){return{color:"#"+this.fg,"background-color":"#"+this.bg}}},template:''},a={props:["to"],methods:{invoke:function(){s["a"].sendToTopic({terminal_topic:this.to})}},template:''},c={data:function(){return{s:this.$root.$data.state}},computed:{term:function(){return{components:{co:o,to:a},template:"
".concat(this.s.terminal,"
")}}}},l=c,u=(n("ebf5"),n("2877")),d=Object(u["a"])(l,i,r,!1,null,"3a6a6067",null);t["default"]=d.exports},2532:function(e,t,n){"use strict";var i=n("23e7"),r=n("5a34"),s=n("1d80"),o=n("ab13");i({target:"String",proto:!0,forced:!o("includes")},{includes:function(e){return!!~String(s(this)).indexOf(r(e),arguments.length>1?arguments[1]:void 0)}})},"253b":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("div",[n("h3",[e._v("Auxiliary Timing Unit:")]),e.timeractive?n("vui-button",{attrs:{params:{time:1}}},[e._v("Arming")]):n("vui-button",{attrs:{params:{time:1}}},[e._v("Not Arming")])],1),n("div",[n("h3",[e._v("Time Left:")]),n("vui-button",{attrs:{params:{tp:-30}}},[e._v("--")]),n("vui-button",{attrs:{params:{tp:-1}}},[e._v("-")]),n("span",{staticClass:"value"},[e._v(e._s(e.minute)+":"+e._s(e.second))]),n("vui-button",{attrs:{params:{tp:1}}},[e._v("+")]),n("vui-button",{attrs:{params:{tp:30}}},[e._v("++")])],1),n("div",[n("h3",[e._v("Scanning:")]),e.scanning?n("vui-button",{attrs:{params:{scanning:1}}},[e._v("Armed")]):n("vui-button",{attrs:{params:{scanning:1}}},[e._v("Not Armed")]),n("span",{staticClass:"value"},[e._v("Movement sensor active when armed!")])],1),n("div",[n("h3",[e._v("Range:")]),n("vui-button",{attrs:{params:{range:-1}}},[e._v("-")]),n("span",{staticClass:"value"},[e._v(e._s(e.range))]),n("vui-button",{attrs:{params:{range:1}}},[e._v("+")])],1)])},r=[],s={data:function(){return this.$root.$data.state}},o=s,a=(n("de06"),n("2877")),c=Object(a["a"])(o,i,r,!1,null,"10d6546a",null);t["default"]=c.exports},"256f":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("vui-group",[n("vui-group-item",{attrs:{label:"UID:"}},[e._v(e._s(e.incident.id))]),n("vui-group-item",{attrs:{label:"Date:"}},[e._v(e._s(e.incident.datetime))]),n("vui-group-item",{attrs:{label:"Charges:"}},e._l(e.incident.charges,(function(t,i){return n("span",{key:i},[e._v(" "+e._s(t)),i+11?arguments[1]:void 0)}))},"25eb":function(e,t,n){var i=n("23e7"),r=n("c20d");i({target:"Number",stat:!0,forced:Number.parseInt!=r},{parseInt:r})},"25f0":function(e,t,n){"use strict";var i=n("6eeb"),r=n("825a"),s=n("d039"),o=n("ad6d"),a="toString",c=RegExp.prototype,l=c[a],u=s((function(){return"/a/b"!=l.call({source:"a",flags:"b"})})),d=l.name!=a;(u||d)&&i(RegExp.prototype,a,(function(){var e=r(this),t=String(e.source),n=e.flags,i=String(void 0===n&&e instanceof RegExp&&!("flags"in c)?o.call(e):n);return"/"+t+"/"+i}),{unsafe:!0})},2626:function(e,t,n){"use strict";var i=n("d066"),r=n("9bf2"),s=n("b622"),o=n("83ab"),a=s("species");e.exports=function(e){var t=i(e),n=r.f;o&&t&&!t[a]&&n(t,a,{configurable:!0,get:function(){return this}})}},2653:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("div",{staticClass:"clear-both"},[n("vui-img",{staticClass:"character-image",attrs:{name:"character"}}),n("p",[e._v(" Welcome, "),n("strong",[e._v(e._s(e.character_name))]),e._v("."),n("br"),e._v(" Round duration: "),n("strong",[e._v(e._s(e.round_duration))]),n("br"),e._v(" Alert level: "),n("strong",{style:{color:e.alertLevelColor}},[e._v(e._s(e.alert_level))]),n("br")])],1),n("div",{staticClass:"clear-both"},[e.shuttleStatusMessage?n("strong",[e._v(e._s(e.shuttleStatusMessage))]):e._e(),n("br"),e._v(" Choose from the following available positions: ")]),e.unique_role_available?n("div",[n("div",{staticClass:"gs-block"},[n("div",{staticClass:"dept"},[e._v("A unique role is available!")]),n("vui-button",{staticClass:"d-block m-1",attrs:{params:{ghostspawner:1},icon:"ghost"}},[e._v("Ghost Spawner Menu")])],1)]):n("div",[n("vui-button",{staticClass:"d-block",attrs:{params:{ghostspawner:1},icon:"ghost"}},[e._v("Ghost Spawner Menu")])],1),e.jobs_available>0?n("div",[e._l(e.fixedJobsList,(function(t,i){return n("div",{key:i,staticClass:"mt-2 dept-block",class:"border-dept-"+i.toLowerCase()},[n("div",{staticClass:"dept mb-1",class:"bg-dept-"+i.toLowerCase()},[e._v(" "+e._s(i)+" ")]),e._l(t,(function(t){return n("div",{key:t.title},[n("vui-button",{staticClass:"d-block mx-1",attrs:{params:{SelectedJob:t.title}}},[n("span",{class:{"fw-bold":t.head}},[e._v(e._s(t.title))]),1!=t.total_positions?n("span",[e._v(" ("+e._s(t.current_positions)),t.total_positions>1?n("span",[e._v(" / "+e._s(t.total_positions))]):e._e(),e._v(")")]):e._e()])],1)}))],2)})),n("span",{staticClass:"fs-small fst-italic"},[e._v("Numbers in brackets show current amount of active players out of all available job slots for that job.")])],2):n("div",{staticClass:"fst-italic"},[e._v(" No jobs available. ")])])},r=[];n("a4d3"),n("e01a"),n("d28b"),n("4de4"),n("a630"),n("e260"),n("fb6a"),n("b0c0"),n("4fad"),n("c1f9"),n("d3b7"),n("25f0"),n("3ca3"),n("ddb0");function s(e,t){return u(e)||l(e,t)||a(e,t)||o()}function o(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function a(e,t){if(e){if("string"===typeof e)return c(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?c(e,t):void 0}}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,i=new Array(t);n0})))},shuttleStatusMessage:function(){switch(this.shuttle_status){case"post-evac":return"The station has been evacuated.";case"evac":return"The station is currently undergoing evacuation procedures.";case"transfer":return"The station is currently undergoing crew transfer procedures."}return null},alertLevelColor:function(){switch(this.alert_level.toLowerCase()){case"green":return"inherit";case"blue":return"blue";case"yellow":return"yellow"}return"red"}}},h=d,f=(n("11f5"),n("2877")),p=Object(f["a"])(h,i,r,!1,null,"36f58934",null);t["default"]=p.exports},"26e9":function(e,t,n){"use strict";var i=n("23e7"),r=n("e8b5"),s=[].reverse,o=[1,2];i({target:"Array",proto:!0,forced:String(o)===String(o.reverse())},{reverse:function(){return r(this)&&(this.length=this.length),s.call(this)}})},2704:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"item"},[n("div",{staticClass:"itemLabel"},[e._v(e._s(e.label))]),n("div",{staticClass:"itemContent"},[e._t("default")],2)])},r=[],s={props:{label:{type:String,default:""}}},o=s,a=(n("3bb1"),n("2877")),c=Object(a["a"])(o,i,r,!1,null,"7c73d3c8",null);t["default"]=c.exports},"277d":function(e,t,n){var i=n("23e7"),r=n("e8b5");i({target:"Array",stat:!0},{isArray:r})},"27cd":function(e,t,n){"use strict";n("38d6")},2877:function(e,t,n){"use strict";function i(e,t,n,i,r,s,o,a){var c,l="function"===typeof e?e.options:e;if(t&&(l.render=t,l.staticRenderFns=n,l._compiled=!0),i&&(l.functional=!0),s&&(l._scopeId="data-v-"+s),o?(c=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(o)},l._ssrRegister=c):r&&(c=a?function(){r.call(this,(l.functional?this.parent:this).$root.$options.shadowRoot)}:r),c)if(l.functional){l._injectStyles=c;var u=l.render;l.render=function(e,t){return c.call(t),u(e,t)}}else{var d=l.beforeCreate;l.beforeCreate=d?[].concat(d,c):[c]}return{exports:e,options:l}}n.d(t,"a",(function(){return i}))},2954:function(e,t,n){"use strict";var i=n("ebb5"),r=n("4840"),s=n("d039"),o=i.aTypedArray,a=i.aTypedArrayConstructor,c=i.exportTypedArrayMethod,l=[].slice,u=s((function(){new Int8Array(1).slice()}));c("slice",(function(e,t){var n=l.call(o(this),e,t),i=r(this,this.constructor),s=0,c=n.length,u=new(a(i))(c);while(c>s)u[s]=n[s++];return u}),u)},"29f3":function(e,t){var n=Object.prototype,i=n.toString;function r(e){return i.call(e)}e.exports=r},"2a1b":function(e,t,n){var i=n("746f");i("match")},"2a62":function(e,t,n){var i=n("825a");e.exports=function(e){var t=e["return"];if(void 0!==t)return i(t.call(e)).value}},"2af1":function(e,t,n){var i=n("23e7"),r=n("f748");i({target:"Math",stat:!0},{sign:r})},"2b10":function(e,t){function n(e,t,n){var i=-1,r=e.length;t<0&&(t=-t>r?0:r+t),n=n>r?r:n,n<0&&(n+=r),r=t>n?0:n-t>>>0,t>>>=0;var s=Array(r);while(++i4)return e;for(n=[],i=0;i1&&"0"==r.charAt(0)&&(s=B.test(r)?16:8,r=r.slice(8==s?1:2)),""===r)o=0;else{if(!(10==s?O:8==s?R:M).test(r))return e;o=parseInt(r,s)}n.push(o)}for(i=0;i=C(256,5-t))return null}else if(o>255)return null;for(a=n.pop(),i=0;i6)return;i=0;while(h()){if(r=null,i>0){if(!("."==h()&&i<4))return;d++}if(!D.test(h()))return;while(D.test(h())){if(s=parseInt(h(),10),null===r)r=s;else{if(0==r)return;r=10*r+s}if(r>255)return;d++}c[l]=256*c[l]+r,i++,2!=i&&4!=i||l++}if(4!=i)return;break}if(":"==h()){if(d++,!h())return}else if(h())return;c[l++]=t}else{if(null!==u)return;d++,l++,u=l}}if(null!==u){o=l-u,l=7;while(0!=l&&o>0)a=c[l],c[l--]=c[u+o-1],c[u+--o]=a}else if(8!=l)return;return c},U=function(e){for(var t=null,n=1,i=null,r=0,s=0;s<8;s++)0!==e[s]?(r>n&&(t=i,n=r),i=null,r=0):(null===i&&(i=s),++r);return r>n&&(t=i,n=r),t},z=function(e){var t,n,i,r;if("number"==typeof e){for(t=[],n=0;n<4;n++)t.unshift(e%256),e=A(e/256);return t.join(".")}if("object"==typeof e){for(t="",i=U(e),n=0;n<8;n++)r&&0===e[n]||(r&&(r=!1),i===n?(t+=n?":":"::",r=!0):(t+=e[n].toString(16),n<7&&(t+=":")));return"["+t+"]"}return e},G={},q=h({},G,{" ":1,'"':1,"<":1,">":1,"`":1}),K=h({},q,{"#":1,"?":1,"{":1,"}":1}),Y=h({},K,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),X=function(e,t){var n=p(e,0);return n>32&&n<127&&!d(t,e)?e:encodeURIComponent(e)},J={ftp:21,file:null,http:80,https:443,ws:80,wss:443},Q=function(e){return d(J,e.scheme)},Z=function(e){return""!=e.username||""!=e.password},ee=function(e){return!e.host||e.cannotBeABaseURL||"file"==e.scheme},te=function(e,t){var n;return 2==e.length&&T.test(e.charAt(0))&&(":"==(n=e.charAt(1))||!t&&"|"==n)},ne=function(e){var t;return e.length>1&&te(e.slice(0,2))&&(2==e.length||"/"===(t=e.charAt(2))||"\\"===t||"?"===t||"#"===t)},ie=function(e){var t=e.path,n=t.length;!n||"file"==e.scheme&&1==n&&te(t[0],!0)||t.pop()},re=function(e){return"."===e||"%2e"===e.toLowerCase()},se=function(e){return e=e.toLowerCase(),".."===e||"%2e."===e||".%2e"===e||"%2e%2e"===e},oe={},ae={},ce={},le={},ue={},de={},he={},fe={},pe={},ge={},me={},ve={},be={},ye={},we={},_e={},xe={},ke={},Ae={},Ce={},Ee={},Se=function(e,t,n,r){var s,o,a,c,l=n||oe,u=0,h="",p=!1,g=!1,m=!1;n||(e.scheme="",e.username="",e.password="",e.host=null,e.port=null,e.path=[],e.query=null,e.fragment=null,e.cannotBeABaseURL=!1,t=t.replace(P,"")),t=t.replace(N,""),s=f(t);while(u<=s.length){switch(o=s[u],l){case oe:if(!o||!T.test(o)){if(n)return S;l=ce;continue}h+=o.toLowerCase(),l=ae;break;case ae:if(o&&(L.test(o)||"+"==o||"-"==o||"."==o))h+=o.toLowerCase();else{if(":"!=o){if(n)return S;h="",l=ce,u=0;continue}if(n&&(Q(e)!=d(J,h)||"file"==h&&(Z(e)||null!==e.port)||"file"==e.scheme&&!e.host))return;if(e.scheme=h,n)return void(Q(e)&&J[e.scheme]==e.port&&(e.port=null));h="","file"==e.scheme?l=ye:Q(e)&&r&&r.scheme==e.scheme?l=le:Q(e)?l=fe:"/"==s[u+1]?(l=ue,u++):(e.cannotBeABaseURL=!0,e.path.push(""),l=Ae)}break;case ce:if(!r||r.cannotBeABaseURL&&"#"!=o)return S;if(r.cannotBeABaseURL&&"#"==o){e.scheme=r.scheme,e.path=r.path.slice(),e.query=r.query,e.fragment="",e.cannotBeABaseURL=!0,l=Ee;break}l="file"==r.scheme?ye:de;continue;case le:if("/"!=o||"/"!=s[u+1]){l=de;continue}l=pe,u++;break;case ue:if("/"==o){l=ge;break}l=ke;continue;case de:if(e.scheme=r.scheme,o==i)e.username=r.username,e.password=r.password,e.host=r.host,e.port=r.port,e.path=r.path.slice(),e.query=r.query;else if("/"==o||"\\"==o&&Q(e))l=he;else if("?"==o)e.username=r.username,e.password=r.password,e.host=r.host,e.port=r.port,e.path=r.path.slice(),e.query="",l=Ce;else{if("#"!=o){e.username=r.username,e.password=r.password,e.host=r.host,e.port=r.port,e.path=r.path.slice(),e.path.pop(),l=ke;continue}e.username=r.username,e.password=r.password,e.host=r.host,e.port=r.port,e.path=r.path.slice(),e.query=r.query,e.fragment="",l=Ee}break;case he:if(!Q(e)||"/"!=o&&"\\"!=o){if("/"!=o){e.username=r.username,e.password=r.password,e.host=r.host,e.port=r.port,l=ke;continue}l=ge}else l=pe;break;case fe:if(l=pe,"/"!=o||"/"!=h.charAt(u+1))continue;u++;break;case pe:if("/"!=o&&"\\"!=o){l=ge;continue}break;case ge:if("@"==o){p&&(h="%40"+h),p=!0,a=f(h);for(var v=0;v65535)return $;e.port=Q(e)&&w===J[e.scheme]?null:w,h=""}if(n)return;l=xe;continue}return $}h+=o;break;case ye:if(e.scheme="file","/"==o||"\\"==o)l=we;else{if(!r||"file"!=r.scheme){l=ke;continue}if(o==i)e.host=r.host,e.path=r.path.slice(),e.query=r.query;else if("?"==o)e.host=r.host,e.path=r.path.slice(),e.query="",l=Ce;else{if("#"!=o){ne(s.slice(u).join(""))||(e.host=r.host,e.path=r.path.slice(),ie(e)),l=ke;continue}e.host=r.host,e.path=r.path.slice(),e.query=r.query,e.fragment="",l=Ee}}break;case we:if("/"==o||"\\"==o){l=_e;break}r&&"file"==r.scheme&&!ne(s.slice(u).join(""))&&(te(r.path[0],!0)?e.path.push(r.path[0]):e.host=r.host),l=ke;continue;case _e:if(o==i||"/"==o||"\\"==o||"?"==o||"#"==o){if(!n&&te(h))l=ke;else if(""==h){if(e.host="",n)return;l=xe}else{if(c=W(e,h),c)return c;if("localhost"==e.host&&(e.host=""),n)return;h="",l=xe}continue}h+=o;break;case xe:if(Q(e)){if(l=ke,"/"!=o&&"\\"!=o)continue}else if(n||"?"!=o)if(n||"#"!=o){if(o!=i&&(l=ke,"/"!=o))continue}else e.fragment="",l=Ee;else e.query="",l=Ce;break;case ke:if(o==i||"/"==o||"\\"==o&&Q(e)||!n&&("?"==o||"#"==o)){if(se(h)?(ie(e),"/"==o||"\\"==o&&Q(e)||e.path.push("")):re(h)?"/"==o||"\\"==o&&Q(e)||e.path.push(""):("file"==e.scheme&&!e.path.length&&te(h)&&(e.host&&(e.host=""),h=h.charAt(0)+":"),e.path.push(h)),h="","file"==e.scheme&&(o==i||"?"==o||"#"==o))while(e.path.length>1&&""===e.path[0])e.path.shift();"?"==o?(e.query="",l=Ce):"#"==o&&(e.fragment="",l=Ee)}else h+=X(o,K);break;case Ae:"?"==o?(e.query="",l=Ce):"#"==o?(e.fragment="",l=Ee):o!=i&&(e.path[0]+=X(o,G));break;case Ce:n||"#"!=o?o!=i&&("'"==o&&Q(e)?e.query+="%27":e.query+="#"==o?"%23":X(o,G)):(e.fragment="",l=Ee);break;case Ee:o!=i&&(e.fragment+=X(o,q));break}u++}},Fe=function(e){var t,n,i=u(this,Fe,"URL"),r=arguments.length>1?arguments[1]:void 0,o=String(e),a=x(i,{type:"URL"});if(void 0!==r)if(r instanceof Fe)t=k(r);else if(n=Se(t={},String(r)),n)throw TypeError(n);if(n=Se(a,o,null,t),n)throw TypeError(n);var c=a.searchParams=new w,l=_(c);l.updateSearchParams(a.query),l.updateURL=function(){a.query=String(c)||null},s||(i.href=Te.call(i),i.origin=Le.call(i),i.protocol=De.call(i),i.username=Be.call(i),i.password=Re.call(i),i.host=Oe.call(i),i.hostname=Me.call(i),i.port=je.call(i),i.pathname=Ie.call(i),i.search=Pe.call(i),i.searchParams=Ne.call(i),i.hash=We.call(i))},$e=Fe.prototype,Te=function(){var e=k(this),t=e.scheme,n=e.username,i=e.password,r=e.host,s=e.port,o=e.path,a=e.query,c=e.fragment,l=t+":";return null!==r?(l+="//",Z(e)&&(l+=n+(i?":"+i:"")+"@"),l+=z(r),null!==s&&(l+=":"+s)):"file"==t&&(l+="//"),l+=e.cannotBeABaseURL?o[0]:o.length?"/"+o.join("/"):"",null!==a&&(l+="?"+a),null!==c&&(l+="#"+c),l},Le=function(){var e=k(this),t=e.scheme,n=e.port;if("blob"==t)try{return new URL(t.path[0]).origin}catch(i){return"null"}return"file"!=t&&Q(e)?t+"://"+z(e.host)+(null!==n?":"+n:""):"null"},De=function(){return k(this).scheme+":"},Be=function(){return k(this).username},Re=function(){return k(this).password},Oe=function(){var e=k(this),t=e.host,n=e.port;return null===t?"":null===n?z(t):z(t)+":"+n},Me=function(){var e=k(this).host;return null===e?"":z(e)},je=function(){var e=k(this).port;return null===e?"":String(e)},Ie=function(){var e=k(this),t=e.path;return e.cannotBeABaseURL?t[0]:t.length?"/"+t.join("/"):""},Pe=function(){var e=k(this).query;return e?"?"+e:""},Ne=function(){return k(this).searchParams},We=function(){var e=k(this).fragment;return e?"#"+e:""},He=function(e,t){return{get:e,set:t,configurable:!0,enumerable:!0}};if(s&&c($e,{href:He(Te,(function(e){var t=k(this),n=String(e),i=Se(t,n);if(i)throw TypeError(i);_(t.searchParams).updateSearchParams(t.query)})),origin:He(Le),protocol:He(De,(function(e){var t=k(this);Se(t,String(e)+":",oe)})),username:He(Be,(function(e){var t=k(this),n=f(String(e));if(!ee(t)){t.username="";for(var i=0;i1?arguments[1]:void 0,t.length)),i=String(e);return u?u.call(t,i,n):t.slice(n,n+i.length)===i}})},"2cf4":function(e,t,n){var i,r,s,o=n("da84"),a=n("d039"),c=n("0366"),l=n("1be4"),u=n("cc12"),d=n("1cdc"),h=n("605d"),f=o.location,p=o.setImmediate,g=o.clearImmediate,m=o.process,v=o.MessageChannel,b=o.Dispatch,y=0,w={},_="onreadystatechange",x=function(e){if(w.hasOwnProperty(e)){var t=w[e];delete w[e],t()}},k=function(e){return function(){x(e)}},A=function(e){x(e.data)},C=function(e){o.postMessage(e+"",f.protocol+"//"+f.host)};p&&g||(p=function(e){var t=[],n=1;while(arguments.length>n)t.push(arguments[n++]);return w[++y]=function(){("function"==typeof e?e:Function(e)).apply(void 0,t)},i(y),y},g=function(e){delete w[e]},h?i=function(e){m.nextTick(k(e))}:b&&b.now?i=function(e){b.now(k(e))}:v&&!d?(r=new v,s=r.port2,r.port1.onmessage=A,i=c(s.postMessage,s,1)):o.addEventListener&&"function"==typeof postMessage&&!o.importScripts&&f&&"file:"!==f.protocol&&!a(C)?(i=C,o.addEventListener("message",A,!1)):i=_ in u("script")?function(e){l.appendChild(u("script"))[_]=function(){l.removeChild(this),x(e)}}:function(e){setTimeout(k(e),0)}),e.exports={set:p,clear:g}},"2d00":function(e,t,n){var i,r,s=n("da84"),o=n("342f"),a=s.process,c=a&&a.versions,l=c&&c.v8;l?(i=l.split("."),r=i[0]+i[1]):o&&(i=o.match(/Edge\/(\d+)/),(!i||i[1]>=74)&&(i=o.match(/Chrome\/(\d+)/),i&&(r=i[1]))),e.exports=r&&+r},"2d26":function(e,t,n){n("5d91"),n("1715");var i=n("428f");e.exports=i},"2d39":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("h3",[e._v("Station Info")]),n("span",{class:e.station_locked_in?"good":"bad"},[e._v(e._s(e.station_locked_in?"Locked In ":"Not Locked In "))]),n("span",{class:e.station_locked_in?"good":"bad"},[e._v("("+e._s(e.locked_in_name)+")")]),n("br"),n("span",[e._v("Calibration: "+e._s(e.calibration)+"%")]),e._v(" "),n("vui-button",{attrs:{params:{recalibrate:1}}},[e._v("Recalibrate")]),n("h3",[e._v("Teleporter Beacons")]),n("table",{staticClass:"table border"},[e._m(0),e._l(e.teleport_beacons,(function(t){return n("tr",{key:t.ref,staticClass:"item border"},[n("td",[e._v(e._s(t.beacon_name))]),n("td",[n("vui-button",{attrs:{params:{beacon:t.ref,name:t.beacon_name}}},[e._v("Lock On")])],1)])}))],2),n("h3",[e._v("Tracking Implants")]),n("table",{staticClass:"table border"},[e._m(1),e._l(e.teleport_implants,(function(t){return n("tr",{key:t.ref,staticClass:"item border"},[n("td",[e._v(e._s(t.implant_name))]),n("td",[n("vui-button",{attrs:{params:{implant:t.ref,name:t.implant_name}}},[e._v("Lock On")])],1)])}))],2)],1)},r=[function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("tr",{staticClass:"header border"},[n("th",[e._v("Beacon Name")]),n("th",[e._v("Action")])])},function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("tr",{staticClass:"header border"},[n("th",[e._v("Implant Name")]),n("th",[e._v("Action")])])}],s={data:function(){return this.$root.$data.state}},o=s,a=(n("95d1"),n("2877")),c=Object(a["a"])(o,i,r,!1,null,"561826ba",null);t["default"]=c.exports},"2fa9":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.active?n("div",[e.$root.$data.assets["front"]?n("div",{staticClass:"photos"},[n("vui-img",{attrs:{name:"front"}}),n("br"),n("vui-img",{attrs:{name:"side"}})],1):e._e(),n("vui-group",[n("vui-group-item",{attrs:{label:"ID:"}},[e._v(e._s(e.active.id))]),n("vui-group-item",{attrs:{label:"Name:"}},[n("view-records-field",{attrs:{editable:(1&e.editable)>0,path:"active.name"}})],1),n("vui-group-item",{attrs:{label:"Age:"}},[n("view-records-field",{attrs:{editable:(1&e.editable)>0,path:"active.age"}})],1),n("vui-group-item",{attrs:{label:"Sex:"}},[n("view-records-field",{attrs:{editable:(1&e.editable)>0,path:"active.sex"}})],1),n("vui-group-item",{attrs:{label:"Rank:"}},[n("view-records-field",{attrs:{editable:(1&e.editable)>0,path:"active.rank"}})],1),n("vui-group-item",{attrs:{label:"Physical Status:"}},[n("view-records-field",{attrs:{editable:(1&e.editable)>0,path:"active.physical_status"}},[n("select",{directives:[{name:"model",rawName:"v-model",value:e.$root.$data.state.editingvalue,expression:"$root.$data.state.editingvalue"}],on:{change:function(t){var n=Array.prototype.filter.call(t.target.options,(function(e){return e.selected})).map((function(e){var t="_value"in e?e._value:e.value;return t}));e.$set(e.$root.$data.state,"editingvalue",t.target.multiple?n:n[0])}}},e._l(e.choices.physical_status,(function(t){return n("option",{key:t,domProps:{value:t}},[e._v(e._s(t))])})),0)])],1),n("vui-group-item",{attrs:{label:"Mental Status:"}},[n("view-records-field",{attrs:{editable:(1&e.editable)>0,path:"active.mental_status"}},[n("select",{directives:[{name:"model",rawName:"v-model",value:e.$root.$data.state.editingvalue,expression:"$root.$data.state.editingvalue"}],on:{change:function(t){var n=Array.prototype.filter.call(t.target.options,(function(e){return e.selected})).map((function(e){var t="_value"in e?e._value:e.value;return t}));e.$set(e.$root.$data.state,"editingvalue",t.target.multiple?n:n[0])}}},e._l(e.choices.mental_status,(function(t){return n("option",{key:t,domProps:{value:t}},[e._v(e._s(t))])})),0)])],1),n("vui-group-item",{attrs:{label:"Fingerprint:"}},[n("view-records-field",{attrs:{editable:(1&e.editable)>0,path:"active.fingerprint"}})],1),!e.hideAdvanced&&1&e.avaivabletypes?[n("vui-group-item",{attrs:{label:"Species:"}},[n("view-records-field",{attrs:{editable:(1&e.editable)>0,path:"active.species"}})],1),n("vui-group-item",{attrs:{label:"Citizenship:"}},[n("view-records-field",{attrs:{editable:(1&e.editable)>0,path:"active.citizenship"}})],1),n("vui-group-item",{attrs:{label:"Religion:"}},[n("view-records-field",{attrs:{editable:(1&e.editable)>0,path:"active.religion"}})],1),n("vui-group-item",{attrs:{label:"Employer:"}},[n("view-records-field",{attrs:{editable:(1&e.editable)>0,path:"active.employer"}})],1),n("vui-group-item",{attrs:{label:"Employment/skills summary:"}},[n("view-records-field",{attrs:{editable:(1&e.editable)>0,path:"active.notes"}},[n("textarea",{directives:[{name:"model",rawName:"v-model",value:e.$root.$data.state.editingvalue,expression:"$root.$data.state.editingvalue"}],domProps:{value:e.$root.$data.state.editingvalue},on:{input:function(t){t.target.composing||e.$set(e.$root.$data.state,"editingvalue",t.target.value)}}})])],1),n("vui-group-item",{attrs:{label:"CCIA Notes:"}},[e._v(e._s(e.active.ccia_record))]),n("vui-group-item",{attrs:{label:"CCIA Actions:"}},e._l(e.active.ccia_actions,(function(t){return n("div",{key:t[0]},[n("h5",[e._v(e._s(t[0])+" "),n("i",[e._v("("+e._s(t[1])+")")])]),n("div",{domProps:{innerHTML:e._s(t[3].replace("\r\n","
"))}}),n("vui-button",{attrs:{params:{_openurl:t[4]}}},[e._v("Open")])],1)})),0)]:e._e(),e._t("default")],2),n("div",{staticClass:"bottombuttons"},[n("vui-button",{attrs:{params:{setactive:"null"},"push-state":""},on:{click:function(t){e.activeview="list"}}},[e._v("Unload Record")]),e.canprint?n("vui-button",{attrs:{params:{print:"active"}}},[e._v("Print")]):e._e(),!e.hideAdvanced&&1&e.editable?n("vui-button",{staticClass:"danger",attrs:{params:{deleterecord:1},icon:"trash-alt"}},[e._v("Delete record")]):e._e()],1)],1):e._e()},r=[],s=(n("ac1f"),n("5319"),{data:function(){return this.$root.$data.state},props:{hideAdvanced:{type:Boolean,default:!1}},filters:{replace:function(e,t,n){return e.replace(t,n)}}}),o=s,a=(n("f046"),n("2877")),c=Object(a["a"])(o,i,r,!1,null,"c51ad1c4",null);t["default"]=c.exports},3280:function(e,t,n){"use strict";var i=n("ebb5"),r=n("e58c"),s=i.aTypedArray,o=i.exportTypedArrayMethod;o("lastIndexOf",(function(e){return r.apply(s(this),arguments)}))},3315:function(e,t,n){"use strict";n("b959")},"33f2":function(e,t,n){"use strict";n("f217")},3410:function(e,t,n){var i=n("23e7"),r=n("d039"),s=n("7b0b"),o=n("e163"),a=n("e177"),c=r((function(){o(1)}));i({target:"Object",stat:!0,forced:c,sham:!a},{getPrototypeOf:function(e){return o(s(e))}})},"342f":function(e,t,n){var i=n("d066");e.exports=i("navigator","userAgent")||""},"34ac":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[e.editing?[e._t("default",[n("input",{directives:[{name:"model",rawName:"v-model",value:e.gdata.state.editingvalue,expression:"gdata.state.editingvalue"}],domProps:{value:e.gdata.state.editingvalue},on:{input:function(t){t.target.composing||e.$set(e.gdata.state,"editingvalue",t.target.value)}}})]),n("vui-button",{attrs:{icon:"check"},on:{click:e.save}})]:[n("span",{staticStyle:{"white-space":"pre-wrap"}},[e._v(e._s(e.rvalue))]),e._v(" "),e.reditable||e.editButton?n("vui-button",{staticStyle:{"white-space":"pre-wrap"},attrs:{icon:"pen"},on:{click:e.beginEditing}},[e._v(e._s(e.editbtnname))]):e._e()]],2)},r=[],s=(n("ac1f"),n("5319"),n("1276"),n("025e")),o={data:function(){return{editing:!1,gdata:this.$root.$data,startEditHandler:null}},props:{value:{type:String,default:""},path:{type:String,default:null},editable:{type:Boolean,default:!1},editButton:{type:String,default:null}},computed:{reditable:function(){return!!this.path&&this.editable},rvalue:function(){return this.path?s["a"].dotNotationRead(this.gdata.state,this.path):this.value},editbtnname:function(){return this.editButton?this.editButton:""}},methods:{beginEditing:function(){var e=this;(this.reditable||this.editButton)&&(this.$root.$emit("record-field-start-editing"),this.gdata.state.editingvalue=this.rvalue,this.startEditHandler=function(){e.endEditing()},this.$root.$on("record-field-start-editing",this.startEditHandler),this.editing=!0)},endEditing:function(){(this.reditable||this.editButton)&&(this.editing=!1,this.$root.$off("record-field-start-editing",this.startEditHandler))},save:function(){(this.reditable||this.editButton)&&(this.endEditing(),this.editButton?this.$emit("save",this.gdata.state.editingvalue):s["a"].sendToTopic({editrecord:{value:this.gdata.state.editingvalue,key:this.path.split(".")}}))}},filters:{replace:function(e,t,n){return e.replace(t,n)}}},a=o,c=(n("3c5a"),n("2877")),l=Object(c["a"])(a,i,r,!1,null,"a9c97a54",null);t["default"]=l.exports},"35a1":function(e,t,n){var i=n("f5df"),r=n("3f8c"),s=n("b622"),o=s("iterator");e.exports=function(e){if(void 0!=e)return e[o]||e["@@iterator"]||r[i(e)]}},"35b3":function(e,t,n){var i=n("23e7");i({target:"Number",stat:!0},{EPSILON:Math.pow(2,-52)})},3722:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("vui-group",[n("vui-group-item",{attrs:{label:"Status:"}},[n("vui-button",{class:{selected:e.on},attrs:{params:{toggleStatus:1}}},[e._v("On")]),n("vui-button",{class:{selected:!e.on},attrs:{params:{toggleStatus:1}}},[e._v("Off")])],1),n("vui-group-item",{attrs:{label:"Power Level:"}},[n("vui-button",{class:{selected:20==e.powerSetting},attrs:{params:{setPower:20}}},[e._v("1")]),n("vui-button",{class:{selected:40==e.powerSetting},attrs:{params:{setPower:40}}},[e._v("2")]),n("vui-button",{class:{selected:60==e.powerSetting},attrs:{params:{setPower:60}}},[e._v("3")]),n("vui-button",{class:{selected:80==e.powerSetting},attrs:{params:{setPower:80}}},[e._v("4")]),n("vui-button",{class:{selected:100==e.powerSetting},attrs:{params:{setPower:100}}},[e._v("5")])],1),n("vui-group-item",{attrs:{label:"Gas Pressure:"}},[e._v(" "+e._s(e.gasPressure)+" kPa ")]),n("h3",[e._v("Gas Temperature")]),n("vui-group-item",{attrs:{label:"Current:"}},[n("vui-progress",{class:e.gasTemperatureClass,attrs:{value:e.gasTemperature,max:e.maxGasTemperature,min:e.minGasTemperature}},[e._v(" "+e._s(e.gasTemperature)+" K ")])],1),n("vui-group-item",{attrs:{label:"Target:"}},[n("vui-progress",{attrs:{value:e.targetGasTemperature,max:e.maxGasTemperature,min:e.minGasTemperature}},[e._v(" "+e._s(e.targetGasTemperature)+" K ")]),n("div",{staticStyle:{clear:"both","padding-top":"4px"}},[n("vui-button",{attrs:{disabled:e.targetGasTemperature<=e.minGasTemperature,params:{temp:-100}}},[e._v("-")]),n("vui-button",{attrs:{disabled:e.targetGasTemperature<=e.minGasTemperature,params:{temp:-10}}},[e._v("-")]),n("vui-button",{attrs:{disabled:e.targetGasTemperature<=e.minGasTemperature,params:{temp:-1}}},[e._v("-")]),n("vui-button",{attrs:{disabled:e.targetGasTemperature>=e.maxGasTemperature,params:{temp:1}}},[e._v("+")]),n("vui-button",{attrs:{disabled:e.targetGasTemperature>=e.maxGasTemperature,params:{temp:10}}},[e._v("+")]),n("vui-button",{attrs:{disabled:e.targetGasTemperature>=e.maxGasTemperature,params:{temp:100}}},[e._v("+")])],1)],1)],1)},r=[],s={data:function(){return this.$root.$data.state},computed:{gasTemperatureClass:function(){return null!=this.temperatureBadTop&&this.gasTemperature>this.temperatureBadTop||null!=this.temperatureBadBottom&&this.gasTemperaturethis.temperatureAvgBottom?"average":"good"}}},o=s,a=n("2877"),c=Object(a["a"])(o,i,r,!1,null,null,null);t["default"]=c.exports},3729:function(e,t,n){var i=n("9e69"),r=n("00fd"),s=n("29f3"),o="[object Null]",a="[object Undefined]",c=i?i.toStringTag:void 0;function l(e){return null==e?void 0===e?a:o:c&&c in Object(e)?r(e):s(e)}e.exports=l},"37e8":function(e,t,n){var i=n("83ab"),r=n("9bf2"),s=n("825a"),o=n("df75");e.exports=i?Object.defineProperties:function(e,t){s(e);var n,i=o(t),a=i.length,c=0;while(a>c)r.f(e,n=i[c++],t[n]);return e}},3831:function(e,t,n){"use strict";n("9e80")},3851:function(e,t,n){var i={"./header/default.vue":"f3ce","./header/handles.vue":"9aa7","./header/minimal.vue":"d657","./header/modular-computer.vue":"4709","./view/admin/permissions-panel.vue":"86eb","./view/admin/player-panel.vue":"3930","./view/console/atmocontrol/injector.vue":"614c","./view/console/atmocontrol/main.vue":"86ad","./view/console/atmocontrol/supermatter.vue":"df0b","./view/console/atmocontrol/tank.vue":"508b","./view/devices/aicard.vue":"4874","./view/devices/assembly/infrared.vue":"f095","./view/devices/assembly/proximity.vue":"253b","./view/devices/assembly/signaler.vue":"4626","./view/devices/assembly/timer.vue":"b81a","./view/devices/circuit/printer.vue":"ffb3","./view/devices/gps/gps.vue":"0566","./view/devices/jammer.vue":"050e","./view/devices/oredetector.vue":"0687","./view/devices/quikpay/confirmation.vue":"47db","./view/devices/quikpay/main.vue":"4678","./view/late-choices.vue":"2653","./view/machinery/atmospherics/canister.vue":"2575","./view/machinery/atmospherics/freezer.vue":"3722","./view/machinery/chemdisp.vue":"0519","./view/machinery/cooking/microwave.vue":"a589","./view/machinery/power/pacman.vue":"3910","./view/machinery/smartfridge.vue":"19fa","./view/machinery/teleporter.vue":"2d39","./view/machinery/vending.vue":"7dc7","./view/manifest.vue":"f264","./view/mcomputer/atmosphere.vue":"4149","./view/mcomputer/chat/channel-btn.vue":"1dbb","./view/mcomputer/chat/chat.vue":"3d8a","./view/mcomputer/chat/explore.vue":"421c","./view/mcomputer/chat/index.vue":"9b7e","./view/mcomputer/chemcodex.vue":"ec72","./view/mcomputer/command/accountdb.vue":"da1f","./view/mcomputer/command/teleporter.vue":"76a2","./view/mcomputer/janitor.vue":"e786","./view/mcomputer/medical/sensors.vue":"f309","./view/mcomputer/ntsl/edit.vue":"a3f9","./view/mcomputer/ntsl/list.vue":"6292","./view/mcomputer/ntsl/main.vue":"a7c6","./view/mcomputer/ntsl/program.vue":"2480","./view/mcomputer/pai/directives.vue":"d3c6","./view/mcomputer/pai/doorjack.vue":"3b8a","./view/mcomputer/pai/radio.vue":"207c","./view/mcomputer/security/guntracker.vue":"cb10","./view/mcomputer/security/implanttracker.vue":"ac02","./view/mcomputer/security/penalcontroller.vue":"2c9a","./view/mcomputer/signaler.vue":"db4fb","./view/mcomputer/system/config.vue":"07c3","./view/mcomputer/system/downloader.vue":"019f","./view/mcomputer/system/main.vue":"13c9","./view/mcomputer/system/manager.vue":"d3c8","./view/medical/bodyscanner.vue":"1062","./view/medical/sleeper.vue":"b087","./view/misc/boardgame.vue":"ef41","./view/misc/doors.vue":"3a07","./view/misc/ghostspawner.vue":"1503","./view/misc/maglock-config.vue":"0ea6","./view/misc/maglock.vue":"20a6","./view/misc/pai/recruit.vue":"9324","./view/misc/voting.vue":"e31d","./view/paperwork/fax.vue":"9556","./view/paperwork/photocopier.vue":"6a01","./view/records/field.vue":"34ac","./view/records/general.vue":"2fa9","./view/records/incident.vue":"256f","./view/records/list-locked.vue":"c0f7","./view/records/list-virus.vue":"8385","./view/records/list.vue":"ac4c","./view/records/login.vue":"a8bb","./view/records/main.vue":"cf32","./view/records/medical.vue":"203b","./view/records/security.vue":"b6db","./view/records/virus.vue":"73f5","./view/turrets/control-part.vue":"10d4","./view/turrets/control.vue":"fb48","./view/vehicles/droppod.vue":"b14c","./view/vehicles/pussywagon.vue":"4d76","./view/vehicles/trainengine.vue":"08c0","./view/wanalyzer/analyzer.vue":"407e","./vui/button.vue":"5aa2","./vui/group-item.vue":"2704","./vui/group-row.vue":"74e7","./vui/group.vue":"48f3","./vui/img.vue":"810a","./vui/input/numeric.vue":"210c","./vui/input/search.vue":"419b","./vui/input/slider.vue":"0eec","./vui/item.vue":"faf6","./vui/progress.vue":"1253","./vui/tooltip.vue":"0ec3"};function r(e){var t=s(e);return n(t)}function s(e){if(!n.o(i,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return i[e]}r.keys=function(){return Object.keys(i)},r.resolve=s,e.exports=r,r.id="3851"},"38cf":function(e,t,n){var i=n("23e7"),r=n("1148");i({target:"String",proto:!0},{repeat:r})},"38d6":function(e,t,n){},3910:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("h3",[e._v("Status")]),n("vui-group",[n("vui-group-item",{attrs:{label:"Generator Status:"}},[e.active?n("span",{staticClass:"good"},[e._v("Online")]):n("span",{staticClass:"average"},[e._v("Offline")])]),n("vui-group-item",{attrs:{label:"Generator Control:"}},[e.active?n("vui-button",{attrs:{params:{action:"disable"},icon:"power-off"}},[e._v("STOP")]):n("vui-button",{attrs:{params:{action:"enable"},disabled:!!e.is_broken,icon:"power-off"}},[e._v("START")])],1)],1),n("h3",[e._v("Fuel")]),n("vui-group",[n("vui-group-item",{attrs:{label:"Fuel Type:"}},[e._v(e._s(e.fuel.fuel_type))]),n("vui-group-item",{attrs:{label:"Fuel Level:"}},[n("vui-progress",{attrs:{value:e.fuel.fuel_stored,max:e.fuel.fuel_capacity}},[e._v(e._s(Math.round(e.fuel.fuel_stored/e.fuel.fuel_capacity*100))+"%")])],1),n("vui-group-item",{class:{bad:0==e.fuel.fuel_stored,good:e.fuel.fuel_stored>0}},[e._v(e._s(e.fuel.fuel_stored)+" cm³ / "+e._s(e.fuel.fuel_capacity)+" cm³")]),e.fuel.fuel_usage>0&&e.active?n("vui-group-item",{attrs:{label:"Fuel Usage:"}},[e._v(e._s(e.fuel.fuel_usage)+" cm³/s - ("+e._s(Math.round(e.fuel.fuel_stored/e.fuel.fuel_usage))+" s remaining)")]):e._e(),n("vui-group-item",{attrs:{label:"Control:"}},[n("vui-button",{attrs:{params:{action:"eject"},disabled:!(!e.is_broken&&!e.is_ai),icon:"eject"}},[e._v("EJECT FUEL")])],1)],1),n("h3",[e._v("Output")]),n("vui-group",[n("vui-group-item",{attrs:{label:"Power Setting:"}},[n("span",{class:{bad:e.output_set>e.output_safe,good:e.output_set<=e.output_safe}},[e._v(e._s(e.output_set)+" / "+e._s(e.output_max)+" ("+e._s(e.output_watts)+" W)")])]),n("vui-group-item",{attrs:{label:"Control:"}},[n("vui-button",{attrs:{params:{action:"higher_power"},disabled:e.output_set==e.output_max}},[e._v("+")]),n("vui-button",{attrs:{params:{action:"lower_power"},disabled:e.output_set==e.output_min}},[e._v("-")])],1)],1),n("h3",[e._v("Temperature")]),n("vui-group",[n("vui-group-item",{attrs:{label:"Temperature:"}},[n("vui-progress",{class:e.getTemperatureClass(e.temperature_current),attrs:{value:e.temperature_current,min:e.temperature_min,max:1.5*e.temperature_max}},[e._v(e._s(Math.max(e.temperature_min,e.temperature_current))+"C")])],1),n("vui-group-item",{attrs:{label:"Generator Status:"}},[e.temperature_overheat>50?n("span",{staticClass:"bad"},[e._v("DANGER: CRITICAL OVERHEAT! Deactivate generator immediately!")]):e.temperature_overheat>20?n("span",{staticClass:"average"},[e._v("WARNING: Overheating!")]):e.temperature_overheat>1?n("span",{staticClass:"average"},[e._v("Temperature High")]):n("span",{staticClass:"good"},[e._v("Optimal")])])],1)],1)},r=[],s={data:function(){return this.$root.$data.state},methods:{getTemperatureClass:function(e){return e<.8*this.$root.$data.state.temperature_max?"good":e0},staticStyle:{width:"12em"},attrs:{value:e.gs.wtime,min:e.s.plua_main,max:e.s.plu_main||10}},[e._v(" "+e._s(e.mainMsg)+" ")]),n("vui-button",{attrs:{disabled:0!=e.s.plu_main,params:{command:"main_power"}}},[e._v("Interrupt")])],1),n("vui-group-item",{attrs:{label:"Backup power:"}},[n("vui-progress",{class:{good:0==e.s.plu_back||0==e.s.plu_main,bad:-1==e.s.plu_back&&0!=e.s.plu_main,average:e.s.plu_back>0},staticStyle:{width:"12em"},attrs:{value:e.gs.wtime,min:e.s.plua_back,max:e.s.plu_back||10}},[e._v(" "+e._s(e.backupMsg)+" ")]),n("vui-button",{attrs:{disabled:0!=e.s.plu_back,params:{command:"backup_power"}}},[e._v("Interrupt")])],1),n("vui-group-item",{attrs:{label:"Electrified status:"}},[n("vui-progress",{class:{good:0==e.s.ele,bad:-1==e.s.ele,average:e.s.ele>0},staticStyle:{width:"12em"},attrs:{value:e.gs.wtime,min:e.s.elea,max:e.s.ele||10}},[e._v(" "+e._s(e.eleMsg)+" ")]),n("vui-button",{attrs:{disabled:0==e.s.ele,params:{command:"electrify_permanently",activate:0}}},[e._v("R")]),e.s.isAdmin||!e.s.isai?[n("vui-button",{attrs:{disabled:e.s.ele>0,params:{command:"electrify_temporary",activate:1}}},[e._v("T")]),n("vui-button",{attrs:{disabled:-1==e.s.ele,params:{command:"electrify_permanently",activate:1}}},[e._v("P")])]:e._e()],2),n("vui-group-item"),n("vui-group-item",{key:e.k,attrs:{set:e.k="bolts",label:"Bolts:"}},[n("vui-button",{class:{on:e.s[e.k]},staticStyle:{"min-width":"6em"},attrs:{disabled:!(e.s.aiCanBolt||!e.s.isai||e.s.isAdmin),params:{command:e.k,activate:0}}},[e._v("Raised")]),n("vui-button",{class:{on:!e.s[e.k]},staticStyle:{"min-width":"6em"},attrs:{disabled:!(e.s.aiCanBolt||!e.s.isai||e.s.isAdmin),params:{command:e.k,activate:1}}},[e._v("Dropped")]),e.s.boltsOverride&&e.s[e.k]?n("vui-button",{staticClass:"danger",staticStyle:{"min-width":"6em"},attrs:{params:{command:"bolts_override",activate:1}}},[e._v("Drop Now")]):e._e(),e.s.boltsOverride&&!e.s[e.k]?n("vui-button",{staticClass:"danger",staticStyle:{"min-width":"6em"},attrs:{params:{command:"bolts_override",activate:0}}},[e._v("Raise Now")]):e._e()],1),e._l(e.commands,(function(t,i){return n("vui-group-item",{key:i,attrs:{label:t.name+":"}},[n("vui-button",{class:{on:e.s[i]},staticStyle:{"min-width":"6em"},attrs:{params:{command:i,activate:t.i?1:0}}},[e._v(e._s(t.et||"Enabled"))]),n("vui-button",{class:{on:!e.s[i]&&!t.danger,danger:!e.s[i]&&t.danger},staticStyle:{"min-width":"6em"},attrs:{disabled:!(!t.a||!e.s.isai||e.s.isAdmin),params:{command:i,activate:t.i?0:1}}},[e._v(e._s(t.dt||"Disabled"))])],1)}))],2)],1)},r=[],s={data:function(){var e=this.$root.$data,t=e.state;return{gs:e,s:t,commands:{idscan:{name:"IdScan",i:!0},lights:{name:"Bolt Lights",i:!0},safeties:{name:"Safeties",et:"Nominal",dt:"Overridden",danger:!0,a:!0},timing:{name:"Timing",et:"Nominal",dt:"Overridden",danger:!0},open:{name:"Door State",et:"Opened",dt:"Closed",i:1}}}},computed:{mainMsg:function(){return this.getPowerStatusMessage(this.s.plu_main,this.gs.wtime)},backupMsg:function(){return this.getPowerStatusMessage(this.s.plu_back,this.gs.wtime)},eleMsg:function(){if(0==this.s.ele)return"Safe";if(-1==this.s.ele)return"Permanently";var e=Math.max(Math.round((this.s.ele-this.gs.wtime)/10),0);return"".concat(e,"s left")}},methods:{getPowerStatusMessage:function(e,t){if(-1==e)return"Offline";if(0==e)return"Online";var n=Math.max(Math.round((e-t)/10),0);return"Interrupted, ".concat(n,"s left")}}},o=s,a=n("2877"),c=Object(a["a"])(o,i,r,!1,null,null,null);t["default"]=c.exports},"3a7b":function(e,t,n){"use strict";var i=n("ebb5"),r=n("b727").findIndex,s=i.aTypedArray,o=i.exportTypedArrayMethod;o("findIndex",(function(e){return r(s(this),e,arguments.length>1?arguments[1]:void 0)}))},"3aaf":function(e,t,n){},"3b8a":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("vui-group",[n("vui-group-item",{attrs:{label:"Cable:"}},[e.connected?n("span",[e._v("Connected")]):e.extended?n("span",[e._v("Extended")]):n("vui-button",{attrs:{params:{extend:1}}},[e._v("Retracted")])],1),e.connected?n("vui-group-item",{attrs:{label:"Hack:"}},[e.ishacking?[n("vui-progress",{attrs:{max:1e3,value:e.progress}},[e._v(e._s(e.progress/10)+"%")]),n("vui-button",{attrs:{params:{cancel:1}}},[e._v("Cancel")])]:n("vui-button",{attrs:{params:{hack:1}}},[e._v("Start")])],2):e.aborted?n("vui-group-item",[n("div",{staticClass:"bad"},[e._v("Hack aborted!")])]):e._e()],1)],1)},r=[],s={data:function(){return this.$root.$data.state}},o=s,a=n("2877"),c=Object(a["a"])(o,i,r,!1,null,"2c69059a",null);t["default"]=c.exports},"3bb1":function(e,t,n){"use strict";n("2b55")},"3bbe":function(e,t,n){var i=n("861d");e.exports=function(e){if(!i(e)&&null!==e)throw TypeError("Can't set "+String(e)+" as a prototype");return e}},"3c5a":function(e,t,n){"use strict";n("bb3d")},"3c5d":function(e,t,n){"use strict";var i=n("ebb5"),r=n("50c4"),s=n("182d"),o=n("7b0b"),a=n("d039"),c=i.aTypedArray,l=i.exportTypedArrayMethod,u=a((function(){new Int8Array(1).set({})}));l("set",(function(e){c(this);var t=s(arguments.length>1?arguments[1]:void 0,1),n=this.length,i=o(e),a=r(i.length),l=0;if(a+t>n)throw RangeError("Wrong length");while(l=n.length?{value:void 0,done:!0}:(e=i(n,r),t.index+=e.length,{value:e,done:!1})}))},"3d8a":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("h3",[e._v(e._s(e.channel.title))]),n("div",[e.channel.direct?e._e():[n("vui-button",{attrs:{params:{leave:e.reference}},on:{click:function(t){return e.$emit("on-leave")}}},[e._v("Leave")])],e.channel.can_manage?[null!=e.password?[n("input",{directives:[{name:"model",rawName:"v-model",value:e.password,expression:"password"}],attrs:{type:"text"},domProps:{value:e.password},on:{keydown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.set_password(t)},input:function(t){t.target.composing||(e.password=t.target.value)}}}),n("vui-button",{on:{click:e.set_password}},[e._v("Set password")])]:e.channel.direct?e._e():n("vui-button",{on:{click:function(t){e.password=""}}},[e._v("Set password")]),null!=e.title?[n("input",{directives:[{name:"model",rawName:"v-model",value:e.title,expression:"title"}],attrs:{type:"text"},domProps:{value:e.title},on:{keydown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.set_title(t)},input:function(t){t.target.composing||(e.title=t.target.value)}}}),n("vui-button",{on:{click:e.set_title}},[e._v("Change title")])]:e.channel.direct?e._e():n("vui-button",{on:{click:function(t){e.title=e.channel.title}}},[e._v("Change title")]),n("vui-button",{attrs:{params:{delete:e.reference}},on:{click:function(t){return e.$emit("on-leave")}}},[e._v("Delete channel")])]:e._e()],2),n("div",e._l(e.channel.users,(function(t,i){return n("div",{key:i},[e._v(" "+e._s(t)+" "),e.channel.can_manage&&!e.channel.direct?n("vui-button",{attrs:{params:{kick:{target:e.reference,user:i}}}},[e._v("Kick")]):e._e()],1)})),0),n("div",{ref:"chat",staticClass:"message-chat"},e._l(e.messages,(function(t,i){return n("div",{key:i},[e._v(e._s(t))])})),0),n("div",{staticClass:"message-container"},[n("input",{directives:[{name:"model",rawName:"v-model",value:e.send_buffer,expression:"send_buffer"}],staticClass:"message-input",attrs:{type:"text"},domProps:{value:e.send_buffer},on:{keydown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.send_msg(t)},input:function(t){t.target.composing||(e.send_buffer=t.target.value)}}}),n("vui-button",{staticClass:"message-send",on:{click:e.send_msg}},[e._v("Send")])],1)])},r=[],s=n("025e"),o={data:function(){return{s:this.$root.$data.state,send_buffer:"",password:null,title:null,wasAtBottom:!0}},computed:{channel:function(){return this.s.channels[this.reference]},messages:function(){return this.channel.msg}},props:{reference:{type:String,default:""}},methods:{send_msg:function(){Object(s["b"])({send:{message:this.send_buffer,target:this.reference}}),this.send_buffer=""},set_password:function(){Object(s["b"])({set_password:{target:this.reference,password:this.password}}),this.password=null},set_title:function(){Object(s["b"])({change_title:{target:this.reference,title:this.title}}),this.title=null},scrollBottom:function(){var e=this.$refs.chat;e.scrollTop=e.scrollHeight}},mounted:function(){this.scrollBottom()},beforeUpdate:function(){var e=this.$refs.chat;this.wasAtBottom=e.scrollHeight-e.scrollTop===e.clientHeight},updated:function(){this.wasAtBottom&&this.scrollBottom()}},a=o,c=(n("715b"),n("2877")),l=Object(c["a"])(a,i,r,!1,null,"32f14c20",null);t["default"]=l.exports},"3ea3":function(e,t,n){var i=n("23e7"),r=n("f748"),s=Math.abs,o=Math.pow;i({target:"Math",stat:!0},{cbrt:function(e){return r(e=+e)*o(s(e),1/3)}})},"3f3a":function(e,t,n){var i=n("23e7"),r=n("83ab"),s=n("825a"),o=n("c04e"),a=n("9bf2"),c=n("d039"),l=c((function(){Reflect.defineProperty(a.f({},1,{value:1}),1,{value:2})}));i({target:"Reflect",stat:!0,forced:l,sham:!r},{defineProperty:function(e,t,n){s(e);var i=o(t,!0);s(n);try{return a.f(e,i,n),!0}catch(r){return!1}}})},"3f8c":function(e,t){e.exports={}},"3fcc":function(e,t,n){"use strict";var i=n("ebb5"),r=n("b727").map,s=n("4840"),o=i.aTypedArray,a=i.aTypedArrayConstructor,c=i.exportTypedArrayMethod;c("map",(function(e){return r(o(this),e,arguments.length>1?arguments[1]:void 0,(function(e,t){return new(a(s(e,e.constructor)))(t)}))}))},4057:function(e,t,n){var i=n("23e7"),r=Math.hypot,s=Math.abs,o=Math.sqrt,a=!!r&&r(1/0,NaN)!==1/0;i({target:"Math",stat:!0,forced:a},{hypot:function(e,t){var n,i,r=0,a=0,c=arguments.length,l=0;while(a0?(i=n/l,r+=i*i):r+=n;return l===1/0?1/0:l*o(r)}})},4069:function(e,t,n){var i=n("44d2");i("flat")},"407e":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[e.has_inserted?n("div",[n("b",[e._v("Analyzing "+e._s(e.name)+" ")]),n("br"),e.$root.$data.assets["icon"]?n("div",[n("vui-img",{attrs:{name:"icon"}})],1):e._e(),1==e.item?n("div",[n("table",{staticClass:"other"},[n("tr",[n("td",[e._v(" Damage type: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.damage_type)+" ")])]),n("tr",[n("td",[e._v(" Item's estimated force-rating: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.force)+" points")])]),n("tr",[n("td",[e._v(" Item's estimated throw force-rating: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.throw_force)+" points ")])]),1==e.energy?[n("tr",[n("td",[e._v(" Item's estimated force-rating when activated: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.active_force)+" points ")])]),n("tr",[n("td",[e._v(" Item's estimated throw force-rating when activated: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.active_throw_force)+" points")])]),n("tr",[n("td",[e._v(" Base block chance is: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.base_block_chance)+"% ")])]),n("tr",[n("td",[e._v(" Base reflect chance is: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.base_reflectchance)+"% ")])]),n("tr",[n("td",[e._v(" Item's estimated shield rating: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.shield_power)+" points")])]),n("tr",[n("td",[e._v(" Can block bullets: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.can_block)+" ")])])]:e._e(),n("tr",[n("td",[e._v(" Is sharp:")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.sharp)+" ")])]),n("tr",[n("td",[e._v(" Chance to dismember: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.edge)+" ")])]),n("tr",[n("td",[e._v(" Item's estimated armor penetration rating: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.penetration)+" points")])])],2)]):e._e(),1==e.gun?n("div",{staticClass:"active_energy"},[n("table",{staticClass:"other"},[n("tr",[n("td",[e._v(" Maximum shots: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.max_shots)+" ")])]),n("tr",[n("td",[e._v(" Burst: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.burst)+" ")])]),n("tr",[n("td",[e._v(" Self recharge: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.recharge)+" ")])]),n("tr",[n("td",[e._v(" Recharge time: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.recharge_time)+" ")])]),n("tr",[n("td",[e._v(" Reliability: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.reliability)+" ")])]),n("br"),n("b",[e._v("First projectile information: ")]),n("br"),n("tr",[n("td",[e._v(" Projectile's estimated damage rating: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.damage)+" points")])]),n("tr",[n("td",[e._v(" Projectile's Damage type: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.damage_type)+" ")])]),n("tr",[n("td",[e._v(" Projectile's estimated armor penetration rating: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.armor_penetration)+" points")])]),n("tr",[n("td",[e._v(" Projectile's armor damage type: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.check_armor)+" ")])]),n("tr",[n("td",[e._v(" Projectile's shrapnel type: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.shrapnel_type)+" ")])]),n("tr",[n("td",[e._v(" Stun: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.stun)+" ")])]),e.secondary_damage?[n("br"),n("b",[e._v("Second projectile information: ")]),n("br"),n("tr",[n("td",[e._v(" Projectile's estimated damage rating: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.secondary_damage)+" points")])]),n("tr",[n("td",[e._v(" Projectile's damage type: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.secondary_damage_type)+" ")])]),n("tr",[n("td",[e._v(" Projectile's estimated armor penetration rating: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.secondary_armor_penetration)+" points")])]),n("tr",[n("td",[e._v(" Projectile's armor damage type: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.secondary_check_armor)+" ")])]),n("tr",[n("td",[e._v(" Projectile's shrapnel type: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.secondary_shrapnel_type)+" ")])]),n("tr",[n("td",[e._v(" Stun: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.secondary_stun)+" ")])])]:e._e()],2)]):e._e(),e.gun_mods?n("div",[n("br"),n("b",[e._v("Modular gun information: ")]),n("br"),n("table",{staticClass:"modular"},[e._m(0),e._l(e.gun_mods,(function(t,i){return n("tr",{key:i},[n("td",[e._v(e._s(i))]),e._l(t,(function(i,r){return n("td",{key:r},[e._v(" "+e._s(t[r])+" ")])}))],2)}))],2)]):e._e(),n("vui-button",{attrs:{params:{print:1}}},[e._v("Print Analysis")])],1):n("div",[n("b",[e._v("No item inserted, analysis unit inactive.")])])])},r=[function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("tr",[n("th",[e._v(" Name ")]),n("th",[e._v(" Reliability ")]),n("th",[e._v(" Damage modifier ")]),n("th",[e._v(" Fire delay modifier ")]),n("th",[e._v(" Number of shots modifier ")]),n("th",[e._v(" Burst modifier ")]),n("th",[e._v(" Accuracy modifier ")]),n("th",[e._v(" Repair tool ")])])}],s={data:function(){return this.$root.$data.state}},o=s,a=(n("e958"),n("2877")),c=Object(a["a"])(o,i,r,!1,null,"61a5d2f6",null);t["default"]=c.exports},"408a":function(e,t,n){var i=n("c6b6");e.exports=function(e){if("number"!=typeof e&&"Number"!=i(e))throw TypeError("Incorrect invocation");return+e}},"40d9":function(e,t,n){var i=n("23e7"),r=Math.floor,s=Math.log,o=Math.LOG2E;i({target:"Math",stat:!0},{clz32:function(e){return(e>>>=0)?31-r(s(e+.5)*o):32}})},4149:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[e.read?n("vui-group",[n("vui-group-item",{attrs:{label:"Pressure:"}},[e._v(" "+e._s(e.press.toFixed(1))+" ")]),n("vui-group-item",{attrs:{label:"Temperature:"}},[e._v(" "+e._s(e.temp.toFixed(1))+" K ("+e._s(e.tempC.toFixed(1))+"°C) ")]),n("vui-group-item",{attrs:{label:"Gases:"}},[e.gas.oxygen?n("span",{staticClass:"complist"},[e._v(e._s(e.gas.oxygen.toFixed(2))+" O"),n("sub",[e._v("2")])]):e._e(),e.gas.nitrogen?n("span",{staticClass:"complist"},[e._v(e._s(e.gas.nitrogen.toFixed(2))+" N")]):e._e(),e.gas.carbon_dioxide?n("span",{staticClass:"complist"},[e._v(e._s(e.gas.carbon_dioxide.toFixed(2))+" CO"),n("sub",[e._v("2"),n("sub")])]):e._e(),e.gas.phoron?n("span",{staticClass:"complist"},[e._v(e._s(e.gas.phoron.toFixed(2))+" PH")]):e._e(),e.gas.sleeping_agent?n("span",{staticClass:"complist"},[e._v(e._s(e.gas.sleeping_agent.toFixed(2))+" SA")]):e._e()])],1):n("span",{staticClass:"bad"},[e._v("Unable to obtain air reading!")])],1)},r=[],s={data:function(){return this.$root.$data.state}},o=s,a=(n("cbf4"),n("2877")),c=Object(a["a"])(o,i,r,!1,null,"4021d8a8",null);t["default"]=c.exports},4160:function(e,t,n){"use strict";var i=n("23e7"),r=n("17c2");i({target:"Array",proto:!0,forced:[].forEach!=r},{forEach:r})},"419b":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("input",{directives:[{name:"model",rawName:"v-model",value:e.searchValue,expression:"searchValue"}],attrs:{type:"text",placeholder:"Search..."},domProps:{value:e.searchValue},on:{input:function(t){t.target.composing||(e.searchValue=t.target.value)}}})},r=[],s=(n("e260"),n("d81d"),n("a9e3"),n("d3b7"),n("ac1f"),n("841c"),n("ddb0"),n("ffe7")),o=n.n(s),a={data:function(){return{fuse:null,searchValue:""}},mounted:function(){this.onFieldUpdate(this.searchValue)},props:{keys:{type:Array,default:function(){return[]}},includeScore:{type:Boolean,default:!1},threshold:{type:Number,default:.6},input:{type:Array,default:function(){return[]}},value:{type:Array,default:function(){return[]}}},watch:{keys:function(){this.fuse=null},includeScore:function(){this.fuse=null},threshold:function(){this.fuse=null},input:function(){this.onFieldUpdate(this.searchValue)},searchValue:function(e){this.onFieldUpdate(e)}},methods:{onFieldUpdate:function(e){this.initFuse();var t=this.fuse.search(e);0==t.length&&(t=this.includeScore?this.input.map((function(e){return{item:e,score:0}})):this.input),this.$emit("input",t)},initFuse:function(){if(null==this.fuse){var e={shouldSort:!0,findAllMatches:!0,keys:this.keys,includeScore:this.includeScore,threshold:this.threshold};this.fuse=new o.a(this.input,e)}else this.fuse.setCollection(this.input)}}},c=a,l=n("2877"),u=Object(l["a"])(c,i,r,!1,null,null,null);t["default"]=u.exports},"421c":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[null!=e.channelTitle?[n("input",{directives:[{name:"model",rawName:"v-model",value:e.channelTitle,expression:"channelTitle"}],attrs:{type:"text"},domProps:{value:e.channelTitle},on:{keydown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.new_channel()},input:function(t){t.target.composing||(e.channelTitle=t.target.value)}}}),n("vui-button",{on:{click:function(t){return e.new_channel()}}},[e._v("New channel")])]:n("vui-button",{on:{click:function(t){e.channelTitle=""}}},[e._v("New channel")]),n("br"),e._l(e.displayed,(function(t){return n("view-mcomputer-chat-channel-btn",{key:t,attrs:{re:t,ch:e.s.channels[t]}})})),n("h2",[e._v("Users:")]),n("vui-input-search",{attrs:{input:e.users,keys:["user"]},model:{value:e.users_result,callback:function(t){e.users_result=t},expression:"users_result"}}),n("br"),e._l(e.users_result,(function(t){return n("div",{key:t.ref},[n("vui-button",{attrs:{params:{direct:t.ref}}},[e._v(e._s(t.user))])],1)}))],2)},r=[],s=(n("4de4"),n("d81d"),n("4fad"),n("b64b"),n("025e")),o={data:function(){return{s:this.$root.$data.state,channelTitle:null,users_result:[]}},methods:{new_channel:function(){Object(s["b"])({new_channel:this.channelTitle}),this.channelTitle=null}},computed:{displayed:function(){var e=this;return Object.keys(this.s.channels).filter((function(t){return!e.s.channels[t].can_interact}))},users:function(){return Object.entries(this.s.users).map((function(e){return{ref:e[0],user:e[1]}}))}}},a=o,c=n("2877"),l=Object(c["a"])(a,i,r,!1,null,null,null);t["default"]=l.exports},"428f":function(e,t,n){var i=n("da84");e.exports=i},4310:function(e,t,n){},"44ad":function(e,t,n){var i=n("d039"),r=n("c6b6"),s="".split;e.exports=i((function(){return!Object("z").propertyIsEnumerable(0)}))?function(e){return"String"==r(e)?s.call(e,""):Object(e)}:Object},"44d2":function(e,t,n){var i=n("b622"),r=n("7c73"),s=n("9bf2"),o=i("unscopables"),a=Array.prototype;void 0==a[o]&&s.f(a,o,{configurable:!0,value:r(null)}),e.exports=function(e){a[o][e]=!0}},"44de":function(e,t,n){var i=n("da84");e.exports=function(e,t){var n=i.console;n&&n.error&&(1===arguments.length?n.error(e):n.error(e,t))}},"44e7":function(e,t,n){var i=n("861d"),r=n("c6b6"),s=n("b622"),o=s("match");e.exports=function(e){var t;return i(e)&&(void 0!==(t=e[o])?!!t:"RegExp"==r(e))}},"44fc":function(e,t,n){"use strict";n("b884")},"45fc":function(e,t,n){"use strict";var i=n("23e7"),r=n("b727").some,s=n("a640"),o=n("ae40"),a=s("some"),c=o("some");i({target:"Array",proto:!0,forced:!a||!c},{some:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}})},4626:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("div",[n("vui-button",{attrs:{params:{send:1}}},[e._v("Send Signal")])],1),n("div",[n("h3",[e._v("Frequency:")]),n("vui-button",{attrs:{params:{freq:-10}}},[e._v("--")]),n("vui-button",{attrs:{params:{freq:-2}}},[e._v("-")]),n("span",{staticClass:"value"},[e._v(e._s(e.frequency))]),n("vui-button",{attrs:{params:{freq:2}}},[e._v("+")]),n("vui-button",{attrs:{params:{freq:10}}},[e._v("++")])],1),n("div",[n("h3",[e._v("Code:")]),n("vui-button",{attrs:{params:{code:-5}}},[e._v("--")]),n("vui-button",{attrs:{params:{code:-1}}},[e._v("-")]),n("span",{staticClass:"value"},[e._v(e._s(e.code))]),n("vui-button",{attrs:{params:{code:1}}},[e._v("+")]),n("vui-button",{attrs:{params:{code:5}}},[e._v("++")])],1)])},r=[],s={data:function(){return this.$root.$data.state}},o=s,a=(n("c2e3"),n("2877")),c=Object(a["a"])(o,i,r,!1,null,"729622e4",null);t["default"]=c.exports},"466d":function(e,t,n){"use strict";var i=n("d784"),r=n("825a"),s=n("50c4"),o=n("1d80"),a=n("8aa5"),c=n("14c3");i("match",1,(function(e,t,n){return[function(t){var n=o(this),i=void 0==t?void 0:t[e];return void 0!==i?i.call(t,n):new RegExp(t)[e](String(n))},function(e){var i=n(t,e,this);if(i.done)return i.value;var o=r(e),l=String(this);if(!o.global)return c(o,l);var u=o.unicode;o.lastIndex=0;var d,h=[],f=0;while(null!==(d=c(o,l))){var p=String(d[0]);h[f]=p,""===p&&(o.lastIndex=a(l,s(o.lastIndex),u)),f++}return 0===f?null:h}]}))},4678:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[e._l(e.items,(function(t,i){return n("div",{key:i,staticStyle:{clear:"both"}},[e._v(" "+e._s(i)+": "+e._s(t)+" Credits "),n("div",{staticStyle:{float:"right"}},[n("vui-input-numeric",{attrs:{width:"2em"},model:{value:e.selection[i],callback:function(t){e.$set(e.selection,i,t)},expression:"selection[name]"}}),1==e.editmode?n("vui-button",{attrs:{params:{remove:i},width:"3em"}},[e._v("Delete")]):e._e()],1)])})),1==e.editmode?n("div",[n("input",{directives:[{name:"model",rawName:"v-model",value:e.tmp_name,expression:"tmp_name"}],domProps:{value:e.tmp_name},on:{input:function(t){t.target.composing||(e.tmp_name=t.target.value)}}}),n("vui-input-numeric",{attrs:{width:"3em","button-count":2},model:{value:e.tmp_price,callback:function(t){e.tmp_price=t},expression:"tmp_price"}}),n("vui-button",{attrs:{params:{add:{name:e.tmp_name,price:e.tmp_price}}}},[e._v("Add")]),n("vui-button",{attrs:{params:{accountselect:1},width:"3em"}},[e._v("Select Destination Account")])],1):e._e(),n("vui-button",{attrs:{params:{locking:1},width:"3em"}},[e._v("Toggle Lock")]),n("vui-button",{attrs:{params:{confirm:e.selection}}},[e._v("Confirm Selection")])],2)},r=[],s=n("025e"),o={data:function(){return this.$root.$data.state},methods:{accountChange:function(e){s["a"].sendToTopic({changeaccount:e})}}},a=o,c=n("2877"),l=Object(c["a"])(a,i,r,!1,null,null,null);t["default"]=l.exports},"46c6":function(e,t,n){},4709:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("header-default",[n("div",{staticClass:"maincont"},[n("b",{staticClass:"valign"},[e._v(e._s(e.time))]),e.state._PC.batteryicon&&e.state._PC.showbatteryicon?n("img",{staticClass:"valign",attrs:{src:e.state._PC.batteryicon}}):e._e(),e.state._PC.batterypercent&&e.state._PC.showbatteryicon?n("b",{staticClass:"valign"},[e._v(e._s(e.state._PC.batterypercent))]):e._e(),e.state._PC.ntneticon?n("img",{staticClass:"valign",attrs:{img:"",src:e.state._PC.ntneticon}}):e._e(),e.state._PC.apclinkicon?n("img",{staticClass:"valign",attrs:{img:"",src:e.state._PC.apclinkicon}}):e._e(),n("div",{staticStyle:{float:"right"}},[n("vui-button",{class:{selected:e.state._PC.flashlight},attrs:{params:{PC_togglelight:1},icon:"lightbulb","icon-only":""}}),e.state._PC.showexitprogram?[n("vui-button",{attrs:{params:{PC_minimize:1},icon:"window-minimize","icon-only":""}}),n("vui-button",{staticClass:"danger",attrs:{params:{PC_exit:1},icon:"window-close","icon-only":""}})]:[n("vui-button",{staticClass:"danger",attrs:{params:{PC_shutdown:1},icon:"power-off","icon-only":""}})]],2)])])},r=[],s=n("025e"),o={data:function(){return this.$root.$data},mounted:function(){this.$nextTick((function(){document.getElementById("content").classList.add("mcomputer")}))},computed:{time:function(){return Object(s["c"])(this.wtime)}}},a=o,c=(n("4ae3"),n("2877")),l=Object(c["a"])(a,i,r,!1,null,"1a3d9578",null);t["default"]=l.exports},4795:function(e,t,n){var i=n("23e7"),r=n("da84"),s=n("342f"),o=[].slice,a=/MSIE .\./.test(s),c=function(e){return function(t,n){var i=arguments.length>2,r=i?o.call(arguments,2):void 0;return e(i?function(){("function"==typeof t?t:Function(t)).apply(this,r)}:t,n)}};i({global:!0,bind:!0,forced:a},{setTimeout:c(r.setTimeout),setInterval:c(r.setInterval)})},"47db":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("h3",[e._v(" Selected Products:")]),e._l(e.items,(function(t,i){return n("div",{key:i},[e.selection[i]&&e.selection[i]>0?n("span",[e._v(" "+e._s(e.selection[i])+"x "+e._s(i)+": at "+e._s(t*e.selection[i])+" Credits ")]):e._e()])})),n("h3",[e._v(" Total: "+e._s(e.priceSum))]),n("h4",[e._v("Destination Account: "+e._s(e.destinationact))]),n("h3",[e._v("Please swipe your ID to pay.")]),n("vui-button",{attrs:{params:{return:1},width:"3em"}},[e._v("Return to order menu")])],2)},r=[],s=(n("13d5"),n("b64b"),{data:function(){return this.$root.$data.state},computed:{priceSum:function(){var e=this;return Object.keys(this.selection).reduce((function(t,n){return isNaN(t)?e.items[n]*e.selection[n]:t+e.items[n]*e.selection[n]}))}}}),o=s,a=n("2877"),c=Object(a["a"])(o,i,r,!1,null,null,null);t["default"]=c.exports},4840:function(e,t,n){var i=n("825a"),r=n("1c0b"),s=n("b622"),o=s("species");e.exports=function(e,t){var n,s=i(e).constructor;return void 0===s||void 0==(n=i(s)[o])?t:r(n)}},4874:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[e.has_ai?[n("vui-group",[n("vui-group-item",{attrs:{label:"Hardware Integrity"}},[e._v(e._s(e.hardware_integrity)+"%")]),n("vui-group-item",{attrs:{label:"Backup Capacitor"}},[e._v(e._s(e.backup_capacitor)+"%")])],1),e.has_laws?n("table",{staticClass:"borders"},[e._m(0),n("div",{staticClass:"itemLabelNarrow"},[e._v(" Laws: ")]),e._l(e.laws,(function(t){return n("tr",{key:t.index},[n("td",{attrs:{valign:"top"}},[e._v(e._s(t.index))]),n("td",[e._v(e._s(t.law))])])}))],2):n("span",{staticClass:"notice"},[e._v(" No laws found. ")]),e.operational?n("vui-group",[n("vui-group-item",{attrs:{label:"Radio Subspace Transceiver"}},[n("vui-button",{class:{selected:e.radio},attrs:{params:{radio:0}}},[e._v("Enabled")]),n("vui-button",{class:{danger:!e.radio},attrs:{params:{radio:1}}},[e._v("Disabled")])],1),n("vui-group-item",{attrs:{label:"Wireless Interface"}},[n("vui-button",{class:{selected:e.wireless},attrs:{params:{wireless:0}}},[e._v("Enabled")]),n("vui-button",{class:{danger:!e.wireless},attrs:{params:{wireless:1}}},[e._v("Disabled")])],1),e.flushing?n("vui-group-item",[n("span",{staticClass:"notice"},[e._v("AI wipe in progress...")])]):n("vui-group-item",{attrs:{label:"Wipe AI"}},[n("vui-button",{staticClass:"danger",attrs:{params:{wipe:1}}},[e._v("Wipe")])],1)],1):e._e()]:[e._v(" Stored AI: "),n("span",{staticClass:"notice"},[e._v("No AI detected.")])]],2)},r=[function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("tr",[n("td",{staticClass:"law_index"},[e._v("Index")]),n("td",[e._v("Law")])])}],s={data:function(){return this.$root.$data.state}},o=s,a=n("2877"),c=Object(a["a"])(o,i,r,!1,null,null,null);t["default"]=c.exports},"48f3":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[e._t("default")],2)},r=[],s=(n("d44d"),n("2877")),o={},a=Object(s["a"])(o,i,r,!1,null,"b2030120",null);t["default"]=a.exports},4930:function(e,t,n){var i=n("d039");e.exports=!!Object.getOwnPropertySymbols&&!i((function(){return!String(Symbol())}))},"498a":function(e,t,n){"use strict";var i=n("23e7"),r=n("58a8").trim,s=n("c8d2");i({target:"String",proto:!0,forced:s("trim")},{trim:function(){return r(this)}})},"4a9b":function(e,t,n){var i=n("74e8");i("Float64",(function(e){return function(t,n,i){return e(this,t,n,i)}}))},"4ae1":function(e,t,n){var i=n("23e7"),r=n("d066"),s=n("1c0b"),o=n("825a"),a=n("861d"),c=n("7c73"),l=n("0538"),u=n("d039"),d=r("Reflect","construct"),h=u((function(){function e(){}return!(d((function(){}),[],e)instanceof e)})),f=!u((function(){d((function(){}))})),p=h||f;i({target:"Reflect",stat:!0,forced:p,sham:p},{construct:function(e,t){s(e),o(t);var n=arguments.length<3?e:s(arguments[2]);if(f&&!h)return d(e,t,n);if(e==n){switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3])}var i=[null];return i.push.apply(i,t),new(l.apply(e,i))}var r=n.prototype,u=c(a(r)?r:Object.prototype),p=Function.apply.call(e,u,t);return a(p)?p:u}})},"4ae3":function(e,t,n){"use strict";n("6814")},"4c53":function(e,t,n){"use strict";var i=n("23e7"),r=n("857a"),s=n("af03");i({target:"String",proto:!0,forced:s("sub")},{sub:function(){return r(this,"sub","","")}})},"4caa":function(e,t,n){var i=n("a919"),r=n("76dd"),s=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,o="\\u0300-\\u036f",a="\\ufe20-\\ufe2f",c="\\u20d0-\\u20ff",l=o+a+c,u="["+l+"]",d=RegExp(u,"g");function h(e){return e=r(e),e&&e.replace(s,i).replace(d,"")}e.exports=h},"4cc0":function(e,t,n){},"4d63":function(e,t,n){var i=n("83ab"),r=n("da84"),s=n("94ca"),o=n("7156"),a=n("9bf2").f,c=n("241c").f,l=n("44e7"),u=n("ad6d"),d=n("9f7f"),h=n("6eeb"),f=n("d039"),p=n("69f3").set,g=n("2626"),m=n("b622"),v=m("match"),b=r.RegExp,y=b.prototype,w=/a/g,_=/a/g,x=new b(w)!==w,k=d.UNSUPPORTED_Y,A=i&&s("RegExp",!x||k||f((function(){return _[v]=!1,b(w)!=w||b(_)==_||"/a/i"!=b(w,"i")})));if(A){var C=function(e,t){var n,i=this instanceof C,r=l(e),s=void 0===t;if(!i&&r&&e.constructor===C&&s)return e;x?r&&!s&&(e=e.source):e instanceof C&&(s&&(t=u.call(e)),e=e.source),k&&(n=!!t&&t.indexOf("y")>-1,n&&(t=t.replace(/y/g,"")));var a=o(x?new b(e,t):b(e,t),i?this:y,C);return k&&n&&p(a,{sticky:n}),a},E=function(e){e in C||a(C,e,{configurable:!0,get:function(){return b[e]},set:function(t){b[e]=t}})},S=c(b),F=0;while(S.length>F)E(S[F++]);y.constructor=C,C.prototype=y,h(r,"RegExp",C)}g("RegExp")},"4d64":function(e,t,n){var i=n("fc6a"),r=n("50c4"),s=n("23cb"),o=function(e){return function(t,n,o){var a,c=i(t),l=r(c.length),u=s(o,l);if(e&&n!=n){while(l>u)if(a=c[u++],a!=a)return!0}else for(;l>u;u++)if((e||u in c)&&c[u]===n)return e||u||0;return!e&&-1}};e.exports={includes:o(!0),indexOf:o(!1)}},"4d76":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("h2",[e._v("Engine Status:")]),e.is_on?n("div",[e._v(" The engine is currently running. "),n("vui-button",{attrs:{params:{toggle_engine:1}}},[e._v("Stop")])],1):n("div",[e._v(" The engine is off. "),n("vui-button",{attrs:{disabled:!e.has_key||!e.has_cell,params:{toggle_engine:1}}},[e._v("Start")])],1),e.has_key?n("div",[e._v(" There is a key inserted into the ignition. "),n("vui-button",{attrs:{params:{key:1}}},[e._v("Remove Key")])],1):n("div",[e._v(" There is no key in the ignition. ")]),e.has_cell?n("div",[e._v(" Cell Charge: "),n("vui-progress",{attrs:{value:e.cell_charge,max:e.cell_max_charge,min:0}},[e._v(e._s(e.cell_charge)+"J")]),e._v(" "),n("vui-tooltip",{attrs:{label:"?"}},[e._v("The cell can be removed by using a screwdriver to open the maintenance panel, then using a crowbar to shimmy it out.")])],1):n("div",[e._v(" There is no cell installed. "),n("vui-tooltip",{attrs:{label:"?"}},[e._v("The cell can be installed by using a screwdriver to open the maintenance panel, then clicking on the engine with a compatible power cell.")])],1),e.is_towing?n("div",[e._v(" This engine is currently towing the "+e._s(e.tow)+". "),n("vui-button",{attrs:{params:{unlatch:1}}},[e._v("Unlatch")]),e._m(0),e.has_proper_trolley?n("div",[e.is_hoovering?n("div",[e._v(" The trolley is currently vacuuming. "),n("vui-button",{attrs:{params:{toggle_hoover:1}}},[e._v("Toggle")])],1):n("div",[e._v(" The trolley is not vacuuming. "),n("vui-button",{attrs:{disabled:!e.is_on,params:{toggle_hoover:1}}},[e._v("Toggle")])],1),n("div",[e._v(" Vacuum Capacity Remaining: "),n("vui-progress",{attrs:{value:e.vacuum_capacity,max:e.max_vacuum_capacity,min:0}},[e._v(e._s(e.vacuum_capacity))]),e._v(" "),n("vui-button",{attrs:{disabled:e.vacuum_capacity>=e.max_vacuum_capacity,params:{empty_hoover:1}}},[e._v("Empty")])],1),e.is_mopping?n("div",[e._v(" The trolley is currently mopping. "),n("vui-button",{attrs:{disabled:!e.is_on||!e.has_bucket||e.bucket_capacity<=0,params:{toggle_mops:1}}},[e._v("Toggle")])],1):n("div",[e._v(" The trolley is not mopping. "),n("vui-button",{attrs:{disabled:!e.is_on||!e.has_bucket,params:{toggle_mops:1}}},[e._v("Toggle")])],1),e.has_bucket?n("div",[e._v(" The trolley has a reagent container installed. "),n("vui-tooltip",{attrs:{label:"?"}},[e._v("The trolley must have a reagent container installed to draw reagents from, such as water or space cleaner. This can be done by opening the maintenance panel on the trolley with a screwdriver and clicking on it with a bucket. Similarly, with an open panel, it can be removed by using a wrench on it.")]),n("div",[e._v(" Container Reagents Remaining: "),n("vui-progress",{attrs:{value:e.bucket_capacity,max:e.max_bucket_capacity,min:0}},[e._v(e._s(e.bucket_capacity)+"u")])],1)],1):n("div",[e._v(" The trolley does not have a reagent container installed. "),n("vui-tooltip",{attrs:{label:"?"}},[e._v("The trolley must have a reagent container installed to draw reagents from, such as water or space cleaner. This can be done by opening the maintenance panel on the trolley with a screwdriver and clicking on it with a bucket. Similarly, with an open panel, it can be removed by using a wrench on it.")])],1)]):n("div",[e._v(" The wagon does not have the correct NT-X1 Vacuum Cleaner installed. ")])],1):n("div",[e._v(" This engine isn't towing anything currently. "),n("vui-tooltip",{attrs:{label:"?"}},[e._v("You can latch vehicles together by dragging from the vehicle you want to be the anchor point, to the trolley you wish to latch.")])],1)])},r=[function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("h2",[e._v("NT-X1 Vacuum Cleaner Status:")])])}],s={data:function(){return this.$root.$data.state}},o=s,a=n("2877"),c=Object(a["a"])(o,i,r,!1,null,null,null);t["default"]=c.exports},"4d90":function(e,t,n){"use strict";var i=n("23e7"),r=n("0ccb").start,s=n("9a0c");i({target:"String",proto:!0,forced:s},{padStart:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}})},"4de4":function(e,t,n){"use strict";var i=n("23e7"),r=n("b727").filter,s=n("1dde"),o=n("ae40"),a=s("filter"),c=o("filter");i({target:"Array",proto:!0,forced:!a||!c},{filter:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}})},"4df4":function(e,t,n){"use strict";var i=n("0366"),r=n("7b0b"),s=n("9bdd"),o=n("e95a"),a=n("50c4"),c=n("8418"),l=n("35a1");e.exports=function(e){var t,n,u,d,h,f,p=r(e),g="function"==typeof this?this:Array,m=arguments.length,v=m>1?arguments[1]:void 0,b=void 0!==v,y=l(p),w=0;if(b&&(v=i(v,m>2?arguments[2]:void 0,2)),void 0==y||g==Array&&o(y))for(t=a(p.length),n=new g(t);t>w;w++)f=b?v(p[w],w):p[w],c(n,w,f);else for(d=y.call(p),h=d.next,n=new g;!(u=h.call(d)).done;w++)f=b?s(d,v,[u.value,w],!0):u.value,c(n,w,f);return n.length=w,n}},"4e5d":function(e,t,n){"use strict";n("e644")},"4e82":function(e,t,n){"use strict";var i=n("23e7"),r=n("1c0b"),s=n("7b0b"),o=n("d039"),a=n("a640"),c=[],l=c.sort,u=o((function(){c.sort(void 0)})),d=o((function(){c.sort(null)})),h=a("sort"),f=u||!d||!h;i({target:"Array",proto:!0,forced:f},{sort:function(e){return void 0===e?l.call(s(this)):l.call(s(this),r(e))}})},"4ec9":function(e,t,n){"use strict";var i=n("6d61"),r=n("6566");e.exports=i("Map",(function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}}),r)},"4fad":function(e,t,n){var i=n("23e7"),r=n("6f53").entries;i({target:"Object",stat:!0},{entries:function(e){return r(e)}})},"508b":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("h3",[e._v("Tank Control System")]),e.state["input"]?n("div",[n("vui-item",{attrs:{balance:.65,label:"Input:"}},[e.state["input"].power?n("span",[e._v("Injecting")]):n("span",[e._v("On Hold")]),e._v(" "),n("vui-button",{attrs:{params:{in_toggle_injector:1},icon:"power-off"}},[e._v("Toggle Power")])],1),n("vui-item",{attrs:{balance:.65,label:"Flow Rate Limit:"}},[e._v(e._s(e.state["input"].rate)+" L/s")]),n("vui-item",{attrs:{balance:.65,label:"Command:"}},[n("vui-input-numeric",{attrs:{width:"3em","button-count":3,max:e.state.maxrate},on:{keypress:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.s({in_set_flowrate:e.state["input"].setrate})}},model:{value:e.state["input"].setrate,callback:function(t){e.$set(e.state["input"],"setrate",t)},expression:"state['input'].setrate"}}),n("br"),n("vui-button",{attrs:{"push-state":"",params:{in_set_flowrate:e.state["input"].setrate}}},[e._v("Set Flow Rate")])],1)],1):n("vui-button",{attrs:{params:{in_refresh_status:1}}},[e._v("Search for input port")]),e.state["output"]?n("div",{staticStyle:{"margin-top":"2em"}},[n("vui-item",{attrs:{balance:.65,label:"Output:"}},[e.state["output"].power?n("span",[e._v("Open")]):n("span",[e._v("On Hold")]),e._v(" "),n("vui-button",{attrs:{params:{out_toggle_power:1},icon:"power-off"}},[e._v("Toggle Power")])],1),n("vui-item",{attrs:{balance:.65,label:"Max Output Pressure:"}},[e._v(e._s(e.state["output"].pressure)+" kPa")]),n("vui-item",{attrs:{balance:.65,label:"Command:"}},[n("vui-input-numeric",{attrs:{width:"5em","button-count":4,"decimal-places":2,max:e.state.maxpressure},on:{keypress:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.s({out_set_pressure:e.state["output"].setpressure})}},model:{value:e.state["output"].setpressure,callback:function(t){e.$set(e.state["output"],"setpressure",t)},expression:"state['output'].setpressure"}}),n("br"),n("vui-button",{attrs:{"push-state":"",params:{out_set_pressure:e.state["output"].setpressure}}},[e._v("Set Pressure")])],1)],1):n("vui-button",{attrs:{params:{out_refresh_status:1}}},[e._v("Search for output port")])],1)},r=[],s=n("025e"),o={data:function(){return this.$root.$data},methods:{s:function(e){s["a"].sendToTopic(e)}}},a=o,c=n("2877"),l=Object(c["a"])(a,i,r,!1,null,null,null);t["default"]=l.exports},"50c4":function(e,t,n){var i=n("a691"),r=Math.min;e.exports=function(e){return e>0?r(i(e),9007199254740991):0}},5135:function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},"51eb":function(e,t,n){"use strict";var i=n("825a"),r=n("c04e");e.exports=function(e){if("string"!==e&&"number"!==e&&"default"!==e)throw TypeError("Incorrect hint");return r(i(this),"number"!==e)}},5319:function(e,t,n){"use strict";var i=n("d784"),r=n("825a"),s=n("7b0b"),o=n("50c4"),a=n("a691"),c=n("1d80"),l=n("8aa5"),u=n("14c3"),d=Math.max,h=Math.min,f=Math.floor,p=/\$([$&'`]|\d\d?|<[^>]*>)/g,g=/\$([$&'`]|\d\d?)/g,m=function(e){return void 0===e?e:String(e)};i("replace",2,(function(e,t,n,i){var v=i.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE,b=i.REPLACE_KEEPS_$0,y=v?"$":"$0";return[function(n,i){var r=c(this),s=void 0==n?void 0:n[e];return void 0!==s?s.call(n,r,i):t.call(String(r),n,i)},function(e,i){if(!v&&b||"string"===typeof i&&-1===i.indexOf(y)){var s=n(t,e,this,i);if(s.done)return s.value}var c=r(e),f=String(this),p="function"===typeof i;p||(i=String(i));var g=c.global;if(g){var _=c.unicode;c.lastIndex=0}var x=[];while(1){var k=u(c,f);if(null===k)break;if(x.push(k),!g)break;var A=String(k[0]);""===A&&(c.lastIndex=l(f,o(c.lastIndex),_))}for(var C="",E=0,S=0;S=E&&(C+=f.slice(E,$)+R,E=$+F.length)}return C+f.slice(E)}];function w(e,n,i,r,o,a){var c=i+e.length,l=r.length,u=g;return void 0!==o&&(o=s(o),u=p),t.call(a,u,(function(t,s){var a;switch(s.charAt(0)){case"$":return"$";case"&":return e;case"`":return n.slice(0,i);case"'":return n.slice(c);case"<":a=o[s.slice(1,-1)];break;default:var u=+s;if(0===u)return t;if(u>l){var d=f(u/10);return 0===d?t:d<=l?void 0===r[d-1]?s.charAt(1):r[d-1]+s.charAt(1):t}a=r[u-1]}return void 0===a?"":a}))}}))},5327:function(e,t,n){var i=n("23e7"),r=n("1ec1"),s=Math.acosh,o=Math.log,a=Math.sqrt,c=Math.LN2,l=!s||710!=Math.floor(s(Number.MAX_VALUE))||s(1/0)!=1/0;i({target:"Math",stat:!0,forced:l},{acosh:function(e){return(e=+e)<1?NaN:e>94906265.62425156?o(e)+c:r(e-1+a(e-1)*a(e+1))}})},5377:function(e,t,n){var i=n("83ab"),r=n("9bf2"),s=n("ad6d"),o=n("9f7f").UNSUPPORTED_Y;i&&("g"!=/./g.flags||o)&&r.f(RegExp.prototype,"flags",{configurable:!0,get:s})},"542d":function(e,t,n){"use strict";var i=n("23e7"),r=n("d039"),s=n("408a"),o=1..toPrecision,a=r((function(){return"1"!==o.call(1,void 0)}))||!r((function(){o.call({})}));i({target:"Number",proto:!0,forced:a},{toPrecision:function(e){return void 0===e?o.call(s(this)):o.call(s(this),e)}})},5692:function(e,t,n){var i=n("c430"),r=n("c6cd");(e.exports=function(e,t){return r[e]||(r[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.7.0",mode:i?"pure":"global",copyright:"© 2020 Denis Pushkarev (zloirock.ru)"})},"56d7":function(e,t,n){"use strict";n.r(t),function(e){n("4160"),n("e260"),n("d3b7"),n("ac1f"),n("5319"),n("159b"),n("ddb0"),n("4795"),n("2d26");var t=n("a026"),i=n("8103"),r=n.n(i),s=n("bba4"),o=n.n(s),a=n("c0d6"),c=(n("e008"),n("f0e0")),l=n("3851");if(l.keys().forEach((function(e){var n=l(e),i=r()(o()(e.replace(/^\.\/(.*)\.\w+$/,"$1")));t["a"].component(i,n.default||n)})),t["a"].config.productionTip=!1,e.Vue=t["a"],e.receiveUIState=function(e){a["a"].loadState(JSON.parse(e))},document.getElementById("app")){var u=JSON.parse(document.getElementById("initialstate").innerHTML);a["a"].loadState(u),window.__wtimetimer=window.setInterval((function(){a["a"].state.wtime+=2}),200),c["a"].setWindowKey(window.document.getElementById("vueui:windowId").getAttribute("content")),c["a"].setupDrag(),new t["a"]({data:a["a"].state,template:"

Javascript loaded, stylesheets has failed to load. Click here to load.

",computed:{componentName:function(){return"?"!=this.$root.$data.active.charAt(0)?"view-"+this.$root.$data.active:null},templateString:function(){return"?"==this.$root.$data.active.charAt(0)?"
"+this.$root.$data.active.substr(1)+"
":null}},watch:{state:{handler:function(){a["a"].pushState()},deep:!0}},mounted:function(){this.$el.focus()}}).$mount("#app")}document.getElementById("header")&&new t["a"]({data:a["a"].state}).$mount("#header"),document.getElementById("dapp")&&new t["a"]({data:a["a"].state,template:'

Debug this UI with inspector by opening URL in your browser:

{{url}}

Current data of UI:

{{ JSON.stringify(this.$root.$data, null, \'    \') }}
',methods:{stop:function(){window.clearInterval(window.__wtimetimer)}},computed:{url:function(){return window.location.href+"?ext"}}}).$mount("#dapp")}.call(this,n("c8ba"))},"56ef":function(e,t,n){var i=n("d066"),r=n("241c"),s=n("7418"),o=n("825a");e.exports=i("Reflect","ownKeys")||function(e){var t=r.f(o(e)),n=s.f;return n?t.concat(n(e)):t}},"583b":function(e,t,n){var i=n("23e7"),r=n("5e89"),s=Math.abs;i({target:"Number",stat:!0},{isSafeInteger:function(e){return r(e)&&s(e)<=9007199254740991}})},"585a":function(e,t,n){(function(t){var n="object"==typeof t&&t&&t.Object===Object&&t;e.exports=n}).call(this,n("c8ba"))},5899:function(e,t){e.exports="\t\n\v\f\r                 \u2028\u2029\ufeff"},"58a8":function(e,t,n){var i=n("1d80"),r=n("5899"),s="["+r+"]",o=RegExp("^"+s+s+"*"),a=RegExp(s+s+"*$"),c=function(e){return function(t){var n=String(i(t));return 1&e&&(n=n.replace(o,"")),2&e&&(n=n.replace(a,"")),n}};e.exports={start:c(1),end:c(2),trim:c(3)}},"592e":function(e,t,n){},"5a34":function(e,t,n){var i=n("44e7");e.exports=function(e){if(i(e))throw TypeError("The method doesn't accept regular expressions");return e}},"5aa2":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"button",attrs:{disabled:e.$root.$data.status<2||this.disabled},on:{click:function(t){return e.senddata()}}},[e.icon?n("div",{staticClass:"uiIcon16",class:[this.iconOnly?"":"mr-1","ic-"+e.icon]}):e._e(),n("span",[e._t("default")],2)])},r=[],s=n("c0d6"),o=n("025e"),a={props:{icon:{type:String,default:""},params:{type:Object,default:null},unsafeParams:{type:Object,default:null},pushState:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},iconOnly:{type:Boolean,default:!1}},methods:{senddata:function(){this.$root.$data.status<2||this.disabled||(this.$emit("click"),this.unsafeParams&&o["a"].sendToTopicRaw(this.unsafeParams),this.params?o["a"].sendToTopic(this.params,this.pushState):this.pushState&&s["a"].pushState())}}},c=a,l=n("2877"),u=Object(l["a"])(c,i,r,!1,null,null,null);t["default"]=u.exports},"5ae5":function(e,t,n){},"5b81":function(e,t,n){"use strict";var i=n("23e7"),r=n("1d80"),s=n("44e7"),o=n("ad6d"),a=n("b622"),c=n("c430"),l=a("replace"),u=RegExp.prototype;i({target:"String",proto:!0},{replaceAll:function e(t,n){var i,a,d,h,f,p,g,m,v,b=r(this);if(null!=t){if(i=s(t),i&&(a=String(r("flags"in u?t.flags:o.call(t))),!~a.indexOf("g")))throw TypeError("`.replaceAll` does not allow non-global regexes");if(d=t[l],void 0!==d)return d.call(t,b,n);if(c&&i)return String(b).replace(t,n)}if(h=String(b),f=String(t),""===f)return e.call(h,/(?:)/g,n);if(p=h.split(f),"function"!==typeof n)return p.join(String(n));for(g=p[0],m=g.length,v=1;v1?arguments[1]:void 0),t}})},"5ddf":function(e,t,n){"use strict";n("3aaf")},"5ded":function(e,t,n){"use strict";var i=n("23e7"),r=n("d039"),s=n("8418"),o=r((function(){function e(){}return!(Array.of.call(e)instanceof e)}));i({target:"Array",stat:!0,forced:o},{of:function(){var e=0,t=arguments.length,n=new("function"==typeof this?this:Array)(t);while(t>e)s(n,e,arguments[e++]);return n.length=t,n}})},"5e89":function(e,t,n){var i=n("861d"),r=Math.floor;e.exports=function(e){return!i(e)&&isFinite(e)&&r(e)===e}},"5f96":function(e,t,n){"use strict";var i=n("ebb5"),r=i.aTypedArray,s=i.exportTypedArrayMethod,o=[].join;s("join",(function(e){return o.apply(r(this),arguments)}))},"5fb2":function(e,t,n){"use strict";var i=2147483647,r=36,s=1,o=26,a=38,c=700,l=72,u=128,d="-",h=/[^\0-\u007E]/,f=/[.\u3002\uFF0E\uFF61]/g,p="Overflow: input needs wider integers to process",g=r-s,m=Math.floor,v=String.fromCharCode,b=function(e){var t=[],n=0,i=e.length;while(n=55296&&r<=56319&&n>1,e+=m(e/t);e>g*o>>1;i+=r)e=m(e/g);return m(i+(g+1)*e/(e+a))},_=function(e){var t=[];e=b(e);var n,a,c=e.length,h=u,f=0,g=l;for(n=0;n=h&&am((i-f)/A))throw RangeError(p);for(f+=(k-h)*A,h=k,n=0;ni)throw RangeError(p);if(a==h){for(var C=f,E=r;;E+=r){var S=E<=g?s:E>=g+o?o:E-g;if(Cu){var f,p=l(arguments[u++]),g=d?s(p).concat(d(p)):s(p),m=g.length,v=0;while(m>v)f=g[v++],i&&!h.call(p,f)||(n[f]=p[f])}return n}:u},"614c":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("h3",[e._v("Fuel Injection System")]),e.state["device"]?[n("vui-item",{attrs:{label:"Input:"}},[e.state.device.power?n("span",[e._v("Injecting")]):n("span",[e._v("On Hold")]),n("vui-button",{attrs:{params:{in_toggle_injector:1}}},[e._v("Toggle Power")])],1),n("vui-item",{attrs:{label:"Rate:"}},[e._v(e._s(e.state.device.rate)+" L/s")]),n("vui-item",{attrs:{label:"Automated Fuel Injection:"}},[e.state.device.automation?n("vui-button",{attrs:{params:{toggle_automation:1}}},[e._v("Engaged")]):n("vui-button",{attrs:{params:{toggle_automation:1}}},[e._v("Disengaged")])],1),n("vui-item",{attrs:{label:"Inject:"}},[e.state.device.automation?[e._v("Controls Locked Out")]:[n("vui-button",{attrs:{params:{toggle_injector:1},icon:"power-off"}},[e._v("Toggle Power")]),n("vui-button",{attrs:{params:{injection:1}}},[e._v("Inject (1 Cycle)")])]],2)]:n("vui-button",{attrs:{params:{in_refresh_status:1}}},[e._v("Search for device")])],2)},r=[],s={data:function(){return this.$root.$data}},o=s,a=n("2877"),c=Object(a["a"])(o,i,r,!1,null,null,null);t["default"]=c.exports},"621a":function(e,t,n){"use strict";var i=n("da84"),r=n("83ab"),s=n("a981"),o=n("9112"),a=n("e2cc"),c=n("d039"),l=n("19aa"),u=n("a691"),d=n("50c4"),h=n("0b25"),f=n("77a7"),p=n("e163"),g=n("d2bb"),m=n("241c").f,v=n("9bf2").f,b=n("81d5"),y=n("d44e"),w=n("69f3"),_=w.get,x=w.set,k="ArrayBuffer",A="DataView",C="prototype",E="Wrong length",S="Wrong index",F=i[k],$=F,T=i[A],L=T&&T[C],D=Object.prototype,B=i.RangeError,R=f.pack,O=f.unpack,M=function(e){return[255&e]},j=function(e){return[255&e,e>>8&255]},I=function(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]},P=function(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]},N=function(e){return R(e,23,4)},W=function(e){return R(e,52,8)},H=function(e,t){v(e[C],t,{get:function(){return _(this)[t]}})},V=function(e,t,n,i){var r=h(n),s=_(e);if(r+t>s.byteLength)throw B(S);var o=_(s.buffer).bytes,a=r+s.byteOffset,c=o.slice(a,a+t);return i?c:c.reverse()},U=function(e,t,n,i,r,s){var o=h(n),a=_(e);if(o+t>a.byteLength)throw B(S);for(var c=_(a.buffer).bytes,l=o+a.byteOffset,u=i(+r),d=0;dK;)(z=q[K++])in $||o($,z,F[z]);G.constructor=$}g&&p(L)!==D&&g(L,D);var Y=new T(new $(2)),X=L.setInt8;Y.setInt8(0,2147483648),Y.setInt8(1,2147483649),!Y.getInt8(0)&&Y.getInt8(1)||a(L,{setInt8:function(e,t){X.call(this,e,t<<24>>24)},setUint8:function(e,t){X.call(this,e,t<<24>>24)}},{unsafe:!0})}else $=function(e){l(this,$,k);var t=h(e);x(this,{bytes:b.call(new Array(t),0),byteLength:t}),r||(this.byteLength=t)},T=function(e,t,n){l(this,T,A),l(e,$,A);var i=_(e).byteLength,s=u(t);if(s<0||s>i)throw B("Wrong offset");if(n=void 0===n?i-s:d(n),s+n>i)throw B(E);x(this,{buffer:e,byteLength:n,byteOffset:s}),r||(this.buffer=e,this.byteLength=n,this.byteOffset=s)},r&&(H($,"byteLength"),H(T,"buffer"),H(T,"byteLength"),H(T,"byteOffset")),a(T[C],{getInt8:function(e){return V(this,1,e)[0]<<24>>24},getUint8:function(e){return V(this,1,e)[0]},getInt16:function(e){var t=V(this,2,e,arguments.length>1?arguments[1]:void 0);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=V(this,2,e,arguments.length>1?arguments[1]:void 0);return t[1]<<8|t[0]},getInt32:function(e){return P(V(this,4,e,arguments.length>1?arguments[1]:void 0))},getUint32:function(e){return P(V(this,4,e,arguments.length>1?arguments[1]:void 0))>>>0},getFloat32:function(e){return O(V(this,4,e,arguments.length>1?arguments[1]:void 0),23)},getFloat64:function(e){return O(V(this,8,e,arguments.length>1?arguments[1]:void 0),52)},setInt8:function(e,t){U(this,1,e,M,t)},setUint8:function(e,t){U(this,1,e,M,t)},setInt16:function(e,t){U(this,2,e,j,t,arguments.length>2?arguments[2]:void 0)},setUint16:function(e,t){U(this,2,e,j,t,arguments.length>2?arguments[2]:void 0)},setInt32:function(e,t){U(this,4,e,I,t,arguments.length>2?arguments[2]:void 0)},setUint32:function(e,t){U(this,4,e,I,t,arguments.length>2?arguments[2]:void 0)},setFloat32:function(e,t){U(this,4,e,N,t,arguments.length>2?arguments[2]:void 0)},setFloat64:function(e,t){U(this,8,e,W,t,arguments.length>2?arguments[2]:void 0)}});y($,k),y(T,A),e.exports={ArrayBuffer:$,DataView:T}},6292:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("vui-button",{directives:[{name:"show",rawName:"v-show",value:!e.creating,expression:"!creating"}],on:{click:function(t){e.creating=!0}}},[e._v("New")]),e.creating?[n("input",{directives:[{name:"model",rawName:"v-model",value:e.newname,expression:"newname"}],attrs:{type:"text"},domProps:{value:e.newname},on:{input:function(t){t.target.composing||(e.newname=t.target.value)}}}),n("vui-button",{on:{click:function(t){return e.newFile()}}},[e._v("Create")])]:e._e(),n("h2",[e._v("Available files:")]),n("table",[e._m(0),e._l(e.s.files,(function(t){return n("tr",{key:t.name},[n("td",[e._v(e._s(t.name))]),n("td",[e._v(e._s(t.type))]),n("td",[e._v(e._s(t.size)+"GQ")]),n("td",[n("vui-button",{attrs:{params:{execute_file:t.name}}},[e._v("Execute")]),n("vui-button",{attrs:{params:{edit_file:t.name}}},[e._v("Edit")])],1)])}))],2)],2)},r=[function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("tr",[n("th",[e._v("File name")]),n("th",[e._v("File type")]),n("th",[e._v("File size (GQ)")]),n("th",[e._v("Operations")])])}],s=n("025e"),o={data:function(){return{s:this.$root.$data.state,creating:!1,newname:""}},methods:{newFile:function(){s["a"].sendToTopic({new:this.newname}),this.newname="",this.creating=!1}}},a=o,c=n("2877"),l=Object(c["a"])(a,i,r,!1,null,null,null);t["default"]=l.exports},"63bf":function(e,t,n){},"649e":function(e,t,n){"use strict";var i=n("ebb5"),r=n("b727").some,s=i.aTypedArray,o=i.exportTypedArrayMethod;o("some",(function(e){return r(s(this),e,arguments.length>1?arguments[1]:void 0)}))},"64e5":function(e,t,n){"use strict";var i=n("d039"),r=n("0ccb").start,s=Math.abs,o=Date.prototype,a=o.getTime,c=o.toISOString;e.exports=i((function(){return"0385-07-25T07:06:39.999Z"!=c.call(new Date(-50000000000001))}))||!i((function(){c.call(new Date(NaN))}))?function(){if(!isFinite(a.call(this)))throw RangeError("Invalid time value");var e=this,t=e.getUTCFullYear(),n=e.getUTCMilliseconds(),i=t<0?"-":t>9999?"+":"";return i+r(s(t),i?6:4,0)+"-"+r(e.getUTCMonth()+1,2,0)+"-"+r(e.getUTCDate(),2,0)+"T"+r(e.getUTCHours(),2,0)+":"+r(e.getUTCMinutes(),2,0)+":"+r(e.getUTCSeconds(),2,0)+"."+r(n,3,0)+"Z"}:c},6547:function(e,t,n){var i=n("a691"),r=n("1d80"),s=function(e){return function(t,n){var s,o,a=String(r(t)),c=i(n),l=a.length;return c<0||c>=l?e?"":void 0:(s=a.charCodeAt(c),s<55296||s>56319||c+1===l||(o=a.charCodeAt(c+1))<56320||o>57343?e?a.charAt(c):s:e?a.slice(c,c+2):o-56320+(s-55296<<10)+65536)}};e.exports={codeAt:s(!1),charAt:s(!0)}},6566:function(e,t,n){"use strict";var i=n("9bf2").f,r=n("7c73"),s=n("e2cc"),o=n("0366"),a=n("19aa"),c=n("2266"),l=n("7dd0"),u=n("2626"),d=n("83ab"),h=n("f183").fastKey,f=n("69f3"),p=f.set,g=f.getterFor;e.exports={getConstructor:function(e,t,n,l){var u=e((function(e,i){a(e,u,t),p(e,{type:t,index:r(null),first:void 0,last:void 0,size:0}),d||(e.size=0),void 0!=i&&c(i,e[l],{that:e,AS_ENTRIES:n})})),f=g(t),m=function(e,t,n){var i,r,s=f(e),o=v(e,t);return o?o.value=n:(s.last=o={index:r=h(t,!0),key:t,value:n,previous:i=s.last,next:void 0,removed:!1},s.first||(s.first=o),i&&(i.next=o),d?s.size++:e.size++,"F"!==r&&(s.index[r]=o)),e},v=function(e,t){var n,i=f(e),r=h(t);if("F"!==r)return i.index[r];for(n=i.first;n;n=n.next)if(n.key==t)return n};return s(u.prototype,{clear:function(){var e=this,t=f(e),n=t.index,i=t.first;while(i)i.removed=!0,i.previous&&(i.previous=i.previous.next=void 0),delete n[i.index],i=i.next;t.first=t.last=void 0,d?t.size=0:e.size=0},delete:function(e){var t=this,n=f(t),i=v(t,e);if(i){var r=i.next,s=i.previous;delete n.index[i.index],i.removed=!0,s&&(s.next=r),r&&(r.previous=s),n.first==i&&(n.first=r),n.last==i&&(n.last=s),d?n.size--:t.size--}return!!i},forEach:function(e){var t,n=f(this),i=o(e,arguments.length>1?arguments[1]:void 0,3);while(t=t?t.next:n.first){i(t.value,t.key,this);while(t&&t.removed)t=t.previous}},has:function(e){return!!v(this,e)}}),s(u.prototype,n?{get:function(e){var t=v(this,e);return t&&t.value},set:function(e,t){return m(this,0===e?0:e,t)}}:{add:function(e){return m(this,e=0===e?0:e,e)}}),d&&i(u.prototype,"size",{get:function(){return f(this).size}}),u},setStrong:function(e,t,n){var i=t+" Iterator",r=g(t),s=g(i);l(e,t,(function(e,t){p(this,{type:i,target:e,state:r(e),kind:t,last:void 0})}),(function(){var e=s(this),t=e.kind,n=e.last;while(n&&n.removed)n=n.previous;return e.target&&(e.last=n=n?n.next:e.state.first)?"keys"==t?{value:n.key,done:!1}:"values"==t?{value:n.value,done:!1}:{value:[n.key,n.value],done:!1}:(e.target=void 0,{value:void 0,done:!0})}),n?"entries":"values",!n,!0),u(t)}}},"65f0":function(e,t,n){var i=n("861d"),r=n("e8b5"),s=n("b622"),o=s("species");e.exports=function(e,t){var n;return r(e)&&(n=e.constructor,"function"!=typeof n||n!==Array&&!r(n.prototype)?i(n)&&(n=n[o],null===n&&(n=void 0)):n=void 0),new(void 0===n?Array:n)(0===t?0:t)}},"664f":function(e,t,n){"use strict";var i=n("23e7"),r=n("857a"),s=n("af03");i({target:"String",proto:!0,forced:s("sup")},{sup:function(){return r(this,"sup","","")}})},6747:function(e,t){var n=Array.isArray;e.exports=n},6814:function(e,t,n){},"682e":function(e,t,n){"use strict";n("9513")},6836:function(e,t,n){},"69f3":function(e,t,n){var i,r,s,o=n("7f9a"),a=n("da84"),c=n("861d"),l=n("9112"),u=n("5135"),d=n("c6cd"),h=n("f772"),f=n("d012"),p=a.WeakMap,g=function(e){return s(e)?r(e):i(e,{})},m=function(e){return function(t){var n;if(!c(t)||(n=r(t)).type!==e)throw TypeError("Incompatible receiver, "+e+" required");return n}};if(o){var v=d.state||(d.state=new p),b=v.get,y=v.has,w=v.set;i=function(e,t){return t.facade=e,w.call(v,e,t),t},r=function(e){return b.call(v,e)||{}},s=function(e){return y.call(v,e)}}else{var _=h("state");f[_]=!0,i=function(e,t){return t.facade=e,l(e,_,t),t},r=function(e){return u(e,_)?e[_]:{}},s=function(e){return u(e,_)}}e.exports={set:i,get:r,has:s,enforce:g,getterFor:m}},"6a01":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[e.state.toner?n("span",[e._v("Current toner level: "+e._s(e.state.toner))]):e._e(),n("br"),e.state.gotitem?n("vui-button",{attrs:{params:{remove:1}}},[e._v("Remove Item")]):e._e(),n("br"),e.state.toner?[e.state.gotitem?[n("div",{staticClass:"itemLabel copylabel"},[e._v("Copies to print:")]),n("div",{staticClass:"copyBlock"},[n("vui-input-numeric",{attrs:{width:"2.5em",min:1,max:e.state.maxcopies},model:{value:e.state.copies,callback:function(t){e.$set(e.state,"copies",t)},expression:"state.copies"}}),n("br"),n("vui-button",{attrs:{"push-state":"",params:{copy:1}}},[e._v("Copy")])],1)]:[n("h3",[e._v("Please insert something to copy.")])],n("br"),e.state.isAI?n("vui-button",{attrs:{params:{aipic:1}}},[e._v("Print photo from database")]):e._e()]:[n("h2",[e._v("Please insert a new toner cartridge!")])]],2)},r=[],s={data:function(){return this.$root.$data}},o=s,a=(n("7dc4"),n("2877")),c=Object(a["a"])(o,i,r,!1,null,"927b9430",null);t["default"]=c.exports},"6a21":function(e,t){ace.define("ace/snippets/javascript",["require","exports","module"],(function(e,t,n){"use strict";t.snippetText='# Prototype\nsnippet proto\n\t${1:class_name}.prototype.${2:method_name} = function(${3:first_argument}) {\n\t\t${4:// body...}\n\t};\n# Function\nsnippet fun\n\tfunction ${1?:function_name}(${2:argument}) {\n\t\t${3:// body...}\n\t}\n# Anonymous Function\nregex /((=)\\s*|(:)\\s*|(\\()|\\b)/f/(\\))?/\nsnippet f\n\tfunction${M1?: ${1:functionName}}($2) {\n\t\t${0:$TM_SELECTED_TEXT}\n\t}${M2?;}${M3?,}${M4?)}\n# Immediate function\ntrigger \\(?f\\(\nendTrigger \\)?\nsnippet f(\n\t(function(${1}) {\n\t\t${0:${TM_SELECTED_TEXT:/* code */}}\n\t}(${1}));\n# if\nsnippet if\n\tif (${1:true}) {\n\t\t${0}\n\t}\n# if ... else\nsnippet ife\n\tif (${1:true}) {\n\t\t${2}\n\t} else {\n\t\t${0}\n\t}\n# tertiary conditional\nsnippet ter\n\t${1:/* condition */} ? ${2:a} : ${3:b}\n# switch\nsnippet switch\n\tswitch (${1:expression}) {\n\t\tcase \'${3:case}\':\n\t\t\t${4:// code}\n\t\t\tbreak;\n\t\t${5}\n\t\tdefault:\n\t\t\t${2:// code}\n\t}\n# case\nsnippet case\n\tcase \'${1:case}\':\n\t\t${2:// code}\n\t\tbreak;\n\t${3}\n\n# while (...) {...}\nsnippet wh\n\twhile (${1:/* condition */}) {\n\t\t${0:/* code */}\n\t}\n# try\nsnippet try\n\ttry {\n\t\t${0:/* code */}\n\t} catch (e) {}\n# do...while\nsnippet do\n\tdo {\n\t\t${2:/* code */}\n\t} while (${1:/* condition */});\n# Object Method\nsnippet :f\nregex /([,{[])|^\\s*/:f/\n\t${1:method_name}: function(${2:attribute}) {\n\t\t${0}\n\t}${3:,}\n# setTimeout function\nsnippet setTimeout\nregex /\\b/st|timeout|setTimeo?u?t?/\n\tsetTimeout(function() {${3:$TM_SELECTED_TEXT}}, ${1:10});\n# Get Elements\nsnippet gett\n\tgetElementsBy${1:TagName}(\'${2}\')${3}\n# Get Element\nsnippet get\n\tgetElementBy${1:Id}(\'${2}\')${3}\n# console.log (Firebug)\nsnippet cl\n\tconsole.log(${1});\n# return\nsnippet ret\n\treturn ${1:result}\n# for (property in object ) { ... }\nsnippet fori\n\tfor (var ${1:prop} in ${2:Things}) {\n\t\t${0:$2[$1]}\n\t}\n# hasOwnProperty\nsnippet has\n\thasOwnProperty(${1})\n# docstring\nsnippet /**\n\t/**\n\t * ${1:description}\n\t *\n\t */\nsnippet @par\nregex /^\\s*\\*\\s*/@(para?m?)?/\n\t@param {${1:type}} ${2:name} ${3:description}\nsnippet @ret\n\t@return {${1:type}} ${2:description}\n# JSON.parse\nsnippet jsonp\n\tJSON.parse(${1:jstr});\n# JSON.stringify\nsnippet jsons\n\tJSON.stringify(${1:object});\n# self-defining function\nsnippet sdf\n\tvar ${1:function_name} = function(${2:argument}) {\n\t\t${3:// initial code ...}\n\n\t\t$1 = function($2) {\n\t\t\t${4:// main code}\n\t\t};\n\t}\n# singleton\nsnippet sing\n\tfunction ${1:Singleton} (${2:argument}) {\n\t\t// the cached instance\n\t\tvar instance;\n\n\t\t// rewrite the constructor\n\t\t$1 = function $1($2) {\n\t\t\treturn instance;\n\t\t};\n\t\t\n\t\t// carry over the prototype properties\n\t\t$1.prototype = this;\n\n\t\t// the instance\n\t\tinstance = new $1();\n\n\t\t// reset the constructor pointer\n\t\tinstance.constructor = $1;\n\n\t\t${3:// code ...}\n\n\t\treturn instance;\n\t}\n# class\nsnippet class\nregex /^\\s*/clas{0,2}/\n\tvar ${1:class} = function(${20}) {\n\t\t$40$0\n\t};\n\t\n\t(function() {\n\t\t${60:this.prop = ""}\n\t}).call(${1:class}.prototype);\n\t\n\texports.${1:class} = ${1:class};\n# \nsnippet for-\n\tfor (var ${1:i} = ${2:Things}.length; ${1:i}--; ) {\n\t\t${0:${2:Things}[${1:i}];}\n\t}\n# for (...) {...}\nsnippet for\n\tfor (var ${1:i} = 0; $1 < ${2:Things}.length; $1++) {\n\t\t${3:$2[$1]}$0\n\t}\n# for (...) {...} (Improved Native For-Loop)\nsnippet forr\n\tfor (var ${1:i} = ${2:Things}.length - 1; $1 >= 0; $1--) {\n\t\t${3:$2[$1]}$0\n\t}\n\n\n#modules\nsnippet def\n\tdefine(function(require, exports, module) {\n\t"use strict";\n\tvar ${1/.*\\///} = require("${1}");\n\t\n\t$TM_SELECTED_TEXT\n\t});\nsnippet req\nguard ^\\s*\n\tvar ${1/.*\\///} = require("${1}");\n\t$0\nsnippet requ\nguard ^\\s*\n\tvar ${1/.*\\/(.)/\\u$1/} = require("${1}").${1/.*\\/(.)/\\u$1/};\n\t$0\n',t.scope="javascript"}))},"6ac0":function(e,t){function n(e,t,n,i){var r=-1,s=null==e?0:e.length;i&&s&&(n=e[++r]);while(++r ["+this.end.row+"/"+this.end.column+"]"},this.contains=function(row,column){return 0==this.compare(row,column)},this.compareRange=function(range){var cmp,end=range.end,start=range.start;return cmp=this.compare(end.row,end.column),1==cmp?(cmp=this.compare(start.row,start.column),1==cmp?2:0==cmp?1:0):-1==cmp?-2:(cmp=this.compare(start.row,start.column),-1==cmp?-1:1==cmp?42:0)},this.comparePoint=function(p){return this.compare(p.row,p.column)},this.containsRange=function(range){return 0==this.comparePoint(range.start)&&0==this.comparePoint(range.end)},this.intersects=function(range){var cmp=this.compareRange(range);return-1==cmp||0==cmp||1==cmp},this.isEnd=function(row,column){return this.end.row==row&&this.end.column==column},this.isStart=function(row,column){return this.start.row==row&&this.start.column==column},this.setStart=function(row,column){"object"==typeof row?(this.start.column=row.column,this.start.row=row.row):(this.start.row=row,this.start.column=column)},this.setEnd=function(row,column){"object"==typeof row?(this.end.column=row.column,this.end.row=row.row):(this.end.row=row,this.end.column=column)},this.inside=function(row,column){return 0==this.compare(row,column)?this.isEnd(row,column)||this.isStart(row,column)?!1:!0:!1},this.insideStart=function(row,column){return 0==this.compare(row,column)?this.isEnd(row,column)?!1:!0:!1},this.insideEnd=function(row,column){return 0==this.compare(row,column)?this.isStart(row,column)?!1:!0:!1},this.compare=function(row,column){return this.isMultiLine()||row!==this.start.row?this.start.row>row?-1:row>this.end.row?1:this.start.row===row?column>=this.start.column?0:-1:this.end.row===row?this.end.column>=column?0:1:0:this.start.column>column?-1:column>this.end.column?1:0},this.compareStart=function(row,column){return this.start.row==row&&this.start.column==column?-1:this.compare(row,column)},this.compareEnd=function(row,column){return this.end.row==row&&this.end.column==column?1:this.compare(row,column)},this.compareInside=function(row,column){return this.end.row==row&&this.end.column==column?1:this.start.row==row&&this.start.column==column?-1:this.compare(row,column)},this.clipRows=function(firstRow,lastRow){if(this.end.row>lastRow)var end={row:lastRow+1,column:0};else if(firstRow>this.end.row)var end={row:firstRow,column:0};if(this.start.row>lastRow)var start={row:lastRow+1,column:0};else if(firstRow>this.start.row)var start={row:firstRow,column:0};return Range.fromPoints(start||this.start,end||this.end)},this.extend=function(row,column){var cmp=this.compare(row,column);if(0==cmp)return this;if(-1==cmp)var start={row:row,column:column};else var end={row:row,column:column};return Range.fromPoints(start||this.start,end||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return Range.fromPoints(this.start,this.end)},this.collapseRows=function(){return 0==this.end.column?new Range(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new Range(this.start.row,0,this.end.row,0)},this.toScreenRange=function(session){var screenPosStart=session.documentToScreenPosition(this.start),screenPosEnd=session.documentToScreenPosition(this.end);return new Range(screenPosStart.row,screenPosStart.column,screenPosEnd.row,screenPosEnd.column)},this.moveBy=function(row,column){this.start.row+=row,this.start.column+=column,this.end.row+=row,this.end.column+=column}}).call(Range.prototype),Range.fromPoints=function(start,end){return new Range(start.row,start.column,end.row,end.column)},Range.comparePoints=comparePoints,Range.comparePoints=function(p1,p2){return p1.row-p2.row||p1.column-p2.column},exports.Range=Range}),ace.define("ace/apply_delta",["require","exports","module"],function(acequire,exports){"use strict";exports.applyDelta=function(docLines,delta){var row=delta.start.row,startColumn=delta.start.column,line=docLines[row]||"";switch(delta.action){case"insert":var lines=delta.lines;if(1===lines.length)docLines[row]=line.substring(0,startColumn)+delta.lines[0]+line.substring(startColumn);else{var args=[row,1].concat(delta.lines);docLines.splice.apply(docLines,args),docLines[row]=line.substring(0,startColumn)+docLines[row],docLines[row+delta.lines.length-1]+=line.substring(startColumn)}break;case"remove":var endColumn=delta.end.column,endRow=delta.end.row;row===endRow?docLines[row]=line.substring(0,startColumn)+line.substring(endColumn):docLines.splice(row,endRow-row+1,line.substring(0,startColumn)+docLines[endRow].substring(endColumn))}}}),ace.define("ace/lib/event_emitter",["require","exports","module"],function(acequire,exports){"use strict";var EventEmitter={},stopPropagation=function(){this.propagationStopped=!0},preventDefault=function(){this.defaultPrevented=!0};EventEmitter._emit=EventEmitter._dispatchEvent=function(eventName,e){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var listeners=this._eventRegistry[eventName]||[],defaultHandler=this._defaultHandlers[eventName];if(listeners.length||defaultHandler){"object"==typeof e&&e||(e={}),e.type||(e.type=eventName),e.stopPropagation||(e.stopPropagation=stopPropagation),e.preventDefault||(e.preventDefault=preventDefault),listeners=listeners.slice();for(var i=0;listeners.length>i&&(listeners[i](e,this),!e.propagationStopped);i++);return defaultHandler&&!e.defaultPrevented?defaultHandler(e,this):void 0}},EventEmitter._signal=function(eventName,e){var listeners=(this._eventRegistry||{})[eventName];if(listeners){listeners=listeners.slice();for(var i=0;listeners.length>i;i++)listeners[i](e,this)}},EventEmitter.once=function(eventName,callback){var _self=this;callback&&this.addEventListener(eventName,function newCallback(){_self.removeEventListener(eventName,newCallback),callback.apply(null,arguments)})},EventEmitter.setDefaultHandler=function(eventName,callback){var handlers=this._defaultHandlers;if(handlers||(handlers=this._defaultHandlers={_disabled_:{}}),handlers[eventName]){var old=handlers[eventName],disabled=handlers._disabled_[eventName];disabled||(handlers._disabled_[eventName]=disabled=[]),disabled.push(old);var i=disabled.indexOf(callback);-1!=i&&disabled.splice(i,1)}handlers[eventName]=callback},EventEmitter.removeDefaultHandler=function(eventName,callback){var handlers=this._defaultHandlers;if(handlers){var disabled=handlers._disabled_[eventName];if(handlers[eventName]==callback)handlers[eventName],disabled&&this.setDefaultHandler(eventName,disabled.pop());else if(disabled){var i=disabled.indexOf(callback);-1!=i&&disabled.splice(i,1)}}},EventEmitter.on=EventEmitter.addEventListener=function(eventName,callback,capturing){this._eventRegistry=this._eventRegistry||{};var listeners=this._eventRegistry[eventName];return listeners||(listeners=this._eventRegistry[eventName]=[]),-1==listeners.indexOf(callback)&&listeners[capturing?"unshift":"push"](callback),callback},EventEmitter.off=EventEmitter.removeListener=EventEmitter.removeEventListener=function(eventName,callback){this._eventRegistry=this._eventRegistry||{};var listeners=this._eventRegistry[eventName];if(listeners){var index=listeners.indexOf(callback);-1!==index&&listeners.splice(index,1)}},EventEmitter.removeAllListeners=function(eventName){this._eventRegistry&&(this._eventRegistry[eventName]=[])},exports.EventEmitter=EventEmitter}),ace.define("ace/anchor",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"],function(acequire,exports){"use strict";var oop=acequire("./lib/oop"),EventEmitter=acequire("./lib/event_emitter").EventEmitter,Anchor=exports.Anchor=function(doc,row,column){this.$onChange=this.onChange.bind(this),this.attach(doc),column===void 0?this.setPosition(row.row,row.column):this.setPosition(row,column)};(function(){function $pointsInOrder(point1,point2,equalPointsInOrder){var bColIsAfter=equalPointsInOrder?point1.column<=point2.column:point1.columnthis.row)){var point=$getTransformedPoint(delta,{row:this.row,column:this.column},this.$insertRight);this.setPosition(point.row,point.column,!0)}},this.setPosition=function(row,column,noClip){var pos;if(pos=noClip?{row:row,column:column}:this.$clipPositionToDocument(row,column),this.row!=pos.row||this.column!=pos.column){var old={row:this.row,column:this.column};this.row=pos.row,this.column=pos.column,this._signal("change",{old:old,value:pos})}},this.detach=function(){this.document.removeEventListener("change",this.$onChange)},this.attach=function(doc){this.document=doc||this.document,this.document.on("change",this.$onChange)},this.$clipPositionToDocument=function(row,column){var pos={};return row>=this.document.getLength()?(pos.row=Math.max(0,this.document.getLength()-1),pos.column=this.document.getLine(pos.row).length):0>row?(pos.row=0,pos.column=0):(pos.row=row,pos.column=Math.min(this.document.getLine(pos.row).length,Math.max(0,column))),0>column&&(pos.column=0),pos}}).call(Anchor.prototype)}),ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"],function(acequire,exports){"use strict";var oop=acequire("./lib/oop"),applyDelta=acequire("./apply_delta").applyDelta,EventEmitter=acequire("./lib/event_emitter").EventEmitter,Range=acequire("./range").Range,Anchor=acequire("./anchor").Anchor,Document=function(textOrLines){this.$lines=[""],0===textOrLines.length?this.$lines=[""]:Array.isArray(textOrLines)?this.insertMergedLines({row:0,column:0},textOrLines):this.insert({row:0,column:0},textOrLines)};(function(){oop.implement(this,EventEmitter),this.setValue=function(text){var len=this.getLength()-1;this.remove(new Range(0,0,len,this.getLine(len).length)),this.insert({row:0,column:0},text)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(row,column){return new Anchor(this,row,column)},this.$split=0==="aaa".split(/a/).length?function(text){return text.replace(/\\r\\n|\\r/g,"\\n").split("\\n")}:function(text){return text.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(text){var match=text.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=match?match[1]:"\\n",this._signal("changeNewLineMode")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case"windows":return"\\r\\n";case"unix":return"\\n";default:return this.$autoNewLine||"\\n"}},this.$autoNewLine="",this.$newLineMode="auto",this.setNewLineMode=function(newLineMode){this.$newLineMode!==newLineMode&&(this.$newLineMode=newLineMode,this._signal("changeNewLineMode"))},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(text){return"\\r\\n"==text||"\\r"==text||"\\n"==text},this.getLine=function(row){return this.$lines[row]||""},this.getLines=function(firstRow,lastRow){return this.$lines.slice(firstRow,lastRow+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(range){return this.getLinesForRange(range).join(this.getNewLineCharacter())},this.getLinesForRange=function(range){var lines;if(range.start.row===range.end.row)lines=[this.getLine(range.start.row).substring(range.start.column,range.end.column)];else{lines=this.getLines(range.start.row,range.end.row),lines[0]=(lines[0]||"").substring(range.start.column);var l=lines.length-1;range.end.row-range.start.row==l&&(lines[l]=lines[l].substring(0,range.end.column))}return lines},this.insertLines=function(row,lines){return console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."),this.insertFullLines(row,lines)},this.removeLines=function(firstRow,lastRow){return console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."),this.removeFullLines(firstRow,lastRow)},this.insertNewLine=function(position){return console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, [\'\', \'\']) instead."),this.insertMergedLines(position,["",""])},this.insert=function(position,text){return 1>=this.getLength()&&this.$detectNewLine(text),this.insertMergedLines(position,this.$split(text))},this.insertInLine=function(position,text){var start=this.clippedPos(position.row,position.column),end=this.pos(position.row,position.column+text.length);return this.applyDelta({start:start,end:end,action:"insert",lines:[text]},!0),this.clonePos(end)},this.clippedPos=function(row,column){var length=this.getLength();void 0===row?row=length:0>row?row=0:row>=length&&(row=length-1,column=void 0);var line=this.getLine(row);return void 0==column&&(column=line.length),column=Math.min(Math.max(column,0),line.length),{row:row,column:column}},this.clonePos=function(pos){return{row:pos.row,column:pos.column}},this.pos=function(row,column){return{row:row,column:column}},this.$clipPosition=function(position){var length=this.getLength();return position.row>=length?(position.row=Math.max(0,length-1),position.column=this.getLine(length-1).length):(position.row=Math.max(0,position.row),position.column=Math.min(Math.max(position.column,0),this.getLine(position.row).length)),position},this.insertFullLines=function(row,lines){row=Math.min(Math.max(row,0),this.getLength());var column=0;this.getLength()>row?(lines=lines.concat([""]),column=0):(lines=[""].concat(lines),row--,column=this.$lines[row].length),this.insertMergedLines({row:row,column:column},lines)},this.insertMergedLines=function(position,lines){var start=this.clippedPos(position.row,position.column),end={row:start.row+lines.length-1,column:(1==lines.length?start.column:0)+lines[lines.length-1].length};return this.applyDelta({start:start,end:end,action:"insert",lines:lines}),this.clonePos(end)},this.remove=function(range){var start=this.clippedPos(range.start.row,range.start.column),end=this.clippedPos(range.end.row,range.end.column);return this.applyDelta({start:start,end:end,action:"remove",lines:this.getLinesForRange({start:start,end:end})}),this.clonePos(start)},this.removeInLine=function(row,startColumn,endColumn){var start=this.clippedPos(row,startColumn),end=this.clippedPos(row,endColumn);return this.applyDelta({start:start,end:end,action:"remove",lines:this.getLinesForRange({start:start,end:end})},!0),this.clonePos(start)},this.removeFullLines=function(firstRow,lastRow){firstRow=Math.min(Math.max(0,firstRow),this.getLength()-1),lastRow=Math.min(Math.max(0,lastRow),this.getLength()-1);var deleteFirstNewLine=lastRow==this.getLength()-1&&firstRow>0,deleteLastNewLine=this.getLength()-1>lastRow,startRow=deleteFirstNewLine?firstRow-1:firstRow,startCol=deleteFirstNewLine?this.getLine(startRow).length:0,endRow=deleteLastNewLine?lastRow+1:lastRow,endCol=deleteLastNewLine?0:this.getLine(endRow).length,range=new Range(startRow,startCol,endRow,endCol),deletedLines=this.$lines.slice(firstRow,lastRow+1);return this.applyDelta({start:range.start,end:range.end,action:"remove",lines:this.getLinesForRange(range)}),deletedLines},this.removeNewLine=function(row){this.getLength()-1>row&&row>=0&&this.applyDelta({start:this.pos(row,this.getLine(row).length),end:this.pos(row+1,0),action:"remove",lines:["",""]})},this.replace=function(range,text){if(range instanceof Range||(range=Range.fromPoints(range.start,range.end)),0===text.length&&range.isEmpty())return range.start;if(text==this.getTextRange(range))return range.end;this.remove(range);var end;return end=text?this.insert(range.start,text):range.start},this.applyDeltas=function(deltas){for(var i=0;deltas.length>i;i++)this.applyDelta(deltas[i])},this.revertDeltas=function(deltas){for(var i=deltas.length-1;i>=0;i--)this.revertDelta(deltas[i])},this.applyDelta=function(delta,doNotValidate){var isInsert="insert"==delta.action;(isInsert?1>=delta.lines.length&&!delta.lines[0]:!Range.comparePoints(delta.start,delta.end))||(isInsert&&delta.lines.length>2e4&&this.$splitAndapplyLargeDelta(delta,2e4),applyDelta(this.$lines,delta,doNotValidate),this._signal("change",delta))},this.$splitAndapplyLargeDelta=function(delta,MAX){for(var lines=delta.lines,l=lines.length,row=delta.start.row,column=delta.start.column,from=0,to=0;;){from=to,to+=MAX-1;var chunk=lines.slice(from,to);if(to>l){delta.lines=chunk,delta.start.row=row+from,delta.start.column=column;break}chunk.push(""),this.applyDelta({start:this.pos(row+from,column),end:this.pos(row+to,column=0),action:delta.action,lines:chunk},!0)}},this.revertDelta=function(delta){this.applyDelta({start:this.clonePos(delta.start),end:this.clonePos(delta.end),action:"insert"==delta.action?"remove":"insert",lines:delta.lines.slice()})},this.indexToPosition=function(index,startRow){for(var lines=this.$lines||this.getAllLines(),newlineLength=this.getNewLineCharacter().length,i=startRow||0,l=lines.length;l>i;i++)if(index-=lines[i].length+newlineLength,0>index)return{row:i,column:index+lines[i].length+newlineLength};return{row:l-1,column:lines[l-1].length}},this.positionToIndex=function(pos,startRow){for(var lines=this.$lines||this.getAllLines(),newlineLength=this.getNewLineCharacter().length,index=0,row=Math.min(pos.row,lines.length),i=startRow||0;row>i;++i)index+=lines[i].length+newlineLength;return index+pos.column}}).call(Document.prototype),exports.Document=Document}),ace.define("ace/lib/lang",["require","exports","module"],function(acequire,exports){"use strict";exports.last=function(a){return a[a.length-1]},exports.stringReverse=function(string){return string.split("").reverse().join("")},exports.stringRepeat=function(string,count){for(var result="";count>0;)1&count&&(result+=string),(count>>=1)&&(string+=string);return result};var trimBeginRegexp=/^\\s\\s*/,trimEndRegexp=/\\s\\s*$/;exports.stringTrimLeft=function(string){return string.replace(trimBeginRegexp,"")},exports.stringTrimRight=function(string){return string.replace(trimEndRegexp,"")},exports.copyObject=function(obj){var copy={};for(var key in obj)copy[key]=obj[key];return copy},exports.copyArray=function(array){for(var copy=[],i=0,l=array.length;l>i;i++)copy[i]=array[i]&&"object"==typeof array[i]?this.copyObject(array[i]):array[i];return copy},exports.deepCopy=function deepCopy(obj){if("object"!=typeof obj||!obj)return obj;var copy;if(Array.isArray(obj)){copy=[];for(var key=0;obj.length>key;key++)copy[key]=deepCopy(obj[key]);return copy}if("[object Object]"!==Object.prototype.toString.call(obj))return obj;copy={};for(var key in obj)copy[key]=deepCopy(obj[key]);return copy},exports.arrayToMap=function(arr){for(var map={},i=0;arr.length>i;i++)map[arr[i]]=1;return map},exports.createMap=function(props){var map=Object.create(null);for(var i in props)map[i]=props[i];return map},exports.arrayRemove=function(array,value){for(var i=0;array.length>=i;i++)value===array[i]&&array.splice(i,1)},exports.escapeRegExp=function(str){return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,"\\\\$1")},exports.escapeHTML=function(str){return str.replace(/&/g,"&").replace(/"/g,""").replace(/\'/g,"'").replace(/i;i+=2){if(Array.isArray(data[i+1]))var d={action:"insert",start:data[i],lines:data[i+1]};else var d={action:"remove",start:data[i],end:data[i+1]};doc.applyDelta(d,!0)}return _self.$timeout?deferredUpdate.schedule(_self.$timeout):(_self.onUpdate(),void 0)})};(function(){this.$timeout=500,this.setTimeout=function(timeout){this.$timeout=timeout},this.setValue=function(value){this.doc.setValue(value),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(callbackId){this.sender.callback(this.doc.getValue(),callbackId)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(Mirror.prototype)}),ace.define("ace/mode/javascript/jshint",["require","exports","module"],function(acequire,exports,module){module.exports=function outer(modules,cache,entry){function newRequire(name,jumped){if(!cache[name]){if(!modules[name]){var currentRequire="function"==typeof acequire&&acequire;if(!jumped&¤tRequire)return currentRequire(name,!0);if(previousRequire)return previousRequire(name,!0);var err=Error("Cannot find module \'"+name+"\'");throw err.code="MODULE_NOT_FOUND",err}var m=cache[name]={exports:{}};modules[name][0].call(m.exports,function(x){var id=modules[name][1][x];return newRequire(id?id:x)},m,m.exports,outer,modules,cache,entry)}return cache[name].exports}for(var previousRequire="function"==typeof acequire&&acequire,i=0;entry.length>i;i++)newRequire(entry[i]);return newRequire(entry[0])}({"/node_modules/browserify/node_modules/events/events.js":[function(_dereq_,module){function EventEmitter(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function isFunction(arg){return"function"==typeof arg}function isNumber(arg){return"number"==typeof arg}function isObject(arg){return"object"==typeof arg&&null!==arg}function isUndefined(arg){return void 0===arg}module.exports=EventEmitter,EventEmitter.EventEmitter=EventEmitter,EventEmitter.prototype._events=void 0,EventEmitter.prototype._maxListeners=void 0,EventEmitter.defaultMaxListeners=10,EventEmitter.prototype.setMaxListeners=function(n){if(!isNumber(n)||0>n||isNaN(n))throw TypeError("n must be a positive number");return this._maxListeners=n,this},EventEmitter.prototype.emit=function(type){var er,handler,len,args,i,listeners;if(this._events||(this._events={}),"error"===type&&(!this._events.error||isObject(this._events.error)&&!this._events.error.length)){if(er=arguments[1],er instanceof Error)throw er;throw TypeError(\'Uncaught, unspecified "error" event.\')}if(handler=this._events[type],isUndefined(handler))return!1;if(isFunction(handler))switch(arguments.length){case 1:handler.call(this);break;case 2:handler.call(this,arguments[1]);break;case 3:handler.call(this,arguments[1],arguments[2]);break;default:for(len=arguments.length,args=Array(len-1),i=1;len>i;i++)args[i-1]=arguments[i];handler.apply(this,args)}else if(isObject(handler)){for(len=arguments.length,args=Array(len-1),i=1;len>i;i++)args[i-1]=arguments[i];for(listeners=handler.slice(),len=listeners.length,i=0;len>i;i++)listeners[i].apply(this,args)}return!0},EventEmitter.prototype.addListener=function(type,listener){var m;if(!isFunction(listener))throw TypeError("listener must be a function");if(this._events||(this._events={}),this._events.newListener&&this.emit("newListener",type,isFunction(listener.listener)?listener.listener:listener),this._events[type]?isObject(this._events[type])?this._events[type].push(listener):this._events[type]=[this._events[type],listener]:this._events[type]=listener,isObject(this._events[type])&&!this._events[type].warned){var m;m=isUndefined(this._maxListeners)?EventEmitter.defaultMaxListeners:this._maxListeners,m&&m>0&&this._events[type].length>m&&(this._events[type].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[type].length),"function"==typeof console.trace&&console.trace())}return this},EventEmitter.prototype.on=EventEmitter.prototype.addListener,EventEmitter.prototype.once=function(type,listener){function g(){this.removeListener(type,g),fired||(fired=!0,listener.apply(this,arguments))}if(!isFunction(listener))throw TypeError("listener must be a function");var fired=!1;return g.listener=listener,this.on(type,g),this},EventEmitter.prototype.removeListener=function(type,listener){var list,position,length,i;if(!isFunction(listener))throw TypeError("listener must be a function");if(!this._events||!this._events[type])return this;if(list=this._events[type],length=list.length,position=-1,list===listener||isFunction(list.listener)&&list.listener===listener)delete this._events[type],this._events.removeListener&&this.emit("removeListener",type,listener);else if(isObject(list)){for(i=length;i--\x3e0;)if(list[i]===listener||list[i].listener&&list[i].listener===listener){position=i;break}if(0>position)return this;1===list.length?(list.length=0,delete this._events[type]):list.splice(position,1),this._events.removeListener&&this.emit("removeListener",type,listener)}return this},EventEmitter.prototype.removeAllListeners=function(type){var key,listeners;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[type]&&delete this._events[type],this;if(0===arguments.length){for(key in this._events)"removeListener"!==key&&this.removeAllListeners(key);return this.removeAllListeners("removeListener"),this._events={},this\n}if(listeners=this._events[type],isFunction(listeners))this.removeListener(type,listeners);else for(;listeners.length;)this.removeListener(type,listeners[listeners.length-1]);return delete this._events[type],this},EventEmitter.prototype.listeners=function(type){var ret;return ret=this._events&&this._events[type]?isFunction(this._events[type])?[this._events[type]]:this._events[type].slice():[]},EventEmitter.listenerCount=function(emitter,type){var ret;return ret=emitter._events&&emitter._events[type]?isFunction(emitter._events[type])?1:emitter._events[type].length:0}},{}],"/node_modules/jshint/data/ascii-identifier-data.js":[function(_dereq_,module){for(var identifierStartTable=[],i=0;128>i;i++)identifierStartTable[i]=36===i||i>=65&&90>=i||95===i||i>=97&&122>=i;for(var identifierPartTable=[],i=0;128>i;i++)identifierPartTable[i]=identifierStartTable[i]||i>=48&&57>=i;module.exports={asciiIdentifierStartTable:identifierStartTable,asciiIdentifierPartTable:identifierPartTable}},{}],"/node_modules/jshint/lodash.js":[function(_dereq_,module,exports){(function(global){(function(){function baseFindIndex(array,predicate,fromRight){for(var length=array.length,index=fromRight?length:-1;fromRight?index--:length>++index;)if(predicate(array[index],index,array))return index;return-1}function baseIndexOf(array,value,fromIndex){if(value!==value)return indexOfNaN(array,fromIndex);for(var index=fromIndex-1,length=array.length;length>++index;)if(array[index]===value)return index;return-1}function baseIsFunction(value){return"function"==typeof value||!1}function baseToString(value){return"string"==typeof value?value:null==value?"":value+""}function indexOfNaN(array,fromIndex,fromRight){for(var length=array.length,index=fromIndex+(fromRight?0:-1);fromRight?index--:length>++index;){var other=array[index];if(other!==other)return index}return-1}function isObjectLike(value){return!!value&&"object"==typeof value}function lodash(){}function arrayCopy(source,array){var index=-1,length=source.length;for(array||(array=Array(length));length>++index;)array[index]=source[index];return array}function arrayEach(array,iteratee){for(var index=-1,length=array.length;length>++index&&iteratee(array[index],index,array)!==!1;);return array}function arrayFilter(array,predicate){for(var index=-1,length=array.length,resIndex=-1,result=[];length>++index;){var value=array[index];predicate(value,index,array)&&(result[++resIndex]=value)}return result}function arrayMap(array,iteratee){for(var index=-1,length=array.length,result=Array(length);length>++index;)result[index]=iteratee(array[index],index,array);return result}function arrayMax(array){for(var index=-1,length=array.length,result=NEGATIVE_INFINITY;length>++index;){var value=array[index];value>result&&(result=value)}return result}function arraySome(array,predicate){for(var index=-1,length=array.length;length>++index;)if(predicate(array[index],index,array))return!0;return!1}function assignWith(object,source,customizer){var props=keys(source);push.apply(props,getSymbols(source));for(var index=-1,length=props.length;length>++index;){var key=props[index],value=object[key],result=customizer(value,source[key],key,object,source);(result===result?result===value:value!==value)&&(value!==undefined||key in object)||(object[key]=result)}return object}function baseCopy(source,props,object){object||(object={});for(var index=-1,length=props.length;length>++index;){var key=props[index];object[key]=source[key]}return object}function baseCallback(func,thisArg,argCount){var type=typeof func;return"function"==type?thisArg===undefined?func:bindCallback(func,thisArg,argCount):null==func?identity:"object"==type?baseMatches(func):thisArg===undefined?property(func):baseMatchesProperty(func,thisArg)}function baseClone(value,isDeep,customizer,key,object,stackA,stackB){var result;if(customizer&&(result=object?customizer(value,key,object):customizer(value)),result!==undefined)return result;if(!isObject(value))return value;var isArr=isArray(value);if(isArr){if(result=initCloneArray(value),!isDeep)return arrayCopy(value,result)}else{var tag=objToString.call(value),isFunc=tag==funcTag;if(tag!=objectTag&&tag!=argsTag&&(!isFunc||object))return cloneableTags[tag]?initCloneByTag(value,tag,isDeep):object?value:{};if(result=initCloneObject(isFunc?{}:value),!isDeep)return baseAssign(result,value)}stackA||(stackA=[]),stackB||(stackB=[]);for(var length=stackA.length;length--;)if(stackA[length]==value)return stackB[length];return stackA.push(value),stackB.push(result),(isArr?arrayEach:baseForOwn)(value,function(subValue,key){result[key]=baseClone(subValue,isDeep,customizer,key,value,stackA,stackB)}),result}function baseFilter(collection,predicate){var result=[];return baseEach(collection,function(value,index,collection){predicate(value,index,collection)&&result.push(value)}),result}function baseForIn(object,iteratee){return baseFor(object,iteratee,keysIn)}function baseForOwn(object,iteratee){return baseFor(object,iteratee,keys)}function baseGet(object,path,pathKey){if(null!=object){pathKey!==undefined&&pathKey in toObject(object)&&(path=[pathKey]);for(var index=-1,length=path.length;null!=object&&length>++index;)var result=object=object[path[index]];return result}}function baseIsEqual(value,other,customizer,isLoose,stackA,stackB){if(value===other)return 0!==value||1/value==1/other;var valType=typeof value,othType=typeof other;return"function"!=valType&&"object"!=valType&&"function"!=othType&&"object"!=othType||null==value||null==other?value!==value&&other!==other:baseIsEqualDeep(value,other,baseIsEqual,customizer,isLoose,stackA,stackB)}function baseIsEqualDeep(object,other,equalFunc,customizer,isLoose,stackA,stackB){var objIsArr=isArray(object),othIsArr=isArray(other),objTag=arrayTag,othTag=arrayTag;objIsArr||(objTag=objToString.call(object),objTag==argsTag?objTag=objectTag:objTag!=objectTag&&(objIsArr=isTypedArray(object))),othIsArr||(othTag=objToString.call(other),othTag==argsTag?othTag=objectTag:othTag!=objectTag&&(othIsArr=isTypedArray(other)));var objIsObj=objTag==objectTag,othIsObj=othTag==objectTag,isSameTag=objTag==othTag;if(isSameTag&&!objIsArr&&!objIsObj)return equalByTag(object,other,objTag);if(!isLoose){var valWrapped=objIsObj&&hasOwnProperty.call(object,"__wrapped__"),othWrapped=othIsObj&&hasOwnProperty.call(other,"__wrapped__");if(valWrapped||othWrapped)return equalFunc(valWrapped?object.value():object,othWrapped?other.value():other,customizer,isLoose,stackA,stackB)}if(!isSameTag)return!1;stackA||(stackA=[]),stackB||(stackB=[]);for(var length=stackA.length;length--;)if(stackA[length]==object)return stackB[length]==other;stackA.push(object),stackB.push(other);var result=(objIsArr?equalArrays:equalObjects)(object,other,equalFunc,customizer,isLoose,stackA,stackB);return stackA.pop(),stackB.pop(),result}function baseIsMatch(object,props,values,strictCompareFlags,customizer){for(var index=-1,length=props.length,noCustomizer=!customizer;length>++index;)if(noCustomizer&&strictCompareFlags[index]?values[index]!==object[props[index]]:!(props[index]in object))return!1;for(index=-1;length>++index;){var key=props[index],objValue=object[key],srcValue=values[index];if(noCustomizer&&strictCompareFlags[index])var result=objValue!==undefined||key in object;else result=customizer?customizer(objValue,srcValue,key):undefined,result===undefined&&(result=baseIsEqual(srcValue,objValue,customizer,!0));if(!result)return!1}return!0}function baseMatches(source){var props=keys(source),length=props.length;if(!length)return constant(!0);if(1==length){var key=props[0],value=source[key];if(isStrictComparable(value))return function(object){return null==object?!1:object[key]===value&&(value!==undefined||key in toObject(object))}}for(var values=Array(length),strictCompareFlags=Array(length);length--;)value=source[props[length]],values[length]=value,strictCompareFlags[length]=isStrictComparable(value);return function(object){return null!=object&&baseIsMatch(toObject(object),props,values,strictCompareFlags)}}function baseMatchesProperty(path,value){var isArr=isArray(path),isCommon=isKey(path)&&isStrictComparable(value),pathKey=path+"";return path=toPath(path),function(object){if(null==object)return!1;var key=pathKey;if(object=toObject(object),!(!isArr&&isCommon||key in object)){if(object=1==path.length?object:baseGet(object,baseSlice(path,0,-1)),null==object)return!1;key=last(path),object=toObject(object)}return object[key]===value?value!==undefined||key in object:baseIsEqual(value,object[key],null,!0)}}function baseMerge(object,source,customizer,stackA,stackB){if(!isObject(object))return object;var isSrcArr=isLength(source.length)&&(isArray(source)||isTypedArray(source));if(!isSrcArr){var props=keys(source);push.apply(props,getSymbols(source))}return arrayEach(props||source,function(srcValue,key){if(props&&(key=srcValue,srcValue=source[key]),isObjectLike(srcValue))stackA||(stackA=[]),stackB||(stackB=[]),baseMergeDeep(object,source,key,baseMerge,customizer,stackA,stackB);else{var value=object[key],result=customizer?customizer(value,srcValue,key,object,source):undefined,isCommon=result===undefined;isCommon&&(result=srcValue),!isSrcArr&&result===undefined||!isCommon&&(result===result?result===value:value!==value)||(object[key]=result)}}),object}function baseMergeDeep(object,source,key,mergeFunc,customizer,stackA,stackB){for(var length=stackA.length,srcValue=source[key];length--;)if(stackA[length]==srcValue)return object[key]=stackB[length],undefined;var value=object[key],result=customizer?customizer(value,srcValue,key,object,source):undefined,isCommon=result===undefined;isCommon&&(result=srcValue,isLength(srcValue.length)&&(isArray(srcValue)||isTypedArray(srcValue))?result=isArray(value)?value:getLength(value)?arrayCopy(value):[]:isPlainObject(srcValue)||isArguments(srcValue)?result=isArguments(value)?toPlainObject(value):isPlainObject(value)?value:{}:isCommon=!1),stackA.push(srcValue),stackB.push(result),isCommon?object[key]=mergeFunc(result,srcValue,customizer,stackA,stackB):(result===result?result!==value:value===value)&&(object[key]=result)}function baseProperty(key){return function(object){return null==object?undefined:object[key]}}function basePropertyDeep(path){var pathKey=path+"";return path=toPath(path),function(object){return baseGet(object,path,pathKey)}}function baseSlice(array,start,end){var index=-1,length=array.length;start=null==start?0:+start||0,0>start&&(start=-start>length?0:length+start),end=end===undefined||end>length?length:+end||0,0>end&&(end+=length),length=start>end?0:end-start>>>0,start>>>=0;for(var result=Array(length);length>++index;)result[index]=array[index+start];return result}function baseSome(collection,predicate){var result;return baseEach(collection,function(value,index,collection){return result=predicate(value,index,collection),!result}),!!result}function baseValues(object,props){for(var index=-1,length=props.length,result=Array(length);length>++index;)result[index]=object[props[index]];return result}function binaryIndex(array,value,retHighest){var low=0,high=array?array.length:low;if("number"==typeof value&&value===value&&HALF_MAX_ARRAY_LENGTH>=high){for(;high>low;){var mid=low+high>>>1,computed=array[mid];(retHighest?value>=computed:value>computed)?low=mid+1:high=mid}return high}return binaryIndexBy(array,value,identity,retHighest)}function binaryIndexBy(array,value,iteratee,retHighest){value=iteratee(value);for(var low=0,high=array?array.length:0,valIsNaN=value!==value,valIsUndef=value===undefined;high>low;){var mid=floor((low+high)/2),computed=iteratee(array[mid]),isReflexive=computed===computed;if(valIsNaN)var setLow=isReflexive||retHighest;else setLow=valIsUndef?isReflexive&&(retHighest||computed!==undefined):retHighest?value>=computed:value>computed;setLow?low=mid+1:high=mid}return nativeMin(high,MAX_ARRAY_INDEX)}function bindCallback(func,thisArg,argCount){if("function"!=typeof func)return identity;if(thisArg===undefined)return func;switch(argCount){case 1:return function(value){return func.call(thisArg,value)};case 3:return function(value,index,collection){return func.call(thisArg,value,index,collection)};case 4:return function(accumulator,value,index,collection){return func.call(thisArg,accumulator,value,index,collection)};case 5:return function(value,other,key,object,source){return func.call(thisArg,value,other,key,object,source)}}return function(){return func.apply(thisArg,arguments)}}function bufferClone(buffer){return bufferSlice.call(buffer,0)}function createAssigner(assigner){return restParam(function(object,sources){var index=-1,length=null==object?0:sources.length,customizer=length>2&&sources[length-2],guard=length>2&&sources[2],thisArg=length>1&&sources[length-1];for("function"==typeof customizer?(customizer=bindCallback(customizer,thisArg,5),length-=2):(customizer="function"==typeof thisArg?thisArg:null,length-=customizer?1:0),guard&&isIterateeCall(sources[0],sources[1],guard)&&(customizer=3>length?null:customizer,length=1);length>++index;){var source=sources[index];source&&assigner(object,source,customizer)}return object})}function createBaseEach(eachFunc,fromRight){return function(collection,iteratee){var length=collection?getLength(collection):0;if(!isLength(length))return eachFunc(collection,iteratee);for(var index=fromRight?length:-1,iterable=toObject(collection);(fromRight?index--:length>++index)&&iteratee(iterable[index],index,iterable)!==!1;);return collection}}function createBaseFor(fromRight){return function(object,iteratee,keysFunc){for(var iterable=toObject(object),props=keysFunc(object),length=props.length,index=fromRight?length:-1;fromRight?index--:length>++index;){var key=props[index];if(iteratee(iterable[key],key,iterable)===!1)break}return object}}function createFindIndex(fromRight){return function(array,predicate,thisArg){return array&&array.length?(predicate=getCallback(predicate,thisArg,3),baseFindIndex(array,predicate,fromRight)):-1}}function createForEach(arrayFunc,eachFunc){return function(collection,iteratee,thisArg){return"function"==typeof iteratee&&thisArg===undefined&&isArray(collection)?arrayFunc(collection,iteratee):eachFunc(collection,bindCallback(iteratee,thisArg,3))}}function equalArrays(array,other,equalFunc,customizer,isLoose,stackA,stackB){var index=-1,arrLength=array.length,othLength=other.length,result=!0;if(arrLength!=othLength&&!(isLoose&&othLength>arrLength))return!1;for(;result&&arrLength>++index;){var arrValue=array[index],othValue=other[index];if(result=undefined,customizer&&(result=isLoose?customizer(othValue,arrValue,index):customizer(arrValue,othValue,index)),result===undefined)if(isLoose)for(var othIndex=othLength;othIndex--&&(othValue=other[othIndex],!(result=arrValue&&arrValue===othValue||equalFunc(arrValue,othValue,customizer,isLoose,stackA,stackB))););else result=arrValue&&arrValue===othValue||equalFunc(arrValue,othValue,customizer,isLoose,stackA,stackB)}return!!result}function equalByTag(object,other,tag){switch(tag){case boolTag:case dateTag:return+object==+other;case errorTag:return object.name==other.name&&object.message==other.message;case numberTag:return object!=+object?other!=+other:0==object?1/object==1/other:object==+other;case regexpTag:case stringTag:return object==other+""}return!1}function equalObjects(object,other,equalFunc,customizer,isLoose,stackA,stackB){var objProps=keys(object),objLength=objProps.length,othProps=keys(other),othLength=othProps.length;if(objLength!=othLength&&!isLoose)return!1;for(var skipCtor=isLoose,index=-1;objLength>++index;){var key=objProps[index],result=isLoose?key in other:hasOwnProperty.call(other,key);if(result){var objValue=object[key],othValue=other[key];result=undefined,customizer&&(result=isLoose?customizer(othValue,objValue,key):customizer(objValue,othValue,key)),result===undefined&&(result=objValue&&objValue===othValue||equalFunc(objValue,othValue,customizer,isLoose,stackA,stackB))}if(!result)return!1;skipCtor||(skipCtor="constructor"==key)}if(!skipCtor){var objCtor=object.constructor,othCtor=other.constructor;if(objCtor!=othCtor&&"constructor"in object&&"constructor"in other&&!("function"==typeof objCtor&&objCtor instanceof objCtor&&"function"==typeof othCtor&&othCtor instanceof othCtor))return!1}return!0}function getCallback(func,thisArg,argCount){var result=lodash.callback||callback;return result=result===callback?baseCallback:result,argCount?result(func,thisArg,argCount):result}function getIndexOf(collection,target,fromIndex){var result=lodash.indexOf||indexOf;return result=result===indexOf?baseIndexOf:result,collection?result(collection,target,fromIndex):result}function initCloneArray(array){var length=array.length,result=new array.constructor(length);return length&&"string"==typeof array[0]&&hasOwnProperty.call(array,"index")&&(result.index=array.index,result.input=array.input),result}function initCloneObject(object){var Ctor=object.constructor;return"function"==typeof Ctor&&Ctor instanceof Ctor||(Ctor=Object),new Ctor}function initCloneByTag(object,tag,isDeep){var Ctor=object.constructor;switch(tag){case arrayBufferTag:return bufferClone(object);case boolTag:case dateTag:return new Ctor(+object);case float32Tag:case float64Tag:case int8Tag:case int16Tag:case int32Tag:case uint8Tag:case uint8ClampedTag:case uint16Tag:case uint32Tag:var buffer=object.buffer;return new Ctor(isDeep?bufferClone(buffer):buffer,object.byteOffset,object.length);case numberTag:case stringTag:return new Ctor(object);case regexpTag:var result=new Ctor(object.source,reFlags.exec(object));result.lastIndex=object.lastIndex}return result}function isIndex(value,length){return value=+value,length=null==length?MAX_SAFE_INTEGER:length,value>-1&&0==value%1&&length>value}function isIterateeCall(value,index,object){if(!isObject(object))return!1;var type=typeof index;if("number"==type)var length=getLength(object),prereq=isLength(length)&&isIndex(index,length);else prereq="string"==type&&index in object;if(prereq){var other=object[index];return value===value?value===other:other!==other}return!1}function isKey(value,object){var type=typeof value;if("string"==type&&reIsPlainProp.test(value)||"number"==type)return!0;if(isArray(value))return!1;var result=!reIsDeepProp.test(value);return result||null!=object&&value in toObject(object)}function isLength(value){return"number"==typeof value&&value>-1&&0==value%1&&MAX_SAFE_INTEGER>=value}function isStrictComparable(value){return value===value&&(0===value?1/value>0:!isObject(value))}function shimIsPlainObject(value){var Ctor;if(lodash.support,!isObjectLike(value)||objToString.call(value)!=objectTag||!hasOwnProperty.call(value,"constructor")&&(Ctor=value.constructor,"function"==typeof Ctor&&!(Ctor instanceof Ctor)))return!1;var result;return baseForIn(value,function(subValue,key){result=key}),result===undefined||hasOwnProperty.call(value,result)}function shimKeys(object){for(var props=keysIn(object),propsLength=props.length,length=propsLength&&object.length,support=lodash.support,allowIndexes=length&&isLength(length)&&(isArray(object)||support.nonEnumArgs&&isArguments(object)),index=-1,result=[];propsLength>++index;){var key=props[index];(allowIndexes&&isIndex(key,length)||hasOwnProperty.call(object,key))&&result.push(key)}return result}function toObject(value){return isObject(value)?value:Object(value)}function toPath(value){if(isArray(value))return value;var result=[];return baseToString(value).replace(rePropName,function(match,number,quote,string){result.push(quote?string.replace(reEscapeChar,"$1"):number||match)}),result}function indexOf(array,value,fromIndex){var length=array?array.length:0;if(!length)return-1;if("number"==typeof fromIndex)fromIndex=0>fromIndex?nativeMax(length+fromIndex,0):fromIndex;else if(fromIndex){var index=binaryIndex(array,value),other=array[index];return(value===value?value===other:other!==other)?index:-1}return baseIndexOf(array,value,fromIndex||0)}function last(array){var length=array?array.length:0;return length?array[length-1]:undefined}function slice(array,start,end){var length=array?array.length:0;return length?(end&&"number"!=typeof end&&isIterateeCall(array,start,end)&&(start=0,end=length),baseSlice(array,start,end)):[]}function unzip(array){for(var index=-1,length=(array&&array.length&&arrayMax(arrayMap(array,getLength)))>>>0,result=Array(length);length>++index;)result[index]=arrayMap(array,baseProperty(index));return result}function includes(collection,target,fromIndex,guard){var length=collection?getLength(collection):0;return isLength(length)||(collection=values(collection),length=collection.length),length?(fromIndex="number"!=typeof fromIndex||guard&&isIterateeCall(target,fromIndex,guard)?0:0>fromIndex?nativeMax(length+fromIndex,0):fromIndex||0,"string"==typeof collection||!isArray(collection)&&isString(collection)?length>fromIndex&&collection.indexOf(target,fromIndex)>-1:getIndexOf(collection,target,fromIndex)>-1):!1}function reject(collection,predicate,thisArg){var func=isArray(collection)?arrayFilter:baseFilter;return predicate=getCallback(predicate,thisArg,3),func(collection,function(value,index,collection){return!predicate(value,index,collection)})}function some(collection,predicate,thisArg){var func=isArray(collection)?arraySome:baseSome;return thisArg&&isIterateeCall(collection,predicate,thisArg)&&(predicate=null),("function"!=typeof predicate||thisArg!==undefined)&&(predicate=getCallback(predicate,thisArg,3)),func(collection,predicate)}function restParam(func,start){if("function"!=typeof func)throw new TypeError(FUNC_ERROR_TEXT);return start=nativeMax(start===undefined?func.length-1:+start||0,0),function(){for(var args=arguments,index=-1,length=nativeMax(args.length-start,0),rest=Array(length);length>++index;)rest[index]=args[start+index];switch(start){case 0:return func.call(this,rest);case 1:return func.call(this,args[0],rest);case 2:return func.call(this,args[0],args[1],rest)}var otherArgs=Array(start+1);for(index=-1;start>++index;)otherArgs[index]=args[index];return otherArgs[start]=rest,func.apply(this,otherArgs)}}function clone(value,isDeep,customizer,thisArg){return isDeep&&"boolean"!=typeof isDeep&&isIterateeCall(value,isDeep,customizer)?isDeep=!1:"function"==typeof isDeep&&(thisArg=customizer,customizer=isDeep,isDeep=!1),customizer="function"==typeof customizer&&bindCallback(customizer,thisArg,1),baseClone(value,isDeep,customizer)}function isArguments(value){var length=isObjectLike(value)?value.length:undefined;return isLength(length)&&objToString.call(value)==argsTag}function isEmpty(value){if(null==value)return!0;var length=getLength(value);return isLength(length)&&(isArray(value)||isString(value)||isArguments(value)||isObjectLike(value)&&isFunction(value.splice))?!length:!keys(value).length}function isObject(value){var type=typeof value;return"function"==type||!!value&&"object"==type}function isNative(value){return null==value?!1:objToString.call(value)==funcTag?reIsNative.test(fnToString.call(value)):isObjectLike(value)&&reIsHostCtor.test(value)}function isNumber(value){return"number"==typeof value||isObjectLike(value)&&objToString.call(value)==numberTag}function isString(value){return"string"==typeof value||isObjectLike(value)&&objToString.call(value)==stringTag}function isTypedArray(value){return isObjectLike(value)&&isLength(value.length)&&!!typedArrayTags[objToString.call(value)]}function toPlainObject(value){return baseCopy(value,keysIn(value))}function has(object,path){if(null==object)return!1;var result=hasOwnProperty.call(object,path);return result||isKey(path)||(path=toPath(path),object=1==path.length?object:baseGet(object,baseSlice(path,0,-1)),path=last(path),result=null!=object&&hasOwnProperty.call(object,path)),result}function keysIn(object){if(null==object)return[];isObject(object)||(object=Object(object));var length=object.length;length=length&&isLength(length)&&(isArray(object)||support.nonEnumArgs&&isArguments(object))&&length||0;for(var Ctor=object.constructor,index=-1,isProto="function"==typeof Ctor&&Ctor.prototype===object,result=Array(length),skipIndexes=length>0;length>++index;)result[index]=index+"";for(var key in object)skipIndexes&&isIndex(key,length)||"constructor"==key&&(isProto||!hasOwnProperty.call(object,key))||result.push(key);return result}function values(object){return baseValues(object,keys(object))}function escapeRegExp(string){return string=baseToString(string),string&&reHasRegExpChars.test(string)?string.replace(reRegExpChars,"\\\\$&"):string}function callback(func,thisArg,guard){return guard&&isIterateeCall(func,thisArg,guard)&&(thisArg=null),baseCallback(func,thisArg)}function constant(value){return function(){return value}}function identity(value){return value}function property(path){return isKey(path)?baseProperty(path):basePropertyDeep(path)}var undefined,VERSION="3.7.0",FUNC_ERROR_TEXT="Expected a function",argsTag="[object Arguments]",arrayTag="[object Array]",boolTag="[object Boolean]",dateTag="[object Date]",errorTag="[object Error]",funcTag="[object Function]",mapTag="[object Map]",numberTag="[object Number]",objectTag="[object Object]",regexpTag="[object RegExp]",setTag="[object Set]",stringTag="[object String]",weakMapTag="[object WeakMap]",arrayBufferTag="[object ArrayBuffer]",float32Tag="[object Float32Array]",float64Tag="[object Float64Array]",int8Tag="[object Int8Array]",int16Tag="[object Int16Array]",int32Tag="[object Int32Array]",uint8Tag="[object Uint8Array]",uint8ClampedTag="[object Uint8ClampedArray]",uint16Tag="[object Uint16Array]",uint32Tag="[object Uint32Array]",reIsDeepProp=/\\.|\\[(?:[^[\\]]+|(["\'])(?:(?!\\1)[^\\n\\\\]|\\\\.)*?)\\1\\]/,reIsPlainProp=/^\\w*$/,rePropName=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|(["\'])((?:(?!\\2)[^\\n\\\\]|\\\\.)*?)\\2)\\]/g,reRegExpChars=/[.*+?^${}()|[\\]\\/\\\\]/g,reHasRegExpChars=RegExp(reRegExpChars.source),reEscapeChar=/\\\\(\\\\)?/g,reFlags=/\\w*$/,reIsHostCtor=/^\\[object .+?Constructor\\]$/,typedArrayTags={};typedArrayTags[float32Tag]=typedArrayTags[float64Tag]=typedArrayTags[int8Tag]=typedArrayTags[int16Tag]=typedArrayTags[int32Tag]=typedArrayTags[uint8Tag]=typedArrayTags[uint8ClampedTag]=typedArrayTags[uint16Tag]=typedArrayTags[uint32Tag]=!0,typedArrayTags[argsTag]=typedArrayTags[arrayTag]=typedArrayTags[arrayBufferTag]=typedArrayTags[boolTag]=typedArrayTags[dateTag]=typedArrayTags[errorTag]=typedArrayTags[funcTag]=typedArrayTags[mapTag]=typedArrayTags[numberTag]=typedArrayTags[objectTag]=typedArrayTags[regexpTag]=typedArrayTags[setTag]=typedArrayTags[stringTag]=typedArrayTags[weakMapTag]=!1;var cloneableTags={};cloneableTags[argsTag]=cloneableTags[arrayTag]=cloneableTags[arrayBufferTag]=cloneableTags[boolTag]=cloneableTags[dateTag]=cloneableTags[float32Tag]=cloneableTags[float64Tag]=cloneableTags[int8Tag]=cloneableTags[int16Tag]=cloneableTags[int32Tag]=cloneableTags[numberTag]=cloneableTags[objectTag]=cloneableTags[regexpTag]=cloneableTags[stringTag]=cloneableTags[uint8Tag]=cloneableTags[uint8ClampedTag]=cloneableTags[uint16Tag]=cloneableTags[uint32Tag]=!0,cloneableTags[errorTag]=cloneableTags[funcTag]=cloneableTags[mapTag]=cloneableTags[setTag]=cloneableTags[weakMapTag]=!1;var objectTypes={"function":!0,object:!0},freeExports=objectTypes[typeof exports]&&exports&&!exports.nodeType&&exports,freeModule=objectTypes[typeof module]&&module&&!module.nodeType&&module,freeGlobal=freeExports&&freeModule&&"object"==typeof global&&global&&global.Object&&global,freeSelf=objectTypes[typeof self]&&self&&self.Object&&self,freeWindow=objectTypes[typeof window]&&window&&window.Object&&window,moduleExports=freeModule&&freeModule.exports===freeExports&&freeExports,root=freeGlobal||freeWindow!==(this&&this.window)&&freeWindow||freeSelf||this,arrayProto=Array.prototype,objectProto=Object.prototype,fnToString=Function.prototype.toString,hasOwnProperty=objectProto.hasOwnProperty,objToString=objectProto.toString,reIsNative=RegExp("^"+escapeRegExp(objToString).replace(/toString|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,"$1.*?")+"$"),ArrayBuffer=isNative(ArrayBuffer=root.ArrayBuffer)&&ArrayBuffer,bufferSlice=isNative(bufferSlice=ArrayBuffer&&new ArrayBuffer(0).slice)&&bufferSlice,floor=Math.floor,getOwnPropertySymbols=isNative(getOwnPropertySymbols=Object.getOwnPropertySymbols)&&getOwnPropertySymbols,getPrototypeOf=isNative(getPrototypeOf=Object.getPrototypeOf)&&getPrototypeOf,push=arrayProto.push,preventExtensions=isNative(Object.preventExtensions=Object.preventExtensions)&&preventExtensions,propertyIsEnumerable=objectProto.propertyIsEnumerable,Uint8Array=isNative(Uint8Array=root.Uint8Array)&&Uint8Array,Float64Array=function(){try{var func=isNative(func=root.Float64Array)&&func,result=new func(new ArrayBuffer(10),0,1)&&func}catch(e){}return result}(),nativeAssign=function(){var object={1:0},func=preventExtensions&&isNative(func=Object.assign)&&func;try{func(preventExtensions(object),"xo")}catch(e){}return!object[1]&&func}(),nativeIsArray=isNative(nativeIsArray=Array.isArray)&&nativeIsArray,nativeKeys=isNative(nativeKeys=Object.keys)&&nativeKeys,nativeMax=Math.max,nativeMin=Math.min,NEGATIVE_INFINITY=Number.NEGATIVE_INFINITY,MAX_ARRAY_LENGTH=Math.pow(2,32)-1,MAX_ARRAY_INDEX=MAX_ARRAY_LENGTH-1,HALF_MAX_ARRAY_LENGTH=MAX_ARRAY_LENGTH>>>1,FLOAT64_BYTES_PER_ELEMENT=Float64Array?Float64Array.BYTES_PER_ELEMENT:0,MAX_SAFE_INTEGER=Math.pow(2,53)-1,support=lodash.support={};(function(x){var Ctor=function(){this.x=x},props=[];Ctor.prototype={valueOf:x,y:x};for(var key in new Ctor)props.push(key);support.funcDecomp=/\\bthis\\b/.test(function(){return this}),support.funcNames="string"==typeof Function.name;try{support.nonEnumArgs=!propertyIsEnumerable.call(arguments,1)}catch(e){support.nonEnumArgs=!0}})(1,0);var baseAssign=nativeAssign||function(object,source){return null==source?object:baseCopy(source,getSymbols(source),baseCopy(source,keys(source),object))},baseEach=createBaseEach(baseForOwn),baseFor=createBaseFor();bufferSlice||(bufferClone=ArrayBuffer&&Uint8Array?function(buffer){var byteLength=buffer.byteLength,floatLength=Float64Array?floor(byteLength/FLOAT64_BYTES_PER_ELEMENT):0,offset=floatLength*FLOAT64_BYTES_PER_ELEMENT,result=new ArrayBuffer(byteLength);if(floatLength){var view=new Float64Array(result,0,floatLength);view.set(new Float64Array(buffer,0,floatLength))}return byteLength!=offset&&(view=new Uint8Array(result,offset),view.set(new Uint8Array(buffer,offset))),result}:constant(null));var getLength=baseProperty("length"),getSymbols=getOwnPropertySymbols?function(object){return getOwnPropertySymbols(toObject(object))}:constant([]),findLastIndex=createFindIndex(!0),zip=restParam(unzip),forEach=createForEach(arrayEach,baseEach),isArray=nativeIsArray||function(value){return isObjectLike(value)&&isLength(value.length)&&objToString.call(value)==arrayTag},isFunction=baseIsFunction(/x/)||Uint8Array&&!baseIsFunction(Uint8Array)?function(value){return objToString.call(value)==funcTag}:baseIsFunction,isPlainObject=getPrototypeOf?function(value){if(!value||objToString.call(value)!=objectTag)return!1;var valueOf=value.valueOf,objProto=isNative(valueOf)&&(objProto=getPrototypeOf(valueOf))&&getPrototypeOf(objProto);return objProto?value==objProto||getPrototypeOf(value)==objProto:shimIsPlainObject(value)}:shimIsPlainObject,assign=createAssigner(function(object,source,customizer){return customizer?assignWith(object,source,customizer):baseAssign(object,source)}),keys=nativeKeys?function(object){if(object)var Ctor=object.constructor,length=object.length;return"function"==typeof Ctor&&Ctor.prototype===object||"function"!=typeof object&&isLength(length)?shimKeys(object):isObject(object)?nativeKeys(object):[]}:shimKeys,merge=createAssigner(baseMerge);lodash.assign=assign,lodash.callback=callback,lodash.constant=constant,lodash.forEach=forEach,lodash.keys=keys,lodash.keysIn=keysIn,lodash.merge=merge,lodash.property=property,lodash.reject=reject,lodash.restParam=restParam,lodash.slice=slice,lodash.toPlainObject=toPlainObject,lodash.unzip=unzip,lodash.values=values,lodash.zip=zip,lodash.each=forEach,lodash.extend=assign,lodash.iteratee=callback,lodash.clone=clone,lodash.escapeRegExp=escapeRegExp,lodash.findLastIndex=findLastIndex,lodash.has=has,lodash.identity=identity,lodash.includes=includes,lodash.indexOf=indexOf,lodash.isArguments=isArguments,lodash.isArray=isArray,lodash.isEmpty=isEmpty,lodash.isFunction=isFunction,lodash.isNative=isNative,lodash.isNumber=isNumber,lodash.isObject=isObject,lodash.isPlainObject=isPlainObject,lodash.isString=isString,lodash.isTypedArray=isTypedArray,lodash.last=last,lodash.some=some,lodash.any=some,lodash.contains=includes,lodash.include=includes,lodash.VERSION=VERSION,freeExports&&freeModule?moduleExports?(freeModule.exports=lodash)._=lodash:freeExports._=lodash:root._=lodash\n}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],"/node_modules/jshint/src/jshint.js":[function(_dereq_,module,exports){var _=_dereq_("../lodash"),events=_dereq_("events"),vars=_dereq_("./vars.js"),messages=_dereq_("./messages.js"),Lexer=_dereq_("./lex.js").Lexer,reg=_dereq_("./reg.js"),state=_dereq_("./state.js").state,style=_dereq_("./style.js"),options=_dereq_("./options.js"),scopeManager=_dereq_("./scope-manager.js"),JSHINT=function(){"use strict";function checkOption(name,t){return name=name.trim(),/^[+-]W\\d{3}$/g.test(name)?!0:-1!==options.validNames.indexOf(name)||"jslint"===t.type||_.has(options.removed,name)?!0:(error("E001",t,name),!1)}function isString(obj){return"[object String]"===Object.prototype.toString.call(obj)}function isIdentifier(tkn,value){return tkn?tkn.identifier&&tkn.value===value?!0:!1:!1}function isReserved(token){if(!token.reserved)return!1;var meta=token.meta;if(meta&&meta.isFutureReservedWord&&state.inES5()){if(!meta.es5)return!1;if(meta.strictOnly&&!state.option.strict&&!state.isStrict())return!1;if(token.isProperty)return!1}return!0}function supplant(str,data){return str.replace(/\\{([^{}]*)\\}/g,function(a,b){var r=data[b];return"string"==typeof r||"number"==typeof r?r:a})}function combine(dest,src){Object.keys(src).forEach(function(name){_.has(JSHINT.blacklist,name)||(dest[name]=src[name])})}function processenforceall(){if(state.option.enforceall){for(var enforceopt in options.bool.enforcing)void 0!==state.option[enforceopt]||options.noenforceall[enforceopt]||(state.option[enforceopt]=!0);for(var relaxopt in options.bool.relaxing)void 0===state.option[relaxopt]&&(state.option[relaxopt]=!1)}}function assume(){processenforceall(),state.option.esversion||state.option.moz||(state.option.esversion=state.option.es3?3:state.option.esnext?6:5),state.inES5()&&combine(predefined,vars.ecmaIdentifiers[5]),state.inES6()&&combine(predefined,vars.ecmaIdentifiers[6]),state.option.module&&(state.option.strict===!0&&(state.option.strict="global"),state.inES6()||warning("W134",state.tokens.next,"module",6)),state.option.couch&&combine(predefined,vars.couch),state.option.qunit&&combine(predefined,vars.qunit),state.option.rhino&&combine(predefined,vars.rhino),state.option.shelljs&&(combine(predefined,vars.shelljs),combine(predefined,vars.node)),state.option.typed&&combine(predefined,vars.typed),state.option.phantom&&(combine(predefined,vars.phantom),state.option.strict===!0&&(state.option.strict="global")),state.option.prototypejs&&combine(predefined,vars.prototypejs),state.option.node&&(combine(predefined,vars.node),combine(predefined,vars.typed),state.option.strict===!0&&(state.option.strict="global")),state.option.devel&&combine(predefined,vars.devel),state.option.dojo&&combine(predefined,vars.dojo),state.option.browser&&(combine(predefined,vars.browser),combine(predefined,vars.typed)),state.option.browserify&&(combine(predefined,vars.browser),combine(predefined,vars.typed),combine(predefined,vars.browserify),state.option.strict===!0&&(state.option.strict="global")),state.option.nonstandard&&combine(predefined,vars.nonstandard),state.option.jasmine&&combine(predefined,vars.jasmine),state.option.jquery&&combine(predefined,vars.jquery),state.option.mootools&&combine(predefined,vars.mootools),state.option.worker&&combine(predefined,vars.worker),state.option.wsh&&combine(predefined,vars.wsh),state.option.globalstrict&&state.option.strict!==!1&&(state.option.strict="global"),state.option.yui&&combine(predefined,vars.yui),state.option.mocha&&combine(predefined,vars.mocha)}function quit(code,line,chr){var percentage=Math.floor(100*(line/state.lines.length)),message=messages.errors[code].desc;throw{name:"JSHintError",line:line,character:chr,message:message+" ("+percentage+"% scanned).",raw:message,code:code}}function removeIgnoredMessages(){var ignored=state.ignoredLines;_.isEmpty(ignored)||(JSHINT.errors=_.reject(JSHINT.errors,function(err){return ignored[err.line]}))}function warning(code,t,a,b,c,d){var ch,l,w,msg;if(/^W\\d{3}$/.test(code)){if(state.ignored[code])return;msg=messages.warnings[code]}else/E\\d{3}/.test(code)?msg=messages.errors[code]:/I\\d{3}/.test(code)&&(msg=messages.info[code]);return t=t||state.tokens.next||{},"(end)"===t.id&&(t=state.tokens.curr),l=t.line||0,ch=t.from||0,w={id:"(error)",raw:msg.desc,code:msg.code,evidence:state.lines[l-1]||"",line:l,character:ch,scope:JSHINT.scope,a:a,b:b,c:c,d:d},w.reason=supplant(msg.desc,w),JSHINT.errors.push(w),removeIgnoredMessages(),JSHINT.errors.length>=state.option.maxerr&&quit("E043",l,ch),w}function warningAt(m,l,ch,a,b,c,d){return warning(m,{line:l,from:ch},a,b,c,d)}function error(m,t,a,b,c,d){warning(m,t,a,b,c,d)}function errorAt(m,l,ch,a,b,c,d){return error(m,{line:l,from:ch},a,b,c,d)}function addInternalSrc(elem,src){var i;return i={id:"(internal)",elem:elem,value:src},JSHINT.internals.push(i),i}function doOption(){var nt=state.tokens.next,body=nt.body.match(/(-\\s+)?[^\\s,:]+(?:\\s*:\\s*(-\\s+)?[^\\s,]+)?/g)||[],predef={};if("globals"===nt.type){body.forEach(function(g,idx){g=g.split(":");var key=(g[0]||"").trim(),val=(g[1]||"").trim();if("-"===key||!key.length){if(idx>0&&idx===body.length-1)return;return error("E002",nt),void 0}"-"===key.charAt(0)?(key=key.slice(1),val=!1,JSHINT.blacklist[key]=key,delete predefined[key]):predef[key]="true"===val}),combine(predefined,predef);for(var key in predef)_.has(predef,key)&&(declared[key]=nt)}"exported"===nt.type&&body.forEach(function(e,idx){if(!e.length){if(idx>0&&idx===body.length-1)return;return error("E002",nt),void 0}state.funct["(scope)"].addExported(e)}),"members"===nt.type&&(membersOnly=membersOnly||{},body.forEach(function(m){var ch1=m.charAt(0),ch2=m.charAt(m.length-1);ch1!==ch2||\'"\'!==ch1&&"\'"!==ch1||(m=m.substr(1,m.length-2).replace(\'\\\\"\',\'"\')),membersOnly[m]=!1}));var numvals=["maxstatements","maxparams","maxdepth","maxcomplexity","maxerr","maxlen","indent"];("jshint"===nt.type||"jslint"===nt.type)&&(body.forEach(function(g){g=g.split(":");var key=(g[0]||"").trim(),val=(g[1]||"").trim();if(checkOption(key,nt))if(numvals.indexOf(key)>=0)if("false"!==val){if(val=+val,"number"!=typeof val||!isFinite(val)||0>=val||Math.floor(val)!==val)return error("E032",nt,g[1].trim()),void 0;state.option[key]=val}else state.option[key]="indent"===key?4:!1;else{if("validthis"===key)return state.funct["(global)"]?void error("E009"):"true"!==val&&"false"!==val?void error("E002",nt):(state.option.validthis="true"===val,void 0);if("quotmark"!==key)if("shadow"!==key)if("unused"!==key)if("latedef"!==key)if("ignore"!==key)if("strict"!==key){"module"===key&&(hasParsedCode(state.funct)||error("E055",state.tokens.next,"module"));var esversions={es3:3,es5:5,esnext:6};if(!_.has(esversions,key)){if("esversion"===key){switch(val){case"5":state.inES5(!0)&&warning("I003");case"3":case"6":state.option.moz=!1,state.option.esversion=+val;break;case"2015":state.option.moz=!1,state.option.esversion=6;break;default:error("E002",nt)}return hasParsedCode(state.funct)||error("E055",state.tokens.next,"esversion"),void 0}var match=/^([+-])(W\\d{3})$/g.exec(key);if(match)return state.ignored[match[2]]="-"===match[1],void 0;var tn;return"true"===val||"false"===val?("jslint"===nt.type?(tn=options.renamed[key]||key,state.option[tn]="true"===val,void 0!==options.inverted[tn]&&(state.option[tn]=!state.option[tn])):state.option[key]="true"===val,"newcap"===key&&(state.option["(explicitNewcap)"]=!0),void 0):(error("E002",nt),void 0)}switch(val){case"true":state.option.moz=!1,state.option.esversion=esversions[key];break;case"false":state.option.moz||(state.option.esversion=5);break;default:error("E002",nt)}}else switch(val){case"true":state.option.strict=!0;break;case"false":state.option.strict=!1;break;case"func":case"global":case"implied":state.option.strict=val;break;default:error("E002",nt)}else switch(val){case"line":state.ignoredLines[nt.line]=!0,removeIgnoredMessages();break;default:error("E002",nt)}else switch(val){case"true":state.option.latedef=!0;break;case"false":state.option.latedef=!1;break;case"nofunc":state.option.latedef="nofunc";break;default:error("E002",nt)}else switch(val){case"true":state.option.unused=!0;break;case"false":state.option.unused=!1;break;case"vars":case"strict":state.option.unused=val;break;default:error("E002",nt)}else switch(val){case"true":state.option.shadow=!0;break;case"outer":state.option.shadow="outer";break;case"false":case"inner":state.option.shadow="inner";break;default:error("E002",nt)}else switch(val){case"true":case"false":state.option.quotmark="true"===val;break;case"double":case"single":state.option.quotmark=val;break;default:error("E002",nt)}}}),assume())}function peek(p){var t,i=p||0,j=lookahead.length;if(j>i)return lookahead[i];for(;i>=j;)t=lookahead[j],t||(t=lookahead[j]=lex.token()),j+=1;return t||"(end)"!==state.tokens.next.id?t:state.tokens.next}function peekIgnoreEOL(){var t,i=0;do t=peek(i++);while("(endline)"===t.id);return t}function advance(id,t){switch(state.tokens.curr.id){case"(number)":"."===state.tokens.next.id&&warning("W005",state.tokens.curr);break;case"-":("-"===state.tokens.next.id||"--"===state.tokens.next.id)&&warning("W006");break;case"+":("+"===state.tokens.next.id||"++"===state.tokens.next.id)&&warning("W007")}for(id&&state.tokens.next.id!==id&&(t?"(end)"===state.tokens.next.id?error("E019",t,t.id):error("E020",state.tokens.next,id,t.id,t.line,state.tokens.next.value):("(identifier)"!==state.tokens.next.type||state.tokens.next.value!==id)&&warning("W116",state.tokens.next,id,state.tokens.next.value)),state.tokens.prev=state.tokens.curr,state.tokens.curr=state.tokens.next;;){if(state.tokens.next=lookahead.shift()||lex.token(),state.tokens.next||quit("E041",state.tokens.curr.line),"(end)"===state.tokens.next.id||"(error)"===state.tokens.next.id)return;if(state.tokens.next.check&&state.tokens.next.check(),state.tokens.next.isSpecial)"falls through"===state.tokens.next.type?state.tokens.curr.caseFallsThrough=!0:doOption();else if("(endline)"!==state.tokens.next.id)break}}function isInfix(token){return token.infix||!token.identifier&&!token.template&&!!token.led}function isEndOfExpr(){var curr=state.tokens.curr,next=state.tokens.next;return";"===next.id||"}"===next.id||":"===next.id?!0:isInfix(next)===isInfix(curr)||"yield"===curr.id&&state.inMoz()?curr.line!==startLine(next):!1}function isBeginOfExpr(prev){return!prev.left&&"unary"!==prev.arity}function expression(rbp,initial){var left,isArray=!1,isObject=!1,isLetExpr=!1;state.nameStack.push(),initial||"let"!==state.tokens.next.value||"("!==peek(0).value||(state.inMoz()||warning("W118",state.tokens.next,"let expressions"),isLetExpr=!0,state.funct["(scope)"].stack(),advance("let"),advance("("),state.tokens.prev.fud(),advance(")")),"(end)"===state.tokens.next.id&&error("E006",state.tokens.curr);var isDangerous=state.option.asi&&state.tokens.prev.line!==startLine(state.tokens.curr)&&_.contains(["]",")"],state.tokens.prev.id)&&_.contains(["[","("],state.tokens.curr.id);if(isDangerous&&warning("W014",state.tokens.curr,state.tokens.curr.id),advance(),initial&&(state.funct["(verb)"]=state.tokens.curr.value,state.tokens.curr.beginsStmt=!0),initial===!0&&state.tokens.curr.fud)left=state.tokens.curr.fud();else for(state.tokens.curr.nud?left=state.tokens.curr.nud():error("E030",state.tokens.curr,state.tokens.curr.id);(state.tokens.next.lbp>rbp||"(template)"===state.tokens.next.type)&&!isEndOfExpr();)isArray="Array"===state.tokens.curr.value,isObject="Object"===state.tokens.curr.value,left&&(left.value||left.first&&left.first.value)&&("new"!==left.value||left.first&&left.first.value&&"."===left.first.value)&&(isArray=!1,left.value!==state.tokens.curr.value&&(isObject=!1)),advance(),isArray&&"("===state.tokens.curr.id&&")"===state.tokens.next.id&&warning("W009",state.tokens.curr),isObject&&"("===state.tokens.curr.id&&")"===state.tokens.next.id&&warning("W010",state.tokens.curr),left&&state.tokens.curr.led?left=state.tokens.curr.led(left):error("E033",state.tokens.curr,state.tokens.curr.id);return isLetExpr&&state.funct["(scope)"].unstack(),state.nameStack.pop(),left}function startLine(token){return token.startLine||token.line}function nobreaknonadjacent(left,right){left=left||state.tokens.curr,right=right||state.tokens.next,state.option.laxbreak||left.line===startLine(right)||warning("W014",right,right.value)}function nolinebreak(t){t=t||state.tokens.curr,t.line!==startLine(state.tokens.next)&&warning("E022",t,t.value)}function nobreakcomma(left,right){left.line!==startLine(right)&&(state.option.laxcomma||(comma.first&&(warning("I001"),comma.first=!1),warning("W014",left,right.value)))}function comma(opts){if(opts=opts||{},opts.peek?nobreakcomma(state.tokens.prev,state.tokens.curr):(nobreakcomma(state.tokens.curr,state.tokens.next),advance(",")),state.tokens.next.identifier&&(!opts.property||!state.inES5()))switch(state.tokens.next.value){case"break":case"case":case"catch":case"continue":case"default":case"do":case"else":case"finally":case"for":case"if":case"in":case"instanceof":case"return":case"switch":case"throw":case"try":case"var":case"let":case"while":case"with":return error("E024",state.tokens.next,state.tokens.next.value),!1}if("(punctuator)"===state.tokens.next.type)switch(state.tokens.next.value){case"}":case"]":case",":if(opts.allowTrailing)return!0;case")":return error("E024",state.tokens.next,state.tokens.next.value),!1}return!0}function symbol(s,p){var x=state.syntax[s];return x&&"object"==typeof x||(state.syntax[s]=x={id:s,lbp:p,value:s}),x}function delim(s){var x=symbol(s,0);return x.delim=!0,x}function stmt(s,f){var x=delim(s);return x.identifier=x.reserved=!0,x.fud=f,x}function blockstmt(s,f){var x=stmt(s,f);return x.block=!0,x}function reserveName(x){var c=x.id.charAt(0);return(c>="a"&&"z">=c||c>="A"&&"Z">=c)&&(x.identifier=x.reserved=!0),x}function prefix(s,f){var x=symbol(s,150);return reserveName(x),x.nud="function"==typeof f?f:function(){return this.arity="unary",this.right=expression(150),("++"===this.id||"--"===this.id)&&(state.option.plusplus?warning("W016",this,this.id):!this.right||this.right.identifier&&!isReserved(this.right)||"."===this.right.id||"["===this.right.id||warning("W017",this),this.right&&this.right.isMetaProperty?error("E031",this):this.right&&this.right.identifier&&state.funct["(scope)"].block.modify(this.right.value,this)),this},x}function type(s,f){var x=delim(s);return x.type=s,x.nud=f,x}function reserve(name,func){var x=type(name,func);return x.identifier=!0,x.reserved=!0,x}function FutureReservedWord(name,meta){var x=type(name,meta&&meta.nud||function(){return this});return meta=meta||{},meta.isFutureReservedWord=!0,x.value=name,x.identifier=!0,x.reserved=!0,x.meta=meta,x}function reservevar(s,v){return reserve(s,function(){return"function"==typeof v&&v(this),this})}function infix(s,f,p,w){var x=symbol(s,p);return reserveName(x),x.infix=!0,x.led=function(left){return w||nobreaknonadjacent(state.tokens.prev,state.tokens.curr),"in"!==s&&"instanceof"!==s||"!"!==left.id||warning("W018",left,"!"),"function"==typeof f?f(left,this):(this.left=left,this.right=expression(p),this)},x}function application(s){var x=symbol(s,42);return x.led=function(left){return nobreaknonadjacent(state.tokens.prev,state.tokens.curr),this.left=left,this.right=doFunction({type:"arrow",loneArg:left}),this},x}function relation(s,f){var x=symbol(s,100);return x.led=function(left){nobreaknonadjacent(state.tokens.prev,state.tokens.curr),this.left=left;var right=this.right=expression(100);return isIdentifier(left,"NaN")||isIdentifier(right,"NaN")?warning("W019",this):f&&f.apply(this,[left,right]),left&&right||quit("E041",state.tokens.curr.line),"!"===left.id&&warning("W018",left,"!"),"!"===right.id&&warning("W018",right,"!"),this},x}function isPoorRelation(node){return node&&("(number)"===node.type&&0===+node.value||"(string)"===node.type&&""===node.value||"null"===node.type&&!state.option.eqnull||"true"===node.type||"false"===node.type||"undefined"===node.type)}function isTypoTypeof(left,right,state){var values;return state.option.notypeof?!1:left&&right?(values=state.inES6()?typeofValues.es6:typeofValues.es3,"(identifier)"===right.type&&"typeof"===right.value&&"(string)"===left.type?!_.contains(values,left.value):!1):!1}function isGlobalEval(left,state){var isGlobal=!1;return"this"===left.type&&null===state.funct["(context)"]?isGlobal=!0:"(identifier)"===left.type&&(state.option.node&&"global"===left.value?isGlobal=!0:!state.option.browser||"window"!==left.value&&"document"!==left.value||(isGlobal=!0)),isGlobal}function findNativePrototype(left){function walkPrototype(obj){return"object"==typeof obj?"prototype"===obj.right?obj:walkPrototype(obj.left):void 0}function walkNative(obj){for(;!obj.identifier&&"object"==typeof obj.left;)obj=obj.left;return obj.identifier&&natives.indexOf(obj.value)>=0?obj.value:void 0}var natives=["Array","ArrayBuffer","Boolean","Collator","DataView","Date","DateTimeFormat","Error","EvalError","Float32Array","Float64Array","Function","Infinity","Intl","Int16Array","Int32Array","Int8Array","Iterator","Number","NumberFormat","Object","RangeError","ReferenceError","RegExp","StopIteration","String","SyntaxError","TypeError","Uint16Array","Uint32Array","Uint8Array","Uint8ClampedArray","URIError"],prototype=walkPrototype(left);return prototype?walkNative(prototype):void 0}function checkLeftSideAssign(left,assignToken,options){var allowDestructuring=options&&options.allowDestructuring;if(assignToken=assignToken||left,state.option.freeze){var nativeObject=findNativePrototype(left);nativeObject&&warning("W121",left,nativeObject)}return left.identifier&&!left.isMetaProperty&&state.funct["(scope)"].block.reassign(left.value,left),"."===left.id?((!left.left||"arguments"===left.left.value&&!state.isStrict())&&warning("E031",assignToken),state.nameStack.set(state.tokens.prev),!0):"{"===left.id||"["===left.id?(allowDestructuring&&state.tokens.curr.left.destructAssign?state.tokens.curr.left.destructAssign.forEach(function(t){t.id&&state.funct["(scope)"].block.modify(t.id,t.token)}):"{"!==left.id&&left.left?"arguments"!==left.left.value||state.isStrict()||warning("E031",assignToken):warning("E031",assignToken),"["===left.id&&state.nameStack.set(left.right),!0):left.isMetaProperty?(error("E031",assignToken),!0):left.identifier&&!isReserved(left)?("exception"===state.funct["(scope)"].labeltype(left.value)&&warning("W022",left),state.nameStack.set(left),!0):(left===state.syntax["function"]&&warning("W023",state.tokens.curr),!1)}function assignop(s,f,p){var x=infix(s,"function"==typeof f?f:function(left,that){return that.left=left,left&&checkLeftSideAssign(left,that,{allowDestructuring:!0})?(that.right=expression(10),that):(error("E031",that),void 0)},p);return x.exps=!0,x.assign=!0,x}function bitwise(s,f,p){var x=symbol(s,p);return reserveName(x),x.led="function"==typeof f?f:function(left){return state.option.bitwise&&warning("W016",this,this.id),this.left=left,this.right=expression(p),this},x}function bitwiseassignop(s){return assignop(s,function(left,that){return state.option.bitwise&&warning("W016",that,that.id),left&&checkLeftSideAssign(left,that)?(that.right=expression(10),that):(error("E031",that),void 0)},20)}function suffix(s){var x=symbol(s,150);return x.led=function(left){return state.option.plusplus?warning("W016",this,this.id):left.identifier&&!isReserved(left)||"."===left.id||"["===left.id||warning("W017",this),left.isMetaProperty?error("E031",this):left&&left.identifier&&state.funct["(scope)"].block.modify(left.value,left),this.left=left,this},x}function optionalidentifier(fnparam,prop,preserve){if(state.tokens.next.identifier){preserve||advance();var curr=state.tokens.curr,val=state.tokens.curr.value;return isReserved(curr)?prop&&state.inES5()?val:fnparam&&"undefined"===val?val:(warning("W024",state.tokens.curr,state.tokens.curr.id),val):val}}function identifier(fnparam,prop){var i=optionalidentifier(fnparam,prop,!1);if(i)return i;if("..."===state.tokens.next.value){if(state.inES6(!0)||warning("W119",state.tokens.next,"spread/rest operator","6"),advance(),checkPunctuator(state.tokens.next,"..."))for(warning("E024",state.tokens.next,"...");checkPunctuator(state.tokens.next,"...");)advance();return state.tokens.next.identifier?identifier(fnparam,prop):(warning("E024",state.tokens.curr,"..."),void 0)}error("E030",state.tokens.next,state.tokens.next.value),";"!==state.tokens.next.id&&advance()}function reachable(controlToken){var t,i=0;if(";"===state.tokens.next.id&&!controlToken.inBracelessBlock)for(;;){do t=peek(i),i+=1;while("(end)"!==t.id&&"(comment)"===t.id);if(t.reach)return;if("(endline)"!==t.id){if("function"===t.id){state.option.latedef===!0&&warning("W026",t);break}warning("W027",t,t.value,controlToken.value);break}}}function parseFinalSemicolon(){if(";"!==state.tokens.next.id){if(state.tokens.next.isUnclosed)return advance();var sameLine=startLine(state.tokens.next)===state.tokens.curr.line&&"(end)"!==state.tokens.next.id,blockEnd=checkPunctuator(state.tokens.next,"}");sameLine&&!blockEnd?errorAt("E058",state.tokens.curr.line,state.tokens.curr.character):state.option.asi||(blockEnd&&!state.option.lastsemic||!sameLine)&&warningAt("W033",state.tokens.curr.line,state.tokens.curr.character)}else advance(";")}function statement(){var r,i=indent,t=state.tokens.next,hasOwnScope=!1;if(";"===t.id)return advance(";"),void 0;var res=isReserved(t);if(res&&t.meta&&t.meta.isFutureReservedWord&&":"===peek().id&&(warning("W024",t,t.id),res=!1),t.identifier&&!res&&":"===peek().id&&(advance(),advance(":"),hasOwnScope=!0,state.funct["(scope)"].stack(),state.funct["(scope)"].block.addBreakLabel(t.value,{token:state.tokens.curr}),state.tokens.next.labelled||"{"===state.tokens.next.value||warning("W028",state.tokens.next,t.value,state.tokens.next.value),state.tokens.next.label=t.value,t=state.tokens.next),"{"===t.id){var iscase="case"===state.funct["(verb)"]&&":"===state.tokens.curr.value;return block(!0,!0,!1,!1,iscase),void 0}return r=expression(0,!0),!r||r.identifier&&"function"===r.value||"(punctuator)"===r.type&&r.left&&r.left.identifier&&"function"===r.left.value||state.isStrict()||"global"!==state.option.strict||warning("E007"),t.block||(state.option.expr||r&&r.exps?state.option.nonew&&r&&r.left&&"("===r.id&&"new"===r.left.id&&warning("W031",t):warning("W030",state.tokens.curr),parseFinalSemicolon()),indent=i,hasOwnScope&&state.funct["(scope)"].unstack(),r}function statements(){for(var p,a=[];!state.tokens.next.reach&&"(end)"!==state.tokens.next.id;)";"===state.tokens.next.id?(p=peek(),(!p||"("!==p.id&&"["!==p.id)&&warning("W032"),advance(";")):a.push(statement());return a}function directives(){for(var i,p,pn;"(string)"===state.tokens.next.id;){if(p=peek(0),"(endline)"===p.id){i=1;do pn=peek(i++);while("(endline)"===pn.id);if(";"===pn.id)p=pn;else{if("["===pn.value||"."===pn.value)break;state.option.asi&&"("!==pn.value||warning("W033",state.tokens.next)}}else{if("."===p.id||"["===p.id)break;";"!==p.id&&warning("W033",p)}advance();var directive=state.tokens.curr.value;(state.directive[directive]||"use strict"===directive&&"implied"===state.option.strict)&&warning("W034",state.tokens.curr,directive),state.directive[directive]=!0,";"===p.id&&advance(";")}state.isStrict()&&(state.option["(explicitNewcap)"]||(state.option.newcap=!0),state.option.undef=!0)}function block(ordinary,stmt,isfunc,isfatarrow,iscase){var a,m,t,line,d,b=inblock,old_indent=indent;inblock=ordinary,t=state.tokens.next;var metrics=state.funct["(metrics)"];if(metrics.nestedBlockDepth+=1,metrics.verifyMaxNestedBlockDepthPerFunction(),"{"===state.tokens.next.id){if(advance("{"),state.funct["(scope)"].stack(),line=state.tokens.curr.line,"}"!==state.tokens.next.id){for(indent+=state.option.indent;!ordinary&&state.tokens.next.from>indent;)indent+=state.option.indent;if(isfunc){m={};for(d in state.directive)_.has(state.directive,d)&&(m[d]=state.directive[d]);directives(),state.option.strict&&state.funct["(context)"]["(global)"]&&(m["use strict"]||state.isStrict()||warning("E007"))}a=statements(),metrics.statementCount+=a.length,indent-=state.option.indent}advance("}",t),isfunc&&(state.funct["(scope)"].validateParams(),m&&(state.directive=m)),state.funct["(scope)"].unstack(),indent=old_indent}else if(ordinary)state.funct["(noblockscopedvar)"]="for"!==state.tokens.next.id,state.funct["(scope)"].stack(),(!stmt||state.option.curly)&&warning("W116",state.tokens.next,"{",state.tokens.next.value),state.tokens.next.inBracelessBlock=!0,indent+=state.option.indent,a=[statement()],indent-=state.option.indent,state.funct["(scope)"].unstack(),delete state.funct["(noblockscopedvar)"];else if(isfunc){if(state.funct["(scope)"].stack(),m={},!stmt||isfatarrow||state.inMoz()||error("W118",state.tokens.curr,"function closure expressions"),!stmt)for(d in state.directive)_.has(state.directive,d)&&(m[d]=state.directive[d]);expression(10),state.option.strict&&state.funct["(context)"]["(global)"]&&(m["use strict"]||state.isStrict()||warning("E007")),state.funct["(scope)"].unstack()}else error("E021",state.tokens.next,"{",state.tokens.next.value);switch(state.funct["(verb)"]){case"break":case"continue":case"return":case"throw":if(iscase)break;default:state.funct["(verb)"]=null}return inblock=b,!ordinary||!state.option.noempty||a&&0!==a.length||warning("W035",state.tokens.prev),metrics.nestedBlockDepth-=1,a}function countMember(m){membersOnly&&"boolean"!=typeof membersOnly[m]&&warning("W036",state.tokens.curr,m),"number"==typeof member[m]?member[m]+=1:member[m]=1}function comprehensiveArrayExpression(){var res={};res.exps=!0,state.funct["(comparray)"].stack();var reversed=!1;return"for"!==state.tokens.next.value&&(reversed=!0,state.inMoz()||warning("W116",state.tokens.next,"for",state.tokens.next.value),state.funct["(comparray)"].setState("use"),res.right=expression(10)),advance("for"),"each"===state.tokens.next.value&&(advance("each"),state.inMoz()||warning("W118",state.tokens.curr,"for each")),advance("("),state.funct["(comparray)"].setState("define"),res.left=expression(130),_.contains(["in","of"],state.tokens.next.value)?advance():error("E045",state.tokens.curr),state.funct["(comparray)"].setState("generate"),expression(10),advance(")"),"if"===state.tokens.next.value&&(advance("if"),advance("("),state.funct["(comparray)"].setState("filter"),res.filter=expression(10),advance(")")),reversed||(state.funct["(comparray)"].setState("use"),res.right=expression(10)),advance("]"),state.funct["(comparray)"].unstack(),res}function isMethod(){return state.funct["(statement)"]&&"class"===state.funct["(statement)"].type||state.funct["(context)"]&&"class"===state.funct["(context)"]["(verb)"]}function isPropertyName(token){return token.identifier||"(string)"===token.id||"(number)"===token.id}function propertyName(preserveOrToken){var id,preserve=!0;return"object"==typeof preserveOrToken?id=preserveOrToken:(preserve=preserveOrToken,id=optionalidentifier(!1,!0,preserve)),id?"object"==typeof id&&("(string)"===id.id||"(identifier)"===id.id?id=id.value:"(number)"===id.id&&(id=""+id.value)):"(string)"===state.tokens.next.id?(id=state.tokens.next.value,preserve||advance()):"(number)"===state.tokens.next.id&&(id=""+state.tokens.next.value,preserve||advance()),"hasOwnProperty"===id&&warning("W001"),id}function functionparams(options){function addParam(addParamArgs){state.funct["(scope)"].addParam.apply(state.funct["(scope)"],addParamArgs)}var next,ident,t,paramsIds=[],tokens=[],pastDefault=!1,pastRest=!1,arity=0,loneArg=options&&options.loneArg;if(loneArg&&loneArg.identifier===!0)return state.funct["(scope)"].addParam(loneArg.value,loneArg),{arity:1,params:[loneArg.value]};if(next=state.tokens.next,options&&options.parsedOpening||advance("("),")"===state.tokens.next.id)return advance(")"),void 0;for(;;){arity++;var currentParams=[];if(_.contains(["{","["],state.tokens.next.id)){tokens=destructuringPattern();for(t in tokens)t=tokens[t],t.id&&(paramsIds.push(t.id),currentParams.push([t.id,t.token]))}else if(checkPunctuator(state.tokens.next,"...")&&(pastRest=!0),ident=identifier(!0))paramsIds.push(ident),currentParams.push([ident,state.tokens.curr]);else for(;!checkPunctuators(state.tokens.next,[",",")"]);)advance();if(pastDefault&&"="!==state.tokens.next.id&&error("W138",state.tokens.current),"="===state.tokens.next.id&&(state.inES6()||warning("W119",state.tokens.next,"default parameters","6"),advance("="),pastDefault=!0,expression(10)),currentParams.forEach(addParam),","!==state.tokens.next.id)return advance(")",next),{arity:arity,params:paramsIds};pastRest&&warning("W131",state.tokens.next),comma()}}function functor(name,token,overwrites){var funct={"(name)":name,"(breakage)":0,"(loopage)":0,"(tokens)":{},"(properties)":{},"(catch)":!1,"(global)":!1,"(line)":null,"(character)":null,"(metrics)":null,"(statement)":null,"(context)":null,"(scope)":null,"(comparray)":null,"(generator)":null,"(arrow)":null,"(params)":null};return token&&_.extend(funct,{"(line)":token.line,"(character)":token.character,"(metrics)":createMetrics(token)}),_.extend(funct,overwrites),funct["(context)"]&&(funct["(scope)"]=funct["(context)"]["(scope)"],funct["(comparray)"]=funct["(context)"]["(comparray)"]),funct}function isFunctor(token){return"(scope)"in token}function hasParsedCode(funct){return funct["(global)"]&&!funct["(verb)"]}function doTemplateLiteral(left){function end(){if(state.tokens.curr.template&&state.tokens.curr.tail&&state.tokens.curr.context===ctx)return!0;var complete=state.tokens.next.template&&state.tokens.next.tail&&state.tokens.next.context===ctx;return complete&&advance(),complete||state.tokens.next.isUnclosed}var ctx=this.context,noSubst=this.noSubst,depth=this.depth;if(!noSubst)for(;!end();)!state.tokens.next.template||state.tokens.next.depth>depth?expression(0):advance();return{id:"(template)",type:"(template)",tag:left}}function doFunction(options){var f,token,name,statement,classExprBinding,isGenerator,isArrow,ignoreLoopFunc,oldOption=state.option,oldIgnored=state.ignored;options&&(name=options.name,statement=options.statement,classExprBinding=options.classExprBinding,isGenerator="generator"===options.type,isArrow="arrow"===options.type,ignoreLoopFunc=options.ignoreLoopFunc),state.option=Object.create(state.option),state.ignored=Object.create(state.ignored),state.funct=functor(name||state.nameStack.infer(),state.tokens.next,{"(statement)":statement,"(context)":state.funct,"(arrow)":isArrow,"(generator)":isGenerator}),f=state.funct,token=state.tokens.curr,token.funct=state.funct,functions.push(state.funct),state.funct["(scope)"].stack("functionouter");var internallyAccessibleName=name||classExprBinding;internallyAccessibleName&&state.funct["(scope)"].block.add(internallyAccessibleName,classExprBinding?"class":"function",state.tokens.curr,!1),state.funct["(scope)"].stack("functionparams");var paramsInfo=functionparams(options);return paramsInfo?(state.funct["(params)"]=paramsInfo.params,state.funct["(metrics)"].arity=paramsInfo.arity,state.funct["(metrics)"].verifyMaxParametersPerFunction()):state.funct["(metrics)"].arity=0,isArrow&&(state.inES6(!0)||warning("W119",state.tokens.curr,"arrow function syntax (=>)","6"),options.loneArg||advance("=>")),block(!1,!0,!0,isArrow),!state.option.noyield&&isGenerator&&"yielded"!==state.funct["(generator)"]&&warning("W124",state.tokens.curr),state.funct["(metrics)"].verifyMaxStatementsPerFunction(),state.funct["(metrics)"].verifyMaxComplexityPerFunction(),state.funct["(unusedOption)"]=state.option.unused,state.option=oldOption,state.ignored=oldIgnored,state.funct["(last)"]=state.tokens.curr.line,state.funct["(lastcharacter)"]=state.tokens.curr.character,state.funct["(scope)"].unstack(),state.funct["(scope)"].unstack(),state.funct=state.funct["(context)"],ignoreLoopFunc||state.option.loopfunc||!state.funct["(loopage)"]||f["(isCapturing)"]&&warning("W083",token),f}function createMetrics(functionStartToken){return{statementCount:0,nestedBlockDepth:-1,ComplexityCount:1,arity:0,verifyMaxStatementsPerFunction:function(){state.option.maxstatements&&this.statementCount>state.option.maxstatements&&warning("W071",functionStartToken,this.statementCount)\n},verifyMaxParametersPerFunction:function(){_.isNumber(state.option.maxparams)&&this.arity>state.option.maxparams&&warning("W072",functionStartToken,this.arity)},verifyMaxNestedBlockDepthPerFunction:function(){state.option.maxdepth&&this.nestedBlockDepth>0&&this.nestedBlockDepth===state.option.maxdepth+1&&warning("W073",null,this.nestedBlockDepth)},verifyMaxComplexityPerFunction:function(){var max=state.option.maxcomplexity,cc=this.ComplexityCount;max&&cc>max&&warning("W074",functionStartToken,cc)}}}function increaseComplexityCount(){state.funct["(metrics)"].ComplexityCount+=1}function checkCondAssignment(expr){var id,paren;switch(expr&&(id=expr.id,paren=expr.paren,","===id&&(expr=expr.exprs[expr.exprs.length-1])&&(id=expr.id,paren=paren||expr.paren)),id){case"=":case"+=":case"-=":case"*=":case"%=":case"&=":case"|=":case"^=":case"/=":paren||state.option.boss||warning("W084")}}function checkProperties(props){if(state.inES5())for(var name in props)props[name]&&props[name].setterToken&&!props[name].getterToken&&warning("W078",props[name].setterToken)}function metaProperty(name,c){if(checkPunctuator(state.tokens.next,".")){var left=state.tokens.curr.id;advance(".");var id=identifier();return state.tokens.curr.isMetaProperty=!0,name!==id?error("E057",state.tokens.prev,left,id):c(),state.tokens.curr}}function destructuringPattern(options){var isAssignment=options&&options.assignment;return state.inES6()||warning("W104",state.tokens.curr,isAssignment?"destructuring assignment":"destructuring binding","6"),destructuringPatternRecursive(options)}function destructuringPatternRecursive(options){var ids,identifiers=[],openingParsed=options&&options.openingParsed,isAssignment=options&&options.assignment,recursiveOptions=isAssignment?{assignment:isAssignment}:null,firstToken=openingParsed?state.tokens.curr:state.tokens.next,nextInnerDE=function(){var ident;if(checkPunctuators(state.tokens.next,["[","{"])){ids=destructuringPatternRecursive(recursiveOptions);for(var id in ids)id=ids[id],identifiers.push({id:id.id,token:id.token})}else if(checkPunctuator(state.tokens.next,","))identifiers.push({id:null,token:state.tokens.curr});else{if(!checkPunctuator(state.tokens.next,"(")){var is_rest=checkPunctuator(state.tokens.next,"...");if(isAssignment){var identifierToken=is_rest?peek(0):state.tokens.next;identifierToken.identifier||warning("E030",identifierToken,identifierToken.value);var assignTarget=expression(155);assignTarget&&(checkLeftSideAssign(assignTarget),assignTarget.identifier&&(ident=assignTarget.value))}else ident=identifier();return ident&&identifiers.push({id:ident,token:state.tokens.curr}),is_rest}advance("("),nextInnerDE(),advance(")")}return!1},assignmentProperty=function(){var id;checkPunctuator(state.tokens.next,"[")?(advance("["),expression(10),advance("]"),advance(":"),nextInnerDE()):"(string)"===state.tokens.next.id||"(number)"===state.tokens.next.id?(advance(),advance(":"),nextInnerDE()):(id=identifier(),checkPunctuator(state.tokens.next,":")?(advance(":"),nextInnerDE()):id&&(isAssignment&&checkLeftSideAssign(state.tokens.curr),identifiers.push({id:id,token:state.tokens.curr})))};if(checkPunctuator(firstToken,"[")){openingParsed||advance("["),checkPunctuator(state.tokens.next,"]")&&warning("W137",state.tokens.curr);for(var element_after_rest=!1;!checkPunctuator(state.tokens.next,"]");)nextInnerDE()&&!element_after_rest&&checkPunctuator(state.tokens.next,",")&&(warning("W130",state.tokens.next),element_after_rest=!0),checkPunctuator(state.tokens.next,"=")&&(checkPunctuator(state.tokens.prev,"...")?advance("]"):advance("="),"undefined"===state.tokens.next.id&&warning("W080",state.tokens.prev,state.tokens.prev.value),expression(10)),checkPunctuator(state.tokens.next,"]")||advance(",");advance("]")}else if(checkPunctuator(firstToken,"{")){for(openingParsed||advance("{"),checkPunctuator(state.tokens.next,"}")&&warning("W137",state.tokens.curr);!checkPunctuator(state.tokens.next,"}")&&(assignmentProperty(),checkPunctuator(state.tokens.next,"=")&&(advance("="),"undefined"===state.tokens.next.id&&warning("W080",state.tokens.prev,state.tokens.prev.value),expression(10)),checkPunctuator(state.tokens.next,"}")||(advance(","),!checkPunctuator(state.tokens.next,"}"))););advance("}")}return identifiers}function destructuringPatternMatch(tokens,value){var first=value.first;first&&_.zip(tokens,Array.isArray(first)?first:[first]).forEach(function(val){var token=val[0],value=val[1];token&&value?token.first=value:token&&token.first&&!value&&warning("W080",token.first,token.first.value)})}function blockVariableStatement(type,statement,context){var tokens,lone,value,letblock,prefix=context&&context.prefix,inexport=context&&context.inexport,isLet="let"===type,isConst="const"===type;for(state.inES6()||warning("W104",state.tokens.curr,type,"6"),isLet&&"("===state.tokens.next.value?(state.inMoz()||warning("W118",state.tokens.next,"let block"),advance("("),state.funct["(scope)"].stack(),letblock=!0):state.funct["(noblockscopedvar)"]&&error("E048",state.tokens.curr,isConst?"Const":"Let"),statement.first=[];;){var names=[];_.contains(["{","["],state.tokens.next.value)?(tokens=destructuringPattern(),lone=!1):(tokens=[{id:identifier(),token:state.tokens.curr}],lone=!0),!prefix&&isConst&&"="!==state.tokens.next.id&&warning("E012",state.tokens.curr,state.tokens.curr.value);for(var t in tokens)tokens.hasOwnProperty(t)&&(t=tokens[t],state.funct["(scope)"].block.isGlobal()&&predefined[t.id]===!1&&warning("W079",t.token,t.id),t.id&&!state.funct["(noblockscopedvar)"]&&(state.funct["(scope)"].addlabel(t.id,{type:type,token:t.token}),names.push(t.token),lone&&inexport&&state.funct["(scope)"].setExported(t.token.value,t.token)));if("="===state.tokens.next.id&&(advance("="),prefix||"undefined"!==state.tokens.next.id||warning("W080",state.tokens.prev,state.tokens.prev.value),!prefix&&"="===peek(0).id&&state.tokens.next.identifier&&warning("W120",state.tokens.next,state.tokens.next.value),value=expression(prefix?120:10),lone?tokens[0].first=value:destructuringPatternMatch(names,value)),statement.first=statement.first.concat(names),","!==state.tokens.next.id)break;comma()}return letblock&&(advance(")"),block(!0,!0),statement.block=!0,state.funct["(scope)"].unstack()),statement}function classdef(isStatement){return state.inES6()||warning("W104",state.tokens.curr,"class","6"),isStatement?(this.name=identifier(),state.funct["(scope)"].addlabel(this.name,{type:"class",token:state.tokens.curr})):state.tokens.next.identifier&&"extends"!==state.tokens.next.value?(this.name=identifier(),this.namedExpr=!0):this.name=state.nameStack.infer(),classtail(this),this}function classtail(c){var wasInClassBody=state.inClassBody;"extends"===state.tokens.next.value&&(advance("extends"),c.heritage=expression(10)),state.inClassBody=!0,advance("{"),c.body=classbody(c),advance("}"),state.inClassBody=wasInClassBody}function classbody(c){for(var name,isStatic,isGenerator,getset,computed,props=Object.create(null),staticProps=Object.create(null),i=0;"}"!==state.tokens.next.id;++i)if(name=state.tokens.next,isStatic=!1,isGenerator=!1,getset=null,";"!==name.id){if("*"===name.id&&(isGenerator=!0,advance("*"),name=state.tokens.next),"["===name.id)name=computedPropertyName(),computed=!0;else{if(!isPropertyName(name)){warning("W052",state.tokens.next,state.tokens.next.value||state.tokens.next.type),advance();continue}advance(),computed=!1,name.identifier&&"static"===name.value&&(checkPunctuator(state.tokens.next,"*")&&(isGenerator=!0,advance("*")),(isPropertyName(state.tokens.next)||"["===state.tokens.next.id)&&(computed="["===state.tokens.next.id,isStatic=!0,name=state.tokens.next,"["===state.tokens.next.id?name=computedPropertyName():advance())),!name.identifier||"get"!==name.value&&"set"!==name.value||(isPropertyName(state.tokens.next)||"["===state.tokens.next.id)&&(computed="["===state.tokens.next.id,getset=name,name=state.tokens.next,"["===state.tokens.next.id?name=computedPropertyName():advance())}if(!checkPunctuator(state.tokens.next,"(")){for(error("E054",state.tokens.next,state.tokens.next.value);"}"!==state.tokens.next.id&&!checkPunctuator(state.tokens.next,"(");)advance();"("!==state.tokens.next.value&&doFunction({statement:c})}if(computed||(getset?saveAccessor(getset.value,isStatic?staticProps:props,name.value,name,!0,isStatic):("constructor"===name.value?state.nameStack.set(c):state.nameStack.set(name),saveProperty(isStatic?staticProps:props,name.value,name,!0,isStatic))),getset&&"constructor"===name.value){var propDesc="get"===getset.value?"class getter method":"class setter method";error("E049",name,propDesc,"constructor")}else"prototype"===name.value&&error("E049",name,"class method","prototype");propertyName(name),doFunction({statement:c,type:isGenerator?"generator":null,classExprBinding:c.namedExpr?c.name:null})}else warning("W032"),advance(";");checkProperties(props)}function saveProperty(props,name,tkn,isClass,isStatic){var msg=["key","class method","static class method"];msg=msg[(isClass||!1)+(isStatic||!1)],tkn.identifier&&(name=tkn.value),props[name]&&"__proto__"!==name?warning("W075",state.tokens.next,msg,name):props[name]=Object.create(null),props[name].basic=!0,props[name].basictkn=tkn}function saveAccessor(accessorType,props,name,tkn,isClass,isStatic){var flagName="get"===accessorType?"getterToken":"setterToken",msg="";isClass?(isStatic&&(msg+="static "),msg+=accessorType+"ter method"):msg="key",state.tokens.curr.accessorType=accessorType,state.nameStack.set(tkn),props[name]?(props[name].basic||props[name][flagName])&&"__proto__"!==name&&warning("W075",state.tokens.next,msg,name):props[name]=Object.create(null),props[name][flagName]=tkn}function computedPropertyName(){advance("["),state.inES6()||warning("W119",state.tokens.curr,"computed property names","6");var value=expression(10);return advance("]"),value}function checkPunctuators(token,values){return"(punctuator)"===token.type?_.contains(values,token.value):!1}function checkPunctuator(token,value){return"(punctuator)"===token.type&&token.value===value}function destructuringAssignOrJsonValue(){var block=lookupBlockType();block.notJson?(!state.inES6()&&block.isDestAssign&&warning("W104",state.tokens.curr,"destructuring assignment","6"),statements()):(state.option.laxbreak=!0,state.jsonMode=!0,jsonValue())}function jsonValue(){function jsonObject(){var o={},t=state.tokens.next;if(advance("{"),"}"!==state.tokens.next.id)for(;;){if("(end)"===state.tokens.next.id)error("E026",state.tokens.next,t.line);else{if("}"===state.tokens.next.id){warning("W094",state.tokens.curr);break}","===state.tokens.next.id?error("E028",state.tokens.next):"(string)"!==state.tokens.next.id&&warning("W095",state.tokens.next,state.tokens.next.value)}if(o[state.tokens.next.value]===!0?warning("W075",state.tokens.next,"key",state.tokens.next.value):"__proto__"===state.tokens.next.value&&!state.option.proto||"__iterator__"===state.tokens.next.value&&!state.option.iterator?warning("W096",state.tokens.next,state.tokens.next.value):o[state.tokens.next.value]=!0,advance(),advance(":"),jsonValue(),","!==state.tokens.next.id)break;advance(",")}advance("}")}function jsonArray(){var t=state.tokens.next;if(advance("["),"]"!==state.tokens.next.id)for(;;){if("(end)"===state.tokens.next.id)error("E027",state.tokens.next,t.line);else{if("]"===state.tokens.next.id){warning("W094",state.tokens.curr);break}","===state.tokens.next.id&&error("E028",state.tokens.next)}if(jsonValue(),","!==state.tokens.next.id)break;advance(",")}advance("]")}switch(state.tokens.next.id){case"{":jsonObject();break;case"[":jsonArray();break;case"true":case"false":case"null":case"(number)":case"(string)":advance();break;case"-":advance("-"),advance("(number)");break;default:error("E003",state.tokens.next)}}var api,declared,functions,inblock,indent,lookahead,lex,member,membersOnly,predefined,stack,urls,bang={"<":!0,"<=":!0,"==":!0,"===":!0,"!==":!0,"!=":!0,">":!0,">=":!0,"+":!0,"-":!0,"*":!0,"/":!0,"%":!0},functionicity=["closure","exception","global","label","outer","unused","var"],extraModules=[],emitter=new events.EventEmitter,typeofValues={};typeofValues.legacy=["xml","unknown"],typeofValues.es3=["undefined","boolean","number","string","function","object"],typeofValues.es3=typeofValues.es3.concat(typeofValues.legacy),typeofValues.es6=typeofValues.es3.concat("symbol"),type("(number)",function(){return this}),type("(string)",function(){return this}),state.syntax["(identifier)"]={type:"(identifier)",lbp:0,identifier:!0,nud:function(){var v=this.value;return"=>"===state.tokens.next.id?this:(state.funct["(comparray)"].check(v)||state.funct["(scope)"].block.use(v,state.tokens.curr),this)},led:function(){error("E033",state.tokens.next,state.tokens.next.value)}};var baseTemplateSyntax={lbp:0,identifier:!1,template:!0};state.syntax["(template)"]=_.extend({type:"(template)",nud:doTemplateLiteral,led:doTemplateLiteral,noSubst:!1},baseTemplateSyntax),state.syntax["(template middle)"]=_.extend({type:"(template middle)",middle:!0,noSubst:!1},baseTemplateSyntax),state.syntax["(template tail)"]=_.extend({type:"(template tail)",tail:!0,noSubst:!1},baseTemplateSyntax),state.syntax["(no subst template)"]=_.extend({type:"(template)",nud:doTemplateLiteral,led:doTemplateLiteral,noSubst:!0,tail:!0},baseTemplateSyntax),type("(regexp)",function(){return this}),delim("(endline)"),delim("(begin)"),delim("(end)").reach=!0,delim("(error)").reach=!0,delim("}").reach=!0,delim(")"),delim("]"),delim(\'"\').reach=!0,delim("\'").reach=!0,delim(";"),delim(":").reach=!0,delim("#"),reserve("else"),reserve("case").reach=!0,reserve("catch"),reserve("default").reach=!0,reserve("finally"),reservevar("arguments",function(x){state.isStrict()&&state.funct["(global)"]&&warning("E008",x)}),reservevar("eval"),reservevar("false"),reservevar("Infinity"),reservevar("null"),reservevar("this",function(x){state.isStrict()&&!isMethod()&&!state.option.validthis&&(state.funct["(statement)"]&&state.funct["(name)"].charAt(0)>"Z"||state.funct["(global)"])&&warning("W040",x)}),reservevar("true"),reservevar("undefined"),assignop("=","assign",20),assignop("+=","assignadd",20),assignop("-=","assignsub",20),assignop("*=","assignmult",20),assignop("/=","assigndiv",20).nud=function(){error("E014")},assignop("%=","assignmod",20),bitwiseassignop("&="),bitwiseassignop("|="),bitwiseassignop("^="),bitwiseassignop("<<="),bitwiseassignop(">>="),bitwiseassignop(">>>="),infix(",",function(left,that){var expr;if(that.exprs=[left],state.option.nocomma&&warning("W127"),!comma({peek:!0}))return that;for(;;){if(!(expr=expression(10)))break;if(that.exprs.push(expr),","!==state.tokens.next.value||!comma())break}return that},10,!0),infix("?",function(left,that){return increaseComplexityCount(),that.left=left,that.right=expression(10),advance(":"),that["else"]=expression(10),that},30);var orPrecendence=40;infix("||",function(left,that){return increaseComplexityCount(),that.left=left,that.right=expression(orPrecendence),that},orPrecendence),infix("&&","and",50),bitwise("|","bitor",70),bitwise("^","bitxor",80),bitwise("&","bitand",90),relation("==",function(left,right){var eqnull=state.option.eqnull&&("null"===(left&&left.value)||"null"===(right&&right.value));switch(!0){case!eqnull&&state.option.eqeqeq:this.from=this.character,warning("W116",this,"===","==");break;case isPoorRelation(left):warning("W041",this,"===",left.value);break;case isPoorRelation(right):warning("W041",this,"===",right.value);break;case isTypoTypeof(right,left,state):warning("W122",this,right.value);break;case isTypoTypeof(left,right,state):warning("W122",this,left.value)}return this}),relation("===",function(left,right){return isTypoTypeof(right,left,state)?warning("W122",this,right.value):isTypoTypeof(left,right,state)&&warning("W122",this,left.value),this}),relation("!=",function(left,right){var eqnull=state.option.eqnull&&("null"===(left&&left.value)||"null"===(right&&right.value));return!eqnull&&state.option.eqeqeq?(this.from=this.character,warning("W116",this,"!==","!=")):isPoorRelation(left)?warning("W041",this,"!==",left.value):isPoorRelation(right)?warning("W041",this,"!==",right.value):isTypoTypeof(right,left,state)?warning("W122",this,right.value):isTypoTypeof(left,right,state)&&warning("W122",this,left.value),this}),relation("!==",function(left,right){return isTypoTypeof(right,left,state)?warning("W122",this,right.value):isTypoTypeof(left,right,state)&&warning("W122",this,left.value),this}),relation("<"),relation(">"),relation("<="),relation(">="),bitwise("<<","shiftleft",120),bitwise(">>","shiftright",120),bitwise(">>>","shiftrightunsigned",120),infix("in","in",120),infix("instanceof","instanceof",120),infix("+",function(left,that){var right;return that.left=left,that.right=right=expression(130),left&&right&&"(string)"===left.id&&"(string)"===right.id?(left.value+=right.value,left.character=right.character,!state.option.scripturl&®.javascriptURL.test(left.value)&&warning("W050",left),left):that},130),prefix("+","num"),prefix("+++",function(){return warning("W007"),this.arity="unary",this.right=expression(150),this}),infix("+++",function(left){return warning("W007"),this.left=left,this.right=expression(130),this},130),infix("-","sub",130),prefix("-","neg"),prefix("---",function(){return warning("W006"),this.arity="unary",this.right=expression(150),this}),infix("---",function(left){return warning("W006"),this.left=left,this.right=expression(130),this},130),infix("*","mult",140),infix("/","div",140),infix("%","mod",140),suffix("++"),prefix("++","preinc"),state.syntax["++"].exps=!0,suffix("--"),prefix("--","predec"),state.syntax["--"].exps=!0,prefix("delete",function(){var p=expression(10);return p?("."!==p.id&&"["!==p.id&&warning("W051"),this.first=p,p.identifier&&!state.isStrict()&&(p.forgiveUndef=!0),this):this}).exps=!0,prefix("~",function(){return state.option.bitwise&&warning("W016",this,"~"),this.arity="unary",this.right=expression(150),this}),prefix("...",function(){return state.inES6(!0)||warning("W119",this,"spread/rest operator","6"),state.tokens.next.identifier||"(string)"===state.tokens.next.type||checkPunctuators(state.tokens.next,["[","("])||error("E030",state.tokens.next,state.tokens.next.value),expression(150),this}),prefix("!",function(){return this.arity="unary",this.right=expression(150),this.right||quit("E041",this.line||0),bang[this.right.id]===!0&&warning("W018",this,"!"),this}),prefix("typeof",function(){var p=expression(150);return this.first=this.right=p,p||quit("E041",this.line||0,this.character||0),p.identifier&&(p.forgiveUndef=!0),this}),prefix("new",function(){var mp=metaProperty("target",function(){state.inES6(!0)||warning("W119",state.tokens.prev,"new.target","6");for(var inFunction,c=state.funct;c&&(inFunction=!c["(global)"],c["(arrow)"]);)c=c["(context)"];inFunction||warning("W136",state.tokens.prev,"new.target")});if(mp)return mp;var i,c=expression(155);if(c&&"function"!==c.id)if(c.identifier)switch(c["new"]=!0,c.value){case"Number":case"String":case"Boolean":case"Math":case"JSON":warning("W053",state.tokens.prev,c.value);break;case"Symbol":state.inES6()&&warning("W053",state.tokens.prev,c.value);break;case"Function":state.option.evil||warning("W054");break;case"Date":case"RegExp":case"this":break;default:"function"!==c.id&&(i=c.value.substr(0,1),state.option.newcap&&("A">i||i>"Z")&&!state.funct["(scope)"].isPredefined(c.value)&&warning("W055",state.tokens.curr))}else"."!==c.id&&"["!==c.id&&"("!==c.id&&warning("W056",state.tokens.curr);else state.option.supernew||warning("W057",this);return"("===state.tokens.next.id||state.option.supernew||warning("W058",state.tokens.curr,state.tokens.curr.value),this.first=this.right=c,this}),state.syntax["new"].exps=!0,prefix("void").exps=!0,infix(".",function(left,that){var m=identifier(!1,!0);return"string"==typeof m&&countMember(m),that.left=left,that.right=m,m&&"hasOwnProperty"===m&&"="===state.tokens.next.value&&warning("W001"),!left||"arguments"!==left.value||"callee"!==m&&"caller"!==m?state.option.evil||!left||"document"!==left.value||"write"!==m&&"writeln"!==m||warning("W060",left):state.option.noarg?warning("W059",left,m):state.isStrict()&&error("E008"),state.option.evil||"eval"!==m&&"execScript"!==m||isGlobalEval(left,state)&&warning("W061"),that},160,!0),infix("(",function(left,that){state.option.immed&&left&&!left.immed&&"function"===left.id&&warning("W062");var n=0,p=[];if(left&&"(identifier)"===left.type&&left.value.match(/^[A-Z]([A-Z0-9_$]*[a-z][A-Za-z0-9_$]*)?$/)&&-1==="Array Number String Boolean Date Object Error Symbol".indexOf(left.value)&&("Math"===left.value?warning("W063",left):state.option.newcap&&warning("W064",left)),")"!==state.tokens.next.id)for(;p[p.length]=expression(10),n+=1,","===state.tokens.next.id;)comma();return advance(")"),"object"==typeof left&&(state.inES5()||"parseInt"!==left.value||1!==n||warning("W065",state.tokens.curr),state.option.evil||("eval"===left.value||"Function"===left.value||"execScript"===left.value?(warning("W061",left),p[0]&&"(string)"===[0].id&&addInternalSrc(left,p[0].value)):!p[0]||"(string)"!==p[0].id||"setTimeout"!==left.value&&"setInterval"!==left.value?!p[0]||"(string)"!==p[0].id||"."!==left.value||"window"!==left.left.value||"setTimeout"!==left.right&&"setInterval"!==left.right||(warning("W066",left),addInternalSrc(left,p[0].value)):(warning("W066",left),addInternalSrc(left,p[0].value))),left.identifier||"."===left.id||"["===left.id||"=>"===left.id||"("===left.id||"&&"===left.id||"||"===left.id||"?"===left.id||state.inES6()&&left["(name)"]||warning("W067",that)),that.left=left,that},155,!0).exps=!0,prefix("(",function(){var pn1,ret,triggerFnExpr,first,last,pn=state.tokens.next,i=-1,parens=1,opening=state.tokens.curr,preceeding=state.tokens.prev,isNecessary=!state.option.singleGroups;do"("===pn.value?parens+=1:")"===pn.value&&(parens-=1),i+=1,pn1=pn,pn=peek(i);while((0!==parens||")"!==pn1.value)&&";"!==pn.value&&"(end)"!==pn.type);if("function"===state.tokens.next.id&&(triggerFnExpr=state.tokens.next.immed=!0),"=>"===pn.value)return doFunction({type:"arrow",parsedOpening:!0});var exprs=[];if(")"!==state.tokens.next.id)for(;exprs.push(expression(10)),","===state.tokens.next.id;)state.option.nocomma&&warning("W127"),comma();return advance(")",this),state.option.immed&&exprs[0]&&"function"===exprs[0].id&&"("!==state.tokens.next.id&&"."!==state.tokens.next.id&&"["!==state.tokens.next.id&&warning("W068",this),exprs.length?(exprs.length>1?(ret=Object.create(state.syntax[","]),ret.exprs=exprs,first=exprs[0],last=exprs[exprs.length-1],isNecessary||(isNecessary=preceeding.assign||preceeding.delim)):(ret=first=last=exprs[0],isNecessary||(isNecessary=opening.beginsStmt&&("{"===ret.id||triggerFnExpr||isFunctor(ret))||triggerFnExpr&&(!isEndOfExpr()||"}"!==state.tokens.prev.id)||isFunctor(ret)&&!isEndOfExpr()||"{"===ret.id&&"=>"===preceeding.id||"(number)"===ret.type&&checkPunctuator(pn,".")&&/^\\d+$/.test(ret.value))),ret&&(!isNecessary&&(first.left||first.right||ret.exprs)&&(isNecessary=!isBeginOfExpr(preceeding)&&first.lbp<=preceeding.lbp||!isEndOfExpr()&&last.lbp"),infix("[",function(left,that){var s,e=expression(10);return e&&"(string)"===e.type&&(state.option.evil||"eval"!==e.value&&"execScript"!==e.value||isGlobalEval(left,state)&&warning("W061"),countMember(e.value),!state.option.sub&®.identifier.test(e.value)&&(s=state.syntax[e.value],s&&isReserved(s)||warning("W069",state.tokens.prev,e.value))),advance("]",that),e&&"hasOwnProperty"===e.value&&"="===state.tokens.next.value&&warning("W001"),that.left=left,that.right=e,that},160,!0),prefix("[",function(){var blocktype=lookupBlockType();if(blocktype.isCompArray)return state.option.esnext||state.inMoz()||warning("W118",state.tokens.curr,"array comprehension"),comprehensiveArrayExpression();if(blocktype.isDestAssign)return this.destructAssign=destructuringPattern({openingParsed:!0,assignment:!0}),this;var b=state.tokens.curr.line!==startLine(state.tokens.next);for(this.first=[],b&&(indent+=state.option.indent,state.tokens.next.from===indent+state.option.indent&&(indent+=state.option.indent));"(end)"!==state.tokens.next.id;){for(;","===state.tokens.next.id;){if(!state.option.elision){if(state.inES5()){warning("W128");do advance(",");while(","===state.tokens.next.id);continue}warning("W070")}advance(",")}if("]"===state.tokens.next.id)break;if(this.first.push(expression(10)),","!==state.tokens.next.id)break;if(comma({allowTrailing:!0}),"]"===state.tokens.next.id&&!state.inES5()){warning("W070",state.tokens.curr);break}}return b&&(indent-=state.option.indent),advance("]",this),this}),function(x){x.nud=function(){var b,f,i,p,t,nextVal,isGeneratorMethod=!1,props=Object.create(null);b=state.tokens.curr.line!==startLine(state.tokens.next),b&&(indent+=state.option.indent,state.tokens.next.from===indent+state.option.indent&&(indent+=state.option.indent));var blocktype=lookupBlockType();if(blocktype.isDestAssign)return this.destructAssign=destructuringPattern({openingParsed:!0,assignment:!0}),this;for(;"}"!==state.tokens.next.id;){if(nextVal=state.tokens.next.value,!state.tokens.next.identifier||","!==peekIgnoreEOL().id&&"}"!==peekIgnoreEOL().id)if(":"===peek().id||"get"!==nextVal&&"set"!==nextVal){if("*"===state.tokens.next.value&&"(punctuator)"===state.tokens.next.type?(state.inES6()||warning("W104",state.tokens.next,"generator functions","6"),advance("*"),isGeneratorMethod=!0):isGeneratorMethod=!1,"["===state.tokens.next.id)i=computedPropertyName(),state.nameStack.set(i);else if(state.nameStack.set(state.tokens.next),i=propertyName(),saveProperty(props,i,state.tokens.next),"string"!=typeof i)break;"("===state.tokens.next.value?(state.inES6()||warning("W104",state.tokens.curr,"concise methods","6"),doFunction({type:isGeneratorMethod?"generator":null})):(advance(":"),expression(10))}else advance(nextVal),state.inES5()||error("E034"),i=propertyName(),i||state.inES6()||error("E035"),i&&saveAccessor(nextVal,props,i,state.tokens.curr),t=state.tokens.next,f=doFunction(),p=f["(params)"],"get"===nextVal&&i&&p?warning("W076",t,p[0],i):"set"!==nextVal||!i||p&&1===p.length||warning("W077",t,i);else state.inES6()||warning("W104",state.tokens.next,"object short notation","6"),i=propertyName(!0),saveProperty(props,i,state.tokens.next),expression(10);if(countMember(i),","!==state.tokens.next.id)break;comma({allowTrailing:!0,property:!0}),","===state.tokens.next.id?warning("W070",state.tokens.curr):"}"!==state.tokens.next.id||state.inES5()||warning("W070",state.tokens.curr)}return b&&(indent-=state.option.indent),advance("}",this),checkProperties(props),this},x.fud=function(){error("E036",state.tokens.curr)}}(delim("{"));var conststatement=stmt("const",function(context){return blockVariableStatement("const",this,context)});conststatement.exps=!0;var letstatement=stmt("let",function(context){return blockVariableStatement("let",this,context)});letstatement.exps=!0;var varstatement=stmt("var",function(context){var tokens,lone,value,prefix=context&&context.prefix,inexport=context&&context.inexport,implied=context&&context.implied,report=!(context&&context.ignore);for(this.first=[];;){var names=[];_.contains(["{","["],state.tokens.next.value)?(tokens=destructuringPattern(),lone=!1):(tokens=[{id:identifier(),token:state.tokens.curr}],lone=!0),prefix&&implied||!report||!state.option.varstmt||warning("W132",this),this.first=this.first.concat(names);for(var t in tokens)tokens.hasOwnProperty(t)&&(t=tokens[t],!implied&&state.funct["(global)"]&&(predefined[t.id]===!1?warning("W079",t.token,t.id):state.option.futurehostile===!1&&(!state.inES5()&&vars.ecmaIdentifiers[5][t.id]===!1||!state.inES6()&&vars.ecmaIdentifiers[6][t.id]===!1)&&warning("W129",t.token,t.id)),t.id&&("for"===implied?(state.funct["(scope)"].has(t.id)||report&&warning("W088",t.token,t.id),state.funct["(scope)"].block.use(t.id,t.token)):(state.funct["(scope)"].addlabel(t.id,{type:"var",token:t.token}),lone&&inexport&&state.funct["(scope)"].setExported(t.id,t.token)),names.push(t.token)));if("="===state.tokens.next.id&&(state.nameStack.set(state.tokens.curr),advance("="),prefix||!report||state.funct["(loopage)"]||"undefined"!==state.tokens.next.id||warning("W080",state.tokens.prev,state.tokens.prev.value),"="===peek(0).id&&state.tokens.next.identifier&&(!prefix&&report&&!state.funct["(params)"]||-1===state.funct["(params)"].indexOf(state.tokens.next.value))&&warning("W120",state.tokens.next,state.tokens.next.value),value=expression(prefix?120:10),lone?tokens[0].first=value:destructuringPatternMatch(names,value)),","!==state.tokens.next.id)break;comma()}return this});varstatement.exps=!0,blockstmt("class",function(){return classdef.call(this,!0)}),blockstmt("function",function(context){var inexport=context&&context.inexport,generator=!1;"*"===state.tokens.next.value&&(advance("*"),state.inES6({strict:!0})?generator=!0:warning("W119",state.tokens.curr,"function*","6")),inblock&&warning("W082",state.tokens.curr);var i=optionalidentifier();return state.funct["(scope)"].addlabel(i,{type:"function",token:state.tokens.curr}),void 0===i?warning("W025"):inexport&&state.funct["(scope)"].setExported(i,state.tokens.prev),doFunction({name:i,statement:this,type:generator?"generator":null,ignoreLoopFunc:inblock}),"("===state.tokens.next.id&&state.tokens.next.line===state.tokens.curr.line&&error("E039"),this}),prefix("function",function(){var generator=!1;"*"===state.tokens.next.value&&(state.inES6()||warning("W119",state.tokens.curr,"function*","6"),advance("*"),generator=!0);var i=optionalidentifier();return doFunction({name:i,type:generator?"generator":null}),this}),blockstmt("if",function(){var t=state.tokens.next;increaseComplexityCount(),state.condition=!0,advance("(");var expr=expression(0);checkCondAssignment(expr);var forinifcheck=null;state.option.forin&&state.forinifcheckneeded&&(state.forinifcheckneeded=!1,forinifcheck=state.forinifchecks[state.forinifchecks.length-1],forinifcheck.type="(punctuator)"===expr.type&&"!"===expr.value?"(negative)":"(positive)"),advance(")",t),state.condition=!1;var s=block(!0,!0);return forinifcheck&&"(negative)"===forinifcheck.type&&s&&s[0]&&"(identifier)"===s[0].type&&"continue"===s[0].value&&(forinifcheck.type="(negative-with-continue)"),"else"===state.tokens.next.id&&(advance("else"),"if"===state.tokens.next.id||"switch"===state.tokens.next.id?statement():block(!0,!0)),this}),blockstmt("try",function(){function doCatch(){if(advance("catch"),advance("("),state.funct["(scope)"].stack("catchparams"),checkPunctuators(state.tokens.next,["[","{"])){var tokens=destructuringPattern();_.each(tokens,function(token){token.id&&state.funct["(scope)"].addParam(token.id,token,"exception")})}else"(identifier)"!==state.tokens.next.type?warning("E030",state.tokens.next,state.tokens.next.value):state.funct["(scope)"].addParam(identifier(),state.tokens.curr,"exception");"if"===state.tokens.next.value&&(state.inMoz()||warning("W118",state.tokens.curr,"catch filter"),advance("if"),expression(0)),advance(")"),block(!1),state.funct["(scope)"].unstack()}var b;for(block(!0);"catch"===state.tokens.next.id;)increaseComplexityCount(),b&&!state.inMoz()&&warning("W118",state.tokens.next,"multiple catch blocks"),doCatch(),b=!0;return"finally"===state.tokens.next.id?(advance("finally"),block(!0),void 0):(b||error("E021",state.tokens.next,"catch",state.tokens.next.value),this)}),blockstmt("while",function(){var t=state.tokens.next;return state.funct["(breakage)"]+=1,state.funct["(loopage)"]+=1,increaseComplexityCount(),advance("("),checkCondAssignment(expression(0)),advance(")",t),block(!0,!0),state.funct["(breakage)"]-=1,state.funct["(loopage)"]-=1,this}).labelled=!0,blockstmt("with",function(){var t=state.tokens.next;return state.isStrict()?error("E010",state.tokens.curr):state.option.withstmt||warning("W085",state.tokens.curr),advance("("),expression(0),advance(")",t),block(!0,!0),this}),blockstmt("switch",function(){var t=state.tokens.next,g=!1,noindent=!1;\nfor(state.funct["(breakage)"]+=1,advance("("),checkCondAssignment(expression(0)),advance(")",t),t=state.tokens.next,advance("{"),state.tokens.next.from===indent&&(noindent=!0),noindent||(indent+=state.option.indent),this.cases=[];;)switch(state.tokens.next.id){case"case":switch(state.funct["(verb)"]){case"yield":case"break":case"case":case"continue":case"return":case"switch":case"throw":break;default:state.tokens.curr.caseFallsThrough||warning("W086",state.tokens.curr,"case")}advance("case"),this.cases.push(expression(0)),increaseComplexityCount(),g=!0,advance(":"),state.funct["(verb)"]="case";break;case"default":switch(state.funct["(verb)"]){case"yield":case"break":case"continue":case"return":case"throw":break;default:this.cases.length&&(state.tokens.curr.caseFallsThrough||warning("W086",state.tokens.curr,"default"))}advance("default"),g=!0,advance(":");break;case"}":return noindent||(indent-=state.option.indent),advance("}",t),state.funct["(breakage)"]-=1,state.funct["(verb)"]=void 0,void 0;case"(end)":return error("E023",state.tokens.next,"}"),void 0;default:if(indent+=state.option.indent,g)switch(state.tokens.curr.id){case",":return error("E040"),void 0;case":":g=!1,statements();break;default:return error("E025",state.tokens.curr),void 0}else{if(":"!==state.tokens.curr.id)return error("E021",state.tokens.next,"case",state.tokens.next.value),void 0;advance(":"),error("E024",state.tokens.curr,":"),statements()}indent-=state.option.indent}return this}).labelled=!0,stmt("debugger",function(){return state.option.debug||warning("W087",this),this}).exps=!0,function(){var x=stmt("do",function(){state.funct["(breakage)"]+=1,state.funct["(loopage)"]+=1,increaseComplexityCount(),this.first=block(!0,!0),advance("while");var t=state.tokens.next;return advance("("),checkCondAssignment(expression(0)),advance(")",t),state.funct["(breakage)"]-=1,state.funct["(loopage)"]-=1,this});x.labelled=!0,x.exps=!0}(),blockstmt("for",function(){var s,t=state.tokens.next,letscope=!1,foreachtok=null;"each"===t.value&&(foreachtok=t,advance("each"),state.inMoz()||warning("W118",state.tokens.curr,"for each")),increaseComplexityCount(),advance("(");var nextop,comma,initializer,i=0,inof=["in","of"],level=0;checkPunctuators(state.tokens.next,["{","["])&&++level;do{if(nextop=peek(i),++i,checkPunctuators(nextop,["{","["])?++level:checkPunctuators(nextop,["}","]"])&&--level,0>level)break;0===level&&(!comma&&checkPunctuator(nextop,",")?comma=nextop:!initializer&&checkPunctuator(nextop,"=")&&(initializer=nextop))}while(level>0||!_.contains(inof,nextop.value)&&";"!==nextop.value&&"(end)"!==nextop.type);if(_.contains(inof,nextop.value)){state.inES6()||"of"!==nextop.value||warning("W104",nextop,"for of","6");var ok=!(initializer||comma);if(initializer&&error("W133",comma,nextop.value,"initializer is forbidden"),comma&&error("W133",comma,nextop.value,"more than one ForBinding"),"var"===state.tokens.next.id?(advance("var"),state.tokens.curr.fud({prefix:!0})):"let"===state.tokens.next.id||"const"===state.tokens.next.id?(advance(state.tokens.next.id),letscope=!0,state.funct["(scope)"].stack(),state.tokens.curr.fud({prefix:!0})):Object.create(varstatement).fud({prefix:!0,implied:"for",ignore:!ok}),advance(nextop.value),expression(20),advance(")",t),"in"===nextop.value&&state.option.forin&&(state.forinifcheckneeded=!0,void 0===state.forinifchecks&&(state.forinifchecks=[]),state.forinifchecks.push({type:"(none)"})),state.funct["(breakage)"]+=1,state.funct["(loopage)"]+=1,s=block(!0,!0),"in"===nextop.value&&state.option.forin){if(state.forinifchecks&&state.forinifchecks.length>0){var check=state.forinifchecks.pop();(s&&s.length>0&&("object"!=typeof s[0]||"if"!==s[0].value)||"(positive)"===check.type&&s.length>1||"(negative)"===check.type)&&warning("W089",this)}state.forinifcheckneeded=!1}state.funct["(breakage)"]-=1,state.funct["(loopage)"]-=1}else{if(foreachtok&&error("E045",foreachtok),";"!==state.tokens.next.id)if("var"===state.tokens.next.id)advance("var"),state.tokens.curr.fud();else if("let"===state.tokens.next.id)advance("let"),letscope=!0,state.funct["(scope)"].stack(),state.tokens.curr.fud();else for(;expression(0,"for"),","===state.tokens.next.id;)comma();if(nolinebreak(state.tokens.curr),advance(";"),state.funct["(loopage)"]+=1,";"!==state.tokens.next.id&&checkCondAssignment(expression(0)),nolinebreak(state.tokens.curr),advance(";"),";"===state.tokens.next.id&&error("E021",state.tokens.next,")",";"),")"!==state.tokens.next.id)for(;expression(0,"for"),","===state.tokens.next.id;)comma();advance(")",t),state.funct["(breakage)"]+=1,block(!0,!0),state.funct["(breakage)"]-=1,state.funct["(loopage)"]-=1}return letscope&&state.funct["(scope)"].unstack(),this}).labelled=!0,stmt("break",function(){var v=state.tokens.next.value;return state.option.asi||nolinebreak(this),";"===state.tokens.next.id||state.tokens.next.reach||state.tokens.curr.line!==startLine(state.tokens.next)?0===state.funct["(breakage)"]&&warning("W052",state.tokens.next,this.value):(state.funct["(scope)"].funct.hasBreakLabel(v)||warning("W090",state.tokens.next,v),this.first=state.tokens.next,advance()),reachable(this),this}).exps=!0,stmt("continue",function(){var v=state.tokens.next.value;return 0===state.funct["(breakage)"]&&warning("W052",state.tokens.next,this.value),state.funct["(loopage)"]||warning("W052",state.tokens.next,this.value),state.option.asi||nolinebreak(this),";"===state.tokens.next.id||state.tokens.next.reach||state.tokens.curr.line===startLine(state.tokens.next)&&(state.funct["(scope)"].funct.hasBreakLabel(v)||warning("W090",state.tokens.next,v),this.first=state.tokens.next,advance()),reachable(this),this}).exps=!0,stmt("return",function(){return this.line===startLine(state.tokens.next)?";"===state.tokens.next.id||state.tokens.next.reach||(this.first=expression(0),!this.first||"(punctuator)"!==this.first.type||"="!==this.first.value||this.first.paren||state.option.boss||warningAt("W093",this.first.line,this.first.character)):"(punctuator)"===state.tokens.next.type&&["[","{","+","-"].indexOf(state.tokens.next.value)>-1&&nolinebreak(this),reachable(this),this}).exps=!0,function(x){x.exps=!0,x.lbp=25}(prefix("yield",function(){var prev=state.tokens.prev;state.inES6(!0)&&!state.funct["(generator)"]?"(catch)"===state.funct["(name)"]&&state.funct["(context)"]["(generator)"]||error("E046",state.tokens.curr,"yield"):state.inES6()||warning("W104",state.tokens.curr,"yield","6"),state.funct["(generator)"]="yielded";var delegatingYield=!1;return"*"===state.tokens.next.value&&(delegatingYield=!0,advance("*")),this.line!==startLine(state.tokens.next)&&state.inMoz()?state.option.asi||nolinebreak(this):((delegatingYield||";"!==state.tokens.next.id&&!state.option.asi&&!state.tokens.next.reach&&state.tokens.next.nud)&&(nobreaknonadjacent(state.tokens.curr,state.tokens.next),this.first=expression(10),"(punctuator)"!==this.first.type||"="!==this.first.value||this.first.paren||state.option.boss||warningAt("W093",this.first.line,this.first.character)),state.inMoz()&&")"!==state.tokens.next.id&&(prev.lbp>30||!prev.assign&&!isEndOfExpr()||"yield"===prev.id)&&error("E050",this)),this})),stmt("throw",function(){return nolinebreak(this),this.first=expression(20),reachable(this),this}).exps=!0,stmt("import",function(){if(state.inES6()||warning("W119",state.tokens.curr,"import","6"),"(string)"===state.tokens.next.type)return advance("(string)"),this;if(state.tokens.next.identifier){if(this.name=identifier(),state.funct["(scope)"].addlabel(this.name,{type:"const",token:state.tokens.curr}),","!==state.tokens.next.value)return advance("from"),advance("(string)"),this;advance(",")}if("*"===state.tokens.next.id)advance("*"),advance("as"),state.tokens.next.identifier&&(this.name=identifier(),state.funct["(scope)"].addlabel(this.name,{type:"const",token:state.tokens.curr}));else for(advance("{");;){if("}"===state.tokens.next.value){advance("}");break}var importName;if("default"===state.tokens.next.type?(importName="default",advance("default")):importName=identifier(),"as"===state.tokens.next.value&&(advance("as"),importName=identifier()),state.funct["(scope)"].addlabel(importName,{type:"const",token:state.tokens.curr}),","!==state.tokens.next.value){if("}"===state.tokens.next.value){advance("}");break}error("E024",state.tokens.next,state.tokens.next.value);break}advance(",")}return advance("from"),advance("(string)"),this}).exps=!0,stmt("export",function(){var token,identifier,ok=!0;if(state.inES6()||(warning("W119",state.tokens.curr,"export","6"),ok=!1),state.funct["(scope)"].block.isGlobal()||(error("E053",state.tokens.curr),ok=!1),"*"===state.tokens.next.value)return advance("*"),advance("from"),advance("(string)"),this;if("default"===state.tokens.next.type){state.nameStack.set(state.tokens.next),advance("default");var exportType=state.tokens.next.id;return("function"===exportType||"class"===exportType)&&(this.block=!0),token=peek(),expression(10),identifier=token.value,this.block&&(state.funct["(scope)"].addlabel(identifier,{type:exportType,token:token}),state.funct["(scope)"].setExported(identifier,token)),this}if("{"===state.tokens.next.value){advance("{");for(var exportedTokens=[];;){if(state.tokens.next.identifier||error("E030",state.tokens.next,state.tokens.next.value),advance(),exportedTokens.push(state.tokens.curr),"as"===state.tokens.next.value&&(advance("as"),state.tokens.next.identifier||error("E030",state.tokens.next,state.tokens.next.value),advance()),","!==state.tokens.next.value){if("}"===state.tokens.next.value){advance("}");break}error("E024",state.tokens.next,state.tokens.next.value);break}advance(",")}return"from"===state.tokens.next.value?(advance("from"),advance("(string)")):ok&&exportedTokens.forEach(function(token){state.funct["(scope)"].setExported(token.value,token)}),this}if("var"===state.tokens.next.id)advance("var"),state.tokens.curr.fud({inexport:!0});else if("let"===state.tokens.next.id)advance("let"),state.tokens.curr.fud({inexport:!0});else if("const"===state.tokens.next.id)advance("const"),state.tokens.curr.fud({inexport:!0});else if("function"===state.tokens.next.id)this.block=!0,advance("function"),state.syntax["function"].fud({inexport:!0});else if("class"===state.tokens.next.id){this.block=!0,advance("class");var classNameToken=state.tokens.next;state.syntax["class"].fud(),state.funct["(scope)"].setExported(classNameToken.value,classNameToken)}else error("E024",state.tokens.next,state.tokens.next.value);return this}).exps=!0,FutureReservedWord("abstract"),FutureReservedWord("boolean"),FutureReservedWord("byte"),FutureReservedWord("char"),FutureReservedWord("class",{es5:!0,nud:classdef}),FutureReservedWord("double"),FutureReservedWord("enum",{es5:!0}),FutureReservedWord("export",{es5:!0}),FutureReservedWord("extends",{es5:!0}),FutureReservedWord("final"),FutureReservedWord("float"),FutureReservedWord("goto"),FutureReservedWord("implements",{es5:!0,strictOnly:!0}),FutureReservedWord("import",{es5:!0}),FutureReservedWord("int"),FutureReservedWord("interface",{es5:!0,strictOnly:!0}),FutureReservedWord("long"),FutureReservedWord("native"),FutureReservedWord("package",{es5:!0,strictOnly:!0}),FutureReservedWord("private",{es5:!0,strictOnly:!0}),FutureReservedWord("protected",{es5:!0,strictOnly:!0}),FutureReservedWord("public",{es5:!0,strictOnly:!0}),FutureReservedWord("short"),FutureReservedWord("static",{es5:!0,strictOnly:!0}),FutureReservedWord("super",{es5:!0}),FutureReservedWord("synchronized"),FutureReservedWord("transient"),FutureReservedWord("volatile");var lookupBlockType=function(){var pn,pn1,prev,i=-1,bracketStack=0,ret={};checkPunctuators(state.tokens.curr,["[","{"])&&(bracketStack+=1);do{if(prev=-1===i?state.tokens.curr:pn,pn=-1===i?state.tokens.next:peek(i),pn1=peek(i+1),i+=1,checkPunctuators(pn,["[","{"])?bracketStack+=1:checkPunctuators(pn,["]","}"])&&(bracketStack-=1),1===bracketStack&&pn.identifier&&"for"===pn.value&&!checkPunctuator(prev,".")){ret.isCompArray=!0,ret.notJson=!0;break}if(0===bracketStack&&checkPunctuators(pn,["}","]"])){if("="===pn1.value){ret.isDestAssign=!0,ret.notJson=!0;break}if("."===pn1.value){ret.notJson=!0;break}}checkPunctuator(pn,";")&&(ret.isBlock=!0,ret.notJson=!0)}while(bracketStack>0&&"(end)"!==pn.id);return ret},arrayComprehension=function(){function declare(v){var l=_current.variables.filter(function(elt){return elt.value===v?(elt.undef=!1,v):void 0}).length;return 0!==l}function use(v){var l=_current.variables.filter(function(elt){return elt.value!==v||elt.undef?void 0:(elt.unused===!0&&(elt.unused=!1),v)}).length;return 0===l}var _current,CompArray=function(){this.mode="use",this.variables=[]},_carrays=[];return{stack:function(){_current=new CompArray,_carrays.push(_current)},unstack:function(){_current.variables.filter(function(v){v.unused&&warning("W098",v.token,v.raw_text||v.value),v.undef&&state.funct["(scope)"].block.use(v.value,v.token)}),_carrays.splice(-1,1),_current=_carrays[_carrays.length-1]},setState:function(s){_.contains(["use","define","generate","filter"],s)&&(_current.mode=s)},check:function(v){return _current?_current&&"use"===_current.mode?(use(v)&&_current.variables.push({funct:state.funct,token:state.tokens.curr,value:v,undef:!0,unused:!1}),!0):_current&&"define"===_current.mode?(declare(v)||_current.variables.push({funct:state.funct,token:state.tokens.curr,value:v,undef:!1,unused:!0}),!0):_current&&"generate"===_current.mode?(state.funct["(scope)"].block.use(v,state.tokens.curr),!0):_current&&"filter"===_current.mode?(use(v)&&state.funct["(scope)"].block.use(v,state.tokens.curr),!0):!1:void 0}}},escapeRegex=function(str){return str.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g,"\\\\$&")},itself=function(s,o,g){function each(obj,cb){obj&&(Array.isArray(obj)||"object"!=typeof obj||(obj=Object.keys(obj)),obj.forEach(cb))}var i,k,x,reIgnoreStr,reIgnore,optionKeys,newOptionObj={},newIgnoredObj={};o=_.clone(o),state.reset(),o&&o.scope?JSHINT.scope=o.scope:(JSHINT.errors=[],JSHINT.undefs=[],JSHINT.internals=[],JSHINT.blacklist={},JSHINT.scope="(main)"),predefined=Object.create(null),combine(predefined,vars.ecmaIdentifiers[3]),combine(predefined,vars.reservedVars),combine(predefined,g||{}),declared=Object.create(null);var exported=Object.create(null);if(o)for(each(o.predef||null,function(item){var slice,prop;"-"===item[0]?(slice=item.slice(1),JSHINT.blacklist[slice]=slice,delete predefined[slice]):(prop=Object.getOwnPropertyDescriptor(o.predef,item),predefined[item]=prop?prop.value:!1)}),each(o.exported||null,function(item){exported[item]=!0}),delete o.predef,delete o.exported,optionKeys=Object.keys(o),x=0;optionKeys.length>x;x++)if(/^-W\\d{3}$/g.test(optionKeys[x]))newIgnoredObj[optionKeys[x].slice(1)]=!0;else{var optionKey=optionKeys[x];newOptionObj[optionKey]=o[optionKey],("esversion"===optionKey&&5===o[optionKey]||"es5"===optionKey&&o[optionKey])&&warning("I003"),"newcap"===optionKeys[x]&&o[optionKey]===!1&&(newOptionObj["(explicitNewcap)"]=!0)}state.option=newOptionObj,state.ignored=newIgnoredObj,state.option.indent=state.option.indent||4,state.option.maxerr=state.option.maxerr||50,indent=1;var scopeManagerInst=scopeManager(state,predefined,exported,declared);if(scopeManagerInst.on("warning",function(ev){warning.apply(null,[ev.code,ev.token].concat(ev.data))}),scopeManagerInst.on("error",function(ev){error.apply(null,[ev.code,ev.token].concat(ev.data))}),state.funct=functor("(global)",null,{"(global)":!0,"(scope)":scopeManagerInst,"(comparray)":arrayComprehension(),"(metrics)":createMetrics(state.tokens.next)}),functions=[state.funct],urls=[],stack=null,member={},membersOnly=null,inblock=!1,lookahead=[],!isString(s)&&!Array.isArray(s))return errorAt("E004",0),!1;api={get isJSON(){return state.jsonMode},getOption:function(name){return state.option[name]||null},getCache:function(name){return state.cache[name]},setCache:function(name,value){state.cache[name]=value},warn:function(code,data){warningAt.apply(null,[code,data.line,data.char].concat(data.data))},on:function(names,listener){names.split(" ").forEach(function(name){emitter.on(name,listener)}.bind(this))}},emitter.removeAllListeners(),(extraModules||[]).forEach(function(func){func(api)}),state.tokens.prev=state.tokens.curr=state.tokens.next=state.syntax["(begin)"],o&&o.ignoreDelimiters&&(Array.isArray(o.ignoreDelimiters)||(o.ignoreDelimiters=[o.ignoreDelimiters]),o.ignoreDelimiters.forEach(function(delimiterPair){delimiterPair.start&&delimiterPair.end&&(reIgnoreStr=escapeRegex(delimiterPair.start)+"[\\\\s\\\\S]*?"+escapeRegex(delimiterPair.end),reIgnore=RegExp(reIgnoreStr,"ig"),s=s.replace(reIgnore,function(match){return match.replace(/./g," ")}))})),lex=new Lexer(s),lex.on("warning",function(ev){warningAt.apply(null,[ev.code,ev.line,ev.character].concat(ev.data))}),lex.on("error",function(ev){errorAt.apply(null,[ev.code,ev.line,ev.character].concat(ev.data))}),lex.on("fatal",function(ev){quit("E041",ev.line,ev.from)}),lex.on("Identifier",function(ev){emitter.emit("Identifier",ev)}),lex.on("String",function(ev){emitter.emit("String",ev)}),lex.on("Number",function(ev){emitter.emit("Number",ev)}),lex.start();for(var name in o)_.has(o,name)&&checkOption(name,state.tokens.curr);assume(),combine(predefined,g||{}),comma.first=!0;try{switch(advance(),state.tokens.next.id){case"{":case"[":destructuringAssignOrJsonValue();break;default:directives(),state.directive["use strict"]&&"global"!==state.option.strict&&warning("W097",state.tokens.prev),statements()}"(end)"!==state.tokens.next.id&&quit("E041",state.tokens.curr.line),state.funct["(scope)"].unstack()}catch(err){if(!err||"JSHintError"!==err.name)throw err;var nt=state.tokens.next||{};JSHINT.errors.push({scope:"(main)",raw:err.raw,code:err.code,reason:err.message,line:err.line||nt.line,character:err.character||nt.from},null)}if("(main)"===JSHINT.scope)for(o=o||{},i=0;JSHINT.internals.length>i;i+=1)k=JSHINT.internals[i],o.scope=k.elem,itself(k.value,o,g);return 0===JSHINT.errors.length};return itself.addModule=function(func){extraModules.push(func)},itself.addModule(style.register),itself.data=function(){var fu,f,i,j,n,globals,data={functions:[],options:state.option};itself.errors.length&&(data.errors=itself.errors),state.jsonMode&&(data.json=!0);var impliedGlobals=state.funct["(scope)"].getImpliedGlobals();for(impliedGlobals.length>0&&(data.implieds=impliedGlobals),urls.length>0&&(data.urls=urls),globals=state.funct["(scope)"].getUsedOrDefinedGlobals(),globals.length>0&&(data.globals=globals),i=1;functions.length>i;i+=1){for(f=functions[i],fu={},j=0;functionicity.length>j;j+=1)fu[functionicity[j]]=[];for(j=0;functionicity.length>j;j+=1)0===fu[functionicity[j]].length&&delete fu[functionicity[j]];fu.name=f["(name)"],fu.param=f["(params)"],fu.line=f["(line)"],fu.character=f["(character)"],fu.last=f["(last)"],fu.lastcharacter=f["(lastcharacter)"],fu.metrics={complexity:f["(metrics)"].ComplexityCount,parameters:f["(metrics)"].arity,statements:f["(metrics)"].statementCount},data.functions.push(fu)}var unuseds=state.funct["(scope)"].getUnuseds();unuseds.length>0&&(data.unused=unuseds);for(n in member)if("number"==typeof member[n]){data.member=member;break}return data},itself.jshint=itself,itself}();"object"==typeof exports&&exports&&(exports.JSHINT=JSHINT)},{"../lodash":"/node_modules/jshint/lodash.js","./lex.js":"/node_modules/jshint/src/lex.js","./messages.js":"/node_modules/jshint/src/messages.js","./options.js":"/node_modules/jshint/src/options.js","./reg.js":"/node_modules/jshint/src/reg.js","./scope-manager.js":"/node_modules/jshint/src/scope-manager.js","./state.js":"/node_modules/jshint/src/state.js","./style.js":"/node_modules/jshint/src/style.js","./vars.js":"/node_modules/jshint/src/vars.js",events:"/node_modules/browserify/node_modules/events/events.js"}],"/node_modules/jshint/src/lex.js":[function(_dereq_,module,exports){"use strict";function asyncTrigger(){var _checks=[];return{push:function(fn){_checks.push(fn)},check:function(){for(var check=0;_checks.length>check;++check)_checks[check]();_checks.splice(0,_checks.length)}}}function Lexer(source){var lines=source;"string"==typeof lines&&(lines=lines.replace(/\\r\\n/g,"\\n").replace(/\\r/g,"\\n").split("\\n")),lines[0]&&"#!"===lines[0].substr(0,2)&&(-1!==lines[0].indexOf("node")&&(state.option.node=!0),lines[0]=""),this.emitter=new events.EventEmitter,this.source=source,this.setLines(lines),this.prereg=!0,this.line=0,this.char=1,this.from=1,this.input="",this.inComment=!1,this.context=[],this.templateStarts=[];for(var i=0;state.option.indent>i;i+=1)state.tab+=" ";this.ignoreLinterErrors=!1}var _=_dereq_("../lodash"),events=_dereq_("events"),reg=_dereq_("./reg.js"),state=_dereq_("./state.js").state,unicodeData=_dereq_("../data/ascii-identifier-data.js"),asciiIdentifierStartTable=unicodeData.asciiIdentifierStartTable,asciiIdentifierPartTable=unicodeData.asciiIdentifierPartTable,Token={Identifier:1,Punctuator:2,NumericLiteral:3,StringLiteral:4,Comment:5,Keyword:6,NullLiteral:7,BooleanLiteral:8,RegExp:9,TemplateHead:10,TemplateMiddle:11,TemplateTail:12,NoSubstTemplate:13},Context={Block:1,Template:2};Lexer.prototype={_lines:[],inContext:function(ctxType){return this.context.length>0&&this.context[this.context.length-1].type===ctxType},pushContext:function(ctxType){this.context.push({type:ctxType})},popContext:function(){return this.context.pop()},isContext:function(context){return this.context.length>0&&this.context[this.context.length-1]===context},currentContext:function(){return this.context.length>0&&this.context[this.context.length-1]},getLines:function(){return this._lines=state.lines,this._lines},setLines:function(val){this._lines=val,state.lines=this._lines},peek:function(i){return this.input.charAt(i||0)},skip:function(i){i=i||1,this.char+=i,this.input=this.input.slice(i)},on:function(names,listener){names.split(" ").forEach(function(name){this.emitter.on(name,listener)}.bind(this))},trigger:function(){this.emitter.emit.apply(this.emitter,Array.prototype.slice.call(arguments))},triggerAsync:function(type,args,checks,fn){checks.push(function(){fn()&&this.trigger(type,args)}.bind(this))},scanPunctuator:function(){var ch2,ch3,ch4,ch1=this.peek();switch(ch1){case".":if(/^[0-9]$/.test(this.peek(1)))return null;if("."===this.peek(1)&&"."===this.peek(2))return{type:Token.Punctuator,value:"..."};case"(":case")":case";":case",":case"[":case"]":case":":case"~":case"?":return{type:Token.Punctuator,value:ch1};case"{":return this.pushContext(Context.Block),{type:Token.Punctuator,value:ch1};case"}":return this.inContext(Context.Block)&&this.popContext(),{type:Token.Punctuator,value:ch1};case"#":return{type:Token.Punctuator,value:ch1};case"":return null}return ch2=this.peek(1),ch3=this.peek(2),ch4=this.peek(3),">"===ch1&&">"===ch2&&">"===ch3&&"="===ch4?{type:Token.Punctuator,value:">>>="}:"="===ch1&&"="===ch2&&"="===ch3?{type:Token.Punctuator,value:"==="}:"!"===ch1&&"="===ch2&&"="===ch3?{type:Token.Punctuator,value:"!=="}:">"===ch1&&">"===ch2&&">"===ch3?{type:Token.Punctuator,value:">>>"}:"<"===ch1&&"<"===ch2&&"="===ch3?{type:Token.Punctuator,value:"<<="}:">"===ch1&&">"===ch2&&"="===ch3?{type:Token.Punctuator,value:">>="}:"="===ch1&&">"===ch2?{type:Token.Punctuator,value:ch1+ch2}:ch1===ch2&&"+-<>&|".indexOf(ch1)>=0?{type:Token.Punctuator,value:ch1+ch2}:"<>=!+-*%&|^".indexOf(ch1)>=0?"="===ch2?{type:Token.Punctuator,value:ch1+ch2}:{type:Token.Punctuator,value:ch1}:"/"===ch1?"="===ch2?{type:Token.Punctuator,value:"/="}:{type:Token.Punctuator,value:"/"}:null},scanComments:function(){function commentToken(label,body,opt){var special=["jshint","jslint","members","member","globals","global","exported"],isSpecial=!1,value=label+body,commentType="plain";return opt=opt||{},opt.isMultiline&&(value+="*/"),body=body.replace(/\\n/g," "),"/*"===label&®.fallsThrough.test(body)&&(isSpecial=!0,commentType="falls through"),special.forEach(function(str){if(!isSpecial&&("//"!==label||"jshint"===str)&&(" "===body.charAt(str.length)&&body.substr(0,str.length)===str&&(isSpecial=!0,label+=str,body=body.substr(str.length)),isSpecial||" "!==body.charAt(0)||" "!==body.charAt(str.length+1)||body.substr(1,str.length)!==str||(isSpecial=!0,label=label+" "+str,body=body.substr(str.length+1)),isSpecial))switch(str){case"member":commentType="members";break;case"global":commentType="globals";break;default:var options=body.split(":").map(function(v){return v.replace(/^\\s+/,"").replace(/\\s+$/,"")});if(2===options.length)switch(options[0]){case"ignore":switch(options[1]){case"start":self.ignoringLinterErrors=!0,isSpecial=!1;break;case"end":self.ignoringLinterErrors=!1,isSpecial=!1}}commentType=str}}),{type:Token.Comment,commentType:commentType,value:value,body:body,isSpecial:isSpecial,isMultiline:opt.isMultiline||!1,isMalformed:opt.isMalformed||!1}}var ch1=this.peek(),ch2=this.peek(1),rest=this.input.substr(2),startLine=this.line,startChar=this.char,self=this;if("*"===ch1&&"/"===ch2)return this.trigger("error",{code:"E018",line:startLine,character:startChar}),this.skip(2),null;if("/"!==ch1||"*"!==ch2&&"/"!==ch2)return null;if("/"===ch2)return this.skip(this.input.length),commentToken("//",rest);var body="";if("*"===ch2){for(this.inComment=!0,this.skip(2);"*"!==this.peek()||"/"!==this.peek(1);)if(""===this.peek()){if(body+="\\n",!this.nextLine())return this.trigger("error",{code:"E017",line:startLine,character:startChar}),this.inComment=!1,commentToken("/*",body,{isMultiline:!0,isMalformed:!0})}else body+=this.peek(),this.skip();return this.skip(2),this.inComment=!1,commentToken("/*",body,{isMultiline:!0})}},scanKeyword:function(){var result=/^[a-zA-Z_$][a-zA-Z0-9_$]*/.exec(this.input),keywords=["if","in","do","var","for","new","try","let","this","else","case","void","with","enum","while","break","catch","throw","const","yield","class","super","return","typeof","delete","switch","export","import","default","finally","extends","function","continue","debugger","instanceof"];return result&&keywords.indexOf(result[0])>=0?{type:Token.Keyword,value:result[0]}:null},scanIdentifier:function(){function isNonAsciiIdentifierStart(code){return code>256}function isNonAsciiIdentifierPart(code){return code>256}function isHexDigit(str){return/^[0-9a-fA-F]$/.test(str)}function removeEscapeSequences(id){return id.replace(/\\\\u([0-9a-fA-F]{4})/g,function(m0,codepoint){return String.fromCharCode(parseInt(codepoint,16))})}var type,char,id="",index=0,readUnicodeEscapeSequence=function(){if(index+=1,"u"!==this.peek(index))return null;var code,ch1=this.peek(index+1),ch2=this.peek(index+2),ch3=this.peek(index+3),ch4=this.peek(index+4);return isHexDigit(ch1)&&isHexDigit(ch2)&&isHexDigit(ch3)&&isHexDigit(ch4)?(code=parseInt(ch1+ch2+ch3+ch4,16),asciiIdentifierPartTable[code]||isNonAsciiIdentifierPart(code)?(index+=5,"\\\\u"+ch1+ch2+ch3+ch4):null):null}.bind(this),getIdentifierStart=function(){var chr=this.peek(index),code=chr.charCodeAt(0);return 92===code?readUnicodeEscapeSequence():128>code?asciiIdentifierStartTable[code]?(index+=1,chr):null:isNonAsciiIdentifierStart(code)?(index+=1,chr):null}.bind(this),getIdentifierPart=function(){var chr=this.peek(index),code=chr.charCodeAt(0);return 92===code?readUnicodeEscapeSequence():128>code?asciiIdentifierPartTable[code]?(index+=1,chr):null:isNonAsciiIdentifierPart(code)?(index+=1,chr):null}.bind(this);if(char=getIdentifierStart(),null===char)return null;for(id=char;char=getIdentifierPart(),null!==char;)id+=char;switch(id){case"true":case"false":type=Token.BooleanLiteral;break;case"null":type=Token.NullLiteral;break;default:type=Token.Identifier}return{type:type,value:removeEscapeSequences(id),text:id,tokenLength:id.length}},scanNumericLiteral:function(){function isDecimalDigit(str){return/^[0-9]$/.test(str)}function isOctalDigit(str){return/^[0-7]$/.test(str)}function isBinaryDigit(str){return/^[01]$/.test(str)}function isHexDigit(str){return/^[0-9a-fA-F]$/.test(str)}function isIdentifierStart(ch){return"$"===ch||"_"===ch||"\\\\"===ch||ch>="a"&&"z">=ch||ch>="A"&&"Z">=ch}var bad,index=0,value="",length=this.input.length,char=this.peek(index),isAllowedDigit=isDecimalDigit,base=10,isLegacy=!1;if("."!==char&&!isDecimalDigit(char))return null;if("."!==char){for(value=this.peek(index),index+=1,char=this.peek(index),"0"===value&&(("x"===char||"X"===char)&&(isAllowedDigit=isHexDigit,base=16,index+=1,value+=char),("o"===char||"O"===char)&&(isAllowedDigit=isOctalDigit,base=8,state.inES6(!0)||this.trigger("warning",{code:"W119",line:this.line,character:this.char,data:["Octal integer literal","6"]}),index+=1,value+=char),("b"===char||"B"===char)&&(isAllowedDigit=isBinaryDigit,base=2,state.inES6(!0)||this.trigger("warning",{code:"W119",line:this.line,character:this.char,data:["Binary integer literal","6"]}),index+=1,value+=char),isOctalDigit(char)&&(isAllowedDigit=isOctalDigit,base=8,isLegacy=!0,bad=!1,index+=1,value+=char),!isOctalDigit(char)&&isDecimalDigit(char)&&(index+=1,value+=char));length>index;){if(char=this.peek(index),isLegacy&&isDecimalDigit(char))bad=!0;else if(!isAllowedDigit(char))break;value+=char,index+=1}if(isAllowedDigit!==isDecimalDigit)return!isLegacy&&2>=value.length?{type:Token.NumericLiteral,value:value,isMalformed:!0}:length>index&&(char=this.peek(index),isIdentifierStart(char))?null:{type:Token.NumericLiteral,value:value,base:base,isLegacy:isLegacy,isMalformed:!1}}if("."===char)for(value+=char,index+=1;length>index&&(char=this.peek(index),isDecimalDigit(char));)value+=char,index+=1;if("e"===char||"E"===char){if(value+=char,index+=1,char=this.peek(index),("+"===char||"-"===char)&&(value+=this.peek(index),index+=1),char=this.peek(index),!isDecimalDigit(char))return null;for(value+=char,index+=1;length>index&&(char=this.peek(index),isDecimalDigit(char));)value+=char,index+=1}return length>index&&(char=this.peek(index),isIdentifierStart(char))?null:{type:Token.NumericLiteral,value:value,base:base,isMalformed:!isFinite(value)}},scanEscapeSequence:function(checks){var allowNewLine=!1,jump=1;this.skip();var char=this.peek();switch(char){case"\'":this.triggerAsync("warning",{code:"W114",line:this.line,character:this.char,data:["\\\\\'"]},checks,function(){return state.jsonMode});break;case"b":char="\\\\b";break;case"f":char="\\\\f";break;case"n":char="\\\\n";break;case"r":char="\\\\r";break;case"t":char="\\\\t";break;case"0":char="\\\\0";var n=parseInt(this.peek(1),10);this.triggerAsync("warning",{code:"W115",line:this.line,character:this.char},checks,function(){return n>=0&&7>=n&&state.isStrict()});break;case"u":var hexCode=this.input.substr(1,4),code=parseInt(hexCode,16);isNaN(code)&&this.trigger("warning",{code:"W052",line:this.line,character:this.char,data:["u"+hexCode]}),char=String.fromCharCode(code),jump=5;break;case"v":this.triggerAsync("warning",{code:"W114",line:this.line,character:this.char,data:["\\\\v"]},checks,function(){return state.jsonMode}),char="\v";break;case"x":var x=parseInt(this.input.substr(1,2),16);this.triggerAsync("warning",{code:"W114",line:this.line,character:this.char,data:["\\\\x-"]},checks,function(){return state.jsonMode}),char=String.fromCharCode(x),jump=3;break;case"\\\\":char="\\\\\\\\";break;case\'"\':char=\'\\\\"\';break;case"/":break;case"":allowNewLine=!0,char=""}return{"char":char,jump:jump,allowNewLine:allowNewLine}},scanTemplateLiteral:function(checks){var tokenType,ch,value="",startLine=this.line,startChar=this.char,depth=this.templateStarts.length;if(!state.inES6(!0))return null;if("`"===this.peek())tokenType=Token.TemplateHead,this.templateStarts.push({line:this.line,"char":this.char}),depth=this.templateStarts.length,this.skip(1),this.pushContext(Context.Template);else{if(!this.inContext(Context.Template)||"}"!==this.peek())return null;tokenType=Token.TemplateMiddle}for(;"`"!==this.peek();){for(;""===(ch=this.peek());)if(value+="\\n",!this.nextLine()){var startPos=this.templateStarts.pop();return this.trigger("error",{code:"E052",line:startPos.line,character:startPos.char}),{type:tokenType,value:value,startLine:startLine,startChar:startChar,isUnclosed:!0,depth:depth,context:this.popContext()}}if("$"===ch&&"{"===this.peek(1))return value+="${",this.skip(2),{type:tokenType,value:value,startLine:startLine,startChar:startChar,isUnclosed:!1,depth:depth,context:this.currentContext()};\nif("\\\\"===ch){var escape=this.scanEscapeSequence(checks);value+=escape.char,this.skip(escape.jump)}else"`"!==ch&&(value+=ch,this.skip(1))}return tokenType=tokenType===Token.TemplateHead?Token.NoSubstTemplate:Token.TemplateTail,this.skip(1),this.templateStarts.pop(),{type:tokenType,value:value,startLine:startLine,startChar:startChar,isUnclosed:!1,depth:depth,context:this.popContext()}},scanStringLiteral:function(checks){var quote=this.peek();if(\'"\'!==quote&&"\'"!==quote)return null;this.triggerAsync("warning",{code:"W108",line:this.line,character:this.char},checks,function(){return state.jsonMode&&\'"\'!==quote});var value="",startLine=this.line,startChar=this.char,allowNewLine=!1;for(this.skip();this.peek()!==quote;)if(""===this.peek()){if(allowNewLine?(allowNewLine=!1,this.triggerAsync("warning",{code:"W043",line:this.line,character:this.char},checks,function(){return!state.option.multistr}),this.triggerAsync("warning",{code:"W042",line:this.line,character:this.char},checks,function(){return state.jsonMode&&state.option.multistr})):this.trigger("warning",{code:"W112",line:this.line,character:this.char}),!this.nextLine())return this.trigger("error",{code:"E029",line:startLine,character:startChar}),{type:Token.StringLiteral,value:value,startLine:startLine,startChar:startChar,isUnclosed:!0,quote:quote}}else{allowNewLine=!1;var char=this.peek(),jump=1;if(" ">char&&this.trigger("warning",{code:"W113",line:this.line,character:this.char,data:[""]}),"\\\\"===char){var parsed=this.scanEscapeSequence(checks);char=parsed.char,jump=parsed.jump,allowNewLine=parsed.allowNewLine}value+=char,this.skip(jump)}return this.skip(),{type:Token.StringLiteral,value:value,startLine:startLine,startChar:startChar,isUnclosed:!1,quote:quote}},scanRegExp:function(){var terminated,index=0,length=this.input.length,char=this.peek(),value=char,body="",flags=[],malformed=!1,isCharSet=!1,scanUnexpectedChars=function(){" ">char&&(malformed=!0,this.trigger("warning",{code:"W048",line:this.line,character:this.char})),"<"===char&&(malformed=!0,this.trigger("warning",{code:"W049",line:this.line,character:this.char,data:[char]}))}.bind(this);if(!this.prereg||"/"!==char)return null;for(index+=1,terminated=!1;length>index;)if(char=this.peek(index),value+=char,body+=char,isCharSet)"]"===char&&("\\\\"!==this.peek(index-1)||"\\\\"===this.peek(index-2))&&(isCharSet=!1),"\\\\"===char&&(index+=1,char=this.peek(index),body+=char,value+=char,scanUnexpectedChars()),index+=1;else{if("\\\\"===char){if(index+=1,char=this.peek(index),body+=char,value+=char,scanUnexpectedChars(),"/"===char){index+=1;continue}if("["===char){index+=1;continue}}if("["!==char){if("/"===char){body=body.substr(0,body.length-1),terminated=!0,index+=1;break}index+=1}else isCharSet=!0,index+=1}if(!terminated)return this.trigger("error",{code:"E015",line:this.line,character:this.from}),void this.trigger("fatal",{line:this.line,from:this.from});for(;length>index&&(char=this.peek(index),/[gim]/.test(char));)flags.push(char),value+=char,index+=1;try{RegExp(body,flags.join(""))}catch(err){malformed=!0,this.trigger("error",{code:"E016",line:this.line,character:this.char,data:[err.message]})}return{type:Token.RegExp,value:value,flags:flags,isMalformed:malformed}},scanNonBreakingSpaces:function(){return state.option.nonbsp?this.input.search(/(\\u00A0)/):-1},scanUnsafeChars:function(){return this.input.search(reg.unsafeChars)},next:function(checks){this.from=this.char;var start;if(/\\s/.test(this.peek()))for(start=this.char;/\\s/.test(this.peek());)this.from+=1,this.skip();var match=this.scanComments()||this.scanStringLiteral(checks)||this.scanTemplateLiteral(checks);return match?match:(match=this.scanRegExp()||this.scanPunctuator()||this.scanKeyword()||this.scanIdentifier()||this.scanNumericLiteral(),match?(this.skip(match.tokenLength||match.value.length),match):null)},nextLine:function(){var char;if(this.line>=this.getLines().length)return!1;this.input=this.getLines()[this.line],this.line+=1,this.char=1,this.from=1;var inputTrimmed=this.input.trim(),startsWith=function(){return _.some(arguments,function(prefix){return 0===inputTrimmed.indexOf(prefix)})},endsWith=function(){return _.some(arguments,function(suffix){return-1!==inputTrimmed.indexOf(suffix,inputTrimmed.length-suffix.length)})};if(this.ignoringLinterErrors===!0&&(startsWith("/*","//")||this.inComment&&endsWith("*/")||(this.input="")),char=this.scanNonBreakingSpaces(),char>=0&&this.trigger("warning",{code:"W125",line:this.line,character:char+1}),this.input=this.input.replace(/\\t/g,state.tab),char=this.scanUnsafeChars(),char>=0&&this.trigger("warning",{code:"W100",line:this.line,character:char}),!this.ignoringLinterErrors&&state.option.maxlen&&state.option.maxlen=0;--i){var scopeLabels=_scopeStack[i]["(labels)"];if(scopeLabels[labelName])return scopeLabels}}function usedSoFarInCurrentFunction(labelName){for(var i=_scopeStack.length-1;i>=0;i--){var current=_scopeStack[i];if(current["(usages)"][labelName])return current["(usages)"][labelName];if(current===_currentFunctBody)break}return!1}function _checkOuterShadow(labelName,token){if("outer"===state.option.shadow)for(var isGlobal="global"===_currentFunctBody["(type)"],isNewFunction="functionparams"===_current["(type)"],outsideCurrentFunction=!isGlobal,i=0;_scopeStack.length>i;i++){var stackItem=_scopeStack[i];isNewFunction||_scopeStack[i+1]!==_currentFunctBody||(outsideCurrentFunction=!1),outsideCurrentFunction&&stackItem["(labels)"][labelName]&&warning("W123",token,labelName),stackItem["(breakLabels)"][labelName]&&warning("W123",token,labelName)}}function _latedefWarning(type,labelName,token){state.option.latedef&&(state.option.latedef===!0&&"function"===type||"function"!==type)&&warning("W003",token,labelName)}var _current,_scopeStack=[];_newScope("global"),_current["(predefined)"]=predefined;var _currentFunctBody=_current,usedPredefinedAndGlobals=Object.create(null),impliedGlobals=Object.create(null),unuseds=[],emitter=new events.EventEmitter,_getUnusedOption=function(unused_opt){return void 0===unused_opt&&(unused_opt=state.option.unused),unused_opt===!0&&(unused_opt="last-param"),unused_opt},_warnUnused=function(name,tkn,type,unused_opt){var line=tkn.line,chr=tkn.from,raw_name=tkn.raw_text||name;unused_opt=_getUnusedOption(unused_opt);var warnable_types={vars:["var"],"last-param":["var","param"],strict:["var","param","last-param"]};unused_opt&&warnable_types[unused_opt]&&-1!==warnable_types[unused_opt].indexOf(type)&&warning("W098",{line:line,from:chr},raw_name),(unused_opt||"var"===type)&&unuseds.push({name:name,line:line,character:chr})},scopeManagerInst={on:function(names,listener){names.split(" ").forEach(function(name){emitter.on(name,listener)})},isPredefined:function(labelName){return!this.has(labelName)&&_.has(_scopeStack[0]["(predefined)"],labelName)},stack:function(type){var previousScope=_current;_newScope(type),type||"functionparams"!==previousScope["(type)"]||(_current["(isFuncBody)"]=!0,_current["(context)"]=_currentFunctBody,_currentFunctBody=_current)},unstack:function(){var i,j,subScope=_scopeStack.length>1?_scopeStack[_scopeStack.length-2]:null,isUnstackingFunctionBody=_current===_currentFunctBody,isUnstackingFunctionParams="functionparams"===_current["(type)"],isUnstackingFunctionOuter="functionouter"===_current["(type)"],currentUsages=_current["(usages)"],currentLabels=_current["(labels)"],usedLabelNameList=Object.keys(currentUsages);for(currentUsages.__proto__&&-1===usedLabelNameList.indexOf("__proto__")&&usedLabelNameList.push("__proto__"),i=0;usedLabelNameList.length>i;i++){var usedLabelName=usedLabelNameList[i],usage=currentUsages[usedLabelName],usedLabel=currentLabels[usedLabelName];if(usedLabel){var usedLabelType=usedLabel["(type)"];if(usedLabel["(useOutsideOfScope)"]&&!state.option.funcscope){var usedTokens=usage["(tokens)"];if(usedTokens)for(j=0;usedTokens.length>j;j++)usedLabel["(function)"]===usedTokens[j]["(function)"]&&error("W038",usedTokens[j],usedLabelName)}if(_current["(labels)"][usedLabelName]["(unused)"]=!1,"const"===usedLabelType&&usage["(modified)"])for(j=0;usage["(modified)"].length>j;j++)error("E013",usage["(modified)"][j],usedLabelName);if(("function"===usedLabelType||"class"===usedLabelType)&&usage["(reassigned)"])for(j=0;usage["(reassigned)"].length>j;j++)error("W021",usage["(reassigned)"][j],usedLabelName,usedLabelType)}else if(isUnstackingFunctionOuter&&(state.funct["(isCapturing)"]=!0),subScope)if(subScope["(usages)"][usedLabelName]){var subScopeUsage=subScope["(usages)"][usedLabelName];subScopeUsage["(modified)"]=subScopeUsage["(modified)"].concat(usage["(modified)"]),subScopeUsage["(tokens)"]=subScopeUsage["(tokens)"].concat(usage["(tokens)"]),subScopeUsage["(reassigned)"]=subScopeUsage["(reassigned)"].concat(usage["(reassigned)"]),subScopeUsage["(onlyUsedSubFunction)"]=!1}else subScope["(usages)"][usedLabelName]=usage,isUnstackingFunctionBody&&(subScope["(usages)"][usedLabelName]["(onlyUsedSubFunction)"]=!0);else if("boolean"==typeof _current["(predefined)"][usedLabelName]){if(delete declared[usedLabelName],usedPredefinedAndGlobals[usedLabelName]=marker,_current["(predefined)"][usedLabelName]===!1&&usage["(reassigned)"])for(j=0;usage["(reassigned)"].length>j;j++)warning("W020",usage["(reassigned)"][j])}else if(usage["(tokens)"])for(j=0;usage["(tokens)"].length>j;j++){var undefinedToken=usage["(tokens)"][j];undefinedToken.forgiveUndef||(state.option.undef&&!undefinedToken.ignoreUndef&&warning("W117",undefinedToken,usedLabelName),impliedGlobals[usedLabelName]?impliedGlobals[usedLabelName].line.push(undefinedToken.line):impliedGlobals[usedLabelName]={name:usedLabelName,line:[undefinedToken.line]})}}if(subScope||Object.keys(declared).forEach(function(labelNotUsed){_warnUnused(labelNotUsed,declared[labelNotUsed],"var")}),subScope&&!isUnstackingFunctionBody&&!isUnstackingFunctionParams&&!isUnstackingFunctionOuter){var labelNames=Object.keys(currentLabels);for(i=0;labelNames.length>i;i++){var defLabelName=labelNames[i];currentLabels[defLabelName]["(blockscoped)"]||"exception"===currentLabels[defLabelName]["(type)"]||this.funct.has(defLabelName,{excludeCurrent:!0})||(subScope["(labels)"][defLabelName]=currentLabels[defLabelName],"global"!==_currentFunctBody["(type)"]&&(subScope["(labels)"][defLabelName]["(useOutsideOfScope)"]=!0),delete currentLabels[defLabelName])}}_checkForUnused(),_scopeStack.pop(),isUnstackingFunctionBody&&(_currentFunctBody=_scopeStack[_.findLastIndex(_scopeStack,function(scope){return scope["(isFuncBody)"]||"global"===scope["(type)"]})]),_current=subScope},addParam:function(labelName,token,type){if(type=type||"param","exception"===type){var previouslyDefinedLabelType=this.funct.labeltype(labelName);previouslyDefinedLabelType&&"exception"!==previouslyDefinedLabelType&&(state.option.node||warning("W002",state.tokens.next,labelName))}if(_.has(_current["(labels)"],labelName)?_current["(labels)"][labelName].duplicated=!0:(_checkOuterShadow(labelName,token,type),_current["(labels)"][labelName]={"(type)":type,"(token)":token,"(unused)":!0},_current["(params)"].push(labelName)),_.has(_current["(usages)"],labelName)){var usage=_current["(usages)"][labelName];usage["(onlyUsedSubFunction)"]?_latedefWarning(type,labelName,token):warning("E056",token,labelName,type)}},validateParams:function(){if("global"!==_currentFunctBody["(type)"]){var isStrict=state.isStrict(),currentFunctParamScope=_currentFunctBody["(parent)"];currentFunctParamScope["(params)"]&¤tFunctParamScope["(params)"].forEach(function(labelName){var label=currentFunctParamScope["(labels)"][labelName];label&&label.duplicated&&(isStrict?warning("E011",label["(token)"],labelName):state.option.shadow!==!0&&warning("W004",label["(token)"],labelName))})}},getUsedOrDefinedGlobals:function(){var list=Object.keys(usedPredefinedAndGlobals);return usedPredefinedAndGlobals.__proto__===marker&&-1===list.indexOf("__proto__")&&list.push("__proto__"),list},getImpliedGlobals:function(){var values=_.values(impliedGlobals),hasProto=!1;return impliedGlobals.__proto__&&(hasProto=values.some(function(value){return"__proto__"===value.name}),hasProto||values.push(impliedGlobals.__proto__)),values},getUnuseds:function(){return unuseds},has:function(labelName){return Boolean(_getLabel(labelName))},labeltype:function(labelName){var scopeLabels=_getLabel(labelName);return scopeLabels?scopeLabels[labelName]["(type)"]:null},addExported:function(labelName){var globalLabels=_scopeStack[0]["(labels)"];if(_.has(declared,labelName))delete declared[labelName];else if(_.has(globalLabels,labelName))globalLabels[labelName]["(unused)"]=!1;else{for(var i=1;_scopeStack.length>i;i++){var scope=_scopeStack[i];if(scope["(type)"])break;if(_.has(scope["(labels)"],labelName)&&!scope["(labels)"][labelName]["(blockscoped)"])return scope["(labels)"][labelName]["(unused)"]=!1,void 0}exported[labelName]=!0}},setExported:function(labelName,token){this.block.use(labelName,token)\n},addlabel:function(labelName,opts){var type=opts.type,token=opts.token,isblockscoped="let"===type||"const"===type||"class"===type,isexported="global"===(isblockscoped?_current:_currentFunctBody)["(type)"]&&_.has(exported,labelName);if(_checkOuterShadow(labelName,token,type),isblockscoped){var declaredInCurrentScope=_current["(labels)"][labelName];if(declaredInCurrentScope||_current!==_currentFunctBody||"global"===_current["(type)"]||(declaredInCurrentScope=!!_currentFunctBody["(parent)"]["(labels)"][labelName]),!declaredInCurrentScope&&_current["(usages)"][labelName]){var usage=_current["(usages)"][labelName];usage["(onlyUsedSubFunction)"]?_latedefWarning(type,labelName,token):warning("E056",token,labelName,type)}declaredInCurrentScope?warning("E011",token,labelName):"outer"===state.option.shadow&&scopeManagerInst.funct.has(labelName)&&warning("W004",token,labelName),scopeManagerInst.block.add(labelName,type,token,!isexported)}else{var declaredInCurrentFunctionScope=scopeManagerInst.funct.has(labelName);!declaredInCurrentFunctionScope&&usedSoFarInCurrentFunction(labelName)&&_latedefWarning(type,labelName,token),scopeManagerInst.funct.has(labelName,{onlyBlockscoped:!0})?warning("E011",token,labelName):state.option.shadow!==!0&&declaredInCurrentFunctionScope&&"__proto__"!==labelName&&"global"!==_currentFunctBody["(type)"]&&warning("W004",token,labelName),scopeManagerInst.funct.add(labelName,type,token,!isexported),"global"===_currentFunctBody["(type)"]&&(usedPredefinedAndGlobals[labelName]=marker)}},funct:{labeltype:function(labelName,options){for(var onlyBlockscoped=options&&options.onlyBlockscoped,excludeParams=options&&options.excludeParams,currentScopeIndex=_scopeStack.length-(options&&options.excludeCurrent?2:1),i=currentScopeIndex;i>=0;i--){var current=_scopeStack[i];if(current["(labels)"][labelName]&&(!onlyBlockscoped||current["(labels)"][labelName]["(blockscoped)"]))return current["(labels)"][labelName]["(type)"];var scopeCheck=excludeParams?_scopeStack[i-1]:current;if(scopeCheck&&"functionparams"===scopeCheck["(type)"])return null}return null},hasBreakLabel:function(labelName){for(var i=_scopeStack.length-1;i>=0;i--){var current=_scopeStack[i];if(current["(breakLabels)"][labelName])return!0;if("functionparams"===current["(type)"])return!1}return!1},has:function(labelName,options){return Boolean(this.labeltype(labelName,options))},add:function(labelName,type,tok,unused){_current["(labels)"][labelName]={"(type)":type,"(token)":tok,"(blockscoped)":!1,"(function)":_currentFunctBody,"(unused)":unused}}},block:{isGlobal:function(){return"global"===_current["(type)"]},use:function(labelName,token){var paramScope=_currentFunctBody["(parent)"];paramScope&¶mScope["(labels)"][labelName]&&"param"===paramScope["(labels)"][labelName]["(type)"]&&(scopeManagerInst.funct.has(labelName,{excludeParams:!0,onlyBlockscoped:!0})||(paramScope["(labels)"][labelName]["(unused)"]=!1)),token&&(state.ignored.W117||state.option.undef===!1)&&(token.ignoreUndef=!0),_setupUsages(labelName),token&&(token["(function)"]=_currentFunctBody,_current["(usages)"][labelName]["(tokens)"].push(token))},reassign:function(labelName,token){this.modify(labelName,token),_current["(usages)"][labelName]["(reassigned)"].push(token)},modify:function(labelName,token){_setupUsages(labelName),_current["(usages)"][labelName]["(modified)"].push(token)},add:function(labelName,type,tok,unused){_current["(labels)"][labelName]={"(type)":type,"(token)":tok,"(blockscoped)":!0,"(unused)":unused}},addBreakLabel:function(labelName,opts){var token=opts.token;scopeManagerInst.funct.hasBreakLabel(labelName)?warning("E011",token,labelName):"outer"===state.option.shadow&&(scopeManagerInst.funct.has(labelName)?warning("W004",token,labelName):_checkOuterShadow(labelName,token)),_current["(breakLabels)"][labelName]=token}}};return scopeManagerInst};module.exports=scopeManager},{"../lodash":"/node_modules/jshint/lodash.js",events:"/node_modules/browserify/node_modules/events/events.js"}],"/node_modules/jshint/src/state.js":[function(_dereq_,module,exports){"use strict";var NameStack=_dereq_("./name-stack.js"),state={syntax:{},isStrict:function(){return this.directive["use strict"]||this.inClassBody||this.option.module||"implied"===this.option.strict},inMoz:function(){return this.option.moz},inES6:function(){return this.option.moz||this.option.esversion>=6},inES5:function(strict){return strict?!(this.option.esversion&&5!==this.option.esversion||this.option.moz):!this.option.esversion||this.option.esversion>=5||this.option.moz},reset:function(){this.tokens={prev:null,next:null,curr:null},this.option={},this.funct=null,this.ignored={},this.directive={},this.jsonMode=!1,this.jsonWarnings=[],this.lines=[],this.tab="",this.cache={},this.ignoredLines={},this.forinifcheckneeded=!1,this.nameStack=new NameStack,this.inClassBody=!1}};exports.state=state},{"./name-stack.js":"/node_modules/jshint/src/name-stack.js"}],"/node_modules/jshint/src/style.js":[function(_dereq_,module,exports){"use strict";exports.register=function(linter){linter.on("Identifier",function(data){linter.getOption("proto")||"__proto__"===data.name&&linter.warn("W103",{line:data.line,"char":data.char,data:[data.name,"6"]})}),linter.on("Identifier",function(data){linter.getOption("iterator")||"__iterator__"===data.name&&linter.warn("W103",{line:data.line,"char":data.char,data:[data.name]})}),linter.on("Identifier",function(data){linter.getOption("camelcase")&&data.name.replace(/^_+|_+$/g,"").indexOf("_")>-1&&!data.name.match(/^[A-Z0-9_]*$/)&&linter.warn("W106",{line:data.line,"char":data.from,data:[data.name]})}),linter.on("String",function(data){var code,quotmark=linter.getOption("quotmark");quotmark&&("single"===quotmark&&"\'"!==data.quote&&(code="W109"),"double"===quotmark&&\'"\'!==data.quote&&(code="W108"),quotmark===!0&&(linter.getCache("quotmark")||linter.setCache("quotmark",data.quote),linter.getCache("quotmark")!==data.quote&&(code="W110")),code&&linter.warn(code,{line:data.line,"char":data.char}))}),linter.on("Number",function(data){"."===data.value.charAt(0)&&linter.warn("W008",{line:data.line,"char":data.char,data:[data.value]}),"."===data.value.substr(data.value.length-1)&&linter.warn("W047",{line:data.line,"char":data.char,data:[data.value]}),/^00+/.test(data.value)&&linter.warn("W046",{line:data.line,"char":data.char,data:[data.value]})}),linter.on("String",function(data){var re=/^(?:javascript|jscript|ecmascript|vbscript|livescript)\\s*:/i;linter.getOption("scripturl")||re.test(data.value)&&linter.warn("W107",{line:data.line,"char":data.char})})}},{}],"/node_modules/jshint/src/vars.js":[function(_dereq_,module,exports){"use strict";exports.reservedVars={arguments:!1,NaN:!1},exports.ecmaIdentifiers={3:{Array:!1,Boolean:!1,Date:!1,decodeURI:!1,decodeURIComponent:!1,encodeURI:!1,encodeURIComponent:!1,Error:!1,eval:!1,EvalError:!1,Function:!1,hasOwnProperty:!1,isFinite:!1,isNaN:!1,Math:!1,Number:!1,Object:!1,parseInt:!1,parseFloat:!1,RangeError:!1,ReferenceError:!1,RegExp:!1,String:!1,SyntaxError:!1,TypeError:!1,URIError:!1},5:{JSON:!1},6:{Map:!1,Promise:!1,Proxy:!1,Reflect:!1,Set:!1,Symbol:!1,WeakMap:!1,WeakSet:!1}},exports.browser={Audio:!1,Blob:!1,addEventListener:!1,applicationCache:!1,atob:!1,blur:!1,btoa:!1,cancelAnimationFrame:!1,CanvasGradient:!1,CanvasPattern:!1,CanvasRenderingContext2D:!1,CSS:!1,clearInterval:!1,clearTimeout:!1,close:!1,closed:!1,Comment:!1,CustomEvent:!1,DOMParser:!1,defaultStatus:!1,Document:!1,document:!1,DocumentFragment:!1,Element:!1,ElementTimeControl:!1,Event:!1,event:!1,fetch:!1,FileReader:!1,FormData:!1,focus:!1,frames:!1,getComputedStyle:!1,HTMLElement:!1,HTMLAnchorElement:!1,HTMLBaseElement:!1,HTMLBlockquoteElement:!1,HTMLBodyElement:!1,HTMLBRElement:!1,HTMLButtonElement:!1,HTMLCanvasElement:!1,HTMLCollection:!1,HTMLDirectoryElement:!1,HTMLDivElement:!1,HTMLDListElement:!1,HTMLFieldSetElement:!1,HTMLFontElement:!1,HTMLFormElement:!1,HTMLFrameElement:!1,HTMLFrameSetElement:!1,HTMLHeadElement:!1,HTMLHeadingElement:!1,HTMLHRElement:!1,HTMLHtmlElement:!1,HTMLIFrameElement:!1,HTMLImageElement:!1,HTMLInputElement:!1,HTMLIsIndexElement:!1,HTMLLabelElement:!1,HTMLLayerElement:!1,HTMLLegendElement:!1,HTMLLIElement:!1,HTMLLinkElement:!1,HTMLMapElement:!1,HTMLMenuElement:!1,HTMLMetaElement:!1,HTMLModElement:!1,HTMLObjectElement:!1,HTMLOListElement:!1,HTMLOptGroupElement:!1,HTMLOptionElement:!1,HTMLParagraphElement:!1,HTMLParamElement:!1,HTMLPreElement:!1,HTMLQuoteElement:!1,HTMLScriptElement:!1,HTMLSelectElement:!1,HTMLStyleElement:!1,HTMLTableCaptionElement:!1,HTMLTableCellElement:!1,HTMLTableColElement:!1,HTMLTableElement:!1,HTMLTableRowElement:!1,HTMLTableSectionElement:!1,HTMLTemplateElement:!1,HTMLTextAreaElement:!1,HTMLTitleElement:!1,HTMLUListElement:!1,HTMLVideoElement:!1,history:!1,Image:!1,Intl:!1,length:!1,localStorage:!1,location:!1,matchMedia:!1,MessageChannel:!1,MessageEvent:!1,MessagePort:!1,MouseEvent:!1,moveBy:!1,moveTo:!1,MutationObserver:!1,name:!1,Node:!1,NodeFilter:!1,NodeList:!1,Notification:!1,navigator:!1,onbeforeunload:!0,onblur:!0,onerror:!0,onfocus:!0,onload:!0,onresize:!0,onunload:!0,open:!1,openDatabase:!1,opener:!1,Option:!1,parent:!1,performance:!1,print:!1,Range:!1,requestAnimationFrame:!1,removeEventListener:!1,resizeBy:!1,resizeTo:!1,screen:!1,scroll:!1,scrollBy:!1,scrollTo:!1,sessionStorage:!1,setInterval:!1,setTimeout:!1,SharedWorker:!1,status:!1,SVGAElement:!1,SVGAltGlyphDefElement:!1,SVGAltGlyphElement:!1,SVGAltGlyphItemElement:!1,SVGAngle:!1,SVGAnimateColorElement:!1,SVGAnimateElement:!1,SVGAnimateMotionElement:!1,SVGAnimateTransformElement:!1,SVGAnimatedAngle:!1,SVGAnimatedBoolean:!1,SVGAnimatedEnumeration:!1,SVGAnimatedInteger:!1,SVGAnimatedLength:!1,SVGAnimatedLengthList:!1,SVGAnimatedNumber:!1,SVGAnimatedNumberList:!1,SVGAnimatedPathData:!1,SVGAnimatedPoints:!1,SVGAnimatedPreserveAspectRatio:!1,SVGAnimatedRect:!1,SVGAnimatedString:!1,SVGAnimatedTransformList:!1,SVGAnimationElement:!1,SVGCSSRule:!1,SVGCircleElement:!1,SVGClipPathElement:!1,SVGColor:!1,SVGColorProfileElement:!1,SVGColorProfileRule:!1,SVGComponentTransferFunctionElement:!1,SVGCursorElement:!1,SVGDefsElement:!1,SVGDescElement:!1,SVGDocument:!1,SVGElement:!1,SVGElementInstance:!1,SVGElementInstanceList:!1,SVGEllipseElement:!1,SVGExternalResourcesRequired:!1,SVGFEBlendElement:!1,SVGFEColorMatrixElement:!1,SVGFEComponentTransferElement:!1,SVGFECompositeElement:!1,SVGFEConvolveMatrixElement:!1,SVGFEDiffuseLightingElement:!1,SVGFEDisplacementMapElement:!1,SVGFEDistantLightElement:!1,SVGFEFloodElement:!1,SVGFEFuncAElement:!1,SVGFEFuncBElement:!1,SVGFEFuncGElement:!1,SVGFEFuncRElement:!1,SVGFEGaussianBlurElement:!1,SVGFEImageElement:!1,SVGFEMergeElement:!1,SVGFEMergeNodeElement:!1,SVGFEMorphologyElement:!1,SVGFEOffsetElement:!1,SVGFEPointLightElement:!1,SVGFESpecularLightingElement:!1,SVGFESpotLightElement:!1,SVGFETileElement:!1,SVGFETurbulenceElement:!1,SVGFilterElement:!1,SVGFilterPrimitiveStandardAttributes:!1,SVGFitToViewBox:!1,SVGFontElement:!1,SVGFontFaceElement:!1,SVGFontFaceFormatElement:!1,SVGFontFaceNameElement:!1,SVGFontFaceSrcElement:!1,SVGFontFaceUriElement:!1,SVGForeignObjectElement:!1,SVGGElement:!1,SVGGlyphElement:!1,SVGGlyphRefElement:!1,SVGGradientElement:!1,SVGHKernElement:!1,SVGICCColor:!1,SVGImageElement:!1,SVGLangSpace:!1,SVGLength:!1,SVGLengthList:!1,SVGLineElement:!1,SVGLinearGradientElement:!1,SVGLocatable:!1,SVGMPathElement:!1,SVGMarkerElement:!1,SVGMaskElement:!1,SVGMatrix:!1,SVGMetadataElement:!1,SVGMissingGlyphElement:!1,SVGNumber:!1,SVGNumberList:!1,SVGPaint:!1,SVGPathElement:!1,SVGPathSeg:!1,SVGPathSegArcAbs:!1,SVGPathSegArcRel:!1,SVGPathSegClosePath:!1,SVGPathSegCurvetoCubicAbs:!1,SVGPathSegCurvetoCubicRel:!1,SVGPathSegCurvetoCubicSmoothAbs:!1,SVGPathSegCurvetoCubicSmoothRel:!1,SVGPathSegCurvetoQuadraticAbs:!1,SVGPathSegCurvetoQuadraticRel:!1,SVGPathSegCurvetoQuadraticSmoothAbs:!1,SVGPathSegCurvetoQuadraticSmoothRel:!1,SVGPathSegLinetoAbs:!1,SVGPathSegLinetoHorizontalAbs:!1,SVGPathSegLinetoHorizontalRel:!1,SVGPathSegLinetoRel:!1,SVGPathSegLinetoVerticalAbs:!1,SVGPathSegLinetoVerticalRel:!1,SVGPathSegList:!1,SVGPathSegMovetoAbs:!1,SVGPathSegMovetoRel:!1,SVGPatternElement:!1,SVGPoint:!1,SVGPointList:!1,SVGPolygonElement:!1,SVGPolylineElement:!1,SVGPreserveAspectRatio:!1,SVGRadialGradientElement:!1,SVGRect:!1,SVGRectElement:!1,SVGRenderingIntent:!1,SVGSVGElement:!1,SVGScriptElement:!1,SVGSetElement:!1,SVGStopElement:!1,SVGStringList:!1,SVGStylable:!1,SVGStyleElement:!1,SVGSwitchElement:!1,SVGSymbolElement:!1,SVGTRefElement:!1,SVGTSpanElement:!1,SVGTests:!1,SVGTextContentElement:!1,SVGTextElement:!1,SVGTextPathElement:!1,SVGTextPositioningElement:!1,SVGTitleElement:!1,SVGTransform:!1,SVGTransformList:!1,SVGTransformable:!1,SVGURIReference:!1,SVGUnitTypes:!1,SVGUseElement:!1,SVGVKernElement:!1,SVGViewElement:!1,SVGViewSpec:!1,SVGZoomAndPan:!1,Text:!1,TextDecoder:!1,TextEncoder:!1,TimeEvent:!1,top:!1,URL:!1,WebGLActiveInfo:!1,WebGLBuffer:!1,WebGLContextEvent:!1,WebGLFramebuffer:!1,WebGLProgram:!1,WebGLRenderbuffer:!1,WebGLRenderingContext:!1,WebGLShader:!1,WebGLShaderPrecisionFormat:!1,WebGLTexture:!1,WebGLUniformLocation:!1,WebSocket:!1,window:!1,Window:!1,Worker:!1,XDomainRequest:!1,XMLHttpRequest:!1,XMLSerializer:!1,XPathEvaluator:!1,XPathException:!1,XPathExpression:!1,XPathNamespace:!1,XPathNSResolver:!1,XPathResult:!1},exports.devel={alert:!1,confirm:!1,console:!1,Debug:!1,opera:!1,prompt:!1},exports.worker={importScripts:!0,postMessage:!0,self:!0,FileReaderSync:!0},exports.nonstandard={escape:!1,unescape:!1},exports.couch={require:!1,respond:!1,getRow:!1,emit:!1,send:!1,start:!1,sum:!1,log:!1,exports:!1,module:!1,provides:!1},exports.node={__filename:!1,__dirname:!1,GLOBAL:!1,global:!1,module:!1,acequire:!1,Buffer:!0,console:!0,exports:!0,process:!0,setTimeout:!0,clearTimeout:!0,setInterval:!0,clearInterval:!0,setImmediate:!0,clearImmediate:!0},exports.browserify={__filename:!1,__dirname:!1,global:!1,module:!1,acequire:!1,Buffer:!0,exports:!0,process:!0},exports.phantom={phantom:!0,acequire:!0,WebPage:!0,console:!0,exports:!0},exports.qunit={asyncTest:!1,deepEqual:!1,equal:!1,expect:!1,module:!1,notDeepEqual:!1,notEqual:!1,notPropEqual:!1,notStrictEqual:!1,ok:!1,propEqual:!1,QUnit:!1,raises:!1,start:!1,stop:!1,strictEqual:!1,test:!1,"throws":!1},exports.rhino={defineClass:!1,deserialize:!1,gc:!1,help:!1,importClass:!1,importPackage:!1,java:!1,load:!1,loadClass:!1,Packages:!1,print:!1,quit:!1,readFile:!1,readUrl:!1,runCommand:!1,seal:!1,serialize:!1,spawn:!1,sync:!1,toint32:!1,version:!1},exports.shelljs={target:!1,echo:!1,exit:!1,cd:!1,pwd:!1,ls:!1,find:!1,cp:!1,rm:!1,mv:!1,mkdir:!1,test:!1,cat:!1,sed:!1,grep:!1,which:!1,dirs:!1,pushd:!1,popd:!1,env:!1,exec:!1,chmod:!1,config:!1,error:!1,tempdir:!1},exports.typed={ArrayBuffer:!1,ArrayBufferView:!1,DataView:!1,Float32Array:!1,Float64Array:!1,Int16Array:!1,Int32Array:!1,Int8Array:!1,Uint16Array:!1,Uint32Array:!1,Uint8Array:!1,Uint8ClampedArray:!1},exports.wsh={ActiveXObject:!0,Enumerator:!0,GetObject:!0,ScriptEngine:!0,ScriptEngineBuildVersion:!0,ScriptEngineMajorVersion:!0,ScriptEngineMinorVersion:!0,VBArray:!0,WSH:!0,WScript:!0,XDomainRequest:!0},exports.dojo={dojo:!1,dijit:!1,dojox:!1,define:!1,require:!1},exports.jquery={$:!1,jQuery:!1},exports.mootools={$:!1,$$:!1,Asset:!1,Browser:!1,Chain:!1,Class:!1,Color:!1,Cookie:!1,Core:!1,Document:!1,DomReady:!1,DOMEvent:!1,DOMReady:!1,Drag:!1,Element:!1,Elements:!1,Event:!1,Events:!1,Fx:!1,Group:!1,Hash:!1,HtmlTable:!1,IFrame:!1,IframeShim:!1,InputValidator:!1,instanceOf:!1,Keyboard:!1,Locale:!1,Mask:!1,MooTools:!1,Native:!1,Options:!1,OverText:!1,Request:!1,Scroller:!1,Slick:!1,Slider:!1,Sortables:!1,Spinner:!1,Swiff:!1,Tips:!1,Type:!1,typeOf:!1,URI:!1,Window:!1},exports.prototypejs={$:!1,$$:!1,$A:!1,$F:!1,$H:!1,$R:!1,$break:!1,$continue:!1,$w:!1,Abstract:!1,Ajax:!1,Class:!1,Enumerable:!1,Element:!1,Event:!1,Field:!1,Form:!1,Hash:!1,Insertion:!1,ObjectRange:!1,PeriodicalExecuter:!1,Position:!1,Prototype:!1,Selector:!1,Template:!1,Toggle:!1,Try:!1,Autocompleter:!1,Builder:!1,Control:!1,Draggable:!1,Draggables:!1,Droppables:!1,Effect:!1,Sortable:!1,SortableObserver:!1,Sound:!1,Scriptaculous:!1},exports.yui={YUI:!1,Y:!1,YUI_config:!1},exports.mocha={mocha:!1,describe:!1,xdescribe:!1,it:!1,xit:!1,context:!1,xcontext:!1,before:!1,after:!1,beforeEach:!1,afterEach:!1,suite:!1,test:!1,setup:!1,teardown:!1,suiteSetup:!1,suiteTeardown:!1},exports.jasmine={jasmine:!1,describe:!1,xdescribe:!1,it:!1,xit:!1,beforeEach:!1,afterEach:!1,setFixtures:!1,loadFixtures:!1,spyOn:!1,expect:!1,runs:!1,waitsFor:!1,waits:!1,beforeAll:!1,afterAll:!1,fail:!1,fdescribe:!1,fit:!1,pending:!1}},{}]},{},["/node_modules/jshint/src/jshint.js"])}),ace.define("ace/mode/javascript_worker",["require","exports","module","ace/lib/oop","ace/worker/mirror","ace/mode/javascript/jshint"],function(acequire,exports,module){"use strict";function startRegex(arr){return RegExp("^("+arr.join("|")+")")}var oop=acequire("../lib/oop"),Mirror=acequire("../worker/mirror").Mirror,lint=acequire("./javascript/jshint").JSHINT,disabledWarningsRe=startRegex(["Bad for in variable \'(.+)\'.",\'Missing "use strict"\']),errorsRe=startRegex(["Unexpected","Expected ","Confusing (plus|minus)","\\\\{a\\\\} unterminated regular expression","Unclosed ","Unmatched ","Unbegun comment","Bad invocation","Missing space after","Missing operator at"]),infoRe=startRegex(["Expected an assignment","Bad escapement of EOL","Unexpected comma","Unexpected space","Missing radix parameter.","A leading decimal point can","\\\\[\'{a}\'\\\\] is better written in dot notation.","\'{a}\' used out of scope"]),JavaScriptWorker=exports.JavaScriptWorker=function(sender){Mirror.call(this,sender),this.setTimeout(500),this.setOptions()};oop.inherits(JavaScriptWorker,Mirror),function(){this.setOptions=function(options){this.options=options||{esnext:!0,moz:!0,devel:!0,browser:!0,node:!0,laxcomma:!0,laxbreak:!0,lastsemic:!0,onevar:!1,passfail:!1,maxerr:100,expr:!0,multistr:!0,globalstrict:!0},this.doc.getValue()&&this.deferredUpdate.schedule(100)},this.changeOptions=function(newOptions){oop.mixin(this.options,newOptions),this.doc.getValue()&&this.deferredUpdate.schedule(100)},this.isValidJS=function(str){try{eval("throw 0;"+str)}catch(e){if(0===e)return!0}return!1},this.onUpdate=function(){var value=this.doc.getValue();if(value=value.replace(/^#!.*\\n/,"\\n"),!value)return this.sender.emit("annotate",[]);var errors=[],maxErrorLevel=this.isValidJS(value)?"warning":"error";lint(value,this.options,this.options.globals);for(var results=lint.errors,errorAdded=!1,i=0;results.length>i;i++){var error=results[i];if(error){var raw=error.raw,type="warning";if("Missing semicolon."==raw){var str=error.evidence.substr(error.character);str=str.charAt(str.search(/\\S/)),"error"==maxErrorLevel&&str&&/[\\w\\d{([\'"]/.test(str)?(error.reason=\'Missing ";" before statement\',type="error"):type="info"}else{if(disabledWarningsRe.test(raw))continue;infoRe.test(raw)?type="info":errorsRe.test(raw)?(errorAdded=!0,type=maxErrorLevel):"\'{a}\' is not defined."==raw?type="warning":"\'{a}\' is defined but never used."==raw&&(type="info")}errors.push({row:error.line-1,column:error.character-1,text:error.reason,type:type,raw:raw})}}this.sender.emit("annotate",errors)}}.call(JavaScriptWorker.prototype)}),ace.define("ace/lib/es5-shim",["require","exports","module"],function(){function Empty(){}function doesDefinePropertyWork(object){try{return Object.defineProperty(object,"sentinel",{}),"sentinel"in object}catch(exception){}}function toInteger(n){return n=+n,n!==n?n=0:0!==n&&n!==1/0&&n!==-(1/0)&&(n=(n>0||-1)*Math.floor(Math.abs(n))),n}Function.prototype.bind||(Function.prototype.bind=function(that){var target=this;if("function"!=typeof target)throw new TypeError("Function.prototype.bind called on incompatible "+target);var args=slice.call(arguments,1),bound=function(){if(this instanceof bound){var result=target.apply(this,args.concat(slice.call(arguments)));return Object(result)===result?result:this}return target.apply(that,args.concat(slice.call(arguments)))};return target.prototype&&(Empty.prototype=target.prototype,bound.prototype=new Empty,Empty.prototype=null),bound});var defineGetter,defineSetter,lookupGetter,lookupSetter,supportsAccessors,call=Function.prototype.call,prototypeOfArray=Array.prototype,prototypeOfObject=Object.prototype,slice=prototypeOfArray.slice,_toString=call.bind(prototypeOfObject.toString),owns=call.bind(prototypeOfObject.hasOwnProperty);if((supportsAccessors=owns(prototypeOfObject,"__defineGetter__"))&&(defineGetter=call.bind(prototypeOfObject.__defineGetter__),defineSetter=call.bind(prototypeOfObject.__defineSetter__),lookupGetter=call.bind(prototypeOfObject.__lookupGetter__),lookupSetter=call.bind(prototypeOfObject.__lookupSetter__)),2!=[1,2].splice(0).length)if(function(){function makeArray(l){var a=Array(l+2);return a[0]=a[1]=0,a}var lengthBefore,array=[];return array.splice.apply(array,makeArray(20)),array.splice.apply(array,makeArray(26)),lengthBefore=array.length,array.splice(5,0,"XXX"),lengthBefore+1==array.length,lengthBefore+1==array.length?!0:void 0}()){var array_splice=Array.prototype.splice;Array.prototype.splice=function(start,deleteCount){return arguments.length?array_splice.apply(this,[void 0===start?0:start,void 0===deleteCount?this.length-start:deleteCount].concat(slice.call(arguments,2))):[]}}else Array.prototype.splice=function(pos,removeCount){var length=this.length;pos>0?pos>length&&(pos=length):void 0==pos?pos=0:0>pos&&(pos=Math.max(length+pos,0)),length>pos+removeCount||(removeCount=length-pos);var removed=this.slice(pos,pos+removeCount),insert=slice.call(arguments,2),add=insert.length;if(pos===length)add&&this.push.apply(this,insert);else{var remove=Math.min(removeCount,length-pos),tailOldPos=pos+remove,tailNewPos=tailOldPos+add-remove,tailCount=length-tailOldPos,lengthAfterRemove=length-remove;if(tailOldPos>tailNewPos)for(var i=0;tailCount>i;++i)this[tailNewPos+i]=this[tailOldPos+i];else if(tailNewPos>tailOldPos)for(i=tailCount;i--;)this[tailNewPos+i]=this[tailOldPos+i];if(add&&pos===lengthAfterRemove)this.length=lengthAfterRemove,this.push.apply(this,insert);else for(this.length=lengthAfterRemove+add,i=0;add>i;++i)this[pos+i]=insert[i]}return removed};Array.isArray||(Array.isArray=function(obj){return"[object Array]"==_toString(obj)});var boxedString=Object("a"),splitString="a"!=boxedString[0]||!(0 in boxedString);if(Array.prototype.forEach||(Array.prototype.forEach=function(fun){var object=toObject(this),self=splitString&&"[object String]"==_toString(this)?this.split(""):object,thisp=arguments[1],i=-1,length=self.length>>>0;if("[object Function]"!=_toString(fun))throw new TypeError;for(;length>++i;)i in self&&fun.call(thisp,self[i],i,object)}),Array.prototype.map||(Array.prototype.map=function(fun){var object=toObject(this),self=splitString&&"[object String]"==_toString(this)?this.split(""):object,length=self.length>>>0,result=Array(length),thisp=arguments[1];if("[object Function]"!=_toString(fun))throw new TypeError(fun+" is not a function");for(var i=0;length>i;i++)i in self&&(result[i]=fun.call(thisp,self[i],i,object));return result}),Array.prototype.filter||(Array.prototype.filter=function(fun){var value,object=toObject(this),self=splitString&&"[object String]"==_toString(this)?this.split(""):object,length=self.length>>>0,result=[],thisp=arguments[1];if("[object Function]"!=_toString(fun))throw new TypeError(fun+" is not a function");for(var i=0;length>i;i++)i in self&&(value=self[i],fun.call(thisp,value,i,object)&&result.push(value));return result}),Array.prototype.every||(Array.prototype.every=function(fun){var object=toObject(this),self=splitString&&"[object String]"==_toString(this)?this.split(""):object,length=self.length>>>0,thisp=arguments[1];if("[object Function]"!=_toString(fun))throw new TypeError(fun+" is not a function");for(var i=0;length>i;i++)if(i in self&&!fun.call(thisp,self[i],i,object))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(fun){var object=toObject(this),self=splitString&&"[object String]"==_toString(this)?this.split(""):object,length=self.length>>>0,thisp=arguments[1];if("[object Function]"!=_toString(fun))throw new TypeError(fun+" is not a function");for(var i=0;length>i;i++)if(i in self&&fun.call(thisp,self[i],i,object))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(fun){var object=toObject(this),self=splitString&&"[object String]"==_toString(this)?this.split(""):object,length=self.length>>>0;if("[object Function]"!=_toString(fun))throw new TypeError(fun+" is not a function");if(!length&&1==arguments.length)throw new TypeError("reduce of empty array with no initial value");var result,i=0;if(arguments.length>=2)result=arguments[1];else for(;;){if(i in self){result=self[i++];break}if(++i>=length)throw new TypeError("reduce of empty array with no initial value")}for(;length>i;i++)i in self&&(result=fun.call(void 0,result,self[i],i,object));return result}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(fun){var object=toObject(this),self=splitString&&"[object String]"==_toString(this)?this.split(""):object,length=self.length>>>0;if("[object Function]"!=_toString(fun))throw new TypeError(fun+" is not a function");if(!length&&1==arguments.length)throw new TypeError("reduceRight of empty array with no initial value");var result,i=length-1;if(arguments.length>=2)result=arguments[1];else for(;;){if(i in self){result=self[i--];break}if(0>--i)throw new TypeError("reduceRight of empty array with no initial value")}do i in this&&(result=fun.call(void 0,result,self[i],i,object));while(i--);return result}),Array.prototype.indexOf&&-1==[0,1].indexOf(1,2)||(Array.prototype.indexOf=function(sought){var self=splitString&&"[object String]"==_toString(this)?this.split(""):toObject(this),length=self.length>>>0;if(!length)return-1;var i=0;for(arguments.length>1&&(i=toInteger(arguments[1])),i=i>=0?i:Math.max(0,length+i);length>i;i++)if(i in self&&self[i]===sought)return i;return-1}),Array.prototype.lastIndexOf&&-1==[0,1].lastIndexOf(0,-3)||(Array.prototype.lastIndexOf=function(sought){var self=splitString&&"[object String]"==_toString(this)?this.split(""):toObject(this),length=self.length>>>0;if(!length)return-1;var i=length-1;for(arguments.length>1&&(i=Math.min(i,toInteger(arguments[1]))),i=i>=0?i:length-Math.abs(i);i>=0;i--)if(i in self&&sought===self[i])return i;return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(object){return object.__proto__||(object.constructor?object.constructor.prototype:prototypeOfObject)}),!Object.getOwnPropertyDescriptor){var ERR_NON_OBJECT="Object.getOwnPropertyDescriptor called on a non-object: ";Object.getOwnPropertyDescriptor=function(object,property){if("object"!=typeof object&&"function"!=typeof object||null===object)throw new TypeError(ERR_NON_OBJECT+object);if(owns(object,property)){var descriptor,getter,setter;if(descriptor={enumerable:!0,configurable:!0},supportsAccessors){var prototype=object.__proto__;object.__proto__=prototypeOfObject;var getter=lookupGetter(object,property),setter=lookupSetter(object,property);if(object.__proto__=prototype,getter||setter)return getter&&(descriptor.get=getter),setter&&(descriptor.set=setter),descriptor}return descriptor.value=object[property],descriptor}}}if(Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(object){return Object.keys(object)}),!Object.create){var createEmpty;createEmpty=null===Object.prototype.__proto__?function(){return{__proto__:null}}:function(){var empty={};for(var i in empty)empty[i]=null;return empty.constructor=empty.hasOwnProperty=empty.propertyIsEnumerable=empty.isPrototypeOf=empty.toLocaleString=empty.toString=empty.valueOf=empty.__proto__=null,empty},Object.create=function(prototype,properties){var object;if(null===prototype)object=createEmpty();else{if("object"!=typeof prototype)throw new TypeError("typeof prototype["+typeof prototype+"] != \'object\'");var Type=function(){};Type.prototype=prototype,object=new Type,object.__proto__=prototype}return void 0!==properties&&Object.defineProperties(object,properties),object}}if(Object.defineProperty){var definePropertyWorksOnObject=doesDefinePropertyWork({}),definePropertyWorksOnDom="undefined"==typeof document||doesDefinePropertyWork(document.createElement("div"));if(!definePropertyWorksOnObject||!definePropertyWorksOnDom)var definePropertyFallback=Object.defineProperty}if(!Object.defineProperty||definePropertyFallback){var ERR_NON_OBJECT_DESCRIPTOR="Property description must be an object: ",ERR_NON_OBJECT_TARGET="Object.defineProperty called on non-object: ",ERR_ACCESSORS_NOT_SUPPORTED="getters & setters can not be defined on this javascript engine";Object.defineProperty=function(object,property,descriptor){if("object"!=typeof object&&"function"!=typeof object||null===object)throw new TypeError(ERR_NON_OBJECT_TARGET+object);if("object"!=typeof descriptor&&"function"!=typeof descriptor||null===descriptor)throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR+descriptor);if(definePropertyFallback)try{return definePropertyFallback.call(Object,object,property,descriptor)}catch(exception){}if(owns(descriptor,"value"))if(supportsAccessors&&(lookupGetter(object,property)||lookupSetter(object,property))){var prototype=object.__proto__;object.__proto__=prototypeOfObject,delete object[property],object[property]=descriptor.value,object.__proto__=prototype}else object[property]=descriptor.value;else{if(!supportsAccessors)throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);owns(descriptor,"get")&&defineGetter(object,property,descriptor.get),owns(descriptor,"set")&&defineSetter(object,property,descriptor.set)}return object}}Object.defineProperties||(Object.defineProperties=function(object,properties){for(var property in properties)owns(properties,property)&&Object.defineProperty(object,property,properties[property]);return object}),Object.seal||(Object.seal=function(object){return object}),Object.freeze||(Object.freeze=function(object){return object});try{Object.freeze(function(){})}catch(exception){Object.freeze=function(freezeObject){return function(object){return"function"==typeof object?object:freezeObject(object)}}(Object.freeze)}if(Object.preventExtensions||(Object.preventExtensions=function(object){return object}),Object.isSealed||(Object.isSealed=function(){return!1}),Object.isFrozen||(Object.isFrozen=function(){return!1}),Object.isExtensible||(Object.isExtensible=function(object){if(Object(object)===object)throw new TypeError;for(var name="";owns(object,name);)name+="?";object[name]=!0;var returnValue=owns(object,name);return delete object[name],returnValue}),!Object.keys){var hasDontEnumBug=!0,dontEnums=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],dontEnumsLength=dontEnums.length;for(var key in{toString:null})hasDontEnumBug=!1;Object.keys=function(object){if("object"!=typeof object&&"function"!=typeof object||null===object)throw new TypeError("Object.keys called on a non-object");var keys=[];for(var name in object)owns(object,name)&&keys.push(name);if(hasDontEnumBug)for(var i=0,ii=dontEnumsLength;ii>i;i++){var dontEnum=dontEnums[i];owns(object,dontEnum)&&keys.push(dontEnum)}return keys}}Date.now||(Date.now=function(){return(new Date).getTime()});var ws="\t\\n\v\\f\\r   ᠎              \\u2028\\u2029\ufeff";if(!String.prototype.trim||ws.trim()){ws="["+ws+"]";var trimBeginRegexp=RegExp("^"+ws+ws+"*"),trimEndRegexp=RegExp(ws+ws+"*$");String.prototype.trim=function(){return(this+"").replace(trimBeginRegexp,"").replace(trimEndRegexp,"")}}var toObject=function(o){if(null==o)throw new TypeError("can\'t convert "+o+" to object");return Object(o)}});'},"6da8":function(e,t){function n(e){return e.split("")}e.exports=n},"6eba":function(e,t,n){var i=n("23e7");i({target:"Date",stat:!0},{now:function(){return(new Date).getTime()}})},"6eeb":function(e,t,n){var i=n("da84"),r=n("9112"),s=n("5135"),o=n("ce4e"),a=n("8925"),c=n("69f3"),l=c.get,u=c.enforce,d=String(String).split("String");(e.exports=function(e,t,n,a){var c,l=!!a&&!!a.unsafe,h=!!a&&!!a.enumerable,f=!!a&&!!a.noTargetGet;"function"==typeof n&&("string"!=typeof t||s(n,"name")||r(n,"name",t),c=u(n),c.source||(c.source=d.join("string"==typeof t?t:""))),e!==i?(l?!f&&e[t]&&(h=!0):delete e[t],h?e[t]=n:r(e,t,n)):h?e[t]=n:o(t,n)})(Function.prototype,"toString",(function(){return"function"==typeof this&&l(this).source||a(this)}))},"6f53":function(e,t,n){var i=n("83ab"),r=n("df75"),s=n("fc6a"),o=n("d1e7").f,a=function(e){return function(t){var n,a=s(t),c=r(a),l=c.length,u=0,d=[];while(l>u)n=c[u++],i&&!o.call(a,n)||d.push(e?[n,a[n]]:a[n]);return d}};e.exports={entries:a(!0),values:a(!1)}},7039:function(e,t,n){var i=n("23e7"),r=n("d039"),s=n("057f").f,o=r((function(){return!Object.getOwnPropertyNames(1)}));i({target:"Object",stat:!0,forced:o},{getOwnPropertyNames:s})},7156:function(e,t,n){var i=n("861d"),r=n("d2bb");e.exports=function(e,t,n){var s,o;return r&&"function"==typeof(s=t.constructor)&&s!==n&&i(o=s.prototype)&&o!==n.prototype&&r(e,o),e}},"715b":function(e,t,n){"use strict";n("8746")},"72f7":function(e,t,n){"use strict";var i=n("ebb5").exportTypedArrayMethod,r=n("d039"),s=n("da84"),o=s.Uint8Array,a=o&&o.prototype||{},c=[].toString,l=[].join;r((function(){c.call({})}))&&(c=function(){return l.call(this)});var u=a.toString!=c;i("toString",c,u)},"735e":function(e,t,n){"use strict";var i=n("ebb5"),r=n("81d5"),s=i.aTypedArray,o=i.exportTypedArrayMethod;o("fill",(function(e){return r.apply(s(this),arguments)}))},"73d9":function(e,t,n){var i=n("44d2");i("flatMap")},"73f5":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("vui-group",[n("vui-group-item",{attrs:{label:"ID:"}},[e._v(e._s(e.active_virus.id))]),n("vui-group-item",{attrs:{label:"Description:"},domProps:{innerHTML:e._s(e.active_virus.description)}}),n("vui-group-item",{attrs:{label:"Notes:"}},[n("view-records-field",{attrs:{editable:(32&e.editable)>0,path:"active_virus.notes"}},[n("textarea",{directives:[{name:"model",rawName:"v-model",value:e.$root.$data.state.editingvalue,expression:"$root.$data.state.editingvalue"}],domProps:{value:e.$root.$data.state.editingvalue},on:{input:function(t){t.target.composing||e.$set(e.$root.$data.state,"editingvalue",t.target.value)}}})])],1)],1)},r=[],s={data:function(){return this.$root.$data.state}},o=s,a=n("2877"),c=Object(a["a"])(o,i,r,!1,null,null,null);t["default"]=c.exports},7418:function(e,t){t.f=Object.getOwnPropertySymbols},"746f":function(e,t,n){var i=n("428f"),r=n("5135"),s=n("e538"),o=n("9bf2").f;e.exports=function(e){var t=i.Symbol||(i.Symbol={});r(t,e)||o(t,e,{value:s.f(e)})}},"74e7":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("tr",{staticClass:"item"},[n("td",{attrs:{colspan:"2"}},[e._t("default")],2)])},r=[],s={},o=s,a=n("2877"),c=Object(a["a"])(o,i,r,!1,null,null,null);t["default"]=c.exports},"74e8":function(e,t,n){"use strict";var i=n("23e7"),r=n("da84"),s=n("83ab"),o=n("8aa7"),a=n("ebb5"),c=n("621a"),l=n("19aa"),u=n("5c6c"),d=n("9112"),h=n("50c4"),f=n("0b25"),p=n("182d"),g=n("c04e"),m=n("5135"),v=n("f5df"),b=n("861d"),y=n("7c73"),w=n("d2bb"),_=n("241c").f,x=n("a078"),k=n("b727").forEach,A=n("2626"),C=n("9bf2"),E=n("06cf"),S=n("69f3"),F=n("7156"),$=S.get,T=S.set,L=C.f,D=E.f,B=Math.round,R=r.RangeError,O=c.ArrayBuffer,M=c.DataView,j=a.NATIVE_ARRAY_BUFFER_VIEWS,I=a.TYPED_ARRAY_TAG,P=a.TypedArray,N=a.TypedArrayPrototype,W=a.aTypedArrayConstructor,H=a.isTypedArray,V="BYTES_PER_ELEMENT",U="Wrong length",z=function(e,t){var n=0,i=t.length,r=new(W(e))(i);while(i>n)r[n]=t[n++];return r},G=function(e,t){L(e,t,{get:function(){return $(this)[t]}})},q=function(e){var t;return e instanceof O||"ArrayBuffer"==(t=v(e))||"SharedArrayBuffer"==t},K=function(e,t){return H(e)&&"symbol"!=typeof t&&t in e&&String(+t)==String(t)},Y=function(e,t){return K(e,t=g(t,!0))?u(2,e[t]):D(e,t)},X=function(e,t,n){return!(K(e,t=g(t,!0))&&b(n)&&m(n,"value"))||m(n,"get")||m(n,"set")||n.configurable||m(n,"writable")&&!n.writable||m(n,"enumerable")&&!n.enumerable?L(e,t,n):(e[t]=n.value,e)};s?(j||(E.f=Y,C.f=X,G(N,"buffer"),G(N,"byteOffset"),G(N,"byteLength"),G(N,"length")),i({target:"Object",stat:!0,forced:!j},{getOwnPropertyDescriptor:Y,defineProperty:X}),e.exports=function(e,t,n){var s=e.match(/\d+$/)[0]/8,a=e+(n?"Clamped":"")+"Array",c="get"+e,u="set"+e,g=r[a],m=g,v=m&&m.prototype,C={},E=function(e,t){var n=$(e);return n.view[c](t*s+n.byteOffset,!0)},S=function(e,t,i){var r=$(e);n&&(i=(i=B(i))<0?0:i>255?255:255&i),r.view[u](t*s+r.byteOffset,i,!0)},D=function(e,t){L(e,t,{get:function(){return E(this,t)},set:function(e){return S(this,t,e)},enumerable:!0})};j?o&&(m=t((function(e,t,n,i){return l(e,m,a),F(function(){return b(t)?q(t)?void 0!==i?new g(t,p(n,s),i):void 0!==n?new g(t,p(n,s)):new g(t):H(t)?z(m,t):x.call(m,t):new g(f(t))}(),e,m)})),w&&w(m,P),k(_(g),(function(e){e in m||d(m,e,g[e])})),m.prototype=v):(m=t((function(e,t,n,i){l(e,m,a);var r,o,c,u=0,d=0;if(b(t)){if(!q(t))return H(t)?z(m,t):x.call(m,t);r=t,d=p(n,s);var g=t.byteLength;if(void 0===i){if(g%s)throw R(U);if(o=g-d,o<0)throw R(U)}else if(o=h(i)*s,o+d>g)throw R(U);c=o/s}else c=f(t),o=c*s,r=new O(o);T(e,{buffer:r,byteOffset:d,byteLength:o,length:c,view:new M(r)});while(u>1,m=23===t?r(2,-24)-r(2,-77):0,v=e<0||0===e&&1/e<0?1:0,b=0;for(e=i(e),e!=e||e===n?(u=e!=e?1:0,l=p):(l=s(o(e)/a),e*(d=r(2,-l))<1&&(l--,d*=2),e+=l+g>=1?m/d:m*r(2,1-g),e*d>=2&&(l++,d/=2),l+g>=p?(u=0,l=p):l+g>=1?(u=(e*d-1)*r(2,t),l+=g):(u=e*r(2,g-1)*r(2,t),l=0));t>=8;h[b++]=255&u,u/=256,t-=8);for(l=l<0;h[b++]=255&l,l/=256,f-=8);return h[--b]|=128*v,h},l=function(e,t){var i,s=e.length,o=8*s-t-1,a=(1<>1,l=o-7,u=s-1,d=e[u--],h=127&d;for(d>>=7;l>0;h=256*h+e[u],u--,l-=8);for(i=h&(1<<-l)-1,h>>=-l,l+=t;l>0;i=256*i+e[u],u--,l-=8);if(0===h)h=1-c;else{if(h===a)return i?NaN:d?-n:n;i+=r(2,t),h-=c}return(d?-1:1)*i*r(2,h-t)};e.exports={pack:c,unpack:l}},7839:function(e,t){e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},7898:function(e,t,n){var i=n("23e7"),r=n("8eb5"),s=Math.exp;i({target:"Math",stat:!0},{tanh:function(e){var t=r(e=+e),n=r(-e);return t==1/0?1:n==1/0?-1:(t-n)/(s(e)+s(-e))}})},7938:function(e,t,n){},7948:function(e,t){function n(e,t){var n=-1,i=null==e?0:e.length,r=Array(i);while(++n0)},{asinh:a})},"7a82":function(e,t,n){var i=n("23e7"),r=n("83ab"),s=n("9bf2");i({target:"Object",stat:!0,forced:!r,sham:!r},{defineProperty:s.f})},"7b0b":function(e,t,n){var i=n("1d80");e.exports=function(e){return Object(i(e))}},"7c73":function(e,t,n){var i,r=n("825a"),s=n("37e8"),o=n("7839"),a=n("d012"),c=n("1be4"),l=n("cc12"),u=n("f772"),d=">",h="<",f="prototype",p="script",g=u("IE_PROTO"),m=function(){},v=function(e){return h+p+d+e+h+"/"+p+d},b=function(e){e.write(v("")),e.close();var t=e.parentWindow.Object;return e=null,t},y=function(){var e,t=l("iframe"),n="java"+p+":";return t.style.display="none",c.appendChild(t),t.src=String(n),e=t.contentWindow.document,e.open(),e.write(v("document.F=Object")),e.close(),e.F},w=function(){try{i=document.domain&&new ActiveXObject("htmlfile")}catch(t){}w=i?b(i):y();var e=o.length;while(e--)delete w[f][o[e]];return w()};a[g]=!0,e.exports=Object.create||function(e,t){var n;return null!==e?(m[f]=r(e),n=new m,m[f]=null,n[g]=e):n=w(),void 0===t?n:s(n,t)}},"7c9e":function(e,t,n){var i=n("061c");e.exports={render:function(e){var t=this.height?this.px(this.height):"100%",n=this.width?this.px(this.width):"100%";return e("div",{attrs:{style:"height: "+t+"; width: "+n}})},props:{value:String,lang:!0,theme:String,height:!0,width:!0,options:Object},data:function(){return{editor:null,contentBackup:""}},methods:{px:function(e){return/^\d*$/.test(e)?e+"px":e}},watch:{value:function(e){this.contentBackup!==e&&(this.editor.session.setValue(e,1),this.contentBackup=e)},theme:function(e){this.editor.setTheme("ace/theme/"+e)},lang:function(e){this.editor.getSession().setMode("string"===typeof e?"ace/mode/"+e:e)},options:function(e){this.editor.setOptions(e)},height:function(){this.$nextTick((function(){this.editor.resize()}))},width:function(){this.$nextTick((function(){this.editor.resize()}))}},beforeDestroy:function(){this.editor.destroy(),this.editor.container.remove()},mounted:function(){var e=this,t=this.lang||"text",r=this.theme||"chrome";n("b378");var s=e.editor=i.edit(this.$el);s.$blockScrolling=1/0,this.$emit("init",s),s.getSession().setMode("string"===typeof t?"ace/mode/"+t:t),s.setTheme("ace/theme/"+r),this.value&&s.setValue(this.value,1),this.contentBackup=this.value,s.on("change",(function(){var t=s.getValue();e.$emit("input",t),e.contentBackup=t})),e.options&&s.setOptions(e.options)}}},"7da4":function(e,t,n){},"7db0":function(e,t,n){"use strict";var i=n("23e7"),r=n("b727").find,s=n("44d2"),o=n("ae40"),a="find",c=!0,l=o(a);a in[]&&Array(1)[a]((function(){c=!1})),i({target:"Array",proto:!0,forced:c||!l},{find:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}}),s(a)},"7dc4":function(e,t,n){"use strict";n("592e")},"7dc7":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[0==e.s.mode||0==e.s.sel_price?[n("div",{staticClass:"cancel-button"},[n("vui-input-search",{attrs:{input:e.products,keys:["name"],autofocus:"",threshold:e.threshold},model:{value:e.output,callback:function(t){e.output=t},expression:"output"}}),n("vui-button",{attrs:{disabled:!e.s.coin,params:{remove_coin:1},icon:"sign-out-alt"}},[e._v(e._s(e.s.coin?e.s.coin:"No coin inserted."))])],1),n("div",{staticClass:"t-parent"},e._l(e.output,(function(t){return n("vui-button",{key:t.key,staticClass:"t-child tooltip",class:t.amount>0?"":"no-stock",attrs:{disabled:0==t.amount||1==e.s.mode,params:{vendItem:t.key}}},[n("div",{staticClass:"t-container",style:{height:e.s.ui_size+"px",width:e.s.ui_size+"px"}},[n("span",{staticClass:"food-icon",class:[t.amount>0?"":"no-stock",t.icon_tag]}),t.price>0?n("span",{staticClass:"cart-icon fas ic-shopping-cart"}):e._e(),t.price>0?n("span",{staticClass:"price"},[e._v(e._s(t.price)+"电")]):e._e(),n("span",{staticClass:"qty",class:t.amount>0?"":"no-stock"},[e._v("(x"+e._s(t.amount)+")")])]),n("span",{staticClass:"tooltiptext"},[e._v(e._s(t.name))])])})),1)]:e.s.sel_name&&e.s.sel_price>0?[n("div",{staticClass:"t-parent"},[n("p",[e._v("Item selected:"),n("span",{staticClass:"purchase-icon",class:e.s.sel_icon}),e._v(e._s(e.s.sel_name))]),n("p",[e._v("Charge: "+e._s(e.s.sel_price)+"电 / "+e._s(e.s.sel_price)+"cr")]),n("p",[e._v("Swipe your NanoTrasen ID or insert credits to purchase.")]),1==e.s.message_err?n("p",{staticClass:"danger"},[e._v(e._s(e.s.message))]):e._e(),n("div",{staticClass:"cancel-button"},[n("vui-button",{attrs:{params:{cancelpurchase:1},icon:"undo"}},[e._v("Cancel Transaction")])],1)])]:[n("vui-button",{staticClass:"cancel-button danger",attrs:{params:{reset:1},icon:"undo"}},[e._v("Reset Machine")])]],2)},r=[],s=(n("07ac"),{data:function(){return{s:this.$root.$data.state,output:[],threshold:.3}},computed:{products:function(){return Object.values(this.s.products)}}}),o=s,a=(n("fe33"),n("2877")),c=Object(a["a"])(o,i,r,!1,null,"2633030c",null);t["default"]=c.exports},"7dd0":function(e,t,n){"use strict";var i=n("23e7"),r=n("9ed3"),s=n("e163"),o=n("d2bb"),a=n("d44e"),c=n("9112"),l=n("6eeb"),u=n("b622"),d=n("c430"),h=n("3f8c"),f=n("ae93"),p=f.IteratorPrototype,g=f.BUGGY_SAFARI_ITERATORS,m=u("iterator"),v="keys",b="values",y="entries",w=function(){return this};e.exports=function(e,t,n,u,f,_,x){r(n,t,u);var k,A,C,E=function(e){if(e===f&&L)return L;if(!g&&e in $)return $[e];switch(e){case v:return function(){return new n(this,e)};case b:return function(){return new n(this,e)};case y:return function(){return new n(this,e)}}return function(){return new n(this)}},S=t+" Iterator",F=!1,$=e.prototype,T=$[m]||$["@@iterator"]||f&&$[f],L=!g&&T||E(f),D="Array"==t&&$.entries||T;if(D&&(k=s(D.call(new e)),p!==Object.prototype&&k.next&&(d||s(k)===p||(o?o(k,p):"function"!=typeof k[m]&&c(k,m,w)),a(k,S,!0,!0),d&&(h[S]=w))),f==b&&T&&T.name!==b&&(F=!0,L=function(){return T.call(this)}),d&&!x||$[m]===L||c($,m,L),h[t]=L,f)if(A={values:E(b),keys:_?L:E(v),entries:E(y)},x)for(C in A)(g||F||!(C in $))&&l($,C,A[C]);else i({target:t,proto:!0,forced:g||F},A);return A}},"7e12":function(e,t,n){var i=n("da84"),r=n("58a8").trim,s=n("5899"),o=i.parseFloat,a=1/o(s+"-0")!==-1/0;e.exports=a?function(e){var t=r(String(e)),n=o(t);return 0===n&&"-"==t.charAt(0)?-0:n}:o},"7e8e":function(e,t){var n=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;function i(e){return n.test(e)}e.exports=i},"7ed3":function(e,t,n){var i=n("23e7"),r=n("825a"),s=n("861d"),o=n("5135"),a=n("d039"),c=n("9bf2"),l=n("06cf"),u=n("e163"),d=n("5c6c");function h(e,t,n){var i,a,f=arguments.length<4?e:arguments[3],p=l.f(r(e),t);if(!p){if(s(a=u(e)))return h(a,t,n,f);p=d(0)}if(o(p,"value")){if(!1===p.writable||!s(f))return!1;if(i=l.f(f,t)){if(i.get||i.set||!1===i.writable)return!1;i.value=n,c.f(f,t,i)}else c.f(f,t,d(0,n));return!0}return void 0!==p.set&&(p.set.call(f,n),!0)}var f=a((function(){var e=function(){},t=c.f(new e,"a",{configurable:!0});return!1!==Reflect.set(e.prototype,"a",1,t)}));i({target:"Reflect",stat:!0,forced:f},{set:h})},"7f78":function(e,t,n){var i=n("23e7"),r=n("825a"),s=n("e163"),o=n("e177");i({target:"Reflect",stat:!0,sham:!o},{getPrototypeOf:function(e){return s(r(e))}})},"7f9a":function(e,t,n){var i=n("da84"),r=n("8925"),s=i.WeakMap;e.exports="function"===typeof s&&/native code/.test(r(s))},"80e0":function(e,t,n){var i=n("746f");i("replace")},8103:function(e,t,n){var i=n("d194"),r=i("toUpperCase");e.exports=r},"810a":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("img",{attrs:{src:e.source},on:{error:function(t){return e.failedToLoad()}}})},r=[],s=(n("99af"),n("b0c0"),n("a9e3"),n("4795"),{props:{name:{type:String,default:""},maxTries:{type:Number,default:10}},computed:{sourceBuster:function(){return this.failsToLoad&&this.failsToLoad1?arguments[1]:void 0,n),c=o>2?arguments[2]:void 0,l=void 0===c?n:r(c,n);while(l>a)t[a++]=e;return t}},"820e":function(e,t,n){"use strict";var i=n("23e7"),r=n("1c0b"),s=n("f069"),o=n("e667"),a=n("2266");i({target:"Promise",stat:!0},{allSettled:function(e){var t=this,n=s.f(t),i=n.resolve,c=n.reject,l=o((function(){var n=r(t.resolve),s=[],o=0,c=1;a(e,(function(e){var r=o++,a=!1;s.push(void 0),c++,n.call(t,e).then((function(e){a||(a=!0,s[r]={status:"fulfilled",value:e},--c||i(s))}),(function(e){a||(a=!0,s[r]={status:"rejected",reason:e},--c||i(s))}))})),--c||i(s)}));return l.error&&c(l.value),n.promise}})},"825a":function(e,t,n){var i=n("861d");e.exports=function(e){if(!i(e))throw TypeError(String(e)+" is not an object");return e}},"82da":function(e,t,n){var i=n("23e7"),r=n("ebb5"),s=r.NATIVE_ARRAY_BUFFER_VIEWS;i({target:"ArrayBuffer",stat:!0,forced:!s},{isView:r.isView})},"82f8":function(e,t,n){"use strict";var i=n("ebb5"),r=n("4d64").includes,s=i.aTypedArray,o=i.exportTypedArrayMethod;o("includes",(function(e){return r(s(this),e,arguments.length>1?arguments[1]:void 0)}))},8385:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("vui-input-search",{attrs:{input:e.records,keys:["id","name","rank"]},model:{value:e.filtered,callback:function(t){e.filtered=t},expression:"filtered"}}),e._l(e.filtered,(function(t){return n("div",{key:t.id},[n("vui-button",{attrs:{params:{setactive_virus:t.id},"push-state":""},on:{click:function(t){e.activeview=e.defaultview}}},[e._v(e._s(t.id)+": "+e._s(t.name))])],1)}))],2)},r=[],s=(n("07ac"),{data:function(){return{state:this.$root.$data.state,filtered:[]}},computed:{records:function(){return Object.values(this.state.record_viruses)}}}),o=s,a=n("2877"),c=Object(a["a"])(o,i,r,!1,null,null,null);t["default"]=c.exports},"83ab":function(e,t,n){var i=n("d039");e.exports=!i((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},8418:function(e,t,n){"use strict";var i=n("c04e"),r=n("9bf2"),s=n("5c6c");e.exports=function(e,t,n){var o=i(t);o in e?r.f(e,o,s(0,n)):e[o]=n}},"841c":function(e,t,n){"use strict";var i=n("d784"),r=n("825a"),s=n("1d80"),o=n("129f"),a=n("14c3");i("search",1,(function(e,t,n){return[function(t){var n=s(this),i=void 0==t?void 0:t[e];return void 0!==i?i.call(t,n):new RegExp(t)[e](String(n))},function(e){var i=n(t,e,this);if(i.done)return i.value;var s=r(e),c=String(this),l=s.lastIndex;o(l,0)||(s.lastIndex=0);var u=a(s,c);return o(s.lastIndex,l)||(s.lastIndex=l),null===u?-1:u.index}]}))},"843c":function(e,t,n){"use strict";var i=n("23e7"),r=n("0ccb").end,s=n("9a0c");i({target:"String",proto:!0,forced:s},{padEnd:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}})},"84c3":function(e,t,n){var i=n("74e8");i("Uint16",(function(e){return function(t,n,i){return e(this,t,n,i)}}))},8535:function(e,t,n){},"857a":function(e,t,n){var i=n("1d80"),r=/"/g;e.exports=function(e,t,n,s){var o=String(i(e)),a="<"+t;return""!==n&&(a+=" "+n+'="'+String(s).replace(r,""")+'"'),a+">"+o+""}},"861d":function(e,t){e.exports=function(e){return"object"===typeof e?null!==e:"function"===typeof e}},"86ad":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("h3",[e._v("Sensor Data:")]),e.state.sensors.length<=0?n("span",[e._v("No sensors connected.")]):e._l(e.state.sensors,(function(t,i){return n("div",{key:i},[n("b",[e._v(e._s(t.name))]),n("br"),t.pressure?n("vui-item",{attrs:{label:"Pressure:"}},[e._v(e._s(t.pressure)+" kPa")]):e._e(),t.temperature?n("vui-item",{attrs:{label:"Temperature:"}},[e._v(e._s(t.temperature)+" K")]):e._e(),t.oxygen||t.hydrogen||t.phoron||t.nitrogen||t.carbon_dioxide?n("vui-item",{attrs:{label:"Gas Composition:"}},[t.oxygen?n("span",{staticClass:"complist"},[e._v(e._s(t.oxygen)+" O"),n("sub",[e._v("2")])]):e._e(),t.nitrogen?n("span",{staticClass:"complist"},[e._v(e._s(t.nitrogen)+" N")]):e._e(),t.carbon_dioxide?n("span",{staticClass:"complist"},[e._v(e._s(t.carbon_dioxide)+" CO"),n("sub",[e._v("2"),n("sub")])]):e._e(),t.phoron?n("span",{staticClass:"complist"},[e._v(e._s(t.phoron)+" PH")]):e._e(),t.hydrogen?n("span",{staticClass:"complist"},[e._v(e._s(t.hydrogen)+" H"),n("sub",[e._v("2")])]):e._e()]):e._e()],1)})),e.state.control?n("view-console-atmocontrol-"+e.state.control,{tag:"component"}):e._e()],2)},r=[],s={data:function(){return this.$root.$data}},o=s,a=(n("f9a1"),n("2877")),c=Object(a["a"])(o,i,r,!1,null,"0f00c828",null);t["default"]=c.exports},"86eb":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[e.forumuserui_enabled?n("div",{staticClass:"notice"},[n("center",[e._v("Modifications done do not outlast the round! Use the forums/WI to modify ranks.")])],1):e._e(),n("table",[n("tr",[n("th",[e._v("Ckey "),n("vui-button",{attrs:{params:{action:"add"}}},[e._v("Add")])],1),n("th",[e._v("Rank")]),n("th",[e._v("Permissions")])]),e._l(e.admins,(function(t){return n("tr",{key:t.ckey},[n("td",[n("vui-button",{attrs:{params:{action:"remove",ckey:t.ckey}}},[e._v("Edit")]),e._v(" "+e._s(t.ckey)+" ")],1),n("td",[n("vui-button",{attrs:{params:{action:"rank",ckey:t.ckey}}},[e._v("Edit")]),e._v(" "+e._s(t.rank)+" ")],1),n("td",[n("vui-button",{attrs:{params:{action:"rights",ckey:t.ckey}}},[e._v("Edit")]),e._v(" "+e._s(t.rights)+" ")],1)])}))],2)])},r=[],s={data:function(){return this.$root.$data.state}},o=s,a=n("2877"),c=Object(a["a"])(o,i,r,!1,null,null,null);t["default"]=c.exports},8746:function(e,t,n){},8925:function(e,t,n){var i=n("c6cd"),r=Function.toString;"function"!=typeof i.inspectSource&&(i.inspectSource=function(e){return r.call(e)}),e.exports=i.inspectSource},8928:function(e,t,n){"use strict";n("c6c8")},"8a59":function(e,t,n){var i=n("74e8");i("Uint8",(function(e){return function(t,n,i){return e(this,t,n,i)}}),!0)},"8a79":function(e,t,n){"use strict";var i=n("23e7"),r=n("06cf").f,s=n("50c4"),o=n("5a34"),a=n("1d80"),c=n("ab13"),l=n("c430"),u="".endsWith,d=Math.min,h=c("endsWith"),f=!l&&!h&&!!function(){var e=r(String.prototype,"endsWith");return e&&!e.writable}();i({target:"String",proto:!0,forced:!f&&!h},{endsWith:function(e){var t=String(a(this));o(e);var n=arguments.length>1?arguments[1]:void 0,i=s(t.length),r=void 0===n?i:d(s(n),i),c=String(e);return u?u.call(t,c,r):t.slice(r-c.length,r)===c}})},"8aa5":function(e,t,n){"use strict";var i=n("6547").charAt;e.exports=function(e,t,n){return t+(n?i(e,t).length:1)}},"8aa7":function(e,t,n){var i=n("da84"),r=n("d039"),s=n("1c7e"),o=n("ebb5").NATIVE_ARRAY_BUFFER_VIEWS,a=i.ArrayBuffer,c=i.Int8Array;e.exports=!o||!r((function(){c(1)}))||!r((function(){new c(-1)}))||!s((function(e){new c,new c(null),new c(1.5),new c(e)}),!0)||r((function(){return 1!==new c(new a(2),1,void 0).length}))},"8b09":function(e,t,n){var i=n("74e8");i("Int16",(function(e){return function(t,n,i){return e(this,t,n,i)}}))},"8b1f":function(e,t,n){"use strict";n("a5e6")},"8b9a":function(e,t,n){var i=n("23e7"),r=n("825a"),s=n("3bbe"),o=n("d2bb");o&&i({target:"Reflect",stat:!0},{setPrototypeOf:function(e,t){r(e),s(t);try{return o(e,t),!0}catch(n){return!1}}})},"8ba4":function(e,t,n){var i=n("23e7"),r=n("5e89");i({target:"Number",stat:!0},{isInteger:r})},"8c49":function(e,t,n){"use strict";n("f693")},"8eb5":function(e,t){var n=Math.expm1,i=Math.exp;e.exports=!n||n(10)>22025.465794806718||n(10)<22025.465794806718||-2e-17!=n(-2e-17)?function(e){return 0==(e=+e)?e:e>-1e-6&&e<1e-6?e+e*e/2:i(e)-1}:n},"8edd":function(e,t,n){var i=n("746f");i("matchAll")},"90d7":function(e,t,n){var i=n("23e7"),r=Math.log,s=Math.LN2;i({target:"Math",stat:!0},{log2:function(e){return r(e)/s}})},"90e3":function(e,t){var n=0,i=Math.random();e.exports=function(e){return"Symbol("+String(void 0===e?"":e)+")_"+(++n+i).toString(36)}},9112:function(e,t,n){var i=n("83ab"),r=n("9bf2"),s=n("5c6c");e.exports=i?function(e,t,n){return r.f(e,t,s(1,n))}:function(e,t,n){return e[t]=n,e}},9129:function(e,t,n){var i=n("23e7");i({target:"Number",stat:!0},{isNaN:function(e){return e!=e}})},9263:function(e,t,n){"use strict";var i=n("ad6d"),r=n("9f7f"),s=RegExp.prototype.exec,o=String.prototype.replace,a=s,c=function(){var e=/a/,t=/b*/g;return s.call(e,"a"),s.call(t,"a"),0!==e.lastIndex||0!==t.lastIndex}(),l=r.UNSUPPORTED_Y||r.BROKEN_CARET,u=void 0!==/()??/.exec("")[1],d=c||u||l;d&&(a=function(e){var t,n,r,a,d=this,h=l&&d.sticky,f=i.call(d),p=d.source,g=0,m=e;return h&&(f=f.replace("y",""),-1===f.indexOf("g")&&(f+="g"),m=String(e).slice(d.lastIndex),d.lastIndex>0&&(!d.multiline||d.multiline&&"\n"!==e[d.lastIndex-1])&&(p="(?: "+p+")",m=" "+m,g++),n=new RegExp("^(?:"+p+")",f)),u&&(n=new RegExp("^"+p+"$(?!\\s)",f)),c&&(t=d.lastIndex),r=s.call(h?n:d,m),h?r?(r.input=r.input.slice(g),r[0]=r[0].slice(g),r.index=d.lastIndex,d.lastIndex+=r[0].length):d.lastIndex=0:c&&r&&(d.lastIndex=d.global?r.index+r[0].length:t),u&&r&&r.length>1&&o.call(r[0],n,(function(){for(a=1;a0}}}),o=s,a=(n("af89"),n("2877")),c=Object(a["a"])(o,i,r,!1,null,"c4dbe0aa",null);t["default"]=c.exports},"944a":function(e,t,n){var i=n("746f");i("toStringTag")},"94ca":function(e,t,n){var i=n("d039"),r=/#|\.prototype\./,s=function(e,t){var n=a[o(e)];return n==l||n!=c&&("function"==typeof t?i(t):!!t)},o=s.normalize=function(e){return String(e).replace(r,".").toLowerCase()},a=s.data={},c=s.NATIVE="N",l=s.POLYFILL="P";e.exports=s},9513:function(e,t,n){},9556:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("div",{staticClass:"item"},[n("div",{staticClass:"itemLabel"},[e._v("Confirm identity:")]),n("div",{staticClass:"itemContent"},[n("vui-button",{attrs:{params:{scan:1},icon:"eject"}},[e.state.idname?n("span",[e._v(e._s(e.state.idname))]):n("span",[e._v("--------")])])],1)]),e.state.auth?n("div",{staticStyle:{"margin-top":"24px",clear:"both"}},[n("b",[e._v("Logged in to:")]),e._v(" "+e._s(e.state.bossname)+" Quantum Entanglement Network "),e.remaining_cooldown<=0?[n("vui-item",{attrs:{label:"Sending to:"}},[n("select",{directives:[{name:"model",rawName:"v-model.lazy",value:e.state.destination,expression:"state.destination",modifiers:{lazy:!0}}],staticClass:"button",on:{change:function(t){var n=Array.prototype.filter.call(t.target.options,(function(e){return e.selected})).map((function(e){var t="_value"in e?e._value:e.value;return t}));e.$set(e.state,"destination",t.target.multiple?n:n[0])}}},e._l(e.state.departiments,(function(t){return n("option",{key:t,domProps:{value:t}},[e._v(e._s(t))])})),0)]),e.state.paper?[n("vui-item",{attrs:{label:"Currently sending:"}},[e._v(e._s(e.state.paper))]),n("vui-button",{attrs:{"push-state":"",params:{send:1}}},[e._v("Send")])]:n("span",[e._v("Please insert paper to send via secure connection.")])]:n("span",[n("b",[e._v("Transmitter arrays realigning. Please stand by. "+e._s(e._f("roundRemaining")(e.remaining_cooldown))+" seconds remaining.")])])],2):e._e(),e.state.paper?n("vui-button",{attrs:{params:{remove:1}}},[e._v("Remove item")]):e._e(),n("h3",[e._v("PDAs to notify:")]),e._l(e.state.alertpdas,(function(t){return n("div",{key:t.ref},[e._v(" "+e._s(t.name)+" "),n("vui-button",{attrs:{params:{unlink:t.ref}}},[e._v("Unlink")])],1)})),e.state.alertpdas.length<=0?n("div",[e._v("No PDAs are linked.")]):e._e(),n("vui-button",{attrs:{params:{linkpda:1}}},[e._v("Add PDA to Notify")])],2)},r=[],s={data:function(){return this.$root.$data},computed:{remaining_cooldown:function(){return this.state.cooldownend-this.wtime}},filters:{roundRemaining:function(e){return Math.round(e/10)}}},o=s,a=n("2877"),c=Object(a["a"])(o,i,r,!1,null,"4b0e320e",null);t["default"]=c.exports},"95d1":function(e,t,n){"use strict";n("4cc0")},"967a":function(e,t,n){"use strict";var i=n("23e7"),r=n("e163"),s=n("d2bb"),o=n("7c73"),a=n("9112"),c=n("5c6c"),l=n("2266"),u=function(e,t){var n=this;if(!(n instanceof u))return new u(e,t);s&&(n=s(new Error(void 0),r(n))),void 0!==t&&a(n,"message",String(t));var i=[];return l(e,i.push,{that:i}),a(n,"errors",i),n};u.prototype=o(Error.prototype,{constructor:c(5,u),message:c(5,""),name:c(5,"AggregateError")}),i({global:!0},{AggregateError:u})},9767:function(e,t,n){"use strict";var i=n("23e7"),r=n("857a"),s=n("af03");i({target:"String",proto:!0,forced:s("fontcolor")},{fontcolor:function(e){return r(this,"font","color",e)}})},9861:function(e,t,n){"use strict";n("e260");var i=n("23e7"),r=n("d066"),s=n("0d3b"),o=n("6eeb"),a=n("e2cc"),c=n("d44e"),l=n("9ed3"),u=n("69f3"),d=n("19aa"),h=n("5135"),f=n("0366"),p=n("f5df"),g=n("825a"),m=n("861d"),v=n("7c73"),b=n("5c6c"),y=n("9a1f"),w=n("35a1"),_=n("b622"),x=r("fetch"),k=r("Headers"),A=_("iterator"),C="URLSearchParams",E=C+"Iterator",S=u.set,F=u.getterFor(C),$=u.getterFor(E),T=/\+/g,L=Array(4),D=function(e){return L[e-1]||(L[e-1]=RegExp("((?:%[\\da-f]{2}){"+e+"})","gi"))},B=function(e){try{return decodeURIComponent(e)}catch(t){return e}},R=function(e){var t=e.replace(T," "),n=4;try{return decodeURIComponent(t)}catch(i){while(n)t=t.replace(D(n--),B);return t}},O=/[!'()~]|%20/g,M={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},j=function(e){return M[e]},I=function(e){return encodeURIComponent(e).replace(O,j)},P=function(e,t){if(t){var n,i,r=t.split("&"),s=0;while(s0?arguments[0]:void 0,u=this,f=[];if(S(u,{type:C,entries:f,updateURL:function(){},updateSearchParams:N}),void 0!==l)if(m(l))if(e=w(l),"function"===typeof e){t=e.call(l),n=t.next;while(!(i=n.call(t)).done){if(r=y(g(i.value)),s=r.next,(o=s.call(r)).done||(a=s.call(r)).done||!s.call(r).done)throw TypeError("Expected sequence with length 2");f.push({key:o.value+"",value:a.value+""})}}else for(c in l)h(l,c)&&f.push({key:c,value:l[c]+""});else P(f,"string"===typeof l?"?"===l.charAt(0)?l.slice(1):l:l+"")},U=V.prototype;a(U,{append:function(e,t){W(arguments.length,2);var n=F(this);n.entries.push({key:e+"",value:t+""}),n.updateURL()},delete:function(e){W(arguments.length,1);var t=F(this),n=t.entries,i=e+"",r=0;while(re.key){r.splice(t,0,e);break}t===n&&r.push(e)}i.updateURL()},forEach:function(e){var t,n=F(this).entries,i=f(e,arguments.length>1?arguments[1]:void 0,3),r=0;while(r1&&(t=arguments[1],m(t)&&(n=t.body,p(n)===C&&(i=t.headers?new k(t.headers):new k,i.has("content-type")||i.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"),t=v(t,{body:b(0,String(n)),headers:b(0,i)}))),r.push(t)),x.apply(this,r)}}),e.exports={URLSearchParams:V,getState:F}},"987b":function(e,t,n){"use strict";n("daa2")},"98c3":function(e,t,n){"use strict";n("db4f")},9911:function(e,t,n){"use strict";var i=n("23e7"),r=n("857a"),s=n("af03");i({target:"String",proto:!0,forced:s("link")},{link:function(e){return r(this,"a","href",e)}})},"99af":function(e,t,n){"use strict";var i=n("23e7"),r=n("d039"),s=n("e8b5"),o=n("861d"),a=n("7b0b"),c=n("50c4"),l=n("8418"),u=n("65f0"),d=n("1dde"),h=n("b622"),f=n("2d00"),p=h("isConcatSpreadable"),g=9007199254740991,m="Maximum allowed index exceeded",v=f>=51||!r((function(){var e=[];return e[p]=!1,e.concat()[0]!==e})),b=d("concat"),y=function(e){if(!o(e))return!1;var t=e[p];return void 0!==t?!!t:s(e)},w=!v||!b;i({target:"Array",proto:!0,forced:w},{concat:function(e){var t,n,i,r,s,o=a(this),d=u(o,0),h=0;for(t=-1,i=arguments.length;tg)throw TypeError(m);for(n=0;n=g)throw TypeError(m);l(d,h++,s)}return d.length=h,d}})},"9a0c":function(e,t,n){var i=n("342f");e.exports=/Version\/10\.\d+(\.\d+)?( Mobile\/\w+)? Safari\//.test(i)},"9a1f":function(e,t,n){var i=n("825a"),r=n("35a1");e.exports=function(e){var t=r(e);if("function"!=typeof t)throw TypeError(String(e)+" is not iterable");return i(t.call(e))}},"9a8c":function(e,t,n){"use strict";var i=n("ebb5"),r=n("145e"),s=i.aTypedArray,o=i.exportTypedArrayMethod;o("copyWithin",(function(e,t){return r.call(s(this),e,t,arguments.length>2?arguments[2]:void 0)}))},"9aa7":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{attrs:{id:"resizehandles"}},[n("div",{staticClass:"resizeHandle__e",on:{mousedown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"left",37,t.key,["Left","ArrowLeft"])||"button"in t&&0!==t.button?null:e.startResizing(1,0,t)}}}),n("div",{staticClass:"resizeHandle__s",on:{mousedown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"left",37,t.key,["Left","ArrowLeft"])||"button"in t&&0!==t.button?null:e.startResizing(0,1,t)}}}),n("div",{staticClass:"resizeHandle__se",on:{mousedown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"left",37,t.key,["Left","ArrowLeft"])||"button"in t&&0!==t.button?null:e.startResizing(1,1,t)}}})])},r=[],s=n("f0e0"),o={methods:{startResizing:function(e,t,n){s["a"].resizeStartHandler(e,t,n)}}},a=o,c=(n("98c3"),n("2877")),l=Object(c["a"])(a,i,r,!1,null,"01c02ad8",null);t["default"]=l.exports},"9acc":function(e,t,n){"use strict";n("1ee6")},"9b7e":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[e.s.service?e.s.registered?e.s.signal?[n("div",[e.s.can_netadmin_mode||e.s.netadmin_mode?n("vui-button",{class:{on:e.s.netadmin_mode},attrs:{params:{toggleadmin:1}}},[e._v("Admin Mode")]):e._e(),e._v(" Ringtone: "),null==e.ringtone?n("vui-button",{on:{click:function(t){e.ringtone=e.s.ringtone}}},[e._v(e._s(e.s.ringtone))]):[n("input",{directives:[{name:"model",rawName:"v-model",value:e.ringtone,expression:"ringtone"}],attrs:{type:"text"},domProps:{value:e.ringtone},on:{keypress:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.set_ringtone(t)},input:function(t){t.target.composing||(e.ringtone=t.target.value)}}}),n("vui-button",{on:{click:e.set_ringtone}},[e._v("Set ringtone")])]],2),n("div",[n("vui-button",{class:{on:null==e.active},on:{click:function(t){e.active=null}}},[e._v("Explore")]),e._l(e.tab_channels,(function(t){return n("vui-button",{key:t,class:{on:e.active==t},on:{click:function(n){e.active=t}}},[e._v(e._s(e.s.channels[t].title))])}))],2),n("hr"),null==e.active?n("view-mcomputer-chat-explore"):n("view-mcomputer-chat-chat",{attrs:{reference:e.active},on:{"on-leave":function(t){e.active=null}}})]:n("h2",{staticClass:"red"},[e._v("No network signal.")]):n("h2",{staticClass:"red"},[e._v("No registered user detected.")]):n("h2",{staticClass:"red"},[e._v("Chat service is not enabled, please enable it from main menu.")])],2)},r=[],s=(n("4de4"),n("b64b"),n("025e")),o={data:function(){return{s:this.$root.$data.state,active:null,ringtone:null}},computed:{tab_channels:function(){var e=this;return Object.keys(this.s.channels).filter((function(t){return e.s.channels[t].can_interact}))}},methods:{set_ringtone:function(){Object(s["b"])({ringtone:this.ringtone}),this.ringtone=null}}},a=o,c=n("2877"),l=Object(c["a"])(a,i,r,!1,null,null,null);t["default"]=l.exports},"9bdd":function(e,t,n){var i=n("825a"),r=n("2a62");e.exports=function(e,t,n,s){try{return s?t(i(n)[0],n[1]):t(n)}catch(o){throw r(e),o}}},"9bf2":function(e,t,n){var i=n("83ab"),r=n("0cfb"),s=n("825a"),o=n("c04e"),a=Object.defineProperty;t.f=i?a:function(e,t,n){if(s(e),t=o(t,!0),s(n),r)try{return a(e,t,n)}catch(i){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},"9e4a":function(e,t,n){var i=n("23e7"),r=n("83ab"),s=n("825a"),o=n("06cf");i({target:"Reflect",stat:!0,sham:!r},{getOwnPropertyDescriptor:function(e,t){return o.f(s(e),t)}})},"9e69":function(e,t,n){var i=n("2b3e"),r=i.Symbol;e.exports=r},"9e80":function(e,t,n){},"9ed3":function(e,t,n){"use strict";var i=n("ae93").IteratorPrototype,r=n("7c73"),s=n("5c6c"),o=n("d44e"),a=n("3f8c"),c=function(){return this};e.exports=function(e,t,n){var l=t+" Iterator";return e.prototype=r(i,{next:s(1,n)}),o(e,l,!1,!0),a[l]=c,e}},"9f7f":function(e,t,n){"use strict";var i=n("d039");function r(e,t){return RegExp(e,t)}t.UNSUPPORTED_Y=i((function(){var e=r("a","y");return e.lastIndex=2,null!=e.exec("abcd")})),t.BROKEN_CARET=i((function(){var e=r("^r","gy");return e.lastIndex=2,null!=e.exec("str")}))},"9f96":function(e,t,n){var i=n("23e7"),r=n("da84"),s=n("b575"),o=n("605d"),a=r.process;i({global:!0,enumerable:!0,noTargetGet:!0},{queueMicrotask:function(e){var t=o&&a.domain;s(t?t.bind(e):e)}})},"9ff9":function(e,t,n){var i=n("23e7"),r=Math.atanh,s=Math.log;i({target:"Math",stat:!0,forced:!(r&&1/r(-0)<0)},{atanh:function(e){return 0==(e=+e)?e:s((1+e)/(1-e))/2}})},a026:function(e,t,n){"use strict";(function(e){ +(function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)})({0:function(e,t,n){e.exports=n("56d7")},"00b4":function(e,t,n){"use strict";n("ac1f");var i=n("23e7"),r=n("861d"),s=function(){var e=!1,t=/[ac]/;return t.exec=function(){return e=!0,/./.exec.apply(this,arguments)},!0===t.test("abc")&&e}(),a=/./.test;i({target:"RegExp",proto:!0,forced:!s},{test:function(e){if("function"!==typeof this.exec)return a.call(this,e);var t=this.exec(e);if(null!==t&&!r(t))throw new Error("RegExp exec method returned something other than an Object or null");return!!t}})},"00ee":function(e,t,n){var i=n("b622"),r=i("toStringTag"),s={};s[r]="z",e.exports="[object z]"===String(s)},"00fd":function(e,t,n){var i=n("9e69"),r=Object.prototype,s=r.hasOwnProperty,a=r.toString,o=i?i.toStringTag:void 0;function c(e){var t=s.call(e,o),n=e[o];try{e[o]=void 0;var i=!0}catch(c){}var r=a.call(e);return i&&(t?e[o]=n:delete e[o]),r}e.exports=c},"019f":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("vui-group",[n("vui-group-item",{attrs:{label:"Hard drive:"}},[n("vui-progress",{staticClass:"vui-progress",class:{good:!e.lowHardDrive,average:e.lowHardDrive},attrs:{max:e.s.disk_size,value:e.s.disk_used}},[e._v(e._s(e.s.disk_used)+" GQ / "+e._s(e.s.disk_size)+" GQ")])],1)],1),e.s.queue_size?[n("h2",[e._v("Queue")]),n("table",{staticClass:"queue-list"},[e._m(0),e._l(e.queue,(function(t){return n("tr",{key:t.filename},[n("td",{staticClass:"name"},[e._v(e._s(t.filename))]),n("td",[n("vui-progress",{staticClass:"vui-progress",attrs:{max:t.size,value:t.progress}},[e._v(e._s(t.progress.toFixed(2))+" GQ / "+e._s(t.size)+" GQ")])],1),n("td",{staticClass:"action"},[n("vui-button",{attrs:{params:{cancel:t.filename}}},[e._v("Cancel")])],1)])}))],2)]:e._e(),n("h2",[e._v("Available Programs")]),n("vui-input-search",{staticStyle:{float:"right"},attrs:{input:e.unrestrictedPrograms,keys:["name","filename","desc"],autofocus:""},model:{value:e.search_results,callback:function(t){e.search_results=t},expression:"search_results"}}),n("vui-group",[e._l(e.search_results,(function(t){return[n("vui-group-item",{key:t.filename,attrs:{label:"Program name:"}},[n("b",[e._v(e._s(t.name))])]),n("vui-group-item",{key:t.filename,attrs:{label:"File name:"}},[e._v(e._s(t.filename)+" ("+e._s(t.size)+" GQ)")]),n("vui-group-item",{key:t.filename,attrs:{label:"Description:"}},[e._v(e._s(t.desc))]),n("vui-group-item",{key:t.filename,attrs:{label:"File controls:"}},[n("vui-button",{class:{danger:!e.canDownload(t)},attrs:{params:{download:t.filename}}},[e._v("Download")])],1),n("td",{key:t.filename,attrs:{colspan:"2"}},[n("hr")])]}))],2)],2)},r=[function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("tr",[n("th",[e._v("Name")]),n("th",[e._v("Progress")]),n("th",[e._v("Action")])])}];n("a4d3"),n("e01a"),n("d28b"),n("4de4"),n("a630"),n("e260"),n("d81d"),n("fb6a"),n("b0c0"),n("4fad"),n("d3b7"),n("25f0"),n("3ca3"),n("ddb0");function s(e,t){return u(e)||l(e,t)||o(e,t)||a()}function a(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function o(e,t){if(e){if("string"===typeof e)return c(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?c(e,t):void 0}}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,i=new Array(t);n.8},queue:function(){var e=this;return Object.entries(this.s.queue).map((function(t){var n=s(t,2),i=n[0],r=n[1],a=e.s.available[i];return a.progress=r,a.filename=i,a}))}},methods:{canDownload:function(e){return!(e.size+this.s.queue_size+this.s.disk_used>this.s.disk_size)}}},h=d,f=(n("8b1f"),n("2877")),p=Object(f["a"])(h,i,r,!1,null,"f45f2cac",null);t["default"]=p.exports},"025e":function(e,t,n){"use strict";n.d(t,"b",(function(){return c})),n.d(t,"c",(function(){return h}));n("99af"),n("c975"),n("a15b"),n("13d5"),n("fb6a"),n("cca6"),n("d3b7"),n("ac1f"),n("25f0"),n("1276");var i=n("c0d6"),r=function(){return Math.random().toString(36).substring(13)};function s(e,t){var n=[];for(var i in t)if(Array.isArray(t[i]))for(var r in t[i])n.push(encodeURIComponent(i)+"="+encodeURIComponent(r));else n.push(encodeURIComponent(i)+"="+encodeURIComponent(t[i]));var s=e+"?"+n.join("&");if(s.indexOf("byond://")>=0)window.location.href=s;else{var a=new XMLHttpRequest;a.open("GET",s,!0),a.send()}}function a(e,t,n){var i="__bycallback"+r();window[i]=n,s(e,Object.assign({},t,{callback:i}))}function o(e){s("",e)}function c(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n={src:i["a"].state.uiref,vueuihrefjson:JSON.stringify(e)};t&&(n["vueuistateupdate"]=i["a"].getStatePushDataString()),o(n)}function l(e,t){return t.split(".").reduce((function(e,t){return e[t]}),e)}var u=36e3,d=600;function h(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=t?i["a"].state.roundstart_hour:0,r=Math.floor((e/u+n)%24),s=Math.floor(e%u/d);return"".concat(("0"+r).slice(-2),":").concat(("0"+s).slice(-2))}t["a"]={sendRaw:s,sendRawWithCallback:a,sendToTopicRaw:o,sendToTopic:c,dotNotationRead:l,worldtime2text:h}},"0261":function(e,t,n){var i=n("23e7"),r=n("d039"),s=n("8eb5"),a=Math.abs,o=Math.exp,c=Math.E,l=r((function(){return-2e-17!=Math.sinh(-2e-17)}));i({target:"Math",stat:!0,forced:l},{sinh:function(e){return a(e=+e)<1?(s(e)-s(-e))/2:(o(e-1)-o(-e-1))*(c/2)}})},"0366":function(e,t,n){var i=n("1c0b");e.exports=function(e,t,n){if(i(e),void 0===t)return e;switch(n){case 0:return function(){return e.call(t)};case 1:return function(n){return e.call(t,n)};case 2:return function(n,i){return e.call(t,n,i)};case 3:return function(n,i,r){return e.call(t,n,i,r)}}return function(){return e.apply(t,arguments)}}},"0481":function(e,t,n){"use strict";var i=n("23e7"),r=n("a2bf"),s=n("7b0b"),a=n("50c4"),o=n("a691"),c=n("65f0");i({target:"Array",proto:!0},{flat:function(){var e=arguments.length?arguments[0]:void 0,t=s(this),n=a(t.length),i=c(t,0);return i.length=r(i,t,t,n,0,void 0===e?1:o(e)),i}})},"04d3":function(e,t,n){"use strict";var i=n("23e7"),r=n("857a"),s=n("af03");i({target:"String",proto:!0,forced:s("blink")},{blink:function(){return r(this,"blink","","")}})},"050e":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("h3",[e._v("Jammer Level:")]),n("div",[n("vui-button",{class:{selected:1==e.active},attrs:{params:{set_active:1}}},[e._v("Block All")])],1),n("div",[n("vui-button",{class:{selected:2==e.active},attrs:{params:{set_active:2}}},[e._v("Block Synthetics")])],1),n("div",[n("vui-button",{class:{selected:-1==e.active},attrs:{params:{set_active:-1}}},[e._v("Block Nothing")])],1)])},r=[],s={data:function(){return this.$root.$data.state}},a=s,o=n("2877"),c=Object(o["a"])(a,i,r,!1,null,null,null);t["default"]=c.exports},"0519":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("div",{staticStyle:{clear:"both",margin:"auto",width:"20em"}},[e._l([5,10,20,30,40],(function(t){return n("vui-button",{key:e.amount-e.button-t,class:{selected:e.state.amount==t},attrs:{icon:"cog",params:{amount:t}}},[e._v(e._s(t))])})),n("br"),n("br"),n("div",{staticStyle:{"text-align":"center"}},[n("vui-input-numeric",{attrs:{width:"2.5em","button-count":2,min:1,max:e.state.beakerMaxVolume||120},on:{input:function(t){return e.s({amount:e.state.amount})}},model:{value:e.state.amount,callback:function(t){e.$set(e.state,"amount",t)},expression:"state.amount"}})],1)],2),n("div",{staticStyle:{clear:"both"}}),n("div",{staticStyle:{float:"left",width:"100%"}},[e.state.chemicals.length?n("div",e._l(e.state.chemicals,(function(t){return n("vui-button",{key:t-e.btn,staticClass:"fixedLeftWide",attrs:{icon:"arrow-alt-circle-down",params:{dispense:t.label}}},[e._v(e._s(t.label)+" ("+e._s(t.amount)+")")])})),1):n("span",{staticClass:"bad"},[e._v("No cartridges installed!")])]),n("div",{staticStyle:{clear:"both"}}),n("vui-button",{class:e.state.isBeakerLoaded&&e.disabled,staticStyle:{float:"right"},attrs:{icon:"eject",params:{ejectBeaker:1}}},[e._v("Eject "+e._s(e.state.glass?"Glass":"Beaker"))]),n("div",{staticClass:"statusDisplay",staticStyle:{clear:"both","min-height":"180px"}},[e.state.isBeakerLoaded?n("div",[n("b",[e._v("Volume: "+e._s(e.state.beakerCurrentVolume)+" / "+e._s(e.state.beakerMaxVolume))]),n("br"),e.state.beakerContents.length?n("div",e._l(e.state.beakerContents,(function(t){return n("span",{key:t-e.amt,staticClass:"highlight"},[e._v(e._s(e.u(t.volume))+" of "+e._s(t.name)),n("br")])})),0):n("span",{staticClass:"bad"},[e._v(e._s(e.state.glass?"Glass":"Beaker")+" is empty.")])]):n("div",[n("span",{staticClass:"average"},[n("i",[e._v("No "+e._s(e.state.glass?"glass":"beaker")+" loaded.")])])])])],1)},r=[],s=n("025e"),a={data:function(){return this.$root.$data},methods:{u:function(e){return"".concat(e,1==e?" unit":" units")},s:function(e){s["a"].sendToTopic(e)}}},o=a,c=(n("16ae"),n("2877")),l=Object(c["a"])(o,i,r,!1,null,"60faaeb6",null);t["default"]=l.exports},"0538":function(e,t,n){"use strict";var i=n("1c0b"),r=n("861d"),s=[].slice,a={},o=function(e,t,n){if(!(t in a)){for(var i=[],r=0;r1&&o(c,"")>-1&&(n=RegExp(this.source,i.replace.call(a(this),"g","")),i.replace.call(e.slice(c.index),n,(function(){for(var e=1;ec.index&&this.lastIndex--}return c},s||(RegExp.prototype.test=function(e){var t=i.exec.call(this,e);return t&&this.global&&!t[0].length&&this.lastIndex>t.index&&this.lastIndex--,!!t}))})),ace.define("ace/lib/es5-shim",["require","exports","module"],(function(e,t,n){function i(){}Function.prototype.bind||(Function.prototype.bind=function(e){var t=this;if("function"!=typeof t)throw new TypeError("Function.prototype.bind called on incompatible "+t);var n=h.call(arguments,1),r=function(){if(this instanceof r){var i=t.apply(this,n.concat(h.call(arguments)));return Object(i)===i?i:this}return t.apply(e,n.concat(h.call(arguments)))};return t.prototype&&(i.prototype=t.prototype,r.prototype=new i,i.prototype=null),r});var r,s,a,o,c,l=Function.prototype.call,u=Array.prototype,d=Object.prototype,h=u.slice,f=l.bind(d.toString),p=l.bind(d.hasOwnProperty);if((c=p(d,"__defineGetter__"))&&(r=l.bind(d.__defineGetter__),s=l.bind(d.__defineSetter__),a=l.bind(d.__lookupGetter__),o=l.bind(d.__lookupSetter__)),2!=[1,2].splice(0).length)if(function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t,n=[];if(n.splice.apply(n,e(20)),n.splice.apply(n,e(26)),t=n.length,n.splice(5,0,"XXX"),n.length,t+1==n.length)return!0}()){var g=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?g.apply(this,[void 0===e?0:e,void 0===t?this.length-e:t].concat(h.call(arguments,2))):[]}}else Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):void 0==e?e=0:e<0&&(e=Math.max(n+e,0)),e+to)for(d=l;d--;)this[c+d]=this[o+d];if(s&&e===u)this.length=u,this.push.apply(this,r);else for(this.length=u+s,d=0;d>>0;if("[object Function]"!=f(e))throw new TypeError;while(++r>>0,r=Array(i),s=arguments[1];if("[object Function]"!=f(e))throw new TypeError(e+" is not a function");for(var a=0;a>>0,s=[],a=arguments[1];if("[object Function]"!=f(e))throw new TypeError(e+" is not a function");for(var o=0;o>>0,r=arguments[1];if("[object Function]"!=f(e))throw new TypeError(e+" is not a function");for(var s=0;s>>0,r=arguments[1];if("[object Function]"!=f(e))throw new TypeError(e+" is not a function");for(var s=0;s>>0;if("[object Function]"!=f(e))throw new TypeError(e+" is not a function");if(!i&&1==arguments.length)throw new TypeError("reduce of empty array with no initial value");var r,s=0;if(arguments.length>=2)r=arguments[1];else do{if(s in n){r=n[s++];break}if(++s>=i)throw new TypeError("reduce of empty array with no initial value")}while(1);for(;s>>0;if("[object Function]"!=f(e))throw new TypeError(e+" is not a function");if(!i&&1==arguments.length)throw new TypeError("reduceRight of empty array with no initial value");var r,s=i-1;if(arguments.length>=2)r=arguments[1];else do{if(s in n){r=n[s--];break}if(--s<0)throw new TypeError("reduceRight of empty array with no initial value")}while(1);do{s in this&&(r=e.call(void 0,r,n[s],s,t))}while(s--);return r}),Array.prototype.indexOf&&-1==[0,1].indexOf(1,2)||(Array.prototype.indexOf=function(e){var t=b&&"[object String]"==f(this)?this.split(""):O(this),n=t.length>>>0;if(!n)return-1;var i=0;for(arguments.length>1&&(i=R(arguments[1])),i=i>=0?i:Math.max(0,n+i);i>>0;if(!n)return-1;var i=n-1;for(arguments.length>1&&(i=Math.min(i,R(arguments[1]))),i=i>=0?i:n-Math.abs(i);i>=0;i--)if(i in t&&e===t[i])return i;return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(e){return e.__proto__||(e.constructor?e.constructor.prototype:d)}),!Object.getOwnPropertyDescriptor){var y="Object.getOwnPropertyDescriptor called on a non-object: ";Object.getOwnPropertyDescriptor=function(e,t){if("object"!=typeof e&&"function"!=typeof e||null===e)throw new TypeError(y+e);if(p(e,t)){var n;if(n={enumerable:!0,configurable:!0},c){var i=e.__proto__;e.__proto__=d;var r=a(e,t),s=o(e,t);if(e.__proto__=i,r||s)return r&&(n.get=r),s&&(n.set=s),n}return n.value=e[t],n}}}(Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(e){return Object.keys(e)}),Object.create)||(m=null===Object.prototype.__proto__?function(){return{__proto__:null}}:function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(e,t){var n;if(null===e)n=m();else{if("object"!=typeof e)throw new TypeError("typeof prototype["+typeof e+"] != 'object'");var i=function(){};i.prototype=e,n=new i,n.__proto__=e}return void 0!==t&&Object.defineProperties(n,t),n});function w(e){try{return Object.defineProperty(e,"sentinel",{}),"sentinel"in e}catch(t){}}if(Object.defineProperty){var _=w({}),x="undefined"==typeof document||w(document.createElement("div"));if(!_||!x)var k=Object.defineProperty}if(!Object.defineProperty||k){var A="Property description must be an object: ",C="Object.defineProperty called on non-object: ",E="getters & setters can not be defined on this javascript engine";Object.defineProperty=function(e,t,n){if("object"!=typeof e&&"function"!=typeof e||null===e)throw new TypeError(C+e);if("object"!=typeof n&&"function"!=typeof n||null===n)throw new TypeError(A+n);if(k)try{return k.call(Object,e,t,n)}catch(l){}if(p(n,"value"))if(c&&(a(e,t)||o(e,t))){var i=e.__proto__;e.__proto__=d,delete e[t],e[t]=n.value,e.__proto__=i}else e[t]=n.value;else{if(!c)throw new TypeError(E);p(n,"get")&&r(e,t,n.get),p(n,"set")&&s(e,t,n.set)}return e}}Object.defineProperties||(Object.defineProperties=function(e,t){for(var n in t)p(t,n)&&Object.defineProperty(e,n,t[n]);return e}),Object.seal||(Object.seal=function(e){return e}),Object.freeze||(Object.freeze=function(e){return e});try{Object.freeze((function(){}))}catch(M){Object.freeze=function(e){return function(t){return"function"==typeof t?t:e(t)}}(Object.freeze)}if(Object.preventExtensions||(Object.preventExtensions=function(e){return e}),Object.isSealed||(Object.isSealed=function(e){return!1}),Object.isFrozen||(Object.isFrozen=function(e){return!1}),Object.isExtensible||(Object.isExtensible=function(e){if(Object(e)===e)throw new TypeError;var t="";while(p(e,t))t+="?";e[t]=!0;var n=p(e,t);return delete e[t],n}),!Object.keys){var S=!0,F=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],$=F.length;for(var T in{toString:null})S=!1;Object.keys=function(e){if("object"!=typeof e&&"function"!=typeof e||null===e)throw new TypeError("Object.keys called on a non-object");var t=[];for(var n in e)p(e,n)&&t.push(n);if(S)for(var i=0,r=$;i0||-1)*Math.floor(Math.abs(e))),e}var O=function(e){if(null==e)throw new TypeError("can't convert "+e+" to object");return Object(e)}})),ace.define("ace/lib/fixoldbrowsers",["require","exports","module","ace/lib/regexp","ace/lib/es5-shim"],(function(e,t,n){"use strict";e("./regexp"),e("./es5-shim")})),ace.define("ace/lib/dom",["require","exports","module"],(function(e,t,n){"use strict";var i="http://www.w3.org/1999/xhtml";t.getDocumentHead=function(e){return e||(e=document),e.head||e.getElementsByTagName("head")[0]||e.documentElement},t.createElement=function(e,t){return document.createElementNS?document.createElementNS(t||i,e):document.createElement(e)},t.hasCssClass=function(e,t){var n=(e.className+"").split(/\s+/g);return-1!==n.indexOf(t)},t.addCssClass=function(e,n){t.hasCssClass(e,n)||(e.className+=" "+n)},t.removeCssClass=function(e,t){var n=e.className.split(/\s+/g);while(1){var i=n.indexOf(t);if(-1==i)break;n.splice(i,1)}e.className=n.join(" ")},t.toggleCssClass=function(e,t){var n=e.className.split(/\s+/g),i=!0;while(1){var r=n.indexOf(t);if(-1==r)break;i=!1,n.splice(r,1)}return i&&n.push(t),e.className=n.join(" "),i},t.setCssClass=function(e,n,i){i?t.addCssClass(e,n):t.removeCssClass(e,n)},t.hasCssString=function(e,t){var n,i=0;if(t=t||document,t.createStyleSheet&&(n=t.styleSheets)){while(i=0?parseFloat((r.match(/(?:MSIE |Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]):parseFloat((r.match(/(?:Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]),t.isOldIE=t.isIE&&t.isIE<9,t.isGecko=t.isMozilla=(window.Controllers||window.controllers)&&"Gecko"===window.navigator.product,t.isOldGecko=t.isGecko&&parseInt((r.match(/rv:(\d+)/)||[])[1],10)<4,t.isOpera=window.opera&&"[object Opera]"==Object.prototype.toString.call(window.opera),t.isWebKit=parseFloat(r.split("WebKit/")[1])||void 0,t.isChrome=parseFloat(r.split(" Chrome/")[1])||void 0,t.isAIR=r.indexOf("AdobeAIR")>=0,t.isIPad=r.indexOf("iPad")>=0,t.isChromeOS=r.indexOf(" CrOS ")>=0,t.isIOS=/iPad|iPhone|iPod/.test(r)&&!window.MSStream,t.isIOS&&(t.isMac=!0)}})),ace.define("ace/lib/event",["require","exports","module","ace/lib/keys","ace/lib/useragent"],(function(e,t,n){"use strict";var i=e("./keys"),r=e("./useragent"),s=null,a=0;t.addListener=function(e,t,n){if(e.addEventListener)return e.addEventListener(t,n,!1);if(e.attachEvent){var i=function(){n.call(e,window.event)};n._wrapper=i,e.attachEvent("on"+t,i)}},t.removeListener=function(e,t,n){if(e.removeEventListener)return e.removeEventListener(t,n,!1);e.detachEvent&&e.detachEvent("on"+t,n._wrapper||n)},t.stopEvent=function(e){return t.stopPropagation(e),t.preventDefault(e),!1},t.stopPropagation=function(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0},t.preventDefault=function(e){e.preventDefault?e.preventDefault():e.returnValue=!1},t.getButton=function(e){return"dblclick"==e.type?0:"contextmenu"==e.type||r.isMac&&e.ctrlKey&&!e.altKey&&!e.shiftKey?2:e.preventDefault?e.button:{1:0,2:2,4:1}[e.button]},t.capture=function(e,n,i){function r(e){n&&n(e),i&&i(e),t.removeListener(document,"mousemove",n,!0),t.removeListener(document,"mouseup",r,!0),t.removeListener(document,"dragstart",r,!0)}return t.addListener(document,"mousemove",n,!0),t.addListener(document,"mouseup",r,!0),t.addListener(document,"dragstart",r,!0),r},t.addTouchMoveListener=function(e,n){var i,r;t.addListener(e,"touchstart",(function(e){var t=e.touches,n=t[0];i=n.clientX,r=n.clientY})),t.addListener(e,"touchmove",(function(e){var t=e.touches;if(!(t.length>1)){var s=t[0];e.wheelX=i-s.clientX,e.wheelY=r-s.clientY,i=s.clientX,r=s.clientY,n(e)}}))},t.addMouseWheelListener=function(e,n){"onmousewheel"in e?t.addListener(e,"mousewheel",(function(e){var t=8;void 0!==e.wheelDeltaX?(e.wheelX=-e.wheelDeltaX/t,e.wheelY=-e.wheelDeltaY/t):(e.wheelX=0,e.wheelY=-e.wheelDelta/t),n(e)})):"onwheel"in e?t.addListener(e,"wheel",(function(e){var t=.35;switch(e.deltaMode){case e.DOM_DELTA_PIXEL:e.wheelX=e.deltaX*t||0,e.wheelY=e.deltaY*t||0;break;case e.DOM_DELTA_LINE:case e.DOM_DELTA_PAGE:e.wheelX=5*(e.deltaX||0),e.wheelY=5*(e.deltaY||0);break}n(e)})):t.addListener(e,"DOMMouseScroll",(function(e){e.axis&&e.axis==e.HORIZONTAL_AXIS?(e.wheelX=5*(e.detail||0),e.wheelY=0):(e.wheelX=0,e.wheelY=5*(e.detail||0)),n(e)}))},t.addMultiMouseDownListener=function(e,n,i,s){var a,o,c,l=0,u={2:"dblclick",3:"tripleclick",4:"quadclick"};function d(e){if(0!==t.getButton(e)?l=0:e.detail>1?(l++,l>4&&(l=1)):l=1,r.isIE){var d=Math.abs(e.clientX-a)>5||Math.abs(e.clientY-o)>5;c&&!d||(l=1),c&&clearTimeout(c),c=setTimeout((function(){c=null}),n[l-1]||600),1==l&&(a=e.clientX,o=e.clientY)}if(e._clicks=l,i[s]("mousedown",e),l>4)l=0;else if(l>1)return i[s](u[l],e)}function h(e){l=2,c&&clearTimeout(c),c=setTimeout((function(){c=null}),n[l-1]||600),i[s]("mousedown",e),i[s](u[l],e)}Array.isArray(e)||(e=[e]),e.forEach((function(e){t.addListener(e,"mousedown",d),r.isOldIE&&t.addListener(e,"dblclick",h)}))};var o=r.isMac&&r.isOpera&&!("KeyboardEvent"in window)?function(e){return 0|(e.metaKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.ctrlKey?8:0)}:function(e){return 0|(e.ctrlKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.metaKey?8:0)};function c(e,t,n){var c=o(t);if(!r.isMac&&s){if(t.getModifierState&&(t.getModifierState("OS")||t.getModifierState("Win"))&&(c|=8),s.altGr){if(3==(3&c))return;s.altGr=0}if(18===n||17===n){var l="location"in t?t.location:t.keyLocation;if(17===n&&1===l)1==s[n]&&(a=t.timeStamp);else if(18===n&&3===c&&2===l){var u=t.timeStamp-a;u<50&&(s.altGr=!0)}}}if(n in i.MODIFIER_KEYS&&(n=-1),8&c&&n>=91&&n<=93&&(n=-1),!c&&13===n){l="location"in t?t.location:t.keyLocation;if(3===l&&(e(t,c,-n),t.defaultPrevented))return}if(r.isChromeOS&&8&c){if(e(t,c,n),t.defaultPrevented)return;c&=-9}return!!(c||n in i.FUNCTION_KEYS||n in i.PRINTABLE_KEYS)&&e(t,c,n)}function l(){s=Object.create(null)}if(t.getModifierString=function(e){return i.KEY_MODS[o(e)]},t.addCommandKeyListener=function(e,n){var i=t.addListener;if(r.isOldGecko||r.isOpera&&!("KeyboardEvent"in window)){var a=null;i(e,"keydown",(function(e){a=e.keyCode})),i(e,"keypress",(function(e){return c(n,e,a)}))}else{var o=null;i(e,"keydown",(function(e){s[e.keyCode]=(s[e.keyCode]||0)+1;var t=c(n,e,e.keyCode);return o=e.defaultPrevented,t})),i(e,"keypress",(function(e){o&&(e.ctrlKey||e.altKey||e.shiftKey||e.metaKey)&&(t.stopEvent(e),o=null)})),i(e,"keyup",(function(e){s[e.keyCode]=null})),s||(l(),i(window,"focus",l))}},"object"==typeof window&&window.postMessage&&!r.isOldIE){var u=1;t.nextTick=function(e,n){n=n||window;var i="zero-timeout-message-"+u;t.addListener(n,"message",(function r(s){s.data==i&&(t.stopPropagation(s),t.removeListener(n,"message",r),e())})),n.postMessage(i,"*")}}t.nextFrame="object"==typeof window&&(window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame),t.nextFrame?t.nextFrame=t.nextFrame.bind(window):t.nextFrame=function(e){setTimeout(e,17)}})),ace.define("ace/lib/lang",["require","exports","module"],(function(e,t,n){"use strict";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split("").reverse().join("")},t.stringRepeat=function(e,t){var n="";while(t>0)1&t&&(n+=e),(t>>=1)&&(e+=e);return n};var i=/^\s\s*/,r=/\s\s*$/;t.stringTrimLeft=function(e){return e.replace(i,"")},t.stringTrimRight=function(e){return e.replace(r,"")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){for(var t=[],n=0,i=e.length;nd.length?e=e.substr(9):e.substr(0,4)==d.substr(0,4)?e=e.substr(4,e.length-d.length+1):e.charAt(e.length-1)==d.charAt(0)&&(e=e.slice(0,-1)),e==d.charAt(0)||e.charAt(e.length-1)==d.charAt(0)&&(e=e.slice(0,-1)),e&&t.onTextInput(e)),h&&(h=!1),E&&(E=!1))},F=function(e){if(!g){var t=n.value;S(t),x()}},$=function(e,t,n){var i=e.clipboardData||window.clipboardData;if(i&&!l){var r=u||n?"Text":"text/plain";try{return t?!1!==i.setData(r,t):i.getData(r)}catch(e){if(!n)return $(e,t,!0)}}},T=function(e,s){var a=t.getCopyText();if(!a)return i.preventDefault(e);$(e,a)?(r.isIOS&&(f=s,n.value="\n aa"+a+"a a\n",n.setSelectionRange(4,4+a.length),h={value:a}),s?t.onCut():t.onCopy(),r.isIOS||i.preventDefault(e)):(h=!0,n.value=a,n.select(),setTimeout((function(){h=!1,x(),_(),s?t.onCut():t.onCopy()})))},L=function(e){T(e,!0)},D=function(e){T(e,!1)},B=function(e){var s=$(e);"string"==typeof s?(s&&t.onPaste(s,e),r.isIE&&setTimeout(_),i.preventDefault(e)):(n.value="",p=!0)};i.addCommandKeyListener(n,t.onCommandKey.bind(t)),i.addListener(n,"select",A),i.addListener(n,"input",F),i.addListener(n,"cut",L),i.addListener(n,"copy",D),i.addListener(n,"paste",B);var R,O=function(e){g||!t.onCompositionStart||t.$readOnly||(g={},g.canUndo=t.session.$undoManager,t.onCompositionStart(),setTimeout(M,0),t.on("mousedown",j),g.canUndo&&!t.selection.isEmpty()&&(t.insert(""),t.session.markUndoGroup(),t.selection.clearSelection()),t.session.markUndoGroup())},M=function(){if(g&&t.onCompositionUpdate&&!t.$readOnly){var e=n.value.replace(/\x01/g,"");if(g.lastValue!==e&&(t.onCompositionUpdate(e),g.lastValue&&t.undo(),g.canUndo&&(g.lastValue=e),g.lastValue)){var i=t.selection.getRange();t.insert(g.lastValue),t.session.markUndoGroup(),g.range=t.selection.getRange(),t.selection.setRange(i),t.selection.clearSelection()}}},j=function(e){if(t.onCompositionEnd&&!t.$readOnly){var i=g;g=!1;var s=setTimeout((function(){s=null;var e=n.value.replace(/\x01/g,"");g||(e==i.lastValue?x():!i.lastValue&&e&&(x(),S(e)))}));C=function(e){return s&&clearTimeout(s),e=e.replace(/\x01/g,""),e==i.lastValue?"":(i.lastValue&&s&&t.undo(),e)},t.onCompositionEnd(),t.removeListener("mousedown",j),"compositionend"==e.type&&i.range&&t.selection.setRange(i.range);var a=!!r.isChrome&&r.isChrome>=53||!!r.isWebKit&&r.isWebKit>=603;a&&F()}},I=a.delayedCall(M,50);function P(){clearTimeout(R),R=setTimeout((function(){m&&(n.style.cssText=m,m=""),null==t.renderer.$keepTextAreaAtCursor&&(t.renderer.$keepTextAreaAtCursor=!0,t.renderer.$moveTextAreaToCursor())}),0)}i.addListener(n,"compositionstart",O),r.isGecko?i.addListener(n,"text",(function(){I.schedule()})):(i.addListener(n,"keyup",(function(){I.schedule()})),i.addListener(n,"keydown",(function(){I.schedule()}))),i.addListener(n,"compositionend",j),this.getElement=function(){return n},this.setReadOnly=function(e){n.readOnly=e},this.onContextMenu=function(e){E=!0,_(t.selection.isEmpty()),t._emit("nativecontextmenu",{target:t,domEvent:e}),this.moveToMouse(e,!0)},this.moveToMouse=function(e,a){m||(m=n.style.cssText),n.style.cssText=(a?"z-index:100000;":"")+"height:"+n.style.height+";"+(r.isIE?"opacity:0.1;":"");var o=t.container.getBoundingClientRect(),c=s.computedStyle(t.container),l=o.top+(parseInt(c.borderTopWidth)||0),u=o.left+(parseInt(o.borderLeftWidth)||0),d=o.bottom-l-n.clientHeight-2,h=function(e){n.style.left=e.clientX-u-2+"px",n.style.top=Math.min(e.clientY-l-2,d)+"px"};h(e),"mousedown"==e.type&&(t.renderer.$keepTextAreaAtCursor&&(t.renderer.$keepTextAreaAtCursor=null),clearTimeout(R),r.isWin&&i.capture(t.container,h,P))},this.onContextMenuClose=P;var N=function(e){t.textInput.onContextMenu(e),P()};if(i.addListener(n,"mouseup",N),i.addListener(n,"mousedown",(function(e){e.preventDefault(),P()})),i.addListener(t.renderer.scroller,"contextmenu",N),i.addListener(n,"contextmenu",N),r.isIOS){var W=null,H=!1;e.addEventListener("keydown",(function(e){W&&clearTimeout(W),H=!0})),e.addEventListener("keyup",(function(e){W=setTimeout((function(){H=!1}),100)}));var V=function(e){if(document.activeElement===n&&!H){if(f)return setTimeout((function(){f=!1}),100);var i=n.selectionStart,r=n.selectionEnd;if(n.setSelectionRange(4,5),i==r)switch(i){case 0:t.onCommandKey(null,0,o.up);break;case 1:t.onCommandKey(null,0,o.home);break;case 2:t.onCommandKey(null,c.option,o.left);break;case 4:t.onCommandKey(null,0,o.left);break;case 5:t.onCommandKey(null,0,o.right);break;case 7:t.onCommandKey(null,c.option,o.right);break;case 8:t.onCommandKey(null,0,o.end);break;case 9:t.onCommandKey(null,0,o.down);break}else{switch(r){case 6:t.onCommandKey(null,c.shift,o.right);break;case 7:t.onCommandKey(null,c.shift|c.option,o.right);break;case 8:t.onCommandKey(null,c.shift,o.end);break;case 9:t.onCommandKey(null,c.shift,o.down);break}switch(i){case 0:t.onCommandKey(null,c.shift,o.up);break;case 1:t.onCommandKey(null,c.shift,o.home);break;case 2:t.onCommandKey(null,c.shift|c.option,o.left);break;case 3:t.onCommandKey(null,c.shift,o.left);break}}}};document.addEventListener("selectionchange",V),t.on("destroy",(function(){document.removeEventListener("selectionchange",V)}))}};t.TextInput=d})),ace.define("ace/keyboard/textinput",["require","exports","module","ace/lib/event","ace/lib/useragent","ace/lib/dom","ace/lib/lang","ace/keyboard/textinput_ios"],(function(e,t,n){"use strict";var i=e("../lib/event"),r=e("../lib/useragent"),s=e("../lib/dom"),a=e("../lib/lang"),o=r.isChrome<18,c=r.isIE,l=e("./textinput_ios").TextInput,u=function(e,t){if(r.isIOS)return l.call(this,e,t);var n=s.createElement("textarea");n.className="ace_text-input",n.setAttribute("wrap","off"),n.setAttribute("autocorrect","off"),n.setAttribute("autocapitalize","off"),n.setAttribute("spellcheck",!1),n.style.opacity="0",e.insertBefore(n,e.firstChild);var u="\u2028\u2028",d=!1,h=!1,f=!1,p="",g=!0;try{var m=document.activeElement===n}catch(P){}i.addListener(n,"blur",(function(e){t.onBlur(e),m=!1})),i.addListener(n,"focus",(function(e){m=!0,t.onFocus(e),y()})),this.focus=function(){if(p)return n.focus();var e=n.style.top;n.style.position="fixed",n.style.top="0px",n.focus(),setTimeout((function(){n.style.position="","0px"==n.style.top&&(n.style.top=e)}),0)},this.blur=function(){n.blur()},this.isFocused=function(){return m};var v=a.delayedCall((function(){m&&y(g)})),b=a.delayedCall((function(){f||(n.value=u,m&&y())}));function y(e){if(!f){if(f=!0,k)var t=0,i=e?0:n.value.length-1;else t=e?2:1,i=2;try{n.setSelectionRange(t,i)}catch(P){}f=!1}}function w(){f||(n.value=u,r.isWebKit&&b.schedule())}r.isWebKit||t.addEventListener("changeSelection",(function(){t.selection.isEmpty()!=g&&(g=!g,v.schedule())})),w(),m&&t.onFocus();var _=function(e){return 0===e.selectionStart&&e.selectionEnd===e.value.length},x=function(e){d?d=!1:_(n)?(t.selectAll(),y()):k&&y(t.selection.isEmpty())},k=null;this.setInputHandler=function(e){k=e},this.getInputHandler=function(){return k};var A=!1,C=function(e){k&&(e=k(e),k=null),h?(y(),e&&t.onPaste(e),h=!1):e==u.charAt(0)?A?t.execCommand("del",{source:"ace"}):t.execCommand("backspace",{source:"ace"}):(e.substring(0,2)==u?e=e.substr(2):e.charAt(0)==u.charAt(0)?e=e.substr(1):e.charAt(e.length-1)==u.charAt(0)&&(e=e.slice(0,-1)),e.charAt(e.length-1)==u.charAt(0)&&(e=e.slice(0,-1)),e&&t.onTextInput(e)),A&&(A=!1)},E=function(e){if(!f){var t=n.value;C(t),w()}},S=function(e,t,n){var i=e.clipboardData||window.clipboardData;if(i&&!o){var r=c||n?"Text":"text/plain";try{return t?!1!==i.setData(r,t):i.getData(r)}catch(e){if(!n)return S(e,t,!0)}}},F=function(e,r){var s=t.getCopyText();if(!s)return i.preventDefault(e);S(e,s)?(r?t.onCut():t.onCopy(),i.preventDefault(e)):(d=!0,n.value=s,n.select(),setTimeout((function(){d=!1,w(),y(),r?t.onCut():t.onCopy()})))},$=function(e){F(e,!0)},T=function(e){F(e,!1)},L=function(e){var s=S(e);"string"==typeof s?(s&&t.onPaste(s,e),r.isIE&&setTimeout(y),i.preventDefault(e)):(n.value="",h=!0)};i.addCommandKeyListener(n,t.onCommandKey.bind(t)),i.addListener(n,"select",x),i.addListener(n,"input",E),i.addListener(n,"cut",$),i.addListener(n,"copy",T),i.addListener(n,"paste",L),"oncut"in n&&"oncopy"in n&&"onpaste"in n||i.addListener(e,"keydown",(function(e){if((!r.isMac||e.metaKey)&&e.ctrlKey)switch(e.keyCode){case 67:T(e);break;case 86:L(e);break;case 88:$(e);break}}));var D,B=function(e){f||!t.onCompositionStart||t.$readOnly||(f={},f.canUndo=t.session.$undoManager,t.onCompositionStart(),setTimeout(R,0),t.on("mousedown",O),f.canUndo&&!t.selection.isEmpty()&&(t.insert(""),t.session.markUndoGroup(),t.selection.clearSelection()),t.session.markUndoGroup())},R=function(){if(f&&t.onCompositionUpdate&&!t.$readOnly){var e=n.value.replace(/\u2028/g,"");if(f.lastValue!==e&&(t.onCompositionUpdate(e),f.lastValue&&t.undo(),f.canUndo&&(f.lastValue=e),f.lastValue)){var i=t.selection.getRange();t.insert(f.lastValue),t.session.markUndoGroup(),f.range=t.selection.getRange(),t.selection.setRange(i),t.selection.clearSelection()}}},O=function(e){if(t.onCompositionEnd&&!t.$readOnly){var i=f;f=!1;var s=setTimeout((function(){s=null;var e=n.value.replace(/\u2028/g,"");f||(e==i.lastValue?w():!i.lastValue&&e&&(w(),C(e)))}));k=function(e){return s&&clearTimeout(s),e=e.replace(/\u2028/g,""),e==i.lastValue?"":(i.lastValue&&s&&t.undo(),e)},t.onCompositionEnd(),t.removeListener("mousedown",O),"compositionend"==e.type&&i.range&&t.selection.setRange(i.range);var a=!!r.isChrome&&r.isChrome>=53||!!r.isWebKit&&r.isWebKit>=603;a&&E()}},M=a.delayedCall(R,50);function j(){clearTimeout(D),D=setTimeout((function(){p&&(n.style.cssText=p,p=""),null==t.renderer.$keepTextAreaAtCursor&&(t.renderer.$keepTextAreaAtCursor=!0,t.renderer.$moveTextAreaToCursor())}),0)}i.addListener(n,"compositionstart",B),r.isGecko?i.addListener(n,"text",(function(){M.schedule()})):(i.addListener(n,"keyup",(function(){M.schedule()})),i.addListener(n,"keydown",(function(){M.schedule()}))),i.addListener(n,"compositionend",O),this.getElement=function(){return n},this.setReadOnly=function(e){n.readOnly=e},this.onContextMenu=function(e){A=!0,y(t.selection.isEmpty()),t._emit("nativecontextmenu",{target:t,domEvent:e}),this.moveToMouse(e,!0)},this.moveToMouse=function(e,a){p||(p=n.style.cssText),n.style.cssText=(a?"z-index:100000;":"")+"height:"+n.style.height+";"+(r.isIE?"opacity:0.1;":"");var o=t.container.getBoundingClientRect(),c=s.computedStyle(t.container),l=o.top+(parseInt(c.borderTopWidth)||0),u=o.left+(parseInt(o.borderLeftWidth)||0),d=o.bottom-l-n.clientHeight-2,h=function(e){n.style.left=e.clientX-u-2+"px",n.style.top=Math.min(e.clientY-l-2,d)+"px"};h(e),"mousedown"==e.type&&(t.renderer.$keepTextAreaAtCursor&&(t.renderer.$keepTextAreaAtCursor=null),clearTimeout(D),r.isWin&&i.capture(t.container,h,j))},this.onContextMenuClose=j;var I=function(e){t.textInput.onContextMenu(e),j()};i.addListener(n,"mouseup",I),i.addListener(n,"mousedown",(function(e){e.preventDefault(),j()})),i.addListener(t.renderer.scroller,"contextmenu",I),i.addListener(n,"contextmenu",I)};t.TextInput=u})),ace.define("ace/mouse/default_handlers",["require","exports","module","ace/lib/dom","ace/lib/event","ace/lib/useragent"],(function(e,t,n){"use strict";e("../lib/dom"),e("../lib/event");var i=e("../lib/useragent"),r=0,s=250;function a(e){e.$clickSelection=null;var t=e.editor;t.setDefaultHandler("mousedown",this.onMouseDown.bind(e)),t.setDefaultHandler("dblclick",this.onDoubleClick.bind(e)),t.setDefaultHandler("tripleclick",this.onTripleClick.bind(e)),t.setDefaultHandler("quadclick",this.onQuadClick.bind(e)),t.setDefaultHandler("mousewheel",this.onMouseWheel.bind(e)),t.setDefaultHandler("touchmove",this.onTouchMove.bind(e));var n=["select","startSelect","selectEnd","selectAllEnd","selectByWordsEnd","selectByLinesEnd","dragWait","dragWaitEnd","focusWait"];n.forEach((function(t){e[t]=this[t]}),this),e.selectByLines=this.extendSelectionBy.bind(e,"getLineRange"),e.selectByWords=this.extendSelectionBy.bind(e,"getWordRange")}function o(e,t,n,i){return Math.sqrt(Math.pow(n-e,2)+Math.pow(i-t,2))}function c(e,t){if(e.start.row==e.end.row)var n=2*t.column-e.start.column-e.end.column;else if(e.start.row!=e.end.row-1||e.start.column||e.end.column)n=2*t.row-e.start.row-e.end.row;else var n=t.column-4;return n<0?{cursor:e.start,anchor:e.end}:{cursor:e.end,anchor:e.start}}(function(){this.onMouseDown=function(e){var t=e.inSelection(),n=e.getDocumentPosition();this.mousedownEvent=e;var r=this.editor,s=e.getButton();if(0!==s){var a=r.getSelectionRange(),o=a.isEmpty();return r.$blockScrolling++,(o||1==s)&&r.selection.moveToPosition(n),r.$blockScrolling--,void(2==s&&(r.textInput.onContextMenu(e.domEvent),i.isMozilla||e.preventDefault()))}return this.mousedownEvent.time=Date.now(),!t||r.isFocused()||(r.focus(),!this.$focusTimout||this.$clickSelection||r.inMultiSelectMode)?(this.captureMouse(e),this.startSelect(n,e.domEvent._clicks>1),e.preventDefault()):(this.setState("focusWait"),void this.captureMouse(e))},this.startSelect=function(e,t){e=e||this.editor.renderer.screenToTextCoordinates(this.x,this.y);var n=this.editor;n.$blockScrolling++,this.mousedownEvent.getShiftKey()?n.selection.selectToPosition(e):t||n.selection.moveToPosition(e),t||this.select(),n.renderer.scroller.setCapture&&n.renderer.scroller.setCapture(),n.setStyle("ace_selecting"),this.setState("select"),n.$blockScrolling--},this.select=function(){var e,t=this.editor,n=t.renderer.screenToTextCoordinates(this.x,this.y);if(t.$blockScrolling++,this.$clickSelection){var i=this.$clickSelection.comparePoint(n);if(-1==i)e=this.$clickSelection.end;else if(1==i)e=this.$clickSelection.start;else{var r=c(this.$clickSelection,n);n=r.cursor,e=r.anchor}t.selection.setSelectionAnchor(e.row,e.column)}t.selection.selectToPosition(n),t.$blockScrolling--,t.renderer.scrollCursorIntoView()},this.extendSelectionBy=function(e){var t,n=this.editor,i=n.renderer.screenToTextCoordinates(this.x,this.y),r=n.selection[e](i.row,i.column);if(n.$blockScrolling++,this.$clickSelection){var s=this.$clickSelection.comparePoint(r.start),a=this.$clickSelection.comparePoint(r.end);if(-1==s&&a<=0)t=this.$clickSelection.end,r.end.row==i.row&&r.end.column==i.column||(i=r.start);else if(1==a&&s>=0)t=this.$clickSelection.start,r.start.row==i.row&&r.start.column==i.column||(i=r.end);else if(-1==s&&1==a)i=r.end,t=r.start;else{var o=c(this.$clickSelection,i);i=o.cursor,t=o.anchor}n.selection.setSelectionAnchor(t.row,t.column)}n.selection.selectToPosition(i),n.$blockScrolling--,n.renderer.scrollCursorIntoView()},this.selectEnd=this.selectAllEnd=this.selectByWordsEnd=this.selectByLinesEnd=function(){this.$clickSelection=null,this.editor.unsetStyle("ace_selecting"),this.editor.renderer.scroller.releaseCapture&&this.editor.renderer.scroller.releaseCapture()},this.focusWait=function(){var e=o(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y),t=Date.now();(e>r||t-this.mousedownEvent.time>this.$focusTimout)&&this.startSelect(this.mousedownEvent.getDocumentPosition())},this.onDoubleClick=function(e){var t=e.getDocumentPosition(),n=this.editor,i=n.session,r=i.getBracketRange(t);r?(r.isEmpty()&&(r.start.column--,r.end.column++),this.setState("select")):(r=n.selection.getWordRange(t.row,t.column),this.setState("selectByWords")),this.$clickSelection=r,this.select()},this.onTripleClick=function(e){var t=e.getDocumentPosition(),n=this.editor;this.setState("selectByLines");var i=n.getSelectionRange();i.isMultiLine()&&i.contains(t.row,t.column)?(this.$clickSelection=n.selection.getLineRange(i.start.row),this.$clickSelection.end=n.selection.getLineRange(i.end.row).end):this.$clickSelection=n.selection.getLineRange(t.row),this.select()},this.onQuadClick=function(e){var t=this.editor;t.selectAll(),this.$clickSelection=t.getSelectionRange(),this.setState("selectAll")},this.onMouseWheel=function(e){if(!e.getAccelKey()){e.getShiftKey()&&e.wheelY&&!e.wheelX&&(e.wheelX=e.wheelY,e.wheelY=0);var t=this.editor;this.$lastScroll||(this.$lastScroll={t:0,vx:0,vy:0,allowed:0});var n=this.$lastScroll,i=e.domEvent.timeStamp,r=i-n.t,a=e.wheelX/r,o=e.wheelY/r;r=1&&t.renderer.isScrollableBy(e.wheelX*e.speed,0)&&(l=!0),c<=1&&t.renderer.isScrollableBy(0,e.wheelY*e.speed)&&(l=!0),l)n.allowed=i;else if(i-n.alloweda.session.documentToScreenRow(u.row,u.column))return d()}if(r!=i)if(r=i.text.join("
"),l.setHtml(r),l.show(),a._signal("showGutterTooltip",l),a.on("mousewheel",d),e.$tooltipFollowsMouse)h(n);else{var f=n.domEvent.target,p=f.getBoundingClientRect(),g=l.getElement().style;g.left=p.right+"px",g.top=p.bottom+"px"}}function d(){t&&(t=clearTimeout(t)),r&&(l.hide(),r=null,a._signal("hideGutterTooltip",l),a.removeEventListener("mousewheel",d))}function h(e){l.setPosition(e.x,e.y)}e.editor.setDefaultHandler("guttermousedown",(function(t){if(a.isFocused()&&0==t.getButton()){var n=o.getRegion(t);if("foldWidgets"!=n){var i=t.getDocumentPosition().row,r=a.session.selection;if(t.getShiftKey())r.selectTo(i,0);else{if(2==t.domEvent.detail)return a.selectAll(),t.preventDefault();e.$clickSelection=a.selection.getLineRange(i)}return e.setState("selectByLines"),e.captureMouse(t),t.preventDefault()}}})),e.editor.setDefaultHandler("guttermousemove",(function(s){var a=s.domEvent.target||s.domEvent.srcElement;if(i.hasCssClass(a,"ace_fold-widget"))return d();r&&e.$tooltipFollowsMouse&&h(s),n=s,t||(t=setTimeout((function(){t=null,n&&!e.isMousePressed?u():d()}),50))})),s.addListener(a.renderer.$gutter,"mouseout",(function(e){n=null,r&&!t&&(t=setTimeout((function(){t=null,d()}),50))})),a.on("changeSession",d)}function c(e){a.call(this,e)}r.inherits(c,a),function(){this.setPosition=function(e,t){var n=window.innerWidth||document.documentElement.clientWidth,i=window.innerHeight||document.documentElement.clientHeight,r=this.getWidth(),s=this.getHeight();e+=15,t+=15,e+r>n&&(e-=e+r-n),t+s>i&&(t-=20+s),a.prototype.setPosition.call(this,e,t)}}.call(c.prototype),t.GutterHandler=o})),ace.define("ace/mouse/mouse_event",["require","exports","module","ace/lib/event","ace/lib/useragent"],(function(e,t,n){"use strict";var i=e("../lib/event"),r=e("../lib/useragent"),s=t.MouseEvent=function(e,t){this.domEvent=e,this.editor=t,this.x=this.clientX=e.clientX,this.y=this.clientY=e.clientY,this.$pos=null,this.$inSelection=null,this.propagationStopped=!1,this.defaultPrevented=!1};(function(){this.stopPropagation=function(){i.stopPropagation(this.domEvent),this.propagationStopped=!0},this.preventDefault=function(){i.preventDefault(this.domEvent),this.defaultPrevented=!0},this.stop=function(){this.stopPropagation(),this.preventDefault()},this.getDocumentPosition=function(){return this.$pos||(this.$pos=this.editor.renderer.screenToTextCoordinates(this.clientX,this.clientY)),this.$pos},this.inSelection=function(){if(null!==this.$inSelection)return this.$inSelection;var e=this.editor,t=e.getSelectionRange();if(t.isEmpty())this.$inSelection=!1;else{var n=this.getDocumentPosition();this.$inSelection=t.contains(n.row,n.column)}return this.$inSelection},this.getButton=function(){return i.getButton(this.domEvent)},this.getShiftKey=function(){return this.domEvent.shiftKey},this.getAccelKey=r.isMac?function(){return this.domEvent.metaKey}:function(){return this.domEvent.ctrlKey}}).call(s.prototype)})),ace.define("ace/mouse/dragdrop_handler",["require","exports","module","ace/lib/dom","ace/lib/event","ace/lib/useragent"],(function(e,t,n){"use strict";var i=e("../lib/dom"),r=e("../lib/event"),s=e("../lib/useragent"),a=200,o=200,c=5;function l(e){var t=e.editor,n=i.createElement("img");n.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",s.isOpera&&(n.style.cssText="width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;");var l=["dragWait","dragWaitEnd","startDrag","dragReadyEnd","onMouseDrag"];l.forEach((function(t){e[t]=this[t]}),this),t.addEventListener("mousedown",this.onMouseDown.bind(e));var d,h,f,p,g,m,v,b,y,w,_,x=t.container,k=0;function A(e,n){var i=Date.now(),r=!n||e.row!=n.row,s=!n||e.column!=n.column;if(!w||r||s)t.$blockScrolling+=1,t.moveCursorToPosition(e),t.$blockScrolling-=1,w=i,_={x:h,y:f};else{var a=u(_.x,_.y,h,f);a>c?w=null:i-w>=o&&(t.renderer.scrollCursorIntoView(),w=null)}}function C(e,n){var i=Date.now(),r=t.renderer.layerConfig.lineHeight,s=t.renderer.layerConfig.characterWidth,o=t.renderer.scroller.getBoundingClientRect(),c={x:{left:h-o.left,right:o.right-h},y:{top:f-o.top,bottom:o.bottom-f}},l=Math.min(c.x.left,c.x.right),u=Math.min(c.y.top,c.y.bottom),d={row:e.row,column:e.column};l/s<=2&&(d.column+=c.x.left=a&&t.renderer.scrollCursorIntoView(d):y=i:y=null}function E(){var e=m;m=t.renderer.screenToTextCoordinates(h,f),A(m,e),C(m,e)}function S(){g=t.selection.toOrientedRange(),d=t.session.addMarker(g,"ace_selection",t.getSelectionStyle()),t.clearSelection(),t.isFocused()&&t.renderer.$cursorLayer.setBlinking(!1),clearInterval(p),E(),p=setInterval(E,20),k=0,r.addListener(document,"mousemove",T)}function F(){clearInterval(p),t.session.removeMarker(d),d=null,t.$blockScrolling+=1,t.selection.fromOrientedRange(g),t.$blockScrolling-=1,t.isFocused()&&!b&&t.renderer.$cursorLayer.setBlinking(!t.getReadOnly()),g=null,m=null,k=0,y=null,w=null,r.removeListener(document,"mousemove",T)}this.onDragStart=function(e){if(this.cancelDrag||!x.draggable){var i=this;return setTimeout((function(){i.startSelect(),i.captureMouse(e)}),0),e.preventDefault()}g=t.getSelectionRange();var r=e.dataTransfer;r.effectAllowed=t.getReadOnly()?"copy":"copyMove",s.isOpera&&(t.container.appendChild(n),n.scrollTop=0),r.setDragImage&&r.setDragImage(n,0,0),s.isOpera&&t.container.removeChild(n),r.clearData(),r.setData("Text",t.session.getTextRange()),b=!0,this.setState("drag")},this.onDragEnd=function(e){if(x.draggable=!1,b=!1,this.setState(null),!t.getReadOnly()){var n=e.dataTransfer.dropEffect;v||"move"!=n||t.session.remove(t.getSelectionRange()),t.renderer.$cursorLayer.setBlinking(!0)}this.editor.unsetStyle("ace_dragging"),this.editor.renderer.setCursorStyle("")},this.onDragEnter=function(e){if(!t.getReadOnly()&&L(e.dataTransfer))return h=e.clientX,f=e.clientY,d||S(),k++,e.dataTransfer.dropEffect=v=D(e),r.preventDefault(e)},this.onDragOver=function(e){if(!t.getReadOnly()&&L(e.dataTransfer))return h=e.clientX,f=e.clientY,d||(S(),k++),null!==$&&($=null),e.dataTransfer.dropEffect=v=D(e),r.preventDefault(e)},this.onDragLeave=function(e){if(k--,k<=0&&d)return F(),v=null,r.preventDefault(e)},this.onDrop=function(e){if(m){var n=e.dataTransfer;if(b)switch(v){case"move":g=g.contains(m.row,m.column)?{start:m,end:m}:t.moveText(g,m);break;case"copy":g=t.moveText(g,m,!0);break}else{var i=n.getData("Text");g={start:m,end:t.session.insert(m,i)},t.focus(),v=null}return F(),r.preventDefault(e)}},r.addListener(x,"dragstart",this.onDragStart.bind(e)),r.addListener(x,"dragend",this.onDragEnd.bind(e)),r.addListener(x,"dragenter",this.onDragEnter.bind(e)),r.addListener(x,"dragover",this.onDragOver.bind(e)),r.addListener(x,"dragleave",this.onDragLeave.bind(e)),r.addListener(x,"drop",this.onDrop.bind(e));var $=null;function T(){null==$&&($=setTimeout((function(){null!=$&&d&&F()}),20))}function L(e){var t=e.types;return!t||Array.prototype.some.call(t,(function(e){return"text/plain"==e||"Text"==e}))}function D(e){var t=["copy","copymove","all","uninitialized"],n=["move","copymove","linkmove","all","uninitialized"],i=s.isMac?e.altKey:e.ctrlKey,r="uninitialized";try{r=e.dataTransfer.effectAllowed.toLowerCase()}catch(e){}var a="none";return i&&t.indexOf(r)>=0?a="copy":n.indexOf(r)>=0?a="move":t.indexOf(r)>=0&&(a="copy"),a}}function u(e,t,n,i){return Math.sqrt(Math.pow(n-e,2)+Math.pow(i-t,2))}(function(){this.dragWait=function(){var e=Date.now()-this.mousedownEvent.time;e>this.editor.getDragDelay()&&this.startDrag()},this.dragWaitEnd=function(){var e=this.editor.container;e.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()),this.selectEnd()},this.dragReadyEnd=function(e){this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly()),this.editor.unsetStyle("ace_dragging"),this.editor.renderer.setCursorStyle(""),this.dragWaitEnd()},this.startDrag=function(){this.cancelDrag=!1;var e=this.editor,t=e.container;t.draggable=!0,e.renderer.$cursorLayer.setBlinking(!1),e.setStyle("ace_dragging");var n=s.isWin?"default":"move";e.renderer.setCursorStyle(n),this.setState("dragReady")},this.onMouseDrag=function(e){var t=this.editor.container;if(s.isIE&&"dragReady"==this.state){var n=u(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y);n>3&&t.dragDrop()}if("dragWait"===this.state){n=u(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y);n>0&&(t.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()))}},this.onMouseDown=function(e){if(this.$dragEnabled){this.mousedownEvent=e;var t=this.editor,n=e.inSelection(),i=e.getButton(),r=e.domEvent.detail||1;if(1===r&&0===i&&n){if(e.editor.inMultiSelectMode&&(e.getAccelKey()||e.getShiftKey()))return;this.mousedownEvent.time=Date.now();var a=e.domEvent.target||e.domEvent.srcElement;if("unselectable"in a&&(a.unselectable="on"),t.getDragDelay()){if(s.isWebKit){this.cancelDrag=!0;var o=t.container;o.draggable=!0}this.setState("dragWait")}else this.startDrag();this.captureMouse(e,this.onMouseDrag.bind(this)),e.defaultPrevented=!0}}}}).call(l.prototype),t.DragdropHandler=l})),ace.define("ace/lib/net",["require","exports","module","ace/lib/dom"],(function(e,t,n){"use strict";var i=e("./dom");t.get=function(e,t){var n=new XMLHttpRequest;n.open("GET",e,!0),n.onreadystatechange=function(){4===n.readyState&&t(n.responseText)},n.send(null)},t.loadScript=function(e,t){var n=i.getDocumentHead(),r=document.createElement("script");r.src=e,n.appendChild(r),r.onload=r.onreadystatechange=function(e,n){!n&&r.readyState&&"loaded"!=r.readyState&&"complete"!=r.readyState||(r=r.onload=r.onreadystatechange=null,n||t())}},t.qualifyURL=function(e){var t=document.createElement("a");return t.href=e,t.href}})),ace.define("ace/lib/event_emitter",["require","exports","module"],(function(e,t,n){"use strict";var i={},r=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};i._emit=i._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],i=this._defaultHandlers[e];if(n.length||i){"object"==typeof t&&t||(t={}),t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=r),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var a=0;a1&&(r=n[n.length-2]);var a=c[t+"Path"];return null==a?a=c.basePath:"/"==i&&(t=i=""),a&&"/"!=a.slice(-1)&&(a+="/"),a+t+i+r+this.get("suffix")},t.setModuleUrl=function(e,t){return c.$moduleUrls[e]=t},t.$loading={},t.loadModule=function(n,i){var r,a;Array.isArray(n)&&(a=n[0],n=n[1]);try{r=e(n)}catch(c){}if(r&&!t.$loading[n])return i&&i(r);if(t.$loading[n]||(t.$loading[n]=[]),t.$loading[n].push(i),!(t.$loading[n].length>1)){var o=function(){e([n],(function(e){t._emit("load.module",{name:n,module:e});var i=t.$loading[n];t.$loading[n]=null,i.forEach((function(t){t&&t(e)}))}))};if(!t.get("packaged"))return o();s.loadScript(t.moduleUrl(n,a),o)}},l(!0),t.init=l})),ace.define("ace/mouse/mouse_handler",["require","exports","module","ace/lib/event","ace/lib/useragent","ace/mouse/default_handlers","ace/mouse/default_gutter_handler","ace/mouse/mouse_event","ace/mouse/dragdrop_handler","ace/config"],(function(e,t,n){"use strict";var i=e("../lib/event"),r=e("../lib/useragent"),s=e("./default_handlers").DefaultHandlers,a=e("./default_gutter_handler").GutterHandler,o=e("./mouse_event").MouseEvent,c=e("./dragdrop_handler").DragdropHandler,l=e("../config"),u=function(e){var t=this;this.editor=e,new s(this),new a(this),new c(this);var n=function(t){var n=!document.hasFocus||!document.hasFocus()||!e.isFocused()&&document.activeElement==(e.textInput&&e.textInput.getElement());n&&window.focus(),e.focus()},o=e.renderer.getMouseEventTarget();i.addListener(o,"click",this.onMouseEvent.bind(this,"click")),i.addListener(o,"mousemove",this.onMouseMove.bind(this,"mousemove")),i.addMultiMouseDownListener([o,e.renderer.scrollBarV&&e.renderer.scrollBarV.inner,e.renderer.scrollBarH&&e.renderer.scrollBarH.inner,e.textInput&&e.textInput.getElement()].filter(Boolean),[400,300,250],this,"onMouseEvent"),i.addMouseWheelListener(e.container,this.onMouseWheel.bind(this,"mousewheel")),i.addTouchMoveListener(e.container,this.onTouchMove.bind(this,"touchmove"));var l=e.renderer.$gutter;i.addListener(l,"mousedown",this.onMouseEvent.bind(this,"guttermousedown")),i.addListener(l,"click",this.onMouseEvent.bind(this,"gutterclick")),i.addListener(l,"dblclick",this.onMouseEvent.bind(this,"gutterdblclick")),i.addListener(l,"mousemove",this.onMouseEvent.bind(this,"guttermousemove")),i.addListener(o,"mousedown",n),i.addListener(l,"mousedown",n),r.isIE&&e.renderer.scrollBarV&&(i.addListener(e.renderer.scrollBarV.element,"mousedown",n),i.addListener(e.renderer.scrollBarH.element,"mousedown",n)),e.on("mousemove",(function(n){if(!t.state&&!t.$dragDelay&&t.$dragEnabled){var i=e.renderer.screenToTextCoordinates(n.x,n.y),r=e.session.selection.getRange(),s=e.renderer;!r.isEmpty()&&r.insideStart(i.row,i.column)?s.setCursorStyle("default"):s.setCursorStyle("")}}))};(function(){this.onMouseEvent=function(e,t){this.editor._emit(e,new o(t,this.editor))},this.onMouseMove=function(e,t){var n=this.editor._eventRegistry&&this.editor._eventRegistry.mousemove;n&&n.length&&this.editor._emit(e,new o(t,this.editor))},this.onMouseWheel=function(e,t){var n=new o(t,this.editor);n.speed=2*this.$scrollSpeed,n.wheelX=t.wheelX,n.wheelY=t.wheelY,this.editor._emit(e,n)},this.onTouchMove=function(e,t){var n=new o(t,this.editor);n.speed=1,n.wheelX=t.wheelX,n.wheelY=t.wheelY,this.editor._emit(e,n)},this.setState=function(e){this.state=e},this.captureMouse=function(e,t){this.x=e.x,this.y=e.y,this.isMousePressed=!0;var n=this.editor.renderer;n.$keepTextAreaAtCursor&&(n.$keepTextAreaAtCursor=null);var s=this,a=function(e){if(e){if(r.isWebKit&&!e.which&&s.releaseMouse)return s.releaseMouse();s.x=e.clientX,s.y=e.clientY,t&&t(e),s.mouseEvent=new o(e,s.editor),s.$mouseMoved=!0}},c=function(e){clearInterval(u),l(),s[s.state+"End"]&&s[s.state+"End"](e),s.state="",null==n.$keepTextAreaAtCursor&&(n.$keepTextAreaAtCursor=!0,n.$moveTextAreaToCursor()),s.isMousePressed=!1,s.$onCaptureMouseMove=s.releaseMouse=null,e&&s.onMouseEvent("mouseup",e)},l=function(){s[s.state]&&s[s.state](),s.$mouseMoved=!1};if(r.isOldIE&&"dblclick"==e.domEvent.type)return setTimeout((function(){c(e)}));s.$onCaptureMouseMove=a,s.releaseMouse=i.capture(this.editor.container,a,c);var u=setInterval(l,20)},this.releaseMouse=null,this.cancelContextMenu=function(){var e=function(t){t&&t.domEvent&&"contextmenu"!=t.domEvent.type||(this.editor.off("nativecontextmenu",e),t&&t.domEvent&&i.stopEvent(t.domEvent))}.bind(this);setTimeout(e,10),this.editor.on("nativecontextmenu",e)}}).call(u.prototype),l.defineOptions(u.prototype,"mouseHandler",{scrollSpeed:{initialValue:2},dragDelay:{initialValue:r.isMac?150:0},dragEnabled:{initialValue:!0},focusTimout:{initialValue:0},tooltipFollowsMouse:{initialValue:!0}}),t.MouseHandler=u})),ace.define("ace/mouse/fold_handler",["require","exports","module"],(function(e,t,n){"use strict";function i(e){e.on("click",(function(t){var n=t.getDocumentPosition(),i=e.session,r=i.getFoldAt(n.row,n.column,1);r&&(t.getAccelKey()?i.removeFold(r):i.expandFold(r),t.stop())})),e.on("gutterclick",(function(t){var n=e.renderer.$gutterLayer.getRegion(t);if("foldWidgets"==n){var i=t.getDocumentPosition().row,r=e.session;r.foldWidgets&&r.foldWidgets[i]&&e.session.onFoldWidgetClick(i,t),e.isFocused()||e.focus(),t.stop()}})),e.on("gutterdblclick",(function(t){var n=e.renderer.$gutterLayer.getRegion(t);if("foldWidgets"==n){var i=t.getDocumentPosition().row,r=e.session,s=r.getParentFoldRangeData(i,!0),a=s.range||s.firstRange;if(a){i=a.start.row;var o=r.getFoldAt(i,r.getLine(i).length,1);o?r.removeFold(o):(r.addFold("...",a),e.renderer.scrollCursorIntoView({row:a.start.row,column:0}))}t.stop()}}))}t.FoldHandler=i})),ace.define("ace/keyboard/keybinding",["require","exports","module","ace/lib/keys","ace/lib/event"],(function(e,t,n){"use strict";var i=e("../lib/keys"),r=e("../lib/event"),s=function(e){this.$editor=e,this.$data={editor:e},this.$handlers=[],this.setDefaultHandler(e.commands)};(function(){this.setDefaultHandler=function(e){this.removeKeyboardHandler(this.$defaultHandler),this.$defaultHandler=e,this.addKeyboardHandler(e,0)},this.setKeyboardHandler=function(e){var t=this.$handlers;if(t[t.length-1]!=e){while(t[t.length-1]&&t[t.length-1]!=this.$defaultHandler)this.removeKeyboardHandler(t[t.length-1]);this.addKeyboardHandler(e,1)}},this.addKeyboardHandler=function(e,t){if(e){"function"!=typeof e||e.handleKeyboard||(e.handleKeyboard=e);var n=this.$handlers.indexOf(e);-1!=n&&this.$handlers.splice(n,1),void 0==t?this.$handlers.push(e):this.$handlers.splice(t,0,e),-1==n&&e.attach&&e.attach(this.$editor)}},this.removeKeyboardHandler=function(e){var t=this.$handlers.indexOf(e);return-1!=t&&(this.$handlers.splice(t,1),e.detach&&e.detach(this.$editor),!0)},this.getKeyboardHandler=function(){return this.$handlers[this.$handlers.length-1]},this.getStatusText=function(){var e=this.$data,t=e.editor;return this.$handlers.map((function(n){return n.getStatusText&&n.getStatusText(t,e)||""})).filter(Boolean).join(" ")},this.$callKeyboardHandlers=function(e,t,n,i){for(var s,a=!1,o=this.$editor.commands,c=this.$handlers.length;c--;)if(s=this.$handlers[c].handleKeyboard(this.$data,e,t,n,i),s&&s.command&&(a="null"==s.command||o.exec(s.command,this.$editor,s.args,i),a&&i&&-1!=e&&1!=s.passEvent&&1!=s.command.passEvent&&r.stopEvent(i),a))break;return a||-1!=e||(s={command:"insertstring"},a=o.exec("insertstring",this.$editor,t)),a&&this.$editor._signal&&this.$editor._signal("keyboardActivity",s),a},this.onCommandKey=function(e,t,n){var r=i.keyCodeToString(n);this.$callKeyboardHandlers(t,r,n,e)},this.onTextInput=function(e){this.$callKeyboardHandlers(-1,e)}}).call(s.prototype),t.KeyBinding=s})),ace.define("ace/lib/bidiutil",["require","exports","module"],(function(e,t,n){"use strict";var i=0,r=0,s=!1,a=!1,o=!1,c=[[0,3,0,1,0,0,0],[0,3,0,1,2,2,0],[0,3,0,17,2,0,1],[0,3,5,5,4,1,0],[0,3,21,21,4,0,1],[0,3,5,5,4,2,0]],l=[[2,0,1,1,0,1,0],[2,0,1,1,0,2,0],[2,0,2,1,3,2,0],[2,0,2,33,3,1,1]],u=0,d=1,h=0,f=1,p=2,g=3,m=4,v=5,b=6,y=7,w=8,_=9,x=10,k=11,A=12,C=13,E=14,S=15,F=16,$=17,T=18,L=[T,T,T,T,T,T,T,T,T,b,v,b,w,v,T,T,T,T,T,T,T,T,T,T,T,T,T,T,v,v,v,b,w,m,m,k,k,k,m,m,m,m,m,x,_,x,_,_,p,p,p,p,p,p,p,p,p,p,_,m,m,m,m,m,m,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,m,m,m,m,m,m,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,h,m,m,m,m,T,T,T,T,T,T,v,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,_,m,k,k,k,k,m,m,m,m,h,m,m,T,m,m,k,k,p,p,m,h,m,m,m,p,h,m,m,m,m,m],D=[w,w,w,w,w,w,w,w,w,w,w,T,T,T,h,f,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,w,v,C,E,S,F,$,_,k,k,k,k,k,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,_,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,w];function B(e,t,n,u){var d=i?l:c,h=null,f=null,p=null,g=0,m=null,y=null,_=-1,x=null,k=null,A=[];if(!u)for(x=0,u=[];x0)if(16==m){for(x=_;x-1){for(x=_;x=0;C--){if(u[C]!=w)break;t[C]=i}}}function R(e,t,n){if(!(r=e){s=h+1;while(s=e)s++;for(o=h,c=s-1;o=t.length||(c=n[r-1])!=p&&c!=g||(l=t[r+1])!=p&&l!=g?m:(s&&(l=g),l==c?l:m);case x:return c=r>0?n[r-1]:v,c==p&&r+10&&n[r-1]==p)return p;if(s)return m;d=r+1,u=t.length;while(d=1425&&D<=2303||64286==D;if(c=t[d],B&&(c==f||c==y))return f}return r<1||(c=t[r-1])==v?m:n[r-1];case v:return s=!1,a=!0,i;case b:return o=!0,m;case C:case E:case F:case $:case S:s=!1;case T:return m}}function M(e){var t=e.charCodeAt(0),n=t>>8;return 0==n?t>191?h:L[t]:5==n?/[\u0591-\u05f4]/.test(e)?f:h:6==n?/[\u0610-\u061a\u064b-\u065f\u06d6-\u06e4\u06e7-\u06ed]/.test(e)?A:/[\u0660-\u0669\u066b-\u066c]/.test(e)?g:1642==t?k:/[\u06f0-\u06f9]/.test(e)?p:y:32==n&&t<=8287?D[255&t]:254==n&&t>=65136?y:m}t.L=h,t.R=f,t.EN=p,t.ON_R=3,t.AN=4,t.R_H=5,t.B=6,t.DOT="·",t.doBidiReorder=function(e,n,r){if(e.length<2)return{};var s=e.split(""),a=new Array(s.length),o=new Array(s.length),c=[];i=r?d:u,B(s,c,s.length,n);for(var l=0;ly&&n[l]0&&"ل"===s[l-1]&&/\u0622|\u0623|\u0625|\u0627/.test(s[l])&&(c[l-1]=c[l]=t.R_H,l++);s[s.length-1]===t.DOT&&(c[s.length-1]=t.B);for(l=0;l=0&&(e=this.session.$docRowCache[n])}return e},this.getSplitIndex=function(){var e=0,t=this.session.$screenRowCache;if(t.length){var n,i=this.session.$getRowCacheIndex(t,this.currentRow);while(this.currentRow-e>0){if(n=this.session.$getRowCacheIndex(t,this.currentRow-e-1),n!==i)break;i=n,e++}}return e},this.updateRowLine=function(e,t){if(void 0===e&&(e=this.getDocumentRow()),this.wrapIndent=0,this.isLastRow=e===this.session.getLength()-1,this.line=this.session.getLine(e),this.session.$useWrapMode){var n=this.session.$wrapData[e];n&&(void 0===t&&(t=this.getSplitIndex()),t>0&&n.length?(this.wrapIndent=n.indent,this.line=t0?e-1:0,this.bidiMap),n=this.bidiMap.bidiLevels,r=0;0===e&&n[t]%2!==0&&t++;for(var s=0;s=l&&rn+a/2){if(n+=a,r===s.length-1){a=0;break}a=this.charWidths[s[++r]]}return r>0&&s[r-1]%2!==0&&s[r]%2===0?(e0&&s[r-1]%2===0&&s[r]%2!==0?t=1+(e>n?this.bidiMap.logicalFromVisual[r]:this.bidiMap.logicalFromVisual[r-1]):this.isRtlDir&&r===s.length-1&&0===a&&s[r-1]%2===0||!this.isRtlDir&&0===r&&s[r]%2!==0?t=1+this.bidiMap.logicalFromVisual[r]:(r>0&&s[r-1]%2!==0&&0!==a&&r--,t=this.bidiMap.logicalFromVisual[r]),t+this.wrapIndent}}).call(o.prototype),t.BidiHandler=o})),ace.define("ace/range",["require","exports","module"],(function(e,t,n){"use strict";var i=function(e,t){return e.row-t.row||e.column-t.column},r=function(e,t,n,i){this.start={row:e,column:t},this.end={row:n,column:i}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return"Range: ["+this.start.row+"/"+this.start.column+"] -> ["+this.end.row+"/"+this.end.column+"]"},this.contains=function(e,t){return 0==this.compare(e,t)},this.compareRange=function(e){var t,n=e.end,i=e.start;return t=this.compare(n.row,n.column),1==t?(t=this.compare(i.row,i.column),1==t?2:0==t?1:0):-1==t?-2:(t=this.compare(i.row,i.column),-1==t?-1:1==t?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return 0==this.comparePoint(e.start)&&0==this.comparePoint(e.end)},this.intersects=function(e){var t=this.compareRange(e);return-1==t||0==t||1==t},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){"object"==typeof e?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){"object"==typeof e?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return 0==this.compare(e,t)&&(!this.isEnd(e,t)&&!this.isStart(e,t))},this.insideStart=function(e,t){return 0==this.compare(e,t)&&!this.isEnd(e,t)},this.insideEnd=function(e,t){return 0==this.compare(e,t)&&!this.isStart(e,t)},this.compare=function(e,t){return this.isMultiLine()||e!==this.start.row?ethis.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0:tthis.end.column?1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.rowt)var i={row:t+1,column:0};else if(this.start.rowt.row||e.row==t.row&&e.column>t.column},this.getRange=function(){var e=this.anchor,t=this.lead;return this.isEmpty()?a.fromPoints(t,t):this.isBackwards()?a.fromPoints(t,e):a.fromPoints(e,t)},this.clearSelection=function(){this.$isEmpty||(this.$isEmpty=!0,this._emit("changeSelection"))},this.selectAll=function(){var e=this.doc.getLength()-1;this.setSelectionAnchor(0,0),this.moveCursorTo(e,this.doc.getLine(e).length)},this.setRange=this.setSelectionRange=function(e,t){t?(this.setSelectionAnchor(e.end.row,e.end.column),this.selectTo(e.start.row,e.start.column)):(this.setSelectionAnchor(e.start.row,e.start.column),this.selectTo(e.end.row,e.end.column)),this.getRange().isEmpty()&&(this.$isEmpty=!0),this.$desiredColumn=null},this.$moveSelection=function(e){var t=this.lead;this.$isEmpty&&this.setSelectionAnchor(t.row,t.column),e.call(this)},this.selectTo=function(e,t){this.$moveSelection((function(){this.moveCursorTo(e,t)}))},this.selectToPosition=function(e){this.$moveSelection((function(){this.moveCursorToPosition(e)}))},this.moveTo=function(e,t){this.clearSelection(),this.moveCursorTo(e,t)},this.moveToPosition=function(e){this.clearSelection(),this.moveCursorToPosition(e)},this.selectUp=function(){this.$moveSelection(this.moveCursorUp)},this.selectDown=function(){this.$moveSelection(this.moveCursorDown)},this.selectRight=function(){this.$moveSelection(this.moveCursorRight)},this.selectLeft=function(){this.$moveSelection(this.moveCursorLeft)},this.selectLineStart=function(){this.$moveSelection(this.moveCursorLineStart)},this.selectLineEnd=function(){this.$moveSelection(this.moveCursorLineEnd)},this.selectFileEnd=function(){this.$moveSelection(this.moveCursorFileEnd)},this.selectFileStart=function(){this.$moveSelection(this.moveCursorFileStart)},this.selectWordRight=function(){this.$moveSelection(this.moveCursorWordRight)},this.selectWordLeft=function(){this.$moveSelection(this.moveCursorWordLeft)},this.getWordRange=function(e,t){if("undefined"==typeof t){var n=e||this.lead;e=n.row,t=n.column}return this.session.getWordRange(e,t)},this.selectWord=function(){this.setSelectionRange(this.getWordRange())},this.selectAWord=function(){var e=this.getCursor(),t=this.session.getAWordRange(e.row,e.column);this.setSelectionRange(t)},this.getLineRange=function(e,t){var n,i="number"==typeof e?e:this.lead.row,r=this.session.getFoldLine(i);return r?(i=r.start.row,n=r.end.row):n=i,!0===t?new a(i,0,n,this.session.getLine(n).length):new a(i,0,n+1,0)},this.selectLine=function(){this.setSelectionRange(this.getLineRange())},this.moveCursorUp=function(){this.moveCursorBy(-1,0)},this.moveCursorDown=function(){this.moveCursorBy(1,0)},this.wouldMoveIntoSoftTab=function(e,t,n){var i=e.column,r=e.column+t;return n<0&&(i=e.column-t,r=e.column),this.session.isTabStop(e)&&this.doc.getLine(e.row).slice(i,r).split(" ").length-1==t},this.moveCursorLeft=function(){var e,t=this.lead.getPosition();if(e=this.session.getFoldAt(t.row,t.column,-1))this.moveCursorTo(e.start.row,e.start.column);else if(0===t.column)t.row>0&&this.moveCursorTo(t.row-1,this.doc.getLine(t.row-1).length);else{var n=this.session.getTabSize();this.wouldMoveIntoSoftTab(t,n,-1)&&!this.session.getNavigateWithinSoftTabs()?this.moveCursorBy(0,-n):this.moveCursorBy(0,-1)}},this.moveCursorRight=function(){var e,t=this.lead.getPosition();if(e=this.session.getFoldAt(t.row,t.column,1))this.moveCursorTo(e.end.row,e.end.column);else if(this.lead.column==this.doc.getLine(this.lead.row).length)this.lead.row0&&(t.column=i)}}this.moveCursorTo(t.row,t.column)},this.moveCursorFileEnd=function(){var e=this.doc.getLength()-1,t=this.doc.getLine(e).length;this.moveCursorTo(e,t)},this.moveCursorFileStart=function(){this.moveCursorTo(0,0)},this.moveCursorLongWordRight=function(){var e=this.lead.row,t=this.lead.column,n=this.doc.getLine(e),i=n.substring(t);this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0;var r=this.session.getFoldAt(e,t,1);if(r)this.moveCursorTo(r.end.row,r.end.column);else{if(this.session.nonTokenRe.exec(i)&&(t+=this.session.nonTokenRe.lastIndex,this.session.nonTokenRe.lastIndex=0,i=n.substring(t)),t>=n.length)return this.moveCursorTo(e,n.length),this.moveCursorRight(),void(e0&&this.moveCursorWordLeft());this.session.tokenRe.exec(s)&&(n-=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0),this.moveCursorTo(t,n)}},this.$shortWordEndIndex=function(e){var t,n=0,i=/\s/,r=this.session.tokenRe;if(r.lastIndex=0,this.session.tokenRe.exec(e))n=this.session.tokenRe.lastIndex;else{while((t=e[n])&&i.test(t))n++;if(n<1){r.lastIndex=0;while((t=e[n])&&!r.test(t))if(r.lastIndex=0,n++,i.test(t)){if(n>2){n--;break}while((t=e[n])&&i.test(t))n++;if(n>2)break}}}return r.lastIndex=0,n},this.moveCursorShortWordRight=function(){var e=this.lead.row,t=this.lead.column,n=this.doc.getLine(e),i=n.substring(t),r=this.session.getFoldAt(e,t,1);if(r)return this.moveCursorTo(r.end.row,r.end.column);if(t==n.length){var s=this.doc.getLength();do{e++,i=this.doc.getLine(e)}while(e0&&/^\s*$/.test(i));n=i.length,/\s+$/.test(i)||(i="")}var s=r.stringReverse(i),a=this.$shortWordEndIndex(s);return this.moveCursorTo(t,n-a)},this.moveCursorWordRight=function(){this.session.$selectLongWords?this.moveCursorLongWordRight():this.moveCursorShortWordRight()},this.moveCursorWordLeft=function(){this.session.$selectLongWords?this.moveCursorLongWordLeft():this.moveCursorShortWordLeft()},this.moveCursorBy=function(e,t){var n,i=this.session.documentToScreenPosition(this.lead.row,this.lead.column);0===t&&(0!==e&&(this.session.$bidiHandler.isBidiRow(i.row,this.lead.row)?(n=this.session.$bidiHandler.getPosLeft(i.column),i.column=Math.round(n/this.session.$bidiHandler.charWidths[0])):n=i.column*this.session.$bidiHandler.charWidths[0]),this.$desiredColumn?i.column=this.$desiredColumn:this.$desiredColumn=i.column);var r=this.session.screenToDocumentPosition(i.row+e,i.column,n);0!==e&&0===t&&r.row===this.lead.row&&r.column===this.lead.column&&this.session.lineWidgets&&this.session.lineWidgets[r.row]&&(r.row>0||e>0)&&r.row++,this.moveCursorTo(r.row,r.column+t,0===t)},this.moveCursorToPosition=function(e){this.moveCursorTo(e.row,e.column)},this.moveCursorTo=function(e,t,n){var i=this.session.getFoldAt(e,t,1);i&&(e=i.start.row,t=i.start.column),this.$keepDesiredColumnOnChange=!0;var r=this.session.getLine(e);/[\uDC00-\uDFFF]/.test(r.charAt(t))&&r.charAt(t-1)&&(this.lead.row==e&&this.lead.column==t+1?t-=1:t+=1),this.lead.setPosition(e,t),this.$keepDesiredColumnOnChange=!1,n||(this.$desiredColumn=null)},this.moveCursorToScreen=function(e,t,n){var i=this.session.screenToDocumentPosition(e,t);this.moveCursorTo(i.row,i.column,n)},this.detach=function(){this.lead.detach(),this.anchor.detach(),this.session=this.doc=null},this.fromOrientedRange=function(e){this.setSelectionRange(e,e.cursor==e.start),this.$desiredColumn=e.desiredColumn||this.$desiredColumn},this.toOrientedRange=function(e){var t=this.getRange();return e?(e.start.column=t.start.column,e.start.row=t.start.row,e.end.column=t.end.column,e.end.row=t.end.row):e=t,e.cursor=this.isBackwards()?e.start:e.end,e.desiredColumn=this.$desiredColumn,e},this.getRangeOfMovements=function(e){var t=this.getCursor();try{e(this);var n=this.getCursor();return a.fromPoints(t,n)}catch(i){return a.fromPoints(t,t)}finally{this.moveCursorToPosition(t)}},this.toJSON=function(){if(this.rangeCount)var e=this.ranges.map((function(e){var t=e.clone();return t.isBackwards=e.cursor==e.start,t}));else{e=this.getRange();e.isBackwards=this.isBackwards()}return e},this.fromJSON=function(e){if(void 0==e.start){if(this.rangeList){this.toSingleRange(e[0]);for(var t=e.length;t--;){var n=a.fromPoints(e[t].start,e[t].end);e[t].isBackwards&&(n.cursor=n.start),this.addRange(n,!0)}return}e=e[0]}this.rangeList&&this.toSingleRange(e),this.setSelectionRange(e,e.isBackwards)},this.isEqual=function(e){if((e.length||this.rangeCount)&&e.length!=this.rangeCount)return!1;if(!e.length||!this.ranges)return this.getRange().isEqual(e);for(var t=this.ranges.length;t--;)if(!this.ranges[t].isEqual(e[t]))return!1;return!0}}).call(o.prototype),t.Selection=o})),ace.define("ace/tokenizer",["require","exports","module","ace/config"],(function(e,t,n){"use strict";var i=e("./config"),r=2e3,s=function(e){for(var t in this.states=e,this.regExps={},this.matchMappings={},this.states){for(var n=this.states[t],i=[],r=0,s=this.matchMappings[t]={defaultToken:"text"},a="g",o=[],c=0;c1?this.$applyToken:l.token),d>1&&(/\\\d/.test(l.regex)?u=l.regex.replace(/\\([0-9]+)/g,(function(e,t){return"\\"+(parseInt(t,10)+r+1)})):(d=1,u=this.removeCapturingGroups(l.regex)),l.splitRegex||"string"==typeof l.token||o.push(l)),s[r]=c,r+=d,i.push(u),l.onMatch||(l.onMatch=null)}}i.length||(s[0]=0,i.push("$")),o.forEach((function(e){e.splitRegex=this.createSplitterRegexp(e.regex,a)}),this),this.regExps[t]=new RegExp("("+i.join(")|(")+")|($)",a)}};(function(){this.$setMaxTokenCount=function(e){r=0|e},this.$applyToken=function(e){var t=this.splitRegex.exec(e).slice(1),n=this.token.apply(this,t);if("string"===typeof n)return[{type:n,value:e}];for(var i=[],r=0,s=n.length;ru){var v=e.substring(u,m-g.length);h.type==f?h.value+=v:(h.type&&l.push(h),h={type:f,value:v})}for(var b=0;br){d>2*e.length&&this.reportError("infinite loop with in ace tokenizer",{startState:t,line:e});while(u1&&n[0]!==i&&n.unshift("#tmp",i),{tokens:l,state:n.length?n:i}},this.reportError=i.reportError}).call(s.prototype),t.Tokenizer=s})),ace.define("ace/mode/text_highlight_rules",["require","exports","module","ace/lib/lang"],(function(e,t,n){"use strict";var i=e("../lib/lang"),r=function(){this.$rules={start:[{token:"empty_line",regex:"^$"},{defaultToken:"text"}]}};(function(){this.addRules=function(e,t){if(t)for(var n in e){for(var i=e[n],r=0;r=this.$rowTokens.length){if(this.$row+=1,e||(e=this.$session.getLength()),this.$row>=e)return this.$row=e-1,null;this.$rowTokens=this.$session.getTokens(this.$row),this.$tokenIndex=0}return this.$rowTokens[this.$tokenIndex]},this.getCurrentToken=function(){return this.$rowTokens[this.$tokenIndex]},this.getCurrentTokenRow=function(){return this.$row},this.getCurrentTokenColumn=function(){var e=this.$rowTokens,t=this.$tokenIndex,n=e[t].start;if(void 0!==n)return n;n=0;while(t>0)t-=1,n+=e[t].value.length;return n},this.getCurrentTokenPosition=function(){return{row:this.$row,column:this.getCurrentTokenColumn()}},this.getCurrentTokenRange=function(){var e=this.$rowTokens[this.$tokenIndex],t=this.getCurrentTokenColumn();return new i(this.$row,t,this.$row,t+e.value.length)}}).call(r.prototype),t.TokenIterator=r})),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],(function(e,t,n){"use strict";var i,r=e("../../lib/oop"),s=e("../behaviour").Behaviour,a=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),c=["text","paren.rparen","punctuation.operator"],l=["text","paren.rparen","punctuation.operator","comment"],u={},d={'"':'"',"'":"'"},h=function(e){var t=-1;if(e.multiSelect&&(t=e.selection.index,u.rangeCount!=e.multiSelect.rangeCount&&(u={rangeCount:e.multiSelect.rangeCount})),u[t])return i=u[t];i=u[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:"",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:"",maybeInsertedLineEnd:""}},f=function(e,t,n,i){var r=e.end.row-e.start.row;return{text:n+t+i,selection:[0,e.start.column+1,r,e.end.column+(r?0:1)]}},p=function(e){this.add("braces","insertion",(function(t,n,r,s,a){var c=r.getCursorPosition(),l=s.doc.getLine(c.row);if("{"==a){h(r);var u=r.getSelectionRange(),d=s.doc.getTextRange(u);if(""!==d&&"{"!==d&&r.getWrapBehavioursEnabled())return f(u,d,"{","}");if(p.isSaneInsertion(r,s))return/[\]\}\)]/.test(l[c.column])||r.inMultiSelectMode||e&&e.braces?(p.recordAutoInsert(r,s,"}"),{text:"{}",selection:[1,1]}):(p.recordMaybeInsert(r,s,"{"),{text:"{",selection:[1,1]})}else if("}"==a){h(r);var g=l.substring(c.column,c.column+1);if("}"==g){var m=s.$findOpeningBracket("}",{column:c.column+1,row:c.row});if(null!==m&&p.isAutoInsertedClosing(c,l,a))return p.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else{if("\n"==a||"\r\n"==a){h(r);var v="";p.isMaybeInsertedClosing(c,l)&&(v=o.stringRepeat("}",i.maybeInsertedBrackets),p.clearMaybeInsertedClosing());g=l.substring(c.column,c.column+1);if("}"===g){var b=s.findMatchingBracket({row:c.row,column:c.column+1},"}");if(!b)return null;var y=this.$getIndent(s.getLine(b.row))}else{if(!v)return void p.clearMaybeInsertedClosing();y=this.$getIndent(l)}var w=y+s.getTabString();return{text:"\n"+w+"\n"+y+v,selection:[1,w.length,1,w.length]}}p.clearMaybeInsertedClosing()}})),this.add("braces","deletion",(function(e,t,n,r,s){var a=r.doc.getTextRange(s);if(!s.isMultiLine()&&"{"==a){h(n);var o=r.doc.getLine(s.start.row),c=o.substring(s.end.column,s.end.column+1);if("}"==c)return s.end.column++,s;i.maybeInsertedBrackets--}})),this.add("parens","insertion",(function(e,t,n,i,r){if("("==r){h(n);var s=n.getSelectionRange(),a=i.doc.getTextRange(s);if(""!==a&&n.getWrapBehavioursEnabled())return f(s,a,"(",")");if(p.isSaneInsertion(n,i))return p.recordAutoInsert(n,i,")"),{text:"()",selection:[1,1]}}else if(")"==r){h(n);var o=n.getCursorPosition(),c=i.doc.getLine(o.row),l=c.substring(o.column,o.column+1);if(")"==l){var u=i.$findOpeningBracket(")",{column:o.column+1,row:o.row});if(null!==u&&p.isAutoInsertedClosing(o,c,r))return p.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}})),this.add("parens","deletion",(function(e,t,n,i,r){var s=i.doc.getTextRange(r);if(!r.isMultiLine()&&"("==s){h(n);var a=i.doc.getLine(r.start.row),o=a.substring(r.start.column+1,r.start.column+2);if(")"==o)return r.end.column++,r}})),this.add("brackets","insertion",(function(e,t,n,i,r){if("["==r){h(n);var s=n.getSelectionRange(),a=i.doc.getTextRange(s);if(""!==a&&n.getWrapBehavioursEnabled())return f(s,a,"[","]");if(p.isSaneInsertion(n,i))return p.recordAutoInsert(n,i,"]"),{text:"[]",selection:[1,1]}}else if("]"==r){h(n);var o=n.getCursorPosition(),c=i.doc.getLine(o.row),l=c.substring(o.column,o.column+1);if("]"==l){var u=i.$findOpeningBracket("]",{column:o.column+1,row:o.row});if(null!==u&&p.isAutoInsertedClosing(o,c,r))return p.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}})),this.add("brackets","deletion",(function(e,t,n,i,r){var s=i.doc.getTextRange(r);if(!r.isMultiLine()&&"["==s){h(n);var a=i.doc.getLine(r.start.row),o=a.substring(r.start.column+1,r.start.column+2);if("]"==o)return r.end.column++,r}})),this.add("string_dquotes","insertion",(function(e,t,n,i,r){var s=i.$mode.$quotes||d;if(1==r.length&&s[r]){if(this.lineCommentStart&&-1!=this.lineCommentStart.indexOf(r))return;h(n);var a=r,o=n.getSelectionRange(),c=i.doc.getTextRange(o);if(!(""===c||1==c.length&&s[c])&&n.getWrapBehavioursEnabled())return f(o,c,a,a);if(!c){var l=n.getCursorPosition(),u=i.doc.getLine(l.row),p=u.substring(l.column-1,l.column),g=u.substring(l.column,l.column+1),m=i.getTokenAt(l.row,l.column),v=i.getTokenAt(l.row,l.column+1);if("\\"==p&&m&&/escape/.test(m.type))return null;var b,y=m&&/string|escape/.test(m.type),w=!v||/string|escape/.test(v.type);if(g==a)b=y!==w,b&&/string\.end/.test(v.type)&&(b=!1);else{if(y&&!w)return null;if(y&&w)return null;var _=i.$mode.tokenRe;_.lastIndex=0;var x=_.test(p);_.lastIndex=0;var k=_.test(p);if(x||k)return null;if(g&&!/[\s;,.})\]\\]/.test(g))return null;b=!0}return{text:b?a+a:"",selection:[1,1]}}}})),this.add("string_dquotes","deletion",(function(e,t,n,i,r){var s=i.doc.getTextRange(r);if(!r.isMultiLine()&&('"'==s||"'"==s)){h(n);var a=i.doc.getLine(r.start.row),o=a.substring(r.start.column+1,r.start.column+2);if(o==s)return r.end.column++,r}}))};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),i=new a(t,n.row,n.column);if(!this.$matchTokenType(i.getCurrentToken()||"text",c)){var r=new a(t,n.row,n.column+1);if(!this.$matchTokenType(r.getCurrentToken()||"text",c))return!1}return i.stepForward(),i.getCurrentTokenRow()!==n.row||this.$matchTokenType(i.getCurrentToken()||"text",l)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),s=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,s,i.autoInsertedLineEnd[0])||(i.autoInsertedBrackets=0),i.autoInsertedRow=r.row,i.autoInsertedLineEnd=n+s.substr(r.column),i.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),s=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,s)||(i.maybeInsertedBrackets=0),i.maybeInsertedRow=r.row,i.maybeInsertedLineStart=s.substr(0,r.column)+n,i.maybeInsertedLineEnd=s.substr(r.column),i.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return i.autoInsertedBrackets>0&&e.row===i.autoInsertedRow&&n===i.autoInsertedLineEnd[0]&&t.substr(e.column)===i.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return i.maybeInsertedBrackets>0&&e.row===i.maybeInsertedRow&&t.substr(e.column)===i.maybeInsertedLineEnd&&t.substr(0,e.column)==i.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){i.autoInsertedLineEnd=i.autoInsertedLineEnd.substr(1),i.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){i&&(i.maybeInsertedBrackets=0,i.maybeInsertedRow=-1)},r.inherits(p,s),t.CstyleBehaviour=p})),ace.define("ace/unicode",["require","exports","module"],(function(e,t,n){"use strict";function i(e){var n=/\w{4}/g;for(var i in e)t.packages[i]=e[i].replace(n,"\\u$&")}t.packages={},i({L:"0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05250531-055605590561-058705D0-05EA05F0-05F20621-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280904-0939093D09500958-0961097109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510D0-10FA10FC1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209421022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2D00-2D252D30-2D652D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A65FA662-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78BA78CA7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC",Ll:"0061-007A00AA00B500BA00DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02AF037103730377037B-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F0521052305250561-05871D00-1D2B1D62-1D771D79-1D9A1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF7210A210E210F2113212F21342139213C213D2146-2149214E21842C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7C2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2D00-2D25A641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76FA771-A778A77AA77CA77FA781A783A785A787A78CFB00-FB06FB13-FB17FF41-FF5A",Lu:"0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E0520052205240531-055610A0-10C51E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CEDA640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BFF21-FF3A",Lt:"01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC",Lm:"02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D611D781D9B-1DBF2071207F2090-20942C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A9CFAA70AADDFF70FF9EFF9F",Lo:"01BB01C0-01C3029405D0-05EA05F0-05F20621-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150904-0939093D09500958-096109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF12135-21382D30-2D652D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC",M:"0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DE-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0903093C093E-094E0951-0955096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F90-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135F1712-17141732-1734175217531772177317B6-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAA1C24-1C371CD0-1CD21CD4-1CE81CED1CF21DC0-1DE61DFD-1DFF20D0-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66F-A672A67CA67DA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26",Mn:"0300-036F0483-04870591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0902093C0941-0948094D0951-095509620963098109BC09C1-09C409CD09E209E30A010A020A3C0A410A420A470A480A4B-0A4D0A510A700A710A750A810A820ABC0AC1-0AC50AC70AC80ACD0AE20AE30B010B3C0B3F0B41-0B440B4D0B560B620B630B820BC00BCD0C3E-0C400C46-0C480C4A-0C4D0C550C560C620C630CBC0CBF0CC60CCC0CCD0CE20CE30D41-0D440D4D0D620D630DCA0DD2-0DD40DD60E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F71-0F7E0F80-0F840F860F870F90-0F970F99-0FBC0FC6102D-10301032-10371039103A103D103E10581059105E-10601071-1074108210851086108D109D135F1712-17141732-1734175217531772177317B7-17BD17C617C9-17D317DD180B-180D18A91920-19221927192819321939-193B1A171A181A561A58-1A5E1A601A621A65-1A6C1A73-1A7C1A7F1B00-1B031B341B36-1B3A1B3C1B421B6B-1B731B801B811BA2-1BA51BA81BA91C2C-1C331C361C371CD0-1CD21CD4-1CE01CE2-1CE81CED1DC0-1DE61DFD-1DFF20D0-20DC20E120E5-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66FA67CA67DA6F0A6F1A802A806A80BA825A826A8C4A8E0-A8F1A926-A92DA947-A951A980-A982A9B3A9B6-A9B9A9BCAA29-AA2EAA31AA32AA35AA36AA43AA4CAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE5ABE8ABEDFB1EFE00-FE0FFE20-FE26",Mc:"0903093E-09400949-094C094E0982098309BE-09C009C709C809CB09CC09D70A030A3E-0A400A830ABE-0AC00AC90ACB0ACC0B020B030B3E0B400B470B480B4B0B4C0B570BBE0BBF0BC10BC20BC6-0BC80BCA-0BCC0BD70C01-0C030C41-0C440C820C830CBE0CC0-0CC40CC70CC80CCA0CCB0CD50CD60D020D030D3E-0D400D46-0D480D4A-0D4C0D570D820D830DCF-0DD10DD8-0DDF0DF20DF30F3E0F3F0F7F102B102C10311038103B103C105610571062-10641067-106D108310841087-108C108F109A-109C17B617BE-17C517C717C81923-19261929-192B193019311933-193819B0-19C019C819C91A19-1A1B1A551A571A611A631A641A6D-1A721B041B351B3B1B3D-1B411B431B441B821BA11BA61BA71BAA1C24-1C2B1C341C351CE11CF2A823A824A827A880A881A8B4-A8C3A952A953A983A9B4A9B5A9BAA9BBA9BD-A9C0AA2FAA30AA33AA34AA4DAA7BABE3ABE4ABE6ABE7ABE9ABEAABEC",Me:"0488048906DE20DD-20E020E2-20E4A670-A672",N:"0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19",Nd:"0030-00390660-066906F0-06F907C0-07C90966-096F09E6-09EF0A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BEF0C66-0C6F0CE6-0CEF0D66-0D6F0E50-0E590ED0-0ED90F20-0F291040-10491090-109917E0-17E91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C59A620-A629A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19",Nl:"16EE-16F02160-21822185-218830073021-30293038-303AA6E6-A6EF",No:"00B200B300B900BC-00BE09F4-09F90BF0-0BF20C78-0C7E0D70-0D750F2A-0F331369-137C17F0-17F920702074-20792080-20892150-215F21892460-249B24EA-24FF2776-27932CFD3192-31953220-32293251-325F3280-328932B1-32BFA830-A835",P:"0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100AB00B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F3A-0F3D0F850FD0-0FD4104A-104F10FB1361-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2E00-2E2E2E302E313001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65",Pd:"002D058A05BE140018062010-20152E172E1A301C303030A0FE31FE32FE58FE63FF0D",Ps:"0028005B007B0F3A0F3C169B201A201E2045207D208D23292768276A276C276E27702772277427C527E627E827EA27EC27EE2983298529872989298B298D298F299129932995299729D829DA29FC2E222E242E262E283008300A300C300E3010301430163018301A301DFD3EFE17FE35FE37FE39FE3BFE3DFE3FFE41FE43FE47FE59FE5BFE5DFF08FF3BFF5BFF5FFF62",Pe:"0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63",Pi:"00AB2018201B201C201F20392E022E042E092E0C2E1C2E20",Pf:"00BB2019201D203A2E032E052E0A2E0D2E1D2E21",Pc:"005F203F20402054FE33FE34FE4D-FE4FFF3F",Po:"0021-00230025-0027002A002C002E002F003A003B003F0040005C00A100B700BF037E0387055A-055F058905C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F850FD0-0FD4104A-104F10FB1361-1368166D166E16EB-16ED1735173617D4-17D617D8-17DA1800-18051807-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD3201620172020-20272030-2038203B-203E2041-20432047-205120532055-205E2CF9-2CFC2CFE2CFF2E002E012E06-2E082E0B2E0E-2E162E182E192E1B2E1E2E1F2E2A-2E2E2E302E313001-3003303D30FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFE10-FE16FE19FE30FE45FE46FE49-FE4CFE50-FE52FE54-FE57FE5F-FE61FE68FE6AFE6BFF01-FF03FF05-FF07FF0AFF0CFF0EFF0FFF1AFF1BFF1FFF20FF3CFF61FF64FF65",S:"0024002B003C-003E005E0060007C007E00A2-00A900AC00AE-00B100B400B600B800D700F702C2-02C502D2-02DF02E5-02EB02ED02EF-02FF03750384038503F604820606-0608060B060E060F06E906FD06FE07F609F209F309FA09FB0AF10B700BF3-0BFA0C7F0CF10CF20D790E3F0F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-139917DB194019E0-19FF1B61-1B6A1B74-1B7C1FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE20442052207A-207C208A-208C20A0-20B8210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B2140-2144214A-214D214F2190-2328232B-23E82400-24262440-244A249C-24E92500-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE27C0-27C427C7-27CA27CC27D0-27E527F0-29822999-29D729DC-29FB29FE-2B4C2B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F309B309C319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A700-A716A720A721A789A78AA828-A82BA836-A839AA77-AA79FB29FDFCFDFDFE62FE64-FE66FE69FF04FF0BFF1C-FF1EFF3EFF40FF5CFF5EFFE0-FFE6FFE8-FFEEFFFCFFFD",Sm:"002B003C-003E007C007E00AC00B100D700F703F60606-060820442052207A-207C208A-208C2140-2144214B2190-2194219A219B21A021A321A621AE21CE21CF21D221D421F4-22FF2308-230B23202321237C239B-23B323DC-23E125B725C125F8-25FF266F27C0-27C427C7-27CA27CC27D0-27E527F0-27FF2900-29822999-29D729DC-29FB29FE-2AFF2B30-2B442B47-2B4CFB29FE62FE64-FE66FF0BFF1C-FF1EFF5CFF5EFFE2FFE9-FFEC",Sc:"002400A2-00A5060B09F209F309FB0AF10BF90E3F17DB20A0-20B8A838FDFCFE69FF04FFE0FFE1FFE5FFE6",Sk:"005E006000A800AF00B400B802C2-02C502D2-02DF02E5-02EB02ED02EF-02FF0375038403851FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE309B309CA700-A716A720A721A789A78AFF3EFF40FFE3",So:"00A600A700A900AE00B000B60482060E060F06E906FD06FE07F609FA0B700BF3-0BF80BFA0C7F0CF10CF20D790F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-1399194019E0-19FF1B61-1B6A1B74-1B7C210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B214A214C214D214F2195-2199219C-219F21A121A221A421A521A7-21AD21AF-21CD21D021D121D321D5-21F32300-2307230C-231F2322-2328232B-237B237D-239A23B4-23DB23E2-23E82400-24262440-244A249C-24E92500-25B625B8-25C025C2-25F72600-266E2670-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE2800-28FF2B00-2B2F2B452B462B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A828-A82BA836A837A839AA77-AA79FDFDFFE4FFE8FFEDFFEEFFFCFFFD",Z:"002000A01680180E2000-200A20282029202F205F3000",Zs:"002000A01680180E2000-200A202F205F3000",Zl:"2028",Zp:"2029",C:"0000-001F007F-009F00AD03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-0605061C061D0620065F06DD070E070F074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17B417B517DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF200B-200F202A-202E2060-206F20722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-F8FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFD-FF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFFBFFFEFFFF",Cc:"0000-001F007F-009F",Cf:"00AD0600-060306DD070F17B417B5200B-200F202A-202E2060-2064206A-206FFEFFFFF9-FFFB",Co:"E000-F8FF",Cs:"D800-DFFF",Cn:"03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-05FF06040605061C061D0620065F070E074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF2065-206920722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-D7FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFDFEFEFF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFF8FFFEFFFF"})})),ace.define("ace/mode/text",["require","exports","module","ace/tokenizer","ace/mode/text_highlight_rules","ace/mode/behaviour/cstyle","ace/unicode","ace/lib/lang","ace/token_iterator","ace/range"],(function(e,t,n){"use strict";var i=e("../tokenizer").Tokenizer,r=e("./text_highlight_rules").TextHighlightRules,s=e("./behaviour/cstyle").CstyleBehaviour,a=e("../unicode"),o=e("../lib/lang"),c=e("../token_iterator").TokenIterator,l=e("../range").Range,u=function(){this.HighlightRules=r};(function(){this.$defaultBehaviour=new s,this.tokenRe=new RegExp("^["+a.packages.L+a.packages.Mn+a.packages.Mc+a.packages.Nd+a.packages.Pc+"\\$_]+","g"),this.nonTokenRe=new RegExp("^(?:[^"+a.packages.L+a.packages.Mn+a.packages.Mc+a.packages.Nd+a.packages.Pc+"\\$_]|\\s])+","g"),this.getTokenizer=function(){return this.$tokenizer||(this.$highlightRules=this.$highlightRules||new this.HighlightRules(this.$highlightRuleConfig),this.$tokenizer=new i(this.$highlightRules.getRules())),this.$tokenizer},this.lineCommentStart="",this.blockComment="",this.toggleCommentLines=function(e,t,n,i){var r=t.doc,s=!0,a=!0,c=1/0,l=t.getTabSize(),u=!1;if(this.lineCommentStart){if(Array.isArray(this.lineCommentStart))g=this.lineCommentStart.map(o.escapeRegExp).join("|"),f=this.lineCommentStart[0];else g=o.escapeRegExp(this.lineCommentStart),f=this.lineCommentStart;g=new RegExp("^(\\s*)(?:"+g+") ?"),u=t.getUseSoftTabs();b=function(e,t){var n=e.match(g);if(n){var i=n[1].length,s=n[0].length;h(e,i,s)||" "!=n[0][s-1]||s--,r.removeInLine(t,i,s)}};var d=f+" ",h=(v=function(e,t){s&&!/\S/.test(e)||(h(e,c,c)?r.insertInLine({row:t,column:c},d):r.insertInLine({row:t,column:c},f))},y=function(e,t){return g.test(e)},function(e,t,n){var i=0;while(t--&&" "==e.charAt(t))i++;if(i%l!=0)return!1;i=0;while(" "==e.charAt(n++))i++;return l>2?i%l!=l-1:i%l==0})}else{if(!this.blockComment)return!1;var f=this.blockComment.start,p=this.blockComment.end,g=new RegExp("^(\\s*)(?:"+o.escapeRegExp(f)+")"),m=new RegExp("(?:"+o.escapeRegExp(p)+")\\s*$"),v=function(e,t){y(e,t)||s&&!/\S/.test(e)||(r.insertInLine({row:t,column:e.length},p),r.insertInLine({row:t,column:c},f))},b=function(e,t){var n;(n=e.match(m))&&r.removeInLine(t,e.length-n[0].length,e.length),(n=e.match(g))&&r.removeInLine(t,n[1].length,n[0].length)},y=function(e,n){if(g.test(e))return!0;for(var i=t.getTokens(n),r=0;re.length&&(_=e.length)})),c==1/0&&(c=_,s=!1,a=!1),u&&c%l!=0&&(c=Math.floor(c/l)*l),w(a?b:v)},this.toggleBlockComment=function(e,t,n,i){var r=this.blockComment;if(r){!r.start&&r[0]&&(r=r[0]);var s,a,o=new c(t,i.row,i.column),u=o.getCurrentToken(),d=(t.selection,t.selection.toOrientedRange());if(u&&/comment/.test(u.type)){var h,f;while(u&&/comment/.test(u.type)){var p=u.value.indexOf(r.start);if(-1!=p){var g=o.getCurrentTokenRow(),m=o.getCurrentTokenColumn()+p;h=new l(g,m,g,m+r.start.length);break}u=o.stepBackward()}o=new c(t,i.row,i.column),u=o.getCurrentToken();while(u&&/comment/.test(u.type)){p=u.value.indexOf(r.end);if(-1!=p){g=o.getCurrentTokenRow(),m=o.getCurrentTokenColumn()+p;f=new l(g,m,g,m+r.end.length);break}u=o.stepForward()}f&&t.remove(f),h&&(t.remove(h),s=h.start.row,a=-r.start.length)}else a=r.start.length,s=n.start.row,t.insert(n.end,r.end),t.insert(n.start,r.start);d.start.row==s&&(d.start.column+=a),d.end.row==s&&(d.end.column+=a),t.selection.fromOrientedRange(d)}},this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.autoOutdent=function(e,t,n){},this.$getIndent=function(e){return e.match(/^\s*/)[0]},this.createWorker=function(e){return null},this.createModeDelegates=function(e){for(var t in this.$embeds=[],this.$modes={},e)e[t]&&(this.$embeds.push(t),this.$modes[t]=new e[t]);var n=["toggleBlockComment","toggleCommentLines","getNextLineIndent","checkOutdent","autoOutdent","transformAction","getCompletions"];for(t=0;tthis.row)){var n=t(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)}},this.setPosition=function(e,t,n){var i;if(i=n?{row:e,column:t}:this.$clipPositionToDocument(e,t),this.row!=i.row||this.column!=i.column){var r={row:this.row,column:this.column};this.row=i.row,this.column=i.column,this._signal("change",{old:r,value:i})}},this.detach=function(){this.document.removeEventListener("change",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on("change",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)})),ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"],(function(e,t,n){"use strict";var i=e("./lib/oop"),r=e("./apply_delta").applyDelta,s=e("./lib/event_emitter").EventEmitter,a=e("./range").Range,o=e("./anchor").Anchor,c=function(e){this.$lines=[""],0===e.length?this.$lines=[""]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){i.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new a(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new o(this,e,t)},0==="aaa".split(/a/).length?this.$split=function(e){return e.replace(/\r\n|\r/g,"\n").split("\n")}:this.$split=function(e){return e.split(/\r\n|\r|\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\r\n|\r|\n)/m);this.$autoNewLine=t?t[1]:"\n",this._signal("changeNewLineMode")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case"windows":return"\r\n";case"unix":return"\n";default:return this.$autoNewLine||"\n"}},this.$autoNewLine="",this.$newLineMode="auto",this.setNewLineMode=function(e){this.$newLineMode!==e&&(this.$newLineMode=e,this._signal("changeNewLineMode"))},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return"\r\n"==e||"\r"==e||"\n"==e},this.getLine=function(e){return this.$lines[e]||""},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{t=this.getLines(e.start.row,e.end.row),t[0]=(t[0]||"").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead."),this.insertMergedLines(e,["",""])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),i=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:i,action:"insert",lines:[t]},!0),this.clonePos(i)},this.clippedPos=function(e,t){var n=this.getLength();void 0===e?e=n:e<0?e=0:e>=n&&(e=n-1,t=void 0);var i=this.getLine(e);return void 0==t&&(t=i.length),t=Math.min(Math.max(t,0),i.length),{row:e,column:t}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){e=Math.min(Math.max(e,0),this.getLength());var n=0;e0,i=t=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:"remove",lines:["",""]})},this.replace=function(e,t){return e instanceof a||(e=a.fromPoints(e.start,e.end)),0===t.length&&e.isEmpty()?e.start:t==this.getTextRange(e)?e.end:(this.remove(e),n=t?this.insert(e.start,t):e.start,n);var n},this.applyDeltas=function(e){for(var t=0;t=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n="insert"==e.action;(n?e.lines.length<=1&&!e.lines[0]:!a.comparePoints(e.start,e.end))||(n&&e.lines.length>2e4&&this.$splitAndapplyLargeDelta(e,2e4),r(this.$lines,e,t),this._signal("change",e))},this.$splitAndapplyLargeDelta=function(e,t){var n=e.lines,i=n.length,r=e.start.row,s=e.start.column,a=0,o=0;do{a=o,o+=t-1;var c=n.slice(a,o);if(o>i){e.lines=c,e.start.row=r+a,e.start.column=s;break}c.push(""),this.applyDelta({start:this.pos(r+a,s),end:this.pos(r+o,s=0),action:e.action,lines:c},!0)}while(1)},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:"insert"==e.action?"remove":"insert",lines:e.lines.slice()})},this.indexToPosition=function(e,t){for(var n=this.$lines||this.getAllLines(),i=this.getNewLineCharacter().length,r=t||0,s=n.length;r20){n.running=setTimeout(n.$worker,20);break}}n.currentLine=t,-1==i&&(i=t),s<=i&&n.fireUpdateEvent(s,i)}}};(function(){i.implement(this,r),this.setTokenizer=function(e){this.tokenizer=e,this.lines=[],this.states=[],this.start(0)},this.setDocument=function(e){this.doc=e,this.lines=[],this.states=[],this.stop()},this.fireUpdateEvent=function(e,t){var n={first:e,last:t};this._signal("update",{data:n})},this.start=function(e){this.currentLine=Math.min(e||0,this.currentLine,this.doc.getLength()),this.lines.splice(this.currentLine,this.lines.length),this.states.splice(this.currentLine,this.states.length),this.stop(),this.running=setTimeout(this.$worker,700)},this.scheduleStart=function(){this.running||(this.running=setTimeout(this.$worker,700))},this.$updateOnChange=function(e){var t=e.start.row,n=e.end.row-t;if(0===n)this.lines[t]=null;else if("remove"==e.action)this.lines.splice(t,n+1,null),this.states.splice(t,n+1,null);else{var i=Array(n+1);i.unshift(t,1),this.lines.splice.apply(this.lines,i),this.states.splice.apply(this.states,i)}this.currentLine=Math.min(t,this.currentLine,this.doc.getLength()),this.stop()},this.stop=function(){this.running&&clearTimeout(this.running),this.running=!1},this.getTokens=function(e){return this.lines[e]||this.$tokenizeRow(e)},this.getState=function(e){return this.currentLine==e&&this.$tokenizeRow(e),this.states[e]||"start"},this.$tokenizeRow=function(e){var t=this.doc.getLine(e),n=this.states[e-1],i=this.tokenizer.getLineTokens(t,n,e);return this.states[e]+""!==i.state+""?(this.states[e]=i.state,this.lines[e+1]=null,this.currentLine>e+1&&(this.currentLine=e+1)):this.currentLine==e&&(this.currentLine=e+1),this.lines[e]=i.tokens}}).call(s.prototype),t.BackgroundTokenizer=s})),ace.define("ace/search_highlight",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"],(function(e,t,n){"use strict";var i=e("./lib/lang"),r=(e("./lib/oop"),e("./range").Range),s=function(e,t,n){this.setRegexp(e),this.clazz=t,this.type=n||"text"};(function(){this.MAX_RANGES=500,this.setRegexp=function(e){this.regExp+""!=e+""&&(this.regExp=e,this.cache=[])},this.update=function(e,t,n,s){if(this.regExp)for(var a=s.firstRow,o=s.lastRow,c=a;c<=o;c++){var l=this.cache[c];null==l&&(l=i.getMatchOffsets(n.getLine(c),this.regExp),l.length>this.MAX_RANGES&&(l=l.slice(0,this.MAX_RANGES)),l=l.map((function(e){return new r(c,e.offset,c,e.offset+e.length)})),this.cache[c]=l.length?l:"");for(var u=l.length;u--;)t.drawSingleLineMarker(e,l[u].toScreenRange(n),this.clazz,s)}}}).call(s.prototype),t.SearchHighlight=s})),ace.define("ace/edit_session/fold_line",["require","exports","module","ace/range"],(function(e,t,n){"use strict";var i=e("../range").Range;function r(e,t){this.foldData=e,Array.isArray(t)?this.folds=t:t=this.folds=[t];var n=t[t.length-1];this.range=new i(t[0].start.row,t[0].start.column,n.end.row,n.end.column),this.start=this.range.start,this.end=this.range.end,this.folds.forEach((function(e){e.setFoldLine(this)}),this)}(function(){this.shiftRow=function(e){this.start.row+=e,this.end.row+=e,this.folds.forEach((function(t){t.start.row+=e,t.end.row+=e}))},this.addFold=function(e){if(e.sameRow){if(e.start.rowthis.endRow)throw new Error("Can't add a fold to this FoldLine as it has no connection");this.folds.push(e),this.folds.sort((function(e,t){return-e.range.compareEnd(t.start.row,t.start.column)})),this.range.compareEnd(e.start.row,e.start.column)>0?(this.end.row=e.end.row,this.end.column=e.end.column):this.range.compareStart(e.end.row,e.end.column)<0&&(this.start.row=e.start.row,this.start.column=e.start.column)}else if(e.start.row==this.end.row)this.folds.push(e),this.end.row=e.end.row,this.end.column=e.end.column;else{if(e.end.row!=this.start.row)throw new Error("Trying to add fold to FoldRow that doesn't have a matching row");this.folds.unshift(e),this.start.row=e.start.row,this.start.column=e.start.column}e.foldLine=this},this.containsRow=function(e){return e>=this.start.row&&e<=this.end.row},this.walk=function(e,t,n){var i,r,s,a=0,o=this.folds,c=!0;null==t&&(t=this.end.row,n=this.end.column);for(var l=0;l0)){var c=r(e,a.start);return 0===o?t&&0!==c?-s-2:s:c>0||0===c&&!t?s:-s-1}}return-s-1},this.add=function(e){var t=!e.isEmpty(),n=this.pointIndex(e.start,t);n<0&&(n=-n-1);var i=this.pointIndex(e.end,t,n);return i<0?i=-i-1:i++,this.ranges.splice(n,i-n,e)},this.addList=function(e){for(var t=[],n=e.length;n--;)t.push.apply(t,this.add(e[n]));return t},this.substractPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges.splice(t,1)},this.merge=function(){var e=[],t=this.ranges;t=t.sort((function(e,t){return r(e.start,t.start)}));for(var n,i=t[0],s=1;s=0},this.containsPoint=function(e){return this.pointIndex(e)>=0},this.rangeAtPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges[t]},this.clipRows=function(e,t){var n=this.ranges;if(n[0].start.row>t||n[n.length-1].start.rowi)break;if(u.start.row==i&&u.start.column>=t.column&&(u.start.column==t.column&&this.$insertRight||(u.start.column+=a,u.start.row+=s)),u.end.row==i&&u.end.column>=t.column){if(u.end.column==t.column&&this.$insertRight)continue;u.end.column==t.column&&a>0&&cu.start.column&&u.end.column==o[c+1].start.column&&(u.end.column-=a),u.end.column+=a,u.end.row+=s}}}if(0!=s&&c=e)return r;if(r.end.row>e)return null}return null},this.getNextFoldLine=function(e,t){var n=this.$foldData,i=0;for(t&&(i=n.indexOf(t)),-1==i&&(i=0),i;i=e)return r}return null},this.getFoldedRowCount=function(e,t){for(var n=this.$foldData,i=t-e+1,r=0;r=t){o=e?i-=t-o:i=0);break}a>=e&&(i-=o>=e?a-o:a-e+1)}return i},this.$addFoldLine=function(e){return this.$foldData.push(e),this.$foldData.sort((function(e,t){return e.start.row-t.start.row})),e},this.addFold=function(e,t){var n,i=this.$foldData,a=!1;e instanceof s?n=e:(n=new s(t,e),n.collapseChildren=t.collapseChildren),this.$clipRangeToDocument(n.range);var o=n.start.row,c=n.start.column,l=n.end.row,u=n.end.column;if(!(o0&&(this.removeFolds(f),f.forEach((function(e){n.addSubFold(e)})));for(var p=0;p0&&this.foldAll(e.start.row+1,e.end.row,e.collapseChildren-1),e.subFolds=[]},this.expandFolds=function(e){e.forEach((function(e){this.expandFold(e)}),this)},this.unfold=function(e,t){var n,r;if(null==e?(n=new i(0,0,this.getLength(),0),t=!0):n="number"==typeof e?new i(e,0,e,this.getLine(e).length):"row"in e?i.fromPoints(e,e):e,r=this.getFoldsInRangeList(n),t)this.removeFolds(r);else{var s=r;while(s.length)this.expandFolds(s),s=this.getFoldsInRangeList(n)}if(r.length)return r},this.isRowFolded=function(e,t){return!!this.getFoldLine(e,t)},this.getRowFoldEnd=function(e,t){var n=this.getFoldLine(e,t);return n?n.end.row:e},this.getRowFoldStart=function(e,t){var n=this.getFoldLine(e,t);return n?n.start.row:e},this.getFoldDisplayLine=function(e,t,n,i,r){null==i&&(i=e.start.row),null==r&&(r=0),null==t&&(t=e.end.row),null==n&&(n=this.getLine(t).length);var s=this.doc,a="";return e.walk((function(e,t,n,o){if(!(tu)break}while(s&&c.test(s.type));s=r.stepBackward()}else s=r.getCurrentToken();return l.end.row=r.getCurrentTokenRow(),l.end.column=r.getCurrentTokenColumn()+s.value.length-2,l}},this.foldAll=function(e,t,n){void 0==n&&(n=1e5);var i=this.foldWidgets;if(i){t=t||this.getLength(),e=e||0;for(var r=e;r=e){r=s.end.row;try{var a=this.addFold("...",s);a&&(a.collapseChildren=n)}catch(o){}}}}},this.$foldStyles={manual:1,markbegin:1,markbeginend:1},this.$foldStyle="markbegin",this.setFoldStyle=function(e){if(!this.$foldStyles[e])throw new Error("invalid fold style: "+e+"["+Object.keys(this.$foldStyles).join(", ")+"]");if(this.$foldStyle!=e){this.$foldStyle=e,"manual"==e&&this.unfold();var t=this.$foldMode;this.$setFolding(null),this.$setFolding(t)}},this.$setFolding=function(e){this.$foldMode!=e&&(this.$foldMode=e,this.off("change",this.$updateFoldWidgets),this.off("tokenizerUpdate",this.$tokenizerUpdateFoldWidgets),this._signal("changeAnnotation"),e&&"manual"!=this.$foldStyle?(this.foldWidgets=[],this.getFoldWidget=e.getFoldWidget.bind(e,this,this.$foldStyle),this.getFoldWidgetRange=e.getFoldWidgetRange.bind(e,this,this.$foldStyle),this.$updateFoldWidgets=this.updateFoldWidgets.bind(this),this.$tokenizerUpdateFoldWidgets=this.tokenizerUpdateFoldWidgets.bind(this),this.on("change",this.$updateFoldWidgets),this.on("tokenizerUpdate",this.$tokenizerUpdateFoldWidgets)):this.foldWidgets=null)},this.getParentFoldRangeData=function(e,t){var n=this.foldWidgets;if(!n||t&&n[e])return{};var i,r=e-1;while(r>=0){var s=n[r];if(null==s&&(s=n[r]=this.getFoldWidget(r)),"start"==s){var a=this.getFoldWidgetRange(r);if(i||(i=a),a&&a.end.row>=e)break}r--}return{range:-1!==r&&a,firstRange:i}},this.onFoldWidgetClick=function(e,t){t=t.domEvent;var n={children:t.shiftKey,all:t.ctrlKey||t.metaKey,siblings:t.altKey},i=this.$toggleFoldWidget(e,n);if(!i){var r=t.target||t.srcElement;r&&/ace_fold-widget/.test(r.className)&&(r.className+=" ace_invalid")}},this.$toggleFoldWidget=function(e,t){if(this.getFoldWidget){var n=this.getFoldWidget(e),i=this.getLine(e),r="end"===n?-1:1,s=this.getFoldAt(e,-1===r?0:i.length,r);if(s)return t.children||t.all?this.removeFold(s):this.expandFold(s),s;var a=this.getFoldWidgetRange(e,!0);if(a&&!a.isMultiLine()&&(s=this.getFoldAt(a.start.row,a.start.column,1),s&&a.isEqual(s.range)))return this.removeFold(s),s;if(t.siblings){var o=this.getParentFoldRangeData(e);if(o.range)var c=o.range.start.row+1,l=o.range.end.row;this.foldAll(c,l,t.all?1e4:0)}else t.children?(l=a?a.end.row:this.getLength(),this.foldAll(e+1,l,t.all?1e4:0)):a&&(t.all&&(a.collapseChildren=1e4),this.addFold("...",a));return a}},this.toggleFoldWidget=function(e){var t=this.selection.getCursor().row;t=this.getRowFoldStart(t);var n=this.$toggleFoldWidget(t,{});if(!n){var i=this.getParentFoldRangeData(t,!0);if(n=i.range||i.firstRange,n){t=n.start.row;var r=this.getFoldAt(t,this.getLine(t).length,1);r?this.removeFold(r):this.addFold("...",n)}}},this.updateFoldWidgets=function(e){var t=e.start.row,n=e.end.row-t;if(0===n)this.foldWidgets[t]=null;else if("remove"==e.action)this.foldWidgets.splice(t,n+1,null);else{var i=Array(n+1);i.unshift(t,1),this.foldWidgets.splice.apply(this.foldWidgets,i)}},this.tokenizerUpdateFoldWidgets=function(e){var t=e.data;t.first!=t.last&&this.foldWidgets.length>t.first&&this.foldWidgets.splice(t.first,this.foldWidgets.length)}}t.Folding=o})),ace.define("ace/edit_session/bracket_match",["require","exports","module","ace/token_iterator","ace/range"],(function(e,t,n){"use strict";var i=e("../token_iterator").TokenIterator,r=e("../range").Range;function s(){this.findMatchingBracket=function(e,t){if(0==e.column)return null;var n=t||this.getLine(e.row).charAt(e.column-1);if(""==n)return null;var i=n.match(/([\(\[\{])|([\)\]\}])/);return i?i[1]?this.$findClosingBracket(i[1],e):this.$findOpeningBracket(i[2],e):null},this.getBracketRange=function(e){var t,n=this.getLine(e.row),i=!0,s=n.charAt(e.column-1),a=s&&s.match(/([\(\[\{])|([\)\]\}])/);if(a||(s=n.charAt(e.column),e={row:e.row,column:e.column+1},a=s&&s.match(/([\(\[\{])|([\)\]\}])/),i=!1),!a)return null;if(a[1]){var o=this.$findClosingBracket(a[1],e);if(!o)return null;t=r.fromPoints(e,o),i||(t.end.column++,t.start.column--),t.cursor=t.end}else{o=this.$findOpeningBracket(a[2],e);if(!o)return null;t=r.fromPoints(o,e),i||(t.start.column++,t.end.column--),t.cursor=t.start}return t},this.$brackets={")":"(","(":")","]":"[","[":"]","{":"}","}":"{"},this.$findOpeningBracket=function(e,t,n){var r=this.$brackets[e],s=1,a=new i(this,t.row,t.column),o=a.getCurrentToken();if(o||(o=a.stepForward()),o){n||(n=new RegExp("(\\.?"+o.type.replace(".","\\.").replace("rparen",".paren").replace(/\b(?:end)\b/,"(?:start|begin|end)")+")+"));var c=t.column-a.getCurrentTokenColumn()-2,l=o.value;while(1){while(c>=0){var u=l.charAt(c);if(u==r){if(s-=1,0==s)return{row:a.getCurrentTokenRow(),column:c+a.getCurrentTokenColumn()}}else u==e&&(s+=1);c-=1}do{o=a.stepBackward()}while(o&&!n.test(o.type));if(null==o)break;l=o.value,c=l.length-1}return null}},this.$findClosingBracket=function(e,t,n){var r=this.$brackets[e],s=1,a=new i(this,t.row,t.column),o=a.getCurrentToken();if(o||(o=a.stepForward()),o){n||(n=new RegExp("(\\.?"+o.type.replace(".","\\.").replace("lparen",".paren").replace(/\b(?:start|begin)\b/,"(?:start|begin|end)")+")+"));var c=t.column-a.getCurrentTokenColumn();while(1){var l=o.value,u=l.length;while(cn&&(this.$docRowCache.splice(n,t),this.$screenRowCache.splice(n,t))},this.$getRowCacheIndex=function(e,t){var n=0,i=e.length-1;while(n<=i){var r=n+i>>1,s=e[r];if(t>s)n=r+1;else{if(!(t=t)break;return n=i[s],n?(n.index=s,n.start=r-n.value.length,n):null},this.setUndoManager=function(e){if(this.$undoManager=e,this.$deltas=[],this.$deltasDoc=[],this.$deltasFold=[],this.$informUndoManager&&this.$informUndoManager.cancel(),e){var t=this;this.$syncInformUndoManager=function(){t.$informUndoManager.cancel(),t.$deltasFold.length&&(t.$deltas.push({group:"fold",deltas:t.$deltasFold}),t.$deltasFold=[]),t.$deltasDoc.length&&(t.$deltas.push({group:"doc",deltas:t.$deltasDoc}),t.$deltasDoc=[]),t.$deltas.length>0&&e.execute({action:"aceupdate",args:[t.$deltas,t],merge:t.mergeUndoDeltas}),t.mergeUndoDeltas=!1,t.$deltas=[]},this.$informUndoManager=r.delayedCall(this.$syncInformUndoManager)}},this.markUndoGroup=function(){this.$syncInformUndoManager&&this.$syncInformUndoManager()},this.$defaultUndoManager={undo:function(){},redo:function(){},reset:function(){}},this.getUndoManager=function(){return this.$undoManager||this.$defaultUndoManager},this.getTabString=function(){return this.getUseSoftTabs()?r.stringRepeat(" ",this.getTabSize()):"\t"},this.setUseSoftTabs=function(e){this.setOption("useSoftTabs",e)},this.getUseSoftTabs=function(){return this.$useSoftTabs&&!this.$mode.$indentWithTabs},this.setTabSize=function(e){this.setOption("tabSize",e)},this.getTabSize=function(){return this.$tabSize},this.isTabStop=function(e){return this.$useSoftTabs&&e.column%this.$tabSize===0},this.setNavigateWithinSoftTabs=function(e){this.setOption("navigateWithinSoftTabs",e)},this.getNavigateWithinSoftTabs=function(){return this.$navigateWithinSoftTabs},this.$overwrite=!1,this.setOverwrite=function(e){this.setOption("overwrite",e)},this.getOverwrite=function(){return this.$overwrite},this.toggleOverwrite=function(){this.setOverwrite(!this.$overwrite)},this.addGutterDecoration=function(e,t){this.$decorations[e]||(this.$decorations[e]=""),this.$decorations[e]+=" "+t,this._signal("changeBreakpoint",{})},this.removeGutterDecoration=function(e,t){this.$decorations[e]=(this.$decorations[e]||"").replace(" "+t,""),this._signal("changeBreakpoint",{})},this.getBreakpoints=function(){return this.$breakpoints},this.setBreakpoints=function(e){this.$breakpoints=[];for(var t=0;t0&&(i=!!n.charAt(t-1).match(this.tokenRe)),i||(i=!!n.charAt(t).match(this.tokenRe)),i)var r=this.tokenRe;else if(/^\s+$/.test(n.slice(t-1,t+1)))r=/\s/;else r=this.nonTokenRe;var s=t;if(s>0){do{s--}while(s>=0&&n.charAt(s).match(r));s++}var a=t;while(ae&&(e=t.screenWidth)})),this.lineWidgetWidth=e},this.$computeWidth=function(e){if(this.$modified||e){if(this.$modified=!1,this.$useWrapMode)return this.screenWidth=this.$wrapLimit;for(var t=this.doc.getAllLines(),n=this.$rowLengthCache,i=0,r=0,s=this.$foldData[r],a=s?s.start.row:1/0,o=t.length,c=0;ca){if(c=s.end.row+1,c>=o)break;s=this.$foldData[r++],a=s?s.start.row:1/0}null==n[c]&&(n[c]=this.$getStringScreenWidth(t[c])[0]),n[c]>i&&(i=n[c])}this.screenWidth=i}},this.getLine=function(e){return this.doc.getLine(e)},this.getLines=function(e,t){return this.doc.getLines(e,t)},this.getLength=function(){return this.doc.getLength()},this.getTextRange=function(e){return this.doc.getTextRange(e||this.selection.getRange())},this.insert=function(e,t){return this.doc.insert(e,t)},this.remove=function(e){return this.doc.remove(e)},this.removeFullLines=function(e,t){return this.doc.removeFullLines(e,t)},this.undoChanges=function(e,t){if(e.length){this.$fromUndo=!0;for(var n=null,i=e.length-1;-1!=i;i--){var r=e[i];"doc"==r.group?(this.doc.revertDeltas(r.deltas),n=this.$getUndoSelection(r.deltas,!0,n)):r.deltas.forEach((function(e){this.addFolds(e.folds)}),this)}return this.$fromUndo=!1,n&&this.$undoSelect&&!t&&this.selection.setSelectionRange(n),n}},this.redoChanges=function(e,t){if(e.length){this.$fromUndo=!0;for(var n=null,i=0;ie.end.column&&(s.start.column+=o),s.end.row==e.end.row&&s.end.column>e.end.column&&(s.end.column+=o)),a&&s.start.row>=e.end.row&&(s.start.row+=a,s.end.row+=a)}if(s.end=this.insert(s.start,i),r.length){var c=e.start,l=s.start;a=l.row-c.row,o=l.column-c.column;this.addFolds(r.map((function(e){return e=e.clone(),e.start.row==c.row&&(e.start.column+=o),e.end.row==c.row&&(e.end.column+=o),e.start.row+=a,e.end.row+=a,e})))}return s},this.indentRows=function(e,t,n){n=n.replace(/\t/g,this.getTabString());for(var i=e;i<=t;i++)this.doc.insertInLine({row:i,column:0},n)},this.outdentRows=function(e){for(var t=e.collapseRows(),n=new u(0,0,0,0),i=this.getTabSize(),r=t.start.row;r<=t.end.row;++r){var s=this.getLine(r);n.start.row=r,n.end.row=r;for(var a=0;a0){i=this.getRowFoldEnd(t+n);if(i>this.doc.getLength()-1)return 0;r=i-t}else{e=this.$clipRowToDocument(e),t=this.$clipRowToDocument(t);r=t-e+1}var s=new u(e,0,t,Number.MAX_VALUE),a=this.getFoldsInRange(s).map((function(e){return e=e.clone(),e.start.row+=r,e.end.row+=r,e})),o=0==n?this.doc.getLines(e,t):this.doc.removeFullLines(e,t);return this.doc.insertFullLines(e+r,o),a.length&&this.addFolds(a),r},this.moveLinesUp=function(e,t){return this.$moveLines(e,t,-1)},this.moveLinesDown=function(e,t){return this.$moveLines(e,t,1)},this.duplicateLines=function(e,t){return this.$moveLines(e,t,0)},this.$clipRowToDocument=function(e){return Math.max(0,Math.min(e,this.doc.getLength()-1))},this.$clipColumnToRow=function(e,t){return t<0?0:Math.min(this.doc.getLine(e).length,t)},this.$clipPositionToDocument=function(e,t){if(t=Math.max(0,t),e<0)e=0,t=0;else{var n=this.doc.getLength();e>=n?(e=n-1,t=this.doc.getLine(n-1).length):t=Math.min(this.doc.getLine(e).length,t)}return{row:e,column:t}},this.$clipRangeToDocument=function(e){e.start.row<0?(e.start.row=0,e.start.column=0):e.start.column=this.$clipColumnToRow(e.start.row,e.start.column);var t=this.doc.getLength()-1;return e.end.row>t?(e.end.row=t,e.end.column=this.doc.getLine(t).length):e.end.column=this.$clipColumnToRow(e.end.row,e.end.column),e},this.$wrapLimit=80,this.$useWrapMode=!1,this.$wrapLimitRange={min:null,max:null},this.setUseWrapMode=function(e){if(e!=this.$useWrapMode){if(this.$useWrapMode=e,this.$modified=!0,this.$resetRowCache(0),e){var t=this.getLength();this.$wrapData=Array(t),this.$updateWrapData(0,t-1)}this._signal("changeWrapMode")}},this.getUseWrapMode=function(){return this.$useWrapMode},this.setWrapLimitRange=function(e,t){this.$wrapLimitRange.min===e&&this.$wrapLimitRange.max===t||(this.$wrapLimitRange={min:e,max:t},this.$modified=!0,this.$bidiHandler.markAsDirty(),this.$useWrapMode&&this._signal("changeWrapMode"))},this.adjustWrapLimit=function(e,t){var n=this.$wrapLimitRange;n.max<0&&(n={min:t,max:t});var i=this.$constrainWrapLimit(e,n.min,n.max);return i!=this.$wrapLimit&&i>1&&(this.$wrapLimit=i,this.$modified=!0,this.$useWrapMode&&(this.$updateWrapData(0,this.getLength()-1),this.$resetRowCache(0),this._signal("changeWrapLimit")),!0)},this.$constrainWrapLimit=function(e,t,n){return t&&(e=Math.max(t,e)),n&&(e=Math.min(n,e)),e},this.getWrapLimit=function(){return this.$wrapLimit},this.setWrapLimit=function(e){this.setWrapLimitRange(e,e)},this.getWrapLimitRange=function(){return{min:this.$wrapLimitRange.min,max:this.$wrapLimitRange.max}},this.$updateInternalDataOnChange=function(e){var t=this.$useWrapMode,n=e.action,i=e.start,r=e.end,s=i.row,a=r.row,o=a-s,c=null;if(this.$updating=!0,0!=o)if("remove"===n){this[t?"$wrapData":"$rowLengthCache"].splice(s,o);var l=this.$foldData;c=this.getFoldsInRange(e),this.removeFolds(c);var u=this.getFoldLine(r.row),d=0;if(u){u.addRemoveChars(r.row,r.column,i.column-r.column),u.shiftRow(-o);var h=this.getFoldLine(s);h&&h!==u&&(h.merge(u),u=h),d=l.indexOf(u)+1}for(d;d=r.row&&u.shiftRow(-o)}a=s}else{var f=Array(o);f.unshift(s,0);var p=t?this.$wrapData:this.$rowLengthCache;p.splice.apply(p,f);l=this.$foldData,u=this.getFoldLine(s),d=0;if(u){var g=u.range.compareInside(i.row,i.column);0==g?(u=u.split(i.row,i.column),u&&(u.shiftRow(o),u.addRemoveChars(a,0,r.column-i.column))):-1==g&&(u.addRemoveChars(s,0,r.column-i.column),u.shiftRow(o)),d=l.indexOf(u)+1}for(d;d=s&&u.shiftRow(o)}}else{o=Math.abs(e.start.column-e.end.column),"remove"===n&&(c=this.getFoldsInRange(e),this.removeFolds(c),o=-o);u=this.getFoldLine(s);u&&u.addRemoveChars(s,i.column,o)}return t&&this.$wrapData.length!=this.doc.getLength()&&console.error("doc.getLength() and $wrapData.length have to be the same!"),this.$updating=!1,t?this.$updateWrapData(s,a):this.$updateRowLengthCache(s,a),c},this.$updateRowLengthCache=function(e,t,n){this.$rowLengthCache[e]=null,this.$rowLengthCache[t]=null},this.$updateWrapData=function(e,t){var i,r,a=this.doc.getAllLines(),o=this.getTabSize(),c=this.$wrapData,l=this.$wrapLimit,u=e;t=Math.min(t,a.length-1);while(u<=t)r=this.getFoldLine(u,r),r?(i=[],r.walk(function(e,t,r,o){var c;if(null!=e){c=this.$getDisplayTokens(e,i.length),c[0]=n;for(var l=1;l=4352&&e<=4447||e>=4515&&e<=4519||e>=4602&&e<=4607||e>=9001&&e<=9002||e>=11904&&e<=11929||e>=11931&&e<=12019||e>=12032&&e<=12245||e>=12272&&e<=12283||e>=12288&&e<=12350||e>=12353&&e<=12438||e>=12441&&e<=12543||e>=12549&&e<=12589||e>=12593&&e<=12686||e>=12688&&e<=12730||e>=12736&&e<=12771||e>=12784&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=13054||e>=13056&&e<=19903||e>=19968&&e<=42124||e>=42128&&e<=42182||e>=43360&&e<=43388||e>=44032&&e<=55203||e>=55216&&e<=55238||e>=55243&&e<=55291||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=65281&&e<=65376||e>=65504&&e<=65510)}this.$computeWrapSplits=function(e,i,r){if(0==e.length)return[];var a=[],o=e.length,l=0,u=0,h=this.$wrapAsCode,f=this.$indentedSoftWrap,m=i<=Math.max(2*r,8)||!1===f?0:Math.floor(i/2);function v(){var t=0;if(0===m)return t;if(f)for(var n=0;ni-y){var w=l+i-y;if(e[w-1]>=d&&e[w]>=d)b(w);else if(e[w]!=n&&e[w]!=s){var _=Math.max(w-(i-(i>>2)),l-1);while(w>_&&e[w]_&&e[w]_&&e[w]==c)w--}else while(w>_&&e[w]_?b(++w):(w=l+i,e[w]==t&&w--,b(w-y))}else{for(w;w!=l-1;w--)if(e[w]==n)break;if(w>l){b(w);continue}for(w=l+i,w;w39&&o<48||o>57&&o<64?s.push(c):o>=4352&&m(o)?s.push(e,t):s.push(e)}return s},this.$getStringScreenWidth=function(e,t,n){if(0==t)return[0,0];var i,r;for(null==t&&(t=1/0),n=n||0,r=0;r=4352&&m(i)?n+=2:n+=1,n>t)break;return[n,r]},this.lineWidgets=null,this.getRowLength=function(e){if(this.lineWidgets)var t=this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0;else t=0;return this.$useWrapMode&&this.$wrapData[e]?this.$wrapData[e].length+1+t:1+t},this.getRowLineCount=function(e){return this.$useWrapMode&&this.$wrapData[e]?this.$wrapData[e].length+1:1},this.getRowWrapIndent=function(e){if(this.$useWrapMode){var t=this.screenToDocumentPosition(e,Number.MAX_VALUE),n=this.$wrapData[t.row];return n.length&&n[0]=0){o=l[u],s=this.$docRowCache[u];var h=e>l[d-1]}else h=!d;var f=this.getLength()-1,p=this.getNextFoldLine(s),g=p?p.start.row:1/0;while(o<=e){if(c=this.getRowLength(s),o+c>e||s>=f)break;o+=c,s++,s>g&&(s=p.end.row+1,p=this.getNextFoldLine(s,p),g=p?p.start.row:1/0),h&&(this.$docRowCache.push(s),this.$screenRowCache.push(o))}if(p&&p.start.row<=s)i=this.getFoldDisplayLine(p),s=p.start.row;else{if(o+c<=e||s>f)return{row:f,column:this.getLine(f).length};i=this.getLine(s),p=null}var m=0,v=Math.floor(e-o);if(this.$useWrapMode){var b=this.$wrapData[s];b&&(r=b[v],v>0&&b.length&&(m=b.indent,a=b[v-1]||b[b.length-1],i=i.substring(a)))}return void 0!==n&&this.$bidiHandler.isBidiRow(o+v,s,v)&&(t=this.$bidiHandler.offsetToCol(n)),a+=this.$getStringScreenWidth(i,t-m)[1],this.$useWrapMode&&a>=r&&(a=r-1),p?p.idxToPosition(a):{row:s,column:a}},this.documentToScreenPosition=function(e,t){if("undefined"===typeof t)var n=this.$clipPositionToDocument(e.row,e.column);else n=this.$clipPositionToDocument(e,t);e=n.row,t=n.column;var i=0,r=null,s=null;s=this.getFoldAt(e,t,1),s&&(e=s.start.row,t=s.start.column);var a,o=0,c=this.$docRowCache,l=this.$getRowCacheIndex(c,e),u=c.length;if(u&&l>=0){o=c[l],i=this.$screenRowCache[l];var d=e>c[u-1]}else d=!u;var h=this.getNextFoldLine(o),f=h?h.start.row:1/0;while(o=f){if(a=h.end.row+1,a>e)break;h=this.getNextFoldLine(a,h),f=h?h.start.row:1/0}else a=o+1;i+=this.getRowLength(o),o=a,d&&(this.$docRowCache.push(o),this.$screenRowCache.push(i))}var p="";h&&o>=f?(p=this.getFoldDisplayLine(h,e,t),r=h.start.row):(p=this.getLine(e).substring(0,t),r=e);var g=0;if(this.$useWrapMode){var m=this.$wrapData[r];if(m){var v=0;while(p.length>=m[v])i++,v++;p=p.substring(m[v-1]||0,p.length),g=v>0?m.indent:0}}return{row:i,column:g+this.$getStringScreenWidth(p)[0]}},this.documentToScreenColumn=function(e,t){return this.documentToScreenPosition(e,t).column},this.documentToScreenRow=function(e,t){return this.documentToScreenPosition(e,t).row},this.getScreenLength=function(){var e=0,t=null;if(this.$useWrapMode){var n=this.$wrapData.length,i=0,r=(o=0,t=this.$foldData[o++],t?t.start.row:1/0);while(ir&&(i=t.end.row+1,t=this.$foldData[o++],r=t?t.start.row:1/0)}}else{e=this.getLength();for(var a=this.$foldData,o=0;on)break;return[i,s]})},this.destroy=function(){this.bgTokenizer&&(this.bgTokenizer.setDocument(null),this.bgTokenizer=null),this.$stopWorker()},this.isFullWidth=m}.call(p.prototype),e("./edit_session/folding").Folding.call(p.prototype),e("./edit_session/bracket_match").BracketMatch.call(p.prototype),a.defineOptions(p.prototype,"session",{wrap:{set:function(e){if(e&&"off"!=e?"free"==e?e=!0:"printMargin"==e?e=-1:"string"==typeof e&&(e=parseInt(e,10)||!1):e=!1,this.$wrap!=e)if(this.$wrap=e,e){var t="number"==typeof e?e:null;this.setWrapLimitRange(t,t),this.setUseWrapMode(!0)}else this.setUseWrapMode(!1)},get:function(){return this.getUseWrapMode()?-1==this.$wrap?"printMargin":this.getWrapLimitRange().min?this.$wrap:"free":"off"},handlesSet:!0},wrapMethod:{set:function(e){e="auto"==e?"text"!=this.$mode.type:"text"!=e,e!=this.$wrapAsCode&&(this.$wrapAsCode=e,this.$useWrapMode&&(this.$modified=!0,this.$resetRowCache(0),this.$updateWrapData(0,this.getLength()-1)))},initialValue:"auto"},indentedSoftWrap:{initialValue:!0},firstLineNumber:{set:function(){this._signal("changeBreakpoint")},initialValue:1},useWorker:{set:function(e){this.$useWorker=e,this.$stopWorker(),e&&this.$startWorker()},initialValue:!0},useSoftTabs:{initialValue:!0},tabSize:{set:function(e){isNaN(e)||this.$tabSize===e||(this.$modified=!0,this.$rowLengthCache=[],this.$tabSize=e,this._signal("changeTabSize"))},initialValue:4,handlesSet:!0},navigateWithinSoftTabs:{initialValue:!1},overwrite:{set:function(e){this._signal("changeOverwrite")},initialValue:!1},newLineMode:{set:function(e){this.doc.setNewLineMode(e)},get:function(){return this.doc.getNewLineMode()},handlesSet:!0},mode:{set:function(e){this.setMode(e)},get:function(){return this.$modeId}}}),t.EditSession=p})),ace.define("ace/search",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"],(function(e,t,n){"use strict";var i=e("./lib/lang"),r=e("./lib/oop"),s=e("./range").Range,a=function(){this.$options={}};function o(e,t){function n(e){return/\w/.test(e)||t.regExp?"\\b":""}return n(e[0])+e+n(e[e.length-1])}(function(){this.set=function(e){return r.mixin(this.$options,e),this},this.getOptions=function(){return i.copyObject(this.$options)},this.setOptions=function(e){this.$options=e},this.find=function(e){var t=this.$options,n=this.$matchIterator(e,t);if(!n)return!1;var i=null;return n.forEach((function(e,n,r,a){return i=new s(e,n,r,a),!(n==a&&t.start&&t.start.start&&0!=t.skipCurrent&&i.isEqual(t.start))||(i=null,!1)})),i},this.findAll=function(e){var t=this.$options;if(!t.needle)return[];this.$assembleRegExp(t);var n=t.range,r=n?e.getLines(n.start.row,n.end.row):e.doc.getAllLines(),a=[],o=t.re;if(t.$isMultiLine){var c,l=o.length,u=r.length-l;e:for(var d=o.offset||0;d<=u;d++){for(var h=0;hg||(a.push(c=new s(d,g,d+l-1,m)),l>2&&(d=d+l-2))}}else for(var v=0;v_&&a[h].end.row==n.end.row)h--;for(a=a.slice(v,h+1),v=0,h=a.length;v=o;n--)if(d(n,Number.MAX_VALUE,e))return;if(0!=t.wrap)for(n=c,o=a.row;n>=o;n--)if(d(n,Number.MAX_VALUE,e))return}};else l=function(e){var n=a.row;if(!d(n,a.column,e)){for(n+=1;n<=c;n++)if(d(n,0,e))return;if(0!=t.wrap)for(n=o,c=a.row;n<=c;n++)if(d(n,0,e))return}};if(t.$isMultiLine)var u=n.length,d=function(t,r,s){var a=i?t-u+1:t;if(!(a<0)){var o=e.getLine(a),c=o.search(n[0]);if(!(!i&&cr))return!!s(a,c,a+u-1,d)||void 0}}};else if(i)d=function(t,i,r){var s,a=e.getLine(t),o=[],c=0;n.lastIndex=0;while(s=n.exec(a)){var l=s[0].length;if(c=s.index,!l){if(c>=a.length)break;n.lastIndex=c+=1}if(s.index+l>i)break;o.push(s.index,l)}for(var u=o.length-1;u>=0;u-=2){var d=o[u-1];l=o[u];if(r(t,d,t,d+l))return!0}};else d=function(t,i,r){var s,a=e.getLine(t),o=i;n.lastIndex=i;while(s=n.exec(a)){var c=s[0].length;if(o=s.index,r(t,o,t,o+c))return!0;if(!c&&(n.lastIndex=o+=1,o>=a.length))return!1}};return{forEach:l}}}).call(a.prototype),t.Search=a})),ace.define("ace/keyboard/hash_handler",["require","exports","module","ace/lib/keys","ace/lib/useragent"],(function(e,t,n){"use strict";var i=e("../lib/keys"),r=e("../lib/useragent"),s=i.KEY_MODS;function a(e,t){this.platform=t||(r.isMac?"mac":"win"),this.commands={},this.commandKeyBinding={},this.addCommands(e),this.$singleCommand=!0}function o(e,t){a.call(this,e,t),this.$singleCommand=!1}o.prototype=a.prototype,function(){function e(e){return"object"==typeof e&&e.bindKey&&e.bindKey.position||(e.isDefault?-100:0)}this.addCommand=function(e){this.commands[e.name]&&this.removeCommand(e),this.commands[e.name]=e,e.bindKey&&this._buildKeyHash(e)},this.removeCommand=function(e,t){var n=e&&("string"===typeof e?e:e.name);e=this.commands[n],t||delete this.commands[n];var i=this.commandKeyBinding;for(var r in i){var s=i[r];if(s==e)delete i[r];else if(Array.isArray(s)){var a=s.indexOf(e);-1!=a&&(s.splice(a,1),1==s.length&&(i[r]=s[0]))}}},this.bindKey=function(e,t,n){if("object"==typeof e&&e&&(void 0==n&&(n=e.position),e=e[this.platform]),e)return"function"==typeof t?this.addCommand({exec:t,bindKey:e,name:t.name||e}):void e.split("|").forEach((function(e){var i="";if(-1!=e.indexOf(" ")){var r=e.split(/\s+/);e=r.pop(),r.forEach((function(e){var t=this.parseKeys(e),n=s[t.hashId]+t.key;i+=(i?" ":"")+n,this._addCommandToBinding(i,"chainKeys")}),this),i+=" "}var a=this.parseKeys(e),o=s[a.hashId]+a.key;this._addCommandToBinding(i+o,t,n)}),this)},this._addCommandToBinding=function(t,n,i){var r,s=this.commandKeyBinding;if(n)if(!s[t]||this.$singleCommand)s[t]=n;else{Array.isArray(s[t])?-1!=(r=s[t].indexOf(n))&&s[t].splice(r,1):s[t]=[s[t]],"number"!=typeof i&&(i=e(n));var a=s[t];for(r=0;ri)break}a.splice(r,0,n)}else delete s[t]},this.addCommands=function(e){e&&Object.keys(e).forEach((function(t){var n=e[t];if(n){if("string"===typeof n)return this.bindKey(n,t);"function"===typeof n&&(n={exec:n}),"object"===typeof n&&(n.name||(n.name=t),this.addCommand(n))}}),this)},this.removeCommands=function(e){Object.keys(e).forEach((function(t){this.removeCommand(e[t])}),this)},this.bindKeys=function(e){Object.keys(e).forEach((function(t){this.bindKey(t,e[t])}),this)},this._buildKeyHash=function(e){this.bindKey(e.bindKey,e)},this.parseKeys=function(e){var t=e.toLowerCase().split(/[\-\+]([\-\+])?/).filter((function(e){return e})),n=t.pop(),r=i[n];if(i.FUNCTION_KEYS[r])n=i.FUNCTION_KEYS[r].toLowerCase();else{if(!t.length)return{key:n,hashId:-1};if(1==t.length&&"shift"==t[0])return{key:n.toUpperCase(),hashId:-1}}for(var s=0,a=t.length;a--;){var o=i.KEY_MODS[t[a]];if(null==o)return"undefined"!=typeof console&&console.error("invalid modifier "+t[a]+" in "+e),!1;s|=o}return{key:n,hashId:s}},this.findKeyCommand=function(e,t){var n=s[e]+t;return this.commandKeyBinding[n]},this.handleKeyboard=function(e,t,n,i){if(!(i<0)){var r=s[t]+n,a=this.commandKeyBinding[r];return e.$keyChain&&(e.$keyChain+=" "+r,a=this.commandKeyBinding[e.$keyChain]||a),!a||"chainKeys"!=a&&"chainKeys"!=a[a.length-1]?(e.$keyChain&&(t&&4!=t||1!=n.length?(-1==t||i>0)&&(e.$keyChain=""):e.$keyChain=e.$keyChain.slice(0,-r.length-1)),{command:a}):(e.$keyChain=e.$keyChain||r,{command:"null"})}},this.getStatusText=function(e,t){return t.$keyChain||""}}.call(a.prototype),t.HashHandler=a,t.MultiHashHandler=o})),ace.define("ace/commands/command_manager",["require","exports","module","ace/lib/oop","ace/keyboard/hash_handler","ace/lib/event_emitter"],(function(e,t,n){"use strict";var i=e("../lib/oop"),r=e("../keyboard/hash_handler").MultiHashHandler,s=e("../lib/event_emitter").EventEmitter,a=function(e,t){r.call(this,t,e),this.byName=this.commands,this.setDefaultHandler("exec",(function(e){return e.command.exec(e.editor,e.args||{})}))};i.inherits(a,r),function(){i.implement(this,s),this.exec=function(e,t,n){if(Array.isArray(e)){for(var i=e.length;i--;)if(this.exec(e[i],t,n))return!0;return!1}if("string"===typeof e&&(e=this.commands[e]),!e)return!1;if(t&&t.$readOnly&&!e.readOnly)return!1;if(e.isAvailable&&!e.isAvailable(t))return!1;var r={editor:t,command:e,args:n};return r.returnValue=this._emit("exec",r),this._signal("afterExec",r),!1!==r.returnValue},this.toggleRecording=function(e){if(!this.$inReplay)return e&&e._emit("changeStatus"),this.recording?(this.macro.pop(),this.removeEventListener("exec",this.$addCommandToMacro),this.macro.length||(this.macro=this.oldMacro),this.recording=!1):(this.$addCommandToMacro||(this.$addCommandToMacro=function(e){this.macro.push([e.command,e.args])}.bind(this)),this.oldMacro=this.macro,this.macro=[],this.on("exec",this.$addCommandToMacro),this.recording=!0)},this.replay=function(e){if(!this.$inReplay&&this.macro){if(this.recording)return this.toggleRecording(e);try{this.$inReplay=!0,this.macro.forEach((function(t){"string"==typeof t?this.exec(t,e):this.exec(t[0],e,t[1])}),this)}finally{this.$inReplay=!1}}},this.trimMacro=function(e){return e.map((function(e){return"string"!=typeof e[0]&&(e[0]=e[0].name),e[1]||(e=e[0]),e}))}}.call(a.prototype),t.CommandManager=a})),ace.define("ace/commands/default_commands",["require","exports","module","ace/lib/lang","ace/config","ace/range"],(function(e,t,n){"use strict";var i=e("../lib/lang"),r=e("../config"),s=e("../range").Range;function a(e,t){return{win:e,mac:t}}t.commands=[{name:"showSettingsMenu",bindKey:a("Ctrl-,","Command-,"),exec:function(e){r.loadModule("ace/ext/settings_menu",(function(t){t.init(e),e.showSettingsMenu()}))},readOnly:!0},{name:"goToNextError",bindKey:a("Alt-E","F4"),exec:function(e){r.loadModule("ace/ext/error_marker",(function(t){t.showErrorMarker(e,1)}))},scrollIntoView:"animate",readOnly:!0},{name:"goToPreviousError",bindKey:a("Alt-Shift-E","Shift-F4"),exec:function(e){r.loadModule("ace/ext/error_marker",(function(t){t.showErrorMarker(e,-1)}))},scrollIntoView:"animate",readOnly:!0},{name:"selectall",bindKey:a("Ctrl-A","Command-A"),exec:function(e){e.selectAll()},readOnly:!0},{name:"centerselection",bindKey:a(null,"Ctrl-L"),exec:function(e){e.centerSelection()},readOnly:!0},{name:"gotoline",bindKey:a("Ctrl-L","Command-L"),exec:function(e){var t=parseInt(prompt("Enter line number:"),10);isNaN(t)||e.gotoLine(t)},readOnly:!0},{name:"fold",bindKey:a("Alt-L|Ctrl-F1","Command-Alt-L|Command-F1"),exec:function(e){e.session.toggleFold(!1)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"unfold",bindKey:a("Alt-Shift-L|Ctrl-Shift-F1","Command-Alt-Shift-L|Command-Shift-F1"),exec:function(e){e.session.toggleFold(!0)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"toggleFoldWidget",bindKey:a("F2","F2"),exec:function(e){e.session.toggleFoldWidget()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"toggleParentFoldWidget",bindKey:a("Alt-F2","Alt-F2"),exec:function(e){e.session.toggleFoldWidget(!0)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"foldall",bindKey:a(null,"Ctrl-Command-Option-0"),exec:function(e){e.session.foldAll()},scrollIntoView:"center",readOnly:!0},{name:"foldOther",bindKey:a("Alt-0","Command-Option-0"),exec:function(e){e.session.foldAll(),e.session.unfold(e.selection.getAllRanges())},scrollIntoView:"center",readOnly:!0},{name:"unfoldall",bindKey:a("Alt-Shift-0","Command-Option-Shift-0"),exec:function(e){e.session.unfold()},scrollIntoView:"center",readOnly:!0},{name:"findnext",bindKey:a("Ctrl-K","Command-G"),exec:function(e){e.findNext()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"findprevious",bindKey:a("Ctrl-Shift-K","Command-Shift-G"),exec:function(e){e.findPrevious()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"selectOrFindNext",bindKey:a("Alt-K","Ctrl-G"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findNext()},readOnly:!0},{name:"selectOrFindPrevious",bindKey:a("Alt-Shift-K","Ctrl-Shift-G"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findPrevious()},readOnly:!0},{name:"find",bindKey:a("Ctrl-F","Command-F"),exec:function(e){r.loadModule("ace/ext/searchbox",(function(t){t.Search(e)}))},readOnly:!0},{name:"overwrite",bindKey:"Insert",exec:function(e){e.toggleOverwrite()},readOnly:!0},{name:"selecttostart",bindKey:a("Ctrl-Shift-Home","Command-Shift-Home|Command-Shift-Up"),exec:function(e){e.getSelection().selectFileStart()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"gotostart",bindKey:a("Ctrl-Home","Command-Home|Command-Up"),exec:function(e){e.navigateFileStart()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"selectup",bindKey:a("Shift-Up","Shift-Up|Ctrl-Shift-P"),exec:function(e){e.getSelection().selectUp()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"golineup",bindKey:a("Up","Up|Ctrl-P"),exec:function(e,t){e.navigateUp(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttoend",bindKey:a("Ctrl-Shift-End","Command-Shift-End|Command-Shift-Down"),exec:function(e){e.getSelection().selectFileEnd()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"gotoend",bindKey:a("Ctrl-End","Command-End|Command-Down"),exec:function(e){e.navigateFileEnd()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"selectdown",bindKey:a("Shift-Down","Shift-Down|Ctrl-Shift-N"),exec:function(e){e.getSelection().selectDown()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"golinedown",bindKey:a("Down","Down|Ctrl-N"),exec:function(e,t){e.navigateDown(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectwordleft",bindKey:a("Ctrl-Shift-Left","Option-Shift-Left"),exec:function(e){e.getSelection().selectWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotowordleft",bindKey:a("Ctrl-Left","Option-Left"),exec:function(e){e.navigateWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttolinestart",bindKey:a("Alt-Shift-Left","Command-Shift-Left|Ctrl-Shift-A"),exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotolinestart",bindKey:a("Alt-Left|Home","Command-Left|Home|Ctrl-A"),exec:function(e){e.navigateLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectleft",bindKey:a("Shift-Left","Shift-Left|Ctrl-Shift-B"),exec:function(e){e.getSelection().selectLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotoleft",bindKey:a("Left","Left|Ctrl-B"),exec:function(e,t){e.navigateLeft(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectwordright",bindKey:a("Ctrl-Shift-Right","Option-Shift-Right"),exec:function(e){e.getSelection().selectWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotowordright",bindKey:a("Ctrl-Right","Option-Right"),exec:function(e){e.navigateWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttolineend",bindKey:a("Alt-Shift-Right","Command-Shift-Right|Shift-End|Ctrl-Shift-E"),exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotolineend",bindKey:a("Alt-Right|End","Command-Right|End|Ctrl-E"),exec:function(e){e.navigateLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectright",bindKey:a("Shift-Right","Shift-Right"),exec:function(e){e.getSelection().selectRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotoright",bindKey:a("Right","Right|Ctrl-F"),exec:function(e,t){e.navigateRight(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectpagedown",bindKey:"Shift-PageDown",exec:function(e){e.selectPageDown()},readOnly:!0},{name:"pagedown",bindKey:a(null,"Option-PageDown"),exec:function(e){e.scrollPageDown()},readOnly:!0},{name:"gotopagedown",bindKey:a("PageDown","PageDown|Ctrl-V"),exec:function(e){e.gotoPageDown()},readOnly:!0},{name:"selectpageup",bindKey:"Shift-PageUp",exec:function(e){e.selectPageUp()},readOnly:!0},{name:"pageup",bindKey:a(null,"Option-PageUp"),exec:function(e){e.scrollPageUp()},readOnly:!0},{name:"gotopageup",bindKey:"PageUp",exec:function(e){e.gotoPageUp()},readOnly:!0},{name:"scrollup",bindKey:a("Ctrl-Up",null),exec:function(e){e.renderer.scrollBy(0,-2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:"scrolldown",bindKey:a("Ctrl-Down",null),exec:function(e){e.renderer.scrollBy(0,2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:"selectlinestart",bindKey:"Shift-Home",exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectlineend",bindKey:"Shift-End",exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"togglerecording",bindKey:a("Ctrl-Alt-E","Command-Option-E"),exec:function(e){e.commands.toggleRecording(e)},readOnly:!0},{name:"replaymacro",bindKey:a("Ctrl-Shift-E","Command-Shift-E"),exec:function(e){e.commands.replay(e)},readOnly:!0},{name:"jumptomatching",bindKey:a("Ctrl-P","Ctrl-P"),exec:function(e){e.jumpToMatching()},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"selecttomatching",bindKey:a("Ctrl-Shift-P","Ctrl-Shift-P"),exec:function(e){e.jumpToMatching(!0)},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"expandToMatching",bindKey:a("Ctrl-Shift-M","Ctrl-Shift-M"),exec:function(e){e.jumpToMatching(!0,!0)},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"passKeysToBrowser",bindKey:a(null,null),exec:function(){},passEvent:!0,readOnly:!0},{name:"copy",exec:function(e){},readOnly:!0},{name:"cut",exec:function(e){var t=e.getSelectionRange();e._emit("cut",t),e.selection.isEmpty()||(e.session.remove(t),e.clearSelection())},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"paste",exec:function(e,t){e.$handlePaste(t)},scrollIntoView:"cursor"},{name:"removeline",bindKey:a("Ctrl-D","Command-D"),exec:function(e){e.removeLines()},scrollIntoView:"cursor",multiSelectAction:"forEachLine"},{name:"duplicateSelection",bindKey:a("Ctrl-Shift-D","Command-Shift-D"),exec:function(e){e.duplicateSelection()},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"sortlines",bindKey:a("Ctrl-Alt-S","Command-Alt-S"),exec:function(e){e.sortLines()},scrollIntoView:"selection",multiSelectAction:"forEachLine"},{name:"togglecomment",bindKey:a("Ctrl-/","Command-/"),exec:function(e){e.toggleCommentLines()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"toggleBlockComment",bindKey:a("Ctrl-Shift-/","Command-Shift-/"),exec:function(e){e.toggleBlockComment()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"modifyNumberUp",bindKey:a("Ctrl-Shift-Up","Alt-Shift-Up"),exec:function(e){e.modifyNumber(1)},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"modifyNumberDown",bindKey:a("Ctrl-Shift-Down","Alt-Shift-Down"),exec:function(e){e.modifyNumber(-1)},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"replace",bindKey:a("Ctrl-H","Command-Option-F"),exec:function(e){r.loadModule("ace/ext/searchbox",(function(t){t.Search(e,!0)}))}},{name:"undo",bindKey:a("Ctrl-Z","Command-Z"),exec:function(e){e.undo()}},{name:"redo",bindKey:a("Ctrl-Shift-Z|Ctrl-Y","Command-Shift-Z|Command-Y"),exec:function(e){e.redo()}},{name:"copylinesup",bindKey:a("Alt-Shift-Up","Command-Option-Up"),exec:function(e){e.copyLinesUp()},scrollIntoView:"cursor"},{name:"movelinesup",bindKey:a("Alt-Up","Option-Up"),exec:function(e){e.moveLinesUp()},scrollIntoView:"cursor"},{name:"copylinesdown",bindKey:a("Alt-Shift-Down","Command-Option-Down"),exec:function(e){e.copyLinesDown()},scrollIntoView:"cursor"},{name:"movelinesdown",bindKey:a("Alt-Down","Option-Down"),exec:function(e){e.moveLinesDown()},scrollIntoView:"cursor"},{name:"del",bindKey:a("Delete","Delete|Ctrl-D|Shift-Delete"),exec:function(e){e.remove("right")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"backspace",bindKey:a("Shift-Backspace|Backspace","Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H"),exec:function(e){e.remove("left")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"cut_or_delete",bindKey:a("Shift-Delete",null),exec:function(e){if(!e.selection.isEmpty())return!1;e.remove("left")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolinestart",bindKey:a("Alt-Backspace","Command-Backspace"),exec:function(e){e.removeToLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolineend",bindKey:a("Alt-Delete","Ctrl-K|Command-Delete"),exec:function(e){e.removeToLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolinestarthard",bindKey:a("Ctrl-Shift-Backspace",null),exec:function(e){var t=e.selection.getRange();t.start.column=0,e.session.remove(t)},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolineendhard",bindKey:a("Ctrl-Shift-Delete",null),exec:function(e){var t=e.selection.getRange();t.end.column=Number.MAX_VALUE,e.session.remove(t)},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removewordleft",bindKey:a("Ctrl-Backspace","Alt-Backspace|Ctrl-Alt-Backspace"),exec:function(e){e.removeWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removewordright",bindKey:a("Ctrl-Delete","Alt-Delete"),exec:function(e){e.removeWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"outdent",bindKey:a("Shift-Tab","Shift-Tab"),exec:function(e){e.blockOutdent()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"indent",bindKey:a("Tab","Tab"),exec:function(e){e.indent()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"blockoutdent",bindKey:a("Ctrl-[","Ctrl-["),exec:function(e){e.blockOutdent()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"blockindent",bindKey:a("Ctrl-]","Ctrl-]"),exec:function(e){e.blockIndent()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"insertstring",exec:function(e,t){e.insert(t)},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"inserttext",exec:function(e,t){e.insert(i.stringRepeat(t.text||"",t.times||1))},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"splitline",bindKey:a(null,"Ctrl-O"),exec:function(e){e.splitLine()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"transposeletters",bindKey:a("Alt-Shift-X","Ctrl-T"),exec:function(e){e.transposeLetters()},multiSelectAction:function(e){e.transposeSelections(1)},scrollIntoView:"cursor"},{name:"touppercase",bindKey:a("Ctrl-U","Ctrl-U"),exec:function(e){e.toUpperCase()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"tolowercase",bindKey:a("Ctrl-Shift-U","Ctrl-Shift-U"),exec:function(e){e.toLowerCase()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"expandtoline",bindKey:a("Ctrl-Shift-L","Command-Shift-L"),exec:function(e){var t=e.selection.getRange();t.start.column=t.end.column=0,t.end.row++,e.selection.setRange(t,!1)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"joinlines",bindKey:a(null,null),exec:function(e){for(var t=e.selection.isBackwards(),n=t?e.selection.getSelectionLead():e.selection.getSelectionAnchor(),r=t?e.selection.getSelectionAnchor():e.selection.getSelectionLead(),a=e.session.doc.getLine(n.row).length,o=e.session.doc.getTextRange(e.selection.getRange()),c=o.replace(/\n\s*/," ").length,l=e.session.doc.getLine(n.row),u=n.row+1;u<=r.row+1;u++){var d=i.stringTrimLeft(i.stringTrimRight(e.session.doc.getLine(u)));0!==d.length&&(d=" "+d),l+=d}r.row+10?(e.selection.moveCursorTo(n.row,n.column),e.selection.selectTo(n.row,n.column+c)):(a=e.session.doc.getLine(n.row).length>a?a+1:a,e.selection.moveCursorTo(n.row,a))},multiSelectAction:"forEach",readOnly:!0},{name:"invertSelection",bindKey:a(null,null),exec:function(e){var t=e.session.doc.getLength()-1,n=e.session.doc.getLine(t).length,i=e.selection.rangeList.ranges,r=[];i.length<1&&(i=[e.selection.getRange()]);for(var a=0;a0&&this.$blockScrolling--;var n=t&&t.scrollIntoView;if(n){switch(n){case"center-animate":n="animate";case"center":this.renderer.scrollCursorIntoView(null,.5);break;case"animate":case"cursor":this.renderer.scrollCursorIntoView();break;case"selectionPart":var i=this.selection.getRange(),r=this.renderer.layerConfig;(i.start.row>=r.lastRow||i.end.row<=r.firstRow)&&this.renderer.scrollSelectionIntoView(this.selection.anchor,this.selection.lead);break;default:break}"animate"==n&&this.renderer.animateScrolling(this.curOp.scrollTop)}this.prevOp=this.curOp,this.curOp=null}},this.$mergeableCommands=["backspace","del","insertstring"],this.$historyTracker=function(e){if(this.$mergeUndoDeltas){var t=this.prevOp,n=this.$mergeableCommands,i=t.command&&e.command.name==t.command.name;if("insertstring"==e.command.name){var r=e.args;void 0===this.mergeNextCommand&&(this.mergeNextCommand=!0),i=i&&this.mergeNextCommand&&(!/\s/.test(r)||/\s/.test(t.args)),this.mergeNextCommand=!0}else i=i&&-1!==n.indexOf(e.command.name);"always"!=this.$mergeUndoDeltas&&Date.now()-this.sequenceStartTime>2e3&&(i=!1),i?this.session.mergeUndoDeltas=!0:-1!==n.indexOf(e.command.name)&&(this.sequenceStartTime=Date.now())}},this.setKeyboardHandler=function(e,t){if(e&&"string"===typeof e){this.$keybindingId=e;var n=this;v.loadModule(["keybinding",e],(function(i){n.$keybindingId==e&&n.keyBinding.setKeyboardHandler(i&&i.handler),t&&t()}))}else this.$keybindingId=null,this.keyBinding.setKeyboardHandler(e),t&&t()},this.getKeyboardHandler=function(){return this.keyBinding.getKeyboardHandler()},this.setSession=function(e){if(this.session!=e){this.curOp&&this.endOperation(),this.curOp={};var t=this.session;if(t){this.session.off("change",this.$onDocumentChange),this.session.off("changeMode",this.$onChangeMode),this.session.off("tokenizerUpdate",this.$onTokenizerUpdate),this.session.off("changeTabSize",this.$onChangeTabSize),this.session.off("changeWrapLimit",this.$onChangeWrapLimit),this.session.off("changeWrapMode",this.$onChangeWrapMode),this.session.off("changeFold",this.$onChangeFold),this.session.off("changeFrontMarker",this.$onChangeFrontMarker),this.session.off("changeBackMarker",this.$onChangeBackMarker),this.session.off("changeBreakpoint",this.$onChangeBreakpoint),this.session.off("changeAnnotation",this.$onChangeAnnotation),this.session.off("changeOverwrite",this.$onCursorChange),this.session.off("changeScrollTop",this.$onScrollTopChange),this.session.off("changeScrollLeft",this.$onScrollLeftChange);var n=this.session.getSelection();n.off("changeCursor",this.$onCursorChange),n.off("changeSelection",this.$onSelectionChange)}this.session=e,e?(this.$onDocumentChange=this.onDocumentChange.bind(this),e.on("change",this.$onDocumentChange),this.renderer.setSession(e),this.$onChangeMode=this.onChangeMode.bind(this),e.on("changeMode",this.$onChangeMode),this.$onTokenizerUpdate=this.onTokenizerUpdate.bind(this),e.on("tokenizerUpdate",this.$onTokenizerUpdate),this.$onChangeTabSize=this.renderer.onChangeTabSize.bind(this.renderer),e.on("changeTabSize",this.$onChangeTabSize),this.$onChangeWrapLimit=this.onChangeWrapLimit.bind(this),e.on("changeWrapLimit",this.$onChangeWrapLimit),this.$onChangeWrapMode=this.onChangeWrapMode.bind(this),e.on("changeWrapMode",this.$onChangeWrapMode),this.$onChangeFold=this.onChangeFold.bind(this),e.on("changeFold",this.$onChangeFold),this.$onChangeFrontMarker=this.onChangeFrontMarker.bind(this),this.session.on("changeFrontMarker",this.$onChangeFrontMarker),this.$onChangeBackMarker=this.onChangeBackMarker.bind(this),this.session.on("changeBackMarker",this.$onChangeBackMarker),this.$onChangeBreakpoint=this.onChangeBreakpoint.bind(this),this.session.on("changeBreakpoint",this.$onChangeBreakpoint),this.$onChangeAnnotation=this.onChangeAnnotation.bind(this),this.session.on("changeAnnotation",this.$onChangeAnnotation),this.$onCursorChange=this.onCursorChange.bind(this),this.session.on("changeOverwrite",this.$onCursorChange),this.$onScrollTopChange=this.onScrollTopChange.bind(this),this.session.on("changeScrollTop",this.$onScrollTopChange),this.$onScrollLeftChange=this.onScrollLeftChange.bind(this),this.session.on("changeScrollLeft",this.$onScrollLeftChange),this.selection=e.getSelection(),this.selection.on("changeCursor",this.$onCursorChange),this.$onSelectionChange=this.onSelectionChange.bind(this),this.selection.on("changeSelection",this.$onSelectionChange),this.onChangeMode(),this.$blockScrolling+=1,this.onCursorChange(),this.$blockScrolling-=1,this.onScrollTopChange(),this.onScrollLeftChange(),this.onSelectionChange(),this.onChangeFrontMarker(),this.onChangeBackMarker(),this.onChangeBreakpoint(),this.onChangeAnnotation(),this.session.getUseWrapMode()&&this.renderer.adjustWrapLimit(),this.renderer.updateFull()):(this.selection=null,this.renderer.setSession(e)),this._signal("changeSession",{session:e,oldSession:t}),this.curOp=null,t&&t._signal("changeEditor",{oldEditor:this}),e&&e._signal("changeEditor",{editor:this}),e&&e.bgTokenizer&&e.bgTokenizer.scheduleStart()}},this.getSession=function(){return this.session},this.setValue=function(e,t){return this.session.doc.setValue(e),t?1==t?this.navigateFileEnd():-1==t&&this.navigateFileStart():this.selectAll(),e},this.getValue=function(){return this.session.getValue()},this.getSelection=function(){return this.selection},this.resize=function(e){this.renderer.onResize(e)},this.setTheme=function(e,t){this.renderer.setTheme(e,t)},this.getTheme=function(){return this.renderer.getTheme()},this.setStyle=function(e){this.renderer.setStyle(e)},this.unsetStyle=function(e){this.renderer.unsetStyle(e)},this.getFontSize=function(){return this.getOption("fontSize")||r.computedStyle(this.container,"fontSize")},this.setFontSize=function(e){this.setOption("fontSize",e)},this.$highlightBrackets=function(){if(this.session.$bracketHighlight&&(this.session.removeMarker(this.session.$bracketHighlight),this.session.$bracketHighlight=null),!this.$highlightPending){var e=this;this.$highlightPending=!0,setTimeout((function(){e.$highlightPending=!1;var t=e.session;if(t&&t.bgTokenizer){var n=t.findMatchingBracket(e.getCursorPosition());if(n)var i=new f(n.row,n.column,n.row,n.column+1);else if(t.$mode.getMatching)i=t.$mode.getMatching(e.session);i&&(t.$bracketHighlight=t.addMarker(i,"ace_bracket","text"))}}),50)}},this.$highlightTags=function(){if(!this.$highlightTagPending){var e=this;this.$highlightTagPending=!0,setTimeout((function(){e.$highlightTagPending=!1;var t=e.session;if(t&&t.bgTokenizer){var n=e.getCursorPosition(),i=new b(e.session,n.row,n.column),r=i.getCurrentToken();if(!r||!/\b(?:tag-open|tag-name)/.test(r.type))return t.removeMarker(t.$tagHighlight),void(t.$tagHighlight=null);if(-1==r.type.indexOf("tag-open")||(r=i.stepForward(),r)){var s=r.value,a=0,o=i.stepBackward();if("<"==o.value)do{o=r,r=i.stepForward(),r&&r.value===s&&-1!==r.type.indexOf("tag-name")&&("<"===o.value?a++:"=0);else{do{r=o,o=i.stepBackward(),r&&r.value===s&&-1!==r.type.indexOf("tag-name")&&("<"===o.value?a++:"1||(e=!1)),t.$highlightLineMarker&&!e)t.removeMarker(t.$highlightLineMarker.id),t.$highlightLineMarker=null;else if(!t.$highlightLineMarker&&e){var n=new f(e.row,e.column,e.row,1/0);n.id=t.addMarker(n,"ace_active-line","screenLine"),t.$highlightLineMarker=n}else e&&(t.$highlightLineMarker.start.row=e.row,t.$highlightLineMarker.end.row=e.row,t.$highlightLineMarker.start.column=e.column,t._signal("changeBackMarker"))},this.onSelectionChange=function(e){var t=this.session;if(t.$selectionMarker&&t.removeMarker(t.$selectionMarker),t.$selectionMarker=null,this.selection.isEmpty())this.$updateHighlightActiveLine();else{var n=this.selection.getRange(),i=this.getSelectionStyle();t.$selectionMarker=t.addMarker(n,"ace_selection",i)}var r=this.$highlightSelectedWord&&this.$getSelectionHighLightRegexp();this.session.highlight(r),this._signal("changeSelection")},this.$getSelectionHighLightRegexp=function(){var e=this.session,t=this.getSelectionRange();if(!t.isEmpty()&&!t.isMultiLine()){var n=t.start.column-1,i=t.end.column+1,r=e.getLine(t.start.row),s=r.length,a=r.substring(Math.max(n,0),Math.min(i,s));if(!(n>=0&&/^[\w\d]/.test(a)||i<=s&&/[\w\d]$/.test(a))&&(a=r.substring(t.start.column,t.end.column),/^[\w\d]+$/.test(a))){var o=this.$search.$assembleRegExp({wholeWord:!0,caseSensitive:!0,needle:a});return o}}},this.onChangeFrontMarker=function(){this.renderer.updateFrontMarkers()},this.onChangeBackMarker=function(){this.renderer.updateBackMarkers()},this.onChangeBreakpoint=function(){this.renderer.updateBreakpoints()},this.onChangeAnnotation=function(){this.renderer.setAnnotations(this.session.getAnnotations())},this.onChangeMode=function(e){this.renderer.updateText(),this._emit("changeMode",e)},this.onChangeWrapLimit=function(){this.renderer.updateFull()},this.onChangeWrapMode=function(){this.renderer.onResize(!0)},this.onChangeFold=function(){this.$updateHighlightActiveLine(),this.renderer.updateFull()},this.getSelectedText=function(){return this.session.getTextRange(this.getSelectionRange())},this.getCopyText=function(){var e=this.getSelectedText();return this._signal("copy",e),e},this.onCopy=function(){this.commands.exec("copy",this)},this.onCut=function(){this.commands.exec("cut",this)},this.onPaste=function(e,t){var n={text:e,event:t};this.commands.exec("paste",this,n)},this.$handlePaste=function(e){"string"==typeof e&&(e={text:e}),this._signal("paste",e);var t=e.text;if(!this.inMultiSelectMode||this.inVirtualSelectionMode)this.insert(t);else{var n=t.split(/\r\n|\r|\n/),i=this.selection.rangeList.ranges;if(n.length>i.length||n.length<2||!n[1])return this.commands.exec("insertstring",this,t);for(var r=i.length;r--;){var s=i[r];s.isEmpty()||this.session.remove(s),this.session.insert(s.start,n[r])}}},this.execCommand=function(e,t){return this.commands.exec(e,this,t)},this.insert=function(e,t){var n=this.session,i=n.getMode(),r=this.getCursorPosition();if(this.getBehavioursEnabled()&&!t){var s=i.transformAction(n.getState(r.row),"insertion",this,n,e);s&&(e!==s.text&&(this.session.mergeUndoDeltas=!1,this.$mergeNextCommand=!1),e=s.text)}if("\t"==e&&(e=this.session.getTabString()),this.selection.isEmpty()){if(this.session.getOverwrite()&&-1==e.indexOf("\n")){a=new f.fromPoints(r,r);a.end.column+=e.length,this.session.remove(a)}}else{var a=this.getSelectionRange();r=this.session.remove(a),this.clearSelection()}if("\n"==e||"\r\n"==e){var o=n.getLine(r.row);if(r.column>o.search(/\S|$/)){var c=o.substr(r.column).search(/\S|$/);n.doc.removeInLine(r.row,r.column,r.column+c)}}this.clearSelection();var l=r.column,u=n.getState(r.row),d=(o=n.getLine(r.row),i.checkOutdent(u,o,e));n.insert(r,e);if(s&&s.selection&&(2==s.selection.length?this.selection.setSelectionRange(new f(r.row,l+s.selection[0],r.row,l+s.selection[1])):this.selection.setSelectionRange(new f(r.row+s.selection[0],s.selection[1],r.row+s.selection[2],s.selection[3]))),n.getDocument().isNewLine(e)){var h=i.getNextLineIndent(u,o.slice(0,r.column),n.getTabString());n.insert({row:r.row+1,column:0},h)}d&&i.autoOutdent(u,n,r.row)},this.onTextInput=function(e){this.keyBinding.onTextInput(e)},this.onCommandKey=function(e,t,n){this.keyBinding.onCommandKey(e,t,n)},this.setOverwrite=function(e){this.session.setOverwrite(e)},this.getOverwrite=function(){return this.session.getOverwrite()},this.toggleOverwrite=function(){this.session.toggleOverwrite()},this.setScrollSpeed=function(e){this.setOption("scrollSpeed",e)},this.getScrollSpeed=function(){return this.getOption("scrollSpeed")},this.setDragDelay=function(e){this.setOption("dragDelay",e)},this.getDragDelay=function(){return this.getOption("dragDelay")},this.setSelectionStyle=function(e){this.setOption("selectionStyle",e)},this.getSelectionStyle=function(){return this.getOption("selectionStyle")},this.setHighlightActiveLine=function(e){this.setOption("highlightActiveLine",e)},this.getHighlightActiveLine=function(){return this.getOption("highlightActiveLine")},this.setHighlightGutterLine=function(e){this.setOption("highlightGutterLine",e)},this.getHighlightGutterLine=function(){return this.getOption("highlightGutterLine")},this.setHighlightSelectedWord=function(e){this.setOption("highlightSelectedWord",e)},this.getHighlightSelectedWord=function(){return this.$highlightSelectedWord},this.setAnimatedScroll=function(e){this.renderer.setAnimatedScroll(e)},this.getAnimatedScroll=function(){return this.renderer.getAnimatedScroll()},this.setShowInvisibles=function(e){this.renderer.setShowInvisibles(e)},this.getShowInvisibles=function(){return this.renderer.getShowInvisibles()},this.setDisplayIndentGuides=function(e){this.renderer.setDisplayIndentGuides(e)},this.getDisplayIndentGuides=function(){return this.renderer.getDisplayIndentGuides()},this.setShowPrintMargin=function(e){this.renderer.setShowPrintMargin(e)},this.getShowPrintMargin=function(){return this.renderer.getShowPrintMargin()},this.setPrintMarginColumn=function(e){this.renderer.setPrintMarginColumn(e)},this.getPrintMarginColumn=function(){return this.renderer.getPrintMarginColumn()},this.setReadOnly=function(e){this.setOption("readOnly",e)},this.getReadOnly=function(){return this.getOption("readOnly")},this.setBehavioursEnabled=function(e){this.setOption("behavioursEnabled",e)},this.getBehavioursEnabled=function(){return this.getOption("behavioursEnabled")},this.setWrapBehavioursEnabled=function(e){this.setOption("wrapBehavioursEnabled",e)},this.getWrapBehavioursEnabled=function(){return this.getOption("wrapBehavioursEnabled")},this.setShowFoldWidgets=function(e){this.setOption("showFoldWidgets",e)},this.getShowFoldWidgets=function(){return this.getOption("showFoldWidgets")},this.setFadeFoldWidgets=function(e){this.setOption("fadeFoldWidgets",e)},this.getFadeFoldWidgets=function(){return this.getOption("fadeFoldWidgets")},this.remove=function(e){this.selection.isEmpty()&&("left"==e?this.selection.selectLeft():this.selection.selectRight());var t=this.getSelectionRange();if(this.getBehavioursEnabled()){var n=this.session,i=n.getState(t.start.row),r=n.getMode().transformAction(i,"deletion",this,n,t);if(0===t.end.column){var s=n.getTextRange(t);if("\n"==s[s.length-1]){var a=n.getLine(t.end.row);/^\s+$/.test(a)&&(t.end.column=a.length)}}r&&(t=r)}this.session.remove(t),this.clearSelection()},this.removeWordRight=function(){this.selection.isEmpty()&&this.selection.selectWordRight(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeWordLeft=function(){this.selection.isEmpty()&&this.selection.selectWordLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineStart=function(){this.selection.isEmpty()&&this.selection.selectLineStart(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineEnd=function(){this.selection.isEmpty()&&this.selection.selectLineEnd();var e=this.getSelectionRange();e.start.column==e.end.column&&e.start.row==e.end.row&&(e.end.column=0,e.end.row++),this.session.remove(e),this.clearSelection()},this.splitLine=function(){this.selection.isEmpty()||(this.session.remove(this.getSelectionRange()),this.clearSelection());var e=this.getCursorPosition();this.insert("\n"),this.moveCursorToPosition(e)},this.transposeLetters=function(){if(this.selection.isEmpty()){var e=this.getCursorPosition(),t=e.column;if(0!==t){var n,i,r=this.session.getLine(e.row);tt.toLowerCase()?1:0}));var r=new f(0,0,0,0);for(i=e.first;i<=e.last;i++){var s=t.getLine(i);r.start.row=i,r.end.row=i,r.end.column=s.length,t.replace(r,n[i-e.first])}},this.toggleCommentLines=function(){var e=this.session.getState(this.getCursorPosition().row),t=this.$getSelectedRows();this.session.getMode().toggleCommentLines(e,this.session,t.first,t.last)},this.toggleBlockComment=function(){var e=this.getCursorPosition(),t=this.session.getState(e.row),n=this.getSelectionRange();this.session.getMode().toggleBlockComment(t,this.session,n,e)},this.getNumberAt=function(e,t){var n=/[\-]?[0-9]+(?:\.[0-9]+)?/g;n.lastIndex=0;var i=this.session.getLine(e);while(n.lastIndex=t){var s={value:r[0],start:r.index,end:r.index+r[0].length};return s}}return null},this.modifyNumber=function(e){var t=this.selection.getCursor().row,n=this.selection.getCursor().column,i=new f(t,n-1,t,n),r=this.session.getTextRange(i);if(!isNaN(parseFloat(r))&&isFinite(r)){var s=this.getNumberAt(t,n);if(s){var a=s.value.indexOf(".")>=0?s.start+s.value.indexOf(".")+1:s.end,o=s.start+s.value.length-a,c=parseFloat(s.value);c*=Math.pow(10,o),a!==s.end&&nf+1)break;f=p.last}u--,o=this.session.$moveLines(h,f,t?0:e),t&&-1==e&&(d=u+1);while(d<=u)a[d].moveBy(o,0),d++;t||(o=0),c+=o}r.fromOrientedRange(r.ranges[0]),r.rangeList.attach(this.session),this.inVirtualSelectionMode=!1}},this.$getSelectedRows=function(e){return e=(e||this.getSelectionRange()).collapseRows(),{first:this.session.getRowFoldStart(e.start.row),last:this.session.getRowFoldEnd(e.end.row)}},this.onCompositionStart=function(e){this.renderer.showComposition(this.getCursorPosition())},this.onCompositionUpdate=function(e){this.renderer.setCompositionText(e)},this.onCompositionEnd=function(){this.renderer.hideComposition()},this.getFirstVisibleRow=function(){return this.renderer.getFirstVisibleRow()},this.getLastVisibleRow=function(){return this.renderer.getLastVisibleRow()},this.isRowVisible=function(e){return e>=this.getFirstVisibleRow()&&e<=this.getLastVisibleRow()},this.isRowFullyVisible=function(e){return e>=this.renderer.getFirstFullyVisibleRow()&&e<=this.renderer.getLastFullyVisibleRow()},this.$getVisibleRowCount=function(){return this.renderer.getScrollBottomRow()-this.renderer.getScrollTopRow()+1},this.$moveByPage=function(e,t){var n=this.renderer,i=this.renderer.layerConfig,r=e*Math.floor(i.height/i.lineHeight);this.$blockScrolling++,!0===t?this.selection.$moveSelection((function(){this.moveCursorBy(r,0)})):!1===t&&(this.selection.moveCursorBy(r,0),this.selection.clearSelection()),this.$blockScrolling--;var s=n.scrollTop;n.scrollBy(0,r*i.lineHeight),null!=t&&n.scrollCursorIntoView(null,.5),n.animateScrolling(s)},this.selectPageDown=function(){this.$moveByPage(1,!0)},this.selectPageUp=function(){this.$moveByPage(-1,!0)},this.gotoPageDown=function(){this.$moveByPage(1,!1)},this.gotoPageUp=function(){this.$moveByPage(-1,!1)},this.scrollPageDown=function(){this.$moveByPage(1)},this.scrollPageUp=function(){this.$moveByPage(-1)},this.scrollToRow=function(e){this.renderer.scrollToRow(e)},this.scrollToLine=function(e,t,n,i){this.renderer.scrollToLine(e,t,n,i)},this.centerSelection=function(){var e=this.getSelectionRange(),t={row:Math.floor(e.start.row+(e.end.row-e.start.row)/2),column:Math.floor(e.start.column+(e.end.column-e.start.column)/2)};this.renderer.alignCursor(t,.5)},this.getCursorPosition=function(){return this.selection.getCursor()},this.getCursorPositionScreen=function(){return this.session.documentToScreenPosition(this.getCursorPosition())},this.getSelectionRange=function(){return this.selection.getRange()},this.selectAll=function(){this.$blockScrolling+=1,this.selection.selectAll(),this.$blockScrolling-=1},this.clearSelection=function(){this.selection.clearSelection()},this.moveCursorTo=function(e,t){this.selection.moveCursorTo(e,t)},this.moveCursorToPosition=function(e){this.selection.moveCursorToPosition(e)},this.jumpToMatching=function(e,t){var n=this.getCursorPosition(),i=new b(this.session,n.row,n.column),r=i.getCurrentToken(),s=r||i.stepForward();if(s){var a,o,c=!1,l={},u=n.column-s.start,d={")":"(","(":"(","]":"[","[":"[","{":"{","}":"{"};do{if(s.value.match(/[{}()\[\]]/g)){for(;u=0;--s)this.$tryReplace(n[s],e)&&i++;return this.selection.setSelectionRange(r),this.$blockScrolling-=1,i},this.$tryReplace=function(e,t){var n=this.session.getTextRange(e);return t=this.$search.replace(n,t),null!==t?(e.end=this.session.replace(e,t),e):null},this.getLastSearchOptions=function(){return this.$search.getOptions()},this.find=function(e,t,n){t||(t={}),"string"==typeof e||e instanceof RegExp?t.needle=e:"object"==typeof e&&i.mixin(t,e);var r=this.selection.getRange();null==t.needle&&(e=this.session.getTextRange(r)||this.$search.$options.needle,e||(r=this.session.getWordRange(r.start.row,r.start.column),e=this.session.getTextRange(r)),this.$search.set({needle:e})),this.$search.set(t),t.start||this.$search.set({start:r});var s=this.$search.find(this.session);return t.preventScroll?s:s?(this.revealRange(s,n),s):(t.backwards?r.start=r.end:r.end=r.start,void this.selection.setRange(r))},this.findNext=function(e,t){this.find({skipCurrent:!0,backwards:!1},e,t)},this.findPrevious=function(e,t){this.find(e,{skipCurrent:!0,backwards:!0},t)},this.revealRange=function(e,t){this.$blockScrolling+=1,this.session.unfold(e),this.selection.setSelectionRange(e),this.$blockScrolling-=1;var n=this.renderer.scrollTop;this.renderer.scrollSelectionIntoView(e.start,e.end,.5),!1!==t&&this.renderer.animateScrolling(n)},this.undo=function(){this.$blockScrolling++,this.session.getUndoManager().undo(),this.$blockScrolling--,this.renderer.scrollCursorIntoView(null,.5)},this.redo=function(){this.$blockScrolling++,this.session.getUndoManager().redo(),this.$blockScrolling--,this.renderer.scrollCursorIntoView(null,.5)},this.destroy=function(){this.renderer.destroy(),this._signal("destroy",this),this.session&&this.session.destroy()},this.setAutoScrollEditorIntoView=function(e){if(e){var t,n=this,i=!1;this.$scrollAnchor||(this.$scrollAnchor=document.createElement("div"));var r=this.$scrollAnchor;r.style.cssText="position:absolute",this.container.insertBefore(r,this.container.firstChild);var s=this.on("changeSelection",(function(){i=!0})),a=this.renderer.on("beforeRender",(function(){i&&(t=n.renderer.container.getBoundingClientRect())})),o=this.renderer.on("afterRender",(function(){if(i&&t&&(n.isFocused()||n.searchBox&&n.searchBox.isFocused())){var e=n.renderer,s=e.$cursorLayer.$pixelPos,a=e.layerConfig,o=s.top-a.offset;i=s.top>=0&&o+t.top<0||!(s.topwindow.innerHeight)&&null,null!=i&&(r.style.top=o+"px",r.style.left=s.left+"px",r.style.height=a.lineHeight+"px",r.scrollIntoView(i)),i=t=null}}));this.setAutoScrollEditorIntoView=function(e){e||(delete this.setAutoScrollEditorIntoView,this.off("changeSelection",s),this.renderer.off("afterRender",o),this.renderer.off("beforeRender",a))}}},this.$resetCursorStyle=function(){var e=this.$cursorStyle||"ace",t=this.renderer.$cursorLayer;t&&(t.setSmoothBlinking(/smooth/.test(e)),t.isBlinking=!this.$readOnly&&"wide"!=e,r.setCssClass(t.element,"ace_slim-cursors",/slim/.test(e)))}}.call(y.prototype),v.defineOptions(y.prototype,"editor",{selectionStyle:{set:function(e){this.onSelectionChange(),this._signal("changeSelectionStyle",{data:e})},initialValue:"line"},highlightActiveLine:{set:function(){this.$updateHighlightActiveLine()},initialValue:!0},highlightSelectedWord:{set:function(e){this.$onSelectionChange()},initialValue:!0},readOnly:{set:function(e){this.$resetCursorStyle()},initialValue:!1},cursorStyle:{set:function(e){this.$resetCursorStyle()},values:["ace","slim","smooth","wide"],initialValue:"ace"},mergeUndoDeltas:{values:[!1,!0,"always"],initialValue:!0},behavioursEnabled:{initialValue:!0},wrapBehavioursEnabled:{initialValue:!0},autoScrollEditorIntoView:{set:function(e){this.setAutoScrollEditorIntoView(e)}},keyboardHandler:{set:function(e){this.setKeyboardHandler(e)},get:function(){return this.keybindingId},handlesSet:!0},hScrollBarAlwaysVisible:"renderer",vScrollBarAlwaysVisible:"renderer",highlightGutterLine:"renderer",animatedScroll:"renderer",showInvisibles:"renderer",showPrintMargin:"renderer",printMarginColumn:"renderer",printMargin:"renderer",fadeFoldWidgets:"renderer",showFoldWidgets:"renderer",showLineNumbers:"renderer",showGutter:"renderer",displayIndentGuides:"renderer",fontSize:"renderer",fontFamily:"renderer",maxLines:"renderer",minLines:"renderer",scrollPastEnd:"renderer",fixedWidthGutter:"renderer",theme:"renderer",scrollSpeed:"$mouseHandler",dragDelay:"$mouseHandler",dragEnabled:"$mouseHandler",focusTimout:"$mouseHandler",tooltipFollowsMouse:"$mouseHandler",firstLineNumber:"session",overwrite:"session",newLineMode:"session",useWorker:"session",useSoftTabs:"session",tabSize:"session",wrap:"session",indentedSoftWrap:"session",foldStyle:"session",mode:"session"}),t.Editor=y})),ace.define("ace/undomanager",["require","exports","module"],(function(e,t,n){"use strict";var i=function(){this.reset()};(function(){function e(e){return{action:e.action,start:e.start,end:e.end,lines:1==e.lines.length?null:e.lines,text:1==e.lines.length?e.lines[0]:null}}function t(e){return{action:e.action,start:e.start,end:e.end,lines:e.lines||[e.text]}}function n(e,t){for(var n=new Array(e.length),i=0;i0},this.hasRedo=function(){return this.$redoStack.length>0},this.markClean=function(){this.dirtyCounter=0},this.isClean=function(){return 0===this.dirtyCounter},this.$serializeDeltas=function(t){return n(t,e)},this.$deserializeDeltas=function(e){return n(e,t)}}).call(i.prototype),t.UndoManager=i})),ace.define("ace/layer/gutter",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter"],(function(e,t,n){"use strict";var i=e("../lib/dom"),r=e("../lib/oop"),s=e("../lib/lang"),a=e("../lib/event_emitter").EventEmitter,o=function(e){this.element=i.createElement("div"),this.element.className="ace_layer ace_gutter-layer",e.appendChild(this.element),this.setShowFoldWidgets(this.$showFoldWidgets),this.gutterWidth=0,this.$annotations=[],this.$updateAnnotations=this.$updateAnnotations.bind(this),this.$cells=[]};(function(){r.implement(this,a),this.setSession=function(e){this.session&&this.session.removeEventListener("change",this.$updateAnnotations),this.session=e,e&&e.on("change",this.$updateAnnotations)},this.addGutterDecoration=function(e,t){window.console&&console.warn&&console.warn("deprecated use session.addGutterDecoration"),this.session.addGutterDecoration(e,t)},this.removeGutterDecoration=function(e,t){window.console&&console.warn&&console.warn("deprecated use session.removeGutterDecoration"),this.session.removeGutterDecoration(e,t)},this.setAnnotations=function(e){this.$annotations=[];for(var t=0;ta&&(g=s.end.row+1,s=t.getNextFoldLine(g,s),a=s?s.start.row:1/0),g>r){while(this.$cells.length>p+1)f=this.$cells.pop(),this.element.removeChild(f.element);break}f=this.$cells[++p],f||(f={element:null,textNode:null,foldWidget:null},f.element=i.createElement("div"),f.textNode=document.createTextNode(""),f.element.appendChild(f.textNode),this.element.appendChild(f.element),this.$cells[p]=f);var m="ace_gutter-cell ";c[g]&&(m+=c[g]),l[g]&&(m+=l[g]),this.$annotations[g]&&(m+=this.$annotations[g].className),f.element.className!=m&&(f.element.className=m);var v=t.getRowLength(g)*e.lineHeight+"px";if(v!=f.element.style.height&&(f.element.style.height=v),o){var b=o[g];null==b&&(b=o[g]=t.getFoldWidget(g))}if(b){f.foldWidget||(f.foldWidget=i.createElement("span"),f.element.appendChild(f.foldWidget));m="ace_fold-widget ace_"+b;"start"==b&&g==a&&gn.right-t.right?"foldWidgets":void 0}}).call(o.prototype),t.Gutter=o})),ace.define("ace/layer/marker",["require","exports","module","ace/range","ace/lib/dom"],(function(e,t,n){"use strict";var i=e("../range").Range,r=e("../lib/dom"),s=function(e){this.element=r.createElement("div"),this.element.className="ace_layer ace_marker-layer",e.appendChild(this.element)};(function(){function e(e,t,n,i){return(e?1:0)|(t?2:0)|(n?4:0)|(i?8:0)}this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setMarkers=function(e){this.markers=e},this.update=function(e){if(e){this.config=e;var t=[];for(var n in this.markers){var i=this.markers[n];if(i.range){var r=i.range.clipRows(e.firstRow,e.lastRow);if(!r.isEmpty())if(r=r.toScreenRange(this.session),i.renderer){var s=this.$getTop(r.start.row,e),a=this.$padding+(this.session.$bidiHandler.isBidiRow(r.start.row)?this.session.$bidiHandler.getPosLeft(r.start.column):r.start.column*e.characterWidth);i.renderer(t,r,a,s,e)}else"fullLine"==i.type?this.drawFullLineMarker(t,r,i.clazz,e):"screenLine"==i.type?this.drawScreenLineMarker(t,r,i.clazz,e):r.isMultiLine()?"text"==i.type?this.drawTextMarker(t,r,i.clazz,e):this.drawMultiLineMarker(t,r,i.clazz,e):this.session.$bidiHandler.isBidiRow(r.start.row)?this.drawBidiSingleLineMarker(t,r,i.clazz+" ace_start ace_br15",e):this.drawSingleLineMarker(t,r,i.clazz+" ace_start ace_br15",e)}else i.update(t,this,this.session,e)}this.element.innerHTML=t.join("")}},this.$getTop=function(e,t){return(e-t.firstRowScreen)*t.lineHeight},this.drawTextMarker=function(t,n,r,s,a){for(var o=this.session,c=n.start.row,l=n.end.row,u=c,d=0,h=0,f=o.getScreenLastRowColumn(u),p=null,g=new i(u,n.start.column,u,h);u<=l;u++)g.start.row=g.end.row=u,g.start.column=u==c?n.start.column:o.getRowWrapIndent(u),g.end.column=f,d=h,h=f,f=u+1f,u==l),this.session.$bidiHandler.isBidiRow(u)?this.drawBidiSingleLineMarker(t,g,p,s,u==l?0:1,a):this.drawSingleLineMarker(t,g,p,s,u==l?0:1,a)},this.drawMultiLineMarker=function(e,t,n,i,r){var s,a,o,c=this.$padding;if(r=r||"",this.session.$bidiHandler.isBidiRow(t.start.row)){var l=t.clone();l.end.row=l.start.row,l.end.column=this.session.getLine(l.start.row).length,this.drawBidiSingleLineMarker(e,l,n+" ace_br1 ace_start",i,null,r)}else s=i.lineHeight,a=this.$getTop(t.start.row,i),o=c+t.start.column*i.characterWidth,e.push("
");if(this.session.$bidiHandler.isBidiRow(t.end.row)){l=t.clone();l.start.row=l.end.row,l.start.column=0,this.drawBidiSingleLineMarker(e,l,n+" ace_br12",i,null,r)}else{var u=t.end.column*i.characterWidth;s=i.lineHeight,a=this.$getTop(t.end.row,i),e.push("
")}if(s=(t.end.row-t.start.row-1)*i.lineHeight,!(s<=0)){a=this.$getTop(t.start.row+1,i);var d=(t.start.column?1:0)|(t.end.column?0:8);e.push("
")}},this.drawSingleLineMarker=function(e,t,n,i,r,s){var a=i.lineHeight,o=(t.end.column+(r||0)-t.start.column)*i.characterWidth,c=this.$getTop(t.start.row,i),l=this.$padding+t.start.column*i.characterWidth;e.push("
")},this.drawBidiSingleLineMarker=function(e,t,n,i,r,s){var a=i.lineHeight,o=this.$getTop(t.start.row,i),c=this.$padding,l=this.session.$bidiHandler.getSelections(t.start.column,t.end.column);l.forEach((function(t){e.push("
")}))},this.drawFullLineMarker=function(e,t,n,i,r){var s=this.$getTop(t.start.row,i),a=i.lineHeight;t.start.row!=t.end.row&&(a+=this.$getTop(t.end.row,i)-s),e.push("
")},this.drawScreenLineMarker=function(e,t,n,i,r){var s=this.$getTop(t.start.row,i),a=i.lineHeight;e.push("
")}}).call(s.prototype),t.Marker=s})),ace.define("ace/layer/text",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/lib/event_emitter"],(function(e,t,n){"use strict";var i=e("../lib/oop"),r=e("../lib/dom"),s=e("../lib/lang"),a=(e("../lib/useragent"),e("../lib/event_emitter").EventEmitter),o=function(e){this.element=r.createElement("div"),this.element.className="ace_layer ace_text-layer",e.appendChild(this.element),this.$updateEolChar=this.$updateEolChar.bind(this)};(function(){i.implement(this,a),this.EOF_CHAR="¶",this.EOL_CHAR_LF="¬",this.EOL_CHAR_CRLF="¤",this.EOL_CHAR=this.EOL_CHAR_LF,this.TAB_CHAR="—",this.SPACE_CHAR="·",this.$padding=0,this.$updateEolChar=function(){var e="\n"==this.session.doc.getNewLineCharacter()?this.EOL_CHAR_LF:this.EOL_CHAR_CRLF;if(this.EOL_CHAR!=e)return this.EOL_CHAR=e,!0},this.setPadding=function(e){this.$padding=e,this.element.style.padding="0 "+e+"px"},this.getLineHeight=function(){return this.$fontMetrics.$characterSize.height||0},this.getCharacterWidth=function(){return this.$fontMetrics.$characterSize.width||0},this.$setFontMetrics=function(e){this.$fontMetrics=e,this.$fontMetrics.on("changeCharacterSize",function(e){this._signal("changeCharacterSize",e)}.bind(this)),this.$pollSizeChanges()},this.checkForSizeChanges=function(){this.$fontMetrics.checkForSizeChanges()},this.$pollSizeChanges=function(){return this.$pollSizeChangesTimer=this.$fontMetrics.$pollSizeChanges()},this.setSession=function(e){this.session=e,e&&this.$computeTabString()},this.showInvisibles=!1,this.setShowInvisibles=function(e){return this.showInvisibles!=e&&(this.showInvisibles=e,this.$computeTabString(),!0)},this.displayIndentGuides=!0,this.setDisplayIndentGuides=function(e){return this.displayIndentGuides!=e&&(this.displayIndentGuides=e,this.$computeTabString(),!0)},this.$tabStrings=[],this.onChangeTabSize=this.$computeTabString=function(){var e=this.session.getTabSize();this.tabSize=e;for(var t=this.$tabStrings=[0],n=1;n"+s.stringRepeat(this.TAB_CHAR,n)+""):t.push(s.stringRepeat(" ",n));if(this.displayIndentGuides){this.$indentGuideRe=/\s\S| \t|\t |\s$/;var i="ace_indent-guide",r="",a="";if(this.showInvisibles){i+=" ace_invisible",r=" ace_invisible_space",a=" ace_invisible_tab";var o=s.stringRepeat(this.SPACE_CHAR,this.tabSize),c=s.stringRepeat(this.TAB_CHAR,this.tabSize)}else o=s.stringRepeat(" ",this.tabSize),c=o;this.$tabStrings[" "]=""+o+"",this.$tabStrings["\t"]=""+c+""}},this.updateLines=function(e,t,n){this.config.lastRow==e.lastRow&&this.config.firstRow==e.firstRow||this.scrollLines(e),this.config=e;for(var i=Math.max(t,e.firstRow),r=Math.min(n,e.lastRow),s=this.element.childNodes,a=0,o=e.firstRow;ol&&(o=c.end.row+1,c=this.session.getNextFoldLine(o,c),l=c?c.start.row:1/0),o>r)break;var u=s[a++];if(u){var d=[];this.$renderLine(d,o,!this.$useLineGroups(),o==l&&c),u.style.height=e.lineHeight*this.session.getRowLength(o)+"px",u.innerHTML=d.join("")}o++}},this.scrollLines=function(e){var t=this.config;if(this.config=e,!t||t.lastRow0;i--)n.removeChild(n.firstChild);if(t.lastRow>e.lastRow)for(i=this.session.getFoldedRowCount(e.lastRow+1,t.lastRow);i>0;i--)n.removeChild(n.lastChild);if(e.firstRowt.lastRow){r=this.$renderLinesFragment(e,t.lastRow+1,e.lastRow);n.appendChild(r)}},this.$renderLinesFragment=function(e,t,n){var i=this.element.ownerDocument.createDocumentFragment(),s=t,a=this.session.getNextFoldLine(s),o=a?a.start.row:1/0;while(1){if(s>o&&(s=a.end.row+1,a=this.session.getNextFoldLine(s,a),o=a?a.start.row:1/0),s>n)break;var c=r.createElement("div"),l=[];if(this.$renderLine(l,s,!1,s==o&&a),c.innerHTML=l.join(""),this.$useLineGroups())c.className="ace_line_group",i.appendChild(c),c.style.height=e.lineHeight*this.session.getRowLength(s)+"px";else while(c.firstChild)i.appendChild(c.firstChild);s++}return i},this.update=function(e){this.config=e;var t=[],n=e.firstRow,i=e.lastRow,r=n,s=this.session.getNextFoldLine(r),a=s?s.start.row:1/0;while(1){if(r>a&&(r=s.end.row+1,s=this.session.getNextFoldLine(r,s),a=s?s.start.row:1/0),r>i)break;this.$useLineGroups()&&t.push("
"),this.$renderLine(t,r,!1,r==a&&s),this.$useLineGroups()&&t.push("
"),r++}this.element.innerHTML=t.join("")},this.$textToken={text:!0,rparen:!0,lparen:!0},this.$renderToken=function(e,t,n,i){var r=this,a=/\t|&|<|>|( +)|([\x00-\x1f\x80-\xa0\xad\u1680\u180E\u2000-\u200f\u2028\u2029\u202F\u205F\u3000\uFEFF\uFFF9-\uFFFC])|[\u1100-\u115F\u11A3-\u11A7\u11FA-\u11FF\u2329-\u232A\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3000-\u303E\u3041-\u3096\u3099-\u30FF\u3105-\u312D\u3131-\u318E\u3190-\u31BA\u31C0-\u31E3\u31F0-\u321E\u3220-\u3247\u3250-\u32FE\u3300-\u4DBF\u4E00-\uA48C\uA490-\uA4C6\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFAFF\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFF01-\uFF60\uFFE0-\uFFE6]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,o=function(e,n,i,a,o){if(n)return r.showInvisibles?""+s.stringRepeat(r.SPACE_CHAR,e.length)+"":e;if("&"==e)return"&";if("<"==e)return"<";if(">"==e)return">";if("\t"==e){var c=r.session.getScreenTabSize(t+a);return t+=c-1,r.$tabStrings[c]}if(" "==e){var l=r.showInvisibles?"ace_cjk ace_invisible ace_invisible_space":"ace_cjk",u=r.showInvisibles?r.SPACE_CHAR:"";return t+=1,""+u+""}return i?""+r.SPACE_CHAR+"":(t+=1,""+e+"")},c=i.replace(a,o);if(this.$textToken[n.type])e.push(c);else{var l="ace_"+n.type.replace(/\./g," ace_"),u="";"fold"==n.type&&(u=" style='width:"+n.value.length*this.config.characterWidth+"px;' "),e.push("",c,"")}return t+i.length},this.renderIndentGuide=function(e,t,n){var i=t.search(this.$indentGuideRe);return i<=0||i>=n?t:" "==t[0]?(i-=i%this.tabSize,e.push(s.stringRepeat(this.$tabStrings[" "],i/this.tabSize)),t.substr(i)):"\t"==t[0]?(e.push(s.stringRepeat(this.$tabStrings["\t"],i)),t.substr(i)):t},this.$renderWrappedLine=function(e,t,n,i){for(var r=0,a=0,o=n[0],c=0,l=0;l=o)c=this.$renderToken(e,c,u,d.substring(0,o-r)),d=d.substring(o-r),r=o,i||e.push("","
"),e.push(s.stringRepeat(" ",n.indent)),a++,c=0,o=n[a]||Number.MAX_VALUE;0!=d.length&&(r+=d.length,c=this.$renderToken(e,c,u,d))}}},this.$renderSimpleLine=function(e,t){var n=0,i=t[0],r=i.value;this.displayIndentGuides&&(r=this.renderIndentGuide(e,r)),r&&(n=this.$renderToken(e,n,i,r));for(var s=1;s"),r.length){var s=this.session.getRowSplitData(t);s&&s.length?this.$renderWrappedLine(e,r,s,n):this.$renderSimpleLine(e,r)}this.showInvisibles&&(i&&(t=i.end.row),e.push("",t==this.session.getLength()-1?this.EOF_CHAR:this.EOL_CHAR,"")),n||e.push("
")},this.$getFoldLineTokens=function(e,t){var n=this.session,i=[];function r(e,t,n){var r=0,s=0;while(s+e[r].value.lengthn-t&&(a=a.substring(0,n-t)),i.push({type:e[r].type,value:a}),s=t+a.length,r+=1}while(sn?i.push({type:e[r].type,value:a.substring(0,n-s)}):i.push(e[r]),s+=a.length,r+=1}}var s=n.getTokens(e);return t.walk((function(e,t,a,o,c){null!=e?i.push({type:"fold",value:e}):(c&&(s=n.getTokens(t)),s.length&&r(s,o,a))}),t.end.row,this.session.getLine(t.end.row).length),i},this.$useLineGroups=function(){return this.session.getUseWrapMode()},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.$measureNode&&this.$measureNode.parentNode.removeChild(this.$measureNode),delete this.$measureNode}}).call(o.prototype),t.Text=o})),ace.define("ace/layer/cursor",["require","exports","module","ace/lib/dom"],(function(e,t,n){"use strict";var i,r=e("../lib/dom"),s=function(e){this.element=r.createElement("div"),this.element.className="ace_layer ace_cursor-layer",e.appendChild(this.element),void 0===i&&(i=!("opacity"in this.element.style)),this.isVisible=!1,this.isBlinking=!0,this.blinkInterval=1e3,this.smoothBlinking=!1,this.cursors=[],this.cursor=this.addCursor(),r.addCssClass(this.element,"ace_hidden-cursors"),this.$updateCursors=(i?this.$updateVisibility:this.$updateOpacity).bind(this)};(function(){this.$updateVisibility=function(e){for(var t=this.cursors,n=t.length;n--;)t[n].style.visibility=e?"":"hidden"},this.$updateOpacity=function(e){for(var t=this.cursors,n=t.length;n--;)t[n].style.opacity=e?"":"0"},this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setBlinking=function(e){e!=this.isBlinking&&(this.isBlinking=e,this.restartTimer())},this.setBlinkInterval=function(e){e!=this.blinkInterval&&(this.blinkInterval=e,this.restartTimer())},this.setSmoothBlinking=function(e){e==this.smoothBlinking||i||(this.smoothBlinking=e,r.setCssClass(this.element,"ace_smooth-blinking",e),this.$updateCursors(!0),this.$updateCursors=this.$updateOpacity.bind(this),this.restartTimer())},this.addCursor=function(){var e=r.createElement("div");return e.className="ace_cursor",this.element.appendChild(e),this.cursors.push(e),e},this.removeCursor=function(){if(this.cursors.length>1){var e=this.cursors.pop();return e.parentNode.removeChild(e),e}},this.hideCursor=function(){this.isVisible=!1,r.addCssClass(this.element,"ace_hidden-cursors"),this.restartTimer()},this.showCursor=function(){this.isVisible=!0,r.removeCssClass(this.element,"ace_hidden-cursors"),this.restartTimer()},this.restartTimer=function(){var e=this.$updateCursors;if(clearInterval(this.intervalId),clearTimeout(this.timeoutId),this.smoothBlinking&&r.removeCssClass(this.element,"ace_smooth-blinking"),e(!0),this.isBlinking&&this.blinkInterval&&this.isVisible){this.smoothBlinking&&setTimeout(function(){r.addCssClass(this.element,"ace_smooth-blinking")}.bind(this));var t=function(){this.timeoutId=setTimeout((function(){e(!1)}),.6*this.blinkInterval)}.bind(this);this.intervalId=setInterval((function(){e(!0),t()}),this.blinkInterval),t()}},this.getPixelPosition=function(e,t){if(!this.config||!this.session)return{left:0,top:0};e||(e=this.session.selection.getCursor());var n=this.session.documentToScreenPosition(e),i=this.$padding+(this.session.$bidiHandler.isBidiRow(n.row,e.row)?this.session.$bidiHandler.getPosLeft(n.column):n.column*this.config.characterWidth),r=(n.row-(t?this.config.firstRowScreen:0))*this.config.lineHeight;return{left:i,top:r}},this.update=function(e){this.config=e;var t=this.session.$selectionMarkers,n=0,i=0;void 0!==t&&0!==t.length||(t=[{cursor:null}]);n=0;for(var r=t.length;ne.height+e.offset||s.top<0)&&n>1)){var a=(this.cursors[i++]||this.addCursor()).style;this.drawCursor?this.drawCursor(a,s,e,t[n],this.session):(a.left=s.left+"px",a.top=s.top+"px",a.width=e.characterWidth+"px",a.height=e.lineHeight+"px")}}while(this.cursors.length>i)this.removeCursor();var o=this.session.getOverwrite();this.$setOverwrite(o),this.$pixelPos=s,this.restartTimer()},this.drawCursor=null,this.$setOverwrite=function(e){e!=this.overwrite&&(this.overwrite=e,e?r.addCssClass(this.element,"ace_overwrite-cursors"):r.removeCssClass(this.element,"ace_overwrite-cursors"))},this.destroy=function(){clearInterval(this.intervalId),clearTimeout(this.timeoutId)}}).call(s.prototype),t.Cursor=s})),ace.define("ace/scrollbar",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/event_emitter"],(function(e,t,n){"use strict";var i=e("./lib/oop"),r=e("./lib/dom"),s=e("./lib/event"),a=e("./lib/event_emitter").EventEmitter,o=32768,c=function(e){this.element=r.createElement("div"),this.element.className="ace_scrollbar ace_scrollbar"+this.classSuffix,this.inner=r.createElement("div"),this.inner.className="ace_scrollbar-inner",this.element.appendChild(this.inner),e.appendChild(this.element),this.setVisible(!1),this.skipEvent=!1,s.addListener(this.element,"scroll",this.onScroll.bind(this)),s.addListener(this.element,"mousedown",s.preventDefault)};(function(){i.implement(this,a),this.setVisible=function(e){this.element.style.display=e?"":"none",this.isVisible=e,this.coeff=1}}).call(c.prototype);var l=function(e,t){c.call(this,e),this.scrollTop=0,this.scrollHeight=0,t.$scrollbarWidth=this.width=r.scrollbarWidth(e.ownerDocument),this.inner.style.width=this.element.style.width=(this.width||15)+5+"px",this.$minWidth=0};i.inherits(l,c),function(){this.classSuffix="-v",this.onScroll=function(){if(!this.skipEvent){if(this.scrollTop=this.element.scrollTop,1!=this.coeff){var e=this.element.clientHeight/this.scrollHeight;this.scrollTop=this.scrollTop*(1-e)/(this.coeff-e)}this._emit("scroll",{data:this.scrollTop})}this.skipEvent=!1},this.getWidth=function(){return Math.max(this.isVisible?this.width:0,this.$minWidth||0)},this.setHeight=function(e){this.element.style.height=e+"px"},this.setInnerHeight=this.setScrollHeight=function(e){this.scrollHeight=e,e>o?(this.coeff=o/e,e=o):1!=this.coeff&&(this.coeff=1),this.inner.style.height=e+"px"},this.setScrollTop=function(e){this.scrollTop!=e&&(this.skipEvent=!0,this.scrollTop=e,this.element.scrollTop=e*this.coeff)}}.call(l.prototype);var u=function(e,t){c.call(this,e),this.scrollLeft=0,this.height=t.$scrollbarWidth,this.inner.style.height=this.element.style.height=(this.height||15)+5+"px"};i.inherits(u,c),function(){this.classSuffix="-h",this.onScroll=function(){this.skipEvent||(this.scrollLeft=this.element.scrollLeft,this._emit("scroll",{data:this.scrollLeft})),this.skipEvent=!1},this.getHeight=function(){return this.isVisible?this.height:0},this.setWidth=function(e){this.element.style.width=e+"px"},this.setInnerWidth=function(e){this.inner.style.width=e+"px"},this.setScrollWidth=function(e){this.inner.style.width=e+"px"},this.setScrollLeft=function(e){this.scrollLeft!=e&&(this.skipEvent=!0,this.scrollLeft=this.element.scrollLeft=e)}}.call(u.prototype),t.ScrollBar=l,t.ScrollBarV=l,t.ScrollBarH=u,t.VScrollBar=l,t.HScrollBar=u})),ace.define("ace/renderloop",["require","exports","module","ace/lib/event"],(function(e,t,n){"use strict";var i=e("./lib/event"),r=function(e,t){this.onRender=e,this.pending=!1,this.changes=0,this.window=t||window};(function(){this.schedule=function(e){if(this.changes=this.changes|e,!this.pending&&this.changes){this.pending=!0;var t=this;i.nextFrame((function(){var e;t.pending=!1;while(e=t.changes)t.changes=0,t.onRender(e)}),this.window)}}}).call(r.prototype),t.RenderLoop=r})),ace.define("ace/layer/font_metrics",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/lib/event_emitter"],(function(e,t,n){var i=e("../lib/oop"),r=e("../lib/dom"),s=e("../lib/lang"),a=e("../lib/useragent"),o=e("../lib/event_emitter").EventEmitter,c=0,l=t.FontMetrics=function(e){this.el=r.createElement("div"),this.$setMeasureNodeStyles(this.el.style,!0),this.$main=r.createElement("div"),this.$setMeasureNodeStyles(this.$main.style),this.$measureNode=r.createElement("div"),this.$setMeasureNodeStyles(this.$measureNode.style),this.el.appendChild(this.$main),this.el.appendChild(this.$measureNode),e.appendChild(this.el),c||this.$testFractionalRect(),this.$measureNode.innerHTML=s.stringRepeat("X",c),this.$characterSize={width:0,height:0},this.checkForSizeChanges()};(function(){i.implement(this,o),this.$characterSize={width:0,height:0},this.$testFractionalRect=function(){var e=r.createElement("div");this.$setMeasureNodeStyles(e.style),e.style.width="0.2px",document.documentElement.appendChild(e);var t=e.getBoundingClientRect().width;c=t>0&&t<1?50:100,e.parentNode.removeChild(e)},this.$setMeasureNodeStyles=function(e,t){e.width=e.height="auto",e.left=e.top="0px",e.visibility="hidden",e.position="absolute",e.whiteSpace="pre",a.isIE<8?e["font-family"]="inherit":e.font="inherit",e.overflow=t?"hidden":"visible"},this.checkForSizeChanges=function(){var e=this.$measureSizes();if(e&&(this.$characterSize.width!==e.width||this.$characterSize.height!==e.height)){this.$measureNode.style.fontWeight="bold";var t=this.$measureSizes();this.$measureNode.style.fontWeight="",this.$characterSize=e,this.charSizes=Object.create(null),this.allowBoldFonts=t&&t.width===e.width&&t.height===e.height,this._emit("changeCharacterSize",{data:e})}},this.$pollSizeChanges=function(){if(this.$pollSizeChangesTimer)return this.$pollSizeChangesTimer;var e=this;return this.$pollSizeChangesTimer=setInterval((function(){e.checkForSizeChanges()}),500)},this.setPolling=function(e){e?this.$pollSizeChanges():this.$pollSizeChangesTimer&&(clearInterval(this.$pollSizeChangesTimer),this.$pollSizeChangesTimer=0)},this.$measureSizes=function(){if(50===c){var e=null;try{e=this.$measureNode.getBoundingClientRect()}catch(n){e={width:0,height:0}}var t={height:e.height,width:e.width/c}}else t={height:this.$measureNode.clientHeight,width:this.$measureNode.clientWidth/c};return 0===t.width||0===t.height?null:t},this.$measureCharWidth=function(e){this.$main.innerHTML=s.stringRepeat(e,c);var t=this.$main.getBoundingClientRect();return t.width/c},this.getCharacterWidth=function(e){var t=this.charSizes[e];return void 0===t&&(t=this.charSizes[e]=this.$measureCharWidth(e)/this.$characterSize.width),t},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.el&&this.el.parentNode&&this.el.parentNode.removeChild(this.el)}}).call(l.prototype)})),ace.define("ace/virtual_renderer",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/config","ace/lib/useragent","ace/layer/gutter","ace/layer/marker","ace/layer/text","ace/layer/cursor","ace/scrollbar","ace/scrollbar","ace/renderloop","ace/layer/font_metrics","ace/lib/event_emitter"],(function(e,t,n){"use strict";var i=e("./lib/oop"),r=e("./lib/dom"),s=e("./config"),a=e("./lib/useragent"),o=e("./layer/gutter").Gutter,c=e("./layer/marker").Marker,l=e("./layer/text").Text,u=e("./layer/cursor").Cursor,d=e("./scrollbar").HScrollBar,h=e("./scrollbar").VScrollBar,f=e("./renderloop").RenderLoop,p=e("./layer/font_metrics").FontMetrics,g=e("./lib/event_emitter").EventEmitter,m='.ace_editor {position: relative;overflow: hidden;font: 12px/normal \'Monaco\', \'Menlo\', \'Ubuntu Mono\', \'Consolas\', \'source-code-pro\', monospace;direction: ltr;text-align: left;-webkit-tap-highlight-color: rgba(0, 0, 0, 0);}.ace_scroller {position: absolute;overflow: hidden;top: 0;bottom: 0;background-color: inherit;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;cursor: text;}.ace_content {position: absolute;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;min-width: 100%;}.ace_dragging .ace_scroller:before{position: absolute;top: 0;left: 0;right: 0;bottom: 0;content: \'\';background: rgba(250, 250, 250, 0.01);z-index: 1000;}.ace_dragging.ace_dark .ace_scroller:before{background: rgba(0, 0, 0, 0.01);}.ace_selecting, .ace_selecting * {cursor: text !important;}.ace_gutter {position: absolute;overflow : hidden;width: auto;top: 0;bottom: 0;left: 0;cursor: default;z-index: 4;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;}.ace_gutter-active-line {position: absolute;left: 0;right: 0;}.ace_scroller.ace_scroll-left {box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;}.ace_gutter-cell {padding-left: 19px;padding-right: 6px;background-repeat: no-repeat;}.ace_gutter-cell.ace_error {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==");background-repeat: no-repeat;background-position: 2px center;}.ace_gutter-cell.ace_warning {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==");background-position: 2px center;}.ace_gutter-cell.ace_info {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=");background-position: 2px center;}.ace_dark .ace_gutter-cell.ace_info {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC");}.ace_scrollbar {position: absolute;right: 0;bottom: 0;z-index: 6;}.ace_scrollbar-inner {position: absolute;cursor: text;left: 0;top: 0;}.ace_scrollbar-v{overflow-x: hidden;overflow-y: scroll;top: 0;}.ace_scrollbar-h {overflow-x: scroll;overflow-y: hidden;left: 0;}.ace_print-margin {position: absolute;height: 100%;}.ace_text-input {position: absolute;z-index: 0;width: 0.5em;height: 1em;opacity: 0;background: transparent;-moz-appearance: none;appearance: none;border: none;resize: none;outline: none;overflow: hidden;font: inherit;padding: 0 1px;margin: 0 -1px;text-indent: -1em;-ms-user-select: text;-moz-user-select: text;-webkit-user-select: text;user-select: text;white-space: pre!important;}.ace_text-input.ace_composition {background: inherit;color: inherit;z-index: 1000;opacity: 1;text-indent: 0;}.ace_layer {z-index: 1;position: absolute;overflow: hidden;word-wrap: normal;white-space: pre;height: 100%;width: 100%;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;pointer-events: none;}.ace_gutter-layer {position: relative;width: auto;text-align: right;pointer-events: auto;}.ace_text-layer {font: inherit !important;}.ace_cjk {display: inline-block;text-align: center;}.ace_cursor-layer {z-index: 4;}.ace_cursor {z-index: 4;position: absolute;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;border-left: 2px solid;transform: translatez(0);}.ace_multiselect .ace_cursor {border-left-width: 1px;}.ace_slim-cursors .ace_cursor {border-left-width: 1px;}.ace_overwrite-cursors .ace_cursor {border-left-width: 0;border-bottom: 1px solid;}.ace_hidden-cursors .ace_cursor {opacity: 0.2;}.ace_smooth-blinking .ace_cursor {-webkit-transition: opacity 0.18s;transition: opacity 0.18s;}.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {position: absolute;z-index: 3;}.ace_marker-layer .ace_selection {position: absolute;z-index: 5;}.ace_marker-layer .ace_bracket {position: absolute;z-index: 6;}.ace_marker-layer .ace_active-line {position: absolute;z-index: 2;}.ace_marker-layer .ace_selected-word {position: absolute;z-index: 4;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;}.ace_line .ace_fold {-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;display: inline-block;height: 11px;margin-top: -2px;vertical-align: middle;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII="),url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=");background-repeat: no-repeat, repeat-x;background-position: center center, top left;color: transparent;border: 1px solid black;border-radius: 2px;cursor: pointer;pointer-events: auto;}.ace_dark .ace_fold {}.ace_fold:hover{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII="),url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC");}.ace_tooltip {background-color: #FFF;background-image: -webkit-linear-gradient(top, transparent, rgba(0, 0, 0, 0.1));background-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));border: 1px solid gray;border-radius: 1px;box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);color: black;max-width: 100%;padding: 3px 4px;position: fixed;z-index: 999999;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;cursor: default;white-space: pre;word-wrap: break-word;line-height: normal;font-style: normal;font-weight: normal;letter-spacing: normal;pointer-events: none;}.ace_folding-enabled > .ace_gutter-cell {padding-right: 13px;}.ace_fold-widget {-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0 -12px 0 1px;display: none;width: 11px;vertical-align: top;background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==");background-repeat: no-repeat;background-position: center;border-radius: 3px;border: 1px solid transparent;cursor: pointer;}.ace_folding-enabled .ace_fold-widget {display: inline-block; }.ace_fold-widget.ace_end {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==");}.ace_fold-widget.ace_closed {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==");}.ace_fold-widget:hover {border: 1px solid rgba(0, 0, 0, 0.3);background-color: rgba(255, 255, 255, 0.2);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);}.ace_fold-widget:active {border: 1px solid rgba(0, 0, 0, 0.4);background-color: rgba(0, 0, 0, 0.05);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);}.ace_dark .ace_fold-widget {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC");}.ace_dark .ace_fold-widget.ace_end {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==");}.ace_dark .ace_fold-widget.ace_closed {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==");}.ace_dark .ace_fold-widget:hover {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);background-color: rgba(255, 255, 255, 0.1);}.ace_dark .ace_fold-widget:active {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);}.ace_fold-widget.ace_invalid {background-color: #FFB4B4;border-color: #DE5555;}.ace_fade-fold-widgets .ace_fold-widget {-webkit-transition: opacity 0.4s ease 0.05s;transition: opacity 0.4s ease 0.05s;opacity: 0;}.ace_fade-fold-widgets:hover .ace_fold-widget {-webkit-transition: opacity 0.05s ease 0.05s;transition: opacity 0.05s ease 0.05s;opacity:1;}.ace_underline {text-decoration: underline;}.ace_bold {font-weight: bold;}.ace_nobold .ace_bold {font-weight: normal;}.ace_italic {font-style: italic;}.ace_error-marker {background-color: rgba(255, 0, 0,0.2);position: absolute;z-index: 9;}.ace_highlight-marker {background-color: rgba(255, 255, 0,0.2);position: absolute;z-index: 8;}.ace_br1 {border-top-left-radius : 3px;}.ace_br2 {border-top-right-radius : 3px;}.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}.ace_br4 {border-bottom-right-radius: 3px;}.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}.ace_br8 {border-bottom-left-radius : 3px;}.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_text-input-ios {position: absolute !important;top: -100000px !important;left: -100000px !important;}';r.importCssString(m,"ace_editor.css");var v=function(e,t){var n=this;this.container=e||r.createElement("div"),this.$keepTextAreaAtCursor=!a.isOldIE,r.addCssClass(this.container,"ace_editor"),this.setTheme(t),this.$gutter=r.createElement("div"),this.$gutter.className="ace_gutter",this.container.appendChild(this.$gutter),this.$gutter.setAttribute("aria-hidden",!0),this.scroller=r.createElement("div"),this.scroller.className="ace_scroller",this.container.appendChild(this.scroller),this.content=r.createElement("div"),this.content.className="ace_content",this.scroller.appendChild(this.content),this.$gutterLayer=new o(this.$gutter),this.$gutterLayer.on("changeGutterWidth",this.onGutterResize.bind(this)),this.$markerBack=new c(this.content);var i=this.$textLayer=new l(this.content);this.canvas=i.element,this.$markerFront=new c(this.content),this.$cursorLayer=new u(this.content),this.$horizScroll=!1,this.$vScroll=!1,this.scrollBar=this.scrollBarV=new h(this.container,this),this.scrollBarH=new d(this.container,this),this.scrollBarV.addEventListener("scroll",(function(e){n.$scrollAnimation||n.session.setScrollTop(e.data-n.scrollMargin.top)})),this.scrollBarH.addEventListener("scroll",(function(e){n.$scrollAnimation||n.session.setScrollLeft(e.data-n.scrollMargin.left)})),this.scrollTop=0,this.scrollLeft=0,this.cursorPos={row:0,column:0},this.$fontMetrics=new p(this.container),this.$textLayer.$setFontMetrics(this.$fontMetrics),this.$textLayer.addEventListener("changeCharacterSize",(function(e){n.updateCharacterSize(),n.onResize(!0,n.gutterWidth,n.$size.width,n.$size.height),n._signal("changeCharacterSize",e)})),this.$size={width:0,height:0,scrollerHeight:0,scrollerWidth:0,$dirty:!0},this.layerConfig={width:1,padding:0,firstRow:0,firstRowScreen:0,lastRow:0,lineHeight:0,characterWidth:0,minHeight:1,maxHeight:1,offset:0,height:1,gutterOffset:1},this.scrollMargin={left:0,right:0,top:0,bottom:0,v:0,h:0},this.$loop=new f(this.$renderChanges.bind(this),this.container.ownerDocument.defaultView),this.$loop.schedule(this.CHANGE_FULL),this.updateCharacterSize(),this.setPadding(4),s.resetOptions(this),s._emit("renderer",this)};(function(){this.CHANGE_CURSOR=1,this.CHANGE_MARKER=2,this.CHANGE_GUTTER=4,this.CHANGE_SCROLL=8,this.CHANGE_LINES=16,this.CHANGE_TEXT=32,this.CHANGE_SIZE=64,this.CHANGE_MARKER_BACK=128,this.CHANGE_MARKER_FRONT=256,this.CHANGE_FULL=512,this.CHANGE_H_SCROLL=1024,i.implement(this,g),this.updateCharacterSize=function(){this.$textLayer.allowBoldFonts!=this.$allowBoldFonts&&(this.$allowBoldFonts=this.$textLayer.allowBoldFonts,this.setStyle("ace_nobold",!this.$allowBoldFonts)),this.layerConfig.characterWidth=this.characterWidth=this.$textLayer.getCharacterWidth(),this.layerConfig.lineHeight=this.lineHeight=this.$textLayer.getLineHeight(),this.$updatePrintMargin()},this.setSession=function(e){this.session&&this.session.doc.off("changeNewLineMode",this.onChangeNewLineMode),this.session=e,e&&this.scrollMargin.top&&e.getScrollTop()<=0&&e.setScrollTop(-this.scrollMargin.top),this.$cursorLayer.setSession(e),this.$markerBack.setSession(e),this.$markerFront.setSession(e),this.$gutterLayer.setSession(e),this.$textLayer.setSession(e),e&&(this.$loop.schedule(this.CHANGE_FULL),this.session.$setFontMetrics(this.$fontMetrics),this.scrollBarH.scrollLeft=this.scrollBarV.scrollTop=null,this.onChangeNewLineMode=this.onChangeNewLineMode.bind(this),this.onChangeNewLineMode(),this.session.doc.on("changeNewLineMode",this.onChangeNewLineMode))},this.updateLines=function(e,t,n){if(void 0===t&&(t=1/0),this.$changedLines?(this.$changedLines.firstRow>e&&(this.$changedLines.firstRow=e),this.$changedLines.lastRowthis.layerConfig.lastRow||this.$loop.schedule(this.CHANGE_LINES)},this.onChangeNewLineMode=function(){this.$loop.schedule(this.CHANGE_TEXT),this.$textLayer.$updateEolChar(),this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR)},this.onChangeTabSize=function(){this.$loop.schedule(this.CHANGE_TEXT|this.CHANGE_MARKER),this.$textLayer.onChangeTabSize()},this.updateText=function(){this.$loop.schedule(this.CHANGE_TEXT)},this.updateFull=function(e){e?this.$renderChanges(this.CHANGE_FULL,!0):this.$loop.schedule(this.CHANGE_FULL)},this.updateFontSize=function(){this.$textLayer.checkForSizeChanges()},this.$changes=0,this.$updateSizeAsync=function(){this.$loop.pending?this.$size.$dirty=!0:this.onResize()},this.onResize=function(e,t,n,i){if(!(this.resizing>2)){this.resizing>0?this.resizing++:this.resizing=e?1:0;var r=this.container;i||(i=r.clientHeight||r.scrollHeight),n||(n=r.clientWidth||r.scrollWidth);var s=this.$updateCachedSize(e,t,n,i);if(!this.$size.scrollerHeight||!n&&!i)return this.resizing=0;e&&(this.$gutterLayer.$padding=null),e?this.$renderChanges(s|this.$changes,!0):this.$loop.schedule(s|this.$changes),this.resizing&&(this.resizing=0),this.scrollBarV.scrollLeft=this.scrollBarV.scrollTop=null}},this.$updateCachedSize=function(e,t,n,i){i-=this.$extraHeight||0;var r=0,s=this.$size,a={width:s.width,height:s.height,scrollerHeight:s.scrollerHeight,scrollerWidth:s.scrollerWidth};return i&&(e||s.height!=i)&&(s.height=i,r|=this.CHANGE_SIZE,s.scrollerHeight=s.height,this.$horizScroll&&(s.scrollerHeight-=this.scrollBarH.getHeight()),this.scrollBarV.element.style.bottom=this.scrollBarH.getHeight()+"px",r|=this.CHANGE_SCROLL),n&&(e||s.width!=n)&&(r|=this.CHANGE_SIZE,s.width=n,null==t&&(t=this.$showGutter?this.$gutter.offsetWidth:0),this.gutterWidth=t,this.scrollBarH.element.style.left=this.scroller.style.left=t+"px",s.scrollerWidth=Math.max(0,n-t-this.scrollBarV.getWidth()),this.scrollBarH.element.style.right=this.scroller.style.right=this.scrollBarV.getWidth()+"px",this.scroller.style.bottom=this.scrollBarH.getHeight()+"px",(this.session&&this.session.getUseWrapMode()&&this.adjustWrapLimit()||e)&&(r|=this.CHANGE_FULL)),s.$dirty=!n||!i,r&&this._signal("resize",a),r},this.onGutterResize=function(){var e=this.$showGutter?this.$gutter.offsetWidth:0;e!=this.gutterWidth&&(this.$changes|=this.$updateCachedSize(!0,e,this.$size.width,this.$size.height)),this.session.getUseWrapMode()&&this.adjustWrapLimit()||this.$size.$dirty?this.$loop.schedule(this.CHANGE_FULL):(this.$computeLayerConfig(),this.$loop.schedule(this.CHANGE_MARKER))},this.adjustWrapLimit=function(){var e=this.$size.scrollerWidth-2*this.$padding,t=Math.floor(e/this.characterWidth);return this.session.adjustWrapLimit(t,this.$showPrintMargin&&this.$printMarginColumn)},this.setAnimatedScroll=function(e){this.setOption("animatedScroll",e)},this.getAnimatedScroll=function(){return this.$animatedScroll},this.setShowInvisibles=function(e){this.setOption("showInvisibles",e),this.session.$bidiHandler.setShowInvisibles(e)},this.getShowInvisibles=function(){return this.getOption("showInvisibles")},this.getDisplayIndentGuides=function(){return this.getOption("displayIndentGuides")},this.setDisplayIndentGuides=function(e){this.setOption("displayIndentGuides",e)},this.setShowPrintMargin=function(e){this.setOption("showPrintMargin",e)},this.getShowPrintMargin=function(){return this.getOption("showPrintMargin")},this.setPrintMarginColumn=function(e){this.setOption("printMarginColumn",e)},this.getPrintMarginColumn=function(){return this.getOption("printMarginColumn")},this.getShowGutter=function(){return this.getOption("showGutter")},this.setShowGutter=function(e){return this.setOption("showGutter",e)},this.getFadeFoldWidgets=function(){return this.getOption("fadeFoldWidgets")},this.setFadeFoldWidgets=function(e){this.setOption("fadeFoldWidgets",e)},this.setHighlightGutterLine=function(e){this.setOption("highlightGutterLine",e)},this.getHighlightGutterLine=function(){return this.getOption("highlightGutterLine")},this.$updateGutterLineHighlight=function(){var e=this.$cursorLayer.$pixelPos,t=this.layerConfig.lineHeight;if(this.session.getUseWrapMode()){var n=this.session.selection.getCursor();n.column=0,e=this.$cursorLayer.getPixelPosition(n,!0),t*=this.session.getRowLength(n.row)}this.$gutterLineHighlight.style.top=e.top-this.layerConfig.offset+"px",this.$gutterLineHighlight.style.height=t+"px"},this.$updatePrintMargin=function(){if(this.$showPrintMargin||this.$printMarginEl){if(!this.$printMarginEl){var e=r.createElement("div");e.className="ace_layer ace_print-margin-layer",this.$printMarginEl=r.createElement("div"),this.$printMarginEl.className="ace_print-margin",e.appendChild(this.$printMarginEl),this.content.insertBefore(e,this.content.firstChild)}var t=this.$printMarginEl.style;t.left=this.characterWidth*this.$printMarginColumn+this.$padding+"px",t.visibility=this.$showPrintMargin?"visible":"hidden",this.session&&-1==this.session.$wrap&&this.adjustWrapLimit()}},this.getContainerElement=function(){return this.container},this.getMouseEventTarget=function(){return this.scroller},this.getTextAreaContainer=function(){return this.container},this.$moveTextAreaToCursor=function(){if(this.$keepTextAreaAtCursor){var e=this.layerConfig,t=this.$cursorLayer.$pixelPos.top,n=this.$cursorLayer.$pixelPos.left;t-=e.offset;var i=this.textarea.style,r=this.lineHeight;if(t<0||t>e.height-r)i.top=i.left="0";else{var s=this.characterWidth;if(this.$composition){var a=this.textarea.value.replace(/^\x01+/,"");s*=this.session.$getStringScreenWidth(a)[0]+2,r+=2}n-=this.scrollLeft,n>this.$size.scrollerWidth-s&&(n=this.$size.scrollerWidth-s),n+=this.gutterWidth,i.height=r+"px",i.width=s+"px",i.left=Math.min(n,this.$size.scrollerWidth-s)+"px",i.top=Math.min(t,this.$size.height-r)+"px"}}},this.getFirstVisibleRow=function(){return this.layerConfig.firstRow},this.getFirstFullyVisibleRow=function(){return this.layerConfig.firstRow+(0===this.layerConfig.offset?0:1)},this.getLastFullyVisibleRow=function(){var e=this.layerConfig,t=e.lastRow,n=this.session.documentToScreenRow(t,0)*e.lineHeight;return n-this.session.getScrollTop()>e.height-e.lineHeight?t-1:t},this.getLastVisibleRow=function(){return this.layerConfig.lastRow},this.$padding=null,this.setPadding=function(e){this.$padding=e,this.$textLayer.setPadding(e),this.$cursorLayer.setPadding(e),this.$markerFront.setPadding(e),this.$markerBack.setPadding(e),this.$loop.schedule(this.CHANGE_FULL),this.$updatePrintMargin()},this.setScrollMargin=function(e,t,n,i){var r=this.scrollMargin;r.top=0|e,r.bottom=0|t,r.right=0|i,r.left=0|n,r.v=r.top+r.bottom,r.h=r.left+r.right,r.top&&this.scrollTop<=0&&this.session&&this.session.setScrollTop(-r.top),this.updateFull()},this.getHScrollBarAlwaysVisible=function(){return this.$hScrollBarAlwaysVisible},this.setHScrollBarAlwaysVisible=function(e){this.setOption("hScrollBarAlwaysVisible",e)},this.getVScrollBarAlwaysVisible=function(){return this.$vScrollBarAlwaysVisible},this.setVScrollBarAlwaysVisible=function(e){this.setOption("vScrollBarAlwaysVisible",e)},this.$updateScrollBarV=function(){var e=this.layerConfig.maxHeight,t=this.$size.scrollerHeight;!this.$maxLines&&this.$scrollPastEnd&&(e-=(t-this.lineHeight)*this.$scrollPastEnd,this.scrollTop>e-t&&(e=this.scrollTop+t,this.scrollBarV.scrollTop=null)),this.scrollBarV.setScrollHeight(e+this.scrollMargin.v),this.scrollBarV.setScrollTop(this.scrollTop+this.scrollMargin.top)},this.$updateScrollBarH=function(){this.scrollBarH.setScrollWidth(this.layerConfig.width+2*this.$padding+this.scrollMargin.h),this.scrollBarH.setScrollLeft(this.scrollLeft+this.scrollMargin.left)},this.$frozen=!1,this.freeze=function(){this.$frozen=!0},this.unfreeze=function(){this.$frozen=!1},this.$renderChanges=function(e,t){if(this.$changes&&(e|=this.$changes,this.$changes=0),this.session&&this.container.offsetWidth&&!this.$frozen&&(e||t)){if(this.$size.$dirty)return this.$changes|=e,this.onResize(!0);this.lineHeight||this.$textLayer.checkForSizeChanges(),this._signal("beforeRender"),this.session&&this.session.$bidiHandler&&this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);var n=this.layerConfig;if(e&this.CHANGE_FULL||e&this.CHANGE_SIZE||e&this.CHANGE_TEXT||e&this.CHANGE_LINES||e&this.CHANGE_SCROLL||e&this.CHANGE_H_SCROLL){if(e|=this.$computeLayerConfig(),n.firstRow!=this.layerConfig.firstRow&&n.firstRowScreen==this.layerConfig.firstRowScreen){var i=this.scrollTop+(n.firstRow-this.layerConfig.firstRow)*this.lineHeight;i>0&&(this.scrollTop=i,e|=this.CHANGE_SCROLL,e|=this.$computeLayerConfig())}n=this.layerConfig,this.$updateScrollBarV(),e&this.CHANGE_H_SCROLL&&this.$updateScrollBarH(),this.$gutterLayer.element.style.marginTop=-n.offset+"px",this.content.style.marginTop=-n.offset+"px",this.content.style.width=n.width+2*this.$padding+"px",this.content.style.height=n.minHeight+"px"}if(e&this.CHANGE_H_SCROLL&&(this.content.style.marginLeft=-this.scrollLeft+"px",this.scroller.className=this.scrollLeft<=0?"ace_scroller":"ace_scroller ace_scroll-left"),e&this.CHANGE_FULL)return this.$textLayer.update(n),this.$showGutter&&this.$gutterLayer.update(n),this.$markerBack.update(n),this.$markerFront.update(n),this.$cursorLayer.update(n),this.$moveTextAreaToCursor(),this.$highlightGutterLine&&this.$updateGutterLineHighlight(),void this._signal("afterRender");if(e&this.CHANGE_SCROLL)return e&this.CHANGE_TEXT||e&this.CHANGE_LINES?this.$textLayer.update(n):this.$textLayer.scrollLines(n),this.$showGutter&&this.$gutterLayer.update(n),this.$markerBack.update(n),this.$markerFront.update(n),this.$cursorLayer.update(n),this.$highlightGutterLine&&this.$updateGutterLineHighlight(),this.$moveTextAreaToCursor(),void this._signal("afterRender");e&this.CHANGE_TEXT?(this.$textLayer.update(n),this.$showGutter&&this.$gutterLayer.update(n)):e&this.CHANGE_LINES?(this.$updateLines()||e&this.CHANGE_GUTTER&&this.$showGutter)&&this.$gutterLayer.update(n):(e&this.CHANGE_TEXT||e&this.CHANGE_GUTTER)&&this.$showGutter&&this.$gutterLayer.update(n),e&this.CHANGE_CURSOR&&(this.$cursorLayer.update(n),this.$moveTextAreaToCursor(),this.$highlightGutterLine&&this.$updateGutterLineHighlight()),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_FRONT)&&this.$markerFront.update(n),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_BACK)&&this.$markerBack.update(n),this._signal("afterRender")}else this.$changes|=e},this.$autosize=function(){var e=this.session.getScreenLength()*this.lineHeight,t=this.$maxLines*this.lineHeight,n=Math.min(t,Math.max((this.$minLines||1)*this.lineHeight,e))+this.scrollMargin.v+(this.$extraHeight||0);this.$horizScroll&&(n+=this.scrollBarH.getHeight()),this.$maxPixelHeight&&n>this.$maxPixelHeight&&(n=this.$maxPixelHeight);var i=e>t;if(n!=this.desiredHeight||this.$size.height!=this.desiredHeight||i!=this.$vScroll){i!=this.$vScroll&&(this.$vScroll=i,this.scrollBarV.setVisible(i));var r=this.container.clientWidth;this.container.style.height=n+"px",this.$updateCachedSize(!0,this.$gutterWidth,r,n),this.desiredHeight=n,this._signal("autosize")}},this.$computeLayerConfig=function(){var e=this.session,t=this.$size,n=t.height<=2*this.lineHeight,i=this.session.getScreenLength(),r=i*this.lineHeight,s=this.$getLongestLine(),a=!n&&(this.$hScrollBarAlwaysVisible||t.scrollerWidth-s-2*this.$padding<0),o=this.$horizScroll!==a;o&&(this.$horizScroll=a,this.scrollBarH.setVisible(a));var c=this.$vScroll;this.$maxLines&&this.lineHeight>1&&this.$autosize();var l=this.scrollTop%this.lineHeight,u=t.scrollerHeight+this.lineHeight,d=!this.$maxLines&&this.$scrollPastEnd?(t.scrollerHeight-this.lineHeight)*this.$scrollPastEnd:0;r+=d;var h=this.scrollMargin;this.session.setScrollTop(Math.max(-h.top,Math.min(this.scrollTop,r-t.scrollerHeight+h.bottom))),this.session.setScrollLeft(Math.max(-h.left,Math.min(this.scrollLeft,s+2*this.$padding-t.scrollerWidth+h.right)));var f=!n&&(this.$vScrollBarAlwaysVisible||t.scrollerHeight-r+d<0||this.scrollTop>h.top),p=c!==f;p&&(this.$vScroll=f,this.scrollBarV.setVisible(f));var g,m,v=Math.ceil(u/this.lineHeight)-1,b=Math.max(0,Math.round((this.scrollTop-l)/this.lineHeight)),y=b+v,w=this.lineHeight;b=e.screenToDocumentRow(b,0);var _=e.getFoldLine(b);_&&(b=_.start.row),g=e.documentToScreenRow(b,0),m=e.getRowLength(b)*w,y=Math.min(e.screenToDocumentRow(y,0),e.getLength()-1),u=t.scrollerHeight+e.getRowLength(y)*w+m,l=this.scrollTop-g*w;var x=0;return this.layerConfig.width!=s&&(x=this.CHANGE_H_SCROLL),(o||p)&&(x=this.$updateCachedSize(!0,this.gutterWidth,t.width,t.height),this._signal("scrollbarVisibilityChanged"),p&&(s=this.$getLongestLine())),this.layerConfig={width:s,padding:this.$padding,firstRow:b,firstRowScreen:g,lastRow:y,lineHeight:w,characterWidth:this.characterWidth,minHeight:u,maxHeight:r,offset:l,gutterOffset:w?Math.max(0,Math.ceil((l+t.height-t.scrollerHeight)/w)):0,height:this.$size.scrollerHeight},x},this.$updateLines=function(){if(this.$changedLines){var e=this.$changedLines.firstRow,t=this.$changedLines.lastRow;this.$changedLines=null;var n=this.layerConfig;if(!(e>n.lastRow+1)&&!(ts?(t&&c+a>s+this.lineHeight&&(s-=t*this.$size.scrollerHeight),0===s&&(s=-this.scrollMargin.top),this.session.setScrollTop(s)):c+this.$size.scrollerHeight-or?(r=1-this.scrollMargin.top||(t>0&&this.session.getScrollTop()+this.$size.scrollerHeight-this.layerConfig.maxHeight<-1+this.scrollMargin.bottom||(e<0&&this.session.getScrollLeft()>=1-this.scrollMargin.left||(e>0&&this.session.getScrollLeft()+this.$size.scrollerWidth-this.layerConfig.width<-1+this.scrollMargin.right||void 0)))},this.pixelToScreenCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),i=e+this.scrollLeft-n.left-this.$padding,r=i/this.characterWidth,s=Math.floor((t+this.scrollTop-n.top)/this.lineHeight),a=Math.round(r);return{row:s,column:a,side:r-a>0?1:-1,offsetX:i}},this.screenToTextCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),i=e+this.scrollLeft-n.left-this.$padding,r=Math.round(i/this.characterWidth),s=(t+this.scrollTop-n.top)/this.lineHeight;return this.session.screenToDocumentPosition(s,Math.max(r,0),i)},this.textToScreenCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),i=this.session.documentToScreenPosition(e,t),r=this.$padding+(this.session.$bidiHandler.isBidiRow(i.row,e)?this.session.$bidiHandler.getPosLeft(i.column):Math.round(i.column*this.characterWidth)),s=i.row*this.lineHeight;return{pageX:n.left+r-this.scrollLeft,pageY:n.top+s-this.scrollTop}},this.visualizeFocus=function(){r.addCssClass(this.container,"ace_focus")},this.visualizeBlur=function(){r.removeCssClass(this.container,"ace_focus")},this.showComposition=function(e){this.$composition||(this.$composition={keepTextAreaAtCursor:this.$keepTextAreaAtCursor,cssText:this.textarea.style.cssText}),this.$keepTextAreaAtCursor=!0,r.addCssClass(this.textarea,"ace_composition"),this.textarea.style.cssText="",this.$moveTextAreaToCursor()},this.setCompositionText=function(e){this.$moveTextAreaToCursor()},this.hideComposition=function(){this.$composition&&(r.removeCssClass(this.textarea,"ace_composition"),this.$keepTextAreaAtCursor=this.$composition.keepTextAreaAtCursor,this.textarea.style.cssText=this.$composition.cssText,this.$composition=null)},this.setTheme=function(e,t){var n=this;if(this.$themeId=e,n._dispatchEvent("themeChange",{theme:e}),e&&"string"!=typeof e)a(e);else{var i=e||this.$options.theme.initialValue;s.loadModule(["theme",i],a)}function a(i){if(n.$themeId!=e)return t&&t();if(!i||!i.cssClass)throw new Error("couldn't load module "+e+" or it didn't call define");r.importCssString(i.cssText,i.cssClass,n.container.ownerDocument),n.theme&&r.removeCssClass(n.container,n.theme.cssClass);var s="padding"in i?i.padding:"padding"in(n.theme||{})?4:n.$padding;n.$padding&&s!=n.$padding&&n.setPadding(s),n.$theme=i.cssClass,n.theme=i,r.addCssClass(n.container,i.cssClass),r.setCssClass(n.container,"ace_dark",i.isDark),n.$size&&(n.$size.width=0,n.$updateSizeAsync()),n._dispatchEvent("themeLoaded",{theme:i}),t&&t()}},this.getTheme=function(){return this.$themeId},this.setStyle=function(e,t){r.setCssClass(this.container,e,!1!==t)},this.unsetStyle=function(e){r.removeCssClass(this.container,e)},this.setCursorStyle=function(e){this.scroller.style.cursor!=e&&(this.scroller.style.cursor=e)},this.setMouseCursor=function(e){this.scroller.style.cursor=e},this.destroy=function(){this.$textLayer.destroy(),this.$cursorLayer.destroy()}}).call(v.prototype),s.defineOptions(v.prototype,"renderer",{animatedScroll:{initialValue:!1},showInvisibles:{set:function(e){this.$textLayer.setShowInvisibles(e)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!1},showPrintMargin:{set:function(){this.$updatePrintMargin()},initialValue:!0},printMarginColumn:{set:function(){this.$updatePrintMargin()},initialValue:80},printMargin:{set:function(e){"number"==typeof e&&(this.$printMarginColumn=e),this.$showPrintMargin=!!e,this.$updatePrintMargin()},get:function(){return this.$showPrintMargin&&this.$printMarginColumn}},showGutter:{set:function(e){this.$gutter.style.display=e?"block":"none",this.$loop.schedule(this.CHANGE_FULL),this.onGutterResize()},initialValue:!0},fadeFoldWidgets:{set:function(e){r.setCssClass(this.$gutter,"ace_fade-fold-widgets",e)},initialValue:!1},showFoldWidgets:{set:function(e){this.$gutterLayer.setShowFoldWidgets(e)},initialValue:!0},showLineNumbers:{set:function(e){this.$gutterLayer.setShowLineNumbers(e),this.$loop.schedule(this.CHANGE_GUTTER)},initialValue:!0},displayIndentGuides:{set:function(e){this.$textLayer.setDisplayIndentGuides(e)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!0},highlightGutterLine:{set:function(e){if(!this.$gutterLineHighlight)return this.$gutterLineHighlight=r.createElement("div"),this.$gutterLineHighlight.className="ace_gutter-active-line",void this.$gutter.appendChild(this.$gutterLineHighlight);this.$gutterLineHighlight.style.display=e?"":"none",this.$cursorLayer.$pixelPos&&this.$updateGutterLineHighlight()},initialValue:!1,value:!0},hScrollBarAlwaysVisible:{set:function(e){this.$hScrollBarAlwaysVisible&&this.$horizScroll||this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},vScrollBarAlwaysVisible:{set:function(e){this.$vScrollBarAlwaysVisible&&this.$vScroll||this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},fontSize:{set:function(e){"number"==typeof e&&(e+="px"),this.container.style.fontSize=e,this.updateFontSize()},initialValue:12},fontFamily:{set:function(e){this.container.style.fontFamily=e,this.updateFontSize()}},maxLines:{set:function(e){this.updateFull()}},minLines:{set:function(e){this.updateFull()}},maxPixelHeight:{set:function(e){this.updateFull()},initialValue:0},scrollPastEnd:{set:function(e){e=+e||0,this.$scrollPastEnd!=e&&(this.$scrollPastEnd=e,this.$loop.schedule(this.CHANGE_SCROLL))},initialValue:0,handlesSet:!0},fixedWidthGutter:{set:function(e){this.$gutterLayer.$fixedWidth=!!e,this.$loop.schedule(this.CHANGE_GUTTER)}},theme:{set:function(e){this.setTheme(e)},get:function(){return this.$themeId||this.theme},initialValue:"./theme/textmate",handlesSet:!0}}),t.VirtualRenderer=v})),ace.define("ace/worker/worker_client",["require","exports","module","ace/lib/oop","ace/lib/net","ace/lib/event_emitter","ace/config"],(function(e,t,n){"use strict";var i=e("../lib/oop"),r=e("../lib/net"),s=e("../lib/event_emitter").EventEmitter,a=e("../config");function o(e,t){var n=t.src;r.qualifyURL(e);try{return new Blob([n],{type:"application/javascript"})}catch(a){var i=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder,s=new i;return s.append(n),s.getBlob("application/javascript")}}function c(e,t){var n=o(e,t),i=window.URL||window.webkitURL,r=i.createObjectURL(n);return new Worker(r)}var l=function(t,n,i,r,s){if(this.$sendDeltaQueue=this.$sendDeltaQueue.bind(this),this.changeListener=this.changeListener.bind(this),this.onMessage=this.onMessage.bind(this),e.nameToUrl&&!e.toUrl&&(e.toUrl=e.nameToUrl),a.get("packaged")||!e.toUrl)r=r||a.moduleUrl(n.id,"worker");else{var o=this.$normalizePath;r=r||o(e.toUrl("ace/worker/worker.js",null,"_"));var l={};t.forEach((function(t){l[t]=o(e.toUrl(t,null,"_").replace(/(\.js)?(\?.*)?$/,""))}))}this.$worker=c(r,n),s&&this.send("importScripts",s),this.$worker.postMessage({init:!0,tlns:l,module:n.id,classname:i}),this.callbackId=1,this.callbacks={},this.$worker.onmessage=this.onMessage};(function(){i.implement(this,s),this.onMessage=function(e){var t=e.data;switch(t.type){case"event":this._signal(t.name,{data:t.data});break;case"call":var n=this.callbacks[t.id];n&&(n(t.data),delete this.callbacks[t.id]);break;case"error":this.reportError(t.data);break;case"log":window.console&&console.log&&console.log.apply(console,t.data);break}},this.reportError=function(e){window.console&&console.error&&console.error(e)},this.$normalizePath=function(e){return r.qualifyURL(e)},this.terminate=function(){this._signal("terminate",{}),this.deltaQueue=null,this.$worker.terminate(),this.$worker=null,this.$doc&&this.$doc.off("change",this.changeListener),this.$doc=null},this.send=function(e,t){this.$worker.postMessage({command:e,args:t})},this.call=function(e,t,n){if(n){var i=this.callbackId++;this.callbacks[i]=n,t.push(i)}this.send(e,t)},this.emit=function(e,t){try{this.$worker.postMessage({event:e,data:{data:t.data}})}catch(n){console.error(n.stack)}},this.attachToDocument=function(e){this.$doc&&this.terminate(),this.$doc=e,this.call("setValue",[e.getValue()]),e.on("change",this.changeListener)},this.changeListener=function(e){this.deltaQueue||(this.deltaQueue=[],setTimeout(this.$sendDeltaQueue,0)),"insert"==e.action?this.deltaQueue.push(e.start,e.lines):this.deltaQueue.push(e.start,e.end)},this.$sendDeltaQueue=function(){var e=this.deltaQueue;e&&(this.deltaQueue=null,e.length>50&&e.length>this.$doc.getLength()>>1?this.call("setValue",[this.$doc.getValue()]):this.emit("change",{data:e}))}}).call(l.prototype);var u=function(e,t,n){this.$sendDeltaQueue=this.$sendDeltaQueue.bind(this),this.changeListener=this.changeListener.bind(this),this.callbackId=1,this.callbacks={},this.messageBuffer=[];var i=null,r=!1,o=Object.create(s),c=this;this.$worker={},this.$worker.terminate=function(){},this.$worker.postMessage=function(e){c.messageBuffer.push(e),i&&(r?setTimeout(l):l())},this.setEmitSync=function(e){r=e};var l=function(){var e=c.messageBuffer.shift();e.command?i[e.command].apply(i,e.args):e.event&&o._signal(e.event,e.data)};o.postMessage=function(e){c.onMessage({data:e})},o.callback=function(e,t){this.postMessage({type:"call",id:t,data:e})},o.emit=function(e,t){this.postMessage({type:"event",name:e,data:t})},a.loadModule(["worker",t],(function(e){i=new e[n](o);while(c.messageBuffer.length)l()}))};u.prototype=l.prototype,t.UIWorkerClient=u,t.WorkerClient=l,t.createWorker=c})),ace.define("ace/placeholder",["require","exports","module","ace/range","ace/lib/event_emitter","ace/lib/oop"],(function(e,t,n){"use strict";var i=e("./range").Range,r=e("./lib/event_emitter").EventEmitter,s=e("./lib/oop"),a=function(e,t,n,i,r,s){var a=this;this.length=t,this.session=e,this.doc=e.getDocument(),this.mainClass=r,this.othersClass=s,this.$onUpdate=this.onUpdate.bind(this),this.doc.on("change",this.$onUpdate),this.$others=i,this.$onCursorChange=function(){setTimeout((function(){a.onCursorChange()}))},this.$pos=n;var o=e.getUndoManager().$undoStack||e.getUndoManager().$undostack||{length:-1};this.$undoStackDepth=o.length,this.setup(),e.selection.on("changeCursor",this.$onCursorChange)};(function(){s.implement(this,r),this.setup=function(){var e=this,t=this.doc,n=this.session;this.selectionBefore=n.selection.toJSON(),n.selection.inMultiSelectMode&&n.selection.toSingleRange(),this.pos=t.createAnchor(this.$pos.row,this.$pos.column);var r=this.pos;r.$insertRight=!0,r.detach(),r.markerId=n.addMarker(new i(r.row,r.column,r.row,r.column+this.length),this.mainClass,null,!1),this.others=[],this.$others.forEach((function(n){var i=t.createAnchor(n.row,n.column);i.$insertRight=!0,i.detach(),e.others.push(i)})),n.setUndoSelect(!1)},this.showOtherMarkers=function(){if(!this.othersActive){var e=this.session,t=this;this.othersActive=!0,this.others.forEach((function(n){n.markerId=e.addMarker(new i(n.row,n.column,n.row,n.column+t.length),t.othersClass,null,!1)}))}},this.hideOtherMarkers=function(){if(this.othersActive){this.othersActive=!1;for(var e=0;e=this.pos.column&&t.start.column<=this.pos.column+this.length+1,s=t.start.column-this.pos.column;if(this.updateAnchors(e),r&&(this.length+=n),r&&!this.session.$fromUndo)if("insert"===e.action)for(var a=this.others.length-1;a>=0;a--){var o=this.others[a],c={row:o.row,column:o.column+s};this.doc.insertMergedLines(c,e.lines)}else if("remove"===e.action)for(a=this.others.length-1;a>=0;a--){o=this.others[a],c={row:o.row,column:o.column+s};this.doc.remove(new i(c.row,c.column,c.row,c.column-n))}this.$updating=!1,this.updateMarkers()}},this.updateAnchors=function(e){this.pos.onChange(e);for(var t=this.others.length;t--;)this.others[t].onChange(e);this.updateMarkers()},this.updateMarkers=function(){if(!this.$updating){var e=this,t=this.session,n=function(n,r){t.removeMarker(n.markerId),n.markerId=t.addMarker(new i(n.row,n.column,n.row,n.column+e.length),r,null,!1)};n(this.pos,this.mainClass);for(var r=this.others.length;r--;)n(this.others[r],this.othersClass)}},this.onCursorChange=function(e){if(!this.$updating&&this.session){var t=this.session.selection.getCursor();t.row===this.pos.row&&t.column>=this.pos.column&&t.column<=this.pos.column+this.length?(this.showOtherMarkers(),this._emit("cursorEnter",e)):(this.hideOtherMarkers(),this._emit("cursorLeave",e))}},this.detach=function(){this.session.removeMarker(this.pos&&this.pos.markerId),this.hideOtherMarkers(),this.doc.removeEventListener("change",this.$onUpdate),this.session.selection.removeEventListener("changeCursor",this.$onCursorChange),this.session.setUndoSelect(!0),this.session=null},this.cancel=function(){if(-1!==this.$undoStackDepth){for(var e=this.session.getUndoManager(),t=(e.$undoStack||e.$undostack).length-this.$undoStackDepth,n=0;n1&&!this.inMultiSelectMode&&(this._signal("multiSelect"),this.inMultiSelectMode=!0,this.session.$undoSelect=!1,this.rangeList.attach(this.session)),t||this.fromOrientedRange(e)}},this.toSingleRange=function(e){e=e||this.ranges[0];var t=this.rangeList.removeAll();t.length&&this.$onRemoveRange(t),e&&this.fromOrientedRange(e)},this.substractPoint=function(e){var t=this.rangeList.substractPoint(e);if(t)return this.$onRemoveRange(t),t[0]},this.mergeOverlappingRanges=function(){var e=this.rangeList.merge();e.length?this.$onRemoveRange(e):this.ranges[0]&&this.fromOrientedRange(this.ranges[0])},this.$onAddRange=function(e){this.rangeCount=this.rangeList.ranges.length,this.ranges.unshift(e),this._signal("addRange",{range:e})},this.$onRemoveRange=function(e){if(this.rangeCount=this.rangeList.ranges.length,1==this.rangeCount&&this.inMultiSelectMode){var t=this.rangeList.ranges.pop();e.push(t),this.rangeCount=0}for(var n=e.length;n--;){var i=this.ranges.indexOf(e[n]);this.ranges.splice(i,1)}this._signal("removeRange",{ranges:e}),0===this.rangeCount&&this.inMultiSelectMode&&(this.inMultiSelectMode=!1,this._signal("singleSelect"),this.session.$undoSelect=!0,this.rangeList.detach(this.session)),t=t||this.ranges[0],t&&!t.isEqual(this.getRange())&&this.fromOrientedRange(t)},this.$initRangeList=function(){this.rangeList||(this.rangeList=new i,this.ranges=[],this.rangeCount=0)},this.getAllRanges=function(){return this.rangeCount?this.rangeList.ranges.concat():[this.getRange()]},this.splitIntoLines=function(){if(this.rangeCount>1){var e=this.rangeList.ranges,t=e[e.length-1],n=r.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(n,t.cursor==t.start)}else{n=this.getRange();var i=this.isBackwards(),s=n.start.row,a=n.end.row;if(s==a){if(i)var o=n.end,c=n.start;else o=n.start,c=n.end;return this.addRange(r.fromPoints(c,c)),void this.addRange(r.fromPoints(o,o))}var l=[],u=this.getLineRange(s,!0);u.start.column=n.start.column,l.push(u);for(var d=s+1;d1){var e=this.rangeList.ranges,t=e[e.length-1],n=r.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(n,t.cursor==t.start)}else{var i=this.session.documentToScreenPosition(this.selectionLead),s=this.session.documentToScreenPosition(this.selectionAnchor),a=this.rectangularRangeBlock(i,s);a.forEach(this.addRange,this)}},this.rectangularRangeBlock=function(e,t,n){var i=[],s=e.column0)v--;if(v>0){var b=0;while(i[b].isEmpty())b++}for(var y=v;y>=b;y--)i[y].isEmpty()&&i.splice(y,1)}return i}}.call(s.prototype);var p=e("./editor").Editor;function g(e,t){return e.row==t.row&&e.column==t.column}function m(e){e.$multiselectOnSessionChange||(e.$onAddRange=e.$onAddRange.bind(e),e.$onRemoveRange=e.$onRemoveRange.bind(e),e.$onMultiSelect=e.$onMultiSelect.bind(e),e.$onSingleSelect=e.$onSingleSelect.bind(e),e.$multiselectOnSessionChange=t.onSessionChange.bind(e),e.$checkMultiselectChange=e.$checkMultiselectChange.bind(e),e.$multiselectOnSessionChange(e),e.on("changeSession",e.$multiselectOnSessionChange),e.on("mousedown",a),e.commands.addCommands(l.defaultCommands),v(e))}function v(e){var t=e.textInput.getElement(),n=!1;function i(t){n&&(e.renderer.setMouseCursor(""),n=!1)}o.addListener(t,"keydown",(function(t){var r=18==t.keyCode&&!(t.ctrlKey||t.shiftKey||t.metaKey);e.$blockSelectEnabled&&r?n||(e.renderer.setMouseCursor("crosshair"),n=!0):n&&i()})),o.addListener(t,"keyup",i),o.addListener(t,"blur",i)}(function(){this.updateSelectionMarkers=function(){this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.addSelectionMarker=function(e){e.cursor||(e.cursor=e.end);var t=this.getSelectionStyle();return e.marker=this.session.addMarker(e,"ace_selection",t),this.session.$selectionMarkers.push(e),this.session.selectionMarkerCount=this.session.$selectionMarkers.length,e},this.removeSelectionMarker=function(e){if(e.marker){this.session.removeMarker(e.marker);var t=this.session.$selectionMarkers.indexOf(e);-1!=t&&this.session.$selectionMarkers.splice(t,1),this.session.selectionMarkerCount=this.session.$selectionMarkers.length}},this.removeSelectionMarkers=function(e){for(var t=this.session.$selectionMarkers,n=e.length;n--;){var i=e[n];if(i.marker){this.session.removeMarker(i.marker);var r=t.indexOf(i);-1!=r&&t.splice(r,1)}}this.session.selectionMarkerCount=t.length},this.$onAddRange=function(e){this.addSelectionMarker(e.range),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onRemoveRange=function(e){this.removeSelectionMarkers(e.ranges),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onMultiSelect=function(e){this.inMultiSelectMode||(this.inMultiSelectMode=!0,this.setStyle("ace_multiselect"),this.keyBinding.addKeyboardHandler(l.keyboardHandler),this.commands.setDefaultHandler("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers())},this.$onSingleSelect=function(e){this.session.multiSelect.inVirtualMode||(this.inMultiSelectMode=!1,this.unsetStyle("ace_multiselect"),this.keyBinding.removeKeyboardHandler(l.keyboardHandler),this.commands.removeDefaultHandler("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers(),this._emit("changeSelection"))},this.$onMultiSelectExec=function(e){var t=e.command,n=e.editor;if(n.multiSelect){if(t.multiSelectAction)"forEach"==t.multiSelectAction?i=n.forEachSelection(t,e.args):"forEachLine"==t.multiSelectAction?i=n.forEachSelection(t,e.args,!0):"single"==t.multiSelectAction?(n.exitMultiSelectMode(),i=t.exec(n,e.args||{})):i=t.multiSelectAction(n,e.args||{});else{var i=t.exec(n,e.args||{});n.multiSelect.addRange(n.multiSelect.toOrientedRange()),n.multiSelect.mergeOverlappingRanges()}return i}},this.forEachSelection=function(e,t,n){if(!this.inVirtualSelectionMode){var i,r=n&&n.keepOrder,a=1==n||n&&n.$byLines,o=this.session,c=this.selection,l=c.rangeList,u=(r?c:l).ranges;if(!u.length)return e.exec?e.exec(this,t||{}):e(this,t||{});var d=c._eventRegistry;c._eventRegistry={};var h=new s(o);this.inVirtualSelectionMode=!0;for(var f=u.length;f--;){if(a)while(f>0&&u[f].start.row==u[f-1].end.row)f--;h.fromOrientedRange(u[f]),h.index=f,this.selection=o.selection=h;var p=e.exec?e.exec(this,t||{}):e(this,t||{});i||void 0===p||(i=p),h.toOrientedRange(u[f])}h.detach(),this.selection=o.selection=c,this.inVirtualSelectionMode=!1,c._eventRegistry=d,c.mergeOverlappingRanges();var g=this.renderer.$scrollAnimation;return this.onCursorChange(),this.onSelectionChange(),g&&g.from==g.to&&this.renderer.animateScrolling(g.from),i}},this.exitMultiSelectMode=function(){this.inMultiSelectMode&&!this.inVirtualSelectionMode&&this.multiSelect.toSingleRange()},this.getSelectedText=function(){var e="";if(this.inMultiSelectMode&&!this.inVirtualSelectionMode){for(var t=this.multiSelect.rangeList.ranges,n=[],i=0;ia&&(a=n.column),ru?e.insert(i,c.stringRepeat(" ",s-u)):e.remove(new r(i.row,i.column,i.row,i.column-s+u)),t.start.column=t.end.column=a,t.start.row=t.end.row=i.row,t.cursor=t.end})),t.fromOrientedRange(n[0]),this.renderer.updateCursor(),this.renderer.updateBackMarkers()}else{var u=this.selection.getRange(),d=u.start.row,h=u.end.row,f=d==h;if(f){var p,g=this.session.getLength();do{p=this.session.getLine(h)}while(/[=:]/.test(p)&&++h0);d<0&&(d=0),h>=g&&(h=g-1)}var m=this.session.removeFullLines(d,h);m=this.$reAlignText(m,f),this.session.insert({row:d,column:0},m.join("\n")+"\n"),f||(u.start.column=0,u.end.column=m[m.length-1].length),this.selection.setRange(u)}},this.$reAlignText=function(e,t){var n,i,r,s=!0,a=!0;return e.map((function(e){var t=e.match(/(\s*)(.*?)(\s*)([=:].*)/);return t?null==n?(n=t[1].length,i=t[2].length,r=t[3].length,t):(n+i+r!=t[1].length+t[2].length+t[3].length&&(a=!1),n!=t[1].length&&(s=!1),n>t[1].length&&(n=t[1].length),it[3].length&&(r=t[3].length),t):[e]})).map(t?l:s?a?u:l:d);function o(e){return c.stringRepeat(" ",e)}function l(e){return e[2]?o(n)+e[2]+o(i-e[2].length+r)+e[4].replace(/^([=:])\s+/,"$1 "):e[0]}function u(e){return e[2]?o(n+i-e[2].length)+e[2]+o(r," ")+e[4].replace(/^([=:])\s+/,"$1 "):e[0]}function d(e){return e[2]?o(n)+e[2]+o(r)+e[4].replace(/^([=:])\s+/,"$1 "):e[0]}}}).call(p.prototype),t.onSessionChange=function(e){var t=e.session;t&&!t.multiSelect&&(t.$selectionMarkers=[],t.selection.$initRangeList(),t.multiSelect=t.selection),this.multiSelect=t&&t.multiSelect;var n=e.oldSession;n&&(n.multiSelect.off("addRange",this.$onAddRange),n.multiSelect.off("removeRange",this.$onRemoveRange),n.multiSelect.off("multiSelect",this.$onMultiSelect),n.multiSelect.off("singleSelect",this.$onSingleSelect),n.multiSelect.lead.off("change",this.$checkMultiselectChange),n.multiSelect.anchor.off("change",this.$checkMultiselectChange)),t&&(t.multiSelect.on("addRange",this.$onAddRange),t.multiSelect.on("removeRange",this.$onRemoveRange),t.multiSelect.on("multiSelect",this.$onMultiSelect),t.multiSelect.on("singleSelect",this.$onSingleSelect),t.multiSelect.lead.on("change",this.$checkMultiselectChange),t.multiSelect.anchor.on("change",this.$checkMultiselectChange)),t&&this.inMultiSelectMode!=t.selection.inMultiSelectMode&&(t.selection.inMultiSelectMode?this.$onMultiSelect():this.$onSingleSelect())},t.MultiSelect=m,e("./config").defineOptions(p.prototype,"editor",{enableMultiselect:{set:function(e){m(this),e?(this.on("changeSession",this.$multiselectOnSessionChange),this.on("mousedown",a)):(this.off("changeSession",this.$multiselectOnSessionChange),this.off("mousedown",a))},value:!0},enableBlockSelect:{set:function(e){this.$blockSelectEnabled=e},value:!0}})})),ace.define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"],(function(e,t,n){"use strict";var i=e("../../range").Range,r=t.FoldMode=function(){};(function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(e,t,n){var i=e.getLine(n);return this.foldingStartMarker.test(i)?"start":"markbeginend"==t&&this.foldingStopMarker&&this.foldingStopMarker.test(i)?"end":""},this.getFoldWidgetRange=function(e,t,n){return null},this.indentationBlock=function(e,t,n){var r=/\S/,s=e.getLine(t),a=s.search(r);if(-1!=a){var o=n||s.length,c=e.getLength(),l=t,u=t;while(++tl){var h=e.getLine(u).length;return new i(l,o,u,h)}}},this.openingBracketBlock=function(e,t,n,r,s){var a={row:n,column:r+1},o=e.$findClosingBracket(t,a,s);if(o){var c=e.foldWidgets[o.row];return null==c&&(c=e.getFoldWidget(o.row)),"start"==c&&o.row>a.row&&(o.row--,o.column=e.getLine(o.row).length),i.fromPoints(a,o)}},this.closingBracketBlock=function(e,t,n,r,s){var a={row:n,column:r},o=e.$findOpeningBracket(t,a);if(o)return o.column++,a.column--,i.fromPoints(o,a)}}).call(r.prototype)})),ace.define("ace/theme/textmate",["require","exports","module","ace/lib/dom"],(function(e,t,n){"use strict";t.isDark=!1,t.cssClass="ace-tm",t.cssText='.ace-tm .ace_gutter {background: #f0f0f0;color: #333;}.ace-tm .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-tm .ace_fold {background-color: #6B72E6;}.ace-tm {background-color: #FFFFFF;color: black;}.ace-tm .ace_cursor {color: black;}.ace-tm .ace_invisible {color: rgb(191, 191, 191);}.ace-tm .ace_storage,.ace-tm .ace_keyword {color: blue;}.ace-tm .ace_constant {color: rgb(197, 6, 11);}.ace-tm .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-tm .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-tm .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-tm .ace_invalid {background-color: rgba(255, 0, 0, 0.1);color: red;}.ace-tm .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-tm .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-tm .ace_support.ace_type,.ace-tm .ace_support.ace_class {color: rgb(109, 121, 222);}.ace-tm .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-tm .ace_string {color: rgb(3, 106, 7);}.ace-tm .ace_comment {color: rgb(76, 136, 107);}.ace-tm .ace_comment.ace_doc {color: rgb(0, 102, 255);}.ace-tm .ace_comment.ace_doc.ace_tag {color: rgb(128, 159, 191);}.ace-tm .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-tm .ace_variable {color: rgb(49, 132, 149);}.ace-tm .ace_xml-pe {color: rgb(104, 104, 91);}.ace-tm .ace_entity.ace_name.ace_function {color: #0000A2;}.ace-tm .ace_heading {color: rgb(12, 7, 255);}.ace-tm .ace_list {color:rgb(185, 6, 144);}.ace-tm .ace_meta.ace_tag {color:rgb(0, 22, 142);}.ace-tm .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-tm .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-tm.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px white;}.ace-tm .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-tm .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-tm .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-tm .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-tm .ace_gutter-active-line {background-color : #dcdcdc;}.ace-tm .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-tm .ace_indent-guide {background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==") right repeat-y;}';var i=e("../lib/dom");i.importCssString(t.cssText,t.cssClass)})),ace.define("ace/line_widgets",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/range"],(function(e,t,n){"use strict";e("./lib/oop");var i=e("./lib/dom");e("./range").Range;function r(e){this.session=e,this.session.widgetManager=this,this.session.getRowLength=this.getRowLength,this.session.$getWidgetScreenLength=this.$getWidgetScreenLength,this.updateOnChange=this.updateOnChange.bind(this),this.renderWidgets=this.renderWidgets.bind(this),this.measureWidgets=this.measureWidgets.bind(this),this.session._changedWidgets=[],this.$onChangeEditor=this.$onChangeEditor.bind(this),this.session.on("change",this.updateOnChange),this.session.on("changeFold",this.updateOnFold),this.session.on("changeEditor",this.$onChangeEditor)}(function(){this.getRowLength=function(e){var t;return t=this.lineWidgets&&this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0,this.$useWrapMode&&this.$wrapData[e]?this.$wrapData[e].length+1+t:1+t},this.$getWidgetScreenLength=function(){var e=0;return this.lineWidgets.forEach((function(t){t&&t.rowCount&&!t.hidden&&(e+=t.rowCount)})),e},this.$onChangeEditor=function(e){this.attach(e.editor)},this.attach=function(e){e&&e.widgetManager&&e.widgetManager!=this&&e.widgetManager.detach(),this.editor!=e&&(this.detach(),this.editor=e,e&&(e.widgetManager=this,e.renderer.on("beforeRender",this.measureWidgets),e.renderer.on("afterRender",this.renderWidgets)))},this.detach=function(e){var t=this.editor;if(t){this.editor=null,t.widgetManager=null,t.renderer.off("beforeRender",this.measureWidgets),t.renderer.off("afterRender",this.renderWidgets);var n=this.session.lineWidgets;n&&n.forEach((function(e){e&&e.el&&e.el.parentNode&&(e._inDocument=!1,e.el.parentNode.removeChild(e.el))}))}},this.updateOnFold=function(e,t){var n=t.lineWidgets;if(n&&e.action){for(var i=e.data,r=i.start.row,s=i.end.row,a="add"==e.action,o=r+1;o0&&!i[r])r--;this.firstRow=n.firstRow,this.lastRow=n.lastRow,t.$cursorLayer.config=n;for(var a=r;a<=s;a++){var o=i[a];if(o&&o.el)if(o.hidden)o.el.style.top=-100-(o.pixelHeight||0)+"px";else{o._inDocument||(o._inDocument=!0,t.container.appendChild(o.el));var c=t.$cursorLayer.getPixelPosition({row:a,column:0},!0).top;o.coverLine||(c+=n.lineHeight*this.session.getRowLineCount(o.row)),o.el.style.top=c-n.offset+"px";var l=o.coverGutter?0:t.gutterWidth;o.fixedWidth||(l-=t.scrollLeft),o.el.style.left=l+"px",o.fullWidth&&o.screenWidth&&(o.el.style.minWidth=n.width+2*n.padding+"px"),o.fixedWidth?o.el.style.right=t.scrollBar.getWidth()+"px":o.el.style.right=""}}}}}).call(r.prototype),t.LineWidgets=r})),ace.define("ace/ext/error_marker",["require","exports","module","ace/line_widgets","ace/lib/dom","ace/range"],(function(e,t,n){"use strict";var i=e("../line_widgets").LineWidgets,r=e("../lib/dom"),s=e("../range").Range;function a(e,t,n){var i=0,r=e.length-1;while(i<=r){var s=i+r>>1,a=n(t,e[s]);if(a>0)i=s+1;else{if(!(a<0))return s;r=s-1}}return-(i+1)}function o(e,t,n){var i=e.getAnnotations().sort(s.comparePoints);if(i.length){var r=a(i,{row:t,column:-1},s.comparePoints);r<0&&(r=-r-1),r>=i.length?r=n>0?0:i.length-1:0===r&&n<0&&(r=i.length-1);var o=i[r];if(o&&n){if(o.row===t){do{o=i[r+=n]}while(o&&o.row===t);if(!o)return i.slice()}var c=[];t=o.row;do{c[n<0?"unshift":"push"](o),o=i[r+=n]}while(o&&o.row==t);return c.length&&c}}}t.showErrorMarker=function(e,t){var n=e.session;n.widgetManager||(n.widgetManager=new i(n),n.widgetManager.attach(e));var s=e.getCursorPosition(),a=s.row,c=n.widgetManager.getWidgetsAtRow(a).filter((function(e){return"errorMarker"==e.type}))[0];c?c.destroy():a-=t;var l,u=o(n,a,t);if(u){var d=u[0];s.column=(d.pos&&"number"!=typeof d.column?d.pos.sc:d.column)||0,s.row=d.row,l=e.renderer.$gutterLayer.$annotations[s.row]}else{if(c)return;l={text:["Looks good!"],className:"ace_ok"}}e.session.unfold(s.row),e.selection.moveToPosition(s);var h={row:s.row,fixedWidth:!0,coverGutter:!0,el:r.createElement("div"),type:"errorMarker"},f=h.el.appendChild(r.createElement("div")),p=h.el.appendChild(r.createElement("div"));p.className="error_widget_arrow "+l.className;var g=e.renderer.$cursorLayer.getPixelPosition(s).left;p.style.left=g+e.renderer.gutterWidth-5+"px",h.el.className="error_widget_wrapper",f.className="error_widget "+l.className,f.innerHTML=l.text.join("
"),f.appendChild(r.createElement("div"));var m=function(e,t,n){if(0===t&&("esc"===n||"return"===n))return h.destroy(),{command:"null"}};h.destroy=function(){e.$mouseHandler.isMousePressed||(e.keyBinding.removeKeyboardHandler(m),n.widgetManager.removeLineWidget(h),e.off("changeSelection",h.destroy),e.off("changeSession",h.destroy),e.off("mouseup",h.destroy),e.off("change",h.destroy))},e.keyBinding.addKeyboardHandler(m),e.on("changeSelection",h.destroy),e.on("changeSession",h.destroy),e.on("mouseup",h.destroy),e.on("change",h.destroy),e.session.widgetManager.addLineWidget(h),h.el.onmousedown=e.focus.bind(e),e.renderer.scrollCursorIntoView(null,.5,{bottom:h.el.offsetHeight})},r.importCssString(" .error_widget_wrapper { background: inherit; color: inherit; border:none } .error_widget { border-top: solid 2px; border-bottom: solid 2px; margin: 5px 0; padding: 10px 40px; white-space: pre-wrap; } .error_widget.ace_error, .error_widget_arrow.ace_error{ border-color: #ff5a5a } .error_widget.ace_warning, .error_widget_arrow.ace_warning{ border-color: #F1D817 } .error_widget.ace_info, .error_widget_arrow.ace_info{ border-color: #5a5a5a } .error_widget.ace_ok, .error_widget_arrow.ace_ok{ border-color: #5aaa5a } .error_widget_arrow { position: absolute; border: solid 5px; border-top-color: transparent!important; border-right-color: transparent!important; border-left-color: transparent!important; top: -5px; }","")})),ace.define("ace/ace",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/dom","ace/lib/event","ace/editor","ace/edit_session","ace/undomanager","ace/virtual_renderer","ace/worker/worker_client","ace/keyboard/hash_handler","ace/placeholder","ace/multi_select","ace/mode/folding/fold_mode","ace/theme/textmate","ace/ext/error_marker","ace/config"],(function(e,t,i){"use strict";e("./lib/fixoldbrowsers");var r=e("./lib/dom"),s=e("./lib/event"),a=e("./editor").Editor,o=e("./edit_session").EditSession,c=e("./undomanager").UndoManager,l=e("./virtual_renderer").VirtualRenderer;e("./worker/worker_client"),e("./keyboard/hash_handler"),e("./placeholder"),e("./multi_select"),e("./mode/folding/fold_mode"),e("./theme/textmate"),e("./ext/error_marker"),t.config=e("./config"),t.acequire=e,t.define=n("07d6"),t.edit=function(e){if("string"==typeof e){var n=e;if(e=document.getElementById(n),!e)throw new Error("ace.edit can't find div #"+n)}if(e&&e.env&&e.env.editor instanceof a)return e.env.editor;var i="";if(e&&/input|textarea/i.test(e.tagName)){var o=e;i=o.value,e=r.createElement("pre"),o.parentNode.replaceChild(e,o)}else e&&(i=r.getInnerText(e),e.innerHTML="");var c=t.createEditSession(i),u=new a(new l(e));u.setSession(c);var d={document:c,editor:u,onResize:u.resize.bind(u,null)};return o&&(d.textarea=o),s.addListener(window,"resize",d.onResize),u.on("destroy",(function(){s.removeListener(window,"resize",d.onResize),d.editor.container.env=null})),u.container.env=u.env=d,u},t.createEditSession=function(e,t){var n=new o(e,t);return n.setUndoManager(new c),n},t.EditSession=o,t.UndoManager=c,t.version="1.2.9"})),function(){ace.acequire(["ace/ace"],(function(e){for(var t in e&&(e.config.init(!0),e.define=ace.define),window.ace||(window.ace=e),e)e.hasOwnProperty(t)&&(window.ace[t]=e[t])}))}(),e.exports=window.ace.acequire("ace/ace")},"0687":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"ores"},[n("h3",[e._v("Selected Ores:")]),e._l(e.ore_names,(function(t){return n("div",{key:t},[n("vui-button",{class:{selected:e.selected_ores.includes(t)},attrs:{params:{chosen_ore:t}}},[e._v(e._s(t))])],1)}))],2)},r=[],s={data:function(){return this.$root.$data.state}},a=s,o=(n("3315"),n("2877")),c=Object(o["a"])(a,i,r,!1,null,"5716889f",null);t["default"]=c.exports},"068f":function(e,t,n){"use strict";n("e16d")},"06cf":function(e,t,n){var i=n("83ab"),r=n("d1e7"),s=n("5c6c"),a=n("fc6a"),o=n("c04e"),c=n("5135"),l=n("0cfb"),u=Object.getOwnPropertyDescriptor;t.f=i?u:function(e,t){if(e=a(e),t=o(t,!0),l)try{return u(e,t)}catch(n){}if(c(e,t))return s(!r.f.call(e,t),e[t])}},"07ac":function(e,t,n){var i=n("23e7"),r=n("6f53").values;i({target:"Object",stat:!0},{values:function(e){return r(e)}})},"07c3":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("i",[e._v("Welcome to the NanoTrasen™ computer configuration utility. Please consult your system administrator if you have any questions about your device.")]),n("hr"),n("h2",[e._v("Power Supply")]),n("vui-item",{attrs:{label:"Battery Status:"}},[e.battery?n("span",[e._v("Active")]):n("span",[e._v("Not Available")])]),e.battery?n("vui-item",{attrs:{label:"Battery Rating:"}},[e._v(e._s(e.battery.rating)+" Wh")]):e._e(),e.battery?n("vui-item",{attrs:{label:"Battery Charge:"}},[n("vui-progress",{attrs:{value:e.battery.percent}},[e._v(e._s(e.battery.percent)+"%")])],1):e._e(),n("vui-item",{attrs:{label:"Power Usage:"}},[e._v(e._s(e.power_usage)+" W")]),n("h2",[e._v("File System")]),e.battery?n("vui-item",{attrs:{label:"Used Capacity:"}},[n("vui-progress",{attrs:{value:e.disk_used,min:"0",max:e.disk_size}},[e._v(e._s(e.disk_used)+" GQ / "+e._s(e.disk_size)+" GQ")])],1):e._e(),n("h2",[e._v("Misc. Settings")]),n("vui-item",{attrs:{label:"Registered ID:"}},[n("vui-button",{attrs:{params:{PC_register:1},disabled:!e.card_slot}},[e._v(e._s(e.registered?e.registered:"Unregistered"))])],1),null!==e.brightness?n("vui-item",{attrs:{label:"Brightness:"}},[n("vui-input-slider",{attrs:{min:0,max:10},model:{value:e.brightness,callback:function(t){e.brightness=t},expression:"brightness"}})],1):e._e(),n("h2",[e._v("Computer Components")]),e._l(e.hardware,(function(t,i){return n("div",{key:i},[n("h3",[e._v(e._s(i))]),n("vui-item",{attrs:{label:"State:"}},[t.enabled?n("span",[e._v("Enabled")]):n("span",[e._v("Disabled")])]),t.power_usage>0?n("vui-item",{attrs:{label:"Power Usage:"}},[e._v(e._s(t.power_usage)+" W")]):e._e(),t.critical?e._e():n("vui-item",{attrs:{label:"Toggle Component:"}},[n("vui-button",{attrs:{params:{PC_enable_component:i},disabled:!!t.enabled}},[e._v("ON")]),n("vui-button",{attrs:{params:{PC_disable_component:i},disabled:!t.enabled}},[e._v("OFF")])],1)],1)})),n("i",[e._v("ntOS v2.1.0 -- © NanoTrasen 2457 - 2462")])],2)},r=[],s={data:function(){return this.$root.$data.state}},a=s,o=n("2877"),c=Object(o["a"])(a,i,r,!1,null,null,null);t["default"]=c.exports},"07d6":function(e,t){e.exports=function(){throw new Error("define cannot be used indirect")}},"08c0":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("h2",[e._v("Engine Status:")]),e.is_on?n("div",[e._v(" The engine is currently running. "),n("vui-button",{attrs:{params:{toggle_engine:1}}},[e._v("Stop")])],1):n("div",[e._v(" The engine is off. "),n("vui-button",{attrs:{disabled:!e.has_key||!e.has_cell,params:{toggle_engine:1}}},[e._v("Start")])],1),e.has_key?n("div",[e._v(" There is a key inserted into the ignition. "),n("vui-button",{attrs:{params:{key:1}}},[e._v("Remove Key")])],1):n("div",[e._v(" There is no key in the ignition. ")]),e.has_cell?n("div",[e._v(" Cell Charge: "),n("vui-progress",{class:{good:e.cell_charge>=.8*e.cell_max_charge,bad:e.cell_charge<=.4*e.cell_max_charge,average:e.cell_charge<.8*e.cell_max_charge&&e.cell_charge>.4*e.cell_max_charge},attrs:{value:e.cell_charge,max:e.cell_max_charge,min:0}},[e._v(e._s(e.cell_charge)+"J")]),e._v(" "),n("vui-tooltip",{attrs:{label:"?"}},[e._v("The cell can be removed by using a screwdriver to open the maintenance panel, then using a crowbar to shimmy it out.")])],1):n("div",[e._v(" There is no cell installed. "),n("vui-tooltip",{attrs:{label:"?"}},[e._v("The cell can be installed by using a screwdriver to open the maintenance panel, then clicking on the engine with a compatible power cell.")])],1),e.is_towing?n("div",[e._v(" This engine is currently towing the "+e._s(e.tow)+". "),n("vui-button",{attrs:{params:{unlatch:1}}},[e._v("Unlatch")])],1):n("div",[e._v(" This engine isn't towing anything currently. "),n("vui-tooltip",{attrs:{label:"?"}},[e._v("You can latch vehicles together by dragging from the vehicle you want to be the anchor point, to the trolley you wish to latch.")])],1)])},r=[],s={data:function(){return this.$root.$data.state}},a=s,o=n("2877"),c=Object(o["a"])(a,i,r,!1,null,null,null);t["default"]=c.exports},"08cc":function(e,t,n){"use strict";n("b225")},"09cd":function(e,t,n){"use strict";n("bfa1")},"0ac8":function(e,t,n){var i=n("23e7"),r=n("8eb5");i({target:"Math",stat:!0,forced:r!=Math.expm1},{expm1:r})},"0b25":function(e,t,n){var i=n("a691"),r=n("50c4");e.exports=function(e){if(void 0===e)return 0;var t=i(e),n=r(t);if(t!==n)throw RangeError("Wrong length or index");return n}},"0c47":function(e,t,n){var i=n("da84"),r=n("d44e");r(i.JSON,"JSON",!0)},"0ccb":function(e,t,n){var i=n("50c4"),r=n("1148"),s=n("1d80"),a=Math.ceil,o=function(e){return function(t,n,o){var c,l,u=String(s(t)),d=u.length,h=void 0===o?" ":String(o),f=i(n);return f<=d||""==h?u:(c=f-d,l=r.call(h,a(c/h.length)),l.length>c&&(l=l.slice(0,c)),e?u+l:l+u)}};e.exports={start:o(!1),end:o(!0)}},"0cfb":function(e,t,n){var i=n("83ab"),r=n("d039"),s=n("cc12");e.exports=!i&&!r((function(){return 7!=Object.defineProperty(s("div"),"a",{get:function(){return 7}}).a}))},"0d03":function(e,t,n){var i=n("6eeb"),r=Date.prototype,s="Invalid Date",a="toString",o=r[a],c=r.getTime;new Date(NaN)+""!=s&&i(r,a,(function(){var e=c.call(this);return e===e?o.call(this):s}))},"0d3b":function(e,t,n){var i=n("d039"),r=n("b622"),s=n("c430"),a=r("iterator");e.exports=!i((function(){var e=new URL("b?a=1&b=2&c=3","http://a"),t=e.searchParams,n="";return e.pathname="c%20d",t.forEach((function(e,i){t["delete"]("b"),n+=i+e})),s&&!e.toJSON||!t.sort||"http://a/c%20d?a=1&c=3"!==e.href||"3"!==t.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!t[a]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("http://тест").host||"#%D0%B1"!==new URL("http://a#б").hash||"a1c3"!==n||"x"!==new URL("http://x",void 0).host}))},"0ea6":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("input",{directives:[{name:"model",rawName:"v-model",value:e.passcode,expression:"passcode"}],attrs:{placeholder:"Enter passcode...",autofocus:""},domProps:{value:e.passcode},on:{input:function(t){t.target.composing||(e.passcode=t.target.value)}}}),n("vui-button",{attrs:{params:{set_passcode:e.passcode}}},[e._v("Set")]),n("vui-button",{attrs:{params:{lock:1}}},[e._v("Lock")])],1)},r=[],s={data:function(){return this.$root.$data.state}},a=s,o=n("2877"),c=Object(o["a"])(a,i,r,!1,null,null,null);t["default"]=c.exports},"0ec3":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("span",{staticClass:"tooltip label"},[e._t("label",[e._v(e._s(e.label))]),n("div",{staticClass:"tooltip content"},[e._t("default")],2)],2)},r=[],s={props:{label:{type:String,default:""}}},a=s,o=(n("09cd"),n("2877")),c=Object(o["a"])(a,i,r,!1,null,"4ea2a2b3",null);t["default"]=c.exports},"0eec":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("input",{ref:"input",style:{width:e.width},attrs:{type:"range",min:e.min,max:e.max},domProps:{value:e.val},on:{change:function(t){return e.onFieldUpdate(t.target)}}})])},r=[],s=(n("a9e3"),n("8a79"),n("c0d6")),a={props:{value:{type:Number,default:0},min:{type:Number,default:0},max:{type:Number,default:100},pushState:{type:Boolean,default:!0},width:{type:String,default:"10em"},decimalPlaces:{type:Number,default:0}},data:function(){return{val:this.value}},methods:{onFieldUpdate:function(e){var t=this.val,n=Number(e.value);isNaN(n)&&(n=this.val),console.log(n,e.value,this.value,this.val),this.UpdateValue(n),t!=this.val||e.value.endsWith(".")||(this.$refs.input.value=this.val)},onUpdatedValue:function(e){var t=this.value;e&&(t+=e),this.UpdateValue(t)},UpdateValue:function(e){e=+(Math.round(e+"e+"+this.decimalPlaces)+"e-"+this.decimalPlaces),e>this.max&&(e=this.max),e0;(s>>>=1)&&(t+=t))1&s&&(n+=t);return n}},"11f5":function(e,t,n){"use strict";n("5d50")},1253:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"displayBar"},[n("div",{staticClass:"displayBarFill",style:{width:e.percentage+"%"}},[n("span",[e._t("default")],2)])])},r=[],s=(n("a9e3"),{props:{value:{type:Number,default:50},max:{type:Number,default:100},min:{type:Number,default:0}},computed:{percentage:function(){return(Math.min(this.max,Math.max(this.value,this.min))-this.min)/(this.max-this.min)*100}}}),a=s,o=(n("112d"),n("2877")),c=Object(o["a"])(a,i,r,!1,null,"041d7f1a",null);t["default"]=c.exports},"126d":function(e,t,n){var i=n("6da8"),r=n("aaec"),s=n("d094");function a(e){return r(e)?s(e):i(e)}e.exports=a},1276:function(e,t,n){"use strict";var i=n("d784"),r=n("44e7"),s=n("825a"),a=n("1d80"),o=n("4840"),c=n("8aa5"),l=n("50c4"),u=n("14c3"),d=n("9263"),h=n("d039"),f=[].push,p=Math.min,g=4294967295,m=!h((function(){return!RegExp(g,"y")}));i("split",2,(function(e,t,n){var i;return i="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(e,n){var i=String(a(this)),s=void 0===n?g:n>>>0;if(0===s)return[];if(void 0===e)return[i];if(!r(e))return t.call(i,e,s);var o,c,l,u=[],h=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),p=0,m=new RegExp(e.source,h+"g");while(o=d.call(m,i)){if(c=m.lastIndex,c>p&&(u.push(i.slice(p,o.index)),o.length>1&&o.index=s))break;m.lastIndex===o.index&&m.lastIndex++}return p===i.length?!l&&m.test("")||u.push(""):u.push(i.slice(p)),u.length>s?u.slice(0,s):u}:"0".split(void 0,0).length?function(e,n){return void 0===e&&0===n?[]:t.call(this,e,n)}:t,[function(t,n){var r=a(this),s=void 0==t?void 0:t[e];return void 0!==s?s.call(t,r,n):i.call(String(r),t,n)},function(e,r){var a=n(i,e,this,r,i!==t);if(a.done)return a.value;var d=s(e),h=String(this),f=o(d,RegExp),v=d.unicode,b=(d.ignoreCase?"i":"")+(d.multiline?"m":"")+(d.unicode?"u":"")+(m?"y":"g"),y=new f(m?d:"^(?:"+d.source+")",b),w=void 0===r?g:r>>>0;if(0===w)return[];if(0===h.length)return null===u(y,h)?[h]:[];var _=0,x=0,k=[];while(xe.length)&&(t=e.length);for(var n=0,i=new Array(t);n79&&o<83;i({target:"Array",proto:!0,forced:!l||!u||d},{reduce:function(e){return r(this,e,arguments.length,arguments.length>1?arguments[1]:void 0)}})},"143c":function(e,t,n){var i=n("74e8");i("Int32",(function(e){return function(t,n,i){return e(this,t,n,i)}}))},"145e":function(e,t,n){"use strict";var i=n("7b0b"),r=n("23cb"),s=n("50c4"),a=Math.min;e.exports=[].copyWithin||function(e,t){var n=i(this),o=s(n.length),c=r(e,o),l=r(t,o),u=arguments.length>2?arguments[2]:void 0,d=a((void 0===u?o:r(u,o))-l,o-c),h=1;l0)l in n?n[c]=n[l]:delete n[c],c+=h,l+=h;return n}},"14c3":function(e,t,n){var i=n("c6b6"),r=n("9263");e.exports=function(e,t){var n=e.exec;if("function"===typeof n){var s=n.call(e,t);if("object"!==typeof s)throw TypeError("RegExp exec method returned something other than an Object or null");return s}if("RegExp"!==i(e))throw TypeError("RegExp#exec called on incompatible receiver");return r.call(e,t)}},"14d4":function(e,t){ace.define("ace/theme/monokai",["require","exports","module","ace/lib/dom"],(function(e,t,n){t.isDark=!0,t.cssClass="ace-monokai",t.cssText=".ace-monokai .ace_gutter {background: #2F3129;color: #8F908A}.ace-monokai .ace_print-margin {width: 1px;background: #555651}.ace-monokai {background-color: #272822;color: #F8F8F2}.ace-monokai .ace_cursor {color: #F8F8F0}.ace-monokai .ace_marker-layer .ace_selection {background: #49483E}.ace-monokai.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #272822;}.ace-monokai .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-monokai .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #49483E}.ace-monokai .ace_marker-layer .ace_active-line {background: #202020}.ace-monokai .ace_gutter-active-line {background-color: #272727}.ace-monokai .ace_marker-layer .ace_selected-word {border: 1px solid #49483E}.ace-monokai .ace_invisible {color: #52524d}.ace-monokai .ace_entity.ace_name.ace_tag,.ace-monokai .ace_keyword,.ace-monokai .ace_meta.ace_tag,.ace-monokai .ace_storage {color: #F92672}.ace-monokai .ace_punctuation,.ace-monokai .ace_punctuation.ace_tag {color: #fff}.ace-monokai .ace_constant.ace_character,.ace-monokai .ace_constant.ace_language,.ace-monokai .ace_constant.ace_numeric,.ace-monokai .ace_constant.ace_other {color: #AE81FF}.ace-monokai .ace_invalid {color: #F8F8F0;background-color: #F92672}.ace-monokai .ace_invalid.ace_deprecated {color: #F8F8F0;background-color: #AE81FF}.ace-monokai .ace_support.ace_constant,.ace-monokai .ace_support.ace_function {color: #66D9EF}.ace-monokai .ace_fold {background-color: #A6E22E;border-color: #F8F8F2}.ace-monokai .ace_storage.ace_type,.ace-monokai .ace_support.ace_class,.ace-monokai .ace_support.ace_type {font-style: italic;color: #66D9EF}.ace-monokai .ace_entity.ace_name.ace_function,.ace-monokai .ace_entity.ace_other,.ace-monokai .ace_entity.ace_other.ace_attribute-name,.ace-monokai .ace_variable {color: #A6E22E}.ace-monokai .ace_variable.ace_parameter {font-style: italic;color: #FD971F}.ace-monokai .ace_string {color: #E6DB74}.ace-monokai .ace_comment {color: #75715E}.ace-monokai .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ0FD0ZXBzd/wPAAjVAoxeSgNeAAAAAElFTkSuQmCC) right repeat-y}";var i=e("../lib/dom");i.importCssString(t.cssText,t.cssClass)}))},1503:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("div",{directives:[{name:"show",rawName:"v-show",value:!e.spawnpoint,expression:"!spawnpoint"}],staticClass:"tagselector"},e._l(e.tags,(function(t,i){return n("vui-button",{key:i,class:{selected:e.current_tag==i},on:{click:function(t){e.current_tag=i}}},[e._v(e._s(i)+" ("+e._s(t)+")")])})),1),n("hr",{directives:[{name:"show",rawName:"v-show",value:!e.spawnpoint,expression:"!spawnpoint"}]}),n("table",[e._m(0),e._l(e.spawners,(function(t,i){return n("tr",{directives:[{name:"show",rawName:"v-show",value:e.showEntry(t),expression:"showEntry(data)"}],key:i},[n("td",[e._v(e._s(t.name))]),n("td",[e._v(e._s(t.desc))]),t.max_count>0?n("td",[e._v(e._s(t.max_count-t.count)+" / "+e._s(t.max_count))]):t.spawnatoms>0?n("td",[e._v(e._s(t.spawnatoms))]):n("td",[e._v("∞")]),n("td",{staticClass:"action"},[n("vui-button",{attrs:{disabled:0!==t.cant_spawn,params:{spawn:i,spawnpoint:e.spawnpoint},icon:"star"}},[e._v("Spawn")]),1==t.can_edit?n("vui-button",{attrs:{disabled:1==t.enabled,params:{enable:i}}},[e._v("Enable")]):e._e(),1==t.can_edit?n("vui-button",{attrs:{disabled:0==t.enabled,params:{disable:i}}},[e._v("Disable")]):e._e()],1)])}))],2)])},r=[function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("tr",[n("th",[e._v("Name")]),n("th",[e._v("Description")]),n("th",[e._v("Available Slots")]),n("th",{staticClass:"action"},[e._v("Actions")])])}],s=(n("4de4"),n("5db7"),n("4160"),n("c975"),n("73d9"),n("07ac"),n("159b"),{data:function(){return this.$root.$data.state},computed:{tags:function(){var e=Object.values(this.spawners).flatMap((function(e){return e.tags})),t={All:Object.values(this.spawners).length};return e.filter((function(e,t,n){return n.indexOf(e)===t})).forEach((function(n){t[n]=e.filter((function(e){return e==n})).length})),t}},methods:{showEntry:function(e){return this.spawnpoint?!!Object.prototype.hasOwnProperty.apply(e,["spawnpoints"])&&(e.spawnpoints&&!e.spawnpoints.indexOf(this.spawnpoint)):!e.tags.indexOf(this.current_tag)||"All"==this.current_tag}}}),a=s,o=(n("068f"),n("2877")),c=Object(o["a"])(a,i,r,!1,null,"70766bea",null);t["default"]=c.exports},"159b":function(e,t,n){var i=n("da84"),r=n("fdbc"),s=n("17c2"),a=n("9112");for(var o in r){var c=i[o],l=c&&c.prototype;if(l&&l.forEach!==s)try{a(l,"forEach",s)}catch(u){l.forEach=s}}},1650:function(e,t,n){},"16ae":function(e,t,n){"use strict";n("f415")},"170b":function(e,t,n){"use strict";var i=n("ebb5"),r=n("50c4"),s=n("23cb"),a=n("4840"),o=i.aTypedArray,c=i.exportTypedArrayMethod;c("subarray",(function(e,t){var n=o(this),i=n.length,c=s(e,i);return new(a(n,n.constructor))(n.buffer,n.byteOffset+c*n.BYTES_PER_ELEMENT,r((void 0===t?i:s(t,i))-c))}))},1715:function(e,t,n){n("159b"),n("ddb0"),n("130f"),n("9f96"),n("4795"),n("2b3d"),n("bf19"),n("9861");var i=n("428f");e.exports=i},"17c2":function(e,t,n){"use strict";var i=n("b727").forEach,r=n("a640"),s=n("ae40"),a=r("forEach"),o=s("forEach");e.exports=a&&o?[].forEach:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}},"182d":function(e,t,n){var i=n("f8cd");e.exports=function(e,t){var n=i(e);if(n%t)throw RangeError("Wrong offset");return n}},"18a5":function(e,t,n){"use strict";var i=n("23e7"),r=n("857a"),s=n("af03");i({target:"String",proto:!0,forced:s("anchor")},{anchor:function(e){return r(this,"a","name",e)}})},1913:function(e,t,n){"use strict";var i=n("23e7"),r=n("857a"),s=n("af03");i({target:"String",proto:!0,forced:s("fontsize")},{fontsize:function(e){return r(this,"font","size",e)}})},"197b":function(e,t,n){var i=n("746f");i("species")},"19aa":function(e,t){e.exports=function(e,t,n){if(!(e instanceof t))throw TypeError("Incorrect "+(n?n+" ":"")+"invocation");return e}},"19fa":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("div",[n("vui-button",{staticClass:"fixedLeft",attrs:{icon:"cog",params:{close:1}}},[e._v("Close")])],1),n("div",[n("h2",[e._v("Storage")]),e.secure?n("span",{staticClass:"notice"},[e._v(" "+e._s(-1==e.locked?"Sec.re ACC_** //):securi_nt.diag=>##'or 1=1'%($...":"Secure Access: Please have your identification ready.")+" ")]):e._e()]),e.contents?e._l(e.contents,(function(t){return n("div",{key:t.vend},[n("div",[n("span",{staticClass:"highlight"},[e._v(e._s(t.display_name)+" ("+e._s(t.quantity)+" available)")])]),n("div",{staticStyle:{float:"left"}},[e._v("Vend: ")]),n("vui-button",{staticClass:"statusValue",attrs:{params:{vendItem:t.vend,amount:1},icon:"arrow-alt-circle-down"}},[e._v("x1")]),t.quantity>=5?n("vui-button",{staticClass:"statusValue",attrs:{params:{vendItem:t.vend,amount:5},icon:"arrow-alt-circle-down"}},[e._v("x5")]):e._e(),t.quantity>=10?n("vui-button",{staticClass:"statusValue",attrs:{params:{vendItem:t.vend,amount:10},icon:"arrow-alt-circle-down"}},[e._v("x10")]):e._e(),t.quantity>=25?n("vui-button",{staticClass:"statusValue",attrs:{params:{vendItem:t.vend,amount:25},icon:"arrow-alt-circle-down"}},[e._v("x25")]):e._e(),t.quantity>1?n("vui-button",{staticClass:"statusValue",attrs:{params:{vendItem:t.vend,amount:t.quantity},icon:"arrow-alt-circle-down"}},[e._v("All")]):e._e()],1)})):n("div",{staticClass:"average"},[e._v(" No products loaded. ")])],2)},r=[],s={data:function(){return this.$root.$data.state}},a=s,o=n("2877"),c=Object(o["a"])(a,i,r,!1,null,null,null);t["default"]=c.exports},"1be4":function(e,t,n){var i=n("d066");e.exports=i("document","documentElement")},"1bf2":function(e,t,n){var i=n("23e7"),r=n("56ef");i({target:"Reflect",stat:!0},{ownKeys:r})},"1c0b":function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(String(e)+" is not a function");return e}},"1c7e":function(e,t,n){var i=n("b622"),r=i("iterator"),s=!1;try{var a=0,o={next:function(){return{done:!!a++}},return:function(){s=!0}};o[r]=function(){return this},Array.from(o,(function(){throw 2}))}catch(c){}e.exports=function(e,t){if(!t&&!s)return!1;var n=!1;try{var i={};i[r]=function(){return{next:function(){return{done:n=!0}}}},e(i)}catch(c){}return n}},"1cdc":function(e,t,n){var i=n("342f");e.exports=/(iphone|ipod|ipad).*applewebkit/i.test(i)},"1d1c":function(e,t,n){var i=n("23e7"),r=n("83ab"),s=n("37e8");i({target:"Object",stat:!0,forced:!r,sham:!r},{defineProperties:s})},"1d73":function(e,t,n){},"1d80":function(e,t){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},"1dbb":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[null==e.password?n("vui-button",{on:{click:e.join}},[e._v(e._s(e.ch.title))]):[n("input",{directives:[{name:"model",rawName:"v-model",value:e.password,expression:"password"}],attrs:{type:"text"},domProps:{value:e.password},on:{keydown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.join_with(t)},input:function(t){t.target.composing||(e.password=t.target.value)}}}),n("vui-button",{attrs:{params:{join:{target:e.re,password:e.password}}}},[e._v("Join "+e._s(e.ch.title))])]],2)},r=[],s=n("025e"),a={data:function(){return{password:null}},methods:{join:function(){this.ch.password?this.password="":Object(s["b"])({join:{target:this.re}})},join_with:function(){Object(s["b"])({join:{target:this.re,password:this.password}})}},props:{ch:{type:Object,default:function(){return{}}},re:{type:String,default:""}}},o=a,c=n("2877"),l=Object(c["a"])(o,i,r,!1,null,null,null);t["default"]=l.exports},"1dde":function(e,t,n){var i=n("d039"),r=n("b622"),s=n("2d00"),a=r("species");e.exports=function(e){return s>=51||!i((function(){var t=[],n=t.constructor={};return n[a]=function(){return{foo:1}},1!==t[e](Boolean).foo}))}},"1e25":function(e,t,n){"use strict";var i=n("23e7"),r=n("58a8").end,s=n("c8d2"),a=s("trimEnd"),o=a?function(){return r(this)}:"".trimEnd;i({target:"String",proto:!0,forced:a},{trimEnd:o,trimRight:o})},"1ec1":function(e,t){var n=Math.log;e.exports=Math.log1p||function(e){return(e=+e)>-1e-8&&e<1e-8?e-e*e/2:n(1+e)}},"1ee6":function(e,t,n){},"1fb5":function(e,t,n){"use strict";n("7da4")},"1fe2":function(e,t,n){"use strict";var i=n("6d61"),r=n("acac");i("WeakSet",(function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}}),r)},"203b":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.active?n("div",[n("view-records-general",{attrs:{"hide-advanced":""}},[n("vui-group-item",{attrs:{label:"Blood type:"}},[n("view-records-field",{attrs:{editable:(2&e.editable)>0,path:"active.medical.blood_type"}},[n("select",{directives:[{name:"model",rawName:"v-model",value:e.$root.$data.state.editingvalue,expression:"$root.$data.state.editingvalue"}],on:{change:function(t){var n=Array.prototype.filter.call(t.target.options,(function(e){return e.selected})).map((function(e){var t="_value"in e?e._value:e.value;return t}));e.$set(e.$root.$data.state,"editingvalue",t.target.multiple?n:n[0])}}},e._l(e.choices.medical.blood_type,(function(t){return n("option",{key:t,domProps:{value:t}},[e._v(e._s(t))])})),0)])],1),n("vui-group-item",{attrs:{label:"DNA:"}},[n("view-records-field",{attrs:{editable:(2&e.editable)>0,path:"active.medical.blood_dna"}})],1),n("vui-group-item",{attrs:{label:"Disabilities:"}},[n("view-records-field",{attrs:{editable:(2&e.editable)>0,path:"active.medical.disabilities"}},[n("textarea",{directives:[{name:"model",rawName:"v-model",value:e.$root.$data.state.editingvalue,expression:"$root.$data.state.editingvalue"}],domProps:{value:e.$root.$data.state.editingvalue},on:{input:function(t){t.target.composing||e.$set(e.$root.$data.state,"editingvalue",t.target.value)}}})])],1),n("vui-group-item",{attrs:{label:"Allergies:"}},[n("view-records-field",{attrs:{editable:(2&e.editable)>0,path:"active.medical.allergies"}},[n("textarea",{directives:[{name:"model",rawName:"v-model",value:e.$root.$data.state.editingvalue,expression:"$root.$data.state.editingvalue"}],domProps:{value:e.$root.$data.state.editingvalue},on:{input:function(t){t.target.composing||e.$set(e.$root.$data.state,"editingvalue",t.target.value)}}})])],1),n("vui-group-item",{attrs:{label:"Diseases:"}},[n("view-records-field",{attrs:{editable:(2&e.editable)>0,path:"active.medical.diseases"}},[n("textarea",{directives:[{name:"model",rawName:"v-model",value:e.$root.$data.state.editingvalue,expression:"$root.$data.state.editingvalue"}],domProps:{value:e.$root.$data.state.editingvalue},on:{input:function(t){t.target.composing||e.$set(e.$root.$data.state,"editingvalue",t.target.value)}}})])],1),n("vui-group-item",{attrs:{label:"Comments:"}},[e._l(e.active.medical.comments,(function(t){return n("div",{key:t},[e._v(e._s(t)+" "),(2&e.editable)>0?n("vui-button",{staticClass:"danger",attrs:{params:{removefromrecord:{value:t,key:["active","medical","comments"]}},icon:"trash-alt"}}):e._e()],1)})),0==e.active.medical.comments.length?n("div",[e._v("There are no comments.")]):e._e(),(2&e.editable)>0?n("view-records-field",{attrs:{"edit-button":"Add"},on:{save:function(t){return e.add("active.medical.comments",t)}}}):e._e()],2),n("vui-group-item",{attrs:{label:"Notes:"}},[n("view-records-field",{attrs:{editable:(2&e.editable)>0,path:"active.medical.notes"}},[n("textarea",{directives:[{name:"model",rawName:"v-model",value:e.$root.$data.state.editingvalue,expression:"$root.$data.state.editingvalue"}],domProps:{value:e.$root.$data.state.editingvalue},on:{input:function(t){t.target.composing||e.$set(e.$root.$data.state,"editingvalue",t.target.value)}}})])],1)],1)],1):e._e()},r=[],s=(n("ac1f"),n("1276"),n("025e")),a={data:function(){return this.$root.$data.state},methods:{add:function(e,t){s["a"].sendToTopic({addtorecord:{value:t,key:e.split(".")}})}}},o=a,c=n("2877"),l=Object(c["a"])(o,i,r,!1,null,null,null);t["default"]=l.exports},"207c":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("vui-group",[n("vui-group-item",{attrs:{label:"Microphone:"}},[n("vui-button",{class:{selected:e.listening},attrs:{params:{talk:1,nowindow:1}}},[e._v("On")]),n("vui-button",{class:{selected:!e.listening},attrs:{params:{talk:1,nowindow:1}}},[e._v("Off")])],1),n("vui-group-item",{attrs:{label:"Frequency:"}},[n("vui-button",{attrs:{params:{freq:-10,nowindow:1}}},[e._v("--")]),n("vui-button",{attrs:{params:{freq:-2,nowindow:1}}},[e._v("-")]),n("span",[e._v(e._s(e.frequency))]),n("vui-button",{attrs:{params:{freq:2,nowindow:1}}},[e._v("+")]),n("vui-button",{attrs:{params:{freq:10,nowindow:1}}},[e._v("++")])],1),n("vui-item",{attrs:{label:"Range:"}},[n("vui-input-slider",{attrs:{min:0,max:4},model:{value:e.radio_range,callback:function(t){e.radio_range=t},expression:"radio_range"}})],1),n("hr"),e._l(e.channels,(function(t){return n("vui-group-item",{key:t.name,attrs:{label:t.name}},[n("vui-button",{class:{selected:t.listening},attrs:{params:{ch_name:t.name,listen:1,nowindow:1}}},[e._v("On")]),n("vui-button",{class:{selected:!t.listening},attrs:{params:{ch_name:t.name,listen:1,nowindow:1}}},[e._v("Off")])],1)}))],2)],1)},r=[],s={data:function(){return this.$root.$data.state}},a=s,o=n("2877"),c=Object(o["a"])(a,i,r,!1,null,null,null);t["default"]=c.exports},2099:function(e,t){ace.define("ace/snippets",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/lib/lang","ace/range","ace/anchor","ace/keyboard/hash_handler","ace/tokenizer","ace/lib/dom","ace/editor"],(function(e,t,n){"use strict";var i=e("./lib/oop"),r=e("./lib/event_emitter").EventEmitter,s=e("./lib/lang"),a=e("./range").Range,o=e("./anchor").Anchor,c=e("./keyboard/hash_handler").HashHandler,l=e("./tokenizer").Tokenizer,u=a.comparePoints,d=function(){this.snippetMap={},this.snippetNameMap={}};(function(){i.implement(this,r),this.getTokenizer=function(){function e(e,t,n){return e=e.substr(1),/^\d+$/.test(e)&&!n.inFormatString?[{tabstopId:parseInt(e,10)}]:[{text:e}]}function t(e){return"(?:[^\\\\"+e+"]|\\\\.)"}return d.$tokenizer=new l({start:[{regex:/:/,onMatch:function(e,t,n){return n.length&&n[0].expectIf?(n[0].expectIf=!1,n[0].elseBranch=n[0],[n[0]]):":"}},{regex:/\\./,onMatch:function(e,t,n){var i=e[1];return"}"==i&&n.length||-1!="`$\\".indexOf(i)?e=i:n.inFormatString&&("n"==i||"t"==i?e="\n":-1!="ulULE".indexOf(i)&&(e={changeCase:i,local:i>"a"})),[e]}},{regex:/}/,onMatch:function(e,t,n){return[n.length?n.shift():e]}},{regex:/\$(?:\d+|\w+)/,onMatch:e},{regex:/\$\{[\dA-Z_a-z]+/,onMatch:function(t,n,i){var r=e(t.substr(1),n,i);return i.unshift(r[0]),r},next:"snippetVar"},{regex:/\n/,token:"newline",merge:!1}],snippetVar:[{regex:"\\|"+t("\\|")+"*\\|",onMatch:function(e,t,n){n[0].choices=e.slice(1,-1).split(",")},next:"start"},{regex:"/("+t("/")+"+)/(?:("+t("/")+"*)/)(\\w*):?",onMatch:function(e,t,n){var i=n[0];return i.fmtString=e,e=this.splitRegex.exec(e),i.guard=e[1],i.fmt=e[2],i.flag=e[3],""},next:"start"},{regex:"`"+t("`")+"*`",onMatch:function(e,t,n){return n[0].code=e.splice(1,-1),""},next:"start"},{regex:"\\?",onMatch:function(e,t,n){n[0]&&(n[0].expectIf=!0)},next:"start"},{regex:"([^:}\\\\]|\\\\.)*:?",token:"",next:"start"}],formatString:[{regex:"/("+t("/")+"+)/",token:"regex"},{regex:"",onMatch:function(e,t,n){n.inFormatString=!0},next:"start"}]}),d.prototype.getTokenizer=function(){return d.$tokenizer},d.$tokenizer},this.tokenizeTmSnippet=function(e,t){return this.getTokenizer().getLineTokens(e,t).tokens.map((function(e){return e.value||e}))},this.$getDefaultValue=function(e,t){if(/^[A-Z]\d+$/.test(t)){var n=t.substr(1);return(this.variables[t[0]+"__"]||{})[n]}if(/^\d+$/.test(t))return(this.variables.__||{})[t];if(t=t.replace(/^TM_/,""),e){var i=e.session;switch(t){case"CURRENT_WORD":var r=i.getWordRange();case"SELECTION":case"SELECTED_TEXT":return i.getTextRange(r);case"CURRENT_LINE":return i.getLine(e.getCursorPosition().row);case"PREV_LINE":return i.getLine(e.getCursorPosition().row-1);case"LINE_INDEX":return e.getCursorPosition().column;case"LINE_NUMBER":return e.getCursorPosition().row+1;case"SOFT_TABS":return i.getUseSoftTabs()?"YES":"NO";case"TAB_SIZE":return i.getTabSize();case"FILENAME":case"FILEPATH":return"";case"FULLNAME":return"Ace"}}},this.variables={},this.getVariableValue=function(e,t){return this.variables.hasOwnProperty(t)?this.variables[t](e,t)||"":this.$getDefaultValue(e,t)||""},this.tmStrFormat=function(e,t,n){var i=t.flag||"",r=t.guard;r=new RegExp(r,i.replace(/[^gi]/,""));var s=this.tokenizeTmSnippet(t.fmt,"formatString"),a=this,o=e.replace(r,(function(){a.variables.__=arguments;for(var e=a.resolveVariables(s,n),t="E",i=0;i1?(b=t[t.length-1].length,v+=t.length-1):b+=e.length,y+=e}else e.start?e.end={row:v,column:b}:e.start={row:v,column:b}}));var w=e.getSelectionRange(),_=e.session.replace(w,y),x=new h(e),k=e.inVirtualSelectionMode&&e.selection.index;x.addTabstops(o,w.start,_,k)},this.insertSnippet=function(e,t){var n=this;if(e.inVirtualSelectionMode)return n.insertSnippetForSelection(e,t);e.forEachSelection((function(){n.insertSnippetForSelection(e,t)}),null,{keepOrder:!0}),e.tabstopManager&&e.tabstopManager.tabNext()},this.$getScope=function(e){var t=e.session.$mode.$id||"";if(t=t.split("/").pop(),"html"===t||"php"===t){"php"!==t||e.session.$mode.inlinePhp||(t="html");var n=e.getCursorPosition(),i=e.session.getState(n.row);"object"===typeof i&&(i=i[0]),i.substring&&("js-"==i.substring(0,3)?t="javascript":"css-"==i.substring(0,4)?t="css":"php-"==i.substring(0,4)&&(t="php"))}return t},this.getActiveScopes=function(e){var t=this.$getScope(e),n=[t],i=this.snippetMap;return i[t]&&i[t].includeScopes&&n.push.apply(n,i[t].includeScopes),n.push("_"),n},this.expandWithTab=function(e,t){var n=this,i=e.forEachSelection((function(){return n.expandSnippetForSelection(e,t)}),null,{keepOrder:!0});return i&&e.tabstopManager&&e.tabstopManager.tabNext(),i},this.expandSnippetForSelection=function(e,t){var n,i=e.getCursorPosition(),r=e.session.getLine(i.row),s=r.substring(0,i.column),a=r.substr(i.column),o=this.snippetMap;return this.getActiveScopes(e).some((function(e){var t=o[e];return t&&(n=this.findMatchingSnippet(t,s,a)),!!n}),this),!!n&&(t&&t.dryRun||(e.session.doc.removeInLine(i.row,i.column-n.replaceBefore.length,i.column+n.replaceAfter.length),this.variables.M__=n.matchBefore,this.variables.T__=n.matchAfter,this.insertSnippetForSelection(e,n.content),this.variables.M__=this.variables.T__=null),!0)},this.findMatchingSnippet=function(e,t,n){for(var i=e.length;i--;){var r=e[i];if((!r.startRe||r.startRe.test(t))&&((!r.endRe||r.endRe.test(n))&&(r.startRe||r.endRe)))return r.matchBefore=r.startRe?r.startRe.exec(t):[""],r.matchAfter=r.endRe?r.endRe.exec(n):[""],r.replaceBefore=r.triggerRe?r.triggerRe.exec(t)[0]:"",r.replaceAfter=r.endTriggerRe?r.endTriggerRe.exec(n)[0]:"",r}},this.snippetMap={},this.snippetNameMap={},this.register=function(e,t){var n=this.snippetMap,i=this.snippetNameMap,r=this;function a(e){return e&&!/^\^?\(.*\)\$?$|^\\b$/.test(e)&&(e="(?:"+e+")"),e||""}function o(e,t,n){return e=a(e),t=a(t),n?(e=t+e,e&&"$"!=e[e.length-1]&&(e+="$")):(e+=t,e&&"^"!=e[0]&&(e="^"+e)),new RegExp(e)}function c(e){e.scope||(e.scope=t||"_"),t=e.scope,n[t]||(n[t]=[],i[t]={});var a=i[t];if(e.name){var c=a[e.name];c&&r.unregister(c),a[e.name]=e}n[t].push(e),e.tabTrigger&&!e.trigger&&(!e.guard&&/^\w/.test(e.tabTrigger)&&(e.guard="\\b"),e.trigger=s.escapeRegExp(e.tabTrigger)),(e.trigger||e.guard||e.endTrigger||e.endGuard)&&(e.startRe=o(e.trigger,e.guard,!0),e.triggerRe=new RegExp(e.trigger,"",!0),e.endRe=o(e.endTrigger,e.endGuard,!0),e.endTriggerRe=new RegExp(e.endTrigger,"",!0))}e||(e=[]),e&&e.content?c(e):Array.isArray(e)&&e.forEach(c),this._signal("registerSnippets",{scope:t})},this.unregister=function(e,t){var n=this.snippetMap,i=this.snippetNameMap;function r(e){var r=i[e.scope||t];if(r&&r[e.name]){delete r[e.name];var s=n[e.scope||t],a=s&&s.indexOf(e);a>=0&&s.splice(a,1)}}e.content?r(e):Array.isArray(e)&&e.forEach(r)},this.parseSnippetFile=function(e){e=e.replace(/\r/g,"");var t,n=[],i={},r=/^#.*|^({[\s\S]*})\s*$|^(\S+) (.*)$|^((?:\n*\t.*)+)/gm;while(t=r.exec(e)){if(t[1])try{i=JSON.parse(t[1]),n.push(i)}catch(c){}if(t[4])i.content=t[4].replace(/^\t/gm,""),n.push(i),i={};else{var s=t[2],a=t[3];if("regex"==s){var o=/\/((?:[^\/\\]|\\.)*)|$/g;i.guard=o.exec(a)[1],i.trigger=o.exec(a)[1],i.endTrigger=o.exec(a)[1],i.endGuard=o.exec(a)[1]}else"snippet"==s?(i.tabTrigger=a.match(/^\S*/)[0],i.name||(i.name=a)):i[s]=a}}return n},this.getSnippetByName=function(e,t){var n,i=this.snippetNameMap;return this.getActiveScopes(t).some((function(t){var r=i[t];return r&&(n=r[e]),!!n}),this),n}}).call(d.prototype);var h=function(e){if(e.tabstopManager)return e.tabstopManager;e.tabstopManager=this,this.$onChange=this.onChange.bind(this),this.$onChangeSelection=s.delayedCall(this.onChangeSelection.bind(this)).schedule,this.$onChangeSession=this.onChangeSession.bind(this),this.$onAfterExec=this.onAfterExec.bind(this),this.attach(e)};(function(){this.attach=function(e){this.index=0,this.ranges=[],this.tabstops=[],this.$openTabstops=null,this.selectedTabstop=null,this.editor=e,this.editor.on("change",this.$onChange),this.editor.on("changeSelection",this.$onChangeSelection),this.editor.on("changeSession",this.$onChangeSession),this.editor.commands.on("afterExec",this.$onAfterExec),this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler)},this.detach=function(){this.tabstops.forEach(this.removeTabstopMarkers,this),this.ranges=null,this.tabstops=null,this.selectedTabstop=null,this.editor.removeListener("change",this.$onChange),this.editor.removeListener("changeSelection",this.$onChangeSelection),this.editor.removeListener("changeSession",this.$onChangeSession),this.editor.commands.removeListener("afterExec",this.$onAfterExec),this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler),this.editor.tabstopManager=null,this.editor=null},this.onChange=function(e){var t="r"==e.action[0],n=e.start,i=e.end,r=n.row,s=i.row,a=s-r,o=i.column-n.column;if(t&&(a=-a,o=-o),!this.$inChange&&t){var c=this.selectedTabstop,l=c&&!c.some((function(e){return u(e.start,n)<=0&&u(e.end,i)>=0}));if(l)return this.detach()}for(var d=this.ranges,h=0;h0?(this.removeRange(f),h--):(f.start.row==r&&f.start.column>n.column&&(f.start.column+=o),f.end.row==r&&f.end.column>=n.column&&(f.end.column+=o),f.start.row>=r&&(f.start.row+=a),f.end.row>=r&&(f.end.row+=a),u(f.start,f.end)>0&&this.removeRange(f)))}d.length||this.detach()},this.updateLinkedFields=function(){var e=this.selectedTabstop;if(e&&e.hasLinkedRanges){this.$inChange=!0;for(var n=this.editor.session,i=n.getTextRange(e.firstNonLinked),r=e.length;r--;){var s=e[r];if(s.linked){var a=t.snippetManager.tmStrFormat(i,s.original);n.replace(s,a)}}this.$inChange=!1}},this.onAfterExec=function(e){e.command&&!e.command.readOnly&&this.updateLinkedFields()},this.onChangeSelection=function(){if(this.editor){for(var e=this.editor.selection.lead,t=this.editor.selection.anchor,n=this.editor.selection.isEmpty(),i=this.ranges.length;i--;)if(!this.ranges[i].linked){var r=this.ranges[i].contains(e.row,e.column),s=n||this.ranges[i].contains(t.row,t.column);if(r&&s)return}this.detach()}},this.onChangeSession=function(){this.detach()},this.tabNext=function(e){var t=this.tabstops.length,n=this.index+(e||1);n=Math.min(Math.max(n,1),t),n==t&&(n=0),this.selectTabstop(n),0===n&&this.detach()},this.selectTabstop=function(e){this.$openTabstops=null;var t=this.tabstops[this.index];if(t&&this.addTabstopMarkers(t),this.index=e,t=this.tabstops[this.index],t&&t.length){if(this.selectedTabstop=t,this.editor.inVirtualSelectionMode)this.editor.selection.setRange(t.firstNonLinked);else{var n=this.editor.multiSelect;n.toSingleRange(t.firstNonLinked.clone());for(var i=t.length;i--;)t.hasLinkedRanges&&t[i].linked||n.addRange(t[i].clone(),!0);n.ranges[0]&&n.addRange(n.ranges[0].clone())}this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler)}},this.addTabstops=function(e,t,n){if(this.$openTabstops||(this.$openTabstops=[]),!e[0]){var i=a.fromPoints(n,n);g(i.start,t),g(i.end,t),e[0]=[i],e[0].index=0}var r=this.index,s=[r+1,0],o=this.ranges;e.forEach((function(e,n){for(var i=this.$openTabstops[n]||e,r=e.length;r--;){var c=e[r],l=a.fromPoints(c.start,c.end||c.start);p(l.start,t),p(l.end,t),l.original=c,l.tabstop=i,o.push(l),i!=e?i.unshift(l):i[r]=l,c.fmtString?(l.linked=!0,i.hasLinkedRanges=!0):i.firstNonLinked||(i.firstNonLinked=l)}i.firstNonLinked||(i.hasLinkedRanges=!1),i===e&&(s.push(i),this.$openTabstops[n]=i),this.addTabstopMarkers(i)}),this),s.length>2&&(this.tabstops.length&&s.push(s.splice(2,1)[0]),this.tabstops.splice.apply(this.tabstops,s))},this.addTabstopMarkers=function(e){var t=this.editor.session;e.forEach((function(e){e.markerId||(e.markerId=t.addMarker(e,"ace_snippet-marker","text"))}))},this.removeTabstopMarkers=function(e){var t=this.editor.session;e.forEach((function(e){t.removeMarker(e.markerId),e.markerId=null}))},this.removeRange=function(e){var t=e.tabstop.indexOf(e);e.tabstop.splice(t,1),t=this.ranges.indexOf(e),this.ranges.splice(t,1),this.editor.session.removeMarker(e.markerId),e.tabstop.length||(t=this.tabstops.indexOf(e.tabstop),-1!=t&&this.tabstops.splice(t,1),this.tabstops.length||this.detach())},this.keyboardHandler=new c,this.keyboardHandler.bindKeys({Tab:function(e){t.snippetManager&&t.snippetManager.expandWithTab(e)||e.tabstopManager.tabNext(1)},"Shift-Tab":function(e){e.tabstopManager.tabNext(-1)},Esc:function(e){e.tabstopManager.detach()},Return:function(e){return!1}})}).call(h.prototype);var f={};f.onChange=o.prototype.onChange,f.setPosition=function(e,t){this.pos.row=e,this.pos.column=t},f.update=function(e,t,n){this.$insertRight=n,this.pos=e,this.onChange(t)};var p=function(e,t){0==e.row&&(e.column+=t.column),e.row+=t.row},g=function(e,t){e.row==t.row&&(e.column-=t.column),e.row-=t.row};e("./lib/dom").importCssString(".ace_snippet-marker { -moz-box-sizing: border-box; box-sizing: border-box; background: rgba(194, 193, 208, 0.09); border: 1px dotted rgba(211, 208, 235, 0.62); position: absolute;}"),t.snippetManager=new d;var m=e("./editor").Editor;(function(){this.insertSnippet=function(e,n){return t.snippetManager.insertSnippet(this,e,n)},this.expandSnippet=function(e){return t.snippetManager.expandWithTab(this,e)}}).call(m.prototype)})),ace.define("ace/autocomplete/popup",["require","exports","module","ace/virtual_renderer","ace/editor","ace/range","ace/lib/event","ace/lib/lang","ace/lib/dom"],(function(e,t,n){"use strict";var i=e("../virtual_renderer").VirtualRenderer,r=e("../editor").Editor,s=e("../range").Range,a=e("../lib/event"),o=e("../lib/lang"),c=e("../lib/dom"),l=function(e){var t=new i(e);t.$maxLines=4;var n=new r(t);return n.setHighlightActiveLine(!1),n.setShowPrintMargin(!1),n.renderer.setShowGutter(!1),n.renderer.setHighlightGutterLine(!1),n.$mouseHandler.$focusWaitTimout=0,n.$highlightTagPending=!0,n},u=function(e){var t=c.createElement("div"),n=new l(t);e&&e.appendChild(t),t.style.display="none",n.renderer.content.style.cursor="default",n.renderer.setStyle("ace_autocomplete"),n.setOption("displayIndentGuides",!1),n.setOption("dragDelay",150);var i,r=function(){};n.focus=r,n.$isFocused=!0,n.renderer.$cursorLayer.restartTimer=r,n.renderer.$cursorLayer.element.style.opacity=0,n.renderer.$maxLines=8,n.renderer.$keepTextAreaAtCursor=!1,n.setHighlightActiveLine(!1),n.session.highlight(""),n.session.$searchHighlight.clazz="ace_highlight-marker",n.on("mousedown",(function(e){var t=e.getDocumentPosition();n.selection.moveToPosition(t),d.start.row=d.end.row=t.row,e.stop()}));var u=new s(-1,0,-1,1/0),d=new s(-1,0,-1,1/0);d.id=n.session.addMarker(d,"ace_active-line","fullLine"),n.setSelectOnHover=function(e){e?u.id&&(n.session.removeMarker(u.id),u.id=null):u.id=n.session.addMarker(u,"ace_line-hover","fullLine")},n.setSelectOnHover(!1),n.on("mousemove",(function(e){if(i){if(i.x!=e.x||i.y!=e.y){i=e,i.scrollTop=n.renderer.scrollTop;var t=i.getDocumentPosition().row;u.start.row!=t&&(u.id||n.setRow(t),f(t))}}else i=e})),n.renderer.on("beforeRender",(function(){if(i&&-1!=u.start.row){i.$pos=null;var e=i.getDocumentPosition().row;u.id||n.setRow(e),f(e,!0)}})),n.renderer.on("afterRender",(function(){var e=n.getRow(),t=n.renderer.$textLayer,i=t.element.childNodes[e-t.config.firstRow];i!=t.selectedNode&&(t.selectedNode&&c.removeCssClass(t.selectedNode,"ace_selected"),t.selectedNode=i,i&&c.addCssClass(i,"ace_selected"))}));var h=function(){f(-1)},f=function(e,t){e!==u.start.row&&(u.start.row=u.end.row=e,t||n.session._emit("changeBackMarker"),n._emit("changeHoverMarker"))};n.getHoveredRow=function(){return u.start.row},a.addListener(n.container,"mouseout",h),n.on("hide",h),n.on("changeSelection",h),n.session.doc.getLength=function(){return n.data.length},n.session.doc.getLine=function(e){var t=n.data[e];return"string"==typeof t?t:t&&t.value||""};var p=n.session.bgTokenizer;return p.$tokenizeRow=function(e){var t=n.data[e],i=[];if(!t)return i;"string"==typeof t&&(t={value:t}),t.caption||(t.caption=t.value||t.name);for(var r,s,a=-1,o=0;oc-2&&(l=l.substr(0,c-t.caption.length-3)+"…"),i.push({type:"rightAlignedText",value:l})}return i},p.$updateOnChange=r,p.start=r,n.session.$computeWidth=function(){return this.screenWidth=0},n.$blockScrolling=1/0,n.isOpen=!1,n.isTopdown=!1,n.autoSelect=!0,n.data=[],n.setData=function(e){n.setValue(o.stringRepeat("\n",e.length),-1),n.data=e||[],n.setRow(0)},n.getData=function(e){return n.data[e]},n.getRow=function(){return d.start.row},n.setRow=function(e){e=Math.max(this.autoSelect?0:-1,Math.min(this.data.length,e)),d.start.row!=e&&(n.selection.clearSelection(),d.start.row=d.end.row=e||0,n.session._emit("changeBackMarker"),n.moveCursorTo(e||0,0),n.isOpen&&n._signal("select"))},n.on("changeSelection",(function(){n.isOpen&&n.setRow(n.selection.lead.row),n.renderer.scrollCursorIntoView()})),n.hide=function(){this.container.style.display="none",this._signal("hide"),n.isOpen=!1},n.show=function(e,t,r){var s=this.container,a=window.innerHeight,o=window.innerWidth,c=this.renderer,l=c.$maxLines*t*1.4,u=e.top+this.$borderSize,d=u>a/2&&!r;d&&u+t+l>a?(c.$maxPixelHeight=u-2*this.$borderSize,s.style.top="",s.style.bottom=a-u+"px",n.isTopdown=!1):(u+=t,c.$maxPixelHeight=a-u-.2*t,s.style.top=u+"px",s.style.bottom="",n.isTopdown=!0),s.style.display="",this.renderer.$textLayer.checkForSizeChanges();var h=e.left;h+s.offsetWidth>o&&(h=o-s.offsetWidth),s.style.left=h+"px",this._signal("show"),i=null,n.isOpen=!0},n.getTextLeftOffset=function(){return this.$borderSize+this.renderer.$padding+this.$imageSize},n.$imageSize=0,n.$borderSize=1,n};c.importCssString(".ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line { background-color: #CAD6FA; z-index: 1;}.ace_editor.ace_autocomplete .ace_line-hover { border: 1px solid #abbffe; margin-top: -1px; background: rgba(233,233,253,0.4);}.ace_editor.ace_autocomplete .ace_line-hover { position: absolute; z-index: 2;}.ace_editor.ace_autocomplete .ace_scroller { background: none; border: none; box-shadow: none;}.ace_rightAlignedText { color: gray; display: inline-block; position: absolute; right: 4px; text-align: right; z-index: -1;}.ace_editor.ace_autocomplete .ace_completion-highlight{ color: #000; text-shadow: 0 0 0.01em;}.ace_editor.ace_autocomplete { width: 280px; z-index: 200000; background: #fbfbfb; color: #444; border: 1px lightgray solid; position: fixed; box-shadow: 2px 3px 5px rgba(0,0,0,.2); line-height: 1.4;}"),t.AcePopup=u})),ace.define("ace/autocomplete/util",["require","exports","module"],(function(e,t,n){"use strict";t.parForEach=function(e,t,n){var i=0,r=e.length;0===r&&n();for(var s=0;s=0;s--){if(!n.test(e[s]))break;r.push(e[s])}return r.reverse().join("")},t.retrieveFollowingIdentifier=function(e,t,n){n=n||i;for(var r=[],s=t;s=n?-1:t+1;break;case"start":t=0;break;case"end":t=n;break}this.popup.setRow(t)},this.insertMatch=function(e,t){if(e||(e=this.popup.getData(this.popup.getRow())),!e)return!1;if(e.completer&&e.completer.insertMatch)e.completer.insertMatch(this.editor,e);else{if(this.completions.filterText)for(var n,i=this.editor.selection.getAllRanges(),r=0;n=i[r];r++)n.start.column-=this.completions.filterText.length,this.editor.session.remove(n);e.snippet?c.insertSnippet(this.editor,e.snippet):this.editor.execCommand("insertstring",e.value||e)}this.detach()},this.commands={Up:function(e){e.completer.goTo("up")},Down:function(e){e.completer.goTo("down")},"Ctrl-Up|Ctrl-Home":function(e){e.completer.goTo("start")},"Ctrl-Down|Ctrl-End":function(e){e.completer.goTo("end")},Esc:function(e){e.completer.detach()},Return:function(e){return e.completer.insertMatch()},"Shift-Return":function(e){e.completer.insertMatch(null,{deleteSuffix:!0})},Tab:function(e){var t=e.completer.insertMatch();if(t||e.tabstopManager)return t;e.completer.goTo("down")},PageUp:function(e){e.completer.popup.gotoPageUp()},PageDown:function(e){e.completer.popup.gotoPageDown()}},this.gatherCompletions=function(e,t){var n=e.getSession(),i=e.getCursorPosition(),r=s.getCompletionPrefix(e);this.base=n.doc.createAnchor(i.row,i.column-r.length),this.base.$insertRight=!0;var a=[],o=e.completers.length;return e.completers.forEach((function(c,l){c.getCompletions(e,n,i,r,(function(n,i){!n&&i&&(a=a.concat(i)),t(null,{prefix:s.getCompletionPrefix(e),matches:a,finished:0===--o})}))})),!0},this.showPopup=function(e){this.editor&&this.detach(),this.activated=!0,this.editor=e,e.completer!=this&&(e.completer&&e.completer.detach(),e.completer=this),e.on("changeSelection",this.changeListener),e.on("blur",this.blurListener),e.on("mousedown",this.mousedownListener),e.on("mousewheel",this.mousewheelListener),this.updateCompletions()},this.updateCompletions=function(e){if(e&&this.base&&this.completions){var t=this.editor.getCursorPosition(),n=this.editor.session.getTextRange({start:this.base,end:t});if(n==this.completions.filterText)return;return this.completions.setFilter(n),this.completions.filtered.length?1!=this.completions.filtered.length||this.completions.filtered[0].value!=n||this.completions.filtered[0].snippet?void this.openPopup(this.editor,n,e):this.detach():this.detach()}var i=this.gatherCompletionsId;this.gatherCompletions(this.editor,function(t,n){var r=function(){if(n.finished)return this.detach()}.bind(this),s=n.prefix,a=n&&n.matches;if(!a||!a.length)return r();if(0===s.indexOf(n.prefix)&&i==this.gatherCompletionsId){this.completions=new u(a),this.exactMatch&&(this.completions.exactMatch=!0),this.completions.setFilter(s);var o=this.completions.filtered;return o.length&&(1!=o.length||o[0].value!=s||o[0].snippet)?this.autoInsert&&1==o.length&&n.finished?this.insertMatch(o[0]):void this.openPopup(this.editor,s,e):r()}}.bind(this))},this.cancelContextMenu=function(){this.editor.$mouseHandler.cancelContextMenu()},this.updateDocTooltip=function(){var e=this.popup,t=e.data,n=t&&(t[e.getHoveredRow()]||t[e.getRow()]),i=null;return n&&this.editor&&this.popup.isOpen?(this.editor.completers.some((function(e){return e.getDocTooltip&&(i=e.getDocTooltip(n)),i})),i||(i=n),"string"==typeof i&&(i={docText:i}),i&&(i.docHTML||i.docText)?void this.showDocTooltip(i):this.hideDocTooltip()):this.hideDocTooltip()},this.showDocTooltip=function(e){this.tooltipNode||(this.tooltipNode=o.createElement("div"),this.tooltipNode.className="ace_tooltip ace_doc-tooltip",this.tooltipNode.style.margin=0,this.tooltipNode.style.pointerEvents="auto",this.tooltipNode.tabIndex=-1,this.tooltipNode.onblur=this.blurListener.bind(this),this.tooltipNode.onclick=this.onTooltipClick.bind(this));var t=this.tooltipNode;e.docHTML?t.innerHTML=e.docHTML:e.docText&&(t.textContent=e.docText),t.parentNode||document.body.appendChild(t);var n=this.popup,i=n.container.getBoundingClientRect();t.style.top=n.container.style.top,t.style.bottom=n.container.style.bottom,window.innerWidth-i.right<320?(t.style.right=window.innerWidth-i.left+"px",t.style.left=""):(t.style.left=i.right+1+"px",t.style.right=""),t.style.display="block"},this.hideDocTooltip=function(){if(this.tooltipTimer.cancel(),this.tooltipNode){var e=this.tooltipNode;this.editor.isFocused()||document.activeElement!=e||this.editor.focus(),this.tooltipNode=null,e.parentNode&&e.parentNode.removeChild(e)}},this.onTooltipClick=function(e){var t=e.target;while(t&&t!=this.tooltipNode){if("A"==t.nodeName&&t.href){t.rel="noreferrer",t.target="_blank";break}t=t.parentNode}}}).call(l.prototype),l.startCommand={name:"startAutocomplete",exec:function(e){e.completer||(e.completer=new l),e.completer.autoInsert=!1,e.completer.autoSelect=!0,e.completer.showPopup(e),e.completer.cancelContextMenu()},bindKey:"Ctrl-Space|Ctrl-Shift-Space|Alt-Space"};var u=function(e,t){this.all=e,this.filtered=e,this.filterText=t||"",this.exactMatch=!1};(function(){this.setFilter=function(e){if(e.length>this.filterText&&0===e.lastIndexOf(this.filterText,0))var t=this.filtered;else t=this.all;this.filterText=e,t=this.filterCompletions(t,this.filterText),t=t.sort((function(e,t){return t.exactMatch-e.exactMatch||t.score-e.score}));var n=null;t=t.filter((function(e){var t=e.snippet||e.caption||e.value;return t!==n&&(n=t,!0)})),this.filtered=t},this.filterCompletions=function(e,t){var n=[],i=t.toUpperCase(),r=t.toLowerCase();e:for(var s,a=0;s=e[a];a++){var o=s.value||s.caption||s.snippet;if(o){var c,l,u=-1,d=0,h=0;if(this.exactMatch){if(t!==o.substr(0,t.length))continue e}else for(var f=0;f=0&&(g<0||p0&&(-1===u&&(h+=10),h+=l),d|=1<",a.escapeHTML(e.caption),"","
",a.escapeHTML(e.snippet)].join(""))}},d=[u,c,l];t.setCompleters=function(e){d.length=0,e&&d.push.apply(d,e)},t.addCompleter=function(e){d.push(e)},t.textCompleter=c,t.keyWordCompleter=l,t.snippetCompleter=u;var h={name:"expandSnippet",exec:function(e){return i.expandWithTab(e)},bindKey:"Tab"},f=function(e,t){p(t.session.$mode)},p=function(e){var t=e.$id;i.files||(i.files={}),g(t),e.modes&&e.modes.forEach(p)},g=function(e){if(e&&!i.files[e]){var t=e.replace("mode","snippets");i.files[e]={},s.loadModule(t,(function(t){t&&(i.files[e]=t,!t.snippets&&t.snippetText&&(t.snippets=i.parseSnippetFile(t.snippetText)),i.register(t.snippets||[],t.scope),t.includeScopes&&(i.snippetMap[t.scope].includeScopes=t.includeScopes,t.includeScopes.forEach((function(e){g("ace/mode/"+e)}))))}))}},m=function(e){var t=e.editor,n=t.completer&&t.completer.activated;if("backspace"===e.command.name)n&&!o.getCompletionPrefix(t)&&t.completer.detach();else if("insertstring"===e.command.name){var i=o.getCompletionPrefix(t);i&&!n&&(t.completer||(t.completer=new r),t.completer.autoInsert=!1,t.completer.showPopup(t))}},v=e("../editor").Editor;e("../config").defineOptions(v.prototype,"editor",{enableBasicAutocompletion:{set:function(e){e?(this.completers||(this.completers=Array.isArray(e)?e:d),this.commands.addCommand(r.startCommand)):this.commands.removeCommand(r.startCommand)},value:!1},enableLiveAutocompletion:{set:function(e){e?(this.completers||(this.completers=Array.isArray(e)?e:d),this.commands.on("afterExec",m)):this.commands.removeListener("afterExec",m)},value:!1},enableSnippets:{set:function(e){e?(this.commands.addCommand(h),this.on("changeMode",f),f(null,this)):(this.commands.removeCommand(h),this.off("changeMode",f))},value:!1}})})),function(){ace.acequire(["ace/ext/language_tools"],(function(){}))}()},"20a6":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("input",{directives:[{name:"model",rawName:"v-model",value:e.passcode,expression:"passcode"}],attrs:{placeholder:"Enter passcode...",autofocus:""},domProps:{value:e.passcode},on:{input:function(t){t.target.composing||(e.passcode=t.target.value)}}}),n("vui-button",{attrs:{params:{passcode:e.passcode}}},[e._v("Submit")])],1)},r=[],s={data:function(){return{passcode:""}}},a=s,o=n("2877"),c=Object(o["a"])(a,i,r,!1,null,null,null);t["default"]=c.exports},"20bf":function(e,t,n){"use strict";var i=n("8aa7"),r=n("ebb5").exportTypedArrayStaticMethod,s=n("a078");r("from",s,i)},"210c":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[e.minButton?n("vui-button",{attrs:{disabled:e.val<=e.min},on:{click:function(t){return e.onUpdatedValue(e.min+1-e.val)}}},[e._v("Min")]):e._e(),e._l(e.subButtons,(function(t){return n("vui-button",{key:"-"+t,attrs:{disabled:e.val-te.max},on:{click:function(n){return e.onUpdatedValue(Math.pow(10,t))}}},[e._v("+")])})),e.maxButton?n("vui-button",{attrs:{disabled:e.val>=e.max},on:{click:function(t){return e.onUpdatedValue(e.max-e.val)}}},[e._v("Max")]):e._e()],2)},r=[],s=(n("a9e3"),n("8a79"),n("c0d6")),a={props:{value:{type:Number,default:0},minButton:{type:Boolean,default:!1},maxButton:{type:Boolean,default:!1},buttonCount:{type:Number,default:1},min:{type:Number,default:0},max:{type:Number,default:100},pushState:{type:Boolean,default:!0},width:{type:String,default:"10em"},decimalPlaces:{type:Number,default:0}},data:function(){return{val:this.value}},computed:{subButtons:function(){if(!this.buttonCount)return[];for(var e=[],t=this.buttonCount-1;t>=0;t--)e.push(t);return e},addButtons:function(){if(!this.buttonCount)return[];for(var e=[],t=0;tthis.max&&(e=this.max),eh;h++)if(p=k(e[h]),p&&p instanceof l)return p;return new l(!1)}u=d.call(e)}g=u.next;while(!(m=g.call(u)).done){try{p=k(m.value)}catch(A){throw c(u),A}if("object"==typeof p&&p&&p instanceof l)return p}return new l(!1)}},2315:function(e,t,n){"use strict";var i=n("23e7"),r=n("857a"),s=n("af03");i({target:"String",proto:!0,forced:s("strike")},{strike:function(){return r(this,"strike","","")}})},2351:function(e,t,n){var i=n("746f");i("split")},"23cb":function(e,t,n){var i=n("a691"),r=Math.max,s=Math.min;e.exports=function(e,t){var n=i(e);return n<0?r(n+t,0):s(n,t)}},"23dc":function(e,t,n){var i=n("d44e");i(Math,"Math",!0)},"23e7":function(e,t,n){var i=n("da84"),r=n("06cf").f,s=n("9112"),a=n("6eeb"),o=n("ce4e"),c=n("e893"),l=n("94ca");e.exports=function(e,t){var n,u,d,h,f,p,g=e.target,m=e.global,v=e.stat;if(u=m?i:v?i[g]||o(g,{}):(i[g]||{}).prototype,u)for(d in t){if(f=t[d],e.noTargetGet?(p=r(u,d),h=p&&p.value):h=u[d],n=l(m?d:g+(v?".":"#")+d,e.forced),!n&&void 0!==h){if(typeof f===typeof h)continue;c(f,h)}(e.sham||h&&h.sham)&&s(f,"sham",!0),a(u,d,f,e)}}},"241c":function(e,t,n){var i=n("ca84"),r=n("7839"),s=r.concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return i(e,s)}},2480:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("vui-button",{attrs:{params:{stop:1}}},[e._v("Stop")]),n("br"),n(e.term,{tag:"component",staticClass:"terminal"})],1)},r=[],s=n("025e"),a={props:["fg","bg"],computed:{style:function(){return{color:"#"+this.fg,"background-color":"#"+this.bg}}},template:''},o={props:["to"],methods:{invoke:function(){s["a"].sendToTopic({terminal_topic:this.to})}},template:''},c={data:function(){return{s:this.$root.$data.state}},computed:{term:function(){return{components:{co:a,to:o},template:"
".concat(this.s.terminal,"
")}}}},l=c,u=(n("ebf5"),n("2877")),d=Object(u["a"])(l,i,r,!1,null,"3a6a6067",null);t["default"]=d.exports},2532:function(e,t,n){"use strict";var i=n("23e7"),r=n("5a34"),s=n("1d80"),a=n("ab13");i({target:"String",proto:!0,forced:!a("includes")},{includes:function(e){return!!~String(s(this)).indexOf(r(e),arguments.length>1?arguments[1]:void 0)}})},"253b":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("div",[n("h3",[e._v("Auxiliary Timing Unit:")]),e.timeractive?n("vui-button",{attrs:{params:{time:1}}},[e._v("Arming")]):n("vui-button",{attrs:{params:{time:1}}},[e._v("Not Arming")])],1),n("div",[n("h3",[e._v("Time Left:")]),n("vui-button",{attrs:{params:{tp:-30}}},[e._v("--")]),n("vui-button",{attrs:{params:{tp:-1}}},[e._v("-")]),n("span",{staticClass:"value"},[e._v(e._s(e.minute)+":"+e._s(e.second))]),n("vui-button",{attrs:{params:{tp:1}}},[e._v("+")]),n("vui-button",{attrs:{params:{tp:30}}},[e._v("++")])],1),n("div",[n("h3",[e._v("Scanning:")]),e.scanning?n("vui-button",{attrs:{params:{scanning:1}}},[e._v("Armed")]):n("vui-button",{attrs:{params:{scanning:1}}},[e._v("Not Armed")]),n("span",{staticClass:"value"},[e._v("Movement sensor active when armed!")])],1),n("div",[n("h3",[e._v("Range:")]),n("vui-button",{attrs:{params:{range:-1}}},[e._v("-")]),n("span",{staticClass:"value"},[e._v(e._s(e.range))]),n("vui-button",{attrs:{params:{range:1}}},[e._v("+")])],1)])},r=[],s={data:function(){return this.$root.$data.state}},a=s,o=(n("de06"),n("2877")),c=Object(o["a"])(a,i,r,!1,null,"10d6546a",null);t["default"]=c.exports},"256f":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("vui-group",[n("vui-group-item",{attrs:{label:"UID:"}},[e._v(e._s(e.incident.id))]),n("vui-group-item",{attrs:{label:"Date:"}},[e._v(e._s(e.incident.datetime))]),n("vui-group-item",{attrs:{label:"Charges:"}},e._l(e.incident.charges,(function(t,i){return n("span",{key:i},[e._v(" "+e._s(t)),i+11?arguments[1]:void 0)}))},"25eb":function(e,t,n){var i=n("23e7"),r=n("c20d");i({target:"Number",stat:!0,forced:Number.parseInt!=r},{parseInt:r})},"25f0":function(e,t,n){"use strict";var i=n("6eeb"),r=n("825a"),s=n("d039"),a=n("ad6d"),o="toString",c=RegExp.prototype,l=c[o],u=s((function(){return"/a/b"!=l.call({source:"a",flags:"b"})})),d=l.name!=o;(u||d)&&i(RegExp.prototype,o,(function(){var e=r(this),t=String(e.source),n=e.flags,i=String(void 0===n&&e instanceof RegExp&&!("flags"in c)?a.call(e):n);return"/"+t+"/"+i}),{unsafe:!0})},2626:function(e,t,n){"use strict";var i=n("d066"),r=n("9bf2"),s=n("b622"),a=n("83ab"),o=s("species");e.exports=function(e){var t=i(e),n=r.f;a&&t&&!t[o]&&n(t,o,{configurable:!0,get:function(){return this}})}},2653:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("div",{staticClass:"clear-both"},[n("vui-img",{staticClass:"character-image",attrs:{name:"character"}}),n("p",[e._v(" Welcome, "),n("strong",[e._v(e._s(e.character_name))]),e._v("."),n("br"),e._v(" Round duration: "),n("strong",[e._v(e._s(e.round_duration))]),n("br"),e._v(" Alert level: "),n("strong",{style:{color:e.alertLevelColor}},[e._v(e._s(e.alert_level))]),n("br")])],1),n("div",{staticClass:"clear-both"},[e.shuttleStatusMessage?n("strong",[e._v(e._s(e.shuttleStatusMessage))]):e._e(),n("br"),e._v(" Choose from the following available positions: ")]),e.unique_role_available?n("div",[n("div",{staticClass:"gs-block"},[n("div",{staticClass:"dept"},[e._v("A unique role is available!")]),n("vui-button",{staticClass:"d-block m-1",attrs:{params:{ghostspawner:1},icon:"ghost"}},[e._v("Ghost Spawner Menu")])],1)]):n("div",[n("vui-button",{staticClass:"d-block",attrs:{params:{ghostspawner:1},icon:"ghost"}},[e._v("Ghost Spawner Menu")])],1),e.jobs_available>0?n("div",[e._l(e.fixedJobsList,(function(t,i){return n("div",{key:i,staticClass:"mt-2 dept-block",class:"border-dept-"+i.toLowerCase()},[n("div",{staticClass:"dept mb-1",class:"bg-dept-"+i.toLowerCase()},[e._v(" "+e._s(i)+" ")]),e._l(t,(function(t){return n("div",{key:t.title},[n("vui-button",{staticClass:"d-block mx-1",attrs:{params:{SelectedJob:t.title}}},[n("span",{class:{"fw-bold":t.head}},[e._v(e._s(t.title))]),1!=t.total_positions?n("span",[e._v(" ("+e._s(t.current_positions)),t.total_positions>1?n("span",[e._v(" / "+e._s(t.total_positions))]):e._e(),e._v(")")]):e._e()])],1)}))],2)})),n("span",{staticClass:"fs-small fst-italic"},[e._v("Numbers in brackets show current amount of active players out of all available job slots for that job.")])],2):n("div",{staticClass:"fst-italic"},[e._v(" No jobs available. ")])])},r=[];n("a4d3"),n("e01a"),n("d28b"),n("4de4"),n("a630"),n("e260"),n("fb6a"),n("b0c0"),n("4fad"),n("c1f9"),n("d3b7"),n("25f0"),n("3ca3"),n("ddb0");function s(e,t){return u(e)||l(e,t)||o(e,t)||a()}function a(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function o(e,t){if(e){if("string"===typeof e)return c(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?c(e,t):void 0}}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,i=new Array(t);n0})))},shuttleStatusMessage:function(){switch(this.shuttle_status){case"post-evac":return"The station has been evacuated.";case"evac":return"The station is currently undergoing evacuation procedures.";case"transfer":return"The station is currently undergoing crew transfer procedures."}return null},alertLevelColor:function(){switch(this.alert_level.toLowerCase()){case"green":return"inherit";case"blue":return"blue";case"yellow":return"yellow"}return"red"}}},h=d,f=(n("11f5"),n("2877")),p=Object(f["a"])(h,i,r,!1,null,"36f58934",null);t["default"]=p.exports},"26e9":function(e,t,n){"use strict";var i=n("23e7"),r=n("e8b5"),s=[].reverse,a=[1,2];i({target:"Array",proto:!0,forced:String(a)===String(a.reverse())},{reverse:function(){return r(this)&&(this.length=this.length),s.call(this)}})},2704:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"item"},[n("div",{staticClass:"itemLabel"},[e._v(e._s(e.label))]),n("div",{staticClass:"itemContent"},[e._t("default")],2)])},r=[],s={props:{label:{type:String,default:""}}},a=s,o=(n("b593"),n("2877")),c=Object(o["a"])(a,i,r,!1,null,"68f8b60e",null);t["default"]=c.exports},"277d":function(e,t,n){var i=n("23e7"),r=n("e8b5");i({target:"Array",stat:!0},{isArray:r})},"27cd":function(e,t,n){"use strict";n("38d6")},2877:function(e,t,n){"use strict";function i(e,t,n,i,r,s,a,o){var c,l="function"===typeof e?e.options:e;if(t&&(l.render=t,l.staticRenderFns=n,l._compiled=!0),i&&(l.functional=!0),s&&(l._scopeId="data-v-"+s),a?(c=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},l._ssrRegister=c):r&&(c=o?function(){r.call(this,(l.functional?this.parent:this).$root.$options.shadowRoot)}:r),c)if(l.functional){l._injectStyles=c;var u=l.render;l.render=function(e,t){return c.call(t),u(e,t)}}else{var d=l.beforeCreate;l.beforeCreate=d?[].concat(d,c):[c]}return{exports:e,options:l}}n.d(t,"a",(function(){return i}))},2954:function(e,t,n){"use strict";var i=n("ebb5"),r=n("4840"),s=n("d039"),a=i.aTypedArray,o=i.aTypedArrayConstructor,c=i.exportTypedArrayMethod,l=[].slice,u=s((function(){new Int8Array(1).slice()}));c("slice",(function(e,t){var n=l.call(a(this),e,t),i=r(this,this.constructor),s=0,c=n.length,u=new(o(i))(c);while(c>s)u[s]=n[s++];return u}),u)},"29f3":function(e,t){var n=Object.prototype,i=n.toString;function r(e){return i.call(e)}e.exports=r},"2a1b":function(e,t,n){var i=n("746f");i("match")},"2a62":function(e,t,n){var i=n("825a");e.exports=function(e){var t=e["return"];if(void 0!==t)return i(t.call(e)).value}},"2af1":function(e,t,n){var i=n("23e7"),r=n("f748");i({target:"Math",stat:!0},{sign:r})},"2b10":function(e,t){function n(e,t,n){var i=-1,r=e.length;t<0&&(t=-t>r?0:r+t),n=n>r?r:n,n<0&&(n+=r),r=t>n?0:n-t>>>0,t>>>=0;var s=Array(r);while(++i4)return e;for(n=[],i=0;i1&&"0"==r.charAt(0)&&(s=B.test(r)?16:8,r=r.slice(8==s?1:2)),""===r)a=0;else{if(!(10==s?O:8==s?R:M).test(r))return e;a=parseInt(r,s)}n.push(a)}for(i=0;i=C(256,5-t))return null}else if(a>255)return null;for(o=n.pop(),i=0;i6)return;i=0;while(h()){if(r=null,i>0){if(!("."==h()&&i<4))return;d++}if(!D.test(h()))return;while(D.test(h())){if(s=parseInt(h(),10),null===r)r=s;else{if(0==r)return;r=10*r+s}if(r>255)return;d++}c[l]=256*c[l]+r,i++,2!=i&&4!=i||l++}if(4!=i)return;break}if(":"==h()){if(d++,!h())return}else if(h())return;c[l++]=t}else{if(null!==u)return;d++,l++,u=l}}if(null!==u){a=l-u,l=7;while(0!=l&&a>0)o=c[l],c[l--]=c[u+a-1],c[u+--a]=o}else if(8!=l)return;return c},U=function(e){for(var t=null,n=1,i=null,r=0,s=0;s<8;s++)0!==e[s]?(r>n&&(t=i,n=r),i=null,r=0):(null===i&&(i=s),++r);return r>n&&(t=i,n=r),t},z=function(e){var t,n,i,r;if("number"==typeof e){for(t=[],n=0;n<4;n++)t.unshift(e%256),e=A(e/256);return t.join(".")}if("object"==typeof e){for(t="",i=U(e),n=0;n<8;n++)r&&0===e[n]||(r&&(r=!1),i===n?(t+=n?":":"::",r=!0):(t+=e[n].toString(16),n<7&&(t+=":")));return"["+t+"]"}return e},G={},q=h({},G,{" ":1,'"':1,"<":1,">":1,"`":1}),K=h({},q,{"#":1,"?":1,"{":1,"}":1}),Y=h({},K,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),X=function(e,t){var n=p(e,0);return n>32&&n<127&&!d(t,e)?e:encodeURIComponent(e)},J={ftp:21,file:null,http:80,https:443,ws:80,wss:443},Q=function(e){return d(J,e.scheme)},Z=function(e){return""!=e.username||""!=e.password},ee=function(e){return!e.host||e.cannotBeABaseURL||"file"==e.scheme},te=function(e,t){var n;return 2==e.length&&T.test(e.charAt(0))&&(":"==(n=e.charAt(1))||!t&&"|"==n)},ne=function(e){var t;return e.length>1&&te(e.slice(0,2))&&(2==e.length||"/"===(t=e.charAt(2))||"\\"===t||"?"===t||"#"===t)},ie=function(e){var t=e.path,n=t.length;!n||"file"==e.scheme&&1==n&&te(t[0],!0)||t.pop()},re=function(e){return"."===e||"%2e"===e.toLowerCase()},se=function(e){return e=e.toLowerCase(),".."===e||"%2e."===e||".%2e"===e||"%2e%2e"===e},ae={},oe={},ce={},le={},ue={},de={},he={},fe={},pe={},ge={},me={},ve={},be={},ye={},we={},_e={},xe={},ke={},Ae={},Ce={},Ee={},Se=function(e,t,n,r){var s,a,o,c,l=n||ae,u=0,h="",p=!1,g=!1,m=!1;n||(e.scheme="",e.username="",e.password="",e.host=null,e.port=null,e.path=[],e.query=null,e.fragment=null,e.cannotBeABaseURL=!1,t=t.replace(P,"")),t=t.replace(N,""),s=f(t);while(u<=s.length){switch(a=s[u],l){case ae:if(!a||!T.test(a)){if(n)return S;l=ce;continue}h+=a.toLowerCase(),l=oe;break;case oe:if(a&&(L.test(a)||"+"==a||"-"==a||"."==a))h+=a.toLowerCase();else{if(":"!=a){if(n)return S;h="",l=ce,u=0;continue}if(n&&(Q(e)!=d(J,h)||"file"==h&&(Z(e)||null!==e.port)||"file"==e.scheme&&!e.host))return;if(e.scheme=h,n)return void(Q(e)&&J[e.scheme]==e.port&&(e.port=null));h="","file"==e.scheme?l=ye:Q(e)&&r&&r.scheme==e.scheme?l=le:Q(e)?l=fe:"/"==s[u+1]?(l=ue,u++):(e.cannotBeABaseURL=!0,e.path.push(""),l=Ae)}break;case ce:if(!r||r.cannotBeABaseURL&&"#"!=a)return S;if(r.cannotBeABaseURL&&"#"==a){e.scheme=r.scheme,e.path=r.path.slice(),e.query=r.query,e.fragment="",e.cannotBeABaseURL=!0,l=Ee;break}l="file"==r.scheme?ye:de;continue;case le:if("/"!=a||"/"!=s[u+1]){l=de;continue}l=pe,u++;break;case ue:if("/"==a){l=ge;break}l=ke;continue;case de:if(e.scheme=r.scheme,a==i)e.username=r.username,e.password=r.password,e.host=r.host,e.port=r.port,e.path=r.path.slice(),e.query=r.query;else if("/"==a||"\\"==a&&Q(e))l=he;else if("?"==a)e.username=r.username,e.password=r.password,e.host=r.host,e.port=r.port,e.path=r.path.slice(),e.query="",l=Ce;else{if("#"!=a){e.username=r.username,e.password=r.password,e.host=r.host,e.port=r.port,e.path=r.path.slice(),e.path.pop(),l=ke;continue}e.username=r.username,e.password=r.password,e.host=r.host,e.port=r.port,e.path=r.path.slice(),e.query=r.query,e.fragment="",l=Ee}break;case he:if(!Q(e)||"/"!=a&&"\\"!=a){if("/"!=a){e.username=r.username,e.password=r.password,e.host=r.host,e.port=r.port,l=ke;continue}l=ge}else l=pe;break;case fe:if(l=pe,"/"!=a||"/"!=h.charAt(u+1))continue;u++;break;case pe:if("/"!=a&&"\\"!=a){l=ge;continue}break;case ge:if("@"==a){p&&(h="%40"+h),p=!0,o=f(h);for(var v=0;v65535)return $;e.port=Q(e)&&w===J[e.scheme]?null:w,h=""}if(n)return;l=xe;continue}return $}h+=a;break;case ye:if(e.scheme="file","/"==a||"\\"==a)l=we;else{if(!r||"file"!=r.scheme){l=ke;continue}if(a==i)e.host=r.host,e.path=r.path.slice(),e.query=r.query;else if("?"==a)e.host=r.host,e.path=r.path.slice(),e.query="",l=Ce;else{if("#"!=a){ne(s.slice(u).join(""))||(e.host=r.host,e.path=r.path.slice(),ie(e)),l=ke;continue}e.host=r.host,e.path=r.path.slice(),e.query=r.query,e.fragment="",l=Ee}}break;case we:if("/"==a||"\\"==a){l=_e;break}r&&"file"==r.scheme&&!ne(s.slice(u).join(""))&&(te(r.path[0],!0)?e.path.push(r.path[0]):e.host=r.host),l=ke;continue;case _e:if(a==i||"/"==a||"\\"==a||"?"==a||"#"==a){if(!n&&te(h))l=ke;else if(""==h){if(e.host="",n)return;l=xe}else{if(c=W(e,h),c)return c;if("localhost"==e.host&&(e.host=""),n)return;h="",l=xe}continue}h+=a;break;case xe:if(Q(e)){if(l=ke,"/"!=a&&"\\"!=a)continue}else if(n||"?"!=a)if(n||"#"!=a){if(a!=i&&(l=ke,"/"!=a))continue}else e.fragment="",l=Ee;else e.query="",l=Ce;break;case ke:if(a==i||"/"==a||"\\"==a&&Q(e)||!n&&("?"==a||"#"==a)){if(se(h)?(ie(e),"/"==a||"\\"==a&&Q(e)||e.path.push("")):re(h)?"/"==a||"\\"==a&&Q(e)||e.path.push(""):("file"==e.scheme&&!e.path.length&&te(h)&&(e.host&&(e.host=""),h=h.charAt(0)+":"),e.path.push(h)),h="","file"==e.scheme&&(a==i||"?"==a||"#"==a))while(e.path.length>1&&""===e.path[0])e.path.shift();"?"==a?(e.query="",l=Ce):"#"==a&&(e.fragment="",l=Ee)}else h+=X(a,K);break;case Ae:"?"==a?(e.query="",l=Ce):"#"==a?(e.fragment="",l=Ee):a!=i&&(e.path[0]+=X(a,G));break;case Ce:n||"#"!=a?a!=i&&("'"==a&&Q(e)?e.query+="%27":e.query+="#"==a?"%23":X(a,G)):(e.fragment="",l=Ee);break;case Ee:a!=i&&(e.fragment+=X(a,q));break}u++}},Fe=function(e){var t,n,i=u(this,Fe,"URL"),r=arguments.length>1?arguments[1]:void 0,a=String(e),o=x(i,{type:"URL"});if(void 0!==r)if(r instanceof Fe)t=k(r);else if(n=Se(t={},String(r)),n)throw TypeError(n);if(n=Se(o,a,null,t),n)throw TypeError(n);var c=o.searchParams=new w,l=_(c);l.updateSearchParams(o.query),l.updateURL=function(){o.query=String(c)||null},s||(i.href=Te.call(i),i.origin=Le.call(i),i.protocol=De.call(i),i.username=Be.call(i),i.password=Re.call(i),i.host=Oe.call(i),i.hostname=Me.call(i),i.port=je.call(i),i.pathname=Ie.call(i),i.search=Pe.call(i),i.searchParams=Ne.call(i),i.hash=We.call(i))},$e=Fe.prototype,Te=function(){var e=k(this),t=e.scheme,n=e.username,i=e.password,r=e.host,s=e.port,a=e.path,o=e.query,c=e.fragment,l=t+":";return null!==r?(l+="//",Z(e)&&(l+=n+(i?":"+i:"")+"@"),l+=z(r),null!==s&&(l+=":"+s)):"file"==t&&(l+="//"),l+=e.cannotBeABaseURL?a[0]:a.length?"/"+a.join("/"):"",null!==o&&(l+="?"+o),null!==c&&(l+="#"+c),l},Le=function(){var e=k(this),t=e.scheme,n=e.port;if("blob"==t)try{return new URL(t.path[0]).origin}catch(i){return"null"}return"file"!=t&&Q(e)?t+"://"+z(e.host)+(null!==n?":"+n:""):"null"},De=function(){return k(this).scheme+":"},Be=function(){return k(this).username},Re=function(){return k(this).password},Oe=function(){var e=k(this),t=e.host,n=e.port;return null===t?"":null===n?z(t):z(t)+":"+n},Me=function(){var e=k(this).host;return null===e?"":z(e)},je=function(){var e=k(this).port;return null===e?"":String(e)},Ie=function(){var e=k(this),t=e.path;return e.cannotBeABaseURL?t[0]:t.length?"/"+t.join("/"):""},Pe=function(){var e=k(this).query;return e?"?"+e:""},Ne=function(){return k(this).searchParams},We=function(){var e=k(this).fragment;return e?"#"+e:""},He=function(e,t){return{get:e,set:t,configurable:!0,enumerable:!0}};if(s&&c($e,{href:He(Te,(function(e){var t=k(this),n=String(e),i=Se(t,n);if(i)throw TypeError(i);_(t.searchParams).updateSearchParams(t.query)})),origin:He(Le),protocol:He(De,(function(e){var t=k(this);Se(t,String(e)+":",ae)})),username:He(Be,(function(e){var t=k(this),n=f(String(e));if(!ee(t)){t.username="";for(var i=0;i1?arguments[1]:void 0,t.length)),i=String(e);return u?u.call(t,i,n):t.slice(n,n+i.length)===i}})},"2cf4":function(e,t,n){var i,r,s,a=n("da84"),o=n("d039"),c=n("0366"),l=n("1be4"),u=n("cc12"),d=n("1cdc"),h=n("605d"),f=a.location,p=a.setImmediate,g=a.clearImmediate,m=a.process,v=a.MessageChannel,b=a.Dispatch,y=0,w={},_="onreadystatechange",x=function(e){if(w.hasOwnProperty(e)){var t=w[e];delete w[e],t()}},k=function(e){return function(){x(e)}},A=function(e){x(e.data)},C=function(e){a.postMessage(e+"",f.protocol+"//"+f.host)};p&&g||(p=function(e){var t=[],n=1;while(arguments.length>n)t.push(arguments[n++]);return w[++y]=function(){("function"==typeof e?e:Function(e)).apply(void 0,t)},i(y),y},g=function(e){delete w[e]},h?i=function(e){m.nextTick(k(e))}:b&&b.now?i=function(e){b.now(k(e))}:v&&!d?(r=new v,s=r.port2,r.port1.onmessage=A,i=c(s.postMessage,s,1)):a.addEventListener&&"function"==typeof postMessage&&!a.importScripts&&f&&"file:"!==f.protocol&&!o(C)?(i=C,a.addEventListener("message",A,!1)):i=_ in u("script")?function(e){l.appendChild(u("script"))[_]=function(){l.removeChild(this),x(e)}}:function(e){setTimeout(k(e),0)}),e.exports={set:p,clear:g}},"2d00":function(e,t,n){var i,r,s=n("da84"),a=n("342f"),o=s.process,c=o&&o.versions,l=c&&c.v8;l?(i=l.split("."),r=i[0]+i[1]):a&&(i=a.match(/Edge\/(\d+)/),(!i||i[1]>=74)&&(i=a.match(/Chrome\/(\d+)/),i&&(r=i[1]))),e.exports=r&&+r},"2d26":function(e,t,n){n("5d91"),n("1715");var i=n("428f");e.exports=i},"2d39":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("h3",[e._v("Station Info")]),n("span",{class:e.station_locked_in?"good":"bad"},[e._v(e._s(e.station_locked_in?"Locked In ":"Not Locked In "))]),n("span",{class:e.station_locked_in?"good":"bad"},[e._v("("+e._s(e.locked_in_name)+")")]),n("br"),n("span",[e._v("Calibration: "+e._s(e.calibration)+"%")]),e._v(" "),n("vui-button",{attrs:{params:{recalibrate:1}}},[e._v("Recalibrate")]),n("h3",[e._v("Teleporter Beacons")]),n("table",{staticClass:"table border"},[e._m(0),e._l(e.teleport_beacons,(function(t){return n("tr",{key:t.ref,staticClass:"item border"},[n("td",[e._v(e._s(t.beacon_name))]),n("td",[n("vui-button",{attrs:{params:{beacon:t.ref,name:t.beacon_name}}},[e._v("Lock On")])],1)])}))],2),n("h3",[e._v("Tracking Implants")]),n("table",{staticClass:"table border"},[e._m(1),e._l(e.teleport_implants,(function(t){return n("tr",{key:t.ref,staticClass:"item border"},[n("td",[e._v(e._s(t.implant_name))]),n("td",[n("vui-button",{attrs:{params:{implant:t.ref,name:t.implant_name}}},[e._v("Lock On")])],1)])}))],2)],1)},r=[function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("tr",{staticClass:"header border"},[n("th",[e._v("Beacon Name")]),n("th",[e._v("Action")])])},function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("tr",{staticClass:"header border"},[n("th",[e._v("Implant Name")]),n("th",[e._v("Action")])])}],s={data:function(){return this.$root.$data.state}},a=s,o=(n("95d1"),n("2877")),c=Object(o["a"])(a,i,r,!1,null,"561826ba",null);t["default"]=c.exports},"2fa9":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.active?n("div",[e.$root.$data.assets["front"]?n("div",{staticClass:"photos"},[n("vui-img",{attrs:{name:"front"}}),n("br"),n("vui-img",{attrs:{name:"side"}})],1):e._e(),n("vui-group",[n("vui-group-item",{attrs:{label:"ID:"}},[e._v(e._s(e.active.id))]),n("vui-group-item",{attrs:{label:"Name:"}},[n("view-records-field",{attrs:{editable:(1&e.editable)>0,path:"active.name"}})],1),n("vui-group-item",{attrs:{label:"Age:"}},[n("view-records-field",{attrs:{editable:(1&e.editable)>0,path:"active.age"}})],1),n("vui-group-item",{attrs:{label:"Sex:"}},[n("view-records-field",{attrs:{editable:(1&e.editable)>0,path:"active.sex"}})],1),n("vui-group-item",{attrs:{label:"Rank:"}},[n("view-records-field",{attrs:{editable:(1&e.editable)>0,path:"active.rank"}})],1),n("vui-group-item",{attrs:{label:"Physical Status:"}},[n("view-records-field",{attrs:{editable:(1&e.editable)>0,path:"active.physical_status"}},[n("select",{directives:[{name:"model",rawName:"v-model",value:e.$root.$data.state.editingvalue,expression:"$root.$data.state.editingvalue"}],on:{change:function(t){var n=Array.prototype.filter.call(t.target.options,(function(e){return e.selected})).map((function(e){var t="_value"in e?e._value:e.value;return t}));e.$set(e.$root.$data.state,"editingvalue",t.target.multiple?n:n[0])}}},e._l(e.choices.physical_status,(function(t){return n("option",{key:t,domProps:{value:t}},[e._v(e._s(t))])})),0)])],1),n("vui-group-item",{attrs:{label:"Mental Status:"}},[n("view-records-field",{attrs:{editable:(1&e.editable)>0,path:"active.mental_status"}},[n("select",{directives:[{name:"model",rawName:"v-model",value:e.$root.$data.state.editingvalue,expression:"$root.$data.state.editingvalue"}],on:{change:function(t){var n=Array.prototype.filter.call(t.target.options,(function(e){return e.selected})).map((function(e){var t="_value"in e?e._value:e.value;return t}));e.$set(e.$root.$data.state,"editingvalue",t.target.multiple?n:n[0])}}},e._l(e.choices.mental_status,(function(t){return n("option",{key:t,domProps:{value:t}},[e._v(e._s(t))])})),0)])],1),n("vui-group-item",{attrs:{label:"Fingerprint:"}},[n("view-records-field",{attrs:{editable:(1&e.editable)>0,path:"active.fingerprint"}})],1),!e.hideAdvanced&&1&e.avaivabletypes?[n("vui-group-item",{attrs:{label:"Species:"}},[n("view-records-field",{attrs:{editable:(1&e.editable)>0,path:"active.species"}})],1),n("vui-group-item",{attrs:{label:"Citizenship:"}},[n("view-records-field",{attrs:{editable:(1&e.editable)>0,path:"active.citizenship"}})],1),n("vui-group-item",{attrs:{label:"Religion:"}},[n("view-records-field",{attrs:{editable:(1&e.editable)>0,path:"active.religion"}})],1),n("vui-group-item",{attrs:{label:"Employer:"}},[n("view-records-field",{attrs:{editable:(1&e.editable)>0,path:"active.employer"}})],1),n("vui-group-item",{attrs:{label:"Employment/skills summary:"}},[n("view-records-field",{attrs:{editable:(1&e.editable)>0,path:"active.notes"}},[n("textarea",{directives:[{name:"model",rawName:"v-model",value:e.$root.$data.state.editingvalue,expression:"$root.$data.state.editingvalue"}],domProps:{value:e.$root.$data.state.editingvalue},on:{input:function(t){t.target.composing||e.$set(e.$root.$data.state,"editingvalue",t.target.value)}}})])],1),n("vui-group-item",{attrs:{label:"CCIA Notes:"}},[e._v(e._s(e.active.ccia_record))]),n("vui-group-item",{attrs:{label:"CCIA Actions:"}},e._l(e.active.ccia_actions,(function(t){return n("div",{key:t[0]},[n("h5",[e._v(e._s(t[0])+" "),n("i",[e._v("("+e._s(t[1])+")")])]),n("div",{domProps:{innerHTML:e._s(t[3].replace("\r\n","
"))}}),n("vui-button",{attrs:{params:{_openurl:t[4]}}},[e._v("Open")])],1)})),0)]:e._e(),e._t("default")],2),n("div",{staticClass:"bottombuttons"},[n("vui-button",{attrs:{params:{setactive:"null"},"push-state":""},on:{click:function(t){e.activeview="list"}}},[e._v("Unload Record")]),e.canprint?n("vui-button",{attrs:{params:{print:"active"}}},[e._v("Print")]):e._e(),!e.hideAdvanced&&1&e.editable?n("vui-button",{staticClass:"danger",attrs:{params:{deleterecord:1},icon:"trash-alt"}},[e._v("Delete record")]):e._e()],1)],1):e._e()},r=[],s=(n("ac1f"),n("5319"),{data:function(){return this.$root.$data.state},props:{hideAdvanced:{type:Boolean,default:!1}},filters:{replace:function(e,t,n){return e.replace(t,n)}}}),a=s,o=(n("f046"),n("2877")),c=Object(o["a"])(a,i,r,!1,null,"c51ad1c4",null);t["default"]=c.exports},3280:function(e,t,n){"use strict";var i=n("ebb5"),r=n("e58c"),s=i.aTypedArray,a=i.exportTypedArrayMethod;a("lastIndexOf",(function(e){return r.apply(s(this),arguments)}))},3315:function(e,t,n){"use strict";n("b959")},3410:function(e,t,n){var i=n("23e7"),r=n("d039"),s=n("7b0b"),a=n("e163"),o=n("e177"),c=r((function(){a(1)}));i({target:"Object",stat:!0,forced:c,sham:!o},{getPrototypeOf:function(e){return a(s(e))}})},"342f":function(e,t,n){var i=n("d066");e.exports=i("navigator","userAgent")||""},"34ac":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[e.editing?[e._t("default",[n("input",{directives:[{name:"model",rawName:"v-model",value:e.gdata.state.editingvalue,expression:"gdata.state.editingvalue"}],domProps:{value:e.gdata.state.editingvalue},on:{input:function(t){t.target.composing||e.$set(e.gdata.state,"editingvalue",t.target.value)}}})]),n("vui-button",{attrs:{icon:"check"},on:{click:e.save}})]:[n("span",{staticStyle:{"white-space":"pre-wrap"}},[e._v(e._s(e.rvalue))]),e._v(" "),e.reditable||e.editButton?n("vui-button",{staticStyle:{"white-space":"pre-wrap"},attrs:{icon:"pen"},on:{click:e.beginEditing}},[e._v(e._s(e.editbtnname))]):e._e()]],2)},r=[],s=(n("ac1f"),n("5319"),n("1276"),n("025e")),a={data:function(){return{editing:!1,gdata:this.$root.$data,startEditHandler:null}},props:{value:{type:String,default:""},path:{type:String,default:null},editable:{type:Boolean,default:!1},editButton:{type:String,default:null}},computed:{reditable:function(){return!!this.path&&this.editable},rvalue:function(){return this.path?s["a"].dotNotationRead(this.gdata.state,this.path):this.value},editbtnname:function(){return this.editButton?this.editButton:""}},methods:{beginEditing:function(){var e=this;(this.reditable||this.editButton)&&(this.$root.$emit("record-field-start-editing"),this.gdata.state.editingvalue=this.rvalue,this.startEditHandler=function(){e.endEditing()},this.$root.$on("record-field-start-editing",this.startEditHandler),this.editing=!0)},endEditing:function(){(this.reditable||this.editButton)&&(this.editing=!1,this.$root.$off("record-field-start-editing",this.startEditHandler))},save:function(){(this.reditable||this.editButton)&&(this.endEditing(),this.editButton?this.$emit("save",this.gdata.state.editingvalue):s["a"].sendToTopic({editrecord:{value:this.gdata.state.editingvalue,key:this.path.split(".")}}))}},filters:{replace:function(e,t,n){return e.replace(t,n)}}},o=a,c=(n("3c5a"),n("2877")),l=Object(c["a"])(o,i,r,!1,null,"a9c97a54",null);t["default"]=l.exports},"35a1":function(e,t,n){var i=n("f5df"),r=n("3f8c"),s=n("b622"),a=s("iterator");e.exports=function(e){if(void 0!=e)return e[a]||e["@@iterator"]||r[i(e)]}},"35b3":function(e,t,n){var i=n("23e7");i({target:"Number",stat:!0},{EPSILON:Math.pow(2,-52)})},3722:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("vui-group",[n("vui-group-item",{attrs:{label:"Status:"}},[n("vui-button",{class:{selected:e.on},attrs:{params:{toggleStatus:1}}},[e._v("On")]),n("vui-button",{class:{selected:!e.on},attrs:{params:{toggleStatus:1}}},[e._v("Off")])],1),n("vui-group-item",{attrs:{label:"Power Level:"}},[n("vui-button",{class:{selected:20==e.powerSetting},attrs:{params:{setPower:20}}},[e._v("1")]),n("vui-button",{class:{selected:40==e.powerSetting},attrs:{params:{setPower:40}}},[e._v("2")]),n("vui-button",{class:{selected:60==e.powerSetting},attrs:{params:{setPower:60}}},[e._v("3")]),n("vui-button",{class:{selected:80==e.powerSetting},attrs:{params:{setPower:80}}},[e._v("4")]),n("vui-button",{class:{selected:100==e.powerSetting},attrs:{params:{setPower:100}}},[e._v("5")])],1),n("vui-group-item",{attrs:{label:"Gas Pressure:"}},[e._v(" "+e._s(e.gasPressure)+" kPa ")]),n("h3",[e._v("Gas Temperature")]),n("vui-group-item",{attrs:{label:"Current:"}},[n("vui-progress",{class:e.gasTemperatureClass,attrs:{value:e.gasTemperature,max:e.maxGasTemperature,min:e.minGasTemperature}},[e._v(" "+e._s(e.gasTemperature)+" K ")])],1),n("vui-group-item",{attrs:{label:"Target:"}},[n("vui-progress",{attrs:{value:e.targetGasTemperature,max:e.maxGasTemperature,min:e.minGasTemperature}},[e._v(" "+e._s(e.targetGasTemperature)+" K ")]),n("div",{staticStyle:{clear:"both","padding-top":"4px"}},[n("vui-button",{attrs:{disabled:e.targetGasTemperature<=e.minGasTemperature,params:{temp:-100}}},[e._v("-")]),n("vui-button",{attrs:{disabled:e.targetGasTemperature<=e.minGasTemperature,params:{temp:-10}}},[e._v("-")]),n("vui-button",{attrs:{disabled:e.targetGasTemperature<=e.minGasTemperature,params:{temp:-1}}},[e._v("-")]),n("vui-button",{attrs:{disabled:e.targetGasTemperature>=e.maxGasTemperature,params:{temp:1}}},[e._v("+")]),n("vui-button",{attrs:{disabled:e.targetGasTemperature>=e.maxGasTemperature,params:{temp:10}}},[e._v("+")]),n("vui-button",{attrs:{disabled:e.targetGasTemperature>=e.maxGasTemperature,params:{temp:100}}},[e._v("+")])],1)],1)],1)},r=[],s={data:function(){return this.$root.$data.state},computed:{gasTemperatureClass:function(){return null!=this.temperatureBadTop&&this.gasTemperature>this.temperatureBadTop||null!=this.temperatureBadBottom&&this.gasTemperaturethis.temperatureAvgBottom?"average":"good"}}},a=s,o=n("2877"),c=Object(o["a"])(a,i,r,!1,null,null,null);t["default"]=c.exports},3729:function(e,t,n){var i=n("9e69"),r=n("00fd"),s=n("29f3"),a="[object Null]",o="[object Undefined]",c=i?i.toStringTag:void 0;function l(e){return null==e?void 0===e?o:a:c&&c in Object(e)?r(e):s(e)}e.exports=l},"37e8":function(e,t,n){var i=n("83ab"),r=n("9bf2"),s=n("825a"),a=n("df75");e.exports=i?Object.defineProperties:function(e,t){s(e);var n,i=a(t),o=i.length,c=0;while(o>c)r.f(e,n=i[c++],t[n]);return e}},3831:function(e,t,n){"use strict";n("9e80")},3851:function(e,t,n){var i={"./header/default.vue":"f3ce","./header/handles.vue":"9aa7","./header/minimal.vue":"d657","./header/modular-computer.vue":"4709","./view/admin/damage-menu.vue":"a9fa","./view/admin/permissions-panel.vue":"86eb","./view/admin/player-panel.vue":"3930","./view/console/atmocontrol/injector.vue":"614c","./view/console/atmocontrol/main.vue":"86ad","./view/console/atmocontrol/supermatter.vue":"df0b","./view/console/atmocontrol/tank.vue":"508b","./view/devices/aicard.vue":"4874","./view/devices/assembly/infrared.vue":"f095","./view/devices/assembly/proximity.vue":"253b","./view/devices/assembly/signaler.vue":"4626","./view/devices/assembly/timer.vue":"b81a","./view/devices/circuit/printer.vue":"ffb3","./view/devices/gps/gps.vue":"0566","./view/devices/jammer.vue":"050e","./view/devices/oredetector.vue":"0687","./view/devices/quikpay/confirmation.vue":"47db","./view/devices/quikpay/main.vue":"4678","./view/late-choices.vue":"2653","./view/machinery/atmospherics/canister.vue":"2575","./view/machinery/atmospherics/freezer.vue":"3722","./view/machinery/atmospherics/portpump.vue":"77f3","./view/machinery/chemdisp.vue":"0519","./view/machinery/cooking/microwave.vue":"a589","./view/machinery/power/apc.vue":"fafb","./view/machinery/power/pacman.vue":"3910","./view/machinery/power/smes.vue":"58e3","./view/machinery/power/supermattercrystal.vue":"b08f","./view/machinery/smartfridge.vue":"19fa","./view/machinery/teleporter.vue":"2d39","./view/machinery/vending.vue":"7dc7","./view/manifest.vue":"f264","./view/mcomputer/atmosphere.vue":"4149","./view/mcomputer/chat/channel-btn.vue":"1dbb","./view/mcomputer/chat/chat.vue":"3d8a","./view/mcomputer/chat/explore.vue":"421c","./view/mcomputer/chat/index.vue":"9b7e","./view/mcomputer/chemcodex.vue":"ec72","./view/mcomputer/command/accountdb.vue":"da1f","./view/mcomputer/command/teleporter.vue":"76a2","./view/mcomputer/janitor.vue":"e786","./view/mcomputer/medical/sensors.vue":"f309","./view/mcomputer/ntsl/edit.vue":"a3f9","./view/mcomputer/ntsl/list.vue":"6292","./view/mcomputer/ntsl/main.vue":"a7c6","./view/mcomputer/ntsl/program.vue":"2480","./view/mcomputer/pai/directives.vue":"d3c6","./view/mcomputer/pai/doorjack.vue":"3b8a","./view/mcomputer/pai/radio.vue":"207c","./view/mcomputer/security/guntracker.vue":"cb10","./view/mcomputer/security/implanttracker.vue":"ac02","./view/mcomputer/security/penalcontroller.vue":"2c9a","./view/mcomputer/signaler.vue":"db4fb","./view/mcomputer/system/config.vue":"07c3","./view/mcomputer/system/downloader.vue":"019f","./view/mcomputer/system/main.vue":"13c9","./view/mcomputer/system/manager.vue":"d3c8","./view/medical/bodyscanner.vue":"1062","./view/medical/sleeper.vue":"b087","./view/misc/appearancechanger.vue":"4939","./view/misc/boardgame.vue":"ef41","./view/misc/doors.vue":"3a07","./view/misc/ghostspawner.vue":"1503","./view/misc/maglock-config.vue":"0ea6","./view/misc/maglock.vue":"20a6","./view/misc/pai/recruit.vue":"9324","./view/misc/voting.vue":"e31d","./view/paperwork/fax.vue":"9556","./view/paperwork/photocopier.vue":"6a01","./view/records/field.vue":"34ac","./view/records/general.vue":"2fa9","./view/records/incident.vue":"256f","./view/records/list-locked.vue":"c0f7","./view/records/list-virus.vue":"8385","./view/records/list.vue":"ac4c","./view/records/login.vue":"a8bb","./view/records/main.vue":"cf32","./view/records/medical.vue":"203b","./view/records/security.vue":"b6db","./view/records/virus.vue":"73f5","./view/turrets/control-part.vue":"10d4","./view/turrets/control.vue":"fb48","./view/vehicles/droppod.vue":"b14c","./view/vehicles/pussywagon.vue":"4d76","./view/vehicles/trainengine.vue":"08c0","./view/wanalyzer/analyzer.vue":"407e","./vui/button.vue":"5aa2","./vui/group-item.vue":"2704","./vui/group-row.vue":"74e7","./vui/group.vue":"48f3","./vui/img.vue":"810a","./vui/input/numeric.vue":"210c","./vui/input/search.vue":"419b","./vui/input/slider.vue":"0eec","./vui/item.vue":"faf6","./vui/progress.vue":"1253","./vui/tooltip.vue":"0ec3"};function r(e){var t=s(e);return n(t)}function s(e){if(!n.o(i,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return i[e]}r.keys=function(){return Object.keys(i)},r.resolve=s,e.exports=r,r.id="3851"},"38cf":function(e,t,n){var i=n("23e7"),r=n("1148");i({target:"String",proto:!0},{repeat:r})},"38d6":function(e,t,n){},3910:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("h3",[e._v("Status")]),n("vui-group",[n("vui-group-item",{attrs:{label:"Generator Status:"}},[e.active?n("span",{staticClass:"good"},[e._v("Online")]):n("span",{staticClass:"average"},[e._v("Offline")])]),n("vui-group-item",{attrs:{label:"Generator Control:"}},[e.active?n("vui-button",{attrs:{params:{action:"disable"},icon:"power-off"}},[e._v("STOP")]):n("vui-button",{attrs:{params:{action:"enable"},disabled:!!e.is_broken,icon:"power-off"}},[e._v("START")])],1)],1),n("h3",[e._v("Fuel")]),n("vui-group",[n("vui-group-item",{attrs:{label:"Fuel Type:"}},[e._v(e._s(e.fuel.fuel_type))]),n("vui-group-item",{attrs:{label:"Fuel Level:"}},[n("vui-progress",{attrs:{value:e.fuel.fuel_stored,max:e.fuel.fuel_capacity}},[e._v(e._s(Math.round(e.fuel.fuel_stored/e.fuel.fuel_capacity*100))+"%")])],1),n("vui-group-item",{class:{bad:0==e.fuel.fuel_stored,good:e.fuel.fuel_stored>0}},[e._v(e._s(e.fuel.fuel_stored)+" cm³ / "+e._s(e.fuel.fuel_capacity)+" cm³")]),e.fuel.fuel_usage>0&&e.active?n("vui-group-item",{attrs:{label:"Fuel Usage:"}},[e._v(e._s(e.fuel.fuel_usage)+" cm³/s - ("+e._s(Math.round(e.fuel.fuel_stored/e.fuel.fuel_usage))+" s remaining)")]):e._e(),n("vui-group-item",{attrs:{label:"Control:"}},[n("vui-button",{attrs:{params:{action:"eject"},disabled:!(!e.is_broken&&!e.is_ai),icon:"eject"}},[e._v("EJECT FUEL")])],1)],1),n("h3",[e._v("Output")]),n("vui-group",[n("vui-group-item",{attrs:{label:"Power Setting:"}},[n("span",{class:{bad:e.output_set>e.output_safe,good:e.output_set<=e.output_safe}},[e._v(e._s(e.output_set)+" / "+e._s(e.output_max)+" ("+e._s(e.output_watts)+" W)")])]),n("vui-group-item",{attrs:{label:"Control:"}},[n("vui-button",{attrs:{params:{action:"higher_power"},disabled:e.output_set==e.output_max}},[e._v("+")]),n("vui-button",{attrs:{params:{action:"lower_power"},disabled:e.output_set==e.output_min}},[e._v("-")])],1)],1),n("h3",[e._v("Temperature")]),n("vui-group",[n("vui-group-item",{attrs:{label:"Temperature:"}},[n("vui-progress",{class:e.getTemperatureClass(e.temperature_current),attrs:{value:e.temperature_current,min:e.temperature_min,max:1.5*e.temperature_max}},[e._v(e._s(Math.max(e.temperature_min,e.temperature_current))+"C")])],1),n("vui-group-item",{attrs:{label:"Generator Status:"}},[e.temperature_overheat>50?n("span",{staticClass:"bad"},[e._v("DANGER: CRITICAL OVERHEAT! Deactivate generator immediately!")]):e.temperature_overheat>20?n("span",{staticClass:"average"},[e._v("WARNING: Overheating!")]):e.temperature_overheat>1?n("span",{staticClass:"average"},[e._v("Temperature High")]):n("span",{staticClass:"good"},[e._v("Optimal")])])],1)],1)},r=[],s={data:function(){return this.$root.$data.state},methods:{getTemperatureClass:function(e){return e<.8*this.$root.$data.state.temperature_max?"good":e0},staticStyle:{width:"12em"},attrs:{value:e.gs.wtime,min:e.s.plua_main,max:e.s.plu_main||10}},[e._v(" "+e._s(e.mainMsg)+" ")]),n("vui-button",{attrs:{disabled:0!=e.s.plu_main,params:{command:"main_power"}}},[e._v("Interrupt")])],1),n("vui-group-item",{attrs:{label:"Backup power:"}},[n("vui-progress",{class:{good:0==e.s.plu_back||0==e.s.plu_main,bad:-1==e.s.plu_back&&0!=e.s.plu_main,average:e.s.plu_back>0},staticStyle:{width:"12em"},attrs:{value:e.gs.wtime,min:e.s.plua_back,max:e.s.plu_back||10}},[e._v(" "+e._s(e.backupMsg)+" ")]),n("vui-button",{attrs:{disabled:0!=e.s.plu_back,params:{command:"backup_power"}}},[e._v("Interrupt")])],1),n("vui-group-item",{attrs:{label:"Electrified status:"}},[n("vui-progress",{class:{good:0==e.s.ele,bad:-1==e.s.ele,average:e.s.ele>0},staticStyle:{width:"12em"},attrs:{value:e.gs.wtime,min:e.s.elea,max:e.s.ele||10}},[e._v(" "+e._s(e.eleMsg)+" ")]),n("vui-button",{attrs:{disabled:0==e.s.ele,params:{command:"electrify_permanently",activate:0}}},[e._v("R")]),e.s.isAdmin||!e.s.isai?[n("vui-button",{attrs:{disabled:e.s.ele>0,params:{command:"electrify_temporary",activate:1}}},[e._v("T")]),n("vui-button",{attrs:{disabled:-1==e.s.ele,params:{command:"electrify_permanently",activate:1}}},[e._v("P")])]:e._e()],2),n("vui-group-item"),n("vui-group-item",{key:e.k,attrs:{set:e.k="bolts",label:"Bolts:"}},[n("vui-button",{class:{on:e.s[e.k]},staticStyle:{"min-width":"6em"},attrs:{disabled:!(e.s.aiCanBolt||!e.s.isai||e.s.isAdmin),params:{command:e.k,activate:0}}},[e._v("Raised")]),n("vui-button",{class:{on:!e.s[e.k]},staticStyle:{"min-width":"6em"},attrs:{disabled:!(e.s.aiCanBolt||!e.s.isai||e.s.isAdmin),params:{command:e.k,activate:1}}},[e._v("Dropped")]),e.s.boltsOverride&&e.s[e.k]?n("vui-button",{staticClass:"danger",staticStyle:{"min-width":"6em"},attrs:{params:{command:"bolts_override",activate:1}}},[e._v("Drop Now")]):e._e(),e.s.boltsOverride&&!e.s[e.k]?n("vui-button",{staticClass:"danger",staticStyle:{"min-width":"6em"},attrs:{params:{command:"bolts_override",activate:0}}},[e._v("Raise Now")]):e._e()],1),e._l(e.commands,(function(t,i){return n("vui-group-item",{key:i,attrs:{label:t.name+":"}},[n("vui-button",{class:{on:e.s[i]},staticStyle:{"min-width":"6em"},attrs:{params:{command:i,activate:t.i?1:0}}},[e._v(e._s(t.et||"Enabled"))]),n("vui-button",{class:{on:!e.s[i]&&!t.danger,danger:!e.s[i]&&t.danger},staticStyle:{"min-width":"6em"},attrs:{disabled:!(!t.a||!e.s.isai||e.s.isAdmin),params:{command:i,activate:t.i?0:1}}},[e._v(e._s(t.dt||"Disabled"))])],1)}))],2)],1)},r=[],s={data:function(){var e=this.$root.$data,t=e.state;return{gs:e,s:t,commands:{idscan:{name:"IdScan",i:!0},lights:{name:"Bolt Lights",i:!0},safeties:{name:"Safeties",et:"Nominal",dt:"Overridden",danger:!0,a:!0},timing:{name:"Timing",et:"Nominal",dt:"Overridden",danger:!0},open:{name:"Door State",et:"Opened",dt:"Closed",i:1}}}},computed:{mainMsg:function(){return this.getPowerStatusMessage(this.s.plu_main,this.gs.wtime)},backupMsg:function(){return this.getPowerStatusMessage(this.s.plu_back,this.gs.wtime)},eleMsg:function(){if(0==this.s.ele)return"Safe";if(-1==this.s.ele)return"Permanently";var e=Math.max(Math.round((this.s.ele-this.gs.wtime)/10),0);return"".concat(e,"s left")}},methods:{getPowerStatusMessage:function(e,t){if(-1==e)return"Offline";if(0==e)return"Online";var n=Math.max(Math.round((e-t)/10),0);return"Interrupted, ".concat(n,"s left")}}},a=s,o=n("2877"),c=Object(o["a"])(a,i,r,!1,null,null,null);t["default"]=c.exports},"3a7b":function(e,t,n){"use strict";var i=n("ebb5"),r=n("b727").findIndex,s=i.aTypedArray,a=i.exportTypedArrayMethod;a("findIndex",(function(e){return r(s(this),e,arguments.length>1?arguments[1]:void 0)}))},"3aaf":function(e,t,n){},"3b8a":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("vui-group",[n("vui-group-item",{attrs:{label:"Cable:"}},[e.connected?n("span",[e._v("Connected")]):e.extended?n("span",[e._v("Extended")]):n("vui-button",{attrs:{params:{extend:1}}},[e._v("Retracted")])],1),e.connected?n("vui-group-item",{attrs:{label:"Hack:"}},[e.ishacking?[n("vui-progress",{attrs:{max:1e3,value:e.progress}},[e._v(e._s(e.progress/10)+"%")]),n("vui-button",{attrs:{params:{cancel:1}}},[e._v("Cancel")])]:n("vui-button",{attrs:{params:{hack:1}}},[e._v("Start")])],2):e.aborted?n("vui-group-item",[n("div",{staticClass:"bad"},[e._v("Hack aborted!")])]):e._e()],1)],1)},r=[],s={data:function(){return this.$root.$data.state}},a=s,o=n("2877"),c=Object(o["a"])(a,i,r,!1,null,"2c69059a",null);t["default"]=c.exports},"3bbe":function(e,t,n){var i=n("861d");e.exports=function(e){if(!i(e)&&null!==e)throw TypeError("Can't set "+String(e)+" as a prototype");return e}},"3c5a":function(e,t,n){"use strict";n("bb3d")},"3c5d":function(e,t,n){"use strict";var i=n("ebb5"),r=n("50c4"),s=n("182d"),a=n("7b0b"),o=n("d039"),c=i.aTypedArray,l=i.exportTypedArrayMethod,u=o((function(){new Int8Array(1).set({})}));l("set",(function(e){c(this);var t=s(arguments.length>1?arguments[1]:void 0,1),n=this.length,i=a(e),o=r(i.length),l=0;if(o+t>n)throw RangeError("Wrong length");while(l=n.length?{value:void 0,done:!0}:(e=i(n,r),t.index+=e.length,{value:e,done:!1})}))},"3d8a":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("h3",[e._v(e._s(e.channel.title))]),n("div",[e.channel.direct?e._e():[n("vui-button",{attrs:{params:{leave:e.reference}},on:{click:function(t){return e.$emit("on-leave")}}},[e._v("Leave")])],e.channel.can_manage?[null!=e.password?[n("input",{directives:[{name:"model",rawName:"v-model",value:e.password,expression:"password"}],attrs:{type:"text"},domProps:{value:e.password},on:{keydown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.set_password(t)},input:function(t){t.target.composing||(e.password=t.target.value)}}}),n("vui-button",{on:{click:e.set_password}},[e._v("Set password")])]:e.channel.direct?e._e():n("vui-button",{on:{click:function(t){e.password=""}}},[e._v("Set password")]),null!=e.title?[n("input",{directives:[{name:"model",rawName:"v-model",value:e.title,expression:"title"}],attrs:{type:"text"},domProps:{value:e.title},on:{keydown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.set_title(t)},input:function(t){t.target.composing||(e.title=t.target.value)}}}),n("vui-button",{on:{click:e.set_title}},[e._v("Change title")])]:e.channel.direct?e._e():n("vui-button",{on:{click:function(t){e.title=e.channel.title}}},[e._v("Change title")]),n("vui-button",{attrs:{params:{delete:e.reference}},on:{click:function(t){return e.$emit("on-leave")}}},[e._v("Delete channel")])]:e._e()],2),n("div",e._l(e.channel.users,(function(t,i){return n("div",{key:i},[e._v(" "+e._s(t)+" "),e.channel.can_manage&&!e.channel.direct?n("vui-button",{attrs:{params:{kick:{target:e.reference,user:i}}}},[e._v("Kick")]):e._e()],1)})),0),n("div",{ref:"chat",staticClass:"message-chat"},e._l(e.messages,(function(t,i){return n("div",{key:i},[e._v(e._s(t))])})),0),n("div",{staticClass:"message-container"},[n("input",{directives:[{name:"model",rawName:"v-model",value:e.send_buffer,expression:"send_buffer"}],staticClass:"message-input",attrs:{type:"text"},domProps:{value:e.send_buffer},on:{keydown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.send_msg(t)},input:function(t){t.target.composing||(e.send_buffer=t.target.value)}}}),n("vui-button",{staticClass:"message-send",on:{click:e.send_msg}},[e._v("Send")])],1)])},r=[],s=n("025e"),a={data:function(){return{s:this.$root.$data.state,send_buffer:"",password:null,title:null,wasAtBottom:!0}},computed:{channel:function(){return this.s.channels[this.reference]},messages:function(){return this.channel.msg}},props:{reference:{type:String,default:""}},methods:{send_msg:function(){Object(s["b"])({send:{message:this.send_buffer,target:this.reference}}),this.send_buffer=""},set_password:function(){Object(s["b"])({set_password:{target:this.reference,password:this.password}}),this.password=null},set_title:function(){Object(s["b"])({change_title:{target:this.reference,title:this.title}}),this.title=null},scrollBottom:function(){var e=this.$refs.chat;e.scrollTop=e.scrollHeight}},mounted:function(){this.scrollBottom()},beforeUpdate:function(){var e=this.$refs.chat;this.wasAtBottom=e.scrollHeight-e.scrollTop===e.clientHeight},updated:function(){this.wasAtBottom&&this.scrollBottom()}},o=a,c=(n("715b"),n("2877")),l=Object(c["a"])(o,i,r,!1,null,"32f14c20",null);t["default"]=l.exports},"3ea3":function(e,t,n){var i=n("23e7"),r=n("f748"),s=Math.abs,a=Math.pow;i({target:"Math",stat:!0},{cbrt:function(e){return r(e=+e)*a(s(e),1/3)}})},"3f3a":function(e,t,n){var i=n("23e7"),r=n("83ab"),s=n("825a"),a=n("c04e"),o=n("9bf2"),c=n("d039"),l=c((function(){Reflect.defineProperty(o.f({},1,{value:1}),1,{value:2})}));i({target:"Reflect",stat:!0,forced:l,sham:!r},{defineProperty:function(e,t,n){s(e);var i=a(t,!0);s(n);try{return o.f(e,i,n),!0}catch(r){return!1}}})},"3f8c":function(e,t){e.exports={}},"3fcc":function(e,t,n){"use strict";var i=n("ebb5"),r=n("b727").map,s=n("4840"),a=i.aTypedArray,o=i.aTypedArrayConstructor,c=i.exportTypedArrayMethod;c("map",(function(e){return r(a(this),e,arguments.length>1?arguments[1]:void 0,(function(e,t){return new(o(s(e,e.constructor)))(t)}))}))},4057:function(e,t,n){var i=n("23e7"),r=Math.hypot,s=Math.abs,a=Math.sqrt,o=!!r&&r(1/0,NaN)!==1/0;i({target:"Math",stat:!0,forced:o},{hypot:function(e,t){var n,i,r=0,o=0,c=arguments.length,l=0;while(o0?(i=n/l,r+=i*i):r+=n;return l===1/0?1/0:l*a(r)}})},4069:function(e,t,n){var i=n("44d2");i("flat")},"407e":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[e.has_inserted?n("div",[n("b",[e._v("Analyzing "+e._s(e.name)+" ")]),n("br"),e.$root.$data.assets["icon"]?n("div",[n("vui-img",{attrs:{name:"icon"}})],1):e._e(),1==e.item?n("div",[n("table",{staticClass:"other"},[n("tr",[n("td",[e._v(" Damage type: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.damage_type)+" ")])]),n("tr",[n("td",[e._v(" Item's estimated force-rating: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.force)+" points")])]),n("tr",[n("td",[e._v(" Item's estimated throw force-rating: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.throw_force)+" points ")])]),1==e.energy?[n("tr",[n("td",[e._v(" Item's estimated force-rating when activated: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.active_force)+" points ")])]),n("tr",[n("td",[e._v(" Item's estimated throw force-rating when activated: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.active_throw_force)+" points")])]),n("tr",[n("td",[e._v(" Base block chance is: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.base_block_chance)+"% ")])]),n("tr",[n("td",[e._v(" Base reflect chance is: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.base_reflectchance)+"% ")])]),n("tr",[n("td",[e._v(" Item's estimated shield rating: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.shield_power)+" points")])]),n("tr",[n("td",[e._v(" Can block bullets: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.can_block)+" ")])])]:e._e(),n("tr",[n("td",[e._v(" Is sharp:")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.sharp)+" ")])]),n("tr",[n("td",[e._v(" Chance to dismember: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.edge)+" ")])]),n("tr",[n("td",[e._v(" Item's estimated armor penetration rating: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.penetration)+" points")])])],2)]):e._e(),1==e.gun?n("div",{staticClass:"active_energy"},[n("table",{staticClass:"other"},[n("tr",[n("td",[e._v(" Maximum shots: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.max_shots)+" ")])]),n("tr",[n("td",[e._v(" Burst: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.burst)+" ")])]),n("tr",[n("td",[e._v(" Self recharge: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.recharge)+" ")])]),n("tr",[n("td",[e._v(" Recharge time: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.recharge_time)+" ")])]),n("tr",[n("td",[e._v(" Reliability: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.reliability)+" ")])]),n("br"),n("b",[e._v("First projectile information: ")]),n("br"),n("tr",[n("td",[e._v(" Projectile's estimated damage rating: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.damage)+" points")])]),n("tr",[n("td",[e._v(" Projectile's Damage type: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.damage_type)+" ")])]),n("tr",[n("td",[e._v(" Projectile's estimated armor penetration rating: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.armor_penetration)+" points")])]),n("tr",[n("td",[e._v(" Projectile's armor damage type: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.check_armor)+" ")])]),n("tr",[n("td",[e._v(" Projectile's shrapnel type: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.shrapnel_type)+" ")])]),n("tr",[n("td",[e._v(" Stun: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.stun)+" ")])]),e.secondary_damage?[n("br"),n("b",[e._v("Second projectile information: ")]),n("br"),n("tr",[n("td",[e._v(" Projectile's estimated damage rating: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.secondary_damage)+" points")])]),n("tr",[n("td",[e._v(" Projectile's damage type: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.secondary_damage_type)+" ")])]),n("tr",[n("td",[e._v(" Projectile's estimated armor penetration rating: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.secondary_armor_penetration)+" points")])]),n("tr",[n("td",[e._v(" Projectile's armor damage type: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.secondary_check_armor)+" ")])]),n("tr",[n("td",[e._v(" Projectile's shrapnel type: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.secondary_shrapnel_type)+" ")])]),n("tr",[n("td",[e._v(" Stun: ")]),e._v(" "),n("td",{staticClass:"right"},[e._v(" "+e._s(e.secondary_stun)+" ")])])]:e._e()],2)]):e._e(),e.gun_mods?n("div",[n("br"),n("b",[e._v("Modular gun information: ")]),n("br"),n("table",{staticClass:"modular"},[e._m(0),e._l(e.gun_mods,(function(t,i){return n("tr",{key:i},[n("td",[e._v(e._s(i))]),e._l(t,(function(i,r){return n("td",{key:r},[e._v(" "+e._s(t[r])+" ")])}))],2)}))],2)]):e._e(),n("vui-button",{attrs:{params:{print:1}}},[e._v("Print Analysis")])],1):n("div",[n("b",[e._v("No item inserted, analysis unit inactive.")])])])},r=[function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("tr",[n("th",[e._v(" Name ")]),n("th",[e._v(" Reliability ")]),n("th",[e._v(" Damage modifier ")]),n("th",[e._v(" Fire delay modifier ")]),n("th",[e._v(" Number of shots modifier ")]),n("th",[e._v(" Burst modifier ")]),n("th",[e._v(" Accuracy modifier ")]),n("th",[e._v(" Repair tool ")])])}],s={data:function(){return this.$root.$data.state}},a=s,o=(n("e958"),n("2877")),c=Object(o["a"])(a,i,r,!1,null,"61a5d2f6",null);t["default"]=c.exports},"408a":function(e,t,n){var i=n("c6b6");e.exports=function(e){if("number"!=typeof e&&"Number"!=i(e))throw TypeError("Incorrect invocation");return+e}},"40d9":function(e,t,n){var i=n("23e7"),r=Math.floor,s=Math.log,a=Math.LOG2E;i({target:"Math",stat:!0},{clz32:function(e){return(e>>>=0)?31-r(s(e+.5)*a):32}})},4149:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[e.read?n("vui-group",[n("vui-group-item",{attrs:{label:"Pressure:"}},[e._v(" "+e._s(e.press.toFixed(1))+" ")]),n("vui-group-item",{attrs:{label:"Temperature:"}},[e._v(" "+e._s(e.temp.toFixed(1))+" K ("+e._s(e.tempC.toFixed(1))+"°C) ")]),n("vui-group-item",{attrs:{label:"Gases:"}},[e.gas.oxygen?n("span",{staticClass:"complist"},[e._v(e._s(e.gas.oxygen.toFixed(2))+" O"),n("sub",[e._v("2")])]):e._e(),e.gas.nitrogen?n("span",{staticClass:"complist"},[e._v(e._s(e.gas.nitrogen.toFixed(2))+" N")]):e._e(),e.gas.carbon_dioxide?n("span",{staticClass:"complist"},[e._v(e._s(e.gas.carbon_dioxide.toFixed(2))+" CO"),n("sub",[e._v("2"),n("sub")])]):e._e(),e.gas.phoron?n("span",{staticClass:"complist"},[e._v(e._s(e.gas.phoron.toFixed(2))+" PH")]):e._e(),e.gas.sleeping_agent?n("span",{staticClass:"complist"},[e._v(e._s(e.gas.sleeping_agent.toFixed(2))+" SA")]):e._e()])],1):n("span",{staticClass:"bad"},[e._v("Unable to obtain air reading!")])],1)},r=[],s={data:function(){return this.$root.$data.state}},a=s,o=(n("cbf4"),n("2877")),c=Object(o["a"])(a,i,r,!1,null,"4021d8a8",null);t["default"]=c.exports},4160:function(e,t,n){"use strict";var i=n("23e7"),r=n("17c2");i({target:"Array",proto:!0,forced:[].forEach!=r},{forEach:r})},"419b":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("input",{directives:[{name:"model",rawName:"v-model",value:e.searchValue,expression:"searchValue"}],attrs:{type:"text",placeholder:"Search..."},domProps:{value:e.searchValue},on:{input:function(t){t.target.composing||(e.searchValue=t.target.value)}}})},r=[],s=(n("e260"),n("d81d"),n("a9e3"),n("d3b7"),n("ac1f"),n("841c"),n("ddb0"),n("ffe7")),a=n.n(s),o={data:function(){return{fuse:null,searchValue:""}},mounted:function(){this.onFieldUpdate(this.searchValue)},props:{keys:{type:Array,default:function(){return[]}},includeScore:{type:Boolean,default:!1},threshold:{type:Number,default:.6},input:{type:Array,default:function(){return[]}},value:{type:Array,default:function(){return[]}}},watch:{keys:function(){this.fuse=null},includeScore:function(){this.fuse=null},threshold:function(){this.fuse=null},input:function(){this.onFieldUpdate(this.searchValue)},searchValue:function(e){this.onFieldUpdate(e)}},methods:{onFieldUpdate:function(e){this.initFuse();var t=this.fuse.search(e);0==t.length&&(t=this.includeScore?this.input.map((function(e){return{item:e,score:0}})):this.input),this.$emit("input",t)},initFuse:function(){if(null==this.fuse){var e={shouldSort:!0,findAllMatches:!0,keys:this.keys,includeScore:this.includeScore,threshold:this.threshold};this.fuse=new a.a(this.input,e)}else this.fuse.setCollection(this.input)}}},c=o,l=n("2877"),u=Object(l["a"])(c,i,r,!1,null,null,null);t["default"]=u.exports},"421c":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[null!=e.channelTitle?[n("input",{directives:[{name:"model",rawName:"v-model",value:e.channelTitle,expression:"channelTitle"}],attrs:{type:"text"},domProps:{value:e.channelTitle},on:{keydown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.new_channel()},input:function(t){t.target.composing||(e.channelTitle=t.target.value)}}}),n("vui-button",{on:{click:function(t){return e.new_channel()}}},[e._v("New channel")])]:n("vui-button",{on:{click:function(t){e.channelTitle=""}}},[e._v("New channel")]),n("br"),e._l(e.displayed,(function(t){return n("view-mcomputer-chat-channel-btn",{key:t,attrs:{re:t,ch:e.s.channels[t]}})})),n("h2",[e._v("Users:")]),n("vui-input-search",{attrs:{input:e.users,keys:["user"]},model:{value:e.users_result,callback:function(t){e.users_result=t},expression:"users_result"}}),n("br"),e._l(e.users_result,(function(t){return n("div",{key:t.ref},[n("vui-button",{attrs:{params:{direct:t.ref}}},[e._v(e._s(t.user))])],1)}))],2)},r=[],s=(n("4de4"),n("d81d"),n("4fad"),n("b64b"),n("025e")),a={data:function(){return{s:this.$root.$data.state,channelTitle:null,users_result:[]}},methods:{new_channel:function(){Object(s["b"])({new_channel:this.channelTitle}),this.channelTitle=null}},computed:{displayed:function(){var e=this;return Object.keys(this.s.channels).filter((function(t){return!e.s.channels[t].can_interact}))},users:function(){return Object.entries(this.s.users).map((function(e){return{ref:e[0],user:e[1]}}))}}},o=a,c=n("2877"),l=Object(c["a"])(o,i,r,!1,null,null,null);t["default"]=l.exports},"428f":function(e,t,n){var i=n("da84");e.exports=i},4310:function(e,t,n){},"44ad":function(e,t,n){var i=n("d039"),r=n("c6b6"),s="".split;e.exports=i((function(){return!Object("z").propertyIsEnumerable(0)}))?function(e){return"String"==r(e)?s.call(e,""):Object(e)}:Object},"44b8":function(e,t,n){},"44d2":function(e,t,n){var i=n("b622"),r=n("7c73"),s=n("9bf2"),a=i("unscopables"),o=Array.prototype;void 0==o[a]&&s.f(o,a,{configurable:!0,value:r(null)}),e.exports=function(e){o[a][e]=!0}},"44de":function(e,t,n){var i=n("da84");e.exports=function(e,t){var n=i.console;n&&n.error&&(1===arguments.length?n.error(e):n.error(e,t))}},"44e7":function(e,t,n){var i=n("861d"),r=n("c6b6"),s=n("b622"),a=s("match");e.exports=function(e){var t;return i(e)&&(void 0!==(t=e[a])?!!t:"RegExp"==r(e))}},"44fc":function(e,t,n){"use strict";n("b884")},"45fc":function(e,t,n){"use strict";var i=n("23e7"),r=n("b727").some,s=n("a640"),a=n("ae40"),o=s("some"),c=a("some");i({target:"Array",proto:!0,forced:!o||!c},{some:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}})},4626:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("div",[n("vui-button",{attrs:{params:{send:1}}},[e._v("Send Signal")])],1),n("div",[n("h3",[e._v("Frequency:")]),n("vui-button",{attrs:{params:{freq:-10}}},[e._v("--")]),n("vui-button",{attrs:{params:{freq:-2}}},[e._v("-")]),n("span",{staticClass:"value"},[e._v(e._s(e.frequency))]),n("vui-button",{attrs:{params:{freq:2}}},[e._v("+")]),n("vui-button",{attrs:{params:{freq:10}}},[e._v("++")])],1),n("div",[n("h3",[e._v("Code:")]),n("vui-button",{attrs:{params:{code:-5}}},[e._v("--")]),n("vui-button",{attrs:{params:{code:-1}}},[e._v("-")]),n("span",{staticClass:"value"},[e._v(e._s(e.code))]),n("vui-button",{attrs:{params:{code:1}}},[e._v("+")]),n("vui-button",{attrs:{params:{code:5}}},[e._v("++")])],1)])},r=[],s={data:function(){return this.$root.$data.state}},a=s,o=(n("c2e3"),n("2877")),c=Object(o["a"])(a,i,r,!1,null,"729622e4",null);t["default"]=c.exports},"466d":function(e,t,n){"use strict";var i=n("d784"),r=n("825a"),s=n("50c4"),a=n("1d80"),o=n("8aa5"),c=n("14c3");i("match",1,(function(e,t,n){return[function(t){var n=a(this),i=void 0==t?void 0:t[e];return void 0!==i?i.call(t,n):new RegExp(t)[e](String(n))},function(e){var i=n(t,e,this);if(i.done)return i.value;var a=r(e),l=String(this);if(!a.global)return c(a,l);var u=a.unicode;a.lastIndex=0;var d,h=[],f=0;while(null!==(d=c(a,l))){var p=String(d[0]);h[f]=p,""===p&&(a.lastIndex=o(l,s(a.lastIndex),u)),f++}return 0===f?null:h}]}))},4678:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[e._l(e.items,(function(t,i){return n("div",{key:i,staticStyle:{clear:"both"}},[e._v(" "+e._s(i)+": "+e._s(t)+" Credits "),n("div",{staticStyle:{float:"right"}},[n("vui-input-numeric",{attrs:{width:"2em"},model:{value:e.selection[i],callback:function(t){e.$set(e.selection,i,t)},expression:"selection[name]"}}),1==e.editmode?n("vui-button",{attrs:{params:{remove:i},width:"3em"}},[e._v("Delete")]):e._e()],1)])})),1==e.editmode?n("div",[n("input",{directives:[{name:"model",rawName:"v-model",value:e.tmp_name,expression:"tmp_name"}],domProps:{value:e.tmp_name},on:{input:function(t){t.target.composing||(e.tmp_name=t.target.value)}}}),n("vui-input-numeric",{attrs:{width:"3em","button-count":2},model:{value:e.tmp_price,callback:function(t){e.tmp_price=t},expression:"tmp_price"}}),n("vui-button",{attrs:{params:{add:{name:e.tmp_name,price:e.tmp_price}}}},[e._v("Add")]),n("vui-button",{attrs:{params:{accountselect:1},width:"3em"}},[e._v("Select Destination Account")])],1):e._e(),n("vui-button",{attrs:{params:{locking:1},width:"3em"}},[e._v("Toggle Lock")]),n("vui-button",{attrs:{params:{confirm:e.selection}}},[e._v("Confirm Selection")])],2)},r=[],s=n("025e"),a={data:function(){return this.$root.$data.state},methods:{accountChange:function(e){s["a"].sendToTopic({changeaccount:e})}}},o=a,c=n("2877"),l=Object(c["a"])(o,i,r,!1,null,null,null);t["default"]=l.exports},"46c6":function(e,t,n){},4709:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("header-default",[n("div",{staticClass:"maincont"},[n("b",{staticClass:"valign"},[e._v(e._s(e.time))]),e.state._PC.batteryicon&&e.state._PC.showbatteryicon?n("img",{staticClass:"valign",attrs:{src:e.state._PC.batteryicon}}):e._e(),e.state._PC.batterypercent&&e.state._PC.showbatteryicon?n("b",{staticClass:"valign"},[e._v(e._s(e.state._PC.batterypercent))]):e._e(),e.state._PC.ntneticon?n("img",{staticClass:"valign",attrs:{img:"",src:e.state._PC.ntneticon}}):e._e(),e.state._PC.apclinkicon?n("img",{staticClass:"valign",attrs:{img:"",src:e.state._PC.apclinkicon}}):e._e(),n("div",{staticStyle:{float:"right"}},[n("vui-button",{class:{selected:e.state._PC.flashlight},attrs:{params:{PC_togglelight:1},icon:"lightbulb","icon-only":""}}),e.state._PC.showexitprogram?[n("vui-button",{attrs:{params:{PC_minimize:1},icon:"window-minimize","icon-only":""}}),n("vui-button",{staticClass:"danger",attrs:{params:{PC_exit:1},icon:"window-close","icon-only":""}})]:[n("vui-button",{staticClass:"danger",attrs:{params:{PC_shutdown:1},icon:"power-off","icon-only":""}})]],2)])])},r=[],s=n("025e"),a={data:function(){return this.$root.$data},mounted:function(){this.$nextTick((function(){document.getElementById("content").classList.add("mcomputer")}))},computed:{time:function(){return Object(s["c"])(this.wtime)}}},o=a,c=(n("4ae3"),n("2877")),l=Object(c["a"])(o,i,r,!1,null,"1a3d9578",null);t["default"]=l.exports},4795:function(e,t,n){var i=n("23e7"),r=n("da84"),s=n("342f"),a=[].slice,o=/MSIE .\./.test(s),c=function(e){return function(t,n){var i=arguments.length>2,r=i?a.call(arguments,2):void 0;return e(i?function(){("function"==typeof t?t:Function(t)).apply(this,r)}:t,n)}};i({global:!0,bind:!0,forced:o},{setTimeout:c(r.setTimeout),setInterval:c(r.setInterval)})},"47db":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("h3",[e._v(" Selected Products:")]),e._l(e.items,(function(t,i){return n("div",{key:i},[e.selection[i]&&e.selection[i]>0?n("span",[e._v(" "+e._s(e.selection[i])+"x "+e._s(i)+": at "+e._s(t*e.selection[i])+" Credits ")]):e._e()])})),n("h3",[e._v(" Total: "+e._s(e.priceSum))]),n("h4",[e._v("Destination Account: "+e._s(e.destinationact))]),n("h3",[e._v("Please swipe your ID to pay.")]),n("vui-button",{attrs:{params:{return:1},width:"3em"}},[e._v("Return to order menu")])],2)},r=[],s=(n("13d5"),n("b64b"),{data:function(){return this.$root.$data.state},computed:{priceSum:function(){var e=this;return Object.keys(this.selection).reduce((function(t,n){return isNaN(t)?e.items[n]*e.selection[n]:t+e.items[n]*e.selection[n]}))}}}),a=s,o=n("2877"),c=Object(o["a"])(a,i,r,!1,null,null,null);t["default"]=c.exports},4840:function(e,t,n){var i=n("825a"),r=n("1c0b"),s=n("b622"),a=s("species");e.exports=function(e,t){var n,s=i(e).constructor;return void 0===s||void 0==(n=i(s)[a])?t:r(n)}},4874:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[e.has_ai?[n("vui-group",[n("vui-group-item",{attrs:{label:"Hardware Integrity"}},[e._v(e._s(e.hardware_integrity)+"%")]),n("vui-group-item",{attrs:{label:"Backup Capacitor"}},[e._v(e._s(e.backup_capacitor)+"%")])],1),e.has_laws?n("table",{staticClass:"borders"},[e._m(0),n("div",{staticClass:"itemLabelNarrow"},[e._v(" Laws: ")]),e._l(e.laws,(function(t){return n("tr",{key:t.index},[n("td",{attrs:{valign:"top"}},[e._v(e._s(t.index))]),n("td",[e._v(e._s(t.law))])])}))],2):n("span",{staticClass:"notice"},[e._v(" No laws found. ")]),e.operational?n("vui-group",[n("vui-group-item",{attrs:{label:"Radio Subspace Transceiver"}},[n("vui-button",{class:{selected:e.radio},attrs:{params:{radio:0}}},[e._v("Enabled")]),n("vui-button",{class:{danger:!e.radio},attrs:{params:{radio:1}}},[e._v("Disabled")])],1),n("vui-group-item",{attrs:{label:"Wireless Interface"}},[n("vui-button",{class:{selected:e.wireless},attrs:{params:{wireless:0}}},[e._v("Enabled")]),n("vui-button",{class:{danger:!e.wireless},attrs:{params:{wireless:1}}},[e._v("Disabled")])],1),e.flushing?n("vui-group-item",[n("span",{staticClass:"notice"},[e._v("AI wipe in progress...")])]):n("vui-group-item",{attrs:{label:"Wipe AI"}},[n("vui-button",{staticClass:"danger",attrs:{params:{wipe:1}}},[e._v("Wipe")])],1)],1):e._e()]:[e._v(" Stored AI: "),n("span",{staticClass:"notice"},[e._v("No AI detected.")])]],2)},r=[function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("tr",[n("td",{staticClass:"law_index"},[e._v("Index")]),n("td",[e._v("Law")])])}],s={data:function(){return this.$root.$data.state}},a=s,o=n("2877"),c=Object(o["a"])(a,i,r,!1,null,null,null);t["default"]=c.exports},"48f3":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[e._t("default")],2)},r=[],s=(n("d44d"),n("2877")),a={},o=Object(s["a"])(a,i,r,!1,null,"b2030120",null);t["default"]=o.exports},4930:function(e,t,n){var i=n("d039");e.exports=!!Object.getOwnPropertySymbols&&!i((function(){return!String(Symbol())}))},4939:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[e.change_race?n("div",[n("div",{staticClass:"item"},[n("div",{staticClass:"itemLabelNarrow"},[e._v(" Species: ")]),n("div",{staticClass:"itemContentWide"},e._l(e.valid_species,(function(t){return n("vui-button",{key:t,class:{button:1,selected:e.owner_species==t},attrs:{params:{race:t}}},[e._v(e._s(t))])})),1)])]):e._e(),e.change_gender?n("div",[n("div",{staticClass:"item"},[n("div",{staticClass:"itemLabelNarrow"},[e._v(" Sex: ")]),n("div",{staticClass:"itemContentWide"},e._l(e.valid_gender,(function(t){return n("vui-button",{key:t,class:{button:1,selected:e.owner_gender==t},attrs:{params:{gender:t}}},[e._v(e._s(t))])})),1),e.valid_pronouns.length?n("div",{staticClass:"itemLabelNarrow"},[e._v(" Pronouns: ")]):e._e(),e.valid_pronouns.length?n("div",{staticClass:"itemContentWide"},e._l(e.valid_pronouns,(function(t){return n("vui-button",{key:t,class:{button:1,selected:e.owner_pronouns==t},attrs:{params:{pronouns:t}}},[e._v(e._s(t))])})),1):e._e()])]):e._e(),e.change_accent&&e.valid_accents.length?n("div",[n("div",{staticClass:"item"},[n("div",{staticClass:"itemLabelNarrow"},[e._v(" Accents: ")]),n("div",{staticClass:"itemContentWide"},e._l(e.valid_accents,(function(t){return n("vui-button",{key:t,class:{button:1,selected:e.owner_accent==t},attrs:{params:{accent:t}}},[e._v(e._s(t))])})),1)])]):e._e(),e.change_language&&e.valid_languages.length?n("div",[n("div",{staticClass:"item"},[n("div",{staticClass:"itemLabelNarrow"},[e._v(" Languages: ")]),n("div",{staticClass:"itemContentWide"},e._l(e.valid_languages,(function(t){return n("vui-button",{key:t,class:{button:1,selected:e.ArrayContains(e.owner_languages,t)},attrs:{params:{language:t}}},[e._v(e._s(t))])})),1)])]):e._e(),e.change_eye_color||e.change_skin_tone||e.change_skin_color||e.change_hair_color||e.change_facial_hair_color?n("div",[n("div",{staticClass:"item"},[n("div",{staticClass:"itemLabelNarrow"},[e._v(" Colors: ")]),n("div",{staticClass:"itemContentWide"},[e.change_eye_color?n("vui-button",{attrs:{params:{eye_color:1}}},[e._v("Change Eye Color")]):e._e(),e.change_skin_tone?n("vui-button",{attrs:{params:{skin_tone:1}}},[e._v("Change Skin Tone")]):e._e(),e.change_skin_preset?n("vui-button",{attrs:{params:{skin_preset:1}}},[e._v("Change Skin Preset")]):e._e(),e.change_skin_color&&!e.change_skin_preset?n("vui-button",{attrs:{params:{skin_color:1}}},[e._v("Change Skin Color")]):e._e(),e.change_hair_color?n("vui-button",{attrs:{params:{hair_color:1}}},[e._v("Change Hair Color")]):e._e(),e.change_facial_hair_color?n("vui-button",{attrs:{params:{facial_hair_color:1}}},[e._v("Change Facial Hair Color")]):e._e()],1)])]):e._e(),e.change_hair&&e.valid_hair_styles.length?n("div",[n("div",{staticClass:"item"},[n("div",{staticClass:"itemLabelNarrow"},[e._v(" Hair Styles: ")]),n("div",{staticClass:"itemContentWide"},e._l(e.valid_hair_styles,(function(t){return n("vui-button",{key:t,class:{button:1,selected:e.owner_hair_style==t},attrs:{params:{hair:t}}},[e._v(e._s(t))])})),1)])]):e._e(),e.change_facial_hair&&e.valid_facial_hair_styles.length?n("div",[n("div",{staticClass:"item"},[n("div",{staticClass:"itemLabelNarrow"},[e._v(" Facial Hair Styles: ")]),n("div",{staticClass:"itemContentWide"},e._l(e.valid_facial_hair_styles,(function(t){return n("vui-button",{key:t,class:{button:1,selected:e.owner_facial_hair_style==t},attrs:{params:{facial_hair:t}}},[e._v(e._s(t))])})),1)])]):e._e()])},r=[],s=(n("caad"),n("2532"),{data:function(){return this.$root.$data.state},methods:{ArrayContains:function(e,t){return!!e.includes(t)}}}),a=s,o=(n("611e"),n("2877")),c=Object(o["a"])(a,i,r,!1,null,"2a491020",null);t["default"]=c.exports},"498a":function(e,t,n){"use strict";var i=n("23e7"),r=n("58a8").trim,s=n("c8d2");i({target:"String",proto:!0,forced:s("trim")},{trim:function(){return r(this)}})},"4a9b":function(e,t,n){var i=n("74e8");i("Float64",(function(e){return function(t,n,i){return e(this,t,n,i)}}))},"4ae1":function(e,t,n){var i=n("23e7"),r=n("d066"),s=n("1c0b"),a=n("825a"),o=n("861d"),c=n("7c73"),l=n("0538"),u=n("d039"),d=r("Reflect","construct"),h=u((function(){function e(){}return!(d((function(){}),[],e)instanceof e)})),f=!u((function(){d((function(){}))})),p=h||f;i({target:"Reflect",stat:!0,forced:p,sham:p},{construct:function(e,t){s(e),a(t);var n=arguments.length<3?e:s(arguments[2]);if(f&&!h)return d(e,t,n);if(e==n){switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3])}var i=[null];return i.push.apply(i,t),new(l.apply(e,i))}var r=n.prototype,u=c(o(r)?r:Object.prototype),p=Function.apply.call(e,u,t);return o(p)?p:u}})},"4ae3":function(e,t,n){"use strict";n("6814")},"4c53":function(e,t,n){"use strict";var i=n("23e7"),r=n("857a"),s=n("af03");i({target:"String",proto:!0,forced:s("sub")},{sub:function(){return r(this,"sub","","")}})},"4caa":function(e,t,n){var i=n("a919"),r=n("76dd"),s=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,a="\\u0300-\\u036f",o="\\ufe20-\\ufe2f",c="\\u20d0-\\u20ff",l=a+o+c,u="["+l+"]",d=RegExp(u,"g");function h(e){return e=r(e),e&&e.replace(s,i).replace(d,"")}e.exports=h},"4cb7":function(e,t,n){},"4cc0":function(e,t,n){},"4d63":function(e,t,n){var i=n("83ab"),r=n("da84"),s=n("94ca"),a=n("7156"),o=n("9bf2").f,c=n("241c").f,l=n("44e7"),u=n("ad6d"),d=n("9f7f"),h=n("6eeb"),f=n("d039"),p=n("69f3").set,g=n("2626"),m=n("b622"),v=m("match"),b=r.RegExp,y=b.prototype,w=/a/g,_=/a/g,x=new b(w)!==w,k=d.UNSUPPORTED_Y,A=i&&s("RegExp",!x||k||f((function(){return _[v]=!1,b(w)!=w||b(_)==_||"/a/i"!=b(w,"i")})));if(A){var C=function(e,t){var n,i=this instanceof C,r=l(e),s=void 0===t;if(!i&&r&&e.constructor===C&&s)return e;x?r&&!s&&(e=e.source):e instanceof C&&(s&&(t=u.call(e)),e=e.source),k&&(n=!!t&&t.indexOf("y")>-1,n&&(t=t.replace(/y/g,"")));var o=a(x?new b(e,t):b(e,t),i?this:y,C);return k&&n&&p(o,{sticky:n}),o},E=function(e){e in C||o(C,e,{configurable:!0,get:function(){return b[e]},set:function(t){b[e]=t}})},S=c(b),F=0;while(S.length>F)E(S[F++]);y.constructor=C,C.prototype=y,h(r,"RegExp",C)}g("RegExp")},"4d64":function(e,t,n){var i=n("fc6a"),r=n("50c4"),s=n("23cb"),a=function(e){return function(t,n,a){var o,c=i(t),l=r(c.length),u=s(a,l);if(e&&n!=n){while(l>u)if(o=c[u++],o!=o)return!0}else for(;l>u;u++)if((e||u in c)&&c[u]===n)return e||u||0;return!e&&-1}};e.exports={includes:a(!0),indexOf:a(!1)}},"4d76":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("h2",[e._v("Engine Status:")]),e.is_on?n("div",[e._v(" The engine is currently running. "),n("vui-button",{attrs:{params:{toggle_engine:1}}},[e._v("Stop")])],1):n("div",[e._v(" The engine is off. "),n("vui-button",{attrs:{disabled:!e.has_key||!e.has_cell,params:{toggle_engine:1}}},[e._v("Start")])],1),e.has_key?n("div",[e._v(" There is a key inserted into the ignition. "),n("vui-button",{attrs:{params:{key:1}}},[e._v("Remove Key")])],1):n("div",[e._v(" There is no key in the ignition. ")]),e.has_cell?n("div",[e._v(" Cell Charge: "),n("vui-progress",{class:{good:e.cell_charge>=.8*e.cell_max_charge,bad:e.cell_charge<=.4*e.cell_max_charge,average:e.cell_charge<.8*e.cell_max_charge&&e.cell_charge>.4*e.cell_max_charge},attrs:{value:e.cell_charge,max:e.cell_max_charge,min:0}},[e._v(e._s(e.cell_charge)+"J")]),e._v(" "),n("vui-tooltip",{attrs:{label:"?"}},[e._v("The cell can be removed by using a screwdriver to open the maintenance panel, then using a crowbar to shimmy it out.")])],1):n("div",[e._v(" There is no cell installed. "),n("vui-tooltip",{attrs:{label:"?"}},[e._v("The cell can be installed by using a screwdriver to open the maintenance panel, then clicking on the engine with a compatible power cell.")])],1),e.is_towing?n("div",[e._v(" This engine is currently towing the "+e._s(e.tow)+". "),n("vui-button",{attrs:{params:{unlatch:1}}},[e._v("Unlatch")]),e._m(0),e.has_proper_trolley?n("div",[e.is_hoovering?n("div",[e._v(" The trolley is currently vacuuming. "),n("vui-button",{attrs:{params:{toggle_hoover:1}}},[e._v("Toggle")])],1):n("div",[e._v(" The trolley is not vacuuming. "),n("vui-button",{attrs:{disabled:!e.is_on,params:{toggle_hoover:1}}},[e._v("Toggle")])],1),n("div",[e._v(" Vacuum Capacity Remaining: "),n("vui-progress",{class:{good:e.vacuum_capacity>=.8*e.max_vacuum_capacity,bad:e.vacuum_capacity<=.4*e.max_vacuum_capacity,average:e.vacuum_capacity<.8*e.max_vacuum_capacity&&e.vacuum_capacity>.4*e.max_vacuum_capacity},attrs:{value:e.vacuum_capacity,max:e.max_vacuum_capacity,min:0}},[e._v(e._s(e.vacuum_capacity))]),e._v(" "),n("vui-button",{attrs:{disabled:e.vacuum_capacity>=e.max_vacuum_capacity,params:{empty_hoover:1}}},[e._v("Empty")])],1),e.is_mopping?n("div",[e._v(" The trolley is currently mopping. "),n("vui-button",{attrs:{disabled:!e.is_on||!e.has_bucket||e.bucket_capacity<=0,params:{toggle_mops:1}}},[e._v("Toggle")])],1):n("div",[e._v(" The trolley is not mopping. "),n("vui-button",{attrs:{disabled:!e.is_on||!e.has_bucket,params:{toggle_mops:1}}},[e._v("Toggle")])],1),e.has_bucket?n("div",[e._v(" The trolley has a reagent container installed. "),n("vui-tooltip",{attrs:{label:"?"}},[e._v("The trolley must have a reagent container installed to draw reagents from, such as water or space cleaner. This can be done by opening the maintenance panel on the trolley with a screwdriver and clicking on it with a bucket. Similarly, with an open panel, it can be removed by using a wrench on it.")]),n("div",[e._v(" Container Reagents Remaining: "),n("vui-progress",{class:{good:e.bucket_capacity>=.8*e.max_bucket_capacity,bad:e.bucket_capacity<=.4*e.max_bucket_capacity,average:e.bucket_capacity<.8*e.max_bucket_capacity&&e.bucket_capacity>.4*e.max_bucket_capacity},attrs:{value:e.bucket_capacity,max:e.max_bucket_capacity,min:0}},[e._v(e._s(e.bucket_capacity)+"u")])],1)],1):n("div",[e._v(" The trolley does not have a reagent container installed. "),n("vui-tooltip",{attrs:{label:"?"}},[e._v("The trolley must have a reagent container installed to draw reagents from, such as water or space cleaner. This can be done by opening the maintenance panel on the trolley with a screwdriver and clicking on it with a bucket. Similarly, with an open panel, it can be removed by using a wrench on it.")])],1)]):n("div",[e._v(" The wagon does not have the correct NT-X1 Vacuum Cleaner installed. ")])],1):n("div",[e._v(" This engine isn't towing anything currently. "),n("vui-tooltip",{attrs:{label:"?"}},[e._v("You can latch vehicles together by dragging from the vehicle you want to be the anchor point, to the trolley you wish to latch.")])],1)])},r=[function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("h2",[e._v("NT-X1 Vacuum Cleaner Status:")])])}],s={data:function(){return this.$root.$data.state}},a=s,o=n("2877"),c=Object(o["a"])(a,i,r,!1,null,null,null);t["default"]=c.exports},"4d90":function(e,t,n){"use strict";var i=n("23e7"),r=n("0ccb").start,s=n("9a0c");i({target:"String",proto:!0,forced:s},{padStart:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}})},"4de4":function(e,t,n){"use strict";var i=n("23e7"),r=n("b727").filter,s=n("1dde"),a=n("ae40"),o=s("filter"),c=a("filter");i({target:"Array",proto:!0,forced:!o||!c},{filter:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}})},"4df4":function(e,t,n){"use strict";var i=n("0366"),r=n("7b0b"),s=n("9bdd"),a=n("e95a"),o=n("50c4"),c=n("8418"),l=n("35a1");e.exports=function(e){var t,n,u,d,h,f,p=r(e),g="function"==typeof this?this:Array,m=arguments.length,v=m>1?arguments[1]:void 0,b=void 0!==v,y=l(p),w=0;if(b&&(v=i(v,m>2?arguments[2]:void 0,2)),void 0==y||g==Array&&a(y))for(t=o(p.length),n=new g(t);t>w;w++)f=b?v(p[w],w):p[w],c(n,w,f);else for(d=y.call(p),h=d.next,n=new g;!(u=h.call(d)).done;w++)f=b?s(d,v,[u.value,w],!0):u.value,c(n,w,f);return n.length=w,n}},"4e82":function(e,t,n){"use strict";var i=n("23e7"),r=n("1c0b"),s=n("7b0b"),a=n("d039"),o=n("a640"),c=[],l=c.sort,u=a((function(){c.sort(void 0)})),d=a((function(){c.sort(null)})),h=o("sort"),f=u||!d||!h;i({target:"Array",proto:!0,forced:f},{sort:function(e){return void 0===e?l.call(s(this)):l.call(s(this),r(e))}})},"4ec9":function(e,t,n){"use strict";var i=n("6d61"),r=n("6566");e.exports=i("Map",(function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}}),r)},"4fad":function(e,t,n){var i=n("23e7"),r=n("6f53").entries;i({target:"Object",stat:!0},{entries:function(e){return r(e)}})},"508b":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("h3",[e._v("Tank Control System")]),e.state["input"]?n("div",[n("vui-item",{attrs:{balance:.65,label:"Input:"}},[e.state["input"].power?n("span",[e._v("Injecting")]):n("span",[e._v("On Hold")]),e._v(" "),n("vui-button",{attrs:{params:{in_toggle_injector:1},icon:"power-off"}},[e._v("Toggle Power")])],1),n("vui-item",{attrs:{balance:.65,label:"Flow Rate Limit:"}},[e._v(e._s(e.state["input"].rate)+" L/s")]),n("vui-item",{attrs:{balance:.65,label:"Command:"}},[n("vui-input-numeric",{attrs:{width:"3em","button-count":3,max:e.state.maxrate},on:{keypress:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.s({in_set_flowrate:e.state["input"].setrate})}},model:{value:e.state["input"].setrate,callback:function(t){e.$set(e.state["input"],"setrate",t)},expression:"state['input'].setrate"}}),n("br"),n("vui-button",{attrs:{"push-state":"",params:{in_set_flowrate:e.state["input"].setrate}}},[e._v("Set Flow Rate")])],1)],1):n("vui-button",{attrs:{params:{in_refresh_status:1}}},[e._v("Search for input port")]),e.state["output"]?n("div",{staticStyle:{"margin-top":"2em"}},[n("vui-item",{attrs:{balance:.65,label:"Output:"}},[e.state["output"].power?n("span",[e._v("Open")]):n("span",[e._v("On Hold")]),e._v(" "),n("vui-button",{attrs:{params:{out_toggle_power:1},icon:"power-off"}},[e._v("Toggle Power")])],1),n("vui-item",{attrs:{balance:.65,label:"Max Output Pressure:"}},[e._v(e._s(e.state["output"].pressure)+" kPa")]),n("vui-item",{attrs:{balance:.65,label:"Command:"}},[n("vui-input-numeric",{attrs:{width:"5em","button-count":4,"decimal-places":2,max:e.state.maxpressure},on:{keypress:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.s({out_set_pressure:e.state["output"].setpressure})}},model:{value:e.state["output"].setpressure,callback:function(t){e.$set(e.state["output"],"setpressure",t)},expression:"state['output'].setpressure"}}),n("br"),n("vui-button",{attrs:{"push-state":"",params:{out_set_pressure:e.state["output"].setpressure}}},[e._v("Set Pressure")])],1)],1):n("vui-button",{attrs:{params:{out_refresh_status:1}}},[e._v("Search for output port")])],1)},r=[],s=n("025e"),a={data:function(){return this.$root.$data},methods:{s:function(e){s["a"].sendToTopic(e)}}},o=a,c=n("2877"),l=Object(c["a"])(o,i,r,!1,null,null,null);t["default"]=l.exports},"50c4":function(e,t,n){var i=n("a691"),r=Math.min;e.exports=function(e){return e>0?r(i(e),9007199254740991):0}},5135:function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},"51eb":function(e,t,n){"use strict";var i=n("825a"),r=n("c04e");e.exports=function(e){if("string"!==e&&"number"!==e&&"default"!==e)throw TypeError("Incorrect hint");return r(i(this),"number"!==e)}},5319:function(e,t,n){"use strict";var i=n("d784"),r=n("825a"),s=n("7b0b"),a=n("50c4"),o=n("a691"),c=n("1d80"),l=n("8aa5"),u=n("14c3"),d=Math.max,h=Math.min,f=Math.floor,p=/\$([$&'`]|\d\d?|<[^>]*>)/g,g=/\$([$&'`]|\d\d?)/g,m=function(e){return void 0===e?e:String(e)};i("replace",2,(function(e,t,n,i){var v=i.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE,b=i.REPLACE_KEEPS_$0,y=v?"$":"$0";return[function(n,i){var r=c(this),s=void 0==n?void 0:n[e];return void 0!==s?s.call(n,r,i):t.call(String(r),n,i)},function(e,i){if(!v&&b||"string"===typeof i&&-1===i.indexOf(y)){var s=n(t,e,this,i);if(s.done)return s.value}var c=r(e),f=String(this),p="function"===typeof i;p||(i=String(i));var g=c.global;if(g){var _=c.unicode;c.lastIndex=0}var x=[];while(1){var k=u(c,f);if(null===k)break;if(x.push(k),!g)break;var A=String(k[0]);""===A&&(c.lastIndex=l(f,a(c.lastIndex),_))}for(var C="",E=0,S=0;S=E&&(C+=f.slice(E,$)+R,E=$+F.length)}return C+f.slice(E)}];function w(e,n,i,r,a,o){var c=i+e.length,l=r.length,u=g;return void 0!==a&&(a=s(a),u=p),t.call(o,u,(function(t,s){var o;switch(s.charAt(0)){case"$":return"$";case"&":return e;case"`":return n.slice(0,i);case"'":return n.slice(c);case"<":o=a[s.slice(1,-1)];break;default:var u=+s;if(0===u)return t;if(u>l){var d=f(u/10);return 0===d?t:d<=l?void 0===r[d-1]?s.charAt(1):r[d-1]+s.charAt(1):t}o=r[u-1]}return void 0===o?"":o}))}}))},5327:function(e,t,n){var i=n("23e7"),r=n("1ec1"),s=Math.acosh,a=Math.log,o=Math.sqrt,c=Math.LN2,l=!s||710!=Math.floor(s(Number.MAX_VALUE))||s(1/0)!=1/0;i({target:"Math",stat:!0,forced:l},{acosh:function(e){return(e=+e)<1?NaN:e>94906265.62425156?a(e)+c:r(e-1+o(e-1)*o(e+1))}})},5377:function(e,t,n){var i=n("83ab"),r=n("9bf2"),s=n("ad6d"),a=n("9f7f").UNSUPPORTED_Y;i&&("g"!=/./g.flags||a)&&r.f(RegExp.prototype,"flags",{configurable:!0,get:s})},"542d":function(e,t,n){"use strict";var i=n("23e7"),r=n("d039"),s=n("408a"),a=1..toPrecision,o=r((function(){return"1"!==a.call(1,void 0)}))||!r((function(){a.call({})}));i({target:"Number",proto:!0,forced:o},{toPrecision:function(e){return void 0===e?a.call(s(this)):a.call(s(this),e)}})},5692:function(e,t,n){var i=n("c430"),r=n("c6cd");(e.exports=function(e,t){return r[e]||(r[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.7.0",mode:i?"pure":"global",copyright:"© 2020 Denis Pushkarev (zloirock.ru)"})},"56d7":function(e,t,n){"use strict";n.r(t),function(e){n("4160"),n("e260"),n("d3b7"),n("ac1f"),n("5319"),n("159b"),n("ddb0"),n("4795"),n("2d26");var t=n("a026"),i=n("8103"),r=n.n(i),s=n("bba4"),a=n.n(s),o=n("c0d6"),c=(n("e008"),n("f0e0")),l=n("3851");if(l.keys().forEach((function(e){var n=l(e),i=r()(a()(e.replace(/^\.\/(.*)\.\w+$/,"$1")));t["a"].component(i,n.default||n)})),t["a"].config.productionTip=!1,e.Vue=t["a"],e.receiveUIState=function(e){o["a"].loadState(JSON.parse(e))},document.getElementById("app")){var u=JSON.parse(document.getElementById("initialstate").innerHTML);o["a"].loadState(u),window.__wtimetimer=window.setInterval((function(){o["a"].state.wtime+=2}),200),c["a"].setWindowKey(window.document.getElementById("vueui:windowId").getAttribute("content")),c["a"].setupDrag(),new t["a"]({data:o["a"].state,template:"

Javascript loaded, stylesheets has failed to load. Click here to load.

",computed:{componentName:function(){return"?"!=this.$root.$data.active.charAt(0)?"view-"+this.$root.$data.active:null},templateString:function(){return"?"==this.$root.$data.active.charAt(0)?"
"+this.$root.$data.active.substr(1)+"
":null}},watch:{state:{handler:function(){o["a"].pushState()},deep:!0}},mounted:function(){this.$el.focus()}}).$mount("#app")}document.getElementById("header")&&new t["a"]({data:o["a"].state}).$mount("#header"),document.getElementById("dapp")&&new t["a"]({data:o["a"].state,template:'

Debug this UI with inspector by opening URL in your browser:

{{url}}

Current data of UI:

{{ JSON.stringify(this.$root.$data, null, \'    \') }}
',methods:{stop:function(){window.clearInterval(window.__wtimetimer)}},computed:{url:function(){return window.location.href+"?ext"}}}).$mount("#dapp")}.call(this,n("c8ba"))},"56ef":function(e,t,n){var i=n("d066"),r=n("241c"),s=n("7418"),a=n("825a");e.exports=i("Reflect","ownKeys")||function(e){var t=r.f(a(e)),n=s.f;return n?t.concat(n(e)):t}},"583b":function(e,t,n){var i=n("23e7"),r=n("5e89"),s=Math.abs;i({target:"Number",stat:!0},{isSafeInteger:function(e){return r(e)&&s(e)<=9007199254740991}})},"585a":function(e,t,n){(function(t){var n="object"==typeof t&&t&&t.Object===Object&&t;e.exports=n}).call(this,n("c8ba"))},5899:function(e,t){e.exports="\t\n\v\f\r                 \u2028\u2029\ufeff"},"58a8":function(e,t,n){var i=n("1d80"),r=n("5899"),s="["+r+"]",a=RegExp("^"+s+s+"*"),o=RegExp(s+s+"*$"),c=function(e){return function(t){var n=String(i(t));return 1&e&&(n=n.replace(a,"")),2&e&&(n=n.replace(o,"")),n}};e.exports={start:c(1),end:c(2),trim:c(3)}},"58e3":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[e.state.failTime?n("div",{staticClass:"notice"},[n("h3",{staticClass:"fw-bold"},[e._v("SYSTEM FAILURE")]),n("span",{staticClass:"fst-italic"},[e._v("I/O regulator malfuction detected! Waiting for system reboot...")]),n("br"),e._v(" Automatic reboot in "+e._s(e.state.failTime)+" seconds... "),n("vui-button",{attrs:{icon:"sync",params:{reboot:1}}},[e._v("Reboot Now")])],1):n("vui-group",[n("vui-group-item",{attrs:{label:"Stored Capacity:"}},[n("vui-progress",{class:e.state.charging?"good":"average",attrs:{value:e.state.storedCapacity,min:0,max:100}}),n("div",{staticClass:"statusValue"},[e._v(" "+e._s(Math.round(e.state.storedCapacity))+"% ")])],1),n("vui-group-item",{attrs:{label:"Charge status:"}},[n("div",{staticClass:"statusValue"},[1==e.state.chargeMode?n("span",[e._v(" SMES will be fully charged in "+e._s(e.timeRemaining)+" ")]):2==e.state.chargeMode?n("span",[e._v(" SMES input and output are equal ")]):n("span",[e._v(" SMES will run out of charge in "+e._s(e.timeRemaining)+" ")])])]),n("h3",[e._v("Input Management")]),n("vui-group-item",{attrs:{label:"Charge Mode:"}},[n("vui-button",{attrs:{icon:e.state.chargeAttempt?"sync":"times",params:{cmode:1}}},[e._v(e._s(e.state.chargeAttempt?"Auto":"Off"))]),e._v(" ["),n("span",{class:e.chargeClass},[e._v(e._s(e.chargeStatus))]),e._v("] ")],1),n("vui-group-item",{attrs:{label:"Input Level:"}},[n("vui-progress",{attrs:{value:e.state.chargeLevel,min:0,max:e.state.chargeMax}}),n("div",{staticStyle:{clear:"both","padding-top":"4px","text-align":"center"}},[n("vui-input-numeric",{attrs:{width:"100px","min-button":"","max-button":"","button-count":0,min:0,max:e.state.chargeMax},on:{input:function(t){return e.s({input:e.state.chargeLevel})}},model:{value:e.state.chargeLevel,callback:function(t){e.$set(e.state,"chargeLevel",t)},expression:"state.chargeLevel"}},[e._v(" "+e._s(e.state.chargeLevel)+" W ")])],1)],1),n("vui-group-item",{attrs:{label:"Input Load:"}},[n("vui-progress",{class:e.state.chargeTaken=1&&"".concat(t," hours"),n>=1&&"".concat(n," minutes"),i>=1&&"".concat(i," seconds")].filter(Boolean).join(", ")}}},o=a,c=n("2877"),l=Object(c["a"])(o,i,r,!1,null,null,null);t["default"]=l.exports},"592e":function(e,t,n){},"5a34":function(e,t,n){var i=n("44e7");e.exports=function(e){if(i(e))throw TypeError("The method doesn't accept regular expressions");return e}},"5aa2":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"button",attrs:{disabled:e.$root.$data.status<2||this.disabled},on:{click:function(t){return e.senddata()}}},[e.icon?n("div",{staticClass:"uiIcon16",class:["ic-"+this.icon,{"mr-1":!this.iconOnly},e.getRotateClass,e.getFlipClass]}):e._e(),n("span",[e._t("default")],2)])},r=[],s=(n("a9e3"),n("c0d6")),a=n("025e"),o={props:{icon:{type:String,default:""},rotate:{type:Number,default:0},flip:{type:String,default:""},params:{type:Object,default:null},unsafeParams:{type:Object,default:null},pushState:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},iconOnly:{type:Boolean,default:!1}},methods:{senddata:function(){this.$root.$data.status<2||this.disabled||(this.$emit("click"),this.unsafeParams&&a["a"].sendToTopicRaw(this.unsafeParams),this.params?a["a"].sendToTopic(this.params,this.pushState):this.pushState&&s["a"].pushState())}},computed:{getRotateClass:function(){switch(this.rotate%360){case 90:return"ic-rotate-90";case 180:return"ic-rotate-180";case 270:return"ic-rotate-270";default:return""}},getFlipClass:function(){if(this.flip)return"ic-flip-".concat(this.flip)}}},c=o,l=n("2877"),u=Object(l["a"])(c,i,r,!1,null,null,null);t["default"]=u.exports},"5ae5":function(e,t,n){},"5b81":function(e,t,n){"use strict";var i=n("23e7"),r=n("1d80"),s=n("44e7"),a=n("ad6d"),o=n("b622"),c=n("c430"),l=o("replace"),u=RegExp.prototype;i({target:"String",proto:!0},{replaceAll:function e(t,n){var i,o,d,h,f,p,g,m,v,b=r(this);if(null!=t){if(i=s(t),i&&(o=String(r("flags"in u?t.flags:a.call(t))),!~o.indexOf("g")))throw TypeError("`.replaceAll` does not allow non-global regexes");if(d=t[l],void 0!==d)return d.call(t,b,n);if(c&&i)return String(b).replace(t,n)}if(h=String(b),f=String(t),""===f)return e.call(h,/(?:)/g,n);if(p=h.split(f),"function"!==typeof n)return p.join(String(n));for(g=p[0],m=g.length,v=1;v1?arguments[1]:void 0),t}})},"5ddf":function(e,t,n){"use strict";n("3aaf")},"5ded":function(e,t,n){"use strict";var i=n("23e7"),r=n("d039"),s=n("8418"),a=r((function(){function e(){}return!(Array.of.call(e)instanceof e)}));i({target:"Array",stat:!0,forced:a},{of:function(){var e=0,t=arguments.length,n=new("function"==typeof this?this:Array)(t);while(t>e)s(n,e,arguments[e++]);return n.length=t,n}})},"5e89":function(e,t,n){var i=n("861d"),r=Math.floor;e.exports=function(e){return!i(e)&&isFinite(e)&&r(e)===e}},"5f96":function(e,t,n){"use strict";var i=n("ebb5"),r=i.aTypedArray,s=i.exportTypedArrayMethod,a=[].join;s("join",(function(e){return a.apply(r(this),arguments)}))},"5fb2":function(e,t,n){"use strict";var i=2147483647,r=36,s=1,a=26,o=38,c=700,l=72,u=128,d="-",h=/[^\0-\u007E]/,f=/[.\u3002\uFF0E\uFF61]/g,p="Overflow: input needs wider integers to process",g=r-s,m=Math.floor,v=String.fromCharCode,b=function(e){var t=[],n=0,i=e.length;while(n=55296&&r<=56319&&n>1,e+=m(e/t);e>g*a>>1;i+=r)e=m(e/g);return m(i+(g+1)*e/(e+o))},_=function(e){var t=[];e=b(e);var n,o,c=e.length,h=u,f=0,g=l;for(n=0;n=h&&om((i-f)/A))throw RangeError(p);for(f+=(k-h)*A,h=k,n=0;ni)throw RangeError(p);if(o==h){for(var C=f,E=r;;E+=r){var S=E<=g?s:E>=g+a?a:E-g;if(Cu){var f,p=l(arguments[u++]),g=d?s(p).concat(d(p)):s(p),m=g.length,v=0;while(m>v)f=g[v++],i&&!h.call(p,f)||(n[f]=p[f])}return n}:u},"611e":function(e,t,n){"use strict";n("f7e3")},"614c":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("h3",[e._v("Fuel Injection System")]),e.state["device"]?[n("vui-item",{attrs:{label:"Input:"}},[e.state.device.power?n("span",[e._v("Injecting")]):n("span",[e._v("On Hold")]),n("vui-button",{attrs:{params:{in_toggle_injector:1}}},[e._v("Toggle Power")])],1),n("vui-item",{attrs:{label:"Rate:"}},[e._v(e._s(e.state.device.rate)+" L/s")]),n("vui-item",{attrs:{label:"Automated Fuel Injection:"}},[e.state.device.automation?n("vui-button",{attrs:{params:{toggle_automation:1}}},[e._v("Engaged")]):n("vui-button",{attrs:{params:{toggle_automation:1}}},[e._v("Disengaged")])],1),n("vui-item",{attrs:{label:"Inject:"}},[e.state.device.automation?[e._v("Controls Locked Out")]:[n("vui-button",{attrs:{params:{toggle_injector:1},icon:"power-off"}},[e._v("Toggle Power")]),n("vui-button",{attrs:{params:{injection:1}}},[e._v("Inject (1 Cycle)")])]],2)]:n("vui-button",{attrs:{params:{in_refresh_status:1}}},[e._v("Search for device")])],2)},r=[],s={data:function(){return this.$root.$data}},a=s,o=n("2877"),c=Object(o["a"])(a,i,r,!1,null,null,null);t["default"]=c.exports},"621a":function(e,t,n){"use strict";var i=n("da84"),r=n("83ab"),s=n("a981"),a=n("9112"),o=n("e2cc"),c=n("d039"),l=n("19aa"),u=n("a691"),d=n("50c4"),h=n("0b25"),f=n("77a7"),p=n("e163"),g=n("d2bb"),m=n("241c").f,v=n("9bf2").f,b=n("81d5"),y=n("d44e"),w=n("69f3"),_=w.get,x=w.set,k="ArrayBuffer",A="DataView",C="prototype",E="Wrong length",S="Wrong index",F=i[k],$=F,T=i[A],L=T&&T[C],D=Object.prototype,B=i.RangeError,R=f.pack,O=f.unpack,M=function(e){return[255&e]},j=function(e){return[255&e,e>>8&255]},I=function(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]},P=function(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]},N=function(e){return R(e,23,4)},W=function(e){return R(e,52,8)},H=function(e,t){v(e[C],t,{get:function(){return _(this)[t]}})},V=function(e,t,n,i){var r=h(n),s=_(e);if(r+t>s.byteLength)throw B(S);var a=_(s.buffer).bytes,o=r+s.byteOffset,c=a.slice(o,o+t);return i?c:c.reverse()},U=function(e,t,n,i,r,s){var a=h(n),o=_(e);if(a+t>o.byteLength)throw B(S);for(var c=_(o.buffer).bytes,l=a+o.byteOffset,u=i(+r),d=0;dK;)(z=q[K++])in $||a($,z,F[z]);G.constructor=$}g&&p(L)!==D&&g(L,D);var Y=new T(new $(2)),X=L.setInt8;Y.setInt8(0,2147483648),Y.setInt8(1,2147483649),!Y.getInt8(0)&&Y.getInt8(1)||o(L,{setInt8:function(e,t){X.call(this,e,t<<24>>24)},setUint8:function(e,t){X.call(this,e,t<<24>>24)}},{unsafe:!0})}else $=function(e){l(this,$,k);var t=h(e);x(this,{bytes:b.call(new Array(t),0),byteLength:t}),r||(this.byteLength=t)},T=function(e,t,n){l(this,T,A),l(e,$,A);var i=_(e).byteLength,s=u(t);if(s<0||s>i)throw B("Wrong offset");if(n=void 0===n?i-s:d(n),s+n>i)throw B(E);x(this,{buffer:e,byteLength:n,byteOffset:s}),r||(this.buffer=e,this.byteLength=n,this.byteOffset=s)},r&&(H($,"byteLength"),H(T,"buffer"),H(T,"byteLength"),H(T,"byteOffset")),o(T[C],{getInt8:function(e){return V(this,1,e)[0]<<24>>24},getUint8:function(e){return V(this,1,e)[0]},getInt16:function(e){var t=V(this,2,e,arguments.length>1?arguments[1]:void 0);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=V(this,2,e,arguments.length>1?arguments[1]:void 0);return t[1]<<8|t[0]},getInt32:function(e){return P(V(this,4,e,arguments.length>1?arguments[1]:void 0))},getUint32:function(e){return P(V(this,4,e,arguments.length>1?arguments[1]:void 0))>>>0},getFloat32:function(e){return O(V(this,4,e,arguments.length>1?arguments[1]:void 0),23)},getFloat64:function(e){return O(V(this,8,e,arguments.length>1?arguments[1]:void 0),52)},setInt8:function(e,t){U(this,1,e,M,t)},setUint8:function(e,t){U(this,1,e,M,t)},setInt16:function(e,t){U(this,2,e,j,t,arguments.length>2?arguments[2]:void 0)},setUint16:function(e,t){U(this,2,e,j,t,arguments.length>2?arguments[2]:void 0)},setInt32:function(e,t){U(this,4,e,I,t,arguments.length>2?arguments[2]:void 0)},setUint32:function(e,t){U(this,4,e,I,t,arguments.length>2?arguments[2]:void 0)},setFloat32:function(e,t){U(this,4,e,N,t,arguments.length>2?arguments[2]:void 0)},setFloat64:function(e,t){U(this,8,e,W,t,arguments.length>2?arguments[2]:void 0)}});y($,k),y(T,A),e.exports={ArrayBuffer:$,DataView:T}},6292:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("vui-button",{directives:[{name:"show",rawName:"v-show",value:!e.creating,expression:"!creating"}],on:{click:function(t){e.creating=!0}}},[e._v("New")]),e.creating?[n("input",{directives:[{name:"model",rawName:"v-model",value:e.newname,expression:"newname"}],attrs:{type:"text"},domProps:{value:e.newname},on:{input:function(t){t.target.composing||(e.newname=t.target.value)}}}),n("vui-button",{on:{click:function(t){return e.newFile()}}},[e._v("Create")])]:e._e(),n("h2",[e._v("Available files:")]),n("table",[e._m(0),e._l(e.s.files,(function(t){return n("tr",{key:t.name},[n("td",[e._v(e._s(t.name))]),n("td",[e._v(e._s(t.type))]),n("td",[e._v(e._s(t.size)+"GQ")]),n("td",[n("vui-button",{attrs:{params:{execute_file:t.name}}},[e._v("Execute")]),n("vui-button",{attrs:{params:{edit_file:t.name}}},[e._v("Edit")])],1)])}))],2)],2)},r=[function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("tr",[n("th",[e._v("File name")]),n("th",[e._v("File type")]),n("th",[e._v("File size (GQ)")]),n("th",[e._v("Operations")])])}],s=n("025e"),a={data:function(){return{s:this.$root.$data.state,creating:!1,newname:""}},methods:{newFile:function(){s["a"].sendToTopic({new:this.newname}),this.newname="",this.creating=!1}}},o=a,c=n("2877"),l=Object(c["a"])(o,i,r,!1,null,null,null);t["default"]=l.exports},"63bf":function(e,t,n){},"649e":function(e,t,n){"use strict";var i=n("ebb5"),r=n("b727").some,s=i.aTypedArray,a=i.exportTypedArrayMethod;a("some",(function(e){return r(s(this),e,arguments.length>1?arguments[1]:void 0)}))},"64e5":function(e,t,n){"use strict";var i=n("d039"),r=n("0ccb").start,s=Math.abs,a=Date.prototype,o=a.getTime,c=a.toISOString;e.exports=i((function(){return"0385-07-25T07:06:39.999Z"!=c.call(new Date(-50000000000001))}))||!i((function(){c.call(new Date(NaN))}))?function(){if(!isFinite(o.call(this)))throw RangeError("Invalid time value");var e=this,t=e.getUTCFullYear(),n=e.getUTCMilliseconds(),i=t<0?"-":t>9999?"+":"";return i+r(s(t),i?6:4,0)+"-"+r(e.getUTCMonth()+1,2,0)+"-"+r(e.getUTCDate(),2,0)+"T"+r(e.getUTCHours(),2,0)+":"+r(e.getUTCMinutes(),2,0)+":"+r(e.getUTCSeconds(),2,0)+"."+r(n,3,0)+"Z"}:c},6547:function(e,t,n){var i=n("a691"),r=n("1d80"),s=function(e){return function(t,n){var s,a,o=String(r(t)),c=i(n),l=o.length;return c<0||c>=l?e?"":void 0:(s=o.charCodeAt(c),s<55296||s>56319||c+1===l||(a=o.charCodeAt(c+1))<56320||a>57343?e?o.charAt(c):s:e?o.slice(c,c+2):a-56320+(s-55296<<10)+65536)}};e.exports={codeAt:s(!1),charAt:s(!0)}},6566:function(e,t,n){"use strict";var i=n("9bf2").f,r=n("7c73"),s=n("e2cc"),a=n("0366"),o=n("19aa"),c=n("2266"),l=n("7dd0"),u=n("2626"),d=n("83ab"),h=n("f183").fastKey,f=n("69f3"),p=f.set,g=f.getterFor;e.exports={getConstructor:function(e,t,n,l){var u=e((function(e,i){o(e,u,t),p(e,{type:t,index:r(null),first:void 0,last:void 0,size:0}),d||(e.size=0),void 0!=i&&c(i,e[l],{that:e,AS_ENTRIES:n})})),f=g(t),m=function(e,t,n){var i,r,s=f(e),a=v(e,t);return a?a.value=n:(s.last=a={index:r=h(t,!0),key:t,value:n,previous:i=s.last,next:void 0,removed:!1},s.first||(s.first=a),i&&(i.next=a),d?s.size++:e.size++,"F"!==r&&(s.index[r]=a)),e},v=function(e,t){var n,i=f(e),r=h(t);if("F"!==r)return i.index[r];for(n=i.first;n;n=n.next)if(n.key==t)return n};return s(u.prototype,{clear:function(){var e=this,t=f(e),n=t.index,i=t.first;while(i)i.removed=!0,i.previous&&(i.previous=i.previous.next=void 0),delete n[i.index],i=i.next;t.first=t.last=void 0,d?t.size=0:e.size=0},delete:function(e){var t=this,n=f(t),i=v(t,e);if(i){var r=i.next,s=i.previous;delete n.index[i.index],i.removed=!0,s&&(s.next=r),r&&(r.previous=s),n.first==i&&(n.first=r),n.last==i&&(n.last=s),d?n.size--:t.size--}return!!i},forEach:function(e){var t,n=f(this),i=a(e,arguments.length>1?arguments[1]:void 0,3);while(t=t?t.next:n.first){i(t.value,t.key,this);while(t&&t.removed)t=t.previous}},has:function(e){return!!v(this,e)}}),s(u.prototype,n?{get:function(e){var t=v(this,e);return t&&t.value},set:function(e,t){return m(this,0===e?0:e,t)}}:{add:function(e){return m(this,e=0===e?0:e,e)}}),d&&i(u.prototype,"size",{get:function(){return f(this).size}}),u},setStrong:function(e,t,n){var i=t+" Iterator",r=g(t),s=g(i);l(e,t,(function(e,t){p(this,{type:i,target:e,state:r(e),kind:t,last:void 0})}),(function(){var e=s(this),t=e.kind,n=e.last;while(n&&n.removed)n=n.previous;return e.target&&(e.last=n=n?n.next:e.state.first)?"keys"==t?{value:n.key,done:!1}:"values"==t?{value:n.value,done:!1}:{value:[n.key,n.value],done:!1}:(e.target=void 0,{value:void 0,done:!0})}),n?"entries":"values",!n,!0),u(t)}}},"65f0":function(e,t,n){var i=n("861d"),r=n("e8b5"),s=n("b622"),a=s("species");e.exports=function(e,t){var n;return r(e)&&(n=e.constructor,"function"!=typeof n||n!==Array&&!r(n.prototype)?i(n)&&(n=n[a],null===n&&(n=void 0)):n=void 0),new(void 0===n?Array:n)(0===t?0:t)}},"664f":function(e,t,n){"use strict";var i=n("23e7"),r=n("857a"),s=n("af03");i({target:"String",proto:!0,forced:s("sup")},{sup:function(){return r(this,"sup","","")}})},6747:function(e,t){var n=Array.isArray;e.exports=n},6814:function(e,t,n){},"682e":function(e,t,n){"use strict";n("9513")},6836:function(e,t,n){},"69f3":function(e,t,n){var i,r,s,a=n("7f9a"),o=n("da84"),c=n("861d"),l=n("9112"),u=n("5135"),d=n("c6cd"),h=n("f772"),f=n("d012"),p=o.WeakMap,g=function(e){return s(e)?r(e):i(e,{})},m=function(e){return function(t){var n;if(!c(t)||(n=r(t)).type!==e)throw TypeError("Incompatible receiver, "+e+" required");return n}};if(a){var v=d.state||(d.state=new p),b=v.get,y=v.has,w=v.set;i=function(e,t){return t.facade=e,w.call(v,e,t),t},r=function(e){return b.call(v,e)||{}},s=function(e){return y.call(v,e)}}else{var _=h("state");f[_]=!0,i=function(e,t){return t.facade=e,l(e,_,t),t},r=function(e){return u(e,_)?e[_]:{}},s=function(e){return u(e,_)}}e.exports={set:i,get:r,has:s,enforce:g,getterFor:m}},"6a01":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[e.state.toner?n("span",[e._v("Current toner level: "+e._s(e.state.toner))]):e._e(),n("br"),e.state.gotitem?n("vui-button",{attrs:{params:{remove:1}}},[e._v("Remove Item")]):e._e(),n("br"),e.state.toner?[e.state.gotitem?[n("div",{staticClass:"itemLabel copylabel"},[e._v("Copies to print:")]),n("div",{staticClass:"copyBlock"},[n("vui-input-numeric",{attrs:{width:"2.5em",min:1,max:e.state.maxcopies},model:{value:e.state.copies,callback:function(t){e.$set(e.state,"copies",t)},expression:"state.copies"}}),n("br"),n("vui-button",{attrs:{"push-state":"",params:{copy:1}}},[e._v("Copy")])],1)]:[n("h3",[e._v("Please insert something to copy.")])],n("br"),e.state.isAI?n("vui-button",{attrs:{params:{aipic:1}}},[e._v("Print photo from database")]):e._e()]:[n("h2",[e._v("Please insert a new toner cartridge!")])]],2)},r=[],s={data:function(){return this.$root.$data}},a=s,o=(n("7dc4"),n("2877")),c=Object(o["a"])(a,i,r,!1,null,"927b9430",null);t["default"]=c.exports},"6a21":function(e,t){ace.define("ace/snippets/javascript",["require","exports","module"],(function(e,t,n){"use strict";t.snippetText='# Prototype\nsnippet proto\n\t${1:class_name}.prototype.${2:method_name} = function(${3:first_argument}) {\n\t\t${4:// body...}\n\t};\n# Function\nsnippet fun\n\tfunction ${1?:function_name}(${2:argument}) {\n\t\t${3:// body...}\n\t}\n# Anonymous Function\nregex /((=)\\s*|(:)\\s*|(\\()|\\b)/f/(\\))?/\nsnippet f\n\tfunction${M1?: ${1:functionName}}($2) {\n\t\t${0:$TM_SELECTED_TEXT}\n\t}${M2?;}${M3?,}${M4?)}\n# Immediate function\ntrigger \\(?f\\(\nendTrigger \\)?\nsnippet f(\n\t(function(${1}) {\n\t\t${0:${TM_SELECTED_TEXT:/* code */}}\n\t}(${1}));\n# if\nsnippet if\n\tif (${1:true}) {\n\t\t${0}\n\t}\n# if ... else\nsnippet ife\n\tif (${1:true}) {\n\t\t${2}\n\t} else {\n\t\t${0}\n\t}\n# tertiary conditional\nsnippet ter\n\t${1:/* condition */} ? ${2:a} : ${3:b}\n# switch\nsnippet switch\n\tswitch (${1:expression}) {\n\t\tcase \'${3:case}\':\n\t\t\t${4:// code}\n\t\t\tbreak;\n\t\t${5}\n\t\tdefault:\n\t\t\t${2:// code}\n\t}\n# case\nsnippet case\n\tcase \'${1:case}\':\n\t\t${2:// code}\n\t\tbreak;\n\t${3}\n\n# while (...) {...}\nsnippet wh\n\twhile (${1:/* condition */}) {\n\t\t${0:/* code */}\n\t}\n# try\nsnippet try\n\ttry {\n\t\t${0:/* code */}\n\t} catch (e) {}\n# do...while\nsnippet do\n\tdo {\n\t\t${2:/* code */}\n\t} while (${1:/* condition */});\n# Object Method\nsnippet :f\nregex /([,{[])|^\\s*/:f/\n\t${1:method_name}: function(${2:attribute}) {\n\t\t${0}\n\t}${3:,}\n# setTimeout function\nsnippet setTimeout\nregex /\\b/st|timeout|setTimeo?u?t?/\n\tsetTimeout(function() {${3:$TM_SELECTED_TEXT}}, ${1:10});\n# Get Elements\nsnippet gett\n\tgetElementsBy${1:TagName}(\'${2}\')${3}\n# Get Element\nsnippet get\n\tgetElementBy${1:Id}(\'${2}\')${3}\n# console.log (Firebug)\nsnippet cl\n\tconsole.log(${1});\n# return\nsnippet ret\n\treturn ${1:result}\n# for (property in object ) { ... }\nsnippet fori\n\tfor (var ${1:prop} in ${2:Things}) {\n\t\t${0:$2[$1]}\n\t}\n# hasOwnProperty\nsnippet has\n\thasOwnProperty(${1})\n# docstring\nsnippet /**\n\t/**\n\t * ${1:description}\n\t *\n\t */\nsnippet @par\nregex /^\\s*\\*\\s*/@(para?m?)?/\n\t@param {${1:type}} ${2:name} ${3:description}\nsnippet @ret\n\t@return {${1:type}} ${2:description}\n# JSON.parse\nsnippet jsonp\n\tJSON.parse(${1:jstr});\n# JSON.stringify\nsnippet jsons\n\tJSON.stringify(${1:object});\n# self-defining function\nsnippet sdf\n\tvar ${1:function_name} = function(${2:argument}) {\n\t\t${3:// initial code ...}\n\n\t\t$1 = function($2) {\n\t\t\t${4:// main code}\n\t\t};\n\t}\n# singleton\nsnippet sing\n\tfunction ${1:Singleton} (${2:argument}) {\n\t\t// the cached instance\n\t\tvar instance;\n\n\t\t// rewrite the constructor\n\t\t$1 = function $1($2) {\n\t\t\treturn instance;\n\t\t};\n\t\t\n\t\t// carry over the prototype properties\n\t\t$1.prototype = this;\n\n\t\t// the instance\n\t\tinstance = new $1();\n\n\t\t// reset the constructor pointer\n\t\tinstance.constructor = $1;\n\n\t\t${3:// code ...}\n\n\t\treturn instance;\n\t}\n# class\nsnippet class\nregex /^\\s*/clas{0,2}/\n\tvar ${1:class} = function(${20}) {\n\t\t$40$0\n\t};\n\t\n\t(function() {\n\t\t${60:this.prop = ""}\n\t}).call(${1:class}.prototype);\n\t\n\texports.${1:class} = ${1:class};\n# \nsnippet for-\n\tfor (var ${1:i} = ${2:Things}.length; ${1:i}--; ) {\n\t\t${0:${2:Things}[${1:i}];}\n\t}\n# for (...) {...}\nsnippet for\n\tfor (var ${1:i} = 0; $1 < ${2:Things}.length; $1++) {\n\t\t${3:$2[$1]}$0\n\t}\n# for (...) {...} (Improved Native For-Loop)\nsnippet forr\n\tfor (var ${1:i} = ${2:Things}.length - 1; $1 >= 0; $1--) {\n\t\t${3:$2[$1]}$0\n\t}\n\n\n#modules\nsnippet def\n\tdefine(function(require, exports, module) {\n\t"use strict";\n\tvar ${1/.*\\///} = require("${1}");\n\t\n\t$TM_SELECTED_TEXT\n\t});\nsnippet req\nguard ^\\s*\n\tvar ${1/.*\\///} = require("${1}");\n\t$0\nsnippet requ\nguard ^\\s*\n\tvar ${1/.*\\/(.)/\\u$1/} = require("${1}").${1/.*\\/(.)/\\u$1/};\n\t$0\n',t.scope="javascript"}))},"6ac0":function(e,t){function n(e,t,n,i){var r=-1,s=null==e?0:e.length;i&&s&&(n=e[++r]);while(++r ["+this.end.row+"/"+this.end.column+"]"},this.contains=function(row,column){return 0==this.compare(row,column)},this.compareRange=function(range){var cmp,end=range.end,start=range.start;return cmp=this.compare(end.row,end.column),1==cmp?(cmp=this.compare(start.row,start.column),1==cmp?2:0==cmp?1:0):-1==cmp?-2:(cmp=this.compare(start.row,start.column),-1==cmp?-1:1==cmp?42:0)},this.comparePoint=function(p){return this.compare(p.row,p.column)},this.containsRange=function(range){return 0==this.comparePoint(range.start)&&0==this.comparePoint(range.end)},this.intersects=function(range){var cmp=this.compareRange(range);return-1==cmp||0==cmp||1==cmp},this.isEnd=function(row,column){return this.end.row==row&&this.end.column==column},this.isStart=function(row,column){return this.start.row==row&&this.start.column==column},this.setStart=function(row,column){"object"==typeof row?(this.start.column=row.column,this.start.row=row.row):(this.start.row=row,this.start.column=column)},this.setEnd=function(row,column){"object"==typeof row?(this.end.column=row.column,this.end.row=row.row):(this.end.row=row,this.end.column=column)},this.inside=function(row,column){return 0==this.compare(row,column)?this.isEnd(row,column)||this.isStart(row,column)?!1:!0:!1},this.insideStart=function(row,column){return 0==this.compare(row,column)?this.isEnd(row,column)?!1:!0:!1},this.insideEnd=function(row,column){return 0==this.compare(row,column)?this.isStart(row,column)?!1:!0:!1},this.compare=function(row,column){return this.isMultiLine()||row!==this.start.row?this.start.row>row?-1:row>this.end.row?1:this.start.row===row?column>=this.start.column?0:-1:this.end.row===row?this.end.column>=column?0:1:0:this.start.column>column?-1:column>this.end.column?1:0},this.compareStart=function(row,column){return this.start.row==row&&this.start.column==column?-1:this.compare(row,column)},this.compareEnd=function(row,column){return this.end.row==row&&this.end.column==column?1:this.compare(row,column)},this.compareInside=function(row,column){return this.end.row==row&&this.end.column==column?1:this.start.row==row&&this.start.column==column?-1:this.compare(row,column)},this.clipRows=function(firstRow,lastRow){if(this.end.row>lastRow)var end={row:lastRow+1,column:0};else if(firstRow>this.end.row)var end={row:firstRow,column:0};if(this.start.row>lastRow)var start={row:lastRow+1,column:0};else if(firstRow>this.start.row)var start={row:firstRow,column:0};return Range.fromPoints(start||this.start,end||this.end)},this.extend=function(row,column){var cmp=this.compare(row,column);if(0==cmp)return this;if(-1==cmp)var start={row:row,column:column};else var end={row:row,column:column};return Range.fromPoints(start||this.start,end||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return Range.fromPoints(this.start,this.end)},this.collapseRows=function(){return 0==this.end.column?new Range(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new Range(this.start.row,0,this.end.row,0)},this.toScreenRange=function(session){var screenPosStart=session.documentToScreenPosition(this.start),screenPosEnd=session.documentToScreenPosition(this.end);return new Range(screenPosStart.row,screenPosStart.column,screenPosEnd.row,screenPosEnd.column)},this.moveBy=function(row,column){this.start.row+=row,this.start.column+=column,this.end.row+=row,this.end.column+=column}}).call(Range.prototype),Range.fromPoints=function(start,end){return new Range(start.row,start.column,end.row,end.column)},Range.comparePoints=comparePoints,Range.comparePoints=function(p1,p2){return p1.row-p2.row||p1.column-p2.column},exports.Range=Range}),ace.define("ace/apply_delta",["require","exports","module"],function(acequire,exports){"use strict";exports.applyDelta=function(docLines,delta){var row=delta.start.row,startColumn=delta.start.column,line=docLines[row]||"";switch(delta.action){case"insert":var lines=delta.lines;if(1===lines.length)docLines[row]=line.substring(0,startColumn)+delta.lines[0]+line.substring(startColumn);else{var args=[row,1].concat(delta.lines);docLines.splice.apply(docLines,args),docLines[row]=line.substring(0,startColumn)+docLines[row],docLines[row+delta.lines.length-1]+=line.substring(startColumn)}break;case"remove":var endColumn=delta.end.column,endRow=delta.end.row;row===endRow?docLines[row]=line.substring(0,startColumn)+line.substring(endColumn):docLines.splice(row,endRow-row+1,line.substring(0,startColumn)+docLines[endRow].substring(endColumn))}}}),ace.define("ace/lib/event_emitter",["require","exports","module"],function(acequire,exports){"use strict";var EventEmitter={},stopPropagation=function(){this.propagationStopped=!0},preventDefault=function(){this.defaultPrevented=!0};EventEmitter._emit=EventEmitter._dispatchEvent=function(eventName,e){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var listeners=this._eventRegistry[eventName]||[],defaultHandler=this._defaultHandlers[eventName];if(listeners.length||defaultHandler){"object"==typeof e&&e||(e={}),e.type||(e.type=eventName),e.stopPropagation||(e.stopPropagation=stopPropagation),e.preventDefault||(e.preventDefault=preventDefault),listeners=listeners.slice();for(var i=0;listeners.length>i&&(listeners[i](e,this),!e.propagationStopped);i++);return defaultHandler&&!e.defaultPrevented?defaultHandler(e,this):void 0}},EventEmitter._signal=function(eventName,e){var listeners=(this._eventRegistry||{})[eventName];if(listeners){listeners=listeners.slice();for(var i=0;listeners.length>i;i++)listeners[i](e,this)}},EventEmitter.once=function(eventName,callback){var _self=this;callback&&this.addEventListener(eventName,function newCallback(){_self.removeEventListener(eventName,newCallback),callback.apply(null,arguments)})},EventEmitter.setDefaultHandler=function(eventName,callback){var handlers=this._defaultHandlers;if(handlers||(handlers=this._defaultHandlers={_disabled_:{}}),handlers[eventName]){var old=handlers[eventName],disabled=handlers._disabled_[eventName];disabled||(handlers._disabled_[eventName]=disabled=[]),disabled.push(old);var i=disabled.indexOf(callback);-1!=i&&disabled.splice(i,1)}handlers[eventName]=callback},EventEmitter.removeDefaultHandler=function(eventName,callback){var handlers=this._defaultHandlers;if(handlers){var disabled=handlers._disabled_[eventName];if(handlers[eventName]==callback)handlers[eventName],disabled&&this.setDefaultHandler(eventName,disabled.pop());else if(disabled){var i=disabled.indexOf(callback);-1!=i&&disabled.splice(i,1)}}},EventEmitter.on=EventEmitter.addEventListener=function(eventName,callback,capturing){this._eventRegistry=this._eventRegistry||{};var listeners=this._eventRegistry[eventName];return listeners||(listeners=this._eventRegistry[eventName]=[]),-1==listeners.indexOf(callback)&&listeners[capturing?"unshift":"push"](callback),callback},EventEmitter.off=EventEmitter.removeListener=EventEmitter.removeEventListener=function(eventName,callback){this._eventRegistry=this._eventRegistry||{};var listeners=this._eventRegistry[eventName];if(listeners){var index=listeners.indexOf(callback);-1!==index&&listeners.splice(index,1)}},EventEmitter.removeAllListeners=function(eventName){this._eventRegistry&&(this._eventRegistry[eventName]=[])},exports.EventEmitter=EventEmitter}),ace.define("ace/anchor",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"],function(acequire,exports){"use strict";var oop=acequire("./lib/oop"),EventEmitter=acequire("./lib/event_emitter").EventEmitter,Anchor=exports.Anchor=function(doc,row,column){this.$onChange=this.onChange.bind(this),this.attach(doc),column===void 0?this.setPosition(row.row,row.column):this.setPosition(row,column)};(function(){function $pointsInOrder(point1,point2,equalPointsInOrder){var bColIsAfter=equalPointsInOrder?point1.column<=point2.column:point1.columnthis.row)){var point=$getTransformedPoint(delta,{row:this.row,column:this.column},this.$insertRight);this.setPosition(point.row,point.column,!0)}},this.setPosition=function(row,column,noClip){var pos;if(pos=noClip?{row:row,column:column}:this.$clipPositionToDocument(row,column),this.row!=pos.row||this.column!=pos.column){var old={row:this.row,column:this.column};this.row=pos.row,this.column=pos.column,this._signal("change",{old:old,value:pos})}},this.detach=function(){this.document.removeEventListener("change",this.$onChange)},this.attach=function(doc){this.document=doc||this.document,this.document.on("change",this.$onChange)},this.$clipPositionToDocument=function(row,column){var pos={};return row>=this.document.getLength()?(pos.row=Math.max(0,this.document.getLength()-1),pos.column=this.document.getLine(pos.row).length):0>row?(pos.row=0,pos.column=0):(pos.row=row,pos.column=Math.min(this.document.getLine(pos.row).length,Math.max(0,column))),0>column&&(pos.column=0),pos}}).call(Anchor.prototype)}),ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"],function(acequire,exports){"use strict";var oop=acequire("./lib/oop"),applyDelta=acequire("./apply_delta").applyDelta,EventEmitter=acequire("./lib/event_emitter").EventEmitter,Range=acequire("./range").Range,Anchor=acequire("./anchor").Anchor,Document=function(textOrLines){this.$lines=[""],0===textOrLines.length?this.$lines=[""]:Array.isArray(textOrLines)?this.insertMergedLines({row:0,column:0},textOrLines):this.insert({row:0,column:0},textOrLines)};(function(){oop.implement(this,EventEmitter),this.setValue=function(text){var len=this.getLength()-1;this.remove(new Range(0,0,len,this.getLine(len).length)),this.insert({row:0,column:0},text)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(row,column){return new Anchor(this,row,column)},this.$split=0==="aaa".split(/a/).length?function(text){return text.replace(/\\r\\n|\\r/g,"\\n").split("\\n")}:function(text){return text.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(text){var match=text.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=match?match[1]:"\\n",this._signal("changeNewLineMode")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case"windows":return"\\r\\n";case"unix":return"\\n";default:return this.$autoNewLine||"\\n"}},this.$autoNewLine="",this.$newLineMode="auto",this.setNewLineMode=function(newLineMode){this.$newLineMode!==newLineMode&&(this.$newLineMode=newLineMode,this._signal("changeNewLineMode"))},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(text){return"\\r\\n"==text||"\\r"==text||"\\n"==text},this.getLine=function(row){return this.$lines[row]||""},this.getLines=function(firstRow,lastRow){return this.$lines.slice(firstRow,lastRow+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(range){return this.getLinesForRange(range).join(this.getNewLineCharacter())},this.getLinesForRange=function(range){var lines;if(range.start.row===range.end.row)lines=[this.getLine(range.start.row).substring(range.start.column,range.end.column)];else{lines=this.getLines(range.start.row,range.end.row),lines[0]=(lines[0]||"").substring(range.start.column);var l=lines.length-1;range.end.row-range.start.row==l&&(lines[l]=lines[l].substring(0,range.end.column))}return lines},this.insertLines=function(row,lines){return console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."),this.insertFullLines(row,lines)},this.removeLines=function(firstRow,lastRow){return console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."),this.removeFullLines(firstRow,lastRow)},this.insertNewLine=function(position){return console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, [\'\', \'\']) instead."),this.insertMergedLines(position,["",""])},this.insert=function(position,text){return 1>=this.getLength()&&this.$detectNewLine(text),this.insertMergedLines(position,this.$split(text))},this.insertInLine=function(position,text){var start=this.clippedPos(position.row,position.column),end=this.pos(position.row,position.column+text.length);return this.applyDelta({start:start,end:end,action:"insert",lines:[text]},!0),this.clonePos(end)},this.clippedPos=function(row,column){var length=this.getLength();void 0===row?row=length:0>row?row=0:row>=length&&(row=length-1,column=void 0);var line=this.getLine(row);return void 0==column&&(column=line.length),column=Math.min(Math.max(column,0),line.length),{row:row,column:column}},this.clonePos=function(pos){return{row:pos.row,column:pos.column}},this.pos=function(row,column){return{row:row,column:column}},this.$clipPosition=function(position){var length=this.getLength();return position.row>=length?(position.row=Math.max(0,length-1),position.column=this.getLine(length-1).length):(position.row=Math.max(0,position.row),position.column=Math.min(Math.max(position.column,0),this.getLine(position.row).length)),position},this.insertFullLines=function(row,lines){row=Math.min(Math.max(row,0),this.getLength());var column=0;this.getLength()>row?(lines=lines.concat([""]),column=0):(lines=[""].concat(lines),row--,column=this.$lines[row].length),this.insertMergedLines({row:row,column:column},lines)},this.insertMergedLines=function(position,lines){var start=this.clippedPos(position.row,position.column),end={row:start.row+lines.length-1,column:(1==lines.length?start.column:0)+lines[lines.length-1].length};return this.applyDelta({start:start,end:end,action:"insert",lines:lines}),this.clonePos(end)},this.remove=function(range){var start=this.clippedPos(range.start.row,range.start.column),end=this.clippedPos(range.end.row,range.end.column);return this.applyDelta({start:start,end:end,action:"remove",lines:this.getLinesForRange({start:start,end:end})}),this.clonePos(start)},this.removeInLine=function(row,startColumn,endColumn){var start=this.clippedPos(row,startColumn),end=this.clippedPos(row,endColumn);return this.applyDelta({start:start,end:end,action:"remove",lines:this.getLinesForRange({start:start,end:end})},!0),this.clonePos(start)},this.removeFullLines=function(firstRow,lastRow){firstRow=Math.min(Math.max(0,firstRow),this.getLength()-1),lastRow=Math.min(Math.max(0,lastRow),this.getLength()-1);var deleteFirstNewLine=lastRow==this.getLength()-1&&firstRow>0,deleteLastNewLine=this.getLength()-1>lastRow,startRow=deleteFirstNewLine?firstRow-1:firstRow,startCol=deleteFirstNewLine?this.getLine(startRow).length:0,endRow=deleteLastNewLine?lastRow+1:lastRow,endCol=deleteLastNewLine?0:this.getLine(endRow).length,range=new Range(startRow,startCol,endRow,endCol),deletedLines=this.$lines.slice(firstRow,lastRow+1);return this.applyDelta({start:range.start,end:range.end,action:"remove",lines:this.getLinesForRange(range)}),deletedLines},this.removeNewLine=function(row){this.getLength()-1>row&&row>=0&&this.applyDelta({start:this.pos(row,this.getLine(row).length),end:this.pos(row+1,0),action:"remove",lines:["",""]})},this.replace=function(range,text){if(range instanceof Range||(range=Range.fromPoints(range.start,range.end)),0===text.length&&range.isEmpty())return range.start;if(text==this.getTextRange(range))return range.end;this.remove(range);var end;return end=text?this.insert(range.start,text):range.start},this.applyDeltas=function(deltas){for(var i=0;deltas.length>i;i++)this.applyDelta(deltas[i])},this.revertDeltas=function(deltas){for(var i=deltas.length-1;i>=0;i--)this.revertDelta(deltas[i])},this.applyDelta=function(delta,doNotValidate){var isInsert="insert"==delta.action;(isInsert?1>=delta.lines.length&&!delta.lines[0]:!Range.comparePoints(delta.start,delta.end))||(isInsert&&delta.lines.length>2e4&&this.$splitAndapplyLargeDelta(delta,2e4),applyDelta(this.$lines,delta,doNotValidate),this._signal("change",delta))},this.$splitAndapplyLargeDelta=function(delta,MAX){for(var lines=delta.lines,l=lines.length,row=delta.start.row,column=delta.start.column,from=0,to=0;;){from=to,to+=MAX-1;var chunk=lines.slice(from,to);if(to>l){delta.lines=chunk,delta.start.row=row+from,delta.start.column=column;break}chunk.push(""),this.applyDelta({start:this.pos(row+from,column),end:this.pos(row+to,column=0),action:delta.action,lines:chunk},!0)}},this.revertDelta=function(delta){this.applyDelta({start:this.clonePos(delta.start),end:this.clonePos(delta.end),action:"insert"==delta.action?"remove":"insert",lines:delta.lines.slice()})},this.indexToPosition=function(index,startRow){for(var lines=this.$lines||this.getAllLines(),newlineLength=this.getNewLineCharacter().length,i=startRow||0,l=lines.length;l>i;i++)if(index-=lines[i].length+newlineLength,0>index)return{row:i,column:index+lines[i].length+newlineLength};return{row:l-1,column:lines[l-1].length}},this.positionToIndex=function(pos,startRow){for(var lines=this.$lines||this.getAllLines(),newlineLength=this.getNewLineCharacter().length,index=0,row=Math.min(pos.row,lines.length),i=startRow||0;row>i;++i)index+=lines[i].length+newlineLength;return index+pos.column}}).call(Document.prototype),exports.Document=Document}),ace.define("ace/lib/lang",["require","exports","module"],function(acequire,exports){"use strict";exports.last=function(a){return a[a.length-1]},exports.stringReverse=function(string){return string.split("").reverse().join("")},exports.stringRepeat=function(string,count){for(var result="";count>0;)1&count&&(result+=string),(count>>=1)&&(string+=string);return result};var trimBeginRegexp=/^\\s\\s*/,trimEndRegexp=/\\s\\s*$/;exports.stringTrimLeft=function(string){return string.replace(trimBeginRegexp,"")},exports.stringTrimRight=function(string){return string.replace(trimEndRegexp,"")},exports.copyObject=function(obj){var copy={};for(var key in obj)copy[key]=obj[key];return copy},exports.copyArray=function(array){for(var copy=[],i=0,l=array.length;l>i;i++)copy[i]=array[i]&&"object"==typeof array[i]?this.copyObject(array[i]):array[i];return copy},exports.deepCopy=function deepCopy(obj){if("object"!=typeof obj||!obj)return obj;var copy;if(Array.isArray(obj)){copy=[];for(var key=0;obj.length>key;key++)copy[key]=deepCopy(obj[key]);return copy}if("[object Object]"!==Object.prototype.toString.call(obj))return obj;copy={};for(var key in obj)copy[key]=deepCopy(obj[key]);return copy},exports.arrayToMap=function(arr){for(var map={},i=0;arr.length>i;i++)map[arr[i]]=1;return map},exports.createMap=function(props){var map=Object.create(null);for(var i in props)map[i]=props[i];return map},exports.arrayRemove=function(array,value){for(var i=0;array.length>=i;i++)value===array[i]&&array.splice(i,1)},exports.escapeRegExp=function(str){return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,"\\\\$1")},exports.escapeHTML=function(str){return str.replace(/&/g,"&").replace(/"/g,""").replace(/\'/g,"'").replace(/i;i+=2){if(Array.isArray(data[i+1]))var d={action:"insert",start:data[i],lines:data[i+1]};else var d={action:"remove",start:data[i],end:data[i+1]};doc.applyDelta(d,!0)}return _self.$timeout?deferredUpdate.schedule(_self.$timeout):(_self.onUpdate(),void 0)})};(function(){this.$timeout=500,this.setTimeout=function(timeout){this.$timeout=timeout},this.setValue=function(value){this.doc.setValue(value),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(callbackId){this.sender.callback(this.doc.getValue(),callbackId)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(Mirror.prototype)}),ace.define("ace/mode/javascript/jshint",["require","exports","module"],function(acequire,exports,module){module.exports=function outer(modules,cache,entry){function newRequire(name,jumped){if(!cache[name]){if(!modules[name]){var currentRequire="function"==typeof acequire&&acequire;if(!jumped&¤tRequire)return currentRequire(name,!0);if(previousRequire)return previousRequire(name,!0);var err=Error("Cannot find module \'"+name+"\'");throw err.code="MODULE_NOT_FOUND",err}var m=cache[name]={exports:{}};modules[name][0].call(m.exports,function(x){var id=modules[name][1][x];return newRequire(id?id:x)},m,m.exports,outer,modules,cache,entry)}return cache[name].exports}for(var previousRequire="function"==typeof acequire&&acequire,i=0;entry.length>i;i++)newRequire(entry[i]);return newRequire(entry[0])}({"/node_modules/browserify/node_modules/events/events.js":[function(_dereq_,module){function EventEmitter(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function isFunction(arg){return"function"==typeof arg}function isNumber(arg){return"number"==typeof arg}function isObject(arg){return"object"==typeof arg&&null!==arg}function isUndefined(arg){return void 0===arg}module.exports=EventEmitter,EventEmitter.EventEmitter=EventEmitter,EventEmitter.prototype._events=void 0,EventEmitter.prototype._maxListeners=void 0,EventEmitter.defaultMaxListeners=10,EventEmitter.prototype.setMaxListeners=function(n){if(!isNumber(n)||0>n||isNaN(n))throw TypeError("n must be a positive number");return this._maxListeners=n,this},EventEmitter.prototype.emit=function(type){var er,handler,len,args,i,listeners;if(this._events||(this._events={}),"error"===type&&(!this._events.error||isObject(this._events.error)&&!this._events.error.length)){if(er=arguments[1],er instanceof Error)throw er;throw TypeError(\'Uncaught, unspecified "error" event.\')}if(handler=this._events[type],isUndefined(handler))return!1;if(isFunction(handler))switch(arguments.length){case 1:handler.call(this);break;case 2:handler.call(this,arguments[1]);break;case 3:handler.call(this,arguments[1],arguments[2]);break;default:for(len=arguments.length,args=Array(len-1),i=1;len>i;i++)args[i-1]=arguments[i];handler.apply(this,args)}else if(isObject(handler)){for(len=arguments.length,args=Array(len-1),i=1;len>i;i++)args[i-1]=arguments[i];for(listeners=handler.slice(),len=listeners.length,i=0;len>i;i++)listeners[i].apply(this,args)}return!0},EventEmitter.prototype.addListener=function(type,listener){var m;if(!isFunction(listener))throw TypeError("listener must be a function");if(this._events||(this._events={}),this._events.newListener&&this.emit("newListener",type,isFunction(listener.listener)?listener.listener:listener),this._events[type]?isObject(this._events[type])?this._events[type].push(listener):this._events[type]=[this._events[type],listener]:this._events[type]=listener,isObject(this._events[type])&&!this._events[type].warned){var m;m=isUndefined(this._maxListeners)?EventEmitter.defaultMaxListeners:this._maxListeners,m&&m>0&&this._events[type].length>m&&(this._events[type].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[type].length),"function"==typeof console.trace&&console.trace())}return this},EventEmitter.prototype.on=EventEmitter.prototype.addListener,EventEmitter.prototype.once=function(type,listener){function g(){this.removeListener(type,g),fired||(fired=!0,listener.apply(this,arguments))}if(!isFunction(listener))throw TypeError("listener must be a function");var fired=!1;return g.listener=listener,this.on(type,g),this},EventEmitter.prototype.removeListener=function(type,listener){var list,position,length,i;if(!isFunction(listener))throw TypeError("listener must be a function");if(!this._events||!this._events[type])return this;if(list=this._events[type],length=list.length,position=-1,list===listener||isFunction(list.listener)&&list.listener===listener)delete this._events[type],this._events.removeListener&&this.emit("removeListener",type,listener);else if(isObject(list)){for(i=length;i--\x3e0;)if(list[i]===listener||list[i].listener&&list[i].listener===listener){position=i;break}if(0>position)return this;1===list.length?(list.length=0,delete this._events[type]):list.splice(position,1),this._events.removeListener&&this.emit("removeListener",type,listener)}return this},EventEmitter.prototype.removeAllListeners=function(type){var key,listeners;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[type]&&delete this._events[type],this;if(0===arguments.length){for(key in this._events)"removeListener"!==key&&this.removeAllListeners(key);return this.removeAllListeners("removeListener"),this._events={},this\n}if(listeners=this._events[type],isFunction(listeners))this.removeListener(type,listeners);else for(;listeners.length;)this.removeListener(type,listeners[listeners.length-1]);return delete this._events[type],this},EventEmitter.prototype.listeners=function(type){var ret;return ret=this._events&&this._events[type]?isFunction(this._events[type])?[this._events[type]]:this._events[type].slice():[]},EventEmitter.listenerCount=function(emitter,type){var ret;return ret=emitter._events&&emitter._events[type]?isFunction(emitter._events[type])?1:emitter._events[type].length:0}},{}],"/node_modules/jshint/data/ascii-identifier-data.js":[function(_dereq_,module){for(var identifierStartTable=[],i=0;128>i;i++)identifierStartTable[i]=36===i||i>=65&&90>=i||95===i||i>=97&&122>=i;for(var identifierPartTable=[],i=0;128>i;i++)identifierPartTable[i]=identifierStartTable[i]||i>=48&&57>=i;module.exports={asciiIdentifierStartTable:identifierStartTable,asciiIdentifierPartTable:identifierPartTable}},{}],"/node_modules/jshint/lodash.js":[function(_dereq_,module,exports){(function(global){(function(){function baseFindIndex(array,predicate,fromRight){for(var length=array.length,index=fromRight?length:-1;fromRight?index--:length>++index;)if(predicate(array[index],index,array))return index;return-1}function baseIndexOf(array,value,fromIndex){if(value!==value)return indexOfNaN(array,fromIndex);for(var index=fromIndex-1,length=array.length;length>++index;)if(array[index]===value)return index;return-1}function baseIsFunction(value){return"function"==typeof value||!1}function baseToString(value){return"string"==typeof value?value:null==value?"":value+""}function indexOfNaN(array,fromIndex,fromRight){for(var length=array.length,index=fromIndex+(fromRight?0:-1);fromRight?index--:length>++index;){var other=array[index];if(other!==other)return index}return-1}function isObjectLike(value){return!!value&&"object"==typeof value}function lodash(){}function arrayCopy(source,array){var index=-1,length=source.length;for(array||(array=Array(length));length>++index;)array[index]=source[index];return array}function arrayEach(array,iteratee){for(var index=-1,length=array.length;length>++index&&iteratee(array[index],index,array)!==!1;);return array}function arrayFilter(array,predicate){for(var index=-1,length=array.length,resIndex=-1,result=[];length>++index;){var value=array[index];predicate(value,index,array)&&(result[++resIndex]=value)}return result}function arrayMap(array,iteratee){for(var index=-1,length=array.length,result=Array(length);length>++index;)result[index]=iteratee(array[index],index,array);return result}function arrayMax(array){for(var index=-1,length=array.length,result=NEGATIVE_INFINITY;length>++index;){var value=array[index];value>result&&(result=value)}return result}function arraySome(array,predicate){for(var index=-1,length=array.length;length>++index;)if(predicate(array[index],index,array))return!0;return!1}function assignWith(object,source,customizer){var props=keys(source);push.apply(props,getSymbols(source));for(var index=-1,length=props.length;length>++index;){var key=props[index],value=object[key],result=customizer(value,source[key],key,object,source);(result===result?result===value:value!==value)&&(value!==undefined||key in object)||(object[key]=result)}return object}function baseCopy(source,props,object){object||(object={});for(var index=-1,length=props.length;length>++index;){var key=props[index];object[key]=source[key]}return object}function baseCallback(func,thisArg,argCount){var type=typeof func;return"function"==type?thisArg===undefined?func:bindCallback(func,thisArg,argCount):null==func?identity:"object"==type?baseMatches(func):thisArg===undefined?property(func):baseMatchesProperty(func,thisArg)}function baseClone(value,isDeep,customizer,key,object,stackA,stackB){var result;if(customizer&&(result=object?customizer(value,key,object):customizer(value)),result!==undefined)return result;if(!isObject(value))return value;var isArr=isArray(value);if(isArr){if(result=initCloneArray(value),!isDeep)return arrayCopy(value,result)}else{var tag=objToString.call(value),isFunc=tag==funcTag;if(tag!=objectTag&&tag!=argsTag&&(!isFunc||object))return cloneableTags[tag]?initCloneByTag(value,tag,isDeep):object?value:{};if(result=initCloneObject(isFunc?{}:value),!isDeep)return baseAssign(result,value)}stackA||(stackA=[]),stackB||(stackB=[]);for(var length=stackA.length;length--;)if(stackA[length]==value)return stackB[length];return stackA.push(value),stackB.push(result),(isArr?arrayEach:baseForOwn)(value,function(subValue,key){result[key]=baseClone(subValue,isDeep,customizer,key,value,stackA,stackB)}),result}function baseFilter(collection,predicate){var result=[];return baseEach(collection,function(value,index,collection){predicate(value,index,collection)&&result.push(value)}),result}function baseForIn(object,iteratee){return baseFor(object,iteratee,keysIn)}function baseForOwn(object,iteratee){return baseFor(object,iteratee,keys)}function baseGet(object,path,pathKey){if(null!=object){pathKey!==undefined&&pathKey in toObject(object)&&(path=[pathKey]);for(var index=-1,length=path.length;null!=object&&length>++index;)var result=object=object[path[index]];return result}}function baseIsEqual(value,other,customizer,isLoose,stackA,stackB){if(value===other)return 0!==value||1/value==1/other;var valType=typeof value,othType=typeof other;return"function"!=valType&&"object"!=valType&&"function"!=othType&&"object"!=othType||null==value||null==other?value!==value&&other!==other:baseIsEqualDeep(value,other,baseIsEqual,customizer,isLoose,stackA,stackB)}function baseIsEqualDeep(object,other,equalFunc,customizer,isLoose,stackA,stackB){var objIsArr=isArray(object),othIsArr=isArray(other),objTag=arrayTag,othTag=arrayTag;objIsArr||(objTag=objToString.call(object),objTag==argsTag?objTag=objectTag:objTag!=objectTag&&(objIsArr=isTypedArray(object))),othIsArr||(othTag=objToString.call(other),othTag==argsTag?othTag=objectTag:othTag!=objectTag&&(othIsArr=isTypedArray(other)));var objIsObj=objTag==objectTag,othIsObj=othTag==objectTag,isSameTag=objTag==othTag;if(isSameTag&&!objIsArr&&!objIsObj)return equalByTag(object,other,objTag);if(!isLoose){var valWrapped=objIsObj&&hasOwnProperty.call(object,"__wrapped__"),othWrapped=othIsObj&&hasOwnProperty.call(other,"__wrapped__");if(valWrapped||othWrapped)return equalFunc(valWrapped?object.value():object,othWrapped?other.value():other,customizer,isLoose,stackA,stackB)}if(!isSameTag)return!1;stackA||(stackA=[]),stackB||(stackB=[]);for(var length=stackA.length;length--;)if(stackA[length]==object)return stackB[length]==other;stackA.push(object),stackB.push(other);var result=(objIsArr?equalArrays:equalObjects)(object,other,equalFunc,customizer,isLoose,stackA,stackB);return stackA.pop(),stackB.pop(),result}function baseIsMatch(object,props,values,strictCompareFlags,customizer){for(var index=-1,length=props.length,noCustomizer=!customizer;length>++index;)if(noCustomizer&&strictCompareFlags[index]?values[index]!==object[props[index]]:!(props[index]in object))return!1;for(index=-1;length>++index;){var key=props[index],objValue=object[key],srcValue=values[index];if(noCustomizer&&strictCompareFlags[index])var result=objValue!==undefined||key in object;else result=customizer?customizer(objValue,srcValue,key):undefined,result===undefined&&(result=baseIsEqual(srcValue,objValue,customizer,!0));if(!result)return!1}return!0}function baseMatches(source){var props=keys(source),length=props.length;if(!length)return constant(!0);if(1==length){var key=props[0],value=source[key];if(isStrictComparable(value))return function(object){return null==object?!1:object[key]===value&&(value!==undefined||key in toObject(object))}}for(var values=Array(length),strictCompareFlags=Array(length);length--;)value=source[props[length]],values[length]=value,strictCompareFlags[length]=isStrictComparable(value);return function(object){return null!=object&&baseIsMatch(toObject(object),props,values,strictCompareFlags)}}function baseMatchesProperty(path,value){var isArr=isArray(path),isCommon=isKey(path)&&isStrictComparable(value),pathKey=path+"";return path=toPath(path),function(object){if(null==object)return!1;var key=pathKey;if(object=toObject(object),!(!isArr&&isCommon||key in object)){if(object=1==path.length?object:baseGet(object,baseSlice(path,0,-1)),null==object)return!1;key=last(path),object=toObject(object)}return object[key]===value?value!==undefined||key in object:baseIsEqual(value,object[key],null,!0)}}function baseMerge(object,source,customizer,stackA,stackB){if(!isObject(object))return object;var isSrcArr=isLength(source.length)&&(isArray(source)||isTypedArray(source));if(!isSrcArr){var props=keys(source);push.apply(props,getSymbols(source))}return arrayEach(props||source,function(srcValue,key){if(props&&(key=srcValue,srcValue=source[key]),isObjectLike(srcValue))stackA||(stackA=[]),stackB||(stackB=[]),baseMergeDeep(object,source,key,baseMerge,customizer,stackA,stackB);else{var value=object[key],result=customizer?customizer(value,srcValue,key,object,source):undefined,isCommon=result===undefined;isCommon&&(result=srcValue),!isSrcArr&&result===undefined||!isCommon&&(result===result?result===value:value!==value)||(object[key]=result)}}),object}function baseMergeDeep(object,source,key,mergeFunc,customizer,stackA,stackB){for(var length=stackA.length,srcValue=source[key];length--;)if(stackA[length]==srcValue)return object[key]=stackB[length],undefined;var value=object[key],result=customizer?customizer(value,srcValue,key,object,source):undefined,isCommon=result===undefined;isCommon&&(result=srcValue,isLength(srcValue.length)&&(isArray(srcValue)||isTypedArray(srcValue))?result=isArray(value)?value:getLength(value)?arrayCopy(value):[]:isPlainObject(srcValue)||isArguments(srcValue)?result=isArguments(value)?toPlainObject(value):isPlainObject(value)?value:{}:isCommon=!1),stackA.push(srcValue),stackB.push(result),isCommon?object[key]=mergeFunc(result,srcValue,customizer,stackA,stackB):(result===result?result!==value:value===value)&&(object[key]=result)}function baseProperty(key){return function(object){return null==object?undefined:object[key]}}function basePropertyDeep(path){var pathKey=path+"";return path=toPath(path),function(object){return baseGet(object,path,pathKey)}}function baseSlice(array,start,end){var index=-1,length=array.length;start=null==start?0:+start||0,0>start&&(start=-start>length?0:length+start),end=end===undefined||end>length?length:+end||0,0>end&&(end+=length),length=start>end?0:end-start>>>0,start>>>=0;for(var result=Array(length);length>++index;)result[index]=array[index+start];return result}function baseSome(collection,predicate){var result;return baseEach(collection,function(value,index,collection){return result=predicate(value,index,collection),!result}),!!result}function baseValues(object,props){for(var index=-1,length=props.length,result=Array(length);length>++index;)result[index]=object[props[index]];return result}function binaryIndex(array,value,retHighest){var low=0,high=array?array.length:low;if("number"==typeof value&&value===value&&HALF_MAX_ARRAY_LENGTH>=high){for(;high>low;){var mid=low+high>>>1,computed=array[mid];(retHighest?value>=computed:value>computed)?low=mid+1:high=mid}return high}return binaryIndexBy(array,value,identity,retHighest)}function binaryIndexBy(array,value,iteratee,retHighest){value=iteratee(value);for(var low=0,high=array?array.length:0,valIsNaN=value!==value,valIsUndef=value===undefined;high>low;){var mid=floor((low+high)/2),computed=iteratee(array[mid]),isReflexive=computed===computed;if(valIsNaN)var setLow=isReflexive||retHighest;else setLow=valIsUndef?isReflexive&&(retHighest||computed!==undefined):retHighest?value>=computed:value>computed;setLow?low=mid+1:high=mid}return nativeMin(high,MAX_ARRAY_INDEX)}function bindCallback(func,thisArg,argCount){if("function"!=typeof func)return identity;if(thisArg===undefined)return func;switch(argCount){case 1:return function(value){return func.call(thisArg,value)};case 3:return function(value,index,collection){return func.call(thisArg,value,index,collection)};case 4:return function(accumulator,value,index,collection){return func.call(thisArg,accumulator,value,index,collection)};case 5:return function(value,other,key,object,source){return func.call(thisArg,value,other,key,object,source)}}return function(){return func.apply(thisArg,arguments)}}function bufferClone(buffer){return bufferSlice.call(buffer,0)}function createAssigner(assigner){return restParam(function(object,sources){var index=-1,length=null==object?0:sources.length,customizer=length>2&&sources[length-2],guard=length>2&&sources[2],thisArg=length>1&&sources[length-1];for("function"==typeof customizer?(customizer=bindCallback(customizer,thisArg,5),length-=2):(customizer="function"==typeof thisArg?thisArg:null,length-=customizer?1:0),guard&&isIterateeCall(sources[0],sources[1],guard)&&(customizer=3>length?null:customizer,length=1);length>++index;){var source=sources[index];source&&assigner(object,source,customizer)}return object})}function createBaseEach(eachFunc,fromRight){return function(collection,iteratee){var length=collection?getLength(collection):0;if(!isLength(length))return eachFunc(collection,iteratee);for(var index=fromRight?length:-1,iterable=toObject(collection);(fromRight?index--:length>++index)&&iteratee(iterable[index],index,iterable)!==!1;);return collection}}function createBaseFor(fromRight){return function(object,iteratee,keysFunc){for(var iterable=toObject(object),props=keysFunc(object),length=props.length,index=fromRight?length:-1;fromRight?index--:length>++index;){var key=props[index];if(iteratee(iterable[key],key,iterable)===!1)break}return object}}function createFindIndex(fromRight){return function(array,predicate,thisArg){return array&&array.length?(predicate=getCallback(predicate,thisArg,3),baseFindIndex(array,predicate,fromRight)):-1}}function createForEach(arrayFunc,eachFunc){return function(collection,iteratee,thisArg){return"function"==typeof iteratee&&thisArg===undefined&&isArray(collection)?arrayFunc(collection,iteratee):eachFunc(collection,bindCallback(iteratee,thisArg,3))}}function equalArrays(array,other,equalFunc,customizer,isLoose,stackA,stackB){var index=-1,arrLength=array.length,othLength=other.length,result=!0;if(arrLength!=othLength&&!(isLoose&&othLength>arrLength))return!1;for(;result&&arrLength>++index;){var arrValue=array[index],othValue=other[index];if(result=undefined,customizer&&(result=isLoose?customizer(othValue,arrValue,index):customizer(arrValue,othValue,index)),result===undefined)if(isLoose)for(var othIndex=othLength;othIndex--&&(othValue=other[othIndex],!(result=arrValue&&arrValue===othValue||equalFunc(arrValue,othValue,customizer,isLoose,stackA,stackB))););else result=arrValue&&arrValue===othValue||equalFunc(arrValue,othValue,customizer,isLoose,stackA,stackB)}return!!result}function equalByTag(object,other,tag){switch(tag){case boolTag:case dateTag:return+object==+other;case errorTag:return object.name==other.name&&object.message==other.message;case numberTag:return object!=+object?other!=+other:0==object?1/object==1/other:object==+other;case regexpTag:case stringTag:return object==other+""}return!1}function equalObjects(object,other,equalFunc,customizer,isLoose,stackA,stackB){var objProps=keys(object),objLength=objProps.length,othProps=keys(other),othLength=othProps.length;if(objLength!=othLength&&!isLoose)return!1;for(var skipCtor=isLoose,index=-1;objLength>++index;){var key=objProps[index],result=isLoose?key in other:hasOwnProperty.call(other,key);if(result){var objValue=object[key],othValue=other[key];result=undefined,customizer&&(result=isLoose?customizer(othValue,objValue,key):customizer(objValue,othValue,key)),result===undefined&&(result=objValue&&objValue===othValue||equalFunc(objValue,othValue,customizer,isLoose,stackA,stackB))}if(!result)return!1;skipCtor||(skipCtor="constructor"==key)}if(!skipCtor){var objCtor=object.constructor,othCtor=other.constructor;if(objCtor!=othCtor&&"constructor"in object&&"constructor"in other&&!("function"==typeof objCtor&&objCtor instanceof objCtor&&"function"==typeof othCtor&&othCtor instanceof othCtor))return!1}return!0}function getCallback(func,thisArg,argCount){var result=lodash.callback||callback;return result=result===callback?baseCallback:result,argCount?result(func,thisArg,argCount):result}function getIndexOf(collection,target,fromIndex){var result=lodash.indexOf||indexOf;return result=result===indexOf?baseIndexOf:result,collection?result(collection,target,fromIndex):result}function initCloneArray(array){var length=array.length,result=new array.constructor(length);return length&&"string"==typeof array[0]&&hasOwnProperty.call(array,"index")&&(result.index=array.index,result.input=array.input),result}function initCloneObject(object){var Ctor=object.constructor;return"function"==typeof Ctor&&Ctor instanceof Ctor||(Ctor=Object),new Ctor}function initCloneByTag(object,tag,isDeep){var Ctor=object.constructor;switch(tag){case arrayBufferTag:return bufferClone(object);case boolTag:case dateTag:return new Ctor(+object);case float32Tag:case float64Tag:case int8Tag:case int16Tag:case int32Tag:case uint8Tag:case uint8ClampedTag:case uint16Tag:case uint32Tag:var buffer=object.buffer;return new Ctor(isDeep?bufferClone(buffer):buffer,object.byteOffset,object.length);case numberTag:case stringTag:return new Ctor(object);case regexpTag:var result=new Ctor(object.source,reFlags.exec(object));result.lastIndex=object.lastIndex}return result}function isIndex(value,length){return value=+value,length=null==length?MAX_SAFE_INTEGER:length,value>-1&&0==value%1&&length>value}function isIterateeCall(value,index,object){if(!isObject(object))return!1;var type=typeof index;if("number"==type)var length=getLength(object),prereq=isLength(length)&&isIndex(index,length);else prereq="string"==type&&index in object;if(prereq){var other=object[index];return value===value?value===other:other!==other}return!1}function isKey(value,object){var type=typeof value;if("string"==type&&reIsPlainProp.test(value)||"number"==type)return!0;if(isArray(value))return!1;var result=!reIsDeepProp.test(value);return result||null!=object&&value in toObject(object)}function isLength(value){return"number"==typeof value&&value>-1&&0==value%1&&MAX_SAFE_INTEGER>=value}function isStrictComparable(value){return value===value&&(0===value?1/value>0:!isObject(value))}function shimIsPlainObject(value){var Ctor;if(lodash.support,!isObjectLike(value)||objToString.call(value)!=objectTag||!hasOwnProperty.call(value,"constructor")&&(Ctor=value.constructor,"function"==typeof Ctor&&!(Ctor instanceof Ctor)))return!1;var result;return baseForIn(value,function(subValue,key){result=key}),result===undefined||hasOwnProperty.call(value,result)}function shimKeys(object){for(var props=keysIn(object),propsLength=props.length,length=propsLength&&object.length,support=lodash.support,allowIndexes=length&&isLength(length)&&(isArray(object)||support.nonEnumArgs&&isArguments(object)),index=-1,result=[];propsLength>++index;){var key=props[index];(allowIndexes&&isIndex(key,length)||hasOwnProperty.call(object,key))&&result.push(key)}return result}function toObject(value){return isObject(value)?value:Object(value)}function toPath(value){if(isArray(value))return value;var result=[];return baseToString(value).replace(rePropName,function(match,number,quote,string){result.push(quote?string.replace(reEscapeChar,"$1"):number||match)}),result}function indexOf(array,value,fromIndex){var length=array?array.length:0;if(!length)return-1;if("number"==typeof fromIndex)fromIndex=0>fromIndex?nativeMax(length+fromIndex,0):fromIndex;else if(fromIndex){var index=binaryIndex(array,value),other=array[index];return(value===value?value===other:other!==other)?index:-1}return baseIndexOf(array,value,fromIndex||0)}function last(array){var length=array?array.length:0;return length?array[length-1]:undefined}function slice(array,start,end){var length=array?array.length:0;return length?(end&&"number"!=typeof end&&isIterateeCall(array,start,end)&&(start=0,end=length),baseSlice(array,start,end)):[]}function unzip(array){for(var index=-1,length=(array&&array.length&&arrayMax(arrayMap(array,getLength)))>>>0,result=Array(length);length>++index;)result[index]=arrayMap(array,baseProperty(index));return result}function includes(collection,target,fromIndex,guard){var length=collection?getLength(collection):0;return isLength(length)||(collection=values(collection),length=collection.length),length?(fromIndex="number"!=typeof fromIndex||guard&&isIterateeCall(target,fromIndex,guard)?0:0>fromIndex?nativeMax(length+fromIndex,0):fromIndex||0,"string"==typeof collection||!isArray(collection)&&isString(collection)?length>fromIndex&&collection.indexOf(target,fromIndex)>-1:getIndexOf(collection,target,fromIndex)>-1):!1}function reject(collection,predicate,thisArg){var func=isArray(collection)?arrayFilter:baseFilter;return predicate=getCallback(predicate,thisArg,3),func(collection,function(value,index,collection){return!predicate(value,index,collection)})}function some(collection,predicate,thisArg){var func=isArray(collection)?arraySome:baseSome;return thisArg&&isIterateeCall(collection,predicate,thisArg)&&(predicate=null),("function"!=typeof predicate||thisArg!==undefined)&&(predicate=getCallback(predicate,thisArg,3)),func(collection,predicate)}function restParam(func,start){if("function"!=typeof func)throw new TypeError(FUNC_ERROR_TEXT);return start=nativeMax(start===undefined?func.length-1:+start||0,0),function(){for(var args=arguments,index=-1,length=nativeMax(args.length-start,0),rest=Array(length);length>++index;)rest[index]=args[start+index];switch(start){case 0:return func.call(this,rest);case 1:return func.call(this,args[0],rest);case 2:return func.call(this,args[0],args[1],rest)}var otherArgs=Array(start+1);for(index=-1;start>++index;)otherArgs[index]=args[index];return otherArgs[start]=rest,func.apply(this,otherArgs)}}function clone(value,isDeep,customizer,thisArg){return isDeep&&"boolean"!=typeof isDeep&&isIterateeCall(value,isDeep,customizer)?isDeep=!1:"function"==typeof isDeep&&(thisArg=customizer,customizer=isDeep,isDeep=!1),customizer="function"==typeof customizer&&bindCallback(customizer,thisArg,1),baseClone(value,isDeep,customizer)}function isArguments(value){var length=isObjectLike(value)?value.length:undefined;return isLength(length)&&objToString.call(value)==argsTag}function isEmpty(value){if(null==value)return!0;var length=getLength(value);return isLength(length)&&(isArray(value)||isString(value)||isArguments(value)||isObjectLike(value)&&isFunction(value.splice))?!length:!keys(value).length}function isObject(value){var type=typeof value;return"function"==type||!!value&&"object"==type}function isNative(value){return null==value?!1:objToString.call(value)==funcTag?reIsNative.test(fnToString.call(value)):isObjectLike(value)&&reIsHostCtor.test(value)}function isNumber(value){return"number"==typeof value||isObjectLike(value)&&objToString.call(value)==numberTag}function isString(value){return"string"==typeof value||isObjectLike(value)&&objToString.call(value)==stringTag}function isTypedArray(value){return isObjectLike(value)&&isLength(value.length)&&!!typedArrayTags[objToString.call(value)]}function toPlainObject(value){return baseCopy(value,keysIn(value))}function has(object,path){if(null==object)return!1;var result=hasOwnProperty.call(object,path);return result||isKey(path)||(path=toPath(path),object=1==path.length?object:baseGet(object,baseSlice(path,0,-1)),path=last(path),result=null!=object&&hasOwnProperty.call(object,path)),result}function keysIn(object){if(null==object)return[];isObject(object)||(object=Object(object));var length=object.length;length=length&&isLength(length)&&(isArray(object)||support.nonEnumArgs&&isArguments(object))&&length||0;for(var Ctor=object.constructor,index=-1,isProto="function"==typeof Ctor&&Ctor.prototype===object,result=Array(length),skipIndexes=length>0;length>++index;)result[index]=index+"";for(var key in object)skipIndexes&&isIndex(key,length)||"constructor"==key&&(isProto||!hasOwnProperty.call(object,key))||result.push(key);return result}function values(object){return baseValues(object,keys(object))}function escapeRegExp(string){return string=baseToString(string),string&&reHasRegExpChars.test(string)?string.replace(reRegExpChars,"\\\\$&"):string}function callback(func,thisArg,guard){return guard&&isIterateeCall(func,thisArg,guard)&&(thisArg=null),baseCallback(func,thisArg)}function constant(value){return function(){return value}}function identity(value){return value}function property(path){return isKey(path)?baseProperty(path):basePropertyDeep(path)}var undefined,VERSION="3.7.0",FUNC_ERROR_TEXT="Expected a function",argsTag="[object Arguments]",arrayTag="[object Array]",boolTag="[object Boolean]",dateTag="[object Date]",errorTag="[object Error]",funcTag="[object Function]",mapTag="[object Map]",numberTag="[object Number]",objectTag="[object Object]",regexpTag="[object RegExp]",setTag="[object Set]",stringTag="[object String]",weakMapTag="[object WeakMap]",arrayBufferTag="[object ArrayBuffer]",float32Tag="[object Float32Array]",float64Tag="[object Float64Array]",int8Tag="[object Int8Array]",int16Tag="[object Int16Array]",int32Tag="[object Int32Array]",uint8Tag="[object Uint8Array]",uint8ClampedTag="[object Uint8ClampedArray]",uint16Tag="[object Uint16Array]",uint32Tag="[object Uint32Array]",reIsDeepProp=/\\.|\\[(?:[^[\\]]+|(["\'])(?:(?!\\1)[^\\n\\\\]|\\\\.)*?)\\1\\]/,reIsPlainProp=/^\\w*$/,rePropName=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|(["\'])((?:(?!\\2)[^\\n\\\\]|\\\\.)*?)\\2)\\]/g,reRegExpChars=/[.*+?^${}()|[\\]\\/\\\\]/g,reHasRegExpChars=RegExp(reRegExpChars.source),reEscapeChar=/\\\\(\\\\)?/g,reFlags=/\\w*$/,reIsHostCtor=/^\\[object .+?Constructor\\]$/,typedArrayTags={};typedArrayTags[float32Tag]=typedArrayTags[float64Tag]=typedArrayTags[int8Tag]=typedArrayTags[int16Tag]=typedArrayTags[int32Tag]=typedArrayTags[uint8Tag]=typedArrayTags[uint8ClampedTag]=typedArrayTags[uint16Tag]=typedArrayTags[uint32Tag]=!0,typedArrayTags[argsTag]=typedArrayTags[arrayTag]=typedArrayTags[arrayBufferTag]=typedArrayTags[boolTag]=typedArrayTags[dateTag]=typedArrayTags[errorTag]=typedArrayTags[funcTag]=typedArrayTags[mapTag]=typedArrayTags[numberTag]=typedArrayTags[objectTag]=typedArrayTags[regexpTag]=typedArrayTags[setTag]=typedArrayTags[stringTag]=typedArrayTags[weakMapTag]=!1;var cloneableTags={};cloneableTags[argsTag]=cloneableTags[arrayTag]=cloneableTags[arrayBufferTag]=cloneableTags[boolTag]=cloneableTags[dateTag]=cloneableTags[float32Tag]=cloneableTags[float64Tag]=cloneableTags[int8Tag]=cloneableTags[int16Tag]=cloneableTags[int32Tag]=cloneableTags[numberTag]=cloneableTags[objectTag]=cloneableTags[regexpTag]=cloneableTags[stringTag]=cloneableTags[uint8Tag]=cloneableTags[uint8ClampedTag]=cloneableTags[uint16Tag]=cloneableTags[uint32Tag]=!0,cloneableTags[errorTag]=cloneableTags[funcTag]=cloneableTags[mapTag]=cloneableTags[setTag]=cloneableTags[weakMapTag]=!1;var objectTypes={"function":!0,object:!0},freeExports=objectTypes[typeof exports]&&exports&&!exports.nodeType&&exports,freeModule=objectTypes[typeof module]&&module&&!module.nodeType&&module,freeGlobal=freeExports&&freeModule&&"object"==typeof global&&global&&global.Object&&global,freeSelf=objectTypes[typeof self]&&self&&self.Object&&self,freeWindow=objectTypes[typeof window]&&window&&window.Object&&window,moduleExports=freeModule&&freeModule.exports===freeExports&&freeExports,root=freeGlobal||freeWindow!==(this&&this.window)&&freeWindow||freeSelf||this,arrayProto=Array.prototype,objectProto=Object.prototype,fnToString=Function.prototype.toString,hasOwnProperty=objectProto.hasOwnProperty,objToString=objectProto.toString,reIsNative=RegExp("^"+escapeRegExp(objToString).replace(/toString|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,"$1.*?")+"$"),ArrayBuffer=isNative(ArrayBuffer=root.ArrayBuffer)&&ArrayBuffer,bufferSlice=isNative(bufferSlice=ArrayBuffer&&new ArrayBuffer(0).slice)&&bufferSlice,floor=Math.floor,getOwnPropertySymbols=isNative(getOwnPropertySymbols=Object.getOwnPropertySymbols)&&getOwnPropertySymbols,getPrototypeOf=isNative(getPrototypeOf=Object.getPrototypeOf)&&getPrototypeOf,push=arrayProto.push,preventExtensions=isNative(Object.preventExtensions=Object.preventExtensions)&&preventExtensions,propertyIsEnumerable=objectProto.propertyIsEnumerable,Uint8Array=isNative(Uint8Array=root.Uint8Array)&&Uint8Array,Float64Array=function(){try{var func=isNative(func=root.Float64Array)&&func,result=new func(new ArrayBuffer(10),0,1)&&func}catch(e){}return result}(),nativeAssign=function(){var object={1:0},func=preventExtensions&&isNative(func=Object.assign)&&func;try{func(preventExtensions(object),"xo")}catch(e){}return!object[1]&&func}(),nativeIsArray=isNative(nativeIsArray=Array.isArray)&&nativeIsArray,nativeKeys=isNative(nativeKeys=Object.keys)&&nativeKeys,nativeMax=Math.max,nativeMin=Math.min,NEGATIVE_INFINITY=Number.NEGATIVE_INFINITY,MAX_ARRAY_LENGTH=Math.pow(2,32)-1,MAX_ARRAY_INDEX=MAX_ARRAY_LENGTH-1,HALF_MAX_ARRAY_LENGTH=MAX_ARRAY_LENGTH>>>1,FLOAT64_BYTES_PER_ELEMENT=Float64Array?Float64Array.BYTES_PER_ELEMENT:0,MAX_SAFE_INTEGER=Math.pow(2,53)-1,support=lodash.support={};(function(x){var Ctor=function(){this.x=x},props=[];Ctor.prototype={valueOf:x,y:x};for(var key in new Ctor)props.push(key);support.funcDecomp=/\\bthis\\b/.test(function(){return this}),support.funcNames="string"==typeof Function.name;try{support.nonEnumArgs=!propertyIsEnumerable.call(arguments,1)}catch(e){support.nonEnumArgs=!0}})(1,0);var baseAssign=nativeAssign||function(object,source){return null==source?object:baseCopy(source,getSymbols(source),baseCopy(source,keys(source),object))},baseEach=createBaseEach(baseForOwn),baseFor=createBaseFor();bufferSlice||(bufferClone=ArrayBuffer&&Uint8Array?function(buffer){var byteLength=buffer.byteLength,floatLength=Float64Array?floor(byteLength/FLOAT64_BYTES_PER_ELEMENT):0,offset=floatLength*FLOAT64_BYTES_PER_ELEMENT,result=new ArrayBuffer(byteLength);if(floatLength){var view=new Float64Array(result,0,floatLength);view.set(new Float64Array(buffer,0,floatLength))}return byteLength!=offset&&(view=new Uint8Array(result,offset),view.set(new Uint8Array(buffer,offset))),result}:constant(null));var getLength=baseProperty("length"),getSymbols=getOwnPropertySymbols?function(object){return getOwnPropertySymbols(toObject(object))}:constant([]),findLastIndex=createFindIndex(!0),zip=restParam(unzip),forEach=createForEach(arrayEach,baseEach),isArray=nativeIsArray||function(value){return isObjectLike(value)&&isLength(value.length)&&objToString.call(value)==arrayTag},isFunction=baseIsFunction(/x/)||Uint8Array&&!baseIsFunction(Uint8Array)?function(value){return objToString.call(value)==funcTag}:baseIsFunction,isPlainObject=getPrototypeOf?function(value){if(!value||objToString.call(value)!=objectTag)return!1;var valueOf=value.valueOf,objProto=isNative(valueOf)&&(objProto=getPrototypeOf(valueOf))&&getPrototypeOf(objProto);return objProto?value==objProto||getPrototypeOf(value)==objProto:shimIsPlainObject(value)}:shimIsPlainObject,assign=createAssigner(function(object,source,customizer){return customizer?assignWith(object,source,customizer):baseAssign(object,source)}),keys=nativeKeys?function(object){if(object)var Ctor=object.constructor,length=object.length;return"function"==typeof Ctor&&Ctor.prototype===object||"function"!=typeof object&&isLength(length)?shimKeys(object):isObject(object)?nativeKeys(object):[]}:shimKeys,merge=createAssigner(baseMerge);lodash.assign=assign,lodash.callback=callback,lodash.constant=constant,lodash.forEach=forEach,lodash.keys=keys,lodash.keysIn=keysIn,lodash.merge=merge,lodash.property=property,lodash.reject=reject,lodash.restParam=restParam,lodash.slice=slice,lodash.toPlainObject=toPlainObject,lodash.unzip=unzip,lodash.values=values,lodash.zip=zip,lodash.each=forEach,lodash.extend=assign,lodash.iteratee=callback,lodash.clone=clone,lodash.escapeRegExp=escapeRegExp,lodash.findLastIndex=findLastIndex,lodash.has=has,lodash.identity=identity,lodash.includes=includes,lodash.indexOf=indexOf,lodash.isArguments=isArguments,lodash.isArray=isArray,lodash.isEmpty=isEmpty,lodash.isFunction=isFunction,lodash.isNative=isNative,lodash.isNumber=isNumber,lodash.isObject=isObject,lodash.isPlainObject=isPlainObject,lodash.isString=isString,lodash.isTypedArray=isTypedArray,lodash.last=last,lodash.some=some,lodash.any=some,lodash.contains=includes,lodash.include=includes,lodash.VERSION=VERSION,freeExports&&freeModule?moduleExports?(freeModule.exports=lodash)._=lodash:freeExports._=lodash:root._=lodash\n}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],"/node_modules/jshint/src/jshint.js":[function(_dereq_,module,exports){var _=_dereq_("../lodash"),events=_dereq_("events"),vars=_dereq_("./vars.js"),messages=_dereq_("./messages.js"),Lexer=_dereq_("./lex.js").Lexer,reg=_dereq_("./reg.js"),state=_dereq_("./state.js").state,style=_dereq_("./style.js"),options=_dereq_("./options.js"),scopeManager=_dereq_("./scope-manager.js"),JSHINT=function(){"use strict";function checkOption(name,t){return name=name.trim(),/^[+-]W\\d{3}$/g.test(name)?!0:-1!==options.validNames.indexOf(name)||"jslint"===t.type||_.has(options.removed,name)?!0:(error("E001",t,name),!1)}function isString(obj){return"[object String]"===Object.prototype.toString.call(obj)}function isIdentifier(tkn,value){return tkn?tkn.identifier&&tkn.value===value?!0:!1:!1}function isReserved(token){if(!token.reserved)return!1;var meta=token.meta;if(meta&&meta.isFutureReservedWord&&state.inES5()){if(!meta.es5)return!1;if(meta.strictOnly&&!state.option.strict&&!state.isStrict())return!1;if(token.isProperty)return!1}return!0}function supplant(str,data){return str.replace(/\\{([^{}]*)\\}/g,function(a,b){var r=data[b];return"string"==typeof r||"number"==typeof r?r:a})}function combine(dest,src){Object.keys(src).forEach(function(name){_.has(JSHINT.blacklist,name)||(dest[name]=src[name])})}function processenforceall(){if(state.option.enforceall){for(var enforceopt in options.bool.enforcing)void 0!==state.option[enforceopt]||options.noenforceall[enforceopt]||(state.option[enforceopt]=!0);for(var relaxopt in options.bool.relaxing)void 0===state.option[relaxopt]&&(state.option[relaxopt]=!1)}}function assume(){processenforceall(),state.option.esversion||state.option.moz||(state.option.esversion=state.option.es3?3:state.option.esnext?6:5),state.inES5()&&combine(predefined,vars.ecmaIdentifiers[5]),state.inES6()&&combine(predefined,vars.ecmaIdentifiers[6]),state.option.module&&(state.option.strict===!0&&(state.option.strict="global"),state.inES6()||warning("W134",state.tokens.next,"module",6)),state.option.couch&&combine(predefined,vars.couch),state.option.qunit&&combine(predefined,vars.qunit),state.option.rhino&&combine(predefined,vars.rhino),state.option.shelljs&&(combine(predefined,vars.shelljs),combine(predefined,vars.node)),state.option.typed&&combine(predefined,vars.typed),state.option.phantom&&(combine(predefined,vars.phantom),state.option.strict===!0&&(state.option.strict="global")),state.option.prototypejs&&combine(predefined,vars.prototypejs),state.option.node&&(combine(predefined,vars.node),combine(predefined,vars.typed),state.option.strict===!0&&(state.option.strict="global")),state.option.devel&&combine(predefined,vars.devel),state.option.dojo&&combine(predefined,vars.dojo),state.option.browser&&(combine(predefined,vars.browser),combine(predefined,vars.typed)),state.option.browserify&&(combine(predefined,vars.browser),combine(predefined,vars.typed),combine(predefined,vars.browserify),state.option.strict===!0&&(state.option.strict="global")),state.option.nonstandard&&combine(predefined,vars.nonstandard),state.option.jasmine&&combine(predefined,vars.jasmine),state.option.jquery&&combine(predefined,vars.jquery),state.option.mootools&&combine(predefined,vars.mootools),state.option.worker&&combine(predefined,vars.worker),state.option.wsh&&combine(predefined,vars.wsh),state.option.globalstrict&&state.option.strict!==!1&&(state.option.strict="global"),state.option.yui&&combine(predefined,vars.yui),state.option.mocha&&combine(predefined,vars.mocha)}function quit(code,line,chr){var percentage=Math.floor(100*(line/state.lines.length)),message=messages.errors[code].desc;throw{name:"JSHintError",line:line,character:chr,message:message+" ("+percentage+"% scanned).",raw:message,code:code}}function removeIgnoredMessages(){var ignored=state.ignoredLines;_.isEmpty(ignored)||(JSHINT.errors=_.reject(JSHINT.errors,function(err){return ignored[err.line]}))}function warning(code,t,a,b,c,d){var ch,l,w,msg;if(/^W\\d{3}$/.test(code)){if(state.ignored[code])return;msg=messages.warnings[code]}else/E\\d{3}/.test(code)?msg=messages.errors[code]:/I\\d{3}/.test(code)&&(msg=messages.info[code]);return t=t||state.tokens.next||{},"(end)"===t.id&&(t=state.tokens.curr),l=t.line||0,ch=t.from||0,w={id:"(error)",raw:msg.desc,code:msg.code,evidence:state.lines[l-1]||"",line:l,character:ch,scope:JSHINT.scope,a:a,b:b,c:c,d:d},w.reason=supplant(msg.desc,w),JSHINT.errors.push(w),removeIgnoredMessages(),JSHINT.errors.length>=state.option.maxerr&&quit("E043",l,ch),w}function warningAt(m,l,ch,a,b,c,d){return warning(m,{line:l,from:ch},a,b,c,d)}function error(m,t,a,b,c,d){warning(m,t,a,b,c,d)}function errorAt(m,l,ch,a,b,c,d){return error(m,{line:l,from:ch},a,b,c,d)}function addInternalSrc(elem,src){var i;return i={id:"(internal)",elem:elem,value:src},JSHINT.internals.push(i),i}function doOption(){var nt=state.tokens.next,body=nt.body.match(/(-\\s+)?[^\\s,:]+(?:\\s*:\\s*(-\\s+)?[^\\s,]+)?/g)||[],predef={};if("globals"===nt.type){body.forEach(function(g,idx){g=g.split(":");var key=(g[0]||"").trim(),val=(g[1]||"").trim();if("-"===key||!key.length){if(idx>0&&idx===body.length-1)return;return error("E002",nt),void 0}"-"===key.charAt(0)?(key=key.slice(1),val=!1,JSHINT.blacklist[key]=key,delete predefined[key]):predef[key]="true"===val}),combine(predefined,predef);for(var key in predef)_.has(predef,key)&&(declared[key]=nt)}"exported"===nt.type&&body.forEach(function(e,idx){if(!e.length){if(idx>0&&idx===body.length-1)return;return error("E002",nt),void 0}state.funct["(scope)"].addExported(e)}),"members"===nt.type&&(membersOnly=membersOnly||{},body.forEach(function(m){var ch1=m.charAt(0),ch2=m.charAt(m.length-1);ch1!==ch2||\'"\'!==ch1&&"\'"!==ch1||(m=m.substr(1,m.length-2).replace(\'\\\\"\',\'"\')),membersOnly[m]=!1}));var numvals=["maxstatements","maxparams","maxdepth","maxcomplexity","maxerr","maxlen","indent"];("jshint"===nt.type||"jslint"===nt.type)&&(body.forEach(function(g){g=g.split(":");var key=(g[0]||"").trim(),val=(g[1]||"").trim();if(checkOption(key,nt))if(numvals.indexOf(key)>=0)if("false"!==val){if(val=+val,"number"!=typeof val||!isFinite(val)||0>=val||Math.floor(val)!==val)return error("E032",nt,g[1].trim()),void 0;state.option[key]=val}else state.option[key]="indent"===key?4:!1;else{if("validthis"===key)return state.funct["(global)"]?void error("E009"):"true"!==val&&"false"!==val?void error("E002",nt):(state.option.validthis="true"===val,void 0);if("quotmark"!==key)if("shadow"!==key)if("unused"!==key)if("latedef"!==key)if("ignore"!==key)if("strict"!==key){"module"===key&&(hasParsedCode(state.funct)||error("E055",state.tokens.next,"module"));var esversions={es3:3,es5:5,esnext:6};if(!_.has(esversions,key)){if("esversion"===key){switch(val){case"5":state.inES5(!0)&&warning("I003");case"3":case"6":state.option.moz=!1,state.option.esversion=+val;break;case"2015":state.option.moz=!1,state.option.esversion=6;break;default:error("E002",nt)}return hasParsedCode(state.funct)||error("E055",state.tokens.next,"esversion"),void 0}var match=/^([+-])(W\\d{3})$/g.exec(key);if(match)return state.ignored[match[2]]="-"===match[1],void 0;var tn;return"true"===val||"false"===val?("jslint"===nt.type?(tn=options.renamed[key]||key,state.option[tn]="true"===val,void 0!==options.inverted[tn]&&(state.option[tn]=!state.option[tn])):state.option[key]="true"===val,"newcap"===key&&(state.option["(explicitNewcap)"]=!0),void 0):(error("E002",nt),void 0)}switch(val){case"true":state.option.moz=!1,state.option.esversion=esversions[key];break;case"false":state.option.moz||(state.option.esversion=5);break;default:error("E002",nt)}}else switch(val){case"true":state.option.strict=!0;break;case"false":state.option.strict=!1;break;case"func":case"global":case"implied":state.option.strict=val;break;default:error("E002",nt)}else switch(val){case"line":state.ignoredLines[nt.line]=!0,removeIgnoredMessages();break;default:error("E002",nt)}else switch(val){case"true":state.option.latedef=!0;break;case"false":state.option.latedef=!1;break;case"nofunc":state.option.latedef="nofunc";break;default:error("E002",nt)}else switch(val){case"true":state.option.unused=!0;break;case"false":state.option.unused=!1;break;case"vars":case"strict":state.option.unused=val;break;default:error("E002",nt)}else switch(val){case"true":state.option.shadow=!0;break;case"outer":state.option.shadow="outer";break;case"false":case"inner":state.option.shadow="inner";break;default:error("E002",nt)}else switch(val){case"true":case"false":state.option.quotmark="true"===val;break;case"double":case"single":state.option.quotmark=val;break;default:error("E002",nt)}}}),assume())}function peek(p){var t,i=p||0,j=lookahead.length;if(j>i)return lookahead[i];for(;i>=j;)t=lookahead[j],t||(t=lookahead[j]=lex.token()),j+=1;return t||"(end)"!==state.tokens.next.id?t:state.tokens.next}function peekIgnoreEOL(){var t,i=0;do t=peek(i++);while("(endline)"===t.id);return t}function advance(id,t){switch(state.tokens.curr.id){case"(number)":"."===state.tokens.next.id&&warning("W005",state.tokens.curr);break;case"-":("-"===state.tokens.next.id||"--"===state.tokens.next.id)&&warning("W006");break;case"+":("+"===state.tokens.next.id||"++"===state.tokens.next.id)&&warning("W007")}for(id&&state.tokens.next.id!==id&&(t?"(end)"===state.tokens.next.id?error("E019",t,t.id):error("E020",state.tokens.next,id,t.id,t.line,state.tokens.next.value):("(identifier)"!==state.tokens.next.type||state.tokens.next.value!==id)&&warning("W116",state.tokens.next,id,state.tokens.next.value)),state.tokens.prev=state.tokens.curr,state.tokens.curr=state.tokens.next;;){if(state.tokens.next=lookahead.shift()||lex.token(),state.tokens.next||quit("E041",state.tokens.curr.line),"(end)"===state.tokens.next.id||"(error)"===state.tokens.next.id)return;if(state.tokens.next.check&&state.tokens.next.check(),state.tokens.next.isSpecial)"falls through"===state.tokens.next.type?state.tokens.curr.caseFallsThrough=!0:doOption();else if("(endline)"!==state.tokens.next.id)break}}function isInfix(token){return token.infix||!token.identifier&&!token.template&&!!token.led}function isEndOfExpr(){var curr=state.tokens.curr,next=state.tokens.next;return";"===next.id||"}"===next.id||":"===next.id?!0:isInfix(next)===isInfix(curr)||"yield"===curr.id&&state.inMoz()?curr.line!==startLine(next):!1}function isBeginOfExpr(prev){return!prev.left&&"unary"!==prev.arity}function expression(rbp,initial){var left,isArray=!1,isObject=!1,isLetExpr=!1;state.nameStack.push(),initial||"let"!==state.tokens.next.value||"("!==peek(0).value||(state.inMoz()||warning("W118",state.tokens.next,"let expressions"),isLetExpr=!0,state.funct["(scope)"].stack(),advance("let"),advance("("),state.tokens.prev.fud(),advance(")")),"(end)"===state.tokens.next.id&&error("E006",state.tokens.curr);var isDangerous=state.option.asi&&state.tokens.prev.line!==startLine(state.tokens.curr)&&_.contains(["]",")"],state.tokens.prev.id)&&_.contains(["[","("],state.tokens.curr.id);if(isDangerous&&warning("W014",state.tokens.curr,state.tokens.curr.id),advance(),initial&&(state.funct["(verb)"]=state.tokens.curr.value,state.tokens.curr.beginsStmt=!0),initial===!0&&state.tokens.curr.fud)left=state.tokens.curr.fud();else for(state.tokens.curr.nud?left=state.tokens.curr.nud():error("E030",state.tokens.curr,state.tokens.curr.id);(state.tokens.next.lbp>rbp||"(template)"===state.tokens.next.type)&&!isEndOfExpr();)isArray="Array"===state.tokens.curr.value,isObject="Object"===state.tokens.curr.value,left&&(left.value||left.first&&left.first.value)&&("new"!==left.value||left.first&&left.first.value&&"."===left.first.value)&&(isArray=!1,left.value!==state.tokens.curr.value&&(isObject=!1)),advance(),isArray&&"("===state.tokens.curr.id&&")"===state.tokens.next.id&&warning("W009",state.tokens.curr),isObject&&"("===state.tokens.curr.id&&")"===state.tokens.next.id&&warning("W010",state.tokens.curr),left&&state.tokens.curr.led?left=state.tokens.curr.led(left):error("E033",state.tokens.curr,state.tokens.curr.id);return isLetExpr&&state.funct["(scope)"].unstack(),state.nameStack.pop(),left}function startLine(token){return token.startLine||token.line}function nobreaknonadjacent(left,right){left=left||state.tokens.curr,right=right||state.tokens.next,state.option.laxbreak||left.line===startLine(right)||warning("W014",right,right.value)}function nolinebreak(t){t=t||state.tokens.curr,t.line!==startLine(state.tokens.next)&&warning("E022",t,t.value)}function nobreakcomma(left,right){left.line!==startLine(right)&&(state.option.laxcomma||(comma.first&&(warning("I001"),comma.first=!1),warning("W014",left,right.value)))}function comma(opts){if(opts=opts||{},opts.peek?nobreakcomma(state.tokens.prev,state.tokens.curr):(nobreakcomma(state.tokens.curr,state.tokens.next),advance(",")),state.tokens.next.identifier&&(!opts.property||!state.inES5()))switch(state.tokens.next.value){case"break":case"case":case"catch":case"continue":case"default":case"do":case"else":case"finally":case"for":case"if":case"in":case"instanceof":case"return":case"switch":case"throw":case"try":case"var":case"let":case"while":case"with":return error("E024",state.tokens.next,state.tokens.next.value),!1}if("(punctuator)"===state.tokens.next.type)switch(state.tokens.next.value){case"}":case"]":case",":if(opts.allowTrailing)return!0;case")":return error("E024",state.tokens.next,state.tokens.next.value),!1}return!0}function symbol(s,p){var x=state.syntax[s];return x&&"object"==typeof x||(state.syntax[s]=x={id:s,lbp:p,value:s}),x}function delim(s){var x=symbol(s,0);return x.delim=!0,x}function stmt(s,f){var x=delim(s);return x.identifier=x.reserved=!0,x.fud=f,x}function blockstmt(s,f){var x=stmt(s,f);return x.block=!0,x}function reserveName(x){var c=x.id.charAt(0);return(c>="a"&&"z">=c||c>="A"&&"Z">=c)&&(x.identifier=x.reserved=!0),x}function prefix(s,f){var x=symbol(s,150);return reserveName(x),x.nud="function"==typeof f?f:function(){return this.arity="unary",this.right=expression(150),("++"===this.id||"--"===this.id)&&(state.option.plusplus?warning("W016",this,this.id):!this.right||this.right.identifier&&!isReserved(this.right)||"."===this.right.id||"["===this.right.id||warning("W017",this),this.right&&this.right.isMetaProperty?error("E031",this):this.right&&this.right.identifier&&state.funct["(scope)"].block.modify(this.right.value,this)),this},x}function type(s,f){var x=delim(s);return x.type=s,x.nud=f,x}function reserve(name,func){var x=type(name,func);return x.identifier=!0,x.reserved=!0,x}function FutureReservedWord(name,meta){var x=type(name,meta&&meta.nud||function(){return this});return meta=meta||{},meta.isFutureReservedWord=!0,x.value=name,x.identifier=!0,x.reserved=!0,x.meta=meta,x}function reservevar(s,v){return reserve(s,function(){return"function"==typeof v&&v(this),this})}function infix(s,f,p,w){var x=symbol(s,p);return reserveName(x),x.infix=!0,x.led=function(left){return w||nobreaknonadjacent(state.tokens.prev,state.tokens.curr),"in"!==s&&"instanceof"!==s||"!"!==left.id||warning("W018",left,"!"),"function"==typeof f?f(left,this):(this.left=left,this.right=expression(p),this)},x}function application(s){var x=symbol(s,42);return x.led=function(left){return nobreaknonadjacent(state.tokens.prev,state.tokens.curr),this.left=left,this.right=doFunction({type:"arrow",loneArg:left}),this},x}function relation(s,f){var x=symbol(s,100);return x.led=function(left){nobreaknonadjacent(state.tokens.prev,state.tokens.curr),this.left=left;var right=this.right=expression(100);return isIdentifier(left,"NaN")||isIdentifier(right,"NaN")?warning("W019",this):f&&f.apply(this,[left,right]),left&&right||quit("E041",state.tokens.curr.line),"!"===left.id&&warning("W018",left,"!"),"!"===right.id&&warning("W018",right,"!"),this},x}function isPoorRelation(node){return node&&("(number)"===node.type&&0===+node.value||"(string)"===node.type&&""===node.value||"null"===node.type&&!state.option.eqnull||"true"===node.type||"false"===node.type||"undefined"===node.type)}function isTypoTypeof(left,right,state){var values;return state.option.notypeof?!1:left&&right?(values=state.inES6()?typeofValues.es6:typeofValues.es3,"(identifier)"===right.type&&"typeof"===right.value&&"(string)"===left.type?!_.contains(values,left.value):!1):!1}function isGlobalEval(left,state){var isGlobal=!1;return"this"===left.type&&null===state.funct["(context)"]?isGlobal=!0:"(identifier)"===left.type&&(state.option.node&&"global"===left.value?isGlobal=!0:!state.option.browser||"window"!==left.value&&"document"!==left.value||(isGlobal=!0)),isGlobal}function findNativePrototype(left){function walkPrototype(obj){return"object"==typeof obj?"prototype"===obj.right?obj:walkPrototype(obj.left):void 0}function walkNative(obj){for(;!obj.identifier&&"object"==typeof obj.left;)obj=obj.left;return obj.identifier&&natives.indexOf(obj.value)>=0?obj.value:void 0}var natives=["Array","ArrayBuffer","Boolean","Collator","DataView","Date","DateTimeFormat","Error","EvalError","Float32Array","Float64Array","Function","Infinity","Intl","Int16Array","Int32Array","Int8Array","Iterator","Number","NumberFormat","Object","RangeError","ReferenceError","RegExp","StopIteration","String","SyntaxError","TypeError","Uint16Array","Uint32Array","Uint8Array","Uint8ClampedArray","URIError"],prototype=walkPrototype(left);return prototype?walkNative(prototype):void 0}function checkLeftSideAssign(left,assignToken,options){var allowDestructuring=options&&options.allowDestructuring;if(assignToken=assignToken||left,state.option.freeze){var nativeObject=findNativePrototype(left);nativeObject&&warning("W121",left,nativeObject)}return left.identifier&&!left.isMetaProperty&&state.funct["(scope)"].block.reassign(left.value,left),"."===left.id?((!left.left||"arguments"===left.left.value&&!state.isStrict())&&warning("E031",assignToken),state.nameStack.set(state.tokens.prev),!0):"{"===left.id||"["===left.id?(allowDestructuring&&state.tokens.curr.left.destructAssign?state.tokens.curr.left.destructAssign.forEach(function(t){t.id&&state.funct["(scope)"].block.modify(t.id,t.token)}):"{"!==left.id&&left.left?"arguments"!==left.left.value||state.isStrict()||warning("E031",assignToken):warning("E031",assignToken),"["===left.id&&state.nameStack.set(left.right),!0):left.isMetaProperty?(error("E031",assignToken),!0):left.identifier&&!isReserved(left)?("exception"===state.funct["(scope)"].labeltype(left.value)&&warning("W022",left),state.nameStack.set(left),!0):(left===state.syntax["function"]&&warning("W023",state.tokens.curr),!1)}function assignop(s,f,p){var x=infix(s,"function"==typeof f?f:function(left,that){return that.left=left,left&&checkLeftSideAssign(left,that,{allowDestructuring:!0})?(that.right=expression(10),that):(error("E031",that),void 0)},p);return x.exps=!0,x.assign=!0,x}function bitwise(s,f,p){var x=symbol(s,p);return reserveName(x),x.led="function"==typeof f?f:function(left){return state.option.bitwise&&warning("W016",this,this.id),this.left=left,this.right=expression(p),this},x}function bitwiseassignop(s){return assignop(s,function(left,that){return state.option.bitwise&&warning("W016",that,that.id),left&&checkLeftSideAssign(left,that)?(that.right=expression(10),that):(error("E031",that),void 0)},20)}function suffix(s){var x=symbol(s,150);return x.led=function(left){return state.option.plusplus?warning("W016",this,this.id):left.identifier&&!isReserved(left)||"."===left.id||"["===left.id||warning("W017",this),left.isMetaProperty?error("E031",this):left&&left.identifier&&state.funct["(scope)"].block.modify(left.value,left),this.left=left,this},x}function optionalidentifier(fnparam,prop,preserve){if(state.tokens.next.identifier){preserve||advance();var curr=state.tokens.curr,val=state.tokens.curr.value;return isReserved(curr)?prop&&state.inES5()?val:fnparam&&"undefined"===val?val:(warning("W024",state.tokens.curr,state.tokens.curr.id),val):val}}function identifier(fnparam,prop){var i=optionalidentifier(fnparam,prop,!1);if(i)return i;if("..."===state.tokens.next.value){if(state.inES6(!0)||warning("W119",state.tokens.next,"spread/rest operator","6"),advance(),checkPunctuator(state.tokens.next,"..."))for(warning("E024",state.tokens.next,"...");checkPunctuator(state.tokens.next,"...");)advance();return state.tokens.next.identifier?identifier(fnparam,prop):(warning("E024",state.tokens.curr,"..."),void 0)}error("E030",state.tokens.next,state.tokens.next.value),";"!==state.tokens.next.id&&advance()}function reachable(controlToken){var t,i=0;if(";"===state.tokens.next.id&&!controlToken.inBracelessBlock)for(;;){do t=peek(i),i+=1;while("(end)"!==t.id&&"(comment)"===t.id);if(t.reach)return;if("(endline)"!==t.id){if("function"===t.id){state.option.latedef===!0&&warning("W026",t);break}warning("W027",t,t.value,controlToken.value);break}}}function parseFinalSemicolon(){if(";"!==state.tokens.next.id){if(state.tokens.next.isUnclosed)return advance();var sameLine=startLine(state.tokens.next)===state.tokens.curr.line&&"(end)"!==state.tokens.next.id,blockEnd=checkPunctuator(state.tokens.next,"}");sameLine&&!blockEnd?errorAt("E058",state.tokens.curr.line,state.tokens.curr.character):state.option.asi||(blockEnd&&!state.option.lastsemic||!sameLine)&&warningAt("W033",state.tokens.curr.line,state.tokens.curr.character)}else advance(";")}function statement(){var r,i=indent,t=state.tokens.next,hasOwnScope=!1;if(";"===t.id)return advance(";"),void 0;var res=isReserved(t);if(res&&t.meta&&t.meta.isFutureReservedWord&&":"===peek().id&&(warning("W024",t,t.id),res=!1),t.identifier&&!res&&":"===peek().id&&(advance(),advance(":"),hasOwnScope=!0,state.funct["(scope)"].stack(),state.funct["(scope)"].block.addBreakLabel(t.value,{token:state.tokens.curr}),state.tokens.next.labelled||"{"===state.tokens.next.value||warning("W028",state.tokens.next,t.value,state.tokens.next.value),state.tokens.next.label=t.value,t=state.tokens.next),"{"===t.id){var iscase="case"===state.funct["(verb)"]&&":"===state.tokens.curr.value;return block(!0,!0,!1,!1,iscase),void 0}return r=expression(0,!0),!r||r.identifier&&"function"===r.value||"(punctuator)"===r.type&&r.left&&r.left.identifier&&"function"===r.left.value||state.isStrict()||"global"!==state.option.strict||warning("E007"),t.block||(state.option.expr||r&&r.exps?state.option.nonew&&r&&r.left&&"("===r.id&&"new"===r.left.id&&warning("W031",t):warning("W030",state.tokens.curr),parseFinalSemicolon()),indent=i,hasOwnScope&&state.funct["(scope)"].unstack(),r}function statements(){for(var p,a=[];!state.tokens.next.reach&&"(end)"!==state.tokens.next.id;)";"===state.tokens.next.id?(p=peek(),(!p||"("!==p.id&&"["!==p.id)&&warning("W032"),advance(";")):a.push(statement());return a}function directives(){for(var i,p,pn;"(string)"===state.tokens.next.id;){if(p=peek(0),"(endline)"===p.id){i=1;do pn=peek(i++);while("(endline)"===pn.id);if(";"===pn.id)p=pn;else{if("["===pn.value||"."===pn.value)break;state.option.asi&&"("!==pn.value||warning("W033",state.tokens.next)}}else{if("."===p.id||"["===p.id)break;";"!==p.id&&warning("W033",p)}advance();var directive=state.tokens.curr.value;(state.directive[directive]||"use strict"===directive&&"implied"===state.option.strict)&&warning("W034",state.tokens.curr,directive),state.directive[directive]=!0,";"===p.id&&advance(";")}state.isStrict()&&(state.option["(explicitNewcap)"]||(state.option.newcap=!0),state.option.undef=!0)}function block(ordinary,stmt,isfunc,isfatarrow,iscase){var a,m,t,line,d,b=inblock,old_indent=indent;inblock=ordinary,t=state.tokens.next;var metrics=state.funct["(metrics)"];if(metrics.nestedBlockDepth+=1,metrics.verifyMaxNestedBlockDepthPerFunction(),"{"===state.tokens.next.id){if(advance("{"),state.funct["(scope)"].stack(),line=state.tokens.curr.line,"}"!==state.tokens.next.id){for(indent+=state.option.indent;!ordinary&&state.tokens.next.from>indent;)indent+=state.option.indent;if(isfunc){m={};for(d in state.directive)_.has(state.directive,d)&&(m[d]=state.directive[d]);directives(),state.option.strict&&state.funct["(context)"]["(global)"]&&(m["use strict"]||state.isStrict()||warning("E007"))}a=statements(),metrics.statementCount+=a.length,indent-=state.option.indent}advance("}",t),isfunc&&(state.funct["(scope)"].validateParams(),m&&(state.directive=m)),state.funct["(scope)"].unstack(),indent=old_indent}else if(ordinary)state.funct["(noblockscopedvar)"]="for"!==state.tokens.next.id,state.funct["(scope)"].stack(),(!stmt||state.option.curly)&&warning("W116",state.tokens.next,"{",state.tokens.next.value),state.tokens.next.inBracelessBlock=!0,indent+=state.option.indent,a=[statement()],indent-=state.option.indent,state.funct["(scope)"].unstack(),delete state.funct["(noblockscopedvar)"];else if(isfunc){if(state.funct["(scope)"].stack(),m={},!stmt||isfatarrow||state.inMoz()||error("W118",state.tokens.curr,"function closure expressions"),!stmt)for(d in state.directive)_.has(state.directive,d)&&(m[d]=state.directive[d]);expression(10),state.option.strict&&state.funct["(context)"]["(global)"]&&(m["use strict"]||state.isStrict()||warning("E007")),state.funct["(scope)"].unstack()}else error("E021",state.tokens.next,"{",state.tokens.next.value);switch(state.funct["(verb)"]){case"break":case"continue":case"return":case"throw":if(iscase)break;default:state.funct["(verb)"]=null}return inblock=b,!ordinary||!state.option.noempty||a&&0!==a.length||warning("W035",state.tokens.prev),metrics.nestedBlockDepth-=1,a}function countMember(m){membersOnly&&"boolean"!=typeof membersOnly[m]&&warning("W036",state.tokens.curr,m),"number"==typeof member[m]?member[m]+=1:member[m]=1}function comprehensiveArrayExpression(){var res={};res.exps=!0,state.funct["(comparray)"].stack();var reversed=!1;return"for"!==state.tokens.next.value&&(reversed=!0,state.inMoz()||warning("W116",state.tokens.next,"for",state.tokens.next.value),state.funct["(comparray)"].setState("use"),res.right=expression(10)),advance("for"),"each"===state.tokens.next.value&&(advance("each"),state.inMoz()||warning("W118",state.tokens.curr,"for each")),advance("("),state.funct["(comparray)"].setState("define"),res.left=expression(130),_.contains(["in","of"],state.tokens.next.value)?advance():error("E045",state.tokens.curr),state.funct["(comparray)"].setState("generate"),expression(10),advance(")"),"if"===state.tokens.next.value&&(advance("if"),advance("("),state.funct["(comparray)"].setState("filter"),res.filter=expression(10),advance(")")),reversed||(state.funct["(comparray)"].setState("use"),res.right=expression(10)),advance("]"),state.funct["(comparray)"].unstack(),res}function isMethod(){return state.funct["(statement)"]&&"class"===state.funct["(statement)"].type||state.funct["(context)"]&&"class"===state.funct["(context)"]["(verb)"]}function isPropertyName(token){return token.identifier||"(string)"===token.id||"(number)"===token.id}function propertyName(preserveOrToken){var id,preserve=!0;return"object"==typeof preserveOrToken?id=preserveOrToken:(preserve=preserveOrToken,id=optionalidentifier(!1,!0,preserve)),id?"object"==typeof id&&("(string)"===id.id||"(identifier)"===id.id?id=id.value:"(number)"===id.id&&(id=""+id.value)):"(string)"===state.tokens.next.id?(id=state.tokens.next.value,preserve||advance()):"(number)"===state.tokens.next.id&&(id=""+state.tokens.next.value,preserve||advance()),"hasOwnProperty"===id&&warning("W001"),id}function functionparams(options){function addParam(addParamArgs){state.funct["(scope)"].addParam.apply(state.funct["(scope)"],addParamArgs)}var next,ident,t,paramsIds=[],tokens=[],pastDefault=!1,pastRest=!1,arity=0,loneArg=options&&options.loneArg;if(loneArg&&loneArg.identifier===!0)return state.funct["(scope)"].addParam(loneArg.value,loneArg),{arity:1,params:[loneArg.value]};if(next=state.tokens.next,options&&options.parsedOpening||advance("("),")"===state.tokens.next.id)return advance(")"),void 0;for(;;){arity++;var currentParams=[];if(_.contains(["{","["],state.tokens.next.id)){tokens=destructuringPattern();for(t in tokens)t=tokens[t],t.id&&(paramsIds.push(t.id),currentParams.push([t.id,t.token]))}else if(checkPunctuator(state.tokens.next,"...")&&(pastRest=!0),ident=identifier(!0))paramsIds.push(ident),currentParams.push([ident,state.tokens.curr]);else for(;!checkPunctuators(state.tokens.next,[",",")"]);)advance();if(pastDefault&&"="!==state.tokens.next.id&&error("W138",state.tokens.current),"="===state.tokens.next.id&&(state.inES6()||warning("W119",state.tokens.next,"default parameters","6"),advance("="),pastDefault=!0,expression(10)),currentParams.forEach(addParam),","!==state.tokens.next.id)return advance(")",next),{arity:arity,params:paramsIds};pastRest&&warning("W131",state.tokens.next),comma()}}function functor(name,token,overwrites){var funct={"(name)":name,"(breakage)":0,"(loopage)":0,"(tokens)":{},"(properties)":{},"(catch)":!1,"(global)":!1,"(line)":null,"(character)":null,"(metrics)":null,"(statement)":null,"(context)":null,"(scope)":null,"(comparray)":null,"(generator)":null,"(arrow)":null,"(params)":null};return token&&_.extend(funct,{"(line)":token.line,"(character)":token.character,"(metrics)":createMetrics(token)}),_.extend(funct,overwrites),funct["(context)"]&&(funct["(scope)"]=funct["(context)"]["(scope)"],funct["(comparray)"]=funct["(context)"]["(comparray)"]),funct}function isFunctor(token){return"(scope)"in token}function hasParsedCode(funct){return funct["(global)"]&&!funct["(verb)"]}function doTemplateLiteral(left){function end(){if(state.tokens.curr.template&&state.tokens.curr.tail&&state.tokens.curr.context===ctx)return!0;var complete=state.tokens.next.template&&state.tokens.next.tail&&state.tokens.next.context===ctx;return complete&&advance(),complete||state.tokens.next.isUnclosed}var ctx=this.context,noSubst=this.noSubst,depth=this.depth;if(!noSubst)for(;!end();)!state.tokens.next.template||state.tokens.next.depth>depth?expression(0):advance();return{id:"(template)",type:"(template)",tag:left}}function doFunction(options){var f,token,name,statement,classExprBinding,isGenerator,isArrow,ignoreLoopFunc,oldOption=state.option,oldIgnored=state.ignored;options&&(name=options.name,statement=options.statement,classExprBinding=options.classExprBinding,isGenerator="generator"===options.type,isArrow="arrow"===options.type,ignoreLoopFunc=options.ignoreLoopFunc),state.option=Object.create(state.option),state.ignored=Object.create(state.ignored),state.funct=functor(name||state.nameStack.infer(),state.tokens.next,{"(statement)":statement,"(context)":state.funct,"(arrow)":isArrow,"(generator)":isGenerator}),f=state.funct,token=state.tokens.curr,token.funct=state.funct,functions.push(state.funct),state.funct["(scope)"].stack("functionouter");var internallyAccessibleName=name||classExprBinding;internallyAccessibleName&&state.funct["(scope)"].block.add(internallyAccessibleName,classExprBinding?"class":"function",state.tokens.curr,!1),state.funct["(scope)"].stack("functionparams");var paramsInfo=functionparams(options);return paramsInfo?(state.funct["(params)"]=paramsInfo.params,state.funct["(metrics)"].arity=paramsInfo.arity,state.funct["(metrics)"].verifyMaxParametersPerFunction()):state.funct["(metrics)"].arity=0,isArrow&&(state.inES6(!0)||warning("W119",state.tokens.curr,"arrow function syntax (=>)","6"),options.loneArg||advance("=>")),block(!1,!0,!0,isArrow),!state.option.noyield&&isGenerator&&"yielded"!==state.funct["(generator)"]&&warning("W124",state.tokens.curr),state.funct["(metrics)"].verifyMaxStatementsPerFunction(),state.funct["(metrics)"].verifyMaxComplexityPerFunction(),state.funct["(unusedOption)"]=state.option.unused,state.option=oldOption,state.ignored=oldIgnored,state.funct["(last)"]=state.tokens.curr.line,state.funct["(lastcharacter)"]=state.tokens.curr.character,state.funct["(scope)"].unstack(),state.funct["(scope)"].unstack(),state.funct=state.funct["(context)"],ignoreLoopFunc||state.option.loopfunc||!state.funct["(loopage)"]||f["(isCapturing)"]&&warning("W083",token),f}function createMetrics(functionStartToken){return{statementCount:0,nestedBlockDepth:-1,ComplexityCount:1,arity:0,verifyMaxStatementsPerFunction:function(){state.option.maxstatements&&this.statementCount>state.option.maxstatements&&warning("W071",functionStartToken,this.statementCount)\n},verifyMaxParametersPerFunction:function(){_.isNumber(state.option.maxparams)&&this.arity>state.option.maxparams&&warning("W072",functionStartToken,this.arity)},verifyMaxNestedBlockDepthPerFunction:function(){state.option.maxdepth&&this.nestedBlockDepth>0&&this.nestedBlockDepth===state.option.maxdepth+1&&warning("W073",null,this.nestedBlockDepth)},verifyMaxComplexityPerFunction:function(){var max=state.option.maxcomplexity,cc=this.ComplexityCount;max&&cc>max&&warning("W074",functionStartToken,cc)}}}function increaseComplexityCount(){state.funct["(metrics)"].ComplexityCount+=1}function checkCondAssignment(expr){var id,paren;switch(expr&&(id=expr.id,paren=expr.paren,","===id&&(expr=expr.exprs[expr.exprs.length-1])&&(id=expr.id,paren=paren||expr.paren)),id){case"=":case"+=":case"-=":case"*=":case"%=":case"&=":case"|=":case"^=":case"/=":paren||state.option.boss||warning("W084")}}function checkProperties(props){if(state.inES5())for(var name in props)props[name]&&props[name].setterToken&&!props[name].getterToken&&warning("W078",props[name].setterToken)}function metaProperty(name,c){if(checkPunctuator(state.tokens.next,".")){var left=state.tokens.curr.id;advance(".");var id=identifier();return state.tokens.curr.isMetaProperty=!0,name!==id?error("E057",state.tokens.prev,left,id):c(),state.tokens.curr}}function destructuringPattern(options){var isAssignment=options&&options.assignment;return state.inES6()||warning("W104",state.tokens.curr,isAssignment?"destructuring assignment":"destructuring binding","6"),destructuringPatternRecursive(options)}function destructuringPatternRecursive(options){var ids,identifiers=[],openingParsed=options&&options.openingParsed,isAssignment=options&&options.assignment,recursiveOptions=isAssignment?{assignment:isAssignment}:null,firstToken=openingParsed?state.tokens.curr:state.tokens.next,nextInnerDE=function(){var ident;if(checkPunctuators(state.tokens.next,["[","{"])){ids=destructuringPatternRecursive(recursiveOptions);for(var id in ids)id=ids[id],identifiers.push({id:id.id,token:id.token})}else if(checkPunctuator(state.tokens.next,","))identifiers.push({id:null,token:state.tokens.curr});else{if(!checkPunctuator(state.tokens.next,"(")){var is_rest=checkPunctuator(state.tokens.next,"...");if(isAssignment){var identifierToken=is_rest?peek(0):state.tokens.next;identifierToken.identifier||warning("E030",identifierToken,identifierToken.value);var assignTarget=expression(155);assignTarget&&(checkLeftSideAssign(assignTarget),assignTarget.identifier&&(ident=assignTarget.value))}else ident=identifier();return ident&&identifiers.push({id:ident,token:state.tokens.curr}),is_rest}advance("("),nextInnerDE(),advance(")")}return!1},assignmentProperty=function(){var id;checkPunctuator(state.tokens.next,"[")?(advance("["),expression(10),advance("]"),advance(":"),nextInnerDE()):"(string)"===state.tokens.next.id||"(number)"===state.tokens.next.id?(advance(),advance(":"),nextInnerDE()):(id=identifier(),checkPunctuator(state.tokens.next,":")?(advance(":"),nextInnerDE()):id&&(isAssignment&&checkLeftSideAssign(state.tokens.curr),identifiers.push({id:id,token:state.tokens.curr})))};if(checkPunctuator(firstToken,"[")){openingParsed||advance("["),checkPunctuator(state.tokens.next,"]")&&warning("W137",state.tokens.curr);for(var element_after_rest=!1;!checkPunctuator(state.tokens.next,"]");)nextInnerDE()&&!element_after_rest&&checkPunctuator(state.tokens.next,",")&&(warning("W130",state.tokens.next),element_after_rest=!0),checkPunctuator(state.tokens.next,"=")&&(checkPunctuator(state.tokens.prev,"...")?advance("]"):advance("="),"undefined"===state.tokens.next.id&&warning("W080",state.tokens.prev,state.tokens.prev.value),expression(10)),checkPunctuator(state.tokens.next,"]")||advance(",");advance("]")}else if(checkPunctuator(firstToken,"{")){for(openingParsed||advance("{"),checkPunctuator(state.tokens.next,"}")&&warning("W137",state.tokens.curr);!checkPunctuator(state.tokens.next,"}")&&(assignmentProperty(),checkPunctuator(state.tokens.next,"=")&&(advance("="),"undefined"===state.tokens.next.id&&warning("W080",state.tokens.prev,state.tokens.prev.value),expression(10)),checkPunctuator(state.tokens.next,"}")||(advance(","),!checkPunctuator(state.tokens.next,"}"))););advance("}")}return identifiers}function destructuringPatternMatch(tokens,value){var first=value.first;first&&_.zip(tokens,Array.isArray(first)?first:[first]).forEach(function(val){var token=val[0],value=val[1];token&&value?token.first=value:token&&token.first&&!value&&warning("W080",token.first,token.first.value)})}function blockVariableStatement(type,statement,context){var tokens,lone,value,letblock,prefix=context&&context.prefix,inexport=context&&context.inexport,isLet="let"===type,isConst="const"===type;for(state.inES6()||warning("W104",state.tokens.curr,type,"6"),isLet&&"("===state.tokens.next.value?(state.inMoz()||warning("W118",state.tokens.next,"let block"),advance("("),state.funct["(scope)"].stack(),letblock=!0):state.funct["(noblockscopedvar)"]&&error("E048",state.tokens.curr,isConst?"Const":"Let"),statement.first=[];;){var names=[];_.contains(["{","["],state.tokens.next.value)?(tokens=destructuringPattern(),lone=!1):(tokens=[{id:identifier(),token:state.tokens.curr}],lone=!0),!prefix&&isConst&&"="!==state.tokens.next.id&&warning("E012",state.tokens.curr,state.tokens.curr.value);for(var t in tokens)tokens.hasOwnProperty(t)&&(t=tokens[t],state.funct["(scope)"].block.isGlobal()&&predefined[t.id]===!1&&warning("W079",t.token,t.id),t.id&&!state.funct["(noblockscopedvar)"]&&(state.funct["(scope)"].addlabel(t.id,{type:type,token:t.token}),names.push(t.token),lone&&inexport&&state.funct["(scope)"].setExported(t.token.value,t.token)));if("="===state.tokens.next.id&&(advance("="),prefix||"undefined"!==state.tokens.next.id||warning("W080",state.tokens.prev,state.tokens.prev.value),!prefix&&"="===peek(0).id&&state.tokens.next.identifier&&warning("W120",state.tokens.next,state.tokens.next.value),value=expression(prefix?120:10),lone?tokens[0].first=value:destructuringPatternMatch(names,value)),statement.first=statement.first.concat(names),","!==state.tokens.next.id)break;comma()}return letblock&&(advance(")"),block(!0,!0),statement.block=!0,state.funct["(scope)"].unstack()),statement}function classdef(isStatement){return state.inES6()||warning("W104",state.tokens.curr,"class","6"),isStatement?(this.name=identifier(),state.funct["(scope)"].addlabel(this.name,{type:"class",token:state.tokens.curr})):state.tokens.next.identifier&&"extends"!==state.tokens.next.value?(this.name=identifier(),this.namedExpr=!0):this.name=state.nameStack.infer(),classtail(this),this}function classtail(c){var wasInClassBody=state.inClassBody;"extends"===state.tokens.next.value&&(advance("extends"),c.heritage=expression(10)),state.inClassBody=!0,advance("{"),c.body=classbody(c),advance("}"),state.inClassBody=wasInClassBody}function classbody(c){for(var name,isStatic,isGenerator,getset,computed,props=Object.create(null),staticProps=Object.create(null),i=0;"}"!==state.tokens.next.id;++i)if(name=state.tokens.next,isStatic=!1,isGenerator=!1,getset=null,";"!==name.id){if("*"===name.id&&(isGenerator=!0,advance("*"),name=state.tokens.next),"["===name.id)name=computedPropertyName(),computed=!0;else{if(!isPropertyName(name)){warning("W052",state.tokens.next,state.tokens.next.value||state.tokens.next.type),advance();continue}advance(),computed=!1,name.identifier&&"static"===name.value&&(checkPunctuator(state.tokens.next,"*")&&(isGenerator=!0,advance("*")),(isPropertyName(state.tokens.next)||"["===state.tokens.next.id)&&(computed="["===state.tokens.next.id,isStatic=!0,name=state.tokens.next,"["===state.tokens.next.id?name=computedPropertyName():advance())),!name.identifier||"get"!==name.value&&"set"!==name.value||(isPropertyName(state.tokens.next)||"["===state.tokens.next.id)&&(computed="["===state.tokens.next.id,getset=name,name=state.tokens.next,"["===state.tokens.next.id?name=computedPropertyName():advance())}if(!checkPunctuator(state.tokens.next,"(")){for(error("E054",state.tokens.next,state.tokens.next.value);"}"!==state.tokens.next.id&&!checkPunctuator(state.tokens.next,"(");)advance();"("!==state.tokens.next.value&&doFunction({statement:c})}if(computed||(getset?saveAccessor(getset.value,isStatic?staticProps:props,name.value,name,!0,isStatic):("constructor"===name.value?state.nameStack.set(c):state.nameStack.set(name),saveProperty(isStatic?staticProps:props,name.value,name,!0,isStatic))),getset&&"constructor"===name.value){var propDesc="get"===getset.value?"class getter method":"class setter method";error("E049",name,propDesc,"constructor")}else"prototype"===name.value&&error("E049",name,"class method","prototype");propertyName(name),doFunction({statement:c,type:isGenerator?"generator":null,classExprBinding:c.namedExpr?c.name:null})}else warning("W032"),advance(";");checkProperties(props)}function saveProperty(props,name,tkn,isClass,isStatic){var msg=["key","class method","static class method"];msg=msg[(isClass||!1)+(isStatic||!1)],tkn.identifier&&(name=tkn.value),props[name]&&"__proto__"!==name?warning("W075",state.tokens.next,msg,name):props[name]=Object.create(null),props[name].basic=!0,props[name].basictkn=tkn}function saveAccessor(accessorType,props,name,tkn,isClass,isStatic){var flagName="get"===accessorType?"getterToken":"setterToken",msg="";isClass?(isStatic&&(msg+="static "),msg+=accessorType+"ter method"):msg="key",state.tokens.curr.accessorType=accessorType,state.nameStack.set(tkn),props[name]?(props[name].basic||props[name][flagName])&&"__proto__"!==name&&warning("W075",state.tokens.next,msg,name):props[name]=Object.create(null),props[name][flagName]=tkn}function computedPropertyName(){advance("["),state.inES6()||warning("W119",state.tokens.curr,"computed property names","6");var value=expression(10);return advance("]"),value}function checkPunctuators(token,values){return"(punctuator)"===token.type?_.contains(values,token.value):!1}function checkPunctuator(token,value){return"(punctuator)"===token.type&&token.value===value}function destructuringAssignOrJsonValue(){var block=lookupBlockType();block.notJson?(!state.inES6()&&block.isDestAssign&&warning("W104",state.tokens.curr,"destructuring assignment","6"),statements()):(state.option.laxbreak=!0,state.jsonMode=!0,jsonValue())}function jsonValue(){function jsonObject(){var o={},t=state.tokens.next;if(advance("{"),"}"!==state.tokens.next.id)for(;;){if("(end)"===state.tokens.next.id)error("E026",state.tokens.next,t.line);else{if("}"===state.tokens.next.id){warning("W094",state.tokens.curr);break}","===state.tokens.next.id?error("E028",state.tokens.next):"(string)"!==state.tokens.next.id&&warning("W095",state.tokens.next,state.tokens.next.value)}if(o[state.tokens.next.value]===!0?warning("W075",state.tokens.next,"key",state.tokens.next.value):"__proto__"===state.tokens.next.value&&!state.option.proto||"__iterator__"===state.tokens.next.value&&!state.option.iterator?warning("W096",state.tokens.next,state.tokens.next.value):o[state.tokens.next.value]=!0,advance(),advance(":"),jsonValue(),","!==state.tokens.next.id)break;advance(",")}advance("}")}function jsonArray(){var t=state.tokens.next;if(advance("["),"]"!==state.tokens.next.id)for(;;){if("(end)"===state.tokens.next.id)error("E027",state.tokens.next,t.line);else{if("]"===state.tokens.next.id){warning("W094",state.tokens.curr);break}","===state.tokens.next.id&&error("E028",state.tokens.next)}if(jsonValue(),","!==state.tokens.next.id)break;advance(",")}advance("]")}switch(state.tokens.next.id){case"{":jsonObject();break;case"[":jsonArray();break;case"true":case"false":case"null":case"(number)":case"(string)":advance();break;case"-":advance("-"),advance("(number)");break;default:error("E003",state.tokens.next)}}var api,declared,functions,inblock,indent,lookahead,lex,member,membersOnly,predefined,stack,urls,bang={"<":!0,"<=":!0,"==":!0,"===":!0,"!==":!0,"!=":!0,">":!0,">=":!0,"+":!0,"-":!0,"*":!0,"/":!0,"%":!0},functionicity=["closure","exception","global","label","outer","unused","var"],extraModules=[],emitter=new events.EventEmitter,typeofValues={};typeofValues.legacy=["xml","unknown"],typeofValues.es3=["undefined","boolean","number","string","function","object"],typeofValues.es3=typeofValues.es3.concat(typeofValues.legacy),typeofValues.es6=typeofValues.es3.concat("symbol"),type("(number)",function(){return this}),type("(string)",function(){return this}),state.syntax["(identifier)"]={type:"(identifier)",lbp:0,identifier:!0,nud:function(){var v=this.value;return"=>"===state.tokens.next.id?this:(state.funct["(comparray)"].check(v)||state.funct["(scope)"].block.use(v,state.tokens.curr),this)},led:function(){error("E033",state.tokens.next,state.tokens.next.value)}};var baseTemplateSyntax={lbp:0,identifier:!1,template:!0};state.syntax["(template)"]=_.extend({type:"(template)",nud:doTemplateLiteral,led:doTemplateLiteral,noSubst:!1},baseTemplateSyntax),state.syntax["(template middle)"]=_.extend({type:"(template middle)",middle:!0,noSubst:!1},baseTemplateSyntax),state.syntax["(template tail)"]=_.extend({type:"(template tail)",tail:!0,noSubst:!1},baseTemplateSyntax),state.syntax["(no subst template)"]=_.extend({type:"(template)",nud:doTemplateLiteral,led:doTemplateLiteral,noSubst:!0,tail:!0},baseTemplateSyntax),type("(regexp)",function(){return this}),delim("(endline)"),delim("(begin)"),delim("(end)").reach=!0,delim("(error)").reach=!0,delim("}").reach=!0,delim(")"),delim("]"),delim(\'"\').reach=!0,delim("\'").reach=!0,delim(";"),delim(":").reach=!0,delim("#"),reserve("else"),reserve("case").reach=!0,reserve("catch"),reserve("default").reach=!0,reserve("finally"),reservevar("arguments",function(x){state.isStrict()&&state.funct["(global)"]&&warning("E008",x)}),reservevar("eval"),reservevar("false"),reservevar("Infinity"),reservevar("null"),reservevar("this",function(x){state.isStrict()&&!isMethod()&&!state.option.validthis&&(state.funct["(statement)"]&&state.funct["(name)"].charAt(0)>"Z"||state.funct["(global)"])&&warning("W040",x)}),reservevar("true"),reservevar("undefined"),assignop("=","assign",20),assignop("+=","assignadd",20),assignop("-=","assignsub",20),assignop("*=","assignmult",20),assignop("/=","assigndiv",20).nud=function(){error("E014")},assignop("%=","assignmod",20),bitwiseassignop("&="),bitwiseassignop("|="),bitwiseassignop("^="),bitwiseassignop("<<="),bitwiseassignop(">>="),bitwiseassignop(">>>="),infix(",",function(left,that){var expr;if(that.exprs=[left],state.option.nocomma&&warning("W127"),!comma({peek:!0}))return that;for(;;){if(!(expr=expression(10)))break;if(that.exprs.push(expr),","!==state.tokens.next.value||!comma())break}return that},10,!0),infix("?",function(left,that){return increaseComplexityCount(),that.left=left,that.right=expression(10),advance(":"),that["else"]=expression(10),that},30);var orPrecendence=40;infix("||",function(left,that){return increaseComplexityCount(),that.left=left,that.right=expression(orPrecendence),that},orPrecendence),infix("&&","and",50),bitwise("|","bitor",70),bitwise("^","bitxor",80),bitwise("&","bitand",90),relation("==",function(left,right){var eqnull=state.option.eqnull&&("null"===(left&&left.value)||"null"===(right&&right.value));switch(!0){case!eqnull&&state.option.eqeqeq:this.from=this.character,warning("W116",this,"===","==");break;case isPoorRelation(left):warning("W041",this,"===",left.value);break;case isPoorRelation(right):warning("W041",this,"===",right.value);break;case isTypoTypeof(right,left,state):warning("W122",this,right.value);break;case isTypoTypeof(left,right,state):warning("W122",this,left.value)}return this}),relation("===",function(left,right){return isTypoTypeof(right,left,state)?warning("W122",this,right.value):isTypoTypeof(left,right,state)&&warning("W122",this,left.value),this}),relation("!=",function(left,right){var eqnull=state.option.eqnull&&("null"===(left&&left.value)||"null"===(right&&right.value));return!eqnull&&state.option.eqeqeq?(this.from=this.character,warning("W116",this,"!==","!=")):isPoorRelation(left)?warning("W041",this,"!==",left.value):isPoorRelation(right)?warning("W041",this,"!==",right.value):isTypoTypeof(right,left,state)?warning("W122",this,right.value):isTypoTypeof(left,right,state)&&warning("W122",this,left.value),this}),relation("!==",function(left,right){return isTypoTypeof(right,left,state)?warning("W122",this,right.value):isTypoTypeof(left,right,state)&&warning("W122",this,left.value),this}),relation("<"),relation(">"),relation("<="),relation(">="),bitwise("<<","shiftleft",120),bitwise(">>","shiftright",120),bitwise(">>>","shiftrightunsigned",120),infix("in","in",120),infix("instanceof","instanceof",120),infix("+",function(left,that){var right;return that.left=left,that.right=right=expression(130),left&&right&&"(string)"===left.id&&"(string)"===right.id?(left.value+=right.value,left.character=right.character,!state.option.scripturl&®.javascriptURL.test(left.value)&&warning("W050",left),left):that},130),prefix("+","num"),prefix("+++",function(){return warning("W007"),this.arity="unary",this.right=expression(150),this}),infix("+++",function(left){return warning("W007"),this.left=left,this.right=expression(130),this},130),infix("-","sub",130),prefix("-","neg"),prefix("---",function(){return warning("W006"),this.arity="unary",this.right=expression(150),this}),infix("---",function(left){return warning("W006"),this.left=left,this.right=expression(130),this},130),infix("*","mult",140),infix("/","div",140),infix("%","mod",140),suffix("++"),prefix("++","preinc"),state.syntax["++"].exps=!0,suffix("--"),prefix("--","predec"),state.syntax["--"].exps=!0,prefix("delete",function(){var p=expression(10);return p?("."!==p.id&&"["!==p.id&&warning("W051"),this.first=p,p.identifier&&!state.isStrict()&&(p.forgiveUndef=!0),this):this}).exps=!0,prefix("~",function(){return state.option.bitwise&&warning("W016",this,"~"),this.arity="unary",this.right=expression(150),this}),prefix("...",function(){return state.inES6(!0)||warning("W119",this,"spread/rest operator","6"),state.tokens.next.identifier||"(string)"===state.tokens.next.type||checkPunctuators(state.tokens.next,["[","("])||error("E030",state.tokens.next,state.tokens.next.value),expression(150),this}),prefix("!",function(){return this.arity="unary",this.right=expression(150),this.right||quit("E041",this.line||0),bang[this.right.id]===!0&&warning("W018",this,"!"),this}),prefix("typeof",function(){var p=expression(150);return this.first=this.right=p,p||quit("E041",this.line||0,this.character||0),p.identifier&&(p.forgiveUndef=!0),this}),prefix("new",function(){var mp=metaProperty("target",function(){state.inES6(!0)||warning("W119",state.tokens.prev,"new.target","6");for(var inFunction,c=state.funct;c&&(inFunction=!c["(global)"],c["(arrow)"]);)c=c["(context)"];inFunction||warning("W136",state.tokens.prev,"new.target")});if(mp)return mp;var i,c=expression(155);if(c&&"function"!==c.id)if(c.identifier)switch(c["new"]=!0,c.value){case"Number":case"String":case"Boolean":case"Math":case"JSON":warning("W053",state.tokens.prev,c.value);break;case"Symbol":state.inES6()&&warning("W053",state.tokens.prev,c.value);break;case"Function":state.option.evil||warning("W054");break;case"Date":case"RegExp":case"this":break;default:"function"!==c.id&&(i=c.value.substr(0,1),state.option.newcap&&("A">i||i>"Z")&&!state.funct["(scope)"].isPredefined(c.value)&&warning("W055",state.tokens.curr))}else"."!==c.id&&"["!==c.id&&"("!==c.id&&warning("W056",state.tokens.curr);else state.option.supernew||warning("W057",this);return"("===state.tokens.next.id||state.option.supernew||warning("W058",state.tokens.curr,state.tokens.curr.value),this.first=this.right=c,this}),state.syntax["new"].exps=!0,prefix("void").exps=!0,infix(".",function(left,that){var m=identifier(!1,!0);return"string"==typeof m&&countMember(m),that.left=left,that.right=m,m&&"hasOwnProperty"===m&&"="===state.tokens.next.value&&warning("W001"),!left||"arguments"!==left.value||"callee"!==m&&"caller"!==m?state.option.evil||!left||"document"!==left.value||"write"!==m&&"writeln"!==m||warning("W060",left):state.option.noarg?warning("W059",left,m):state.isStrict()&&error("E008"),state.option.evil||"eval"!==m&&"execScript"!==m||isGlobalEval(left,state)&&warning("W061"),that},160,!0),infix("(",function(left,that){state.option.immed&&left&&!left.immed&&"function"===left.id&&warning("W062");var n=0,p=[];if(left&&"(identifier)"===left.type&&left.value.match(/^[A-Z]([A-Z0-9_$]*[a-z][A-Za-z0-9_$]*)?$/)&&-1==="Array Number String Boolean Date Object Error Symbol".indexOf(left.value)&&("Math"===left.value?warning("W063",left):state.option.newcap&&warning("W064",left)),")"!==state.tokens.next.id)for(;p[p.length]=expression(10),n+=1,","===state.tokens.next.id;)comma();return advance(")"),"object"==typeof left&&(state.inES5()||"parseInt"!==left.value||1!==n||warning("W065",state.tokens.curr),state.option.evil||("eval"===left.value||"Function"===left.value||"execScript"===left.value?(warning("W061",left),p[0]&&"(string)"===[0].id&&addInternalSrc(left,p[0].value)):!p[0]||"(string)"!==p[0].id||"setTimeout"!==left.value&&"setInterval"!==left.value?!p[0]||"(string)"!==p[0].id||"."!==left.value||"window"!==left.left.value||"setTimeout"!==left.right&&"setInterval"!==left.right||(warning("W066",left),addInternalSrc(left,p[0].value)):(warning("W066",left),addInternalSrc(left,p[0].value))),left.identifier||"."===left.id||"["===left.id||"=>"===left.id||"("===left.id||"&&"===left.id||"||"===left.id||"?"===left.id||state.inES6()&&left["(name)"]||warning("W067",that)),that.left=left,that},155,!0).exps=!0,prefix("(",function(){var pn1,ret,triggerFnExpr,first,last,pn=state.tokens.next,i=-1,parens=1,opening=state.tokens.curr,preceeding=state.tokens.prev,isNecessary=!state.option.singleGroups;do"("===pn.value?parens+=1:")"===pn.value&&(parens-=1),i+=1,pn1=pn,pn=peek(i);while((0!==parens||")"!==pn1.value)&&";"!==pn.value&&"(end)"!==pn.type);if("function"===state.tokens.next.id&&(triggerFnExpr=state.tokens.next.immed=!0),"=>"===pn.value)return doFunction({type:"arrow",parsedOpening:!0});var exprs=[];if(")"!==state.tokens.next.id)for(;exprs.push(expression(10)),","===state.tokens.next.id;)state.option.nocomma&&warning("W127"),comma();return advance(")",this),state.option.immed&&exprs[0]&&"function"===exprs[0].id&&"("!==state.tokens.next.id&&"."!==state.tokens.next.id&&"["!==state.tokens.next.id&&warning("W068",this),exprs.length?(exprs.length>1?(ret=Object.create(state.syntax[","]),ret.exprs=exprs,first=exprs[0],last=exprs[exprs.length-1],isNecessary||(isNecessary=preceeding.assign||preceeding.delim)):(ret=first=last=exprs[0],isNecessary||(isNecessary=opening.beginsStmt&&("{"===ret.id||triggerFnExpr||isFunctor(ret))||triggerFnExpr&&(!isEndOfExpr()||"}"!==state.tokens.prev.id)||isFunctor(ret)&&!isEndOfExpr()||"{"===ret.id&&"=>"===preceeding.id||"(number)"===ret.type&&checkPunctuator(pn,".")&&/^\\d+$/.test(ret.value))),ret&&(!isNecessary&&(first.left||first.right||ret.exprs)&&(isNecessary=!isBeginOfExpr(preceeding)&&first.lbp<=preceeding.lbp||!isEndOfExpr()&&last.lbp"),infix("[",function(left,that){var s,e=expression(10);return e&&"(string)"===e.type&&(state.option.evil||"eval"!==e.value&&"execScript"!==e.value||isGlobalEval(left,state)&&warning("W061"),countMember(e.value),!state.option.sub&®.identifier.test(e.value)&&(s=state.syntax[e.value],s&&isReserved(s)||warning("W069",state.tokens.prev,e.value))),advance("]",that),e&&"hasOwnProperty"===e.value&&"="===state.tokens.next.value&&warning("W001"),that.left=left,that.right=e,that},160,!0),prefix("[",function(){var blocktype=lookupBlockType();if(blocktype.isCompArray)return state.option.esnext||state.inMoz()||warning("W118",state.tokens.curr,"array comprehension"),comprehensiveArrayExpression();if(blocktype.isDestAssign)return this.destructAssign=destructuringPattern({openingParsed:!0,assignment:!0}),this;var b=state.tokens.curr.line!==startLine(state.tokens.next);for(this.first=[],b&&(indent+=state.option.indent,state.tokens.next.from===indent+state.option.indent&&(indent+=state.option.indent));"(end)"!==state.tokens.next.id;){for(;","===state.tokens.next.id;){if(!state.option.elision){if(state.inES5()){warning("W128");do advance(",");while(","===state.tokens.next.id);continue}warning("W070")}advance(",")}if("]"===state.tokens.next.id)break;if(this.first.push(expression(10)),","!==state.tokens.next.id)break;if(comma({allowTrailing:!0}),"]"===state.tokens.next.id&&!state.inES5()){warning("W070",state.tokens.curr);break}}return b&&(indent-=state.option.indent),advance("]",this),this}),function(x){x.nud=function(){var b,f,i,p,t,nextVal,isGeneratorMethod=!1,props=Object.create(null);b=state.tokens.curr.line!==startLine(state.tokens.next),b&&(indent+=state.option.indent,state.tokens.next.from===indent+state.option.indent&&(indent+=state.option.indent));var blocktype=lookupBlockType();if(blocktype.isDestAssign)return this.destructAssign=destructuringPattern({openingParsed:!0,assignment:!0}),this;for(;"}"!==state.tokens.next.id;){if(nextVal=state.tokens.next.value,!state.tokens.next.identifier||","!==peekIgnoreEOL().id&&"}"!==peekIgnoreEOL().id)if(":"===peek().id||"get"!==nextVal&&"set"!==nextVal){if("*"===state.tokens.next.value&&"(punctuator)"===state.tokens.next.type?(state.inES6()||warning("W104",state.tokens.next,"generator functions","6"),advance("*"),isGeneratorMethod=!0):isGeneratorMethod=!1,"["===state.tokens.next.id)i=computedPropertyName(),state.nameStack.set(i);else if(state.nameStack.set(state.tokens.next),i=propertyName(),saveProperty(props,i,state.tokens.next),"string"!=typeof i)break;"("===state.tokens.next.value?(state.inES6()||warning("W104",state.tokens.curr,"concise methods","6"),doFunction({type:isGeneratorMethod?"generator":null})):(advance(":"),expression(10))}else advance(nextVal),state.inES5()||error("E034"),i=propertyName(),i||state.inES6()||error("E035"),i&&saveAccessor(nextVal,props,i,state.tokens.curr),t=state.tokens.next,f=doFunction(),p=f["(params)"],"get"===nextVal&&i&&p?warning("W076",t,p[0],i):"set"!==nextVal||!i||p&&1===p.length||warning("W077",t,i);else state.inES6()||warning("W104",state.tokens.next,"object short notation","6"),i=propertyName(!0),saveProperty(props,i,state.tokens.next),expression(10);if(countMember(i),","!==state.tokens.next.id)break;comma({allowTrailing:!0,property:!0}),","===state.tokens.next.id?warning("W070",state.tokens.curr):"}"!==state.tokens.next.id||state.inES5()||warning("W070",state.tokens.curr)}return b&&(indent-=state.option.indent),advance("}",this),checkProperties(props),this},x.fud=function(){error("E036",state.tokens.curr)}}(delim("{"));var conststatement=stmt("const",function(context){return blockVariableStatement("const",this,context)});conststatement.exps=!0;var letstatement=stmt("let",function(context){return blockVariableStatement("let",this,context)});letstatement.exps=!0;var varstatement=stmt("var",function(context){var tokens,lone,value,prefix=context&&context.prefix,inexport=context&&context.inexport,implied=context&&context.implied,report=!(context&&context.ignore);for(this.first=[];;){var names=[];_.contains(["{","["],state.tokens.next.value)?(tokens=destructuringPattern(),lone=!1):(tokens=[{id:identifier(),token:state.tokens.curr}],lone=!0),prefix&&implied||!report||!state.option.varstmt||warning("W132",this),this.first=this.first.concat(names);for(var t in tokens)tokens.hasOwnProperty(t)&&(t=tokens[t],!implied&&state.funct["(global)"]&&(predefined[t.id]===!1?warning("W079",t.token,t.id):state.option.futurehostile===!1&&(!state.inES5()&&vars.ecmaIdentifiers[5][t.id]===!1||!state.inES6()&&vars.ecmaIdentifiers[6][t.id]===!1)&&warning("W129",t.token,t.id)),t.id&&("for"===implied?(state.funct["(scope)"].has(t.id)||report&&warning("W088",t.token,t.id),state.funct["(scope)"].block.use(t.id,t.token)):(state.funct["(scope)"].addlabel(t.id,{type:"var",token:t.token}),lone&&inexport&&state.funct["(scope)"].setExported(t.id,t.token)),names.push(t.token)));if("="===state.tokens.next.id&&(state.nameStack.set(state.tokens.curr),advance("="),prefix||!report||state.funct["(loopage)"]||"undefined"!==state.tokens.next.id||warning("W080",state.tokens.prev,state.tokens.prev.value),"="===peek(0).id&&state.tokens.next.identifier&&(!prefix&&report&&!state.funct["(params)"]||-1===state.funct["(params)"].indexOf(state.tokens.next.value))&&warning("W120",state.tokens.next,state.tokens.next.value),value=expression(prefix?120:10),lone?tokens[0].first=value:destructuringPatternMatch(names,value)),","!==state.tokens.next.id)break;comma()}return this});varstatement.exps=!0,blockstmt("class",function(){return classdef.call(this,!0)}),blockstmt("function",function(context){var inexport=context&&context.inexport,generator=!1;"*"===state.tokens.next.value&&(advance("*"),state.inES6({strict:!0})?generator=!0:warning("W119",state.tokens.curr,"function*","6")),inblock&&warning("W082",state.tokens.curr);var i=optionalidentifier();return state.funct["(scope)"].addlabel(i,{type:"function",token:state.tokens.curr}),void 0===i?warning("W025"):inexport&&state.funct["(scope)"].setExported(i,state.tokens.prev),doFunction({name:i,statement:this,type:generator?"generator":null,ignoreLoopFunc:inblock}),"("===state.tokens.next.id&&state.tokens.next.line===state.tokens.curr.line&&error("E039"),this}),prefix("function",function(){var generator=!1;"*"===state.tokens.next.value&&(state.inES6()||warning("W119",state.tokens.curr,"function*","6"),advance("*"),generator=!0);var i=optionalidentifier();return doFunction({name:i,type:generator?"generator":null}),this}),blockstmt("if",function(){var t=state.tokens.next;increaseComplexityCount(),state.condition=!0,advance("(");var expr=expression(0);checkCondAssignment(expr);var forinifcheck=null;state.option.forin&&state.forinifcheckneeded&&(state.forinifcheckneeded=!1,forinifcheck=state.forinifchecks[state.forinifchecks.length-1],forinifcheck.type="(punctuator)"===expr.type&&"!"===expr.value?"(negative)":"(positive)"),advance(")",t),state.condition=!1;var s=block(!0,!0);return forinifcheck&&"(negative)"===forinifcheck.type&&s&&s[0]&&"(identifier)"===s[0].type&&"continue"===s[0].value&&(forinifcheck.type="(negative-with-continue)"),"else"===state.tokens.next.id&&(advance("else"),"if"===state.tokens.next.id||"switch"===state.tokens.next.id?statement():block(!0,!0)),this}),blockstmt("try",function(){function doCatch(){if(advance("catch"),advance("("),state.funct["(scope)"].stack("catchparams"),checkPunctuators(state.tokens.next,["[","{"])){var tokens=destructuringPattern();_.each(tokens,function(token){token.id&&state.funct["(scope)"].addParam(token.id,token,"exception")})}else"(identifier)"!==state.tokens.next.type?warning("E030",state.tokens.next,state.tokens.next.value):state.funct["(scope)"].addParam(identifier(),state.tokens.curr,"exception");"if"===state.tokens.next.value&&(state.inMoz()||warning("W118",state.tokens.curr,"catch filter"),advance("if"),expression(0)),advance(")"),block(!1),state.funct["(scope)"].unstack()}var b;for(block(!0);"catch"===state.tokens.next.id;)increaseComplexityCount(),b&&!state.inMoz()&&warning("W118",state.tokens.next,"multiple catch blocks"),doCatch(),b=!0;return"finally"===state.tokens.next.id?(advance("finally"),block(!0),void 0):(b||error("E021",state.tokens.next,"catch",state.tokens.next.value),this)}),blockstmt("while",function(){var t=state.tokens.next;return state.funct["(breakage)"]+=1,state.funct["(loopage)"]+=1,increaseComplexityCount(),advance("("),checkCondAssignment(expression(0)),advance(")",t),block(!0,!0),state.funct["(breakage)"]-=1,state.funct["(loopage)"]-=1,this}).labelled=!0,blockstmt("with",function(){var t=state.tokens.next;return state.isStrict()?error("E010",state.tokens.curr):state.option.withstmt||warning("W085",state.tokens.curr),advance("("),expression(0),advance(")",t),block(!0,!0),this}),blockstmt("switch",function(){var t=state.tokens.next,g=!1,noindent=!1;\nfor(state.funct["(breakage)"]+=1,advance("("),checkCondAssignment(expression(0)),advance(")",t),t=state.tokens.next,advance("{"),state.tokens.next.from===indent&&(noindent=!0),noindent||(indent+=state.option.indent),this.cases=[];;)switch(state.tokens.next.id){case"case":switch(state.funct["(verb)"]){case"yield":case"break":case"case":case"continue":case"return":case"switch":case"throw":break;default:state.tokens.curr.caseFallsThrough||warning("W086",state.tokens.curr,"case")}advance("case"),this.cases.push(expression(0)),increaseComplexityCount(),g=!0,advance(":"),state.funct["(verb)"]="case";break;case"default":switch(state.funct["(verb)"]){case"yield":case"break":case"continue":case"return":case"throw":break;default:this.cases.length&&(state.tokens.curr.caseFallsThrough||warning("W086",state.tokens.curr,"default"))}advance("default"),g=!0,advance(":");break;case"}":return noindent||(indent-=state.option.indent),advance("}",t),state.funct["(breakage)"]-=1,state.funct["(verb)"]=void 0,void 0;case"(end)":return error("E023",state.tokens.next,"}"),void 0;default:if(indent+=state.option.indent,g)switch(state.tokens.curr.id){case",":return error("E040"),void 0;case":":g=!1,statements();break;default:return error("E025",state.tokens.curr),void 0}else{if(":"!==state.tokens.curr.id)return error("E021",state.tokens.next,"case",state.tokens.next.value),void 0;advance(":"),error("E024",state.tokens.curr,":"),statements()}indent-=state.option.indent}return this}).labelled=!0,stmt("debugger",function(){return state.option.debug||warning("W087",this),this}).exps=!0,function(){var x=stmt("do",function(){state.funct["(breakage)"]+=1,state.funct["(loopage)"]+=1,increaseComplexityCount(),this.first=block(!0,!0),advance("while");var t=state.tokens.next;return advance("("),checkCondAssignment(expression(0)),advance(")",t),state.funct["(breakage)"]-=1,state.funct["(loopage)"]-=1,this});x.labelled=!0,x.exps=!0}(),blockstmt("for",function(){var s,t=state.tokens.next,letscope=!1,foreachtok=null;"each"===t.value&&(foreachtok=t,advance("each"),state.inMoz()||warning("W118",state.tokens.curr,"for each")),increaseComplexityCount(),advance("(");var nextop,comma,initializer,i=0,inof=["in","of"],level=0;checkPunctuators(state.tokens.next,["{","["])&&++level;do{if(nextop=peek(i),++i,checkPunctuators(nextop,["{","["])?++level:checkPunctuators(nextop,["}","]"])&&--level,0>level)break;0===level&&(!comma&&checkPunctuator(nextop,",")?comma=nextop:!initializer&&checkPunctuator(nextop,"=")&&(initializer=nextop))}while(level>0||!_.contains(inof,nextop.value)&&";"!==nextop.value&&"(end)"!==nextop.type);if(_.contains(inof,nextop.value)){state.inES6()||"of"!==nextop.value||warning("W104",nextop,"for of","6");var ok=!(initializer||comma);if(initializer&&error("W133",comma,nextop.value,"initializer is forbidden"),comma&&error("W133",comma,nextop.value,"more than one ForBinding"),"var"===state.tokens.next.id?(advance("var"),state.tokens.curr.fud({prefix:!0})):"let"===state.tokens.next.id||"const"===state.tokens.next.id?(advance(state.tokens.next.id),letscope=!0,state.funct["(scope)"].stack(),state.tokens.curr.fud({prefix:!0})):Object.create(varstatement).fud({prefix:!0,implied:"for",ignore:!ok}),advance(nextop.value),expression(20),advance(")",t),"in"===nextop.value&&state.option.forin&&(state.forinifcheckneeded=!0,void 0===state.forinifchecks&&(state.forinifchecks=[]),state.forinifchecks.push({type:"(none)"})),state.funct["(breakage)"]+=1,state.funct["(loopage)"]+=1,s=block(!0,!0),"in"===nextop.value&&state.option.forin){if(state.forinifchecks&&state.forinifchecks.length>0){var check=state.forinifchecks.pop();(s&&s.length>0&&("object"!=typeof s[0]||"if"!==s[0].value)||"(positive)"===check.type&&s.length>1||"(negative)"===check.type)&&warning("W089",this)}state.forinifcheckneeded=!1}state.funct["(breakage)"]-=1,state.funct["(loopage)"]-=1}else{if(foreachtok&&error("E045",foreachtok),";"!==state.tokens.next.id)if("var"===state.tokens.next.id)advance("var"),state.tokens.curr.fud();else if("let"===state.tokens.next.id)advance("let"),letscope=!0,state.funct["(scope)"].stack(),state.tokens.curr.fud();else for(;expression(0,"for"),","===state.tokens.next.id;)comma();if(nolinebreak(state.tokens.curr),advance(";"),state.funct["(loopage)"]+=1,";"!==state.tokens.next.id&&checkCondAssignment(expression(0)),nolinebreak(state.tokens.curr),advance(";"),";"===state.tokens.next.id&&error("E021",state.tokens.next,")",";"),")"!==state.tokens.next.id)for(;expression(0,"for"),","===state.tokens.next.id;)comma();advance(")",t),state.funct["(breakage)"]+=1,block(!0,!0),state.funct["(breakage)"]-=1,state.funct["(loopage)"]-=1}return letscope&&state.funct["(scope)"].unstack(),this}).labelled=!0,stmt("break",function(){var v=state.tokens.next.value;return state.option.asi||nolinebreak(this),";"===state.tokens.next.id||state.tokens.next.reach||state.tokens.curr.line!==startLine(state.tokens.next)?0===state.funct["(breakage)"]&&warning("W052",state.tokens.next,this.value):(state.funct["(scope)"].funct.hasBreakLabel(v)||warning("W090",state.tokens.next,v),this.first=state.tokens.next,advance()),reachable(this),this}).exps=!0,stmt("continue",function(){var v=state.tokens.next.value;return 0===state.funct["(breakage)"]&&warning("W052",state.tokens.next,this.value),state.funct["(loopage)"]||warning("W052",state.tokens.next,this.value),state.option.asi||nolinebreak(this),";"===state.tokens.next.id||state.tokens.next.reach||state.tokens.curr.line===startLine(state.tokens.next)&&(state.funct["(scope)"].funct.hasBreakLabel(v)||warning("W090",state.tokens.next,v),this.first=state.tokens.next,advance()),reachable(this),this}).exps=!0,stmt("return",function(){return this.line===startLine(state.tokens.next)?";"===state.tokens.next.id||state.tokens.next.reach||(this.first=expression(0),!this.first||"(punctuator)"!==this.first.type||"="!==this.first.value||this.first.paren||state.option.boss||warningAt("W093",this.first.line,this.first.character)):"(punctuator)"===state.tokens.next.type&&["[","{","+","-"].indexOf(state.tokens.next.value)>-1&&nolinebreak(this),reachable(this),this}).exps=!0,function(x){x.exps=!0,x.lbp=25}(prefix("yield",function(){var prev=state.tokens.prev;state.inES6(!0)&&!state.funct["(generator)"]?"(catch)"===state.funct["(name)"]&&state.funct["(context)"]["(generator)"]||error("E046",state.tokens.curr,"yield"):state.inES6()||warning("W104",state.tokens.curr,"yield","6"),state.funct["(generator)"]="yielded";var delegatingYield=!1;return"*"===state.tokens.next.value&&(delegatingYield=!0,advance("*")),this.line!==startLine(state.tokens.next)&&state.inMoz()?state.option.asi||nolinebreak(this):((delegatingYield||";"!==state.tokens.next.id&&!state.option.asi&&!state.tokens.next.reach&&state.tokens.next.nud)&&(nobreaknonadjacent(state.tokens.curr,state.tokens.next),this.first=expression(10),"(punctuator)"!==this.first.type||"="!==this.first.value||this.first.paren||state.option.boss||warningAt("W093",this.first.line,this.first.character)),state.inMoz()&&")"!==state.tokens.next.id&&(prev.lbp>30||!prev.assign&&!isEndOfExpr()||"yield"===prev.id)&&error("E050",this)),this})),stmt("throw",function(){return nolinebreak(this),this.first=expression(20),reachable(this),this}).exps=!0,stmt("import",function(){if(state.inES6()||warning("W119",state.tokens.curr,"import","6"),"(string)"===state.tokens.next.type)return advance("(string)"),this;if(state.tokens.next.identifier){if(this.name=identifier(),state.funct["(scope)"].addlabel(this.name,{type:"const",token:state.tokens.curr}),","!==state.tokens.next.value)return advance("from"),advance("(string)"),this;advance(",")}if("*"===state.tokens.next.id)advance("*"),advance("as"),state.tokens.next.identifier&&(this.name=identifier(),state.funct["(scope)"].addlabel(this.name,{type:"const",token:state.tokens.curr}));else for(advance("{");;){if("}"===state.tokens.next.value){advance("}");break}var importName;if("default"===state.tokens.next.type?(importName="default",advance("default")):importName=identifier(),"as"===state.tokens.next.value&&(advance("as"),importName=identifier()),state.funct["(scope)"].addlabel(importName,{type:"const",token:state.tokens.curr}),","!==state.tokens.next.value){if("}"===state.tokens.next.value){advance("}");break}error("E024",state.tokens.next,state.tokens.next.value);break}advance(",")}return advance("from"),advance("(string)"),this}).exps=!0,stmt("export",function(){var token,identifier,ok=!0;if(state.inES6()||(warning("W119",state.tokens.curr,"export","6"),ok=!1),state.funct["(scope)"].block.isGlobal()||(error("E053",state.tokens.curr),ok=!1),"*"===state.tokens.next.value)return advance("*"),advance("from"),advance("(string)"),this;if("default"===state.tokens.next.type){state.nameStack.set(state.tokens.next),advance("default");var exportType=state.tokens.next.id;return("function"===exportType||"class"===exportType)&&(this.block=!0),token=peek(),expression(10),identifier=token.value,this.block&&(state.funct["(scope)"].addlabel(identifier,{type:exportType,token:token}),state.funct["(scope)"].setExported(identifier,token)),this}if("{"===state.tokens.next.value){advance("{");for(var exportedTokens=[];;){if(state.tokens.next.identifier||error("E030",state.tokens.next,state.tokens.next.value),advance(),exportedTokens.push(state.tokens.curr),"as"===state.tokens.next.value&&(advance("as"),state.tokens.next.identifier||error("E030",state.tokens.next,state.tokens.next.value),advance()),","!==state.tokens.next.value){if("}"===state.tokens.next.value){advance("}");break}error("E024",state.tokens.next,state.tokens.next.value);break}advance(",")}return"from"===state.tokens.next.value?(advance("from"),advance("(string)")):ok&&exportedTokens.forEach(function(token){state.funct["(scope)"].setExported(token.value,token)}),this}if("var"===state.tokens.next.id)advance("var"),state.tokens.curr.fud({inexport:!0});else if("let"===state.tokens.next.id)advance("let"),state.tokens.curr.fud({inexport:!0});else if("const"===state.tokens.next.id)advance("const"),state.tokens.curr.fud({inexport:!0});else if("function"===state.tokens.next.id)this.block=!0,advance("function"),state.syntax["function"].fud({inexport:!0});else if("class"===state.tokens.next.id){this.block=!0,advance("class");var classNameToken=state.tokens.next;state.syntax["class"].fud(),state.funct["(scope)"].setExported(classNameToken.value,classNameToken)}else error("E024",state.tokens.next,state.tokens.next.value);return this}).exps=!0,FutureReservedWord("abstract"),FutureReservedWord("boolean"),FutureReservedWord("byte"),FutureReservedWord("char"),FutureReservedWord("class",{es5:!0,nud:classdef}),FutureReservedWord("double"),FutureReservedWord("enum",{es5:!0}),FutureReservedWord("export",{es5:!0}),FutureReservedWord("extends",{es5:!0}),FutureReservedWord("final"),FutureReservedWord("float"),FutureReservedWord("goto"),FutureReservedWord("implements",{es5:!0,strictOnly:!0}),FutureReservedWord("import",{es5:!0}),FutureReservedWord("int"),FutureReservedWord("interface",{es5:!0,strictOnly:!0}),FutureReservedWord("long"),FutureReservedWord("native"),FutureReservedWord("package",{es5:!0,strictOnly:!0}),FutureReservedWord("private",{es5:!0,strictOnly:!0}),FutureReservedWord("protected",{es5:!0,strictOnly:!0}),FutureReservedWord("public",{es5:!0,strictOnly:!0}),FutureReservedWord("short"),FutureReservedWord("static",{es5:!0,strictOnly:!0}),FutureReservedWord("super",{es5:!0}),FutureReservedWord("synchronized"),FutureReservedWord("transient"),FutureReservedWord("volatile");var lookupBlockType=function(){var pn,pn1,prev,i=-1,bracketStack=0,ret={};checkPunctuators(state.tokens.curr,["[","{"])&&(bracketStack+=1);do{if(prev=-1===i?state.tokens.curr:pn,pn=-1===i?state.tokens.next:peek(i),pn1=peek(i+1),i+=1,checkPunctuators(pn,["[","{"])?bracketStack+=1:checkPunctuators(pn,["]","}"])&&(bracketStack-=1),1===bracketStack&&pn.identifier&&"for"===pn.value&&!checkPunctuator(prev,".")){ret.isCompArray=!0,ret.notJson=!0;break}if(0===bracketStack&&checkPunctuators(pn,["}","]"])){if("="===pn1.value){ret.isDestAssign=!0,ret.notJson=!0;break}if("."===pn1.value){ret.notJson=!0;break}}checkPunctuator(pn,";")&&(ret.isBlock=!0,ret.notJson=!0)}while(bracketStack>0&&"(end)"!==pn.id);return ret},arrayComprehension=function(){function declare(v){var l=_current.variables.filter(function(elt){return elt.value===v?(elt.undef=!1,v):void 0}).length;return 0!==l}function use(v){var l=_current.variables.filter(function(elt){return elt.value!==v||elt.undef?void 0:(elt.unused===!0&&(elt.unused=!1),v)}).length;return 0===l}var _current,CompArray=function(){this.mode="use",this.variables=[]},_carrays=[];return{stack:function(){_current=new CompArray,_carrays.push(_current)},unstack:function(){_current.variables.filter(function(v){v.unused&&warning("W098",v.token,v.raw_text||v.value),v.undef&&state.funct["(scope)"].block.use(v.value,v.token)}),_carrays.splice(-1,1),_current=_carrays[_carrays.length-1]},setState:function(s){_.contains(["use","define","generate","filter"],s)&&(_current.mode=s)},check:function(v){return _current?_current&&"use"===_current.mode?(use(v)&&_current.variables.push({funct:state.funct,token:state.tokens.curr,value:v,undef:!0,unused:!1}),!0):_current&&"define"===_current.mode?(declare(v)||_current.variables.push({funct:state.funct,token:state.tokens.curr,value:v,undef:!1,unused:!0}),!0):_current&&"generate"===_current.mode?(state.funct["(scope)"].block.use(v,state.tokens.curr),!0):_current&&"filter"===_current.mode?(use(v)&&state.funct["(scope)"].block.use(v,state.tokens.curr),!0):!1:void 0}}},escapeRegex=function(str){return str.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g,"\\\\$&")},itself=function(s,o,g){function each(obj,cb){obj&&(Array.isArray(obj)||"object"!=typeof obj||(obj=Object.keys(obj)),obj.forEach(cb))}var i,k,x,reIgnoreStr,reIgnore,optionKeys,newOptionObj={},newIgnoredObj={};o=_.clone(o),state.reset(),o&&o.scope?JSHINT.scope=o.scope:(JSHINT.errors=[],JSHINT.undefs=[],JSHINT.internals=[],JSHINT.blacklist={},JSHINT.scope="(main)"),predefined=Object.create(null),combine(predefined,vars.ecmaIdentifiers[3]),combine(predefined,vars.reservedVars),combine(predefined,g||{}),declared=Object.create(null);var exported=Object.create(null);if(o)for(each(o.predef||null,function(item){var slice,prop;"-"===item[0]?(slice=item.slice(1),JSHINT.blacklist[slice]=slice,delete predefined[slice]):(prop=Object.getOwnPropertyDescriptor(o.predef,item),predefined[item]=prop?prop.value:!1)}),each(o.exported||null,function(item){exported[item]=!0}),delete o.predef,delete o.exported,optionKeys=Object.keys(o),x=0;optionKeys.length>x;x++)if(/^-W\\d{3}$/g.test(optionKeys[x]))newIgnoredObj[optionKeys[x].slice(1)]=!0;else{var optionKey=optionKeys[x];newOptionObj[optionKey]=o[optionKey],("esversion"===optionKey&&5===o[optionKey]||"es5"===optionKey&&o[optionKey])&&warning("I003"),"newcap"===optionKeys[x]&&o[optionKey]===!1&&(newOptionObj["(explicitNewcap)"]=!0)}state.option=newOptionObj,state.ignored=newIgnoredObj,state.option.indent=state.option.indent||4,state.option.maxerr=state.option.maxerr||50,indent=1;var scopeManagerInst=scopeManager(state,predefined,exported,declared);if(scopeManagerInst.on("warning",function(ev){warning.apply(null,[ev.code,ev.token].concat(ev.data))}),scopeManagerInst.on("error",function(ev){error.apply(null,[ev.code,ev.token].concat(ev.data))}),state.funct=functor("(global)",null,{"(global)":!0,"(scope)":scopeManagerInst,"(comparray)":arrayComprehension(),"(metrics)":createMetrics(state.tokens.next)}),functions=[state.funct],urls=[],stack=null,member={},membersOnly=null,inblock=!1,lookahead=[],!isString(s)&&!Array.isArray(s))return errorAt("E004",0),!1;api={get isJSON(){return state.jsonMode},getOption:function(name){return state.option[name]||null},getCache:function(name){return state.cache[name]},setCache:function(name,value){state.cache[name]=value},warn:function(code,data){warningAt.apply(null,[code,data.line,data.char].concat(data.data))},on:function(names,listener){names.split(" ").forEach(function(name){emitter.on(name,listener)}.bind(this))}},emitter.removeAllListeners(),(extraModules||[]).forEach(function(func){func(api)}),state.tokens.prev=state.tokens.curr=state.tokens.next=state.syntax["(begin)"],o&&o.ignoreDelimiters&&(Array.isArray(o.ignoreDelimiters)||(o.ignoreDelimiters=[o.ignoreDelimiters]),o.ignoreDelimiters.forEach(function(delimiterPair){delimiterPair.start&&delimiterPair.end&&(reIgnoreStr=escapeRegex(delimiterPair.start)+"[\\\\s\\\\S]*?"+escapeRegex(delimiterPair.end),reIgnore=RegExp(reIgnoreStr,"ig"),s=s.replace(reIgnore,function(match){return match.replace(/./g," ")}))})),lex=new Lexer(s),lex.on("warning",function(ev){warningAt.apply(null,[ev.code,ev.line,ev.character].concat(ev.data))}),lex.on("error",function(ev){errorAt.apply(null,[ev.code,ev.line,ev.character].concat(ev.data))}),lex.on("fatal",function(ev){quit("E041",ev.line,ev.from)}),lex.on("Identifier",function(ev){emitter.emit("Identifier",ev)}),lex.on("String",function(ev){emitter.emit("String",ev)}),lex.on("Number",function(ev){emitter.emit("Number",ev)}),lex.start();for(var name in o)_.has(o,name)&&checkOption(name,state.tokens.curr);assume(),combine(predefined,g||{}),comma.first=!0;try{switch(advance(),state.tokens.next.id){case"{":case"[":destructuringAssignOrJsonValue();break;default:directives(),state.directive["use strict"]&&"global"!==state.option.strict&&warning("W097",state.tokens.prev),statements()}"(end)"!==state.tokens.next.id&&quit("E041",state.tokens.curr.line),state.funct["(scope)"].unstack()}catch(err){if(!err||"JSHintError"!==err.name)throw err;var nt=state.tokens.next||{};JSHINT.errors.push({scope:"(main)",raw:err.raw,code:err.code,reason:err.message,line:err.line||nt.line,character:err.character||nt.from},null)}if("(main)"===JSHINT.scope)for(o=o||{},i=0;JSHINT.internals.length>i;i+=1)k=JSHINT.internals[i],o.scope=k.elem,itself(k.value,o,g);return 0===JSHINT.errors.length};return itself.addModule=function(func){extraModules.push(func)},itself.addModule(style.register),itself.data=function(){var fu,f,i,j,n,globals,data={functions:[],options:state.option};itself.errors.length&&(data.errors=itself.errors),state.jsonMode&&(data.json=!0);var impliedGlobals=state.funct["(scope)"].getImpliedGlobals();for(impliedGlobals.length>0&&(data.implieds=impliedGlobals),urls.length>0&&(data.urls=urls),globals=state.funct["(scope)"].getUsedOrDefinedGlobals(),globals.length>0&&(data.globals=globals),i=1;functions.length>i;i+=1){for(f=functions[i],fu={},j=0;functionicity.length>j;j+=1)fu[functionicity[j]]=[];for(j=0;functionicity.length>j;j+=1)0===fu[functionicity[j]].length&&delete fu[functionicity[j]];fu.name=f["(name)"],fu.param=f["(params)"],fu.line=f["(line)"],fu.character=f["(character)"],fu.last=f["(last)"],fu.lastcharacter=f["(lastcharacter)"],fu.metrics={complexity:f["(metrics)"].ComplexityCount,parameters:f["(metrics)"].arity,statements:f["(metrics)"].statementCount},data.functions.push(fu)}var unuseds=state.funct["(scope)"].getUnuseds();unuseds.length>0&&(data.unused=unuseds);for(n in member)if("number"==typeof member[n]){data.member=member;break}return data},itself.jshint=itself,itself}();"object"==typeof exports&&exports&&(exports.JSHINT=JSHINT)},{"../lodash":"/node_modules/jshint/lodash.js","./lex.js":"/node_modules/jshint/src/lex.js","./messages.js":"/node_modules/jshint/src/messages.js","./options.js":"/node_modules/jshint/src/options.js","./reg.js":"/node_modules/jshint/src/reg.js","./scope-manager.js":"/node_modules/jshint/src/scope-manager.js","./state.js":"/node_modules/jshint/src/state.js","./style.js":"/node_modules/jshint/src/style.js","./vars.js":"/node_modules/jshint/src/vars.js",events:"/node_modules/browserify/node_modules/events/events.js"}],"/node_modules/jshint/src/lex.js":[function(_dereq_,module,exports){"use strict";function asyncTrigger(){var _checks=[];return{push:function(fn){_checks.push(fn)},check:function(){for(var check=0;_checks.length>check;++check)_checks[check]();_checks.splice(0,_checks.length)}}}function Lexer(source){var lines=source;"string"==typeof lines&&(lines=lines.replace(/\\r\\n/g,"\\n").replace(/\\r/g,"\\n").split("\\n")),lines[0]&&"#!"===lines[0].substr(0,2)&&(-1!==lines[0].indexOf("node")&&(state.option.node=!0),lines[0]=""),this.emitter=new events.EventEmitter,this.source=source,this.setLines(lines),this.prereg=!0,this.line=0,this.char=1,this.from=1,this.input="",this.inComment=!1,this.context=[],this.templateStarts=[];for(var i=0;state.option.indent>i;i+=1)state.tab+=" ";this.ignoreLinterErrors=!1}var _=_dereq_("../lodash"),events=_dereq_("events"),reg=_dereq_("./reg.js"),state=_dereq_("./state.js").state,unicodeData=_dereq_("../data/ascii-identifier-data.js"),asciiIdentifierStartTable=unicodeData.asciiIdentifierStartTable,asciiIdentifierPartTable=unicodeData.asciiIdentifierPartTable,Token={Identifier:1,Punctuator:2,NumericLiteral:3,StringLiteral:4,Comment:5,Keyword:6,NullLiteral:7,BooleanLiteral:8,RegExp:9,TemplateHead:10,TemplateMiddle:11,TemplateTail:12,NoSubstTemplate:13},Context={Block:1,Template:2};Lexer.prototype={_lines:[],inContext:function(ctxType){return this.context.length>0&&this.context[this.context.length-1].type===ctxType},pushContext:function(ctxType){this.context.push({type:ctxType})},popContext:function(){return this.context.pop()},isContext:function(context){return this.context.length>0&&this.context[this.context.length-1]===context},currentContext:function(){return this.context.length>0&&this.context[this.context.length-1]},getLines:function(){return this._lines=state.lines,this._lines},setLines:function(val){this._lines=val,state.lines=this._lines},peek:function(i){return this.input.charAt(i||0)},skip:function(i){i=i||1,this.char+=i,this.input=this.input.slice(i)},on:function(names,listener){names.split(" ").forEach(function(name){this.emitter.on(name,listener)}.bind(this))},trigger:function(){this.emitter.emit.apply(this.emitter,Array.prototype.slice.call(arguments))},triggerAsync:function(type,args,checks,fn){checks.push(function(){fn()&&this.trigger(type,args)}.bind(this))},scanPunctuator:function(){var ch2,ch3,ch4,ch1=this.peek();switch(ch1){case".":if(/^[0-9]$/.test(this.peek(1)))return null;if("."===this.peek(1)&&"."===this.peek(2))return{type:Token.Punctuator,value:"..."};case"(":case")":case";":case",":case"[":case"]":case":":case"~":case"?":return{type:Token.Punctuator,value:ch1};case"{":return this.pushContext(Context.Block),{type:Token.Punctuator,value:ch1};case"}":return this.inContext(Context.Block)&&this.popContext(),{type:Token.Punctuator,value:ch1};case"#":return{type:Token.Punctuator,value:ch1};case"":return null}return ch2=this.peek(1),ch3=this.peek(2),ch4=this.peek(3),">"===ch1&&">"===ch2&&">"===ch3&&"="===ch4?{type:Token.Punctuator,value:">>>="}:"="===ch1&&"="===ch2&&"="===ch3?{type:Token.Punctuator,value:"==="}:"!"===ch1&&"="===ch2&&"="===ch3?{type:Token.Punctuator,value:"!=="}:">"===ch1&&">"===ch2&&">"===ch3?{type:Token.Punctuator,value:">>>"}:"<"===ch1&&"<"===ch2&&"="===ch3?{type:Token.Punctuator,value:"<<="}:">"===ch1&&">"===ch2&&"="===ch3?{type:Token.Punctuator,value:">>="}:"="===ch1&&">"===ch2?{type:Token.Punctuator,value:ch1+ch2}:ch1===ch2&&"+-<>&|".indexOf(ch1)>=0?{type:Token.Punctuator,value:ch1+ch2}:"<>=!+-*%&|^".indexOf(ch1)>=0?"="===ch2?{type:Token.Punctuator,value:ch1+ch2}:{type:Token.Punctuator,value:ch1}:"/"===ch1?"="===ch2?{type:Token.Punctuator,value:"/="}:{type:Token.Punctuator,value:"/"}:null},scanComments:function(){function commentToken(label,body,opt){var special=["jshint","jslint","members","member","globals","global","exported"],isSpecial=!1,value=label+body,commentType="plain";return opt=opt||{},opt.isMultiline&&(value+="*/"),body=body.replace(/\\n/g," "),"/*"===label&®.fallsThrough.test(body)&&(isSpecial=!0,commentType="falls through"),special.forEach(function(str){if(!isSpecial&&("//"!==label||"jshint"===str)&&(" "===body.charAt(str.length)&&body.substr(0,str.length)===str&&(isSpecial=!0,label+=str,body=body.substr(str.length)),isSpecial||" "!==body.charAt(0)||" "!==body.charAt(str.length+1)||body.substr(1,str.length)!==str||(isSpecial=!0,label=label+" "+str,body=body.substr(str.length+1)),isSpecial))switch(str){case"member":commentType="members";break;case"global":commentType="globals";break;default:var options=body.split(":").map(function(v){return v.replace(/^\\s+/,"").replace(/\\s+$/,"")});if(2===options.length)switch(options[0]){case"ignore":switch(options[1]){case"start":self.ignoringLinterErrors=!0,isSpecial=!1;break;case"end":self.ignoringLinterErrors=!1,isSpecial=!1}}commentType=str}}),{type:Token.Comment,commentType:commentType,value:value,body:body,isSpecial:isSpecial,isMultiline:opt.isMultiline||!1,isMalformed:opt.isMalformed||!1}}var ch1=this.peek(),ch2=this.peek(1),rest=this.input.substr(2),startLine=this.line,startChar=this.char,self=this;if("*"===ch1&&"/"===ch2)return this.trigger("error",{code:"E018",line:startLine,character:startChar}),this.skip(2),null;if("/"!==ch1||"*"!==ch2&&"/"!==ch2)return null;if("/"===ch2)return this.skip(this.input.length),commentToken("//",rest);var body="";if("*"===ch2){for(this.inComment=!0,this.skip(2);"*"!==this.peek()||"/"!==this.peek(1);)if(""===this.peek()){if(body+="\\n",!this.nextLine())return this.trigger("error",{code:"E017",line:startLine,character:startChar}),this.inComment=!1,commentToken("/*",body,{isMultiline:!0,isMalformed:!0})}else body+=this.peek(),this.skip();return this.skip(2),this.inComment=!1,commentToken("/*",body,{isMultiline:!0})}},scanKeyword:function(){var result=/^[a-zA-Z_$][a-zA-Z0-9_$]*/.exec(this.input),keywords=["if","in","do","var","for","new","try","let","this","else","case","void","with","enum","while","break","catch","throw","const","yield","class","super","return","typeof","delete","switch","export","import","default","finally","extends","function","continue","debugger","instanceof"];return result&&keywords.indexOf(result[0])>=0?{type:Token.Keyword,value:result[0]}:null},scanIdentifier:function(){function isNonAsciiIdentifierStart(code){return code>256}function isNonAsciiIdentifierPart(code){return code>256}function isHexDigit(str){return/^[0-9a-fA-F]$/.test(str)}function removeEscapeSequences(id){return id.replace(/\\\\u([0-9a-fA-F]{4})/g,function(m0,codepoint){return String.fromCharCode(parseInt(codepoint,16))})}var type,char,id="",index=0,readUnicodeEscapeSequence=function(){if(index+=1,"u"!==this.peek(index))return null;var code,ch1=this.peek(index+1),ch2=this.peek(index+2),ch3=this.peek(index+3),ch4=this.peek(index+4);return isHexDigit(ch1)&&isHexDigit(ch2)&&isHexDigit(ch3)&&isHexDigit(ch4)?(code=parseInt(ch1+ch2+ch3+ch4,16),asciiIdentifierPartTable[code]||isNonAsciiIdentifierPart(code)?(index+=5,"\\\\u"+ch1+ch2+ch3+ch4):null):null}.bind(this),getIdentifierStart=function(){var chr=this.peek(index),code=chr.charCodeAt(0);return 92===code?readUnicodeEscapeSequence():128>code?asciiIdentifierStartTable[code]?(index+=1,chr):null:isNonAsciiIdentifierStart(code)?(index+=1,chr):null}.bind(this),getIdentifierPart=function(){var chr=this.peek(index),code=chr.charCodeAt(0);return 92===code?readUnicodeEscapeSequence():128>code?asciiIdentifierPartTable[code]?(index+=1,chr):null:isNonAsciiIdentifierPart(code)?(index+=1,chr):null}.bind(this);if(char=getIdentifierStart(),null===char)return null;for(id=char;char=getIdentifierPart(),null!==char;)id+=char;switch(id){case"true":case"false":type=Token.BooleanLiteral;break;case"null":type=Token.NullLiteral;break;default:type=Token.Identifier}return{type:type,value:removeEscapeSequences(id),text:id,tokenLength:id.length}},scanNumericLiteral:function(){function isDecimalDigit(str){return/^[0-9]$/.test(str)}function isOctalDigit(str){return/^[0-7]$/.test(str)}function isBinaryDigit(str){return/^[01]$/.test(str)}function isHexDigit(str){return/^[0-9a-fA-F]$/.test(str)}function isIdentifierStart(ch){return"$"===ch||"_"===ch||"\\\\"===ch||ch>="a"&&"z">=ch||ch>="A"&&"Z">=ch}var bad,index=0,value="",length=this.input.length,char=this.peek(index),isAllowedDigit=isDecimalDigit,base=10,isLegacy=!1;if("."!==char&&!isDecimalDigit(char))return null;if("."!==char){for(value=this.peek(index),index+=1,char=this.peek(index),"0"===value&&(("x"===char||"X"===char)&&(isAllowedDigit=isHexDigit,base=16,index+=1,value+=char),("o"===char||"O"===char)&&(isAllowedDigit=isOctalDigit,base=8,state.inES6(!0)||this.trigger("warning",{code:"W119",line:this.line,character:this.char,data:["Octal integer literal","6"]}),index+=1,value+=char),("b"===char||"B"===char)&&(isAllowedDigit=isBinaryDigit,base=2,state.inES6(!0)||this.trigger("warning",{code:"W119",line:this.line,character:this.char,data:["Binary integer literal","6"]}),index+=1,value+=char),isOctalDigit(char)&&(isAllowedDigit=isOctalDigit,base=8,isLegacy=!0,bad=!1,index+=1,value+=char),!isOctalDigit(char)&&isDecimalDigit(char)&&(index+=1,value+=char));length>index;){if(char=this.peek(index),isLegacy&&isDecimalDigit(char))bad=!0;else if(!isAllowedDigit(char))break;value+=char,index+=1}if(isAllowedDigit!==isDecimalDigit)return!isLegacy&&2>=value.length?{type:Token.NumericLiteral,value:value,isMalformed:!0}:length>index&&(char=this.peek(index),isIdentifierStart(char))?null:{type:Token.NumericLiteral,value:value,base:base,isLegacy:isLegacy,isMalformed:!1}}if("."===char)for(value+=char,index+=1;length>index&&(char=this.peek(index),isDecimalDigit(char));)value+=char,index+=1;if("e"===char||"E"===char){if(value+=char,index+=1,char=this.peek(index),("+"===char||"-"===char)&&(value+=this.peek(index),index+=1),char=this.peek(index),!isDecimalDigit(char))return null;for(value+=char,index+=1;length>index&&(char=this.peek(index),isDecimalDigit(char));)value+=char,index+=1}return length>index&&(char=this.peek(index),isIdentifierStart(char))?null:{type:Token.NumericLiteral,value:value,base:base,isMalformed:!isFinite(value)}},scanEscapeSequence:function(checks){var allowNewLine=!1,jump=1;this.skip();var char=this.peek();switch(char){case"\'":this.triggerAsync("warning",{code:"W114",line:this.line,character:this.char,data:["\\\\\'"]},checks,function(){return state.jsonMode});break;case"b":char="\\\\b";break;case"f":char="\\\\f";break;case"n":char="\\\\n";break;case"r":char="\\\\r";break;case"t":char="\\\\t";break;case"0":char="\\\\0";var n=parseInt(this.peek(1),10);this.triggerAsync("warning",{code:"W115",line:this.line,character:this.char},checks,function(){return n>=0&&7>=n&&state.isStrict()});break;case"u":var hexCode=this.input.substr(1,4),code=parseInt(hexCode,16);isNaN(code)&&this.trigger("warning",{code:"W052",line:this.line,character:this.char,data:["u"+hexCode]}),char=String.fromCharCode(code),jump=5;break;case"v":this.triggerAsync("warning",{code:"W114",line:this.line,character:this.char,data:["\\\\v"]},checks,function(){return state.jsonMode}),char="\v";break;case"x":var x=parseInt(this.input.substr(1,2),16);this.triggerAsync("warning",{code:"W114",line:this.line,character:this.char,data:["\\\\x-"]},checks,function(){return state.jsonMode}),char=String.fromCharCode(x),jump=3;break;case"\\\\":char="\\\\\\\\";break;case\'"\':char=\'\\\\"\';break;case"/":break;case"":allowNewLine=!0,char=""}return{"char":char,jump:jump,allowNewLine:allowNewLine}},scanTemplateLiteral:function(checks){var tokenType,ch,value="",startLine=this.line,startChar=this.char,depth=this.templateStarts.length;if(!state.inES6(!0))return null;if("`"===this.peek())tokenType=Token.TemplateHead,this.templateStarts.push({line:this.line,"char":this.char}),depth=this.templateStarts.length,this.skip(1),this.pushContext(Context.Template);else{if(!this.inContext(Context.Template)||"}"!==this.peek())return null;tokenType=Token.TemplateMiddle}for(;"`"!==this.peek();){for(;""===(ch=this.peek());)if(value+="\\n",!this.nextLine()){var startPos=this.templateStarts.pop();return this.trigger("error",{code:"E052",line:startPos.line,character:startPos.char}),{type:tokenType,value:value,startLine:startLine,startChar:startChar,isUnclosed:!0,depth:depth,context:this.popContext()}}if("$"===ch&&"{"===this.peek(1))return value+="${",this.skip(2),{type:tokenType,value:value,startLine:startLine,startChar:startChar,isUnclosed:!1,depth:depth,context:this.currentContext()};\nif("\\\\"===ch){var escape=this.scanEscapeSequence(checks);value+=escape.char,this.skip(escape.jump)}else"`"!==ch&&(value+=ch,this.skip(1))}return tokenType=tokenType===Token.TemplateHead?Token.NoSubstTemplate:Token.TemplateTail,this.skip(1),this.templateStarts.pop(),{type:tokenType,value:value,startLine:startLine,startChar:startChar,isUnclosed:!1,depth:depth,context:this.popContext()}},scanStringLiteral:function(checks){var quote=this.peek();if(\'"\'!==quote&&"\'"!==quote)return null;this.triggerAsync("warning",{code:"W108",line:this.line,character:this.char},checks,function(){return state.jsonMode&&\'"\'!==quote});var value="",startLine=this.line,startChar=this.char,allowNewLine=!1;for(this.skip();this.peek()!==quote;)if(""===this.peek()){if(allowNewLine?(allowNewLine=!1,this.triggerAsync("warning",{code:"W043",line:this.line,character:this.char},checks,function(){return!state.option.multistr}),this.triggerAsync("warning",{code:"W042",line:this.line,character:this.char},checks,function(){return state.jsonMode&&state.option.multistr})):this.trigger("warning",{code:"W112",line:this.line,character:this.char}),!this.nextLine())return this.trigger("error",{code:"E029",line:startLine,character:startChar}),{type:Token.StringLiteral,value:value,startLine:startLine,startChar:startChar,isUnclosed:!0,quote:quote}}else{allowNewLine=!1;var char=this.peek(),jump=1;if(" ">char&&this.trigger("warning",{code:"W113",line:this.line,character:this.char,data:[""]}),"\\\\"===char){var parsed=this.scanEscapeSequence(checks);char=parsed.char,jump=parsed.jump,allowNewLine=parsed.allowNewLine}value+=char,this.skip(jump)}return this.skip(),{type:Token.StringLiteral,value:value,startLine:startLine,startChar:startChar,isUnclosed:!1,quote:quote}},scanRegExp:function(){var terminated,index=0,length=this.input.length,char=this.peek(),value=char,body="",flags=[],malformed=!1,isCharSet=!1,scanUnexpectedChars=function(){" ">char&&(malformed=!0,this.trigger("warning",{code:"W048",line:this.line,character:this.char})),"<"===char&&(malformed=!0,this.trigger("warning",{code:"W049",line:this.line,character:this.char,data:[char]}))}.bind(this);if(!this.prereg||"/"!==char)return null;for(index+=1,terminated=!1;length>index;)if(char=this.peek(index),value+=char,body+=char,isCharSet)"]"===char&&("\\\\"!==this.peek(index-1)||"\\\\"===this.peek(index-2))&&(isCharSet=!1),"\\\\"===char&&(index+=1,char=this.peek(index),body+=char,value+=char,scanUnexpectedChars()),index+=1;else{if("\\\\"===char){if(index+=1,char=this.peek(index),body+=char,value+=char,scanUnexpectedChars(),"/"===char){index+=1;continue}if("["===char){index+=1;continue}}if("["!==char){if("/"===char){body=body.substr(0,body.length-1),terminated=!0,index+=1;break}index+=1}else isCharSet=!0,index+=1}if(!terminated)return this.trigger("error",{code:"E015",line:this.line,character:this.from}),void this.trigger("fatal",{line:this.line,from:this.from});for(;length>index&&(char=this.peek(index),/[gim]/.test(char));)flags.push(char),value+=char,index+=1;try{RegExp(body,flags.join(""))}catch(err){malformed=!0,this.trigger("error",{code:"E016",line:this.line,character:this.char,data:[err.message]})}return{type:Token.RegExp,value:value,flags:flags,isMalformed:malformed}},scanNonBreakingSpaces:function(){return state.option.nonbsp?this.input.search(/(\\u00A0)/):-1},scanUnsafeChars:function(){return this.input.search(reg.unsafeChars)},next:function(checks){this.from=this.char;var start;if(/\\s/.test(this.peek()))for(start=this.char;/\\s/.test(this.peek());)this.from+=1,this.skip();var match=this.scanComments()||this.scanStringLiteral(checks)||this.scanTemplateLiteral(checks);return match?match:(match=this.scanRegExp()||this.scanPunctuator()||this.scanKeyword()||this.scanIdentifier()||this.scanNumericLiteral(),match?(this.skip(match.tokenLength||match.value.length),match):null)},nextLine:function(){var char;if(this.line>=this.getLines().length)return!1;this.input=this.getLines()[this.line],this.line+=1,this.char=1,this.from=1;var inputTrimmed=this.input.trim(),startsWith=function(){return _.some(arguments,function(prefix){return 0===inputTrimmed.indexOf(prefix)})},endsWith=function(){return _.some(arguments,function(suffix){return-1!==inputTrimmed.indexOf(suffix,inputTrimmed.length-suffix.length)})};if(this.ignoringLinterErrors===!0&&(startsWith("/*","//")||this.inComment&&endsWith("*/")||(this.input="")),char=this.scanNonBreakingSpaces(),char>=0&&this.trigger("warning",{code:"W125",line:this.line,character:char+1}),this.input=this.input.replace(/\\t/g,state.tab),char=this.scanUnsafeChars(),char>=0&&this.trigger("warning",{code:"W100",line:this.line,character:char}),!this.ignoringLinterErrors&&state.option.maxlen&&state.option.maxlen=0;--i){var scopeLabels=_scopeStack[i]["(labels)"];if(scopeLabels[labelName])return scopeLabels}}function usedSoFarInCurrentFunction(labelName){for(var i=_scopeStack.length-1;i>=0;i--){var current=_scopeStack[i];if(current["(usages)"][labelName])return current["(usages)"][labelName];if(current===_currentFunctBody)break}return!1}function _checkOuterShadow(labelName,token){if("outer"===state.option.shadow)for(var isGlobal="global"===_currentFunctBody["(type)"],isNewFunction="functionparams"===_current["(type)"],outsideCurrentFunction=!isGlobal,i=0;_scopeStack.length>i;i++){var stackItem=_scopeStack[i];isNewFunction||_scopeStack[i+1]!==_currentFunctBody||(outsideCurrentFunction=!1),outsideCurrentFunction&&stackItem["(labels)"][labelName]&&warning("W123",token,labelName),stackItem["(breakLabels)"][labelName]&&warning("W123",token,labelName)}}function _latedefWarning(type,labelName,token){state.option.latedef&&(state.option.latedef===!0&&"function"===type||"function"!==type)&&warning("W003",token,labelName)}var _current,_scopeStack=[];_newScope("global"),_current["(predefined)"]=predefined;var _currentFunctBody=_current,usedPredefinedAndGlobals=Object.create(null),impliedGlobals=Object.create(null),unuseds=[],emitter=new events.EventEmitter,_getUnusedOption=function(unused_opt){return void 0===unused_opt&&(unused_opt=state.option.unused),unused_opt===!0&&(unused_opt="last-param"),unused_opt},_warnUnused=function(name,tkn,type,unused_opt){var line=tkn.line,chr=tkn.from,raw_name=tkn.raw_text||name;unused_opt=_getUnusedOption(unused_opt);var warnable_types={vars:["var"],"last-param":["var","param"],strict:["var","param","last-param"]};unused_opt&&warnable_types[unused_opt]&&-1!==warnable_types[unused_opt].indexOf(type)&&warning("W098",{line:line,from:chr},raw_name),(unused_opt||"var"===type)&&unuseds.push({name:name,line:line,character:chr})},scopeManagerInst={on:function(names,listener){names.split(" ").forEach(function(name){emitter.on(name,listener)})},isPredefined:function(labelName){return!this.has(labelName)&&_.has(_scopeStack[0]["(predefined)"],labelName)},stack:function(type){var previousScope=_current;_newScope(type),type||"functionparams"!==previousScope["(type)"]||(_current["(isFuncBody)"]=!0,_current["(context)"]=_currentFunctBody,_currentFunctBody=_current)},unstack:function(){var i,j,subScope=_scopeStack.length>1?_scopeStack[_scopeStack.length-2]:null,isUnstackingFunctionBody=_current===_currentFunctBody,isUnstackingFunctionParams="functionparams"===_current["(type)"],isUnstackingFunctionOuter="functionouter"===_current["(type)"],currentUsages=_current["(usages)"],currentLabels=_current["(labels)"],usedLabelNameList=Object.keys(currentUsages);for(currentUsages.__proto__&&-1===usedLabelNameList.indexOf("__proto__")&&usedLabelNameList.push("__proto__"),i=0;usedLabelNameList.length>i;i++){var usedLabelName=usedLabelNameList[i],usage=currentUsages[usedLabelName],usedLabel=currentLabels[usedLabelName];if(usedLabel){var usedLabelType=usedLabel["(type)"];if(usedLabel["(useOutsideOfScope)"]&&!state.option.funcscope){var usedTokens=usage["(tokens)"];if(usedTokens)for(j=0;usedTokens.length>j;j++)usedLabel["(function)"]===usedTokens[j]["(function)"]&&error("W038",usedTokens[j],usedLabelName)}if(_current["(labels)"][usedLabelName]["(unused)"]=!1,"const"===usedLabelType&&usage["(modified)"])for(j=0;usage["(modified)"].length>j;j++)error("E013",usage["(modified)"][j],usedLabelName);if(("function"===usedLabelType||"class"===usedLabelType)&&usage["(reassigned)"])for(j=0;usage["(reassigned)"].length>j;j++)error("W021",usage["(reassigned)"][j],usedLabelName,usedLabelType)}else if(isUnstackingFunctionOuter&&(state.funct["(isCapturing)"]=!0),subScope)if(subScope["(usages)"][usedLabelName]){var subScopeUsage=subScope["(usages)"][usedLabelName];subScopeUsage["(modified)"]=subScopeUsage["(modified)"].concat(usage["(modified)"]),subScopeUsage["(tokens)"]=subScopeUsage["(tokens)"].concat(usage["(tokens)"]),subScopeUsage["(reassigned)"]=subScopeUsage["(reassigned)"].concat(usage["(reassigned)"]),subScopeUsage["(onlyUsedSubFunction)"]=!1}else subScope["(usages)"][usedLabelName]=usage,isUnstackingFunctionBody&&(subScope["(usages)"][usedLabelName]["(onlyUsedSubFunction)"]=!0);else if("boolean"==typeof _current["(predefined)"][usedLabelName]){if(delete declared[usedLabelName],usedPredefinedAndGlobals[usedLabelName]=marker,_current["(predefined)"][usedLabelName]===!1&&usage["(reassigned)"])for(j=0;usage["(reassigned)"].length>j;j++)warning("W020",usage["(reassigned)"][j])}else if(usage["(tokens)"])for(j=0;usage["(tokens)"].length>j;j++){var undefinedToken=usage["(tokens)"][j];undefinedToken.forgiveUndef||(state.option.undef&&!undefinedToken.ignoreUndef&&warning("W117",undefinedToken,usedLabelName),impliedGlobals[usedLabelName]?impliedGlobals[usedLabelName].line.push(undefinedToken.line):impliedGlobals[usedLabelName]={name:usedLabelName,line:[undefinedToken.line]})}}if(subScope||Object.keys(declared).forEach(function(labelNotUsed){_warnUnused(labelNotUsed,declared[labelNotUsed],"var")}),subScope&&!isUnstackingFunctionBody&&!isUnstackingFunctionParams&&!isUnstackingFunctionOuter){var labelNames=Object.keys(currentLabels);for(i=0;labelNames.length>i;i++){var defLabelName=labelNames[i];currentLabels[defLabelName]["(blockscoped)"]||"exception"===currentLabels[defLabelName]["(type)"]||this.funct.has(defLabelName,{excludeCurrent:!0})||(subScope["(labels)"][defLabelName]=currentLabels[defLabelName],"global"!==_currentFunctBody["(type)"]&&(subScope["(labels)"][defLabelName]["(useOutsideOfScope)"]=!0),delete currentLabels[defLabelName])}}_checkForUnused(),_scopeStack.pop(),isUnstackingFunctionBody&&(_currentFunctBody=_scopeStack[_.findLastIndex(_scopeStack,function(scope){return scope["(isFuncBody)"]||"global"===scope["(type)"]})]),_current=subScope},addParam:function(labelName,token,type){if(type=type||"param","exception"===type){var previouslyDefinedLabelType=this.funct.labeltype(labelName);previouslyDefinedLabelType&&"exception"!==previouslyDefinedLabelType&&(state.option.node||warning("W002",state.tokens.next,labelName))}if(_.has(_current["(labels)"],labelName)?_current["(labels)"][labelName].duplicated=!0:(_checkOuterShadow(labelName,token,type),_current["(labels)"][labelName]={"(type)":type,"(token)":token,"(unused)":!0},_current["(params)"].push(labelName)),_.has(_current["(usages)"],labelName)){var usage=_current["(usages)"][labelName];usage["(onlyUsedSubFunction)"]?_latedefWarning(type,labelName,token):warning("E056",token,labelName,type)}},validateParams:function(){if("global"!==_currentFunctBody["(type)"]){var isStrict=state.isStrict(),currentFunctParamScope=_currentFunctBody["(parent)"];currentFunctParamScope["(params)"]&¤tFunctParamScope["(params)"].forEach(function(labelName){var label=currentFunctParamScope["(labels)"][labelName];label&&label.duplicated&&(isStrict?warning("E011",label["(token)"],labelName):state.option.shadow!==!0&&warning("W004",label["(token)"],labelName))})}},getUsedOrDefinedGlobals:function(){var list=Object.keys(usedPredefinedAndGlobals);return usedPredefinedAndGlobals.__proto__===marker&&-1===list.indexOf("__proto__")&&list.push("__proto__"),list},getImpliedGlobals:function(){var values=_.values(impliedGlobals),hasProto=!1;return impliedGlobals.__proto__&&(hasProto=values.some(function(value){return"__proto__"===value.name}),hasProto||values.push(impliedGlobals.__proto__)),values},getUnuseds:function(){return unuseds},has:function(labelName){return Boolean(_getLabel(labelName))},labeltype:function(labelName){var scopeLabels=_getLabel(labelName);return scopeLabels?scopeLabels[labelName]["(type)"]:null},addExported:function(labelName){var globalLabels=_scopeStack[0]["(labels)"];if(_.has(declared,labelName))delete declared[labelName];else if(_.has(globalLabels,labelName))globalLabels[labelName]["(unused)"]=!1;else{for(var i=1;_scopeStack.length>i;i++){var scope=_scopeStack[i];if(scope["(type)"])break;if(_.has(scope["(labels)"],labelName)&&!scope["(labels)"][labelName]["(blockscoped)"])return scope["(labels)"][labelName]["(unused)"]=!1,void 0}exported[labelName]=!0}},setExported:function(labelName,token){this.block.use(labelName,token)\n},addlabel:function(labelName,opts){var type=opts.type,token=opts.token,isblockscoped="let"===type||"const"===type||"class"===type,isexported="global"===(isblockscoped?_current:_currentFunctBody)["(type)"]&&_.has(exported,labelName);if(_checkOuterShadow(labelName,token,type),isblockscoped){var declaredInCurrentScope=_current["(labels)"][labelName];if(declaredInCurrentScope||_current!==_currentFunctBody||"global"===_current["(type)"]||(declaredInCurrentScope=!!_currentFunctBody["(parent)"]["(labels)"][labelName]),!declaredInCurrentScope&&_current["(usages)"][labelName]){var usage=_current["(usages)"][labelName];usage["(onlyUsedSubFunction)"]?_latedefWarning(type,labelName,token):warning("E056",token,labelName,type)}declaredInCurrentScope?warning("E011",token,labelName):"outer"===state.option.shadow&&scopeManagerInst.funct.has(labelName)&&warning("W004",token,labelName),scopeManagerInst.block.add(labelName,type,token,!isexported)}else{var declaredInCurrentFunctionScope=scopeManagerInst.funct.has(labelName);!declaredInCurrentFunctionScope&&usedSoFarInCurrentFunction(labelName)&&_latedefWarning(type,labelName,token),scopeManagerInst.funct.has(labelName,{onlyBlockscoped:!0})?warning("E011",token,labelName):state.option.shadow!==!0&&declaredInCurrentFunctionScope&&"__proto__"!==labelName&&"global"!==_currentFunctBody["(type)"]&&warning("W004",token,labelName),scopeManagerInst.funct.add(labelName,type,token,!isexported),"global"===_currentFunctBody["(type)"]&&(usedPredefinedAndGlobals[labelName]=marker)}},funct:{labeltype:function(labelName,options){for(var onlyBlockscoped=options&&options.onlyBlockscoped,excludeParams=options&&options.excludeParams,currentScopeIndex=_scopeStack.length-(options&&options.excludeCurrent?2:1),i=currentScopeIndex;i>=0;i--){var current=_scopeStack[i];if(current["(labels)"][labelName]&&(!onlyBlockscoped||current["(labels)"][labelName]["(blockscoped)"]))return current["(labels)"][labelName]["(type)"];var scopeCheck=excludeParams?_scopeStack[i-1]:current;if(scopeCheck&&"functionparams"===scopeCheck["(type)"])return null}return null},hasBreakLabel:function(labelName){for(var i=_scopeStack.length-1;i>=0;i--){var current=_scopeStack[i];if(current["(breakLabels)"][labelName])return!0;if("functionparams"===current["(type)"])return!1}return!1},has:function(labelName,options){return Boolean(this.labeltype(labelName,options))},add:function(labelName,type,tok,unused){_current["(labels)"][labelName]={"(type)":type,"(token)":tok,"(blockscoped)":!1,"(function)":_currentFunctBody,"(unused)":unused}}},block:{isGlobal:function(){return"global"===_current["(type)"]},use:function(labelName,token){var paramScope=_currentFunctBody["(parent)"];paramScope&¶mScope["(labels)"][labelName]&&"param"===paramScope["(labels)"][labelName]["(type)"]&&(scopeManagerInst.funct.has(labelName,{excludeParams:!0,onlyBlockscoped:!0})||(paramScope["(labels)"][labelName]["(unused)"]=!1)),token&&(state.ignored.W117||state.option.undef===!1)&&(token.ignoreUndef=!0),_setupUsages(labelName),token&&(token["(function)"]=_currentFunctBody,_current["(usages)"][labelName]["(tokens)"].push(token))},reassign:function(labelName,token){this.modify(labelName,token),_current["(usages)"][labelName]["(reassigned)"].push(token)},modify:function(labelName,token){_setupUsages(labelName),_current["(usages)"][labelName]["(modified)"].push(token)},add:function(labelName,type,tok,unused){_current["(labels)"][labelName]={"(type)":type,"(token)":tok,"(blockscoped)":!0,"(unused)":unused}},addBreakLabel:function(labelName,opts){var token=opts.token;scopeManagerInst.funct.hasBreakLabel(labelName)?warning("E011",token,labelName):"outer"===state.option.shadow&&(scopeManagerInst.funct.has(labelName)?warning("W004",token,labelName):_checkOuterShadow(labelName,token)),_current["(breakLabels)"][labelName]=token}}};return scopeManagerInst};module.exports=scopeManager},{"../lodash":"/node_modules/jshint/lodash.js",events:"/node_modules/browserify/node_modules/events/events.js"}],"/node_modules/jshint/src/state.js":[function(_dereq_,module,exports){"use strict";var NameStack=_dereq_("./name-stack.js"),state={syntax:{},isStrict:function(){return this.directive["use strict"]||this.inClassBody||this.option.module||"implied"===this.option.strict},inMoz:function(){return this.option.moz},inES6:function(){return this.option.moz||this.option.esversion>=6},inES5:function(strict){return strict?!(this.option.esversion&&5!==this.option.esversion||this.option.moz):!this.option.esversion||this.option.esversion>=5||this.option.moz},reset:function(){this.tokens={prev:null,next:null,curr:null},this.option={},this.funct=null,this.ignored={},this.directive={},this.jsonMode=!1,this.jsonWarnings=[],this.lines=[],this.tab="",this.cache={},this.ignoredLines={},this.forinifcheckneeded=!1,this.nameStack=new NameStack,this.inClassBody=!1}};exports.state=state},{"./name-stack.js":"/node_modules/jshint/src/name-stack.js"}],"/node_modules/jshint/src/style.js":[function(_dereq_,module,exports){"use strict";exports.register=function(linter){linter.on("Identifier",function(data){linter.getOption("proto")||"__proto__"===data.name&&linter.warn("W103",{line:data.line,"char":data.char,data:[data.name,"6"]})}),linter.on("Identifier",function(data){linter.getOption("iterator")||"__iterator__"===data.name&&linter.warn("W103",{line:data.line,"char":data.char,data:[data.name]})}),linter.on("Identifier",function(data){linter.getOption("camelcase")&&data.name.replace(/^_+|_+$/g,"").indexOf("_")>-1&&!data.name.match(/^[A-Z0-9_]*$/)&&linter.warn("W106",{line:data.line,"char":data.from,data:[data.name]})}),linter.on("String",function(data){var code,quotmark=linter.getOption("quotmark");quotmark&&("single"===quotmark&&"\'"!==data.quote&&(code="W109"),"double"===quotmark&&\'"\'!==data.quote&&(code="W108"),quotmark===!0&&(linter.getCache("quotmark")||linter.setCache("quotmark",data.quote),linter.getCache("quotmark")!==data.quote&&(code="W110")),code&&linter.warn(code,{line:data.line,"char":data.char}))}),linter.on("Number",function(data){"."===data.value.charAt(0)&&linter.warn("W008",{line:data.line,"char":data.char,data:[data.value]}),"."===data.value.substr(data.value.length-1)&&linter.warn("W047",{line:data.line,"char":data.char,data:[data.value]}),/^00+/.test(data.value)&&linter.warn("W046",{line:data.line,"char":data.char,data:[data.value]})}),linter.on("String",function(data){var re=/^(?:javascript|jscript|ecmascript|vbscript|livescript)\\s*:/i;linter.getOption("scripturl")||re.test(data.value)&&linter.warn("W107",{line:data.line,"char":data.char})})}},{}],"/node_modules/jshint/src/vars.js":[function(_dereq_,module,exports){"use strict";exports.reservedVars={arguments:!1,NaN:!1},exports.ecmaIdentifiers={3:{Array:!1,Boolean:!1,Date:!1,decodeURI:!1,decodeURIComponent:!1,encodeURI:!1,encodeURIComponent:!1,Error:!1,eval:!1,EvalError:!1,Function:!1,hasOwnProperty:!1,isFinite:!1,isNaN:!1,Math:!1,Number:!1,Object:!1,parseInt:!1,parseFloat:!1,RangeError:!1,ReferenceError:!1,RegExp:!1,String:!1,SyntaxError:!1,TypeError:!1,URIError:!1},5:{JSON:!1},6:{Map:!1,Promise:!1,Proxy:!1,Reflect:!1,Set:!1,Symbol:!1,WeakMap:!1,WeakSet:!1}},exports.browser={Audio:!1,Blob:!1,addEventListener:!1,applicationCache:!1,atob:!1,blur:!1,btoa:!1,cancelAnimationFrame:!1,CanvasGradient:!1,CanvasPattern:!1,CanvasRenderingContext2D:!1,CSS:!1,clearInterval:!1,clearTimeout:!1,close:!1,closed:!1,Comment:!1,CustomEvent:!1,DOMParser:!1,defaultStatus:!1,Document:!1,document:!1,DocumentFragment:!1,Element:!1,ElementTimeControl:!1,Event:!1,event:!1,fetch:!1,FileReader:!1,FormData:!1,focus:!1,frames:!1,getComputedStyle:!1,HTMLElement:!1,HTMLAnchorElement:!1,HTMLBaseElement:!1,HTMLBlockquoteElement:!1,HTMLBodyElement:!1,HTMLBRElement:!1,HTMLButtonElement:!1,HTMLCanvasElement:!1,HTMLCollection:!1,HTMLDirectoryElement:!1,HTMLDivElement:!1,HTMLDListElement:!1,HTMLFieldSetElement:!1,HTMLFontElement:!1,HTMLFormElement:!1,HTMLFrameElement:!1,HTMLFrameSetElement:!1,HTMLHeadElement:!1,HTMLHeadingElement:!1,HTMLHRElement:!1,HTMLHtmlElement:!1,HTMLIFrameElement:!1,HTMLImageElement:!1,HTMLInputElement:!1,HTMLIsIndexElement:!1,HTMLLabelElement:!1,HTMLLayerElement:!1,HTMLLegendElement:!1,HTMLLIElement:!1,HTMLLinkElement:!1,HTMLMapElement:!1,HTMLMenuElement:!1,HTMLMetaElement:!1,HTMLModElement:!1,HTMLObjectElement:!1,HTMLOListElement:!1,HTMLOptGroupElement:!1,HTMLOptionElement:!1,HTMLParagraphElement:!1,HTMLParamElement:!1,HTMLPreElement:!1,HTMLQuoteElement:!1,HTMLScriptElement:!1,HTMLSelectElement:!1,HTMLStyleElement:!1,HTMLTableCaptionElement:!1,HTMLTableCellElement:!1,HTMLTableColElement:!1,HTMLTableElement:!1,HTMLTableRowElement:!1,HTMLTableSectionElement:!1,HTMLTemplateElement:!1,HTMLTextAreaElement:!1,HTMLTitleElement:!1,HTMLUListElement:!1,HTMLVideoElement:!1,history:!1,Image:!1,Intl:!1,length:!1,localStorage:!1,location:!1,matchMedia:!1,MessageChannel:!1,MessageEvent:!1,MessagePort:!1,MouseEvent:!1,moveBy:!1,moveTo:!1,MutationObserver:!1,name:!1,Node:!1,NodeFilter:!1,NodeList:!1,Notification:!1,navigator:!1,onbeforeunload:!0,onblur:!0,onerror:!0,onfocus:!0,onload:!0,onresize:!0,onunload:!0,open:!1,openDatabase:!1,opener:!1,Option:!1,parent:!1,performance:!1,print:!1,Range:!1,requestAnimationFrame:!1,removeEventListener:!1,resizeBy:!1,resizeTo:!1,screen:!1,scroll:!1,scrollBy:!1,scrollTo:!1,sessionStorage:!1,setInterval:!1,setTimeout:!1,SharedWorker:!1,status:!1,SVGAElement:!1,SVGAltGlyphDefElement:!1,SVGAltGlyphElement:!1,SVGAltGlyphItemElement:!1,SVGAngle:!1,SVGAnimateColorElement:!1,SVGAnimateElement:!1,SVGAnimateMotionElement:!1,SVGAnimateTransformElement:!1,SVGAnimatedAngle:!1,SVGAnimatedBoolean:!1,SVGAnimatedEnumeration:!1,SVGAnimatedInteger:!1,SVGAnimatedLength:!1,SVGAnimatedLengthList:!1,SVGAnimatedNumber:!1,SVGAnimatedNumberList:!1,SVGAnimatedPathData:!1,SVGAnimatedPoints:!1,SVGAnimatedPreserveAspectRatio:!1,SVGAnimatedRect:!1,SVGAnimatedString:!1,SVGAnimatedTransformList:!1,SVGAnimationElement:!1,SVGCSSRule:!1,SVGCircleElement:!1,SVGClipPathElement:!1,SVGColor:!1,SVGColorProfileElement:!1,SVGColorProfileRule:!1,SVGComponentTransferFunctionElement:!1,SVGCursorElement:!1,SVGDefsElement:!1,SVGDescElement:!1,SVGDocument:!1,SVGElement:!1,SVGElementInstance:!1,SVGElementInstanceList:!1,SVGEllipseElement:!1,SVGExternalResourcesRequired:!1,SVGFEBlendElement:!1,SVGFEColorMatrixElement:!1,SVGFEComponentTransferElement:!1,SVGFECompositeElement:!1,SVGFEConvolveMatrixElement:!1,SVGFEDiffuseLightingElement:!1,SVGFEDisplacementMapElement:!1,SVGFEDistantLightElement:!1,SVGFEFloodElement:!1,SVGFEFuncAElement:!1,SVGFEFuncBElement:!1,SVGFEFuncGElement:!1,SVGFEFuncRElement:!1,SVGFEGaussianBlurElement:!1,SVGFEImageElement:!1,SVGFEMergeElement:!1,SVGFEMergeNodeElement:!1,SVGFEMorphologyElement:!1,SVGFEOffsetElement:!1,SVGFEPointLightElement:!1,SVGFESpecularLightingElement:!1,SVGFESpotLightElement:!1,SVGFETileElement:!1,SVGFETurbulenceElement:!1,SVGFilterElement:!1,SVGFilterPrimitiveStandardAttributes:!1,SVGFitToViewBox:!1,SVGFontElement:!1,SVGFontFaceElement:!1,SVGFontFaceFormatElement:!1,SVGFontFaceNameElement:!1,SVGFontFaceSrcElement:!1,SVGFontFaceUriElement:!1,SVGForeignObjectElement:!1,SVGGElement:!1,SVGGlyphElement:!1,SVGGlyphRefElement:!1,SVGGradientElement:!1,SVGHKernElement:!1,SVGICCColor:!1,SVGImageElement:!1,SVGLangSpace:!1,SVGLength:!1,SVGLengthList:!1,SVGLineElement:!1,SVGLinearGradientElement:!1,SVGLocatable:!1,SVGMPathElement:!1,SVGMarkerElement:!1,SVGMaskElement:!1,SVGMatrix:!1,SVGMetadataElement:!1,SVGMissingGlyphElement:!1,SVGNumber:!1,SVGNumberList:!1,SVGPaint:!1,SVGPathElement:!1,SVGPathSeg:!1,SVGPathSegArcAbs:!1,SVGPathSegArcRel:!1,SVGPathSegClosePath:!1,SVGPathSegCurvetoCubicAbs:!1,SVGPathSegCurvetoCubicRel:!1,SVGPathSegCurvetoCubicSmoothAbs:!1,SVGPathSegCurvetoCubicSmoothRel:!1,SVGPathSegCurvetoQuadraticAbs:!1,SVGPathSegCurvetoQuadraticRel:!1,SVGPathSegCurvetoQuadraticSmoothAbs:!1,SVGPathSegCurvetoQuadraticSmoothRel:!1,SVGPathSegLinetoAbs:!1,SVGPathSegLinetoHorizontalAbs:!1,SVGPathSegLinetoHorizontalRel:!1,SVGPathSegLinetoRel:!1,SVGPathSegLinetoVerticalAbs:!1,SVGPathSegLinetoVerticalRel:!1,SVGPathSegList:!1,SVGPathSegMovetoAbs:!1,SVGPathSegMovetoRel:!1,SVGPatternElement:!1,SVGPoint:!1,SVGPointList:!1,SVGPolygonElement:!1,SVGPolylineElement:!1,SVGPreserveAspectRatio:!1,SVGRadialGradientElement:!1,SVGRect:!1,SVGRectElement:!1,SVGRenderingIntent:!1,SVGSVGElement:!1,SVGScriptElement:!1,SVGSetElement:!1,SVGStopElement:!1,SVGStringList:!1,SVGStylable:!1,SVGStyleElement:!1,SVGSwitchElement:!1,SVGSymbolElement:!1,SVGTRefElement:!1,SVGTSpanElement:!1,SVGTests:!1,SVGTextContentElement:!1,SVGTextElement:!1,SVGTextPathElement:!1,SVGTextPositioningElement:!1,SVGTitleElement:!1,SVGTransform:!1,SVGTransformList:!1,SVGTransformable:!1,SVGURIReference:!1,SVGUnitTypes:!1,SVGUseElement:!1,SVGVKernElement:!1,SVGViewElement:!1,SVGViewSpec:!1,SVGZoomAndPan:!1,Text:!1,TextDecoder:!1,TextEncoder:!1,TimeEvent:!1,top:!1,URL:!1,WebGLActiveInfo:!1,WebGLBuffer:!1,WebGLContextEvent:!1,WebGLFramebuffer:!1,WebGLProgram:!1,WebGLRenderbuffer:!1,WebGLRenderingContext:!1,WebGLShader:!1,WebGLShaderPrecisionFormat:!1,WebGLTexture:!1,WebGLUniformLocation:!1,WebSocket:!1,window:!1,Window:!1,Worker:!1,XDomainRequest:!1,XMLHttpRequest:!1,XMLSerializer:!1,XPathEvaluator:!1,XPathException:!1,XPathExpression:!1,XPathNamespace:!1,XPathNSResolver:!1,XPathResult:!1},exports.devel={alert:!1,confirm:!1,console:!1,Debug:!1,opera:!1,prompt:!1},exports.worker={importScripts:!0,postMessage:!0,self:!0,FileReaderSync:!0},exports.nonstandard={escape:!1,unescape:!1},exports.couch={require:!1,respond:!1,getRow:!1,emit:!1,send:!1,start:!1,sum:!1,log:!1,exports:!1,module:!1,provides:!1},exports.node={__filename:!1,__dirname:!1,GLOBAL:!1,global:!1,module:!1,acequire:!1,Buffer:!0,console:!0,exports:!0,process:!0,setTimeout:!0,clearTimeout:!0,setInterval:!0,clearInterval:!0,setImmediate:!0,clearImmediate:!0},exports.browserify={__filename:!1,__dirname:!1,global:!1,module:!1,acequire:!1,Buffer:!0,exports:!0,process:!0},exports.phantom={phantom:!0,acequire:!0,WebPage:!0,console:!0,exports:!0},exports.qunit={asyncTest:!1,deepEqual:!1,equal:!1,expect:!1,module:!1,notDeepEqual:!1,notEqual:!1,notPropEqual:!1,notStrictEqual:!1,ok:!1,propEqual:!1,QUnit:!1,raises:!1,start:!1,stop:!1,strictEqual:!1,test:!1,"throws":!1},exports.rhino={defineClass:!1,deserialize:!1,gc:!1,help:!1,importClass:!1,importPackage:!1,java:!1,load:!1,loadClass:!1,Packages:!1,print:!1,quit:!1,readFile:!1,readUrl:!1,runCommand:!1,seal:!1,serialize:!1,spawn:!1,sync:!1,toint32:!1,version:!1},exports.shelljs={target:!1,echo:!1,exit:!1,cd:!1,pwd:!1,ls:!1,find:!1,cp:!1,rm:!1,mv:!1,mkdir:!1,test:!1,cat:!1,sed:!1,grep:!1,which:!1,dirs:!1,pushd:!1,popd:!1,env:!1,exec:!1,chmod:!1,config:!1,error:!1,tempdir:!1},exports.typed={ArrayBuffer:!1,ArrayBufferView:!1,DataView:!1,Float32Array:!1,Float64Array:!1,Int16Array:!1,Int32Array:!1,Int8Array:!1,Uint16Array:!1,Uint32Array:!1,Uint8Array:!1,Uint8ClampedArray:!1},exports.wsh={ActiveXObject:!0,Enumerator:!0,GetObject:!0,ScriptEngine:!0,ScriptEngineBuildVersion:!0,ScriptEngineMajorVersion:!0,ScriptEngineMinorVersion:!0,VBArray:!0,WSH:!0,WScript:!0,XDomainRequest:!0},exports.dojo={dojo:!1,dijit:!1,dojox:!1,define:!1,require:!1},exports.jquery={$:!1,jQuery:!1},exports.mootools={$:!1,$$:!1,Asset:!1,Browser:!1,Chain:!1,Class:!1,Color:!1,Cookie:!1,Core:!1,Document:!1,DomReady:!1,DOMEvent:!1,DOMReady:!1,Drag:!1,Element:!1,Elements:!1,Event:!1,Events:!1,Fx:!1,Group:!1,Hash:!1,HtmlTable:!1,IFrame:!1,IframeShim:!1,InputValidator:!1,instanceOf:!1,Keyboard:!1,Locale:!1,Mask:!1,MooTools:!1,Native:!1,Options:!1,OverText:!1,Request:!1,Scroller:!1,Slick:!1,Slider:!1,Sortables:!1,Spinner:!1,Swiff:!1,Tips:!1,Type:!1,typeOf:!1,URI:!1,Window:!1},exports.prototypejs={$:!1,$$:!1,$A:!1,$F:!1,$H:!1,$R:!1,$break:!1,$continue:!1,$w:!1,Abstract:!1,Ajax:!1,Class:!1,Enumerable:!1,Element:!1,Event:!1,Field:!1,Form:!1,Hash:!1,Insertion:!1,ObjectRange:!1,PeriodicalExecuter:!1,Position:!1,Prototype:!1,Selector:!1,Template:!1,Toggle:!1,Try:!1,Autocompleter:!1,Builder:!1,Control:!1,Draggable:!1,Draggables:!1,Droppables:!1,Effect:!1,Sortable:!1,SortableObserver:!1,Sound:!1,Scriptaculous:!1},exports.yui={YUI:!1,Y:!1,YUI_config:!1},exports.mocha={mocha:!1,describe:!1,xdescribe:!1,it:!1,xit:!1,context:!1,xcontext:!1,before:!1,after:!1,beforeEach:!1,afterEach:!1,suite:!1,test:!1,setup:!1,teardown:!1,suiteSetup:!1,suiteTeardown:!1},exports.jasmine={jasmine:!1,describe:!1,xdescribe:!1,it:!1,xit:!1,beforeEach:!1,afterEach:!1,setFixtures:!1,loadFixtures:!1,spyOn:!1,expect:!1,runs:!1,waitsFor:!1,waits:!1,beforeAll:!1,afterAll:!1,fail:!1,fdescribe:!1,fit:!1,pending:!1}},{}]},{},["/node_modules/jshint/src/jshint.js"])}),ace.define("ace/mode/javascript_worker",["require","exports","module","ace/lib/oop","ace/worker/mirror","ace/mode/javascript/jshint"],function(acequire,exports,module){"use strict";function startRegex(arr){return RegExp("^("+arr.join("|")+")")}var oop=acequire("../lib/oop"),Mirror=acequire("../worker/mirror").Mirror,lint=acequire("./javascript/jshint").JSHINT,disabledWarningsRe=startRegex(["Bad for in variable \'(.+)\'.",\'Missing "use strict"\']),errorsRe=startRegex(["Unexpected","Expected ","Confusing (plus|minus)","\\\\{a\\\\} unterminated regular expression","Unclosed ","Unmatched ","Unbegun comment","Bad invocation","Missing space after","Missing operator at"]),infoRe=startRegex(["Expected an assignment","Bad escapement of EOL","Unexpected comma","Unexpected space","Missing radix parameter.","A leading decimal point can","\\\\[\'{a}\'\\\\] is better written in dot notation.","\'{a}\' used out of scope"]),JavaScriptWorker=exports.JavaScriptWorker=function(sender){Mirror.call(this,sender),this.setTimeout(500),this.setOptions()};oop.inherits(JavaScriptWorker,Mirror),function(){this.setOptions=function(options){this.options=options||{esnext:!0,moz:!0,devel:!0,browser:!0,node:!0,laxcomma:!0,laxbreak:!0,lastsemic:!0,onevar:!1,passfail:!1,maxerr:100,expr:!0,multistr:!0,globalstrict:!0},this.doc.getValue()&&this.deferredUpdate.schedule(100)},this.changeOptions=function(newOptions){oop.mixin(this.options,newOptions),this.doc.getValue()&&this.deferredUpdate.schedule(100)},this.isValidJS=function(str){try{eval("throw 0;"+str)}catch(e){if(0===e)return!0}return!1},this.onUpdate=function(){var value=this.doc.getValue();if(value=value.replace(/^#!.*\\n/,"\\n"),!value)return this.sender.emit("annotate",[]);var errors=[],maxErrorLevel=this.isValidJS(value)?"warning":"error";lint(value,this.options,this.options.globals);for(var results=lint.errors,errorAdded=!1,i=0;results.length>i;i++){var error=results[i];if(error){var raw=error.raw,type="warning";if("Missing semicolon."==raw){var str=error.evidence.substr(error.character);str=str.charAt(str.search(/\\S/)),"error"==maxErrorLevel&&str&&/[\\w\\d{([\'"]/.test(str)?(error.reason=\'Missing ";" before statement\',type="error"):type="info"}else{if(disabledWarningsRe.test(raw))continue;infoRe.test(raw)?type="info":errorsRe.test(raw)?(errorAdded=!0,type=maxErrorLevel):"\'{a}\' is not defined."==raw?type="warning":"\'{a}\' is defined but never used."==raw&&(type="info")}errors.push({row:error.line-1,column:error.character-1,text:error.reason,type:type,raw:raw})}}this.sender.emit("annotate",errors)}}.call(JavaScriptWorker.prototype)}),ace.define("ace/lib/es5-shim",["require","exports","module"],function(){function Empty(){}function doesDefinePropertyWork(object){try{return Object.defineProperty(object,"sentinel",{}),"sentinel"in object}catch(exception){}}function toInteger(n){return n=+n,n!==n?n=0:0!==n&&n!==1/0&&n!==-(1/0)&&(n=(n>0||-1)*Math.floor(Math.abs(n))),n}Function.prototype.bind||(Function.prototype.bind=function(that){var target=this;if("function"!=typeof target)throw new TypeError("Function.prototype.bind called on incompatible "+target);var args=slice.call(arguments,1),bound=function(){if(this instanceof bound){var result=target.apply(this,args.concat(slice.call(arguments)));return Object(result)===result?result:this}return target.apply(that,args.concat(slice.call(arguments)))};return target.prototype&&(Empty.prototype=target.prototype,bound.prototype=new Empty,Empty.prototype=null),bound});var defineGetter,defineSetter,lookupGetter,lookupSetter,supportsAccessors,call=Function.prototype.call,prototypeOfArray=Array.prototype,prototypeOfObject=Object.prototype,slice=prototypeOfArray.slice,_toString=call.bind(prototypeOfObject.toString),owns=call.bind(prototypeOfObject.hasOwnProperty);if((supportsAccessors=owns(prototypeOfObject,"__defineGetter__"))&&(defineGetter=call.bind(prototypeOfObject.__defineGetter__),defineSetter=call.bind(prototypeOfObject.__defineSetter__),lookupGetter=call.bind(prototypeOfObject.__lookupGetter__),lookupSetter=call.bind(prototypeOfObject.__lookupSetter__)),2!=[1,2].splice(0).length)if(function(){function makeArray(l){var a=Array(l+2);return a[0]=a[1]=0,a}var lengthBefore,array=[];return array.splice.apply(array,makeArray(20)),array.splice.apply(array,makeArray(26)),lengthBefore=array.length,array.splice(5,0,"XXX"),lengthBefore+1==array.length,lengthBefore+1==array.length?!0:void 0}()){var array_splice=Array.prototype.splice;Array.prototype.splice=function(start,deleteCount){return arguments.length?array_splice.apply(this,[void 0===start?0:start,void 0===deleteCount?this.length-start:deleteCount].concat(slice.call(arguments,2))):[]}}else Array.prototype.splice=function(pos,removeCount){var length=this.length;pos>0?pos>length&&(pos=length):void 0==pos?pos=0:0>pos&&(pos=Math.max(length+pos,0)),length>pos+removeCount||(removeCount=length-pos);var removed=this.slice(pos,pos+removeCount),insert=slice.call(arguments,2),add=insert.length;if(pos===length)add&&this.push.apply(this,insert);else{var remove=Math.min(removeCount,length-pos),tailOldPos=pos+remove,tailNewPos=tailOldPos+add-remove,tailCount=length-tailOldPos,lengthAfterRemove=length-remove;if(tailOldPos>tailNewPos)for(var i=0;tailCount>i;++i)this[tailNewPos+i]=this[tailOldPos+i];else if(tailNewPos>tailOldPos)for(i=tailCount;i--;)this[tailNewPos+i]=this[tailOldPos+i];if(add&&pos===lengthAfterRemove)this.length=lengthAfterRemove,this.push.apply(this,insert);else for(this.length=lengthAfterRemove+add,i=0;add>i;++i)this[pos+i]=insert[i]}return removed};Array.isArray||(Array.isArray=function(obj){return"[object Array]"==_toString(obj)});var boxedString=Object("a"),splitString="a"!=boxedString[0]||!(0 in boxedString);if(Array.prototype.forEach||(Array.prototype.forEach=function(fun){var object=toObject(this),self=splitString&&"[object String]"==_toString(this)?this.split(""):object,thisp=arguments[1],i=-1,length=self.length>>>0;if("[object Function]"!=_toString(fun))throw new TypeError;for(;length>++i;)i in self&&fun.call(thisp,self[i],i,object)}),Array.prototype.map||(Array.prototype.map=function(fun){var object=toObject(this),self=splitString&&"[object String]"==_toString(this)?this.split(""):object,length=self.length>>>0,result=Array(length),thisp=arguments[1];if("[object Function]"!=_toString(fun))throw new TypeError(fun+" is not a function");for(var i=0;length>i;i++)i in self&&(result[i]=fun.call(thisp,self[i],i,object));return result}),Array.prototype.filter||(Array.prototype.filter=function(fun){var value,object=toObject(this),self=splitString&&"[object String]"==_toString(this)?this.split(""):object,length=self.length>>>0,result=[],thisp=arguments[1];if("[object Function]"!=_toString(fun))throw new TypeError(fun+" is not a function");for(var i=0;length>i;i++)i in self&&(value=self[i],fun.call(thisp,value,i,object)&&result.push(value));return result}),Array.prototype.every||(Array.prototype.every=function(fun){var object=toObject(this),self=splitString&&"[object String]"==_toString(this)?this.split(""):object,length=self.length>>>0,thisp=arguments[1];if("[object Function]"!=_toString(fun))throw new TypeError(fun+" is not a function");for(var i=0;length>i;i++)if(i in self&&!fun.call(thisp,self[i],i,object))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(fun){var object=toObject(this),self=splitString&&"[object String]"==_toString(this)?this.split(""):object,length=self.length>>>0,thisp=arguments[1];if("[object Function]"!=_toString(fun))throw new TypeError(fun+" is not a function");for(var i=0;length>i;i++)if(i in self&&fun.call(thisp,self[i],i,object))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(fun){var object=toObject(this),self=splitString&&"[object String]"==_toString(this)?this.split(""):object,length=self.length>>>0;if("[object Function]"!=_toString(fun))throw new TypeError(fun+" is not a function");if(!length&&1==arguments.length)throw new TypeError("reduce of empty array with no initial value");var result,i=0;if(arguments.length>=2)result=arguments[1];else for(;;){if(i in self){result=self[i++];break}if(++i>=length)throw new TypeError("reduce of empty array with no initial value")}for(;length>i;i++)i in self&&(result=fun.call(void 0,result,self[i],i,object));return result}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(fun){var object=toObject(this),self=splitString&&"[object String]"==_toString(this)?this.split(""):object,length=self.length>>>0;if("[object Function]"!=_toString(fun))throw new TypeError(fun+" is not a function");if(!length&&1==arguments.length)throw new TypeError("reduceRight of empty array with no initial value");var result,i=length-1;if(arguments.length>=2)result=arguments[1];else for(;;){if(i in self){result=self[i--];break}if(0>--i)throw new TypeError("reduceRight of empty array with no initial value")}do i in this&&(result=fun.call(void 0,result,self[i],i,object));while(i--);return result}),Array.prototype.indexOf&&-1==[0,1].indexOf(1,2)||(Array.prototype.indexOf=function(sought){var self=splitString&&"[object String]"==_toString(this)?this.split(""):toObject(this),length=self.length>>>0;if(!length)return-1;var i=0;for(arguments.length>1&&(i=toInteger(arguments[1])),i=i>=0?i:Math.max(0,length+i);length>i;i++)if(i in self&&self[i]===sought)return i;return-1}),Array.prototype.lastIndexOf&&-1==[0,1].lastIndexOf(0,-3)||(Array.prototype.lastIndexOf=function(sought){var self=splitString&&"[object String]"==_toString(this)?this.split(""):toObject(this),length=self.length>>>0;if(!length)return-1;var i=length-1;for(arguments.length>1&&(i=Math.min(i,toInteger(arguments[1]))),i=i>=0?i:length-Math.abs(i);i>=0;i--)if(i in self&&sought===self[i])return i;return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(object){return object.__proto__||(object.constructor?object.constructor.prototype:prototypeOfObject)}),!Object.getOwnPropertyDescriptor){var ERR_NON_OBJECT="Object.getOwnPropertyDescriptor called on a non-object: ";Object.getOwnPropertyDescriptor=function(object,property){if("object"!=typeof object&&"function"!=typeof object||null===object)throw new TypeError(ERR_NON_OBJECT+object);if(owns(object,property)){var descriptor,getter,setter;if(descriptor={enumerable:!0,configurable:!0},supportsAccessors){var prototype=object.__proto__;object.__proto__=prototypeOfObject;var getter=lookupGetter(object,property),setter=lookupSetter(object,property);if(object.__proto__=prototype,getter||setter)return getter&&(descriptor.get=getter),setter&&(descriptor.set=setter),descriptor}return descriptor.value=object[property],descriptor}}}if(Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(object){return Object.keys(object)}),!Object.create){var createEmpty;createEmpty=null===Object.prototype.__proto__?function(){return{__proto__:null}}:function(){var empty={};for(var i in empty)empty[i]=null;return empty.constructor=empty.hasOwnProperty=empty.propertyIsEnumerable=empty.isPrototypeOf=empty.toLocaleString=empty.toString=empty.valueOf=empty.__proto__=null,empty},Object.create=function(prototype,properties){var object;if(null===prototype)object=createEmpty();else{if("object"!=typeof prototype)throw new TypeError("typeof prototype["+typeof prototype+"] != \'object\'");var Type=function(){};Type.prototype=prototype,object=new Type,object.__proto__=prototype}return void 0!==properties&&Object.defineProperties(object,properties),object}}if(Object.defineProperty){var definePropertyWorksOnObject=doesDefinePropertyWork({}),definePropertyWorksOnDom="undefined"==typeof document||doesDefinePropertyWork(document.createElement("div"));if(!definePropertyWorksOnObject||!definePropertyWorksOnDom)var definePropertyFallback=Object.defineProperty}if(!Object.defineProperty||definePropertyFallback){var ERR_NON_OBJECT_DESCRIPTOR="Property description must be an object: ",ERR_NON_OBJECT_TARGET="Object.defineProperty called on non-object: ",ERR_ACCESSORS_NOT_SUPPORTED="getters & setters can not be defined on this javascript engine";Object.defineProperty=function(object,property,descriptor){if("object"!=typeof object&&"function"!=typeof object||null===object)throw new TypeError(ERR_NON_OBJECT_TARGET+object);if("object"!=typeof descriptor&&"function"!=typeof descriptor||null===descriptor)throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR+descriptor);if(definePropertyFallback)try{return definePropertyFallback.call(Object,object,property,descriptor)}catch(exception){}if(owns(descriptor,"value"))if(supportsAccessors&&(lookupGetter(object,property)||lookupSetter(object,property))){var prototype=object.__proto__;object.__proto__=prototypeOfObject,delete object[property],object[property]=descriptor.value,object.__proto__=prototype}else object[property]=descriptor.value;else{if(!supportsAccessors)throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);owns(descriptor,"get")&&defineGetter(object,property,descriptor.get),owns(descriptor,"set")&&defineSetter(object,property,descriptor.set)}return object}}Object.defineProperties||(Object.defineProperties=function(object,properties){for(var property in properties)owns(properties,property)&&Object.defineProperty(object,property,properties[property]);return object}),Object.seal||(Object.seal=function(object){return object}),Object.freeze||(Object.freeze=function(object){return object});try{Object.freeze(function(){})}catch(exception){Object.freeze=function(freezeObject){return function(object){return"function"==typeof object?object:freezeObject(object)}}(Object.freeze)}if(Object.preventExtensions||(Object.preventExtensions=function(object){return object}),Object.isSealed||(Object.isSealed=function(){return!1}),Object.isFrozen||(Object.isFrozen=function(){return!1}),Object.isExtensible||(Object.isExtensible=function(object){if(Object(object)===object)throw new TypeError;for(var name="";owns(object,name);)name+="?";object[name]=!0;var returnValue=owns(object,name);return delete object[name],returnValue}),!Object.keys){var hasDontEnumBug=!0,dontEnums=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],dontEnumsLength=dontEnums.length;for(var key in{toString:null})hasDontEnumBug=!1;Object.keys=function(object){if("object"!=typeof object&&"function"!=typeof object||null===object)throw new TypeError("Object.keys called on a non-object");var keys=[];for(var name in object)owns(object,name)&&keys.push(name);if(hasDontEnumBug)for(var i=0,ii=dontEnumsLength;ii>i;i++){var dontEnum=dontEnums[i];owns(object,dontEnum)&&keys.push(dontEnum)}return keys}}Date.now||(Date.now=function(){return(new Date).getTime()});var ws="\t\\n\v\\f\\r   ᠎              \\u2028\\u2029\ufeff";if(!String.prototype.trim||ws.trim()){ws="["+ws+"]";var trimBeginRegexp=RegExp("^"+ws+ws+"*"),trimEndRegexp=RegExp(ws+ws+"*$");String.prototype.trim=function(){return(this+"").replace(trimBeginRegexp,"").replace(trimEndRegexp,"")}}var toObject=function(o){if(null==o)throw new TypeError("can\'t convert "+o+" to object");return Object(o)}});'},"6da8":function(e,t){function n(e){return e.split("")}e.exports=n},"6eba":function(e,t,n){var i=n("23e7");i({target:"Date",stat:!0},{now:function(){return(new Date).getTime()}})},"6eeb":function(e,t,n){var i=n("da84"),r=n("9112"),s=n("5135"),a=n("ce4e"),o=n("8925"),c=n("69f3"),l=c.get,u=c.enforce,d=String(String).split("String");(e.exports=function(e,t,n,o){var c,l=!!o&&!!o.unsafe,h=!!o&&!!o.enumerable,f=!!o&&!!o.noTargetGet;"function"==typeof n&&("string"!=typeof t||s(n,"name")||r(n,"name",t),c=u(n),c.source||(c.source=d.join("string"==typeof t?t:""))),e!==i?(l?!f&&e[t]&&(h=!0):delete e[t],h?e[t]=n:r(e,t,n)):h?e[t]=n:a(t,n)})(Function.prototype,"toString",(function(){return"function"==typeof this&&l(this).source||o(this)}))},"6f53":function(e,t,n){var i=n("83ab"),r=n("df75"),s=n("fc6a"),a=n("d1e7").f,o=function(e){return function(t){var n,o=s(t),c=r(o),l=c.length,u=0,d=[];while(l>u)n=c[u++],i&&!a.call(o,n)||d.push(e?[n,o[n]]:o[n]);return d}};e.exports={entries:o(!0),values:o(!1)}},7039:function(e,t,n){var i=n("23e7"),r=n("d039"),s=n("057f").f,a=r((function(){return!Object.getOwnPropertyNames(1)}));i({target:"Object",stat:!0,forced:a},{getOwnPropertyNames:s})},7156:function(e,t,n){var i=n("861d"),r=n("d2bb");e.exports=function(e,t,n){var s,a;return r&&"function"==typeof(s=t.constructor)&&s!==n&&i(a=s.prototype)&&a!==n.prototype&&r(e,a),e}},"715b":function(e,t,n){"use strict";n("8746")},"72f7":function(e,t,n){"use strict";var i=n("ebb5").exportTypedArrayMethod,r=n("d039"),s=n("da84"),a=s.Uint8Array,o=a&&a.prototype||{},c=[].toString,l=[].join;r((function(){c.call({})}))&&(c=function(){return l.call(this)});var u=o.toString!=c;i("toString",c,u)},"735e":function(e,t,n){"use strict";var i=n("ebb5"),r=n("81d5"),s=i.aTypedArray,a=i.exportTypedArrayMethod;a("fill",(function(e){return r.apply(s(this),arguments)}))},"73d9":function(e,t,n){var i=n("44d2");i("flatMap")},"73f5":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("vui-group",[n("vui-group-item",{attrs:{label:"ID:"}},[e._v(e._s(e.active_virus.id))]),n("vui-group-item",{attrs:{label:"Description:"},domProps:{innerHTML:e._s(e.active_virus.description)}}),n("vui-group-item",{attrs:{label:"Notes:"}},[n("view-records-field",{attrs:{editable:(32&e.editable)>0,path:"active_virus.notes"}},[n("textarea",{directives:[{name:"model",rawName:"v-model",value:e.$root.$data.state.editingvalue,expression:"$root.$data.state.editingvalue"}],domProps:{value:e.$root.$data.state.editingvalue},on:{input:function(t){t.target.composing||e.$set(e.$root.$data.state,"editingvalue",t.target.value)}}})])],1)],1)},r=[],s={data:function(){return this.$root.$data.state}},a=s,o=n("2877"),c=Object(o["a"])(a,i,r,!1,null,null,null);t["default"]=c.exports},7418:function(e,t){t.f=Object.getOwnPropertySymbols},"746f":function(e,t,n){var i=n("428f"),r=n("5135"),s=n("e538"),a=n("9bf2").f;e.exports=function(e){var t=i.Symbol||(i.Symbol={});r(t,e)||a(t,e,{value:s.f(e)})}},"74e7":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("tr",{staticClass:"item"},[n("td",{attrs:{colspan:"2"}},[e._t("default")],2)])},r=[],s={},a=s,o=n("2877"),c=Object(o["a"])(a,i,r,!1,null,null,null);t["default"]=c.exports},"74e8":function(e,t,n){"use strict";var i=n("23e7"),r=n("da84"),s=n("83ab"),a=n("8aa7"),o=n("ebb5"),c=n("621a"),l=n("19aa"),u=n("5c6c"),d=n("9112"),h=n("50c4"),f=n("0b25"),p=n("182d"),g=n("c04e"),m=n("5135"),v=n("f5df"),b=n("861d"),y=n("7c73"),w=n("d2bb"),_=n("241c").f,x=n("a078"),k=n("b727").forEach,A=n("2626"),C=n("9bf2"),E=n("06cf"),S=n("69f3"),F=n("7156"),$=S.get,T=S.set,L=C.f,D=E.f,B=Math.round,R=r.RangeError,O=c.ArrayBuffer,M=c.DataView,j=o.NATIVE_ARRAY_BUFFER_VIEWS,I=o.TYPED_ARRAY_TAG,P=o.TypedArray,N=o.TypedArrayPrototype,W=o.aTypedArrayConstructor,H=o.isTypedArray,V="BYTES_PER_ELEMENT",U="Wrong length",z=function(e,t){var n=0,i=t.length,r=new(W(e))(i);while(i>n)r[n]=t[n++];return r},G=function(e,t){L(e,t,{get:function(){return $(this)[t]}})},q=function(e){var t;return e instanceof O||"ArrayBuffer"==(t=v(e))||"SharedArrayBuffer"==t},K=function(e,t){return H(e)&&"symbol"!=typeof t&&t in e&&String(+t)==String(t)},Y=function(e,t){return K(e,t=g(t,!0))?u(2,e[t]):D(e,t)},X=function(e,t,n){return!(K(e,t=g(t,!0))&&b(n)&&m(n,"value"))||m(n,"get")||m(n,"set")||n.configurable||m(n,"writable")&&!n.writable||m(n,"enumerable")&&!n.enumerable?L(e,t,n):(e[t]=n.value,e)};s?(j||(E.f=Y,C.f=X,G(N,"buffer"),G(N,"byteOffset"),G(N,"byteLength"),G(N,"length")),i({target:"Object",stat:!0,forced:!j},{getOwnPropertyDescriptor:Y,defineProperty:X}),e.exports=function(e,t,n){var s=e.match(/\d+$/)[0]/8,o=e+(n?"Clamped":"")+"Array",c="get"+e,u="set"+e,g=r[o],m=g,v=m&&m.prototype,C={},E=function(e,t){var n=$(e);return n.view[c](t*s+n.byteOffset,!0)},S=function(e,t,i){var r=$(e);n&&(i=(i=B(i))<0?0:i>255?255:255&i),r.view[u](t*s+r.byteOffset,i,!0)},D=function(e,t){L(e,t,{get:function(){return E(this,t)},set:function(e){return S(this,t,e)},enumerable:!0})};j?a&&(m=t((function(e,t,n,i){return l(e,m,o),F(function(){return b(t)?q(t)?void 0!==i?new g(t,p(n,s),i):void 0!==n?new g(t,p(n,s)):new g(t):H(t)?z(m,t):x.call(m,t):new g(f(t))}(),e,m)})),w&&w(m,P),k(_(g),(function(e){e in m||d(m,e,g[e])})),m.prototype=v):(m=t((function(e,t,n,i){l(e,m,o);var r,a,c,u=0,d=0;if(b(t)){if(!q(t))return H(t)?z(m,t):x.call(m,t);r=t,d=p(n,s);var g=t.byteLength;if(void 0===i){if(g%s)throw R(U);if(a=g-d,a<0)throw R(U)}else if(a=h(i)*s,a+d>g)throw R(U);c=a/s}else c=f(t),a=c*s,r=new O(a);T(e,{buffer:r,byteOffset:d,byteLength:a,length:c,view:new M(r)});while(u>1,m=23===t?r(2,-24)-r(2,-77):0,v=e<0||0===e&&1/e<0?1:0,b=0;for(e=i(e),e!=e||e===n?(u=e!=e?1:0,l=p):(l=s(a(e)/o),e*(d=r(2,-l))<1&&(l--,d*=2),e+=l+g>=1?m/d:m*r(2,1-g),e*d>=2&&(l++,d/=2),l+g>=p?(u=0,l=p):l+g>=1?(u=(e*d-1)*r(2,t),l+=g):(u=e*r(2,g-1)*r(2,t),l=0));t>=8;h[b++]=255&u,u/=256,t-=8);for(l=l<0;h[b++]=255&l,l/=256,f-=8);return h[--b]|=128*v,h},l=function(e,t){var i,s=e.length,a=8*s-t-1,o=(1<>1,l=a-7,u=s-1,d=e[u--],h=127&d;for(d>>=7;l>0;h=256*h+e[u],u--,l-=8);for(i=h&(1<<-l)-1,h>>=-l,l+=t;l>0;i=256*i+e[u],u--,l-=8);if(0===h)h=1-c;else{if(h===o)return i?NaN:d?-n:n;i+=r(2,t),h-=c}return(d?-1:1)*i*r(2,h-t)};e.exports={pack:c,unpack:l}},"77f3":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("vui-group",[n("vui-group-row",[n("h3",[e._v("Pump Status")])]),n("vui-group-item",{attrs:{label:"Tank Pressure:"}},[e._v(" "+e._s(e.tankPressure)+" kPa ")]),n("vui-group-item",{attrs:{label:"Port Status:"}},[n("span",{class:e.portConnected?"good":"average"},[e._v(e._s(e.portConnected?"Connected":"Disconnected"))])]),n("vui-group-item",{attrs:{label:"Load:"}},[e._v(" "+e._s(e.powerDraw)+" W ")]),n("vui-group-item",{attrs:{label:"Cell Charge:"}},[n("vui-progress",{attrs:{value:e.cellCharge,min:0,max:e.cellMaxCharge}})],1),n("vui-group-row",[n("h3",[e._v("Holding Tank Status")])]),e.hasHoldingTank?n("vui-group-item",{attrs:{label:"Tank Label:"}},[e._v(" "+e._s(e.holdingTank.name)+" "),n("vui-button",{attrs:{icon:"eject",params:{remove_tank:1}}},[e._v("Eject")])],1):e._e(),e.hasHoldingTank?n("vui-group-item",{attrs:{label:"Tank Pressure:"}},[e._v(e._s(e.holdingTank.tankPressure)+" kPa")]):n("vui-group-row",[n("span",{staticClass:"average"},[n("i",[e._v("No holding tank inserted.")])])]),n("vui-group-row",[n("h3",[e._v("Power Regulator Status")])]),n("vui-group-item",{attrs:{label:"Target Pressure:"}},[n("vui-progress",{attrs:{value:e.targetpressure,min:e.minpressure,max:e.maxpressure}}),n("div",{staticStyle:{float:"left",clear:"both","padding-top":"4px","text-align":"center"}},[n("vui-input-numeric",{attrs:{min:e.minpressure,max:e.maxpressure,"min-button":"","max-button":"",width:"4em","button-count":0},on:{input:function(t){return e.s({pressure_set:e.targetpressure})}},model:{value:e.targetpressure,callback:function(t){e.targetpressure=t},expression:"targetpressure"}})],1)],1),n("vui-group-item",{attrs:{label:"Power Switch:"}},[n("vui-button",{class:{selected:e.on},attrs:{icon:e.on?"power-off":"times",params:{power:1}}},[e._v(e._s(e.on?"On":"Off"))])],1),n("vui-group-item",{attrs:{label:"Pump Direction:"}},[n("vui-button",{attrs:{icon:"share",flip:e.pump_dir?"horizontal":"",params:{direction:1}}},[e._v(e._s(e.pump_dir?"Out":"In"))])],1)],1)},r=[],s=n("025e"),a={data:function(){return this.$root.$data.state},methods:{s:function(e){s["a"].sendToTopic(e)}}},o=a,c=(n("c7ef"),n("2877")),l=Object(c["a"])(o,i,r,!1,null,"0cce4ea8",null);t["default"]=l.exports},7839:function(e,t){e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},7898:function(e,t,n){var i=n("23e7"),r=n("8eb5"),s=Math.exp;i({target:"Math",stat:!0},{tanh:function(e){var t=r(e=+e),n=r(-e);return t==1/0?1:n==1/0?-1:(t-n)/(s(e)+s(-e))}})},7938:function(e,t,n){},7948:function(e,t){function n(e,t){var n=-1,i=null==e?0:e.length,r=Array(i);while(++n0)},{asinh:o})},"7a82":function(e,t,n){var i=n("23e7"),r=n("83ab"),s=n("9bf2");i({target:"Object",stat:!0,forced:!r,sham:!r},{defineProperty:s.f})},"7b0b":function(e,t,n){var i=n("1d80");e.exports=function(e){return Object(i(e))}},"7c73":function(e,t,n){var i,r=n("825a"),s=n("37e8"),a=n("7839"),o=n("d012"),c=n("1be4"),l=n("cc12"),u=n("f772"),d=">",h="<",f="prototype",p="script",g=u("IE_PROTO"),m=function(){},v=function(e){return h+p+d+e+h+"/"+p+d},b=function(e){e.write(v("")),e.close();var t=e.parentWindow.Object;return e=null,t},y=function(){var e,t=l("iframe"),n="java"+p+":";return t.style.display="none",c.appendChild(t),t.src=String(n),e=t.contentWindow.document,e.open(),e.write(v("document.F=Object")),e.close(),e.F},w=function(){try{i=document.domain&&new ActiveXObject("htmlfile")}catch(t){}w=i?b(i):y();var e=a.length;while(e--)delete w[f][a[e]];return w()};o[g]=!0,e.exports=Object.create||function(e,t){var n;return null!==e?(m[f]=r(e),n=new m,m[f]=null,n[g]=e):n=w(),void 0===t?n:s(n,t)}},"7c9e":function(e,t,n){var i=n("061c");e.exports={render:function(e){var t=this.height?this.px(this.height):"100%",n=this.width?this.px(this.width):"100%";return e("div",{attrs:{style:"height: "+t+"; width: "+n}})},props:{value:String,lang:!0,theme:String,height:!0,width:!0,options:Object},data:function(){return{editor:null,contentBackup:""}},methods:{px:function(e){return/^\d*$/.test(e)?e+"px":e}},watch:{value:function(e){this.contentBackup!==e&&(this.editor.session.setValue(e,1),this.contentBackup=e)},theme:function(e){this.editor.setTheme("ace/theme/"+e)},lang:function(e){this.editor.getSession().setMode("string"===typeof e?"ace/mode/"+e:e)},options:function(e){this.editor.setOptions(e)},height:function(){this.$nextTick((function(){this.editor.resize()}))},width:function(){this.$nextTick((function(){this.editor.resize()}))}},beforeDestroy:function(){this.editor.destroy(),this.editor.container.remove()},mounted:function(){var e=this,t=this.lang||"text",r=this.theme||"chrome";n("b378");var s=e.editor=i.edit(this.$el);s.$blockScrolling=1/0,this.$emit("init",s),s.getSession().setMode("string"===typeof t?"ace/mode/"+t:t),s.setTheme("ace/theme/"+r),this.value&&s.setValue(this.value,1),this.contentBackup=this.value,s.on("change",(function(){var t=s.getValue();e.$emit("input",t),e.contentBackup=t})),e.options&&s.setOptions(e.options)}}},"7da4":function(e,t,n){},"7db0":function(e,t,n){"use strict";var i=n("23e7"),r=n("b727").find,s=n("44d2"),a=n("ae40"),o="find",c=!0,l=a(o);o in[]&&Array(1)[o]((function(){c=!1})),i({target:"Array",proto:!0,forced:c||!l},{find:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}}),s(o)},"7dc4":function(e,t,n){"use strict";n("592e")},"7dc7":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[0==e.s.mode||0==e.s.sel_price?[n("div",{staticClass:"cancel-button"},[n("vui-input-search",{attrs:{input:e.products,keys:["name"],autofocus:"",threshold:e.threshold},model:{value:e.output,callback:function(t){e.output=t},expression:"output"}}),n("vui-button",{attrs:{disabled:!e.s.coin,params:{remove_coin:1},icon:"sign-out-alt"}},[e._v(e._s(e.s.coin?e.s.coin:"No coin inserted."))])],1),n("div",{staticClass:"t-parent"},e._l(e.output,(function(t){return n("vui-button",{key:t.key,staticClass:"t-child tooltip",class:t.amount>0?"":"no-stock",attrs:{disabled:0==t.amount||1==e.s.mode,params:{vendItem:t.key}}},[n("div",{staticClass:"t-container",style:{height:e.s.ui_size+"px",width:e.s.ui_size+"px"}},[n("span",{staticClass:"food-icon",class:[t.amount>0?"":"no-stock",t.icon_tag]}),t.price>0?n("span",{staticClass:"cart-icon fas ic-shopping-cart"}):e._e(),t.price>0?n("span",{staticClass:"price"},[e._v(e._s(t.price)+"电")]):e._e(),n("span",{staticClass:"qty",class:t.amount>0?"":"no-stock"},[e._v("(x"+e._s(t.amount)+")")])]),n("span",{staticClass:"tooltiptext"},[e._v(e._s(t.name))])])})),1)]:e.s.sel_name&&e.s.sel_price>0?[n("div",{staticClass:"t-parent"},[n("p",[e._v("Item selected:"),n("span",{staticClass:"purchase-icon",class:e.s.sel_icon}),e._v(e._s(e.s.sel_name))]),n("p",[e._v("Charge: "+e._s(e.s.sel_price)+"电 / "+e._s(e.s.sel_price)+"cr")]),n("p",[e._v("Swipe your NanoTrasen ID or insert credits to purchase.")]),1==e.s.message_err?n("p",{staticClass:"danger"},[e._v(e._s(e.s.message))]):e._e(),n("div",{staticClass:"cancel-button"},[n("vui-button",{attrs:{params:{cancelpurchase:1},icon:"undo"}},[e._v("Cancel Transaction")])],1)])]:[n("vui-button",{staticClass:"cancel-button danger",attrs:{params:{reset:1},icon:"undo"}},[e._v("Reset Machine")])]],2)},r=[],s=(n("07ac"),{data:function(){return{s:this.$root.$data.state,output:[],threshold:.3}},computed:{products:function(){return Object.values(this.s.products)}}}),a=s,o=(n("fe33"),n("2877")),c=Object(o["a"])(a,i,r,!1,null,"2633030c",null);t["default"]=c.exports},"7dd0":function(e,t,n){"use strict";var i=n("23e7"),r=n("9ed3"),s=n("e163"),a=n("d2bb"),o=n("d44e"),c=n("9112"),l=n("6eeb"),u=n("b622"),d=n("c430"),h=n("3f8c"),f=n("ae93"),p=f.IteratorPrototype,g=f.BUGGY_SAFARI_ITERATORS,m=u("iterator"),v="keys",b="values",y="entries",w=function(){return this};e.exports=function(e,t,n,u,f,_,x){r(n,t,u);var k,A,C,E=function(e){if(e===f&&L)return L;if(!g&&e in $)return $[e];switch(e){case v:return function(){return new n(this,e)};case b:return function(){return new n(this,e)};case y:return function(){return new n(this,e)}}return function(){return new n(this)}},S=t+" Iterator",F=!1,$=e.prototype,T=$[m]||$["@@iterator"]||f&&$[f],L=!g&&T||E(f),D="Array"==t&&$.entries||T;if(D&&(k=s(D.call(new e)),p!==Object.prototype&&k.next&&(d||s(k)===p||(a?a(k,p):"function"!=typeof k[m]&&c(k,m,w)),o(k,S,!0,!0),d&&(h[S]=w))),f==b&&T&&T.name!==b&&(F=!0,L=function(){return T.call(this)}),d&&!x||$[m]===L||c($,m,L),h[t]=L,f)if(A={values:E(b),keys:_?L:E(v),entries:E(y)},x)for(C in A)(g||F||!(C in $))&&l($,C,A[C]);else i({target:t,proto:!0,forced:g||F},A);return A}},"7e12":function(e,t,n){var i=n("da84"),r=n("58a8").trim,s=n("5899"),a=i.parseFloat,o=1/a(s+"-0")!==-1/0;e.exports=o?function(e){var t=r(String(e)),n=a(t);return 0===n&&"-"==t.charAt(0)?-0:n}:a},"7e8e":function(e,t){var n=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;function i(e){return n.test(e)}e.exports=i},"7ed3":function(e,t,n){var i=n("23e7"),r=n("825a"),s=n("861d"),a=n("5135"),o=n("d039"),c=n("9bf2"),l=n("06cf"),u=n("e163"),d=n("5c6c");function h(e,t,n){var i,o,f=arguments.length<4?e:arguments[3],p=l.f(r(e),t);if(!p){if(s(o=u(e)))return h(o,t,n,f);p=d(0)}if(a(p,"value")){if(!1===p.writable||!s(f))return!1;if(i=l.f(f,t)){if(i.get||i.set||!1===i.writable)return!1;i.value=n,c.f(f,t,i)}else c.f(f,t,d(0,n));return!0}return void 0!==p.set&&(p.set.call(f,n),!0)}var f=o((function(){var e=function(){},t=c.f(new e,"a",{configurable:!0});return!1!==Reflect.set(e.prototype,"a",1,t)}));i({target:"Reflect",stat:!0,forced:f},{set:h})},"7f78":function(e,t,n){var i=n("23e7"),r=n("825a"),s=n("e163"),a=n("e177");i({target:"Reflect",stat:!0,sham:!a},{getPrototypeOf:function(e){return s(r(e))}})},"7f9a":function(e,t,n){var i=n("da84"),r=n("8925"),s=i.WeakMap;e.exports="function"===typeof s&&/native code/.test(r(s))},"80e0":function(e,t,n){var i=n("746f");i("replace")},8103:function(e,t,n){var i=n("d194"),r=i("toUpperCase");e.exports=r},"810a":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("img",{attrs:{src:e.source},on:{error:function(t){return e.failedToLoad()}}})},r=[],s=(n("99af"),n("b0c0"),n("a9e3"),n("4795"),{props:{name:{type:String,default:""},maxTries:{type:Number,default:10}},computed:{sourceBuster:function(){return this.failsToLoad&&this.failsToLoad1?arguments[1]:void 0,n),c=a>2?arguments[2]:void 0,l=void 0===c?n:r(c,n);while(l>o)t[o++]=e;return t}},"820e":function(e,t,n){"use strict";var i=n("23e7"),r=n("1c0b"),s=n("f069"),a=n("e667"),o=n("2266");i({target:"Promise",stat:!0},{allSettled:function(e){var t=this,n=s.f(t),i=n.resolve,c=n.reject,l=a((function(){var n=r(t.resolve),s=[],a=0,c=1;o(e,(function(e){var r=a++,o=!1;s.push(void 0),c++,n.call(t,e).then((function(e){o||(o=!0,s[r]={status:"fulfilled",value:e},--c||i(s))}),(function(e){o||(o=!0,s[r]={status:"rejected",reason:e},--c||i(s))}))})),--c||i(s)}));return l.error&&c(l.value),n.promise}})},"825a":function(e,t,n){var i=n("861d");e.exports=function(e){if(!i(e))throw TypeError(String(e)+" is not an object");return e}},"82da":function(e,t,n){var i=n("23e7"),r=n("ebb5"),s=r.NATIVE_ARRAY_BUFFER_VIEWS;i({target:"ArrayBuffer",stat:!0,forced:!s},{isView:r.isView})},"82f8":function(e,t,n){"use strict";var i=n("ebb5"),r=n("4d64").includes,s=i.aTypedArray,a=i.exportTypedArrayMethod;a("includes",(function(e){return r(s(this),e,arguments.length>1?arguments[1]:void 0)}))},8385:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("vui-input-search",{attrs:{input:e.records,keys:["id","name","rank"]},model:{value:e.filtered,callback:function(t){e.filtered=t},expression:"filtered"}}),e._l(e.filtered,(function(t){return n("div",{key:t.id},[n("vui-button",{attrs:{params:{setactive_virus:t.id},"push-state":""},on:{click:function(t){e.activeview=e.defaultview}}},[e._v(e._s(t.id)+": "+e._s(t.name))])],1)}))],2)},r=[],s=(n("07ac"),{data:function(){return{state:this.$root.$data.state,filtered:[]}},computed:{records:function(){return Object.values(this.state.record_viruses)}}}),a=s,o=n("2877"),c=Object(o["a"])(a,i,r,!1,null,null,null);t["default"]=c.exports},"83ab":function(e,t,n){var i=n("d039");e.exports=!i((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},8418:function(e,t,n){"use strict";var i=n("c04e"),r=n("9bf2"),s=n("5c6c");e.exports=function(e,t,n){var a=i(t);a in e?r.f(e,a,s(0,n)):e[a]=n}},"841c":function(e,t,n){"use strict";var i=n("d784"),r=n("825a"),s=n("1d80"),a=n("129f"),o=n("14c3");i("search",1,(function(e,t,n){return[function(t){var n=s(this),i=void 0==t?void 0:t[e];return void 0!==i?i.call(t,n):new RegExp(t)[e](String(n))},function(e){var i=n(t,e,this);if(i.done)return i.value;var s=r(e),c=String(this),l=s.lastIndex;a(l,0)||(s.lastIndex=0);var u=o(s,c);return a(s.lastIndex,l)||(s.lastIndex=l),null===u?-1:u.index}]}))},"843c":function(e,t,n){"use strict";var i=n("23e7"),r=n("0ccb").end,s=n("9a0c");i({target:"String",proto:!0,forced:s},{padEnd:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}})},"84c3":function(e,t,n){var i=n("74e8");i("Uint16",(function(e){return function(t,n,i){return e(this,t,n,i)}}))},8535:function(e,t,n){},"857a":function(e,t,n){var i=n("1d80"),r=/"/g;e.exports=function(e,t,n,s){var a=String(i(e)),o="<"+t;return""!==n&&(o+=" "+n+'="'+String(s).replace(r,""")+'"'),o+">"+a+""}},"861d":function(e,t){e.exports=function(e){return"object"===typeof e?null!==e:"function"===typeof e}},"86ad":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("h3",[e._v("Sensor Data:")]),e.state.sensors.length<=0?n("span",[e._v("No sensors connected.")]):e._l(e.state.sensors,(function(t,i){return n("div",{key:i},[n("b",[e._v(e._s(t.name))]),n("br"),t.pressure?n("vui-item",{attrs:{label:"Pressure:"}},[e._v(e._s(t.pressure)+" kPa")]):e._e(),t.temperature?n("vui-item",{attrs:{label:"Temperature:"}},[e._v(e._s(t.temperature)+" K")]):e._e(),t.oxygen||t.hydrogen||t.phoron||t.nitrogen||t.carbon_dioxide?n("vui-item",{attrs:{label:"Gas Composition:"}},[t.oxygen?n("span",{staticClass:"complist"},[e._v(e._s(t.oxygen)+" O"),n("sub",[e._v("2")])]):e._e(),t.nitrogen?n("span",{staticClass:"complist"},[e._v(e._s(t.nitrogen)+" N")]):e._e(),t.carbon_dioxide?n("span",{staticClass:"complist"},[e._v(e._s(t.carbon_dioxide)+" CO"),n("sub",[e._v("2"),n("sub")])]):e._e(),t.phoron?n("span",{staticClass:"complist"},[e._v(e._s(t.phoron)+" PH")]):e._e(),t.hydrogen?n("span",{staticClass:"complist"},[e._v(e._s(t.hydrogen)+" H"),n("sub",[e._v("2")])]):e._e()]):e._e()],1)})),e.state.control?n("view-console-atmocontrol-"+e.state.control,{tag:"component"}):e._e()],2)},r=[],s={data:function(){return this.$root.$data}},a=s,o=(n("f9a1"),n("2877")),c=Object(o["a"])(a,i,r,!1,null,"0f00c828",null);t["default"]=c.exports},"86eb":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[e.forumuserui_enabled?n("div",{staticClass:"notice"},[n("center",[e._v("Modifications done do not outlast the round! Use the forums/WI to modify ranks.")])],1):e._e(),n("table",[n("tr",[n("th",[e._v("Ckey "),n("vui-button",{attrs:{params:{action:"add"}}},[e._v("Add")])],1),n("th",[e._v("Rank")]),n("th",[e._v("Permissions")])]),e._l(e.admins,(function(t){return n("tr",{key:t.ckey},[n("td",[n("vui-button",{attrs:{params:{action:"remove",ckey:t.ckey}}},[e._v("Edit")]),e._v(" "+e._s(t.ckey)+" ")],1),n("td",[n("vui-button",{attrs:{params:{action:"rank",ckey:t.ckey}}},[e._v("Edit")]),e._v(" "+e._s(t.rank)+" ")],1),n("td",[n("vui-button",{attrs:{params:{action:"rights",ckey:t.ckey}}},[e._v("Edit")]),e._v(" "+e._s(t.rights)+" ")],1)])}))],2)])},r=[],s={data:function(){return this.$root.$data.state}},a=s,o=n("2877"),c=Object(o["a"])(a,i,r,!1,null,null,null);t["default"]=c.exports},8746:function(e,t,n){},8925:function(e,t,n){var i=n("c6cd"),r=Function.toString;"function"!=typeof i.inspectSource&&(i.inspectSource=function(e){return r.call(e)}),e.exports=i.inspectSource},8928:function(e,t,n){"use strict";n("c6c8")},"8a59":function(e,t,n){var i=n("74e8");i("Uint8",(function(e){return function(t,n,i){return e(this,t,n,i)}}),!0)},"8a79":function(e,t,n){"use strict";var i=n("23e7"),r=n("06cf").f,s=n("50c4"),a=n("5a34"),o=n("1d80"),c=n("ab13"),l=n("c430"),u="".endsWith,d=Math.min,h=c("endsWith"),f=!l&&!h&&!!function(){var e=r(String.prototype,"endsWith");return e&&!e.writable}();i({target:"String",proto:!0,forced:!f&&!h},{endsWith:function(e){var t=String(o(this));a(e);var n=arguments.length>1?arguments[1]:void 0,i=s(t.length),r=void 0===n?i:d(s(n),i),c=String(e);return u?u.call(t,c,r):t.slice(r-c.length,r)===c}})},"8aa5":function(e,t,n){"use strict";var i=n("6547").charAt;e.exports=function(e,t,n){return t+(n?i(e,t).length:1)}},"8aa7":function(e,t,n){var i=n("da84"),r=n("d039"),s=n("1c7e"),a=n("ebb5").NATIVE_ARRAY_BUFFER_VIEWS,o=i.ArrayBuffer,c=i.Int8Array;e.exports=!a||!r((function(){c(1)}))||!r((function(){new c(-1)}))||!s((function(e){new c,new c(null),new c(1.5),new c(e)}),!0)||r((function(){return 1!==new c(new o(2),1,void 0).length}))},"8b09":function(e,t,n){var i=n("74e8");i("Int16",(function(e){return function(t,n,i){return e(this,t,n,i)}}))},"8b1f":function(e,t,n){"use strict";n("a5e6")},"8b9a":function(e,t,n){var i=n("23e7"),r=n("825a"),s=n("3bbe"),a=n("d2bb");a&&i({target:"Reflect",stat:!0},{setPrototypeOf:function(e,t){r(e),s(t);try{return a(e,t),!0}catch(n){return!1}}})},"8ba4":function(e,t,n){var i=n("23e7"),r=n("5e89");i({target:"Number",stat:!0},{isInteger:r})},"8c49":function(e,t,n){"use strict";n("f693")},"8eb5":function(e,t){var n=Math.expm1,i=Math.exp;e.exports=!n||n(10)>22025.465794806718||n(10)<22025.465794806718||-2e-17!=n(-2e-17)?function(e){return 0==(e=+e)?e:e>-1e-6&&e<1e-6?e+e*e/2:i(e)-1}:n},"8edd":function(e,t,n){var i=n("746f");i("matchAll")},"90d7":function(e,t,n){var i=n("23e7"),r=Math.log,s=Math.LN2;i({target:"Math",stat:!0},{log2:function(e){return r(e)/s}})},"90e3":function(e,t){var n=0,i=Math.random();e.exports=function(e){return"Symbol("+String(void 0===e?"":e)+")_"+(++n+i).toString(36)}},9112:function(e,t,n){var i=n("83ab"),r=n("9bf2"),s=n("5c6c");e.exports=i?function(e,t,n){return r.f(e,t,s(1,n))}:function(e,t,n){return e[t]=n,e}},9129:function(e,t,n){var i=n("23e7");i({target:"Number",stat:!0},{isNaN:function(e){return e!=e}})},9263:function(e,t,n){"use strict";var i=n("ad6d"),r=n("9f7f"),s=RegExp.prototype.exec,a=String.prototype.replace,o=s,c=function(){var e=/a/,t=/b*/g;return s.call(e,"a"),s.call(t,"a"),0!==e.lastIndex||0!==t.lastIndex}(),l=r.UNSUPPORTED_Y||r.BROKEN_CARET,u=void 0!==/()??/.exec("")[1],d=c||u||l;d&&(o=function(e){var t,n,r,o,d=this,h=l&&d.sticky,f=i.call(d),p=d.source,g=0,m=e;return h&&(f=f.replace("y",""),-1===f.indexOf("g")&&(f+="g"),m=String(e).slice(d.lastIndex),d.lastIndex>0&&(!d.multiline||d.multiline&&"\n"!==e[d.lastIndex-1])&&(p="(?: "+p+")",m=" "+m,g++),n=new RegExp("^(?:"+p+")",f)),u&&(n=new RegExp("^"+p+"$(?!\\s)",f)),c&&(t=d.lastIndex),r=s.call(h?n:d,m),h?r?(r.input=r.input.slice(g),r[0]=r[0].slice(g),r.index=d.lastIndex,d.lastIndex+=r[0].length):d.lastIndex=0:c&&r&&(d.lastIndex=d.global?r.index+r[0].length:t),u&&r&&r.length>1&&a.call(r[0],n,(function(){for(o=1;o0}}}),a=s,o=(n("af89"),n("2877")),c=Object(o["a"])(a,i,r,!1,null,"c4dbe0aa",null);t["default"]=c.exports},"944a":function(e,t,n){var i=n("746f");i("toStringTag")},"94ca":function(e,t,n){var i=n("d039"),r=/#|\.prototype\./,s=function(e,t){var n=o[a(e)];return n==l||n!=c&&("function"==typeof t?i(t):!!t)},a=s.normalize=function(e){return String(e).replace(r,".").toLowerCase()},o=s.data={},c=s.NATIVE="N",l=s.POLYFILL="P";e.exports=s},9513:function(e,t,n){},9556:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("div",{staticClass:"item"},[n("div",{staticClass:"itemLabel"},[e._v("Confirm identity:")]),n("div",{staticClass:"itemContent"},[n("vui-button",{attrs:{params:{scan:1},icon:"eject"}},[e.state.idname?n("span",[e._v(e._s(e.state.idname))]):n("span",[e._v("--------")])])],1)]),e.state.auth?n("div",{staticStyle:{"margin-top":"24px",clear:"both"}},[n("b",[e._v("Logged in to:")]),e._v(" "+e._s(e.state.bossname)+" Quantum Entanglement Network "),e.remaining_cooldown<=0?[n("vui-item",{attrs:{label:"Sending to:"}},[n("select",{directives:[{name:"model",rawName:"v-model.lazy",value:e.state.destination,expression:"state.destination",modifiers:{lazy:!0}}],staticClass:"button",on:{change:function(t){var n=Array.prototype.filter.call(t.target.options,(function(e){return e.selected})).map((function(e){var t="_value"in e?e._value:e.value;return t}));e.$set(e.state,"destination",t.target.multiple?n:n[0])}}},e._l(e.state.departiments,(function(t){return n("option",{key:t,domProps:{value:t}},[e._v(e._s(t))])})),0)]),e.state.paper?[n("vui-item",{attrs:{label:"Currently sending:"}},[e._v(e._s(e.state.paper))]),n("vui-button",{attrs:{"push-state":"",params:{send:1}}},[e._v("Send")])]:n("span",[e._v("Please insert paper to send via secure connection.")])]:n("span",[n("b",[e._v("Transmitter arrays realigning. Please stand by. "+e._s(e._f("roundRemaining")(e.remaining_cooldown))+" seconds remaining.")])])],2):e._e(),e.state.paper?n("vui-button",{attrs:{params:{remove:1}}},[e._v("Remove item")]):e._e(),n("h3",[e._v("PDAs to notify:")]),e._l(e.state.alertpdas,(function(t){return n("div",{key:t.ref},[e._v(" "+e._s(t.name)+" "),n("vui-button",{attrs:{params:{unlink:t.ref}}},[e._v("Unlink")])],1)})),e.state.alertpdas.length<=0?n("div",[e._v("No PDAs are linked.")]):e._e(),n("vui-button",{attrs:{params:{linkpda:1}}},[e._v("Add PDA to Notify")])],2)},r=[],s={data:function(){return this.$root.$data},computed:{remaining_cooldown:function(){return this.state.cooldownend-this.wtime}},filters:{roundRemaining:function(e){return Math.round(e/10)}}},a=s,o=n("2877"),c=Object(o["a"])(a,i,r,!1,null,"4b0e320e",null);t["default"]=c.exports},"95d1":function(e,t,n){"use strict";n("4cc0")},"967a":function(e,t,n){"use strict";var i=n("23e7"),r=n("e163"),s=n("d2bb"),a=n("7c73"),o=n("9112"),c=n("5c6c"),l=n("2266"),u=function(e,t){var n=this;if(!(n instanceof u))return new u(e,t);s&&(n=s(new Error(void 0),r(n))),void 0!==t&&o(n,"message",String(t));var i=[];return l(e,i.push,{that:i}),o(n,"errors",i),n};u.prototype=a(Error.prototype,{constructor:c(5,u),message:c(5,""),name:c(5,"AggregateError")}),i({global:!0},{AggregateError:u})},"96f3":function(e,t,n){"use strict";n("ce5b")},9767:function(e,t,n){"use strict";var i=n("23e7"),r=n("857a"),s=n("af03");i({target:"String",proto:!0,forced:s("fontcolor")},{fontcolor:function(e){return r(this,"font","color",e)}})},9861:function(e,t,n){"use strict";n("e260");var i=n("23e7"),r=n("d066"),s=n("0d3b"),a=n("6eeb"),o=n("e2cc"),c=n("d44e"),l=n("9ed3"),u=n("69f3"),d=n("19aa"),h=n("5135"),f=n("0366"),p=n("f5df"),g=n("825a"),m=n("861d"),v=n("7c73"),b=n("5c6c"),y=n("9a1f"),w=n("35a1"),_=n("b622"),x=r("fetch"),k=r("Headers"),A=_("iterator"),C="URLSearchParams",E=C+"Iterator",S=u.set,F=u.getterFor(C),$=u.getterFor(E),T=/\+/g,L=Array(4),D=function(e){return L[e-1]||(L[e-1]=RegExp("((?:%[\\da-f]{2}){"+e+"})","gi"))},B=function(e){try{return decodeURIComponent(e)}catch(t){return e}},R=function(e){var t=e.replace(T," "),n=4;try{return decodeURIComponent(t)}catch(i){while(n)t=t.replace(D(n--),B);return t}},O=/[!'()~]|%20/g,M={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},j=function(e){return M[e]},I=function(e){return encodeURIComponent(e).replace(O,j)},P=function(e,t){if(t){var n,i,r=t.split("&"),s=0;while(s0?arguments[0]:void 0,u=this,f=[];if(S(u,{type:C,entries:f,updateURL:function(){},updateSearchParams:N}),void 0!==l)if(m(l))if(e=w(l),"function"===typeof e){t=e.call(l),n=t.next;while(!(i=n.call(t)).done){if(r=y(g(i.value)),s=r.next,(a=s.call(r)).done||(o=s.call(r)).done||!s.call(r).done)throw TypeError("Expected sequence with length 2");f.push({key:a.value+"",value:o.value+""})}}else for(c in l)h(l,c)&&f.push({key:c,value:l[c]+""});else P(f,"string"===typeof l?"?"===l.charAt(0)?l.slice(1):l:l+"")},U=V.prototype;o(U,{append:function(e,t){W(arguments.length,2);var n=F(this);n.entries.push({key:e+"",value:t+""}),n.updateURL()},delete:function(e){W(arguments.length,1);var t=F(this),n=t.entries,i=e+"",r=0;while(re.key){r.splice(t,0,e);break}t===n&&r.push(e)}i.updateURL()},forEach:function(e){var t,n=F(this).entries,i=f(e,arguments.length>1?arguments[1]:void 0,3),r=0;while(r1&&(t=arguments[1],m(t)&&(n=t.body,p(n)===C&&(i=t.headers?new k(t.headers):new k,i.has("content-type")||i.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"),t=v(t,{body:b(0,String(n)),headers:b(0,i)}))),r.push(t)),x.apply(this,r)}}),e.exports={URLSearchParams:V,getState:F}},"987b":function(e,t,n){"use strict";n("daa2")},"98c3":function(e,t,n){"use strict";n("db4f")},9911:function(e,t,n){"use strict";var i=n("23e7"),r=n("857a"),s=n("af03");i({target:"String",proto:!0,forced:s("link")},{link:function(e){return r(this,"a","href",e)}})},"99af":function(e,t,n){"use strict";var i=n("23e7"),r=n("d039"),s=n("e8b5"),a=n("861d"),o=n("7b0b"),c=n("50c4"),l=n("8418"),u=n("65f0"),d=n("1dde"),h=n("b622"),f=n("2d00"),p=h("isConcatSpreadable"),g=9007199254740991,m="Maximum allowed index exceeded",v=f>=51||!r((function(){var e=[];return e[p]=!1,e.concat()[0]!==e})),b=d("concat"),y=function(e){if(!a(e))return!1;var t=e[p];return void 0!==t?!!t:s(e)},w=!v||!b;i({target:"Array",proto:!0,forced:w},{concat:function(e){var t,n,i,r,s,a=o(this),d=u(a,0),h=0;for(t=-1,i=arguments.length;tg)throw TypeError(m);for(n=0;n=g)throw TypeError(m);l(d,h++,s)}return d.length=h,d}})},"9a0c":function(e,t,n){var i=n("342f");e.exports=/Version\/10\.\d+(\.\d+)?( Mobile\/\w+)? Safari\//.test(i)},"9a1f":function(e,t,n){var i=n("825a"),r=n("35a1");e.exports=function(e){var t=r(e);if("function"!=typeof t)throw TypeError(String(e)+" is not iterable");return i(t.call(e))}},"9a8c":function(e,t,n){"use strict";var i=n("ebb5"),r=n("145e"),s=i.aTypedArray,a=i.exportTypedArrayMethod;a("copyWithin",(function(e,t){return r.call(s(this),e,t,arguments.length>2?arguments[2]:void 0)}))},"9aa7":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{attrs:{id:"resizehandles"}},[n("div",{staticClass:"resizeHandle__e",on:{mousedown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"left",37,t.key,["Left","ArrowLeft"])||"button"in t&&0!==t.button?null:e.startResizing(1,0,t)}}}),n("div",{staticClass:"resizeHandle__s",on:{mousedown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"left",37,t.key,["Left","ArrowLeft"])||"button"in t&&0!==t.button?null:e.startResizing(0,1,t)}}}),n("div",{staticClass:"resizeHandle__se",on:{mousedown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"left",37,t.key,["Left","ArrowLeft"])||"button"in t&&0!==t.button?null:e.startResizing(1,1,t)}}})])},r=[],s=n("f0e0"),a={methods:{startResizing:function(e,t,n){s["a"].resizeStartHandler(e,t,n)}}},o=a,c=(n("98c3"),n("2877")),l=Object(c["a"])(o,i,r,!1,null,"01c02ad8",null);t["default"]=l.exports},"9acc":function(e,t,n){"use strict";n("1ee6")},"9b7e":function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[e.s.service?e.s.registered?e.s.signal?[n("div",[e.s.can_netadmin_mode||e.s.netadmin_mode?n("vui-button",{class:{on:e.s.netadmin_mode},attrs:{params:{toggleadmin:1}}},[e._v("Admin Mode")]):e._e(),e._v(" Ringtone: "),null==e.ringtone?n("vui-button",{on:{click:function(t){e.ringtone=e.s.ringtone}}},[e._v(e._s(e.s.ringtone))]):[n("input",{directives:[{name:"model",rawName:"v-model",value:e.ringtone,expression:"ringtone"}],attrs:{type:"text"},domProps:{value:e.ringtone},on:{keypress:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.set_ringtone(t)},input:function(t){t.target.composing||(e.ringtone=t.target.value)}}}),n("vui-button",{on:{click:e.set_ringtone}},[e._v("Set ringtone")])]],2),n("div",[n("vui-button",{class:{on:null==e.active},on:{click:function(t){e.active=null}}},[e._v("Explore")]),e._l(e.tab_channels,(function(t){return n("vui-button",{key:t,class:{on:e.active==t},on:{click:function(n){e.active=t}}},[e._v(e._s(e.s.channels[t].title))])}))],2),n("hr"),null==e.active?n("view-mcomputer-chat-explore"):n("view-mcomputer-chat-chat",{attrs:{reference:e.active},on:{"on-leave":function(t){e.active=null}}})]:n("h2",{staticClass:"red"},[e._v("No network signal.")]):n("h2",{staticClass:"red"},[e._v("No registered user detected.")]):n("h2",{staticClass:"red"},[e._v("Chat service is not enabled, please enable it from main menu.")])],2)},r=[],s=(n("4de4"),n("b64b"),n("025e")),a={data:function(){return{s:this.$root.$data.state,active:null,ringtone:null}},computed:{tab_channels:function(){var e=this;return Object.keys(this.s.channels).filter((function(t){return e.s.channels[t].can_interact}))}},methods:{set_ringtone:function(){Object(s["b"])({ringtone:this.ringtone}),this.ringtone=null}}},o=a,c=n("2877"),l=Object(c["a"])(o,i,r,!1,null,null,null);t["default"]=l.exports},"9bdd":function(e,t,n){var i=n("825a"),r=n("2a62");e.exports=function(e,t,n,s){try{return s?t(i(n)[0],n[1]):t(n)}catch(a){throw r(e),a}}},"9bf2":function(e,t,n){var i=n("83ab"),r=n("0cfb"),s=n("825a"),a=n("c04e"),o=Object.defineProperty;t.f=i?o:function(e,t,n){if(s(e),t=a(t,!0),s(n),r)try{return o(e,t,n)}catch(i){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},"9e4a":function(e,t,n){var i=n("23e7"),r=n("83ab"),s=n("825a"),a=n("06cf");i({target:"Reflect",stat:!0,sham:!r},{getOwnPropertyDescriptor:function(e,t){return a.f(s(e),t)}})},"9e69":function(e,t,n){var i=n("2b3e"),r=i.Symbol;e.exports=r},"9e80":function(e,t,n){},"9ed3":function(e,t,n){"use strict";var i=n("ae93").IteratorPrototype,r=n("7c73"),s=n("5c6c"),a=n("d44e"),o=n("3f8c"),c=function(){return this};e.exports=function(e,t,n){var l=t+" Iterator";return e.prototype=r(i,{next:s(1,n)}),a(e,l,!1,!0),o[l]=c,e}},"9f7f":function(e,t,n){"use strict";var i=n("d039");function r(e,t){return RegExp(e,t)}t.UNSUPPORTED_Y=i((function(){var e=r("a","y");return e.lastIndex=2,null!=e.exec("abcd")})),t.BROKEN_CARET=i((function(){var e=r("^r","gy");return e.lastIndex=2,null!=e.exec("str")}))},"9f96":function(e,t,n){var i=n("23e7"),r=n("da84"),s=n("b575"),a=n("605d"),o=r.process;i({global:!0,enumerable:!0,noTargetGet:!0},{queueMicrotask:function(e){var t=a&&o.domain;s(t?t.bind(e):e)}})},"9ff9":function(e,t,n){var i=n("23e7"),r=Math.atanh,s=Math.log;i({target:"Math",stat:!0,forced:!(r&&1/r(-0)<0)},{atanh:function(e){return 0==(e=+e)?e:s((1+e)/(1-e))/2}})},a026:function(e,t,n){"use strict";(function(e){ /*! * Vue.js v2.6.12 * (c) 2014-2020 Evan You * Released under the MIT License. */ -var n=Object.freeze({});function i(e){return void 0===e||null===e}function r(e){return void 0!==e&&null!==e}function s(e){return!0===e}function o(e){return!1===e}function a(e){return"string"===typeof e||"number"===typeof e||"symbol"===typeof e||"boolean"===typeof e}function c(e){return null!==e&&"object"===typeof e}var l=Object.prototype.toString;function u(e){return"[object Object]"===l.call(e)}function d(e){return"[object RegExp]"===l.call(e)}function h(e){var t=parseFloat(String(e));return t>=0&&Math.floor(t)===t&&isFinite(e)}function f(e){return r(e)&&"function"===typeof e.then&&"function"===typeof e.catch}function p(e){return null==e?"":Array.isArray(e)||u(e)&&e.toString===l?JSON.stringify(e,null,2):String(e)}function g(e){var t=parseFloat(e);return isNaN(t)?e:t}function m(e,t){for(var n=Object.create(null),i=e.split(","),r=0;r-1)return e.splice(n,1)}}var w=Object.prototype.hasOwnProperty;function _(e,t){return w.call(e,t)}function x(e){var t=Object.create(null);return function(n){var i=t[n];return i||(t[n]=e(n))}}var k=/-(\w)/g,A=x((function(e){return e.replace(k,(function(e,t){return t?t.toUpperCase():""}))})),C=x((function(e){return e.charAt(0).toUpperCase()+e.slice(1)})),E=/\B([A-Z])/g,S=x((function(e){return e.replace(E,"-$1").toLowerCase()}));function F(e,t){function n(n){var i=arguments.length;return i?i>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n}function $(e,t){return e.bind(t)}var T=Function.prototype.bind?$:F;function L(e,t){t=t||0;var n=e.length-t,i=new Array(n);while(n--)i[n]=e[n+t];return i}function D(e,t){for(var n in t)e[n]=t[n];return e}function B(e){for(var t={},n=0;n0,re=te&&te.indexOf("edge/")>0,se=(te&&te.indexOf("android"),te&&/iphone|ipad|ipod|ios/.test(te)||"ios"===ee),oe=(te&&/chrome\/\d+/.test(te),te&&/phantomjs/.test(te),te&&te.match(/firefox\/(\d+)/)),ae={}.watch,ce=!1;if(Q)try{var le={};Object.defineProperty(le,"passive",{get:function(){ce=!0}}),window.addEventListener("test-passive",null,le)}catch(Jl){}var ue=function(){return void 0===X&&(X=!Q&&!Z&&"undefined"!==typeof e&&(e["process"]&&"server"===e["process"].env.VUE_ENV)),X},de=Q&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function he(e){return"function"===typeof e&&/native code/.test(e.toString())}var fe,pe="undefined"!==typeof Symbol&&he(Symbol)&&"undefined"!==typeof Reflect&&he(Reflect.ownKeys);fe="undefined"!==typeof Set&&he(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var ge=R,me=0,ve=function(){this.id=me++,this.subs=[]};ve.prototype.addSub=function(e){this.subs.push(e)},ve.prototype.removeSub=function(e){y(this.subs,e)},ve.prototype.depend=function(){ve.target&&ve.target.addDep(this)},ve.prototype.notify=function(){var e=this.subs.slice();for(var t=0,n=e.length;t-1)if(s&&!_(r,"default"))o=!1;else if(""===o||o===S(e)){var c=nt(String,r.type);(c<0||a0&&(o=$t(o,(t||"")+"_"+n),Ft(o[0])&&Ft(l)&&(u[c]=Ae(l.text+o[0].text),o.shift()),u.push.apply(u,o)):a(o)?Ft(l)?u[c]=Ae(l.text+o):""!==o&&u.push(Ae(o)):Ft(o)&&Ft(l)?u[c]=Ae(l.text+o.text):(s(e._isVList)&&r(o.tag)&&i(o.key)&&r(t)&&(o.key="__vlist"+t+"_"+n+"__"),u.push(o)));return u}function Tt(e){var t=e.$options.provide;t&&(e._provided="function"===typeof t?t.call(e):t)}function Lt(e){var t=Dt(e.$options.inject,e);t&&(Le(!1),Object.keys(t).forEach((function(n){Me(e,n,t[n])})),Le(!0))}function Dt(e,t){if(e){for(var n=Object.create(null),i=pe?Reflect.ownKeys(e):Object.keys(e),r=0;r0,o=e?!!e.$stable:!s,a=e&&e.$key;if(e){if(e._normalized)return e._normalized;if(o&&i&&i!==n&&a===i.$key&&!s&&!i.$hasNormal)return i;for(var c in r={},e)e[c]&&"$"!==c[0]&&(r[c]=Mt(t,c,e[c]))}else r={};for(var l in t)l in r||(r[l]=jt(t,l));return e&&Object.isExtensible(e)&&(e._normalized=r),q(r,"$stable",o),q(r,"$key",a),q(r,"$hasNormal",s),r}function Mt(e,t,n){var i=function(){var e=arguments.length?n.apply(null,arguments):n({});return e=e&&"object"===typeof e&&!Array.isArray(e)?[e]:St(e),e&&(0===e.length||1===e.length&&e[0].isComment)?void 0:e};return n.proxy&&Object.defineProperty(e,t,{get:i,enumerable:!0,configurable:!0}),i}function jt(e,t){return function(){return e[t]}}function It(e,t){var n,i,s,o,a;if(Array.isArray(e)||"string"===typeof e)for(n=new Array(e.length),i=0,s=e.length;i1?L(n):n;for(var i=L(arguments,1),r='event handler for "'+e+'"',s=0,o=n.length;sdocument.createEvent("Event").timeStamp&&(Xn=function(){return Jn.now()})}function Qn(){var e,t;for(Yn=Xn(),Gn=!0,Hn.sort((function(e,t){return e.id-t.id})),qn=0;qnqn&&Hn[n].id>e.id)n--;Hn.splice(n+1,0,e)}else Hn.push(e);zn||(zn=!0,mt(Qn))}}var ii=0,ri=function(e,t,n,i,r){this.vm=e,r&&(e._watcher=this),e._watchers.push(this),i?(this.deep=!!i.deep,this.user=!!i.user,this.lazy=!!i.lazy,this.sync=!!i.sync,this.before=i.before):this.deep=this.user=this.lazy=this.sync=!1,this.cb=n,this.id=++ii,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new fe,this.newDepIds=new fe,this.expression="","function"===typeof t?this.getter=t:(this.getter=Y(t),this.getter||(this.getter=R)),this.value=this.lazy?void 0:this.get()};ri.prototype.get=function(){var e;ye(this);var t=this.vm;try{e=this.getter.call(t,t)}catch(Jl){if(!this.user)throw Jl;it(Jl,t,'getter for watcher "'+this.expression+'"')}finally{this.deep&&bt(e),we(),this.cleanupDeps()}return e},ri.prototype.addDep=function(e){var t=e.id;this.newDepIds.has(t)||(this.newDepIds.add(t),this.newDeps.push(e),this.depIds.has(t)||e.addSub(this))},ri.prototype.cleanupDeps=function(){var e=this.deps.length;while(e--){var t=this.deps[e];this.newDepIds.has(t.id)||t.removeSub(this)}var n=this.depIds;this.depIds=this.newDepIds,this.newDepIds=n,this.newDepIds.clear(),n=this.deps,this.deps=this.newDeps,this.newDeps=n,this.newDeps.length=0},ri.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():ni(this)},ri.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||c(e)||this.deep){var t=this.value;if(this.value=e,this.user)try{this.cb.call(this.vm,e,t)}catch(Jl){it(Jl,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,e,t)}}},ri.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},ri.prototype.depend=function(){var e=this.deps.length;while(e--)this.deps[e].depend()},ri.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||y(this.vm._watchers,this);var e=this.deps.length;while(e--)this.deps[e].removeSub(this);this.active=!1}};var si={enumerable:!0,configurable:!0,get:R,set:R};function oi(e,t,n){si.get=function(){return this[t][n]},si.set=function(e){this[t][n]=e},Object.defineProperty(e,n,si)}function ai(e){e._watchers=[];var t=e.$options;t.props&&ci(e,t.props),t.methods&&mi(e,t.methods),t.data?li(e):Oe(e._data={},!0),t.computed&&hi(e,t.computed),t.watch&&t.watch!==ae&&vi(e,t.watch)}function ci(e,t){var n=e.$options.propsData||{},i=e._props={},r=e.$options._propKeys=[],s=!e.$parent;s||Le(!1);var o=function(s){r.push(s);var o=Qe(s,t,n,e);Me(i,s,o),s in e||oi(e,"_props",s)};for(var a in t)o(a);Le(!0)}function li(e){var t=e.$options.data;t=e._data="function"===typeof t?ui(t,e):t||{},u(t)||(t={});var n=Object.keys(t),i=e.$options.props,r=(e.$options.methods,n.length);while(r--){var s=n[r];0,i&&_(i,s)||G(s)||oi(e,"_data",s)}Oe(t,!0)}function ui(e,t){ye();try{return e.call(t,t)}catch(Jl){return it(Jl,t,"data()"),{}}finally{we()}}var di={lazy:!0};function hi(e,t){var n=e._computedWatchers=Object.create(null),i=ue();for(var r in t){var s=t[r],o="function"===typeof s?s:s.get;0,i||(n[r]=new ri(e,o||R,R,di)),r in e||fi(e,r,s)}}function fi(e,t,n){var i=!ue();"function"===typeof n?(si.get=i?pi(t):gi(n),si.set=R):(si.get=n.get?i&&!1!==n.cache?pi(t):gi(n.get):R,si.set=n.set||R),Object.defineProperty(e,t,si)}function pi(e){return function(){var t=this._computedWatchers&&this._computedWatchers[e];if(t)return t.dirty&&t.evaluate(),ve.target&&t.depend(),t.value}}function gi(e){return function(){return e.call(this,this)}}function mi(e,t){e.$options.props;for(var n in t)e[n]="function"!==typeof t[n]?R:T(t[n],e)}function vi(e,t){for(var n in t){var i=t[n];if(Array.isArray(i))for(var r=0;r-1)return this;var n=L(arguments,1);return n.unshift(this),"function"===typeof e.install?e.install.apply(e,n):"function"===typeof e&&e.apply(null,n),t.push(e),this}}function Si(e){e.mixin=function(e){return this.options=Xe(this.options,e),this}}function Fi(e){e.cid=0;var t=1;e.extend=function(e){e=e||{};var n=this,i=n.cid,r=e._Ctor||(e._Ctor={});if(r[i])return r[i];var s=e.name||n.options.name;var o=function(e){this._init(e)};return o.prototype=Object.create(n.prototype),o.prototype.constructor=o,o.cid=t++,o.options=Xe(n.options,e),o["super"]=n,o.options.props&&$i(o),o.options.computed&&Ti(o),o.extend=n.extend,o.mixin=n.mixin,o.use=n.use,H.forEach((function(e){o[e]=n[e]})),s&&(o.options.components[s]=o),o.superOptions=n.options,o.extendOptions=e,o.sealedOptions=D({},o.options),r[i]=o,o}}function $i(e){var t=e.options.props;for(var n in t)oi(e.prototype,"_props",n)}function Ti(e){var t=e.options.computed;for(var n in t)fi(e.prototype,n,t[n])}function Li(e){H.forEach((function(t){e[t]=function(e,n){return n?("component"===t&&u(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),"directive"===t&&"function"===typeof n&&(n={bind:n,update:n}),this.options[t+"s"][e]=n,n):this.options[t+"s"][e]}}))}function Di(e){return e&&(e.Ctor.options.name||e.tag)}function Bi(e,t){return Array.isArray(e)?e.indexOf(t)>-1:"string"===typeof e?e.split(",").indexOf(t)>-1:!!d(e)&&e.test(t)}function Ri(e,t){var n=e.cache,i=e.keys,r=e._vnode;for(var s in n){var o=n[s];if(o){var a=Di(o.componentOptions);a&&!t(a)&&Oi(n,s,i,r)}}}function Oi(e,t,n,i){var r=e[t];!r||i&&r.tag===i.tag||r.componentInstance.$destroy(),e[t]=null,y(n,t)}_i(Ci),yi(Ci),Ln(Ci),On(Ci),wn(Ci);var Mi=[String,RegExp,Array],ji={name:"keep-alive",abstract:!0,props:{include:Mi,exclude:Mi,max:[String,Number]},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var e in this.cache)Oi(this.cache,e,this.keys)},mounted:function(){var e=this;this.$watch("include",(function(t){Ri(e,(function(e){return Bi(t,e)}))})),this.$watch("exclude",(function(t){Ri(e,(function(e){return!Bi(t,e)}))}))},render:function(){var e=this.$slots.default,t=Cn(e),n=t&&t.componentOptions;if(n){var i=Di(n),r=this,s=r.include,o=r.exclude;if(s&&(!i||!Bi(s,i))||o&&i&&Bi(o,i))return t;var a=this,c=a.cache,l=a.keys,u=null==t.key?n.Ctor.cid+(n.tag?"::"+n.tag:""):t.key;c[u]?(t.componentInstance=c[u].componentInstance,y(l,u),l.push(u)):(c[u]=t,l.push(u),this.max&&l.length>parseInt(this.max)&&Oi(c,l[0],l,this._vnode)),t.data.keepAlive=!0}return t||e&&e[0]}},Ii={KeepAlive:ji};function Pi(e){var t={get:function(){return U}};Object.defineProperty(e,"config",t),e.util={warn:ge,extend:D,mergeOptions:Xe,defineReactive:Me},e.set=je,e.delete=Ie,e.nextTick=mt,e.observable=function(e){return Oe(e),e},e.options=Object.create(null),H.forEach((function(t){e.options[t+"s"]=Object.create(null)})),e.options._base=e,D(e.options.components,Ii),Ei(e),Si(e),Fi(e),Li(e)}Pi(Ci),Object.defineProperty(Ci.prototype,"$isServer",{get:ue}),Object.defineProperty(Ci.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Ci,"FunctionalRenderContext",{value:Zt}),Ci.version="2.6.12";var Ni=m("style,class"),Wi=m("input,textarea,option,select,progress"),Hi=function(e,t,n){return"value"===n&&Wi(e)&&"button"!==t||"selected"===n&&"option"===e||"checked"===n&&"input"===e||"muted"===n&&"video"===e},Vi=m("contenteditable,draggable,spellcheck"),Ui=m("events,caret,typing,plaintext-only"),zi=function(e,t){return Xi(t)||"false"===t?"false":"contenteditable"===e&&Ui(t)?t:"true"},Gi=m("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible"),qi="http://www.w3.org/1999/xlink",Ki=function(e){return":"===e.charAt(5)&&"xlink"===e.slice(0,5)},Yi=function(e){return Ki(e)?e.slice(6,e.length):""},Xi=function(e){return null==e||!1===e};function Ji(e){var t=e.data,n=e,i=e;while(r(i.componentInstance))i=i.componentInstance._vnode,i&&i.data&&(t=Qi(i.data,t));while(r(n=n.parent))n&&n.data&&(t=Qi(t,n.data));return Zi(t.staticClass,t.class)}function Qi(e,t){return{staticClass:er(e.staticClass,t.staticClass),class:r(e.class)?[e.class,t.class]:t.class}}function Zi(e,t){return r(e)||r(t)?er(e,tr(t)):""}function er(e,t){return e?t?e+" "+t:e:t||""}function tr(e){return Array.isArray(e)?nr(e):c(e)?ir(e):"string"===typeof e?e:""}function nr(e){for(var t,n="",i=0,s=e.length;i-1?ur[e]=t.constructor===window.HTMLUnknownElement||t.constructor===window.HTMLElement:ur[e]=/HTMLUnknownElement/.test(t.toString())}var hr=m("text,number,password,search,email,tel,url");function fr(e){if("string"===typeof e){var t=document.querySelector(e);return t||document.createElement("div")}return e}function pr(e,t){var n=document.createElement(e);return"select"!==e||t.data&&t.data.attrs&&void 0!==t.data.attrs.multiple&&n.setAttribute("multiple","multiple"),n}function gr(e,t){return document.createElementNS(rr[e],t)}function mr(e){return document.createTextNode(e)}function vr(e){return document.createComment(e)}function br(e,t,n){e.insertBefore(t,n)}function yr(e,t){e.removeChild(t)}function wr(e,t){e.appendChild(t)}function _r(e){return e.parentNode}function xr(e){return e.nextSibling}function kr(e){return e.tagName}function Ar(e,t){e.textContent=t}function Cr(e,t){e.setAttribute(t,"")}var Er=Object.freeze({createElement:pr,createElementNS:gr,createTextNode:mr,createComment:vr,insertBefore:br,removeChild:yr,appendChild:wr,parentNode:_r,nextSibling:xr,tagName:kr,setTextContent:Ar,setStyleScope:Cr}),Sr={create:function(e,t){Fr(t)},update:function(e,t){e.data.ref!==t.data.ref&&(Fr(e,!0),Fr(t))},destroy:function(e){Fr(e,!0)}};function Fr(e,t){var n=e.data.ref;if(r(n)){var i=e.context,s=e.componentInstance||e.elm,o=i.$refs;t?Array.isArray(o[n])?y(o[n],s):o[n]===s&&(o[n]=void 0):e.data.refInFor?Array.isArray(o[n])?o[n].indexOf(s)<0&&o[n].push(s):o[n]=[s]:o[n]=s}}var $r=new _e("",{},[]),Tr=["create","activate","update","remove","destroy"];function Lr(e,t){return e.key===t.key&&(e.tag===t.tag&&e.isComment===t.isComment&&r(e.data)===r(t.data)&&Dr(e,t)||s(e.isAsyncPlaceholder)&&e.asyncFactory===t.asyncFactory&&i(t.asyncFactory.error))}function Dr(e,t){if("input"!==e.tag)return!0;var n,i=r(n=e.data)&&r(n=n.attrs)&&n.type,s=r(n=t.data)&&r(n=n.attrs)&&n.type;return i===s||hr(i)&&hr(s)}function Br(e,t,n){var i,s,o={};for(i=t;i<=n;++i)s=e[i].key,r(s)&&(o[s]=i);return o}function Rr(e){var t,n,o={},c=e.modules,l=e.nodeOps;for(t=0;tg?(d=i(n[b+1])?null:n[b+1].elm,k(e,d,n,p,b,s)):p>b&&C(t,h,g)}function F(e,t,n,i){for(var s=n;s-1?zr(e,t,n):Gi(t)?Xi(n)?e.removeAttribute(t):(n="allowfullscreen"===t&&"EMBED"===e.tagName?"true":t,e.setAttribute(t,n)):Vi(t)?e.setAttribute(t,zi(t,n)):Ki(t)?Xi(n)?e.removeAttributeNS(qi,Yi(t)):e.setAttributeNS(qi,t,n):zr(e,t,n)}function zr(e,t,n){if(Xi(n))e.removeAttribute(t);else{if(ne&&!ie&&"TEXTAREA"===e.tagName&&"placeholder"===t&&""!==n&&!e.__ieph){var i=function(t){t.stopImmediatePropagation(),e.removeEventListener("input",i)};e.addEventListener("input",i),e.__ieph=!0}e.setAttribute(t,n)}}var Gr={create:Vr,update:Vr};function qr(e,t){var n=t.elm,s=t.data,o=e.data;if(!(i(s.staticClass)&&i(s.class)&&(i(o)||i(o.staticClass)&&i(o.class)))){var a=Ji(t),c=n._transitionClasses;r(c)&&(a=er(a,tr(c))),a!==n._prevClass&&(n.setAttribute("class",a),n._prevClass=a)}}var Kr,Yr,Xr,Jr,Qr,Zr,es={create:qr,update:qr},ts=/[\w).+\-_$\]]/;function ns(e){var t,n,i,r,s,o=!1,a=!1,c=!1,l=!1,u=0,d=0,h=0,f=0;for(i=0;i=0;p--)if(g=e.charAt(p)," "!==g)break;g&&ts.test(g)||(l=!0)}}else void 0===r?(f=i+1,r=e.slice(0,i).trim()):m();function m(){(s||(s=[])).push(e.slice(f,i).trim()),f=i+1}if(void 0===r?r=e.slice(0,i).trim():0!==f&&m(),s)for(i=0;i-1?{exp:e.slice(0,Jr),key:'"'+e.slice(Jr+1)+'"'}:{exp:e,key:null};Yr=e,Jr=Qr=Zr=0;while(!_s())Xr=ws(),xs(Xr)?As(Xr):91===Xr&&ks(Xr);return{exp:e.slice(0,Qr),key:e.slice(Qr+1,Zr)}}function ws(){return Yr.charCodeAt(++Jr)}function _s(){return Jr>=Kr}function xs(e){return 34===e||39===e}function ks(e){var t=1;Qr=Jr;while(!_s())if(e=ws(),xs(e))As(e);else if(91===e&&t++,93===e&&t--,0===t){Zr=Jr;break}}function As(e){var t=e;while(!_s())if(e=ws(),e===t)break}var Cs,Es="__r",Ss="__c";function Fs(e,t,n){n;var i=t.value,r=t.modifiers,s=e.tag,o=e.attrsMap.type;if(e.component)return vs(e,i,r),!1;if("select"===s)Ls(e,i,r);else if("input"===s&&"checkbox"===o)$s(e,i,r);else if("input"===s&&"radio"===o)Ts(e,i,r);else if("input"===s||"textarea"===s)Ds(e,i,r);else{if(!U.isReservedTag(s))return vs(e,i,r),!1}return!0}function $s(e,t,n){var i=n&&n.number,r=fs(e,"value")||"null",s=fs(e,"true-value")||"true",o=fs(e,"false-value")||"false";os(e,"checked","Array.isArray("+t+")?_i("+t+","+r+")>-1"+("true"===s?":("+t+")":":_q("+t+","+s+")")),ds(e,"change","var $$a="+t+",$$el=$event.target,$$c=$$el.checked?("+s+"):("+o+");if(Array.isArray($$a)){var $$v="+(i?"_n("+r+")":r)+",$$i=_i($$a,$$v);if($$el.checked){$$i<0&&("+bs(t,"$$a.concat([$$v])")+")}else{$$i>-1&&("+bs(t,"$$a.slice(0,$$i).concat($$a.slice($$i+1))")+")}}else{"+bs(t,"$$c")+"}",null,!0)}function Ts(e,t,n){var i=n&&n.number,r=fs(e,"value")||"null";r=i?"_n("+r+")":r,os(e,"checked","_q("+t+","+r+")"),ds(e,"change",bs(t,r),null,!0)}function Ls(e,t,n){var i=n&&n.number,r='Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = "_value" in o ? o._value : o.value;return '+(i?"_n(val)":"val")+"})",s="$event.target.multiple ? $$selectedVal : $$selectedVal[0]",o="var $$selectedVal = "+r+";";o=o+" "+bs(t,s),ds(e,"change",o,null,!0)}function Ds(e,t,n){var i=e.attrsMap.type,r=n||{},s=r.lazy,o=r.number,a=r.trim,c=!s&&"range"!==i,l=s?"change":"range"===i?Es:"input",u="$event.target.value";a&&(u="$event.target.value.trim()"),o&&(u="_n("+u+")");var d=bs(t,u);c&&(d="if($event.target.composing)return;"+d),os(e,"value","("+t+")"),ds(e,l,d,null,!0),(a||o)&&ds(e,"blur","$forceUpdate()")}function Bs(e){if(r(e[Es])){var t=ne?"change":"input";e[t]=[].concat(e[Es],e[t]||[]),delete e[Es]}r(e[Ss])&&(e.change=[].concat(e[Ss],e.change||[]),delete e[Ss])}function Rs(e,t,n){var i=Cs;return function r(){var s=t.apply(null,arguments);null!==s&&js(e,r,n,i)}}var Os=ct&&!(oe&&Number(oe[1])<=53);function Ms(e,t,n,i){if(Os){var r=Yn,s=t;t=s._wrapper=function(e){if(e.target===e.currentTarget||e.timeStamp>=r||e.timeStamp<=0||e.target.ownerDocument!==document)return s.apply(this,arguments)}}Cs.addEventListener(e,t,ce?{capture:n,passive:i}:n)}function js(e,t,n,i){(i||Cs).removeEventListener(e,t._wrapper||t,n)}function Is(e,t){if(!i(e.data.on)||!i(t.data.on)){var n=t.data.on||{},r=e.data.on||{};Cs=t.elm,Bs(n),xt(n,r,Ms,js,Rs,t.context),Cs=void 0}}var Ps,Ns={create:Is,update:Is};function Ws(e,t){if(!i(e.data.domProps)||!i(t.data.domProps)){var n,s,o=t.elm,a=e.data.domProps||{},c=t.data.domProps||{};for(n in r(c.__ob__)&&(c=t.data.domProps=D({},c)),a)n in c||(o[n]="");for(n in c){if(s=c[n],"textContent"===n||"innerHTML"===n){if(t.children&&(t.children.length=0),s===a[n])continue;1===o.childNodes.length&&o.removeChild(o.childNodes[0])}if("value"===n&&"PROGRESS"!==o.tagName){o._value=s;var l=i(s)?"":String(s);Hs(o,l)&&(o.value=l)}else if("innerHTML"===n&&or(o.tagName)&&i(o.innerHTML)){Ps=Ps||document.createElement("div"),Ps.innerHTML=""+s+"";var u=Ps.firstChild;while(o.firstChild)o.removeChild(o.firstChild);while(u.firstChild)o.appendChild(u.firstChild)}else if(s!==a[n])try{o[n]=s}catch(Jl){}}}}function Hs(e,t){return!e.composing&&("OPTION"===e.tagName||Vs(e,t)||Us(e,t))}function Vs(e,t){var n=!0;try{n=document.activeElement!==e}catch(Jl){}return n&&e.value!==t}function Us(e,t){var n=e.value,i=e._vModifiers;if(r(i)){if(i.number)return g(n)!==g(t);if(i.trim)return n.trim()!==t.trim()}return n!==t}var zs={create:Ws,update:Ws},Gs=x((function(e){var t={},n=/;(?![^(]*\))/g,i=/:(.+)/;return e.split(n).forEach((function(e){if(e){var n=e.split(i);n.length>1&&(t[n[0].trim()]=n[1].trim())}})),t}));function qs(e){var t=Ks(e.style);return e.staticStyle?D(e.staticStyle,t):t}function Ks(e){return Array.isArray(e)?B(e):"string"===typeof e?Gs(e):e}function Ys(e,t){var n,i={};if(t){var r=e;while(r.componentInstance)r=r.componentInstance._vnode,r&&r.data&&(n=qs(r.data))&&D(i,n)}(n=qs(e.data))&&D(i,n);var s=e;while(s=s.parent)s.data&&(n=qs(s.data))&&D(i,n);return i}var Xs,Js=/^--/,Qs=/\s*!important$/,Zs=function(e,t,n){if(Js.test(t))e.style.setProperty(t,n);else if(Qs.test(n))e.style.setProperty(S(t),n.replace(Qs,""),"important");else{var i=to(t);if(Array.isArray(n))for(var r=0,s=n.length;r-1?t.split(ro).forEach((function(t){return e.classList.add(t)})):e.classList.add(t);else{var n=" "+(e.getAttribute("class")||"")+" ";n.indexOf(" "+t+" ")<0&&e.setAttribute("class",(n+t).trim())}}function oo(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.split(ro).forEach((function(t){return e.classList.remove(t)})):e.classList.remove(t),e.classList.length||e.removeAttribute("class");else{var n=" "+(e.getAttribute("class")||"")+" ",i=" "+t+" ";while(n.indexOf(i)>=0)n=n.replace(i," ");n=n.trim(),n?e.setAttribute("class",n):e.removeAttribute("class")}}function ao(e){if(e){if("object"===typeof e){var t={};return!1!==e.css&&D(t,co(e.name||"v")),D(t,e),t}return"string"===typeof e?co(e):void 0}}var co=x((function(e){return{enterClass:e+"-enter",enterToClass:e+"-enter-to",enterActiveClass:e+"-enter-active",leaveClass:e+"-leave",leaveToClass:e+"-leave-to",leaveActiveClass:e+"-leave-active"}})),lo=Q&&!ie,uo="transition",ho="animation",fo="transition",po="transitionend",go="animation",mo="animationend";lo&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(fo="WebkitTransition",po="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(go="WebkitAnimation",mo="webkitAnimationEnd"));var vo=Q?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(e){return e()};function bo(e){vo((function(){vo(e)}))}function yo(e,t){var n=e._transitionClasses||(e._transitionClasses=[]);n.indexOf(t)<0&&(n.push(t),so(e,t))}function wo(e,t){e._transitionClasses&&y(e._transitionClasses,t),oo(e,t)}function _o(e,t,n){var i=ko(e,t),r=i.type,s=i.timeout,o=i.propCount;if(!r)return n();var a=r===uo?po:mo,c=0,l=function(){e.removeEventListener(a,u),n()},u=function(t){t.target===e&&++c>=o&&l()};setTimeout((function(){c0&&(n=uo,u=o,d=s.length):t===ho?l>0&&(n=ho,u=l,d=c.length):(u=Math.max(o,l),n=u>0?o>l?uo:ho:null,d=n?n===uo?s.length:c.length:0);var h=n===uo&&xo.test(i[fo+"Property"]);return{type:n,timeout:u,propCount:d,hasTransform:h}}function Ao(e,t){while(e.length1}function To(e,t){!0!==t.data.show&&Eo(t)}var Lo=Q?{create:To,activate:To,remove:function(e,t){!0!==e.data.show?So(e,t):t()}}:{},Do=[Gr,es,Ns,zs,io,Lo],Bo=Do.concat(Hr),Ro=Rr({nodeOps:Er,modules:Bo});ie&&document.addEventListener("selectionchange",(function(){var e=document.activeElement;e&&e.vmodel&&Ho(e,"input")}));var Oo={inserted:function(e,t,n,i){"select"===n.tag?(i.elm&&!i.elm._vOptions?kt(n,"postpatch",(function(){Oo.componentUpdated(e,t,n)})):Mo(e,t,n.context),e._vOptions=[].map.call(e.options,Po)):("textarea"===n.tag||hr(e.type))&&(e._vModifiers=t.modifiers,t.modifiers.lazy||(e.addEventListener("compositionstart",No),e.addEventListener("compositionend",Wo),e.addEventListener("change",Wo),ie&&(e.vmodel=!0)))},componentUpdated:function(e,t,n){if("select"===n.tag){Mo(e,t,n.context);var i=e._vOptions,r=e._vOptions=[].map.call(e.options,Po);if(r.some((function(e,t){return!I(e,i[t])}))){var s=e.multiple?t.value.some((function(e){return Io(e,r)})):t.value!==t.oldValue&&Io(t.value,r);s&&Ho(e,"change")}}}};function Mo(e,t,n){jo(e,t,n),(ne||re)&&setTimeout((function(){jo(e,t,n)}),0)}function jo(e,t,n){var i=t.value,r=e.multiple;if(!r||Array.isArray(i)){for(var s,o,a=0,c=e.options.length;a-1,o.selected!==s&&(o.selected=s);else if(I(Po(o),i))return void(e.selectedIndex!==a&&(e.selectedIndex=a));r||(e.selectedIndex=-1)}}function Io(e,t){return t.every((function(t){return!I(t,e)}))}function Po(e){return"_value"in e?e._value:e.value}function No(e){e.target.composing=!0}function Wo(e){e.target.composing&&(e.target.composing=!1,Ho(e.target,"input"))}function Ho(e,t){var n=document.createEvent("HTMLEvents");n.initEvent(t,!0,!0),e.dispatchEvent(n)}function Vo(e){return!e.componentInstance||e.data&&e.data.transition?e:Vo(e.componentInstance._vnode)}var Uo={bind:function(e,t,n){var i=t.value;n=Vo(n);var r=n.data&&n.data.transition,s=e.__vOriginalDisplay="none"===e.style.display?"":e.style.display;i&&r?(n.data.show=!0,Eo(n,(function(){e.style.display=s}))):e.style.display=i?s:"none"},update:function(e,t,n){var i=t.value,r=t.oldValue;if(!i!==!r){n=Vo(n);var s=n.data&&n.data.transition;s?(n.data.show=!0,i?Eo(n,(function(){e.style.display=e.__vOriginalDisplay})):So(n,(function(){e.style.display="none"}))):e.style.display=i?e.__vOriginalDisplay:"none"}},unbind:function(e,t,n,i,r){r||(e.style.display=e.__vOriginalDisplay)}},zo={model:Oo,show:Uo},Go={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function qo(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abstract?qo(Cn(t.children)):e}function Ko(e){var t={},n=e.$options;for(var i in n.propsData)t[i]=e[i];var r=n._parentListeners;for(var s in r)t[A(s)]=r[s];return t}function Yo(e,t){if(/\d-keep-alive$/.test(t.tag))return e("keep-alive",{props:t.componentOptions.propsData})}function Xo(e){while(e=e.parent)if(e.data.transition)return!0}function Jo(e,t){return t.key===e.key&&t.tag===e.tag}var Qo=function(e){return e.tag||An(e)},Zo=function(e){return"show"===e.name},ea={name:"transition",props:Go,abstract:!0,render:function(e){var t=this,n=this.$slots.default;if(n&&(n=n.filter(Qo),n.length)){0;var i=this.mode;0;var r=n[0];if(Xo(this.$vnode))return r;var s=qo(r);if(!s)return r;if(this._leaving)return Yo(e,r);var o="__transition-"+this._uid+"-";s.key=null==s.key?s.isComment?o+"comment":o+s.tag:a(s.key)?0===String(s.key).indexOf(o)?s.key:o+s.key:s.key;var c=(s.data||(s.data={})).transition=Ko(this),l=this._vnode,u=qo(l);if(s.data.directives&&s.data.directives.some(Zo)&&(s.data.show=!0),u&&u.data&&!Jo(s,u)&&!An(u)&&(!u.componentInstance||!u.componentInstance._vnode.isComment)){var d=u.data.transition=D({},c);if("out-in"===i)return this._leaving=!0,kt(d,"afterLeave",(function(){t._leaving=!1,t.$forceUpdate()})),Yo(e,r);if("in-out"===i){if(An(s))return l;var h,f=function(){h()};kt(c,"afterEnter",f),kt(c,"enterCancelled",f),kt(d,"delayLeave",(function(e){h=e}))}}return r}}},ta=D({tag:String,moveClass:String},Go);delete ta.mode;var na={props:ta,beforeMount:function(){var e=this,t=this._update;this._update=function(n,i){var r=Bn(e);e.__patch__(e._vnode,e.kept,!1,!0),e._vnode=e.kept,r(),t.call(e,n,i)}},render:function(e){for(var t=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),i=this.prevChildren=this.children,r=this.$slots.default||[],s=this.children=[],o=Ko(this),a=0;ac&&(a.push(s=e.slice(c,r)),o.push(JSON.stringify(s)));var l=ns(i[1].trim());o.push("_s("+l+")"),a.push({"@binding":l}),c=r+i[0].length}return c\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,ka=/^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,Aa="[a-zA-Z_][\\-\\.0-9_a-zA-Z"+z.source+"]*",Ca="((?:"+Aa+"\\:)?"+Aa+")",Ea=new RegExp("^<"+Ca),Sa=/^\s*(\/?)>/,Fa=new RegExp("^<\\/"+Ca+"[^>]*>"),$a=/^]+>/i,Ta=/^",""":'"',"&":"&"," ":"\n"," ":"\t","'":"'"},Oa=/&(?:lt|gt|quot|amp|#39);/g,Ma=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,ja=m("pre,textarea",!0),Ia=function(e,t){return e&&ja(e)&&"\n"===t[0]};function Pa(e,t){var n=t?Ma:Oa;return e.replace(n,(function(e){return Ra[e]}))}function Na(e,t){var n,i,r=[],s=t.expectHTML,o=t.isUnaryTag||O,a=t.canBeLeftOpenTag||O,c=0;while(e){if(n=e,i&&Da(i)){var l=0,u=i.toLowerCase(),d=Ba[u]||(Ba[u]=new RegExp("([\\s\\S]*?)(]*>)","i")),h=e.replace(d,(function(e,n,i){return l=i.length,Da(u)||"noscript"===u||(n=n.replace(//g,"$1").replace(//g,"$1")),Ia(u,n)&&(n=n.slice(1)),t.chars&&t.chars(n),""}));c+=e.length-h.length,e=h,E(u,c-l,c)}else{var f=e.indexOf("<");if(0===f){if(Ta.test(e)){var p=e.indexOf("--\x3e");if(p>=0){t.shouldKeepComment&&t.comment(e.substring(4,p),c,c+p+3),k(p+3);continue}}if(La.test(e)){var g=e.indexOf("]>");if(g>=0){k(g+2);continue}}var m=e.match($a);if(m){k(m[0].length);continue}var v=e.match(Fa);if(v){var b=c;k(v[0].length),E(v[1],b,c);continue}var y=A();if(y){C(y),Ia(y.tagName,e)&&k(1);continue}}var w=void 0,_=void 0,x=void 0;if(f>=0){_=e.slice(f);while(!Fa.test(_)&&!Ea.test(_)&&!Ta.test(_)&&!La.test(_)){if(x=_.indexOf("<",1),x<0)break;f+=x,_=e.slice(f)}w=e.substring(0,f)}f<0&&(w=e),w&&k(w.length),t.chars&&w&&t.chars(w,c-w.length,c)}if(e===n){t.chars&&t.chars(e);break}}function k(t){c+=t,e=e.substring(t)}function A(){var t=e.match(Ea);if(t){var n,i,r={tagName:t[1],attrs:[],start:c};k(t[0].length);while(!(n=e.match(Sa))&&(i=e.match(ka)||e.match(xa)))i.start=c,k(i[0].length),i.end=c,r.attrs.push(i);if(n)return r.unarySlash=n[1],k(n[0].length),r.end=c,r}}function C(e){var n=e.tagName,c=e.unarySlash;s&&("p"===i&&_a(n)&&E(i),a(n)&&i===n&&E(n));for(var l=o(n)||!!c,u=e.attrs.length,d=new Array(u),h=0;h=0;o--)if(r[o].lowerCasedTag===a)break}else o=0;if(o>=0){for(var l=r.length-1;l>=o;l--)t.end&&t.end(r[l].tag,n,s);r.length=o,i=o&&r[o-1].tag}else"br"===a?t.start&&t.start(e,[],!0,n,s):"p"===a&&(t.start&&t.start(e,[],!1,n,s),t.end&&t.end(e,n,s))}E()}var Wa,Ha,Va,Ua,za,Ga,qa,Ka,Ya=/^@|^v-on:/,Xa=/^v-|^@|^:|^#/,Ja=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,Qa=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,Za=/^\(|\)$/g,ec=/^\[.*\]$/,tc=/:(.*)$/,nc=/^:|^\.|^v-bind:/,ic=/\.[^.\]]+(?=[^\]]*$)/g,rc=/^v-slot(:|$)|^#/,sc=/[\r\n]/,oc=/\s+/g,ac=x(ba.decode),cc="_empty_";function lc(e,t,n){return{type:1,tag:e,attrsList:t,attrsMap:Tc(t),rawAttrsMap:{},parent:n,children:[]}}function uc(e,t){Wa=t.warn||rs,Ga=t.isPreTag||O,qa=t.mustUseProp||O,Ka=t.getTagNamespace||O;var n=t.isReservedTag||O;(function(e){return!!e.component||!n(e.tag)}),Va=ss(t.modules,"transformNode"),Ua=ss(t.modules,"preTransformNode"),za=ss(t.modules,"postTransformNode"),Ha=t.delimiters;var i,r,s=[],o=!1!==t.preserveWhitespace,a=t.whitespace,c=!1,l=!1;function u(e){if(d(e),c||e.processed||(e=fc(e,t)),s.length||e===i||i.if&&(e.elseif||e.else)&&_c(i,{exp:e.elseif,block:e}),r&&!e.forbidden)if(e.elseif||e.else)yc(e,r);else{if(e.slotScope){var n=e.slotTarget||'"default"';(r.scopedSlots||(r.scopedSlots={}))[n]=e}r.children.push(e),e.parent=r}e.children=e.children.filter((function(e){return!e.slotScope})),d(e),e.pre&&(c=!1),Ga(e.tag)&&(l=!1);for(var o=0;o|^function(?:\s+[\w$]+)?\s*\(/,el=/\([^)]*?\);*$/,tl=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,nl={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},il={esc:["Esc","Escape"],tab:"Tab",enter:"Enter",space:[" ","Spacebar"],up:["Up","ArrowUp"],left:["Left","ArrowLeft"],right:["Right","ArrowRight"],down:["Down","ArrowDown"],delete:["Backspace","Delete","Del"]},rl=function(e){return"if("+e+")return null;"},sl={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:rl("$event.target !== $event.currentTarget"),ctrl:rl("!$event.ctrlKey"),shift:rl("!$event.shiftKey"),alt:rl("!$event.altKey"),meta:rl("!$event.metaKey"),left:rl("'button' in $event && $event.button !== 0"),middle:rl("'button' in $event && $event.button !== 1"),right:rl("'button' in $event && $event.button !== 2")};function ol(e,t){var n=t?"nativeOn:":"on:",i="",r="";for(var s in e){var o=al(e[s]);e[s]&&e[s].dynamic?r+=s+","+o+",":i+='"'+s+'":'+o+","}return i="{"+i.slice(0,-1)+"}",r?n+"_d("+i+",["+r.slice(0,-1)+"])":n+i}function al(e){if(!e)return"function(){}";if(Array.isArray(e))return"["+e.map((function(e){return al(e)})).join(",")+"]";var t=tl.test(e.value),n=Zc.test(e.value),i=tl.test(e.value.replace(el,""));if(e.modifiers){var r="",s="",o=[];for(var a in e.modifiers)if(sl[a])s+=sl[a],nl[a]&&o.push(a);else if("exact"===a){var c=e.modifiers;s+=rl(["ctrl","shift","alt","meta"].filter((function(e){return!c[e]})).map((function(e){return"$event."+e+"Key"})).join("||"))}else o.push(a);o.length&&(r+=cl(o)),s&&(r+=s);var l=t?"return "+e.value+"($event)":n?"return ("+e.value+")($event)":i?"return "+e.value:e.value;return"function($event){"+r+l+"}"}return t||n?e.value:"function($event){"+(i?"return "+e.value:e.value)+"}"}function cl(e){return"if(!$event.type.indexOf('key')&&"+e.map(ll).join("&&")+")return null;"}function ll(e){var t=parseInt(e,10);if(t)return"$event.keyCode!=="+t;var n=nl[e],i=il[e];return"_k($event.keyCode,"+JSON.stringify(e)+","+JSON.stringify(n)+",$event.key,"+JSON.stringify(i)+")"}function ul(e,t){e.wrapListeners=function(e){return"_g("+e+","+t.value+")"}}function dl(e,t){e.wrapData=function(n){return"_b("+n+",'"+e.tag+"',"+t.value+","+(t.modifiers&&t.modifiers.prop?"true":"false")+(t.modifiers&&t.modifiers.sync?",true":"")+")"}}var hl={on:ul,bind:dl,cloak:R},fl=function(e){this.options=e,this.warn=e.warn||rs,this.transforms=ss(e.modules,"transformCode"),this.dataGenFns=ss(e.modules,"genData"),this.directives=D(D({},hl),e.directives);var t=e.isReservedTag||O;this.maybeComponent=function(e){return!!e.component||!t(e.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1};function pl(e,t){var n=new fl(t),i=e?gl(e,n):'_c("div")';return{render:"with(this){return "+i+"}",staticRenderFns:n.staticRenderFns}}function gl(e,t){if(e.parent&&(e.pre=e.pre||e.parent.pre),e.staticRoot&&!e.staticProcessed)return ml(e,t);if(e.once&&!e.onceProcessed)return vl(e,t);if(e.for&&!e.forProcessed)return wl(e,t);if(e.if&&!e.ifProcessed)return bl(e,t);if("template"!==e.tag||e.slotTarget||t.pre){if("slot"===e.tag)return Rl(e,t);var n;if(e.component)n=Ol(e.component,e,t);else{var i;(!e.plain||e.pre&&t.maybeComponent(e))&&(i=_l(e,t));var r=e.inlineTemplate?null:Fl(e,t,!0);n="_c('"+e.tag+"'"+(i?","+i:"")+(r?","+r:"")+")"}for(var s=0;s>>0}function El(e){return 1===e.type&&("slot"===e.tag||e.children.some(El))}function Sl(e,t){var n=e.attrsMap["slot-scope"];if(e.if&&!e.ifProcessed&&!n)return bl(e,t,Sl,"null");if(e.for&&!e.forProcessed)return wl(e,t,Sl);var i=e.slotScope===cc?"":String(e.slotScope),r="function("+i+"){return "+("template"===e.tag?e.if&&n?"("+e.if+")?"+(Fl(e,t)||"undefined")+":undefined":Fl(e,t)||"undefined":gl(e,t))+"}",s=i?"":",proxy:true";return"{key:"+(e.slotTarget||'"default"')+",fn:"+r+s+"}"}function Fl(e,t,n,i,r){var s=e.children;if(s.length){var o=s[0];if(1===s.length&&o.for&&"template"!==o.tag&&"slot"!==o.tag){var a=n?t.maybeComponent(o)?",1":",0":"";return""+(i||gl)(o,t)+a}var c=n?$l(s,t.maybeComponent):0,l=r||Ll;return"["+s.map((function(e){return l(e,t)})).join(",")+"]"+(c?","+c:"")}}function $l(e,t){for(var n=0,i=0;i':'
',Wl.innerHTML.indexOf(" ")>0}var Gl=!!Q&&zl(!1),ql=!!Q&&zl(!0),Kl=x((function(e){var t=fr(e);return t&&t.innerHTML})),Yl=Ci.prototype.$mount;function Xl(e){if(e.outerHTML)return e.outerHTML;var t=document.createElement("div");return t.appendChild(e.cloneNode(!0)),t.innerHTML}Ci.prototype.$mount=function(e,t){if(e=e&&fr(e),e===document.body||e===document.documentElement)return this;var n=this.$options;if(!n.render){var i=n.template;if(i)if("string"===typeof i)"#"===i.charAt(0)&&(i=Kl(i));else{if(!i.nodeType)return this;i=i.innerHTML}else e&&(i=Xl(e));if(i){0;var r=Ul(i,{outputSourceRange:!1,shouldDecodeNewlines:Gl,shouldDecodeNewlinesForHref:ql,delimiters:n.delimiters,comments:n.comments},this),s=r.render,o=r.staticRenderFns;n.render=s,n.staticRenderFns=o}}return Yl.call(this,e,t)},Ci.compile=Ul,t["a"]=Ci}).call(this,n("c8ba"))},a078:function(e,t,n){var i=n("7b0b"),r=n("50c4"),s=n("35a1"),o=n("e95a"),a=n("0366"),c=n("ebb5").aTypedArrayConstructor;e.exports=function(e){var t,n,l,u,d,h,f=i(e),p=arguments.length,g=p>1?arguments[1]:void 0,m=void 0!==g,v=s(f);if(void 0!=v&&!o(v)){d=v.call(f),h=d.next,f=[];while(!(u=h.call(d)).done)f.push(u.value)}for(m&&p>2&&(g=a(g,arguments[2],2)),n=r(f.length),l=new(c(this))(n),t=0;n>t;t++)l[t]=m?g(f[t],t):f[t];return l}},a15b:function(e,t,n){"use strict";var i=n("23e7"),r=n("44ad"),s=n("fc6a"),o=n("a640"),a=[].join,c=r!=Object,l=o("join",",");i({target:"Array",proto:!0,forced:c||!l},{join:function(e){return a.call(s(this),void 0===e?",":e)}})},a1f0:function(e,t,n){"use strict";var i=n("23e7"),r=n("9ed3"),s=n("1d80"),o=n("50c4"),a=n("1c0b"),c=n("825a"),l=n("c6b6"),u=n("44e7"),d=n("ad6d"),h=n("9112"),f=n("d039"),p=n("b622"),g=n("4840"),m=n("8aa5"),v=n("69f3"),b=n("c430"),y=p("matchAll"),w="RegExp String",_=w+" Iterator",x=v.set,k=v.getterFor(_),A=RegExp.prototype,C=A.exec,E="".matchAll,S=!!E&&!f((function(){"a".matchAll(/./)})),F=function(e,t){var n,i=e.exec;if("function"==typeof i){if(n=i.call(e,t),"object"!=typeof n)throw TypeError("Incorrect exec result");return n}return C.call(e,t)},$=r((function(e,t,n,i){x(this,{type:_,regexp:e,string:t,global:n,unicode:i,done:!1})}),w,(function(){var e=k(this);if(e.done)return{value:void 0,done:!0};var t=e.regexp,n=e.string,i=F(t,n);return null===i?{value:void 0,done:e.done=!0}:e.global?(""==String(i[0])&&(t.lastIndex=m(n,o(t.lastIndex),e.unicode)),{value:i,done:!1}):(e.done=!0,{value:i,done:!1})})),T=function(e){var t,n,i,r,s,a,l=c(this),u=String(e);return t=g(l,RegExp),n=l.flags,void 0===n&&l instanceof RegExp&&!("flags"in A)&&(n=d.call(l)),i=void 0===n?"":String(n),r=new t(t===RegExp?l.source:l,i),s=!!~i.indexOf("g"),a=!!~i.indexOf("u"),r.lastIndex=o(l.lastIndex),new $(r,u,s,a)};i({target:"String",proto:!0,forced:S},{matchAll:function(e){var t,n,i,r,o=s(this);if(null!=e){if(u(e)&&(t=String(s("flags"in A?e.flags:d.call(e))),!~t.indexOf("g")))throw TypeError("`.matchAll` does not allow non-global regexes");if(S)return E.apply(o,arguments);if(i=e[y],void 0===i&&b&&"RegExp"==l(e)&&(i=T),null!=i)return a(i).call(e,o)}else if(S)return E.apply(o,arguments);return n=String(o),r=new RegExp(e,"g"),b?T.call(r,n):r[y](n)}}),b||y in A||h(A,y,T)},a2bf:function(e,t,n){"use strict";var i=n("e8b5"),r=n("50c4"),s=n("0366"),o=function(e,t,n,a,c,l,u,d){var h,f=c,p=0,g=!!u&&s(u,d,3);while(p0&&i(h))f=o(e,t,h,r(h.length),f,l-1)-1;else{if(f>=9007199254740991)throw TypeError("Exceed the acceptable array length");e[f]=h}f++}p++}return f};e.exports=o},a3f9:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("vui-button",{attrs:{params:{close:1,code:e.code}}},[e._v("Save and Close")]),n("vui-button",{attrs:{params:{execute:1,code:e.code}}},[e._v("Save and Execute")]),n("vui-button",{attrs:{params:{close:1,code:e.s.code}}},[e._v("Close")]),n("editor",{attrs:{lang:"javascript",theme:"monokai",width:"100%",height:"50em"},on:{init:e.editorInit},model:{value:e.code,callback:function(t){e.code=t},expression:"code"}})],1)},r=[],s={data:function(){return{s:this.$root.$data.state,code:'Term.write("AAA")'}},components:{editor:n("7c9e")},created:function(){this.code=this.s.code},methods:{editorInit:function(){n("2099"),n("bb36"),n("14d4"),n("6a21")}}},o=s,a=n("2877"),c=Object(a["a"])(o,i,r,!1,null,null,null);t["default"]=c.exports},a434:function(e,t,n){"use strict";var i=n("23e7"),r=n("23cb"),s=n("a691"),o=n("50c4"),a=n("7b0b"),c=n("65f0"),l=n("8418"),u=n("1dde"),d=n("ae40"),h=u("splice"),f=d("splice",{ACCESSORS:!0,0:0,1:2}),p=Math.max,g=Math.min,m=9007199254740991,v="Maximum allowed length exceeded";i({target:"Array",proto:!0,forced:!h||!f},{splice:function(e,t){var n,i,u,d,h,f,b=a(this),y=o(b.length),w=r(e,y),_=arguments.length;if(0===_?n=i=0:1===_?(n=0,i=y-w):(n=_-2,i=g(p(s(t),0),y-w)),y+n-i>m)throw TypeError(v);for(u=c(b,i),d=0;dy-i+n;d--)delete b[d-1]}else if(n>i)for(d=y-i;d>w;d--)h=d+i-1,f=d+n-1,h in b?b[f]=b[h]:delete b[f];for(d=0;ds)r.push(arguments[s++]);if(i=t,(f(t)||void 0!==e)&&!ae(e))return h(t)||(t=function(e,t){if("function"==typeof i&&(t=i.call(this,e,t)),!ae(t))return t}),r[1]=t,q.apply(null,r)}})}G[W][H]||S(G[W],H,G[W].valueOf),M(G,N),L[P]=!0},a4ec:function(e,t,n){},a589:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[e.on?[e.pastHalfTime?[e.ingredientsPresent?e.failed?n("p",[e._v("Something doesn't look right...")]):n("p",[e._v("It's cooking nicely!")]):n("p",[e._v("There's nothing inside. Microwave's working, though!")])]:n("p",[e._v("It's starting to cook...")]),n("vui-progress",{attrs:{value:e.$root.$data.wtime,min:e.start_time,max:e.start_time+e.cook_time}}),n("vui-button",{staticClass:"danger danger-control",attrs:{icon:"exclamation-triangle",params:{abort:1}}},[e._v("Abort!")])]:[n("h4",[e._v("Ingredients")]),n("ul",[e.ingredientsPresent?e._e():n("li",[e._v("The microwave is empty!")]),e._l(e.cookingobjs,(function(t,i){return n("li",{key:i},[n("vui-button",{attrs:{params:{eject:i}}},[e._v(" "+e._s(i)+" • "+e._s(t)+" ")])],1)})),e._l(e.cookingreas,(function(t,i){return n("li",{key:i},[n("vui-button",{attrs:{params:{eject:i}}},[e._v(" "+e._s(i)+" • "+e._s(t)+" units ")])],1)}))],2),n("vui-button",{staticClass:"danger danger-control",attrs:{icon:"trash",params:{eject_all:1}}},[e._v("Eject All")]),n("vui-button",{staticClass:"control",attrs:{params:{cook:1}}},[e._v("Cook!")])]],2)},r=[],s=(n("b64b"),{data:function(){return this.$root.$data.state},computed:{ingredientsPresent:function(){return Object.keys(this.cookingobjs).length>0||Object.keys(this.cookingreas).length>0},pastHalfTime:function(){return this.$root.$data.wtime>this.start_time+this.cook_time/2}}}),o=s,a=(n("e48d"),n("2877")),c=Object(a["a"])(o,i,r,!1,null,"2005209a",null);t["default"]=c.exports},a5e6:function(e,t,n){},a623:function(e,t,n){"use strict";var i=n("23e7"),r=n("b727").every,s=n("a640"),o=n("ae40"),a=s("every"),c=o("every");i({target:"Array",proto:!0,forced:!a||!c},{every:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}})},a630:function(e,t,n){var i=n("23e7"),r=n("4df4"),s=n("1c7e"),o=!s((function(e){Array.from(e)}));i({target:"Array",stat:!0,forced:o},{from:r})},a640:function(e,t,n){"use strict";var i=n("d039");e.exports=function(e,t){var n=[][e];return!!n&&i((function(){n.call(null,t||function(){throw 1},1)}))}},a691:function(e,t){var n=Math.ceil,i=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?i:n)(e)}},a6fd:function(e,t,n){var i=n("23e7"),r=n("d066"),s=n("1c0b"),o=n("825a"),a=n("d039"),c=r("Reflect","apply"),l=Function.apply,u=!a((function(){c((function(){}))}));i({target:"Reflect",stat:!0,forced:u},{apply:function(e,t,n){return s(e),o(n),c?c(e,t,n):l.call(e,t,n)}})},a79d:function(e,t,n){"use strict";var i=n("23e7"),r=n("c430"),s=n("fea9"),o=n("d039"),a=n("d066"),c=n("4840"),l=n("cdf9"),u=n("6eeb"),d=!!s&&o((function(){s.prototype["finally"].call({then:function(){}},(function(){}))}));i({target:"Promise",proto:!0,real:!0,forced:d},{finally:function(e){var t=c(this,a("Promise")),n="function"==typeof e;return this.then(n?function(n){return l(t,e()).then((function(){return n}))}:e,n?function(n){return l(t,e()).then((function(){throw n}))}:e)}}),r||"function"!=typeof s||s.prototype["finally"]||u(s.prototype,"finally",a("Promise").prototype["finally"])},a7c6:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("view-mcomputer-ntsl-"+e.s.mode,{tag:"component"})],1)},r=[],s={data:function(){return{s:this.$root.$data.state}}},o=s,a=n("2877"),c=Object(a["a"])(o,i,r,!1,null,null,null);t["default"]=c.exports},a874:function(e,t,n){var i=n("23e7"),r=n("145e"),s=n("44d2");i({target:"Array",proto:!0},{copyWithin:r}),s("copyWithin")},a8bb:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[e._v(" You are not authenticated. Please login to continue. "),n("vui-button",{attrs:{params:{login:1}}},[e._v("Login")])],1)},r=[],s=n("2877"),o={},a=Object(s["a"])(o,i,r,!1,null,null,null);t["default"]=a.exports},a919:function(e,t,n){var i=n("ddc6"),r={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","IJ":"IJ","ij":"ij","Œ":"Oe","œ":"oe","ʼn":"'n","ſ":"s"},s=i(r);e.exports=s},a975:function(e,t,n){"use strict";var i=n("ebb5"),r=n("b727").every,s=i.aTypedArray,o=i.exportTypedArrayMethod;o("every",(function(e){return r(s(this),e,arguments.length>1?arguments[1]:void 0)}))},a981:function(e,t){e.exports="undefined"!==typeof ArrayBuffer&&"undefined"!==typeof DataView},a9e3:function(e,t,n){"use strict";var i=n("83ab"),r=n("da84"),s=n("94ca"),o=n("6eeb"),a=n("5135"),c=n("c6b6"),l=n("7156"),u=n("c04e"),d=n("d039"),h=n("7c73"),f=n("241c").f,p=n("06cf").f,g=n("9bf2").f,m=n("58a8").trim,v="Number",b=r[v],y=b.prototype,w=c(h(y))==v,_=function(e){var t,n,i,r,s,o,a,c,l=u(e,!1);if("string"==typeof l&&l.length>2)if(l=m(l),t=l.charCodeAt(0),43===t||45===t){if(n=l.charCodeAt(2),88===n||120===n)return NaN}else if(48===t){switch(l.charCodeAt(1)){case 66:case 98:i=2,r=49;break;case 79:case 111:i=8,r=55;break;default:return+l}for(s=l.slice(2),o=s.length,a=0;ar)return NaN;return parseInt(s,i)}return+l};if(s(v,!b(" 0o1")||!b("0b1")||b("+0x1"))){for(var x,k=function(e){var t=arguments.length<1?0:e,n=this;return n instanceof k&&(w?d((function(){y.valueOf.call(n)})):c(n)!=v)?l(new b(_(t)),n,k):_(t)},A=i?f(b):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),C=0;A.length>C;C++)a(b,x=A[C])&&!a(k,x)&&g(k,x,p(b,x));k.prototype=y,y.constructor=k,o(r,v,k)}},aa68:function(e,t,n){"use strict";n("afcf")},aaec:function(e,t){var n="\\ud800-\\udfff",i="\\u0300-\\u036f",r="\\ufe20-\\ufe2f",s="\\u20d0-\\u20ff",o=i+r+s,a="\\ufe0e\\ufe0f",c="\\u200d",l=RegExp("["+c+n+o+a+"]");function u(e){return l.test(e)}e.exports=u},ab13:function(e,t,n){var i=n("b622"),r=i("match");e.exports=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[r]=!1,"/./"[e](t)}catch(i){}}return!1}},ac02:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("h3",[e._v("Chemical Implants")]),n("table",{staticClass:"table border"},[e._m(0),e._l(e.chem_implants,(function(t){return n("tr",{key:t.ref,staticClass:"item border"},[n("td",[e._v(e._s(t.implanted_name))]),n("td",[e._v(e._s(t.remaining_units))]),n("td",[n("vui-button",{attrs:{disabled:t.remaining_units<1,params:{inject1:t.ref}}},[e._v("Inject 1u")]),n("vui-button",{attrs:{disabled:t.remaining_units<5,params:{inject5:t.ref}}},[e._v("Inject 5u")]),n("vui-button",{attrs:{disabled:t.remaining_units<10,params:{inject5:t.ref}}},[e._v("Inject 10u")])],1)])}))],2),n("h3",[e._v("Tracking Implants")]),n("table",{staticClass:"table border"},[e._m(1),e._l(e.tracking_implants,(function(t){return n("tr",{key:t.ref,staticClass:"item border"},[n("td",[e._v(e._s(t.id))]),n("td",[e._v(e._s(t.loc_display))]),n("td",[n("vui-button",{attrs:{params:{warn:t.ref}}},[e._v("Message Implanted User")])],1)])}))],2)])},r=[function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("tr",{staticClass:"header border"},[n("th",[e._v("Implanted User")]),n("th",[e._v("Remaining Chemical Units")]),n("th",[e._v("Options")])])},function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("tr",{staticClass:"header border"},[n("th",[e._v("Tracking ID")]),n("th",[e._v("Current Area")]),n("th",[e._v("Options")])])}],s={data:function(){return this.$root.$data.state}},o=s,a=(n("ada8"),n("2877")),c=Object(a["a"])(o,i,r,!1,null,"1844f920",null);t["default"]=c.exports},ac16:function(e,t,n){var i=n("23e7"),r=n("825a"),s=n("06cf").f;i({target:"Reflect",stat:!0},{deleteProperty:function(e,t){var n=s(r(e),t);return!(n&&!n.configurable)&&delete e[t]}})},ac1f:function(e,t,n){"use strict";var i=n("23e7"),r=n("9263");i({target:"RegExp",proto:!0,forced:/./.exec!==r},{exec:r})},ac4c:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("vui-input-search",{staticStyle:{display:"block"},attrs:{input:e.records,keys:["id","name","rank","sex","age","fingerprint","blood","dna"]},model:{value:e.filtered,callback:function(t){e.filtered=t},expression:"filtered"}}),e._l(e.filtered,(function(t){return n("div",{key:t.id},[n("vui-button",{attrs:{params:{setactive:t.id},icon:t.has_notes?"align-justify":null,"push-state":""},on:{click:function(t){e.state.activeview=e.state.defaultview}}},[e._v(e._s(t.id)+": "+e._s(t.name)+" ("+e._s(t.rank)+")")])],1)})),n("vui-button",{staticClass:"newrecord",attrs:{"v-if":(1&e.editable)>0,params:{newrecord:1},"push-state":""},on:{click:function(t){e.state.activeview=e.state.defaultview}}},[e._v("New Record")])],2)},r=[],s=(n("07ac"),{data:function(){return{state:this.$root.$data.state,filtered:[]}},computed:{records:function(){return Object.values(this.state.allrecords)}}}),o=s,a=(n("682e"),n("2877")),c=Object(a["a"])(o,i,r,!1,null,"df4093f4",null);t["default"]=c.exports},acac:function(e,t,n){"use strict";var i=n("e2cc"),r=n("f183").getWeakData,s=n("825a"),o=n("861d"),a=n("19aa"),c=n("2266"),l=n("b727"),u=n("5135"),d=n("69f3"),h=d.set,f=d.getterFor,p=l.find,g=l.findIndex,m=0,v=function(e){return e.frozen||(e.frozen=new b)},b=function(){this.entries=[]},y=function(e,t){return p(e.entries,(function(e){return e[0]===t}))};b.prototype={get:function(e){var t=y(this,e);if(t)return t[1]},has:function(e){return!!y(this,e)},set:function(e,t){var n=y(this,e);n?n[1]=t:this.entries.push([e,t])},delete:function(e){var t=g(this.entries,(function(t){return t[0]===e}));return~t&&this.entries.splice(t,1),!!~t}},e.exports={getConstructor:function(e,t,n,l){var d=e((function(e,i){a(e,d,t),h(e,{type:t,id:m++,frozen:void 0}),void 0!=i&&c(i,e[l],{that:e,AS_ENTRIES:n})})),p=f(t),g=function(e,t,n){var i=p(e),o=r(s(t),!0);return!0===o?v(i).set(t,n):o[i.id]=n,e};return i(d.prototype,{delete:function(e){var t=p(this);if(!o(e))return!1;var n=r(e);return!0===n?v(t)["delete"](e):n&&u(n,t.id)&&delete n[t.id]},has:function(e){var t=p(this);if(!o(e))return!1;var n=r(e);return!0===n?v(t).has(e):n&&u(n,t.id)}}),i(d.prototype,n?{get:function(e){var t=p(this);if(o(e)){var n=r(e);return!0===n?v(t).get(e):n?n[t.id]:void 0}},set:function(e,t){return g(this,e,t)}}:{add:function(e){return g(this,e,!0)}}),d}}},accc:function(e,t,n){var i=n("23e7"),r=n("64e5");i({target:"Date",proto:!0,forced:Date.prototype.toISOString!==r},{toISOString:r})},acd8:function(e,t,n){var i=n("23e7"),r=n("7e12");i({global:!0,forced:parseFloat!=r},{parseFloat:r})},ace4:function(e,t,n){"use strict";var i=n("23e7"),r=n("d039"),s=n("621a"),o=n("825a"),a=n("23cb"),c=n("50c4"),l=n("4840"),u=s.ArrayBuffer,d=s.DataView,h=u.prototype.slice,f=r((function(){return!new u(2).slice(1,void 0).byteLength}));i({target:"ArrayBuffer",proto:!0,unsafe:!0,forced:f},{slice:function(e,t){if(void 0!==h&&void 0===t)return h.call(o(this),e);var n=o(this).byteLength,i=a(e,n),r=a(void 0===t?n:t,n),s=new(l(this,u))(c(r-i)),f=new d(this),p=new d(s),g=0;while(i3}))}},af89:function(e,t,n){"use strict";n("6836")},af93:function(e,t,n){var i=n("23e7"),r=n("861d"),s=n("f183").onFreeze,o=n("bb2f"),a=n("d039"),c=Object.seal,l=a((function(){c(1)}));i({target:"Object",stat:!0,forced:l,sham:!o},{seal:function(e){return c&&r(e)?c(s(e)):e}})},afb9:function(e,t,n){},afcf:function(e,t,n){},aff5:function(e,t,n){var i=n("23e7");i({target:"Number",stat:!0},{MAX_SAFE_INTEGER:9007199254740991})},b041:function(e,t,n){"use strict";var i=n("00ee"),r=n("f5df");e.exports=i?{}.toString:function(){return"[object "+r(this)+"]"}},b053:function(e,t,n){},b087:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[e.power?n("div",[e.occupant?n("div",[n("div",{staticClass:"columnHolder"},[n("div",{staticClass:"column"},[n("div",[n("h3",[e._v("Occupant Status:")]),n("div",[n("span",{staticClass:"text"},[e._v("Status:")]),e._v(" "),n("span",{style:{color:e.consciousnessLabel(e.stat)}},[e._v(e._s(e.consciousnessText(e.stat)))])]),n("div",[n("span",{staticClass:"text"},[e._v("Stasis Level:")]),e._v(" "+e._s(e.stasis))]),n("div",[n("span",{staticClass:"text"},[e._v("Species:")]),e._v(" "+e._s(e.species))]),n("div",[n("span",{staticClass:"text"},[e._v("Brain Activity:")]),e._v(" "),n("vui-progress",{class:e.progressClass(e.brain_activity),attrs:{value:e.brain_activity}},[e._v(e._s(e.brain_activity)+"%")])],1),n("div",[n("span",{staticClass:"text"},[e._v("Pulse:")]),e._v(" "+e._s(e.pulse))]),n("div",[n("span",{staticClass:"text"},[e._v("BP:")]),e._v(" "),n("span",{style:{color:e.getPressureClass(e.blood_pressure_level)}},[e._v(e._s(e.blood_pressure))])]),n("div",[n("span",{staticClass:"text"},[e._v("Blood Oxygenation:")]),e._v(" "),n("vui-progress",{class:e.progressClass(e.brain_activity),attrs:{value:Math.round(e.blood_o2)}},[e._v(e._s(Math.round(e.blood_o2))+"%")])],1),n("h3",[e._v("Bloodstream Reagents:")]),e.bloodreagents?n("div",[n("table",e._l(e.bloodreagents,(function(t){return n("tr",{key:t.name},[n("td",[n("span",{staticClass:"text"},[e._v(e._s(t.name)+":")])]),n("td",{staticClass:"shifted"},[e._v(e._s(t.amount)+"u")])])})),0)]):n("div",[e._v(" The occupant has no additional reagents in their bloodstream. ")]),n("h3",[e._v("Stomach Reagents:")]),e.hasstomach?n("div",[e.stomachreagents?n("div",[n("table",e._l(e.stomachreagents,(function(t){return n("tr",{key:t.name},[n("td",[n("span",{staticClass:"text"},[e._v(e._s(t.name)+":")])]),n("td",{staticClass:"shifted"},[e._v(e._s(t.amount)+"u")])])})),0)]):n("div",[e._v(" The occupant has nothing in their stomach. ")])]):n("div",[e._v(" The occupant does not have a stomach. ")])])]),n("div",{staticClass:"column"},[n("h3",[e._v("Injectable Reagents:")]),n("table",e._l(e.reagents,(function(t){return n("tr",{key:t.name},[n("td",[n("span",{staticClass:"text"},[e._v(e._s(t.name)+":")])]),n("td",[n("vui-button",{attrs:{params:{chemical:t.type,amount:5}}},[e._v("Inject 5")])],1),n("td",[n("vui-button",{attrs:{params:{chemical:t.type,amount:10}}},[e._v("Inject 10")])],1)])})),0),n("h3",[e._v("Stasis Settings:")]),n("table",[n("tr",e._l(e.stasissettings,(function(t){return n("td",{key:t},[n("vui-button",{attrs:{params:{stasis:t}}},[e._v(e._s(t))])],1)})),0)])])])]):n("div",[e._v(" No occupant. ")])]):n("div",[e._m(0)]),e.occupant?n("div",[n("div",{staticClass:"columnHolder"},[n("div",{staticClass:"float"},[n("vui-button",{attrs:{params:{eject:1}}},[e._v("Eject Occupant")])],1),n("div",{staticClass:"float"},[e.filtering?n("div",[n("vui-button",{attrs:{params:{filter:-1}}},[e._v("Dialysis Active")])],1):n("div",[n("vui-button",{attrs:{params:{filter:1}}},[e._v("Dialysis Inactive")])],1)]),n("div",{staticClass:"float"},[e.pump?n("div",[n("vui-button",{attrs:{params:{pump:-1}}},[e._v("Stomach Pump Active")])],1):n("div",[n("vui-button",{attrs:{params:{pump:1}}},[e._v("Stomach Pump Inactive")])],1)])])]):e._e(),-1!=e.beaker?n("div",[n("span",{staticClass:"text"},[e._v("Beaker:")]),e._v(" "+e._s(e.beaker)+" units of free space remaining. "),n("vui-button",{attrs:{params:{beaker:1}}},[e._v("Eject Beaker")])],1):n("div",[e._v(" No beaker inserted. ")])])},r=[function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"itemLabel"},[n("h2",[e._v("NO POWER")])])}],s={data:function(){return this.$root.$data.state},methods:{consciousnessLabel:function(e){switch(e){case 0:return"LimeGreen";case 1:return"OrangeRed";case 2:return"Crimson"}},consciousnessText:function(e){switch(e){case 0:return"Conscious";case 1:return"Unconscious";case 2:return"DEAD"}},progressClass:function(e){return e<=50?"bad":e<=90?"average":"good"},getPressureClass:function(e){switch(e){case 1:return"Crimson";case 2:return"LimeGreen";case 3:return"LawnGreen";case 4:return"Crimson";default:return"LightSkyBlue"}}}},o=s,a=(n("27cd"),n("2877")),c=Object(a["a"])(o,i,r,!1,null,"3783600c",null);t["default"]=c.exports},b0c0:function(e,t,n){var i=n("83ab"),r=n("9bf2").f,s=Function.prototype,o=s.toString,a=/^\s*function ([^ (]*)/,c="name";i&&!(c in s)&&r(s,c,{configurable:!0,get:function(){try{return o.call(this).match(a)[1]}catch(e){return""}}})},b14c:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("h2",{staticClass:"white"},[e._v("Welcome, Operative.")]),n("h2",[e._v("Please select your launch target:")]),0==e.status?n("div",[e._m(0),n("div",[n("vui-button",{attrs:{icon:"cog",params:{fire:"arrivals"}}},[e._v("Departures")])],1),n("div",[n("vui-button",{attrs:{icon:"cog",params:{fire:"cargo"}}},[e._v("Cargo Surface")])],1),n("div",[n("vui-button",{attrs:{icon:"cog",params:{fire:"commandescape"}}},[e._v("Command Surface")])],1)]):n("div",[e._v(" Pod status: "),n("span",{staticClass:"bad"},[e._v("Non-operational.")])])])},r=[function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[e._v("Pod status: "),n("span",{staticClass:"good"},[e._v("Operational.")])])}],s={data:function(){return this.$root.$data.state}},o=s,a=n("2877"),c=Object(a["a"])(o,i,r,!1,null,null,null);t["default"]=c.exports},b166:function(e,t,n){},b20a:function(e,t,n){var i=n("6ac0"),r=n("4caa"),s=n("ea72"),o="['’]",a=RegExp(o,"g");function c(e){return function(t){return i(s(r(t).replace(a,"")),e,"")}}e.exports=c},b378:function(e,t){ace.define("ace/snippets",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/lib/lang","ace/range","ace/anchor","ace/keyboard/hash_handler","ace/tokenizer","ace/lib/dom","ace/editor"],(function(e,t,n){"use strict";var i=e("./lib/oop"),r=e("./lib/event_emitter").EventEmitter,s=e("./lib/lang"),o=e("./range").Range,a=e("./anchor").Anchor,c=e("./keyboard/hash_handler").HashHandler,l=e("./tokenizer").Tokenizer,u=o.comparePoints,d=function(){this.snippetMap={},this.snippetNameMap={}};(function(){i.implement(this,r),this.getTokenizer=function(){function e(e,t,n){return e=e.substr(1),/^\d+$/.test(e)&&!n.inFormatString?[{tabstopId:parseInt(e,10)}]:[{text:e}]}function t(e){return"(?:[^\\\\"+e+"]|\\\\.)"}return d.$tokenizer=new l({start:[{regex:/:/,onMatch:function(e,t,n){return n.length&&n[0].expectIf?(n[0].expectIf=!1,n[0].elseBranch=n[0],[n[0]]):":"}},{regex:/\\./,onMatch:function(e,t,n){var i=e[1];return"}"==i&&n.length||-1!="`$\\".indexOf(i)?e=i:n.inFormatString&&("n"==i||"t"==i?e="\n":-1!="ulULE".indexOf(i)&&(e={changeCase:i,local:i>"a"})),[e]}},{regex:/}/,onMatch:function(e,t,n){return[n.length?n.shift():e]}},{regex:/\$(?:\d+|\w+)/,onMatch:e},{regex:/\$\{[\dA-Z_a-z]+/,onMatch:function(t,n,i){var r=e(t.substr(1),n,i);return i.unshift(r[0]),r},next:"snippetVar"},{regex:/\n/,token:"newline",merge:!1}],snippetVar:[{regex:"\\|"+t("\\|")+"*\\|",onMatch:function(e,t,n){n[0].choices=e.slice(1,-1).split(",")},next:"start"},{regex:"/("+t("/")+"+)/(?:("+t("/")+"*)/)(\\w*):?",onMatch:function(e,t,n){var i=n[0];return i.fmtString=e,e=this.splitRegex.exec(e),i.guard=e[1],i.fmt=e[2],i.flag=e[3],""},next:"start"},{regex:"`"+t("`")+"*`",onMatch:function(e,t,n){return n[0].code=e.splice(1,-1),""},next:"start"},{regex:"\\?",onMatch:function(e,t,n){n[0]&&(n[0].expectIf=!0)},next:"start"},{regex:"([^:}\\\\]|\\\\.)*:?",token:"",next:"start"}],formatString:[{regex:"/("+t("/")+"+)/",token:"regex"},{regex:"",onMatch:function(e,t,n){n.inFormatString=!0},next:"start"}]}),d.prototype.getTokenizer=function(){return d.$tokenizer},d.$tokenizer},this.tokenizeTmSnippet=function(e,t){return this.getTokenizer().getLineTokens(e,t).tokens.map((function(e){return e.value||e}))},this.$getDefaultValue=function(e,t){if(/^[A-Z]\d+$/.test(t)){var n=t.substr(1);return(this.variables[t[0]+"__"]||{})[n]}if(/^\d+$/.test(t))return(this.variables.__||{})[t];if(t=t.replace(/^TM_/,""),e){var i=e.session;switch(t){case"CURRENT_WORD":var r=i.getWordRange();case"SELECTION":case"SELECTED_TEXT":return i.getTextRange(r);case"CURRENT_LINE":return i.getLine(e.getCursorPosition().row);case"PREV_LINE":return i.getLine(e.getCursorPosition().row-1);case"LINE_INDEX":return e.getCursorPosition().column;case"LINE_NUMBER":return e.getCursorPosition().row+1;case"SOFT_TABS":return i.getUseSoftTabs()?"YES":"NO";case"TAB_SIZE":return i.getTabSize();case"FILENAME":case"FILEPATH":return"";case"FULLNAME":return"Ace"}}},this.variables={},this.getVariableValue=function(e,t){return this.variables.hasOwnProperty(t)?this.variables[t](e,t)||"":this.$getDefaultValue(e,t)||""},this.tmStrFormat=function(e,t,n){var i=t.flag||"",r=t.guard;r=new RegExp(r,i.replace(/[^gi]/,""));var s=this.tokenizeTmSnippet(t.fmt,"formatString"),o=this,a=e.replace(r,(function(){o.variables.__=arguments;for(var e=o.resolveVariables(s,n),t="E",i=0;i1?(b=t[t.length-1].length,v+=t.length-1):b+=e.length,y+=e}else e.start?e.end={row:v,column:b}:e.start={row:v,column:b}}));var w=e.getSelectionRange(),_=e.session.replace(w,y),x=new h(e),k=e.inVirtualSelectionMode&&e.selection.index;x.addTabstops(a,w.start,_,k)},this.insertSnippet=function(e,t){var n=this;if(e.inVirtualSelectionMode)return n.insertSnippetForSelection(e,t);e.forEachSelection((function(){n.insertSnippetForSelection(e,t)}),null,{keepOrder:!0}),e.tabstopManager&&e.tabstopManager.tabNext()},this.$getScope=function(e){var t=e.session.$mode.$id||"";if(t=t.split("/").pop(),"html"===t||"php"===t){"php"!==t||e.session.$mode.inlinePhp||(t="html");var n=e.getCursorPosition(),i=e.session.getState(n.row);"object"===typeof i&&(i=i[0]),i.substring&&("js-"==i.substring(0,3)?t="javascript":"css-"==i.substring(0,4)?t="css":"php-"==i.substring(0,4)&&(t="php"))}return t},this.getActiveScopes=function(e){var t=this.$getScope(e),n=[t],i=this.snippetMap;return i[t]&&i[t].includeScopes&&n.push.apply(n,i[t].includeScopes),n.push("_"),n},this.expandWithTab=function(e,t){var n=this,i=e.forEachSelection((function(){return n.expandSnippetForSelection(e,t)}),null,{keepOrder:!0});return i&&e.tabstopManager&&e.tabstopManager.tabNext(),i},this.expandSnippetForSelection=function(e,t){var n,i=e.getCursorPosition(),r=e.session.getLine(i.row),s=r.substring(0,i.column),o=r.substr(i.column),a=this.snippetMap;return this.getActiveScopes(e).some((function(e){var t=a[e];return t&&(n=this.findMatchingSnippet(t,s,o)),!!n}),this),!!n&&(t&&t.dryRun||(e.session.doc.removeInLine(i.row,i.column-n.replaceBefore.length,i.column+n.replaceAfter.length),this.variables.M__=n.matchBefore,this.variables.T__=n.matchAfter,this.insertSnippetForSelection(e,n.content),this.variables.M__=this.variables.T__=null),!0)},this.findMatchingSnippet=function(e,t,n){for(var i=e.length;i--;){var r=e[i];if((!r.startRe||r.startRe.test(t))&&((!r.endRe||r.endRe.test(n))&&(r.startRe||r.endRe)))return r.matchBefore=r.startRe?r.startRe.exec(t):[""],r.matchAfter=r.endRe?r.endRe.exec(n):[""],r.replaceBefore=r.triggerRe?r.triggerRe.exec(t)[0]:"",r.replaceAfter=r.endTriggerRe?r.endTriggerRe.exec(n)[0]:"",r}},this.snippetMap={},this.snippetNameMap={},this.register=function(e,t){var n=this.snippetMap,i=this.snippetNameMap,r=this;function o(e){return e&&!/^\^?\(.*\)\$?$|^\\b$/.test(e)&&(e="(?:"+e+")"),e||""}function a(e,t,n){return e=o(e),t=o(t),n?(e=t+e,e&&"$"!=e[e.length-1]&&(e+="$")):(e+=t,e&&"^"!=e[0]&&(e="^"+e)),new RegExp(e)}function c(e){e.scope||(e.scope=t||"_"),t=e.scope,n[t]||(n[t]=[],i[t]={});var o=i[t];if(e.name){var c=o[e.name];c&&r.unregister(c),o[e.name]=e}n[t].push(e),e.tabTrigger&&!e.trigger&&(!e.guard&&/^\w/.test(e.tabTrigger)&&(e.guard="\\b"),e.trigger=s.escapeRegExp(e.tabTrigger)),(e.trigger||e.guard||e.endTrigger||e.endGuard)&&(e.startRe=a(e.trigger,e.guard,!0),e.triggerRe=new RegExp(e.trigger,"",!0),e.endRe=a(e.endTrigger,e.endGuard,!0),e.endTriggerRe=new RegExp(e.endTrigger,"",!0))}e||(e=[]),e&&e.content?c(e):Array.isArray(e)&&e.forEach(c),this._signal("registerSnippets",{scope:t})},this.unregister=function(e,t){var n=this.snippetMap,i=this.snippetNameMap;function r(e){var r=i[e.scope||t];if(r&&r[e.name]){delete r[e.name];var s=n[e.scope||t],o=s&&s.indexOf(e);o>=0&&s.splice(o,1)}}e.content?r(e):Array.isArray(e)&&e.forEach(r)},this.parseSnippetFile=function(e){e=e.replace(/\r/g,"");var t,n=[],i={},r=/^#.*|^({[\s\S]*})\s*$|^(\S+) (.*)$|^((?:\n*\t.*)+)/gm;while(t=r.exec(e)){if(t[1])try{i=JSON.parse(t[1]),n.push(i)}catch(c){}if(t[4])i.content=t[4].replace(/^\t/gm,""),n.push(i),i={};else{var s=t[2],o=t[3];if("regex"==s){var a=/\/((?:[^\/\\]|\\.)*)|$/g;i.guard=a.exec(o)[1],i.trigger=a.exec(o)[1],i.endTrigger=a.exec(o)[1],i.endGuard=a.exec(o)[1]}else"snippet"==s?(i.tabTrigger=o.match(/^\S*/)[0],i.name||(i.name=o)):i[s]=o}}return n},this.getSnippetByName=function(e,t){var n,i=this.snippetNameMap;return this.getActiveScopes(t).some((function(t){var r=i[t];return r&&(n=r[e]),!!n}),this),n}}).call(d.prototype);var h=function(e){if(e.tabstopManager)return e.tabstopManager;e.tabstopManager=this,this.$onChange=this.onChange.bind(this),this.$onChangeSelection=s.delayedCall(this.onChangeSelection.bind(this)).schedule,this.$onChangeSession=this.onChangeSession.bind(this),this.$onAfterExec=this.onAfterExec.bind(this),this.attach(e)};(function(){this.attach=function(e){this.index=0,this.ranges=[],this.tabstops=[],this.$openTabstops=null,this.selectedTabstop=null,this.editor=e,this.editor.on("change",this.$onChange),this.editor.on("changeSelection",this.$onChangeSelection),this.editor.on("changeSession",this.$onChangeSession),this.editor.commands.on("afterExec",this.$onAfterExec),this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler)},this.detach=function(){this.tabstops.forEach(this.removeTabstopMarkers,this),this.ranges=null,this.tabstops=null,this.selectedTabstop=null,this.editor.removeListener("change",this.$onChange),this.editor.removeListener("changeSelection",this.$onChangeSelection),this.editor.removeListener("changeSession",this.$onChangeSession),this.editor.commands.removeListener("afterExec",this.$onAfterExec),this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler),this.editor.tabstopManager=null,this.editor=null},this.onChange=function(e){var t="r"==e.action[0],n=e.start,i=e.end,r=n.row,s=i.row,o=s-r,a=i.column-n.column;if(t&&(o=-o,a=-a),!this.$inChange&&t){var c=this.selectedTabstop,l=c&&!c.some((function(e){return u(e.start,n)<=0&&u(e.end,i)>=0}));if(l)return this.detach()}for(var d=this.ranges,h=0;h0?(this.removeRange(f),h--):(f.start.row==r&&f.start.column>n.column&&(f.start.column+=a),f.end.row==r&&f.end.column>=n.column&&(f.end.column+=a),f.start.row>=r&&(f.start.row+=o),f.end.row>=r&&(f.end.row+=o),u(f.start,f.end)>0&&this.removeRange(f)))}d.length||this.detach()},this.updateLinkedFields=function(){var e=this.selectedTabstop;if(e&&e.hasLinkedRanges){this.$inChange=!0;for(var n=this.editor.session,i=n.getTextRange(e.firstNonLinked),r=e.length;r--;){var s=e[r];if(s.linked){var o=t.snippetManager.tmStrFormat(i,s.original);n.replace(s,o)}}this.$inChange=!1}},this.onAfterExec=function(e){e.command&&!e.command.readOnly&&this.updateLinkedFields()},this.onChangeSelection=function(){if(this.editor){for(var e=this.editor.selection.lead,t=this.editor.selection.anchor,n=this.editor.selection.isEmpty(),i=this.ranges.length;i--;)if(!this.ranges[i].linked){var r=this.ranges[i].contains(e.row,e.column),s=n||this.ranges[i].contains(t.row,t.column);if(r&&s)return}this.detach()}},this.onChangeSession=function(){this.detach()},this.tabNext=function(e){var t=this.tabstops.length,n=this.index+(e||1);n=Math.min(Math.max(n,1),t),n==t&&(n=0),this.selectTabstop(n),0===n&&this.detach()},this.selectTabstop=function(e){this.$openTabstops=null;var t=this.tabstops[this.index];if(t&&this.addTabstopMarkers(t),this.index=e,t=this.tabstops[this.index],t&&t.length){if(this.selectedTabstop=t,this.editor.inVirtualSelectionMode)this.editor.selection.setRange(t.firstNonLinked);else{var n=this.editor.multiSelect;n.toSingleRange(t.firstNonLinked.clone());for(var i=t.length;i--;)t.hasLinkedRanges&&t[i].linked||n.addRange(t[i].clone(),!0);n.ranges[0]&&n.addRange(n.ranges[0].clone())}this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler)}},this.addTabstops=function(e,t,n){if(this.$openTabstops||(this.$openTabstops=[]),!e[0]){var i=o.fromPoints(n,n);g(i.start,t),g(i.end,t),e[0]=[i],e[0].index=0}var r=this.index,s=[r+1,0],a=this.ranges;e.forEach((function(e,n){for(var i=this.$openTabstops[n]||e,r=e.length;r--;){var c=e[r],l=o.fromPoints(c.start,c.end||c.start);p(l.start,t),p(l.end,t),l.original=c,l.tabstop=i,a.push(l),i!=e?i.unshift(l):i[r]=l,c.fmtString?(l.linked=!0,i.hasLinkedRanges=!0):i.firstNonLinked||(i.firstNonLinked=l)}i.firstNonLinked||(i.hasLinkedRanges=!1),i===e&&(s.push(i),this.$openTabstops[n]=i),this.addTabstopMarkers(i)}),this),s.length>2&&(this.tabstops.length&&s.push(s.splice(2,1)[0]),this.tabstops.splice.apply(this.tabstops,s))},this.addTabstopMarkers=function(e){var t=this.editor.session;e.forEach((function(e){e.markerId||(e.markerId=t.addMarker(e,"ace_snippet-marker","text"))}))},this.removeTabstopMarkers=function(e){var t=this.editor.session;e.forEach((function(e){t.removeMarker(e.markerId),e.markerId=null}))},this.removeRange=function(e){var t=e.tabstop.indexOf(e);e.tabstop.splice(t,1),t=this.ranges.indexOf(e),this.ranges.splice(t,1),this.editor.session.removeMarker(e.markerId),e.tabstop.length||(t=this.tabstops.indexOf(e.tabstop),-1!=t&&this.tabstops.splice(t,1),this.tabstops.length||this.detach())},this.keyboardHandler=new c,this.keyboardHandler.bindKeys({Tab:function(e){t.snippetManager&&t.snippetManager.expandWithTab(e)||e.tabstopManager.tabNext(1)},"Shift-Tab":function(e){e.tabstopManager.tabNext(-1)},Esc:function(e){e.tabstopManager.detach()},Return:function(e){return!1}})}).call(h.prototype);var f={};f.onChange=a.prototype.onChange,f.setPosition=function(e,t){this.pos.row=e,this.pos.column=t},f.update=function(e,t,n){this.$insertRight=n,this.pos=e,this.onChange(t)};var p=function(e,t){0==e.row&&(e.column+=t.column),e.row+=t.row},g=function(e,t){e.row==t.row&&(e.column-=t.column),e.row-=t.row};e("./lib/dom").importCssString(".ace_snippet-marker { -moz-box-sizing: border-box; box-sizing: border-box; background: rgba(194, 193, 208, 0.09); border: 1px dotted rgba(211, 208, 235, 0.62); position: absolute;}"),t.snippetManager=new d;var m=e("./editor").Editor;(function(){this.insertSnippet=function(e,n){return t.snippetManager.insertSnippet(this,e,n)},this.expandSnippet=function(e){return t.snippetManager.expandWithTab(this,e)}}).call(m.prototype)})),ace.define("ace/ext/emmet",["require","exports","module","ace/keyboard/hash_handler","ace/editor","ace/snippets","ace/range","resources","resources","tabStops","resources","utils","actions","ace/config","ace/config"],(function(e,t,n){"use strict";var i,r,s=e("ace/keyboard/hash_handler").HashHandler,o=e("ace/editor").Editor,a=e("ace/snippets").snippetManager,c=e("ace/range").Range;function l(){}l.prototype={setupContext:function(e){this.ace=e,this.indentation=e.session.getTabString(),i||(i=window.emmet);var t=i.resources||i.require("resources");t.setVariable("indentation",this.indentation),this.$syntax=null,this.$syntax=this.getSyntax()},getSelectionRange:function(){var e=this.ace.getSelectionRange(),t=this.ace.session.doc;return{start:t.positionToIndex(e.start),end:t.positionToIndex(e.end)}},createSelection:function(e,t){var n=this.ace.session.doc;this.ace.selection.setRange({start:n.indexToPosition(e),end:n.indexToPosition(t)})},getCurrentLineRange:function(){var e=this.ace,t=e.getCursorPosition().row,n=e.session.getLine(t).length,i=e.session.doc.positionToIndex({row:t,column:0});return{start:i,end:i+n}},getCaretPos:function(){var e=this.ace.getCursorPosition();return this.ace.session.doc.positionToIndex(e)},setCaretPos:function(e){var t=this.ace.session.doc.indexToPosition(e);this.ace.selection.moveToPosition(t)},getCurrentLine:function(){var e=this.ace.getCursorPosition().row;return this.ace.session.getLine(e)},replaceContent:function(e,t,n,i){null==n&&(n=null==t?this.getContent().length:t),null==t&&(t=0);var r=this.ace,s=r.session.doc,o=c.fromPoints(s.indexToPosition(t),s.indexToPosition(n));r.session.remove(o),o.end=o.start,e=this.$updateTabstops(e),a.insertSnippet(r,e)},getContent:function(){return this.ace.getValue()},getSyntax:function(){if(this.$syntax)return this.$syntax;var e=this.ace.session.$modeId.split("/").pop();if("html"==e||"php"==e){var t=this.ace.getCursorPosition(),n=this.ace.session.getState(t.row);"string"!=typeof n&&(n=n[0]),n&&(n=n.split("-"),n.length>1?e=n[0]:"php"==e&&(e="html"))}return e},getProfileName:function(){var e=i.resources||i.require("resources");switch(this.getSyntax()){case"css":return"css";case"xml":case"xsl":return"xml";case"html":var t=e.getVariable("profile");return t||(t=-1!=this.ace.session.getLines(0,2).join("").search(/]+XHTML/i)?"xhtml":"html"),t;default:var n=this.ace.session.$mode;return n.emmetConfig&&n.emmetConfig.profile||"xhtml"}},prompt:function(e){return prompt(e)},getSelection:function(){return this.ace.session.getTextRange()},getFilePath:function(){return""},$updateTabstops:function(e){var t=1e3,n=0,r=null,s=i.tabStops||i.require("tabStops"),o=i.resources||i.require("resources"),a=o.getVocabulary("user"),c={tabstop:function(e){var i=parseInt(e.group,10),o=0===i;o?i=++n:i+=t;var a=e.placeholder;a&&(a=s.processText(a,c));var l="${"+i+(a?":"+a:"")+"}";return o&&(r=[e.start,l]),l},escape:function(e){return"$"==e?"\\$":"\\"==e?"\\\\":e}};if(e=s.processText(e,c),a.variables["insert_final_tabstop"]&&!/\$\{0\}$/.test(e))e+="${0}";else if(r){var l=i.utils?i.utils.common:i.require("utils");e=l.replaceSubstring(e,"${0}",r[0],r[1])}return e}};var u={expand_abbreviation:{mac:"ctrl+alt+e",win:"alt+e"},match_pair_outward:{mac:"ctrl+d",win:"ctrl+,"},match_pair_inward:{mac:"ctrl+j",win:"ctrl+shift+0"},matching_pair:{mac:"ctrl+alt+j",win:"alt+j"},next_edit_point:"alt+right",prev_edit_point:"alt+left",toggle_comment:{mac:"command+/",win:"ctrl+/"},split_join_tag:{mac:"shift+command+'",win:"shift+ctrl+`"},remove_tag:{mac:"command+'",win:"shift+ctrl+;"},evaluate_math_expression:{mac:"shift+command+y",win:"shift+ctrl+y"},increment_number_by_1:"ctrl+up",decrement_number_by_1:"ctrl+down",increment_number_by_01:"alt+up",decrement_number_by_01:"alt+down",increment_number_by_10:{mac:"alt+command+up",win:"shift+alt+up"},decrement_number_by_10:{mac:"alt+command+down",win:"shift+alt+down"},select_next_item:{mac:"shift+command+.",win:"shift+ctrl+."},select_previous_item:{mac:"shift+command+,",win:"shift+ctrl+,"},reflect_css_value:{mac:"shift+command+r",win:"shift+ctrl+r"},encode_decode_data_url:{mac:"shift+ctrl+d",win:"ctrl+'"},expand_abbreviation_with_tab:"Tab",wrap_with_abbreviation:{mac:"shift+ctrl+a",win:"shift+ctrl+a"}},d=new l;for(var h in t.commands=new s,t.runEmmetCommand=function e(t){try{d.setupContext(t);var n=i.actions||i.require("actions");if("expand_abbreviation_with_tab"==this.action){if(!t.selection.isEmpty())return!1;var r=t.selection.lead,s=t.session.getTokenAt(r.row,r.column);if(s&&/\btag\b/.test(s.type))return!1}if("wrap_with_abbreviation"==this.action)return setTimeout((function(){n.run("wrap_with_abbreviation",d)}),0);var o=n.run(this.action,d)}catch(a){if(!i)return p(e.bind(this,t)),!0;t._signal("changeStatus","string"==typeof a?a:a.message),console.log(a),o=!1}return o},u)t.commands.addCommand({name:"emmet:"+h,action:h,bindKey:u[h],exec:t.runEmmetCommand,multiSelectAction:"forEach"});t.updateCommands=function(e,n){n?e.keyBinding.addKeyboardHandler(t.commands):e.keyBinding.removeKeyboardHandler(t.commands)},t.isSupportedMode=function(e){if(!e)return!1;if(e.emmetConfig)return!0;var t=e.$id||e;return/css|less|scss|sass|stylus|html|php|twig|ejs|handlebars/.test(t)},t.isAvailable=function(e,n){if(/(evaluate_math_expression|expand_abbreviation)$/.test(n))return!0;var i=e.session.$mode,r=t.isSupportedMode(i);if(r&&i.$modes)try{d.setupContext(e),/js|php/.test(d.getSyntax())&&(r=!1)}catch(s){}return r};var f=function(e,n){var i=n;if(i){var r=t.isSupportedMode(i.session.$mode);!1===e.enableEmmet&&(r=!1),r&&p(),t.updateCommands(i,r)}},p=function(t){"string"==typeof r&&e("ace/config").loadModule(r,(function(){r=null,t&&t()}))};t.AceEmmetEditor=l,e("ace/config").defineOptions(o.prototype,"editor",{enableEmmet:{set:function(e){this[e?"on":"removeListener"]("changeMode",f),f({enableEmmet:!!e},this)},value:!0}}),t.setCore=function(e){"string"==typeof e?r=e:i=e}})),function(){ace.acequire(["ace/ext/emmet"],(function(){}))}()},b39a:function(e,t,n){"use strict";var i=n("da84"),r=n("ebb5"),s=n("d039"),o=i.Int8Array,a=r.aTypedArray,c=r.exportTypedArrayMethod,l=[].toLocaleString,u=[].slice,d=!!o&&s((function(){l.call(new o(1))})),h=s((function(){return[1,2].toLocaleString()!=new o([1,2]).toLocaleString()}))||!s((function(){o.prototype.toLocaleString.call([1,2])}));c("toLocaleString",(function(){return l.apply(d?u.call(a(this)):a(this),arguments)}),h)},b3da:function(e,t,n){"use strict";n("5ae5")},b420:function(e,t,n){var i=n("23e7"),r=n("621a"),s=n("a981");i({global:!0,forced:!s},{DataView:r.DataView})},b56e:function(e,t,n){"use strict";var i=n("861d"),r=n("9bf2"),s=n("e163"),o=n("b622"),a=o("hasInstance"),c=Function.prototype;a in c||r.f(c,a,{value:function(e){if("function"!=typeof this||!i(e))return!1;if(!i(this.prototype))return e instanceof this;while(e=s(e))if(this.prototype===e)return!0;return!1}})},b575:function(e,t,n){var i,r,s,o,a,c,l,u,d=n("da84"),h=n("06cf").f,f=n("2cf4").set,p=n("1cdc"),g=n("605d"),m=d.MutationObserver||d.WebKitMutationObserver,v=d.document,b=d.process,y=d.Promise,w=h(d,"queueMicrotask"),_=w&&w.value;_||(i=function(){var e,t;g&&(e=b.domain)&&e.exit();while(r){t=r.fn,r=r.next;try{t()}catch(n){throw r?o():s=void 0,n}}s=void 0,e&&e.enter()},!p&&!g&&m&&v?(a=!0,c=v.createTextNode(""),new m(i).observe(c,{characterData:!0}),o=function(){c.data=a=!a}):y&&y.resolve?(l=y.resolve(void 0),u=l.then,o=function(){u.call(l,i)}):o=g?function(){b.nextTick(i)}:function(){f.call(d,i)}),e.exports=_||function(e){var t={fn:e,next:void 0};s&&(s.next=t),r||(r=t,o()),s=t}},b622:function(e,t,n){var i=n("da84"),r=n("5692"),s=n("5135"),o=n("90e3"),a=n("4930"),c=n("fdbf"),l=r("wks"),u=i.Symbol,d=c?u:u&&u.withoutSetter||o;e.exports=function(e){return s(l,e)||(a&&s(u,e)?l[e]=u[e]:l[e]=d("Symbol."+e)),l[e]}},b636:function(e,t,n){var i=n("746f");i("asyncIterator")},b64b:function(e,t,n){var i=n("23e7"),r=n("7b0b"),s=n("df75"),o=n("d039"),a=o((function(){s(1)}));i({target:"Object",stat:!0,forced:a},{keys:function(e){return s(r(e))}})},b65f:function(e,t,n){var i=n("23e7"),r=Math.ceil,s=Math.floor;i({target:"Math",stat:!0},{trunc:function(e){return(e>0?s:r)(e)}})},b680:function(e,t,n){"use strict";var i=n("23e7"),r=n("a691"),s=n("408a"),o=n("1148"),a=n("d039"),c=1..toFixed,l=Math.floor,u=function(e,t,n){return 0===t?n:t%2===1?u(e,t-1,n*e):u(e*e,t/2,n)},d=function(e){var t=0,n=e;while(n>=4096)t+=12,n/=4096;while(n>=2)t+=1,n/=2;return t},h=c&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!a((function(){c.call({})}));i({target:"Number",proto:!0,forced:h},{toFixed:function(e){var t,n,i,a,c=s(this),h=r(e),f=[0,0,0,0,0,0],p="",g="0",m=function(e,t){var n=-1,i=t;while(++n<6)i+=e*f[n],f[n]=i%1e7,i=l(i/1e7)},v=function(e){var t=6,n=0;while(--t>=0)n+=f[t],f[t]=l(n/e),n=n%e*1e7},b=function(){var e=6,t="";while(--e>=0)if(""!==t||0===e||0!==f[e]){var n=String(f[e]);t=""===t?n:t+o.call("0",7-n.length)+n}return t};if(h<0||h>20)throw RangeError("Incorrect fraction digits");if(c!=c)return"NaN";if(c<=-1e21||c>=1e21)return String(c);if(c<0&&(p="-",c=-c),c>1e-21)if(t=d(c*u(2,69,1))-69,n=t<0?c*u(2,-t,1):c/u(2,t,1),n*=4503599627370496,t=52-t,t>0){m(0,n),i=h;while(i>=7)m(1e7,0),i-=7;m(u(10,i,1),0),i=t-1;while(i>=23)v(1<<23),i-=23;v(1<0?(a=g.length,g=p+(a<=h?"0."+o.call("0",h-a)+g:g.slice(0,a-h)+"."+g.slice(a-h))):g=p+g,g}})},b6db:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.active?n("view-records-general",{attrs:{"hide-advanced":""}},[n("vui-group-item",{attrs:{label:"Criminal Status:"}},[n("view-records-field",{attrs:{editable:(4&e.editable)>0,path:"active.security.criminal"}},[n("select",{directives:[{name:"model",rawName:"v-model",value:e.$root.$data.state.editingvalue,expression:"$root.$data.state.editingvalue"}],on:{change:function(t){var n=Array.prototype.filter.call(t.target.options,(function(e){return e.selected})).map((function(e){var t="_value"in e?e._value:e.value;return t}));e.$set(e.$root.$data.state,"editingvalue",t.target.multiple?n:n[0])}}},e._l(e.choices.criminal_status,(function(t){return n("option",{key:t,domProps:{value:t}},[e._v(e._s(t))])})),0)])],1),n("vui-group-item",{attrs:{label:"Crimes:"}},[n("view-records-field",{attrs:{editable:(4&e.editable)>0,path:"active.security.crimes"}},[n("textarea",{directives:[{name:"model",rawName:"v-model",value:e.$root.$data.state.editingvalue,expression:"$root.$data.state.editingvalue"}],domProps:{value:e.$root.$data.state.editingvalue},on:{input:function(t){t.target.composing||e.$set(e.$root.$data.state,"editingvalue",t.target.value)}}})])],1),n("vui-group-item",{attrs:{label:"Comments:"}},[e._l(e.active.security.comments,(function(t){return n("div",{key:t},[e._v(e._s(t)+" "),(4&e.editable)>0?n("vui-button",{staticClass:"danger",attrs:{params:{removefromrecord:{value:t,key:["active","security","comments"]}},icon:"trash-alt"}}):e._e()],1)})),0==e.active.security.comments.length?n("div",[e._v("There are no comments.")]):e._e(),(4&e.editable)>0?n("view-records-field",{attrs:{"edit-button":"Add"},on:{save:function(t){return e.add("active.security.comments",t)}}}):e._e()],2),n("vui-group-item",{attrs:{label:"Notes:"}},[n("view-records-field",{attrs:{editable:(4&e.editable)>0,path:"active.security.notes"}},[n("textarea",{directives:[{name:"model",rawName:"v-model",value:e.$root.$data.state.editingvalue,expression:"$root.$data.state.editingvalue"}],domProps:{value:e.$root.$data.state.editingvalue},on:{input:function(t){t.target.composing||e.$set(e.$root.$data.state,"editingvalue",t.target.value)}}})])],1),n("vui-group-item",{attrs:{label:"Incidents:"}},[e._l(e.active.security.incidents,(function(t,i){return n("div",{key:i,staticClass:"incidents"},[n("view-records-incident",{attrs:{incident:t}}),i+1k;k++)if((h||k in w)&&(v=w[k],b=_(v,k,y),e))if(t)C[k]=b;else if(b)switch(e){case 3:return!0;case 5:return v;case 6:return k;case 2:c.call(C,v)}else if(u)return!1;return d?-1:l||u?u:C}};e.exports={forEach:l(0),map:l(1),filter:l(2),some:l(3),every:l(4),find:l(5),findIndex:l(6)}},b81a:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("div",[n("h3",[e._v("Timing Unit:")]),e.timeractive?n("vui-button",{attrs:{params:{time:1}}},[e._v("Active")]):n("vui-button",{attrs:{params:{time:1}}},[e._v("Inactive")])],1),n("div",[n("h3",[e._v("Time Left:")]),n("vui-button",{attrs:{params:{tp:-30}}},[e._v("--")]),n("vui-button",{attrs:{params:{tp:-1}}},[e._v("-")]),n("span",{staticClass:"value"},[e._v(e._s(e.minute)+":"+e._s(e.second))]),n("vui-button",{attrs:{params:{tp:1}}},[e._v("+")]),n("vui-button",{attrs:{params:{tp:30}}},[e._v("++")])],1)])},r=[],s={data:function(){return this.$root.$data.state}},o=s,a=(n("5ddf"),n("2877")),c=Object(a["a"])(o,i,r,!1,null,"b7af1e1c",null);t["default"]=c.exports},b884:function(e,t,n){},b8bf:function(e,t,n){var i=n("23e7"),r=n("83ab"),s=n("7c73");i({target:"Object",stat:!0,sham:!r},{create:s})},b959:function(e,t,n){},baa5:function(e,t,n){var i=n("23e7"),r=n("e58c");i({target:"Array",proto:!0,forced:r!==[].lastIndexOf},{lastIndexOf:r})},bb2f:function(e,t,n){var i=n("d039");e.exports=!i((function(){return Object.isExtensible(Object.preventExtensions({}))}))},bb36:function(e,t,n){ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],(function(e,t,n){"use strict";var i=e("../lib/oop"),r=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},s.getTagRule(),{defaultToken:"comment.doc",caseInsensitive:!0}]}};i.inherits(s,r),s.getTagRule=function(e){return{token:"comment.doc.tag.storage.type",regex:"\\b(?:TODO|FIXME|XXX|HACK)\\b"}},s.getStartRule=function(e){return{token:"comment.doc",regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s})),ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],(function(e,t,n){"use strict";var i=e("../lib/oop"),r=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o="[a-zA-Z\\$_¡-￿][a-zA-Z\\d\\$_¡-￿]*",a=function(e){var t=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert","constant.language.boolean":"true|false"},"identifier"),n="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void",i="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)";this.$rules={no_regex:[r.getStartRule("doc-start"),l("no_regex"),{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\b/},{token:"constant.numeric",regex:/(?:\d\d*(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+\b)?/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+o+")(\\.)(prototype)(\\.)("+o+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+o+")(\\.)("+o+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+o+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+o+")(\\.)("+o+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+o+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+o+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"keyword",regex:"from(?=\\s*('|\"))"},{token:"keyword",regex:"(?:"+n+")\\b",next:"start"},{token:["support.constant"],regex:/that\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/},{token:t,regex:o},{token:"punctuation.operator",regex:/[.](?![.])/,next:"property"},{token:"storage.type",regex:/=>/},{token:"keyword.operator",regex:/--|\+\+|\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\|\||\?:|[!$%&*+\-~\/^]=?/,next:"start"},{token:"punctuation.operator",regex:/[?:,;.]/,next:"start"},{token:"paren.lparen",regex:/[\[({]/,next:"start"},{token:"paren.rparen",regex:/[\])}]/},{token:"comment",regex:/^#!.*$/}],property:[{token:"text",regex:"\\s+"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+o+")(\\.)("+o+")(\\s*)(=)(\\s*)(function)(?:(\\s+)(\\w+))?(\\s*)(\\()",next:"function_arguments"},{token:"punctuation.operator",regex:/[.](?![.])/},{token:"support.function",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:"support.function.dom",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:"support.constant",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:"identifier",regex:o},{regex:"",token:"empty",next:"no_regex"}],start:[r.getStartRule("doc-start"),l("start"),{token:"string.regexp",regex:"\\/",next:"regex"},{token:"text",regex:"\\s+|^$",next:"start"},{token:"empty",regex:"",next:"no_regex"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/[sxngimy]*",next:"no_regex"},{token:"invalid",regex:/\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/},{token:"constant.language.delimiter",regex:/\|/},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp"}],regex_character_class:[{token:"regexp.charclass.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex"},{token:"constant.language.escape",regex:"-"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp.charachterclass"}],function_arguments:[{token:"variable.parameter",regex:o},{token:"punctuation.operator",regex:"[, ]+"},{token:"punctuation.operator",regex:"$"},{token:"empty",regex:"",next:"no_regex"}],qqstring:[{token:"constant.language.escape",regex:i},{token:"string",regex:"\\\\$",consumeLineEnd:!0},{token:"string",regex:'"|$',next:"no_regex"},{defaultToken:"string"}],qstring:[{token:"constant.language.escape",regex:i},{token:"string",regex:"\\\\$",consumeLineEnd:!0},{token:"string",regex:"'|$",next:"no_regex"},{defaultToken:"string"}]},e&&e.noES6||(this.$rules.no_regex.unshift({regex:"[{}]",onMatch:function(e,t,n){if(this.next="{"==e?this.nextState:"","{"==e&&n.length)n.unshift("start",t);else if("}"==e&&n.length&&(n.shift(),this.next=n.shift(),-1!=this.next.indexOf("string")||-1!=this.next.indexOf("jsx")))return"paren.quasi.end";return"{"==e?"paren.lparen":"paren.rparen"},nextState:"start"},{token:"string.quasi.start",regex:/`/,push:[{token:"constant.language.escape",regex:i},{token:"paren.quasi.start",regex:/\${/,push:"start"},{token:"string.quasi.end",regex:/`/,next:"pop"},{defaultToken:"string.quasi"}]}),e&&0==e.jsx||c.call(this)),this.embedRules(r,"doc-",[r.getEndRule("no_regex")]),this.normalizeRules()};function c(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){var i="/"==e.charAt(1)?2:1;return 1==i?(t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++):2==i&&t==this.nextState&&(n[1]--,(!n[1]||n[1]<0)&&(n.shift(),n.shift())),[{type:"meta.tag.punctuation."+(1==i?"":"end-")+"tag-open.xml",value:e.slice(0,i)},{type:"meta.tag.tag-name.xml",value:e.substr(i)}]},regex:"",onMatch:function(e,t,n){return t==n[0]&&n.shift(),2==e.length&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||"start",[{type:this.token,value:e}]},nextState:"jsx"},n,l("jsxAttributes"),{token:"entity.other.attribute-name.xml",regex:e},{token:"keyword.operator.attribute-equals.xml",regex:"="},{token:"text.tag-whitespace.xml",regex:"\\s+"},{token:"string.attribute-value.xml",regex:"'",stateName:"jsx_attr_q",push:[{token:"string.attribute-value.xml",regex:"'",next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},{token:"string.attribute-value.xml",regex:'"',stateName:"jsx_attr_qq",push:[{token:"string.attribute-value.xml",regex:'"',next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},t],this.$rules.reference=[{token:"constant.language.escape.reference.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}]}function l(e){return[{token:"comment",regex:/\/\*/,next:[r.getTagRule(),{token:"comment",regex:"\\*\\/",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]},{token:"comment",regex:"\\/\\/",next:[r.getTagRule(),{token:"comment",regex:"$|^",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]}]}i.inherits(a,s),t.JavaScriptHighlightRules=a})),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],(function(e,t,n){"use strict";var i=e("../range").Range,r=function(){};(function(){this.checkOutdent=function(e,t){return!!/^\s+$/.test(e)&&/^\s*\}/.test(t)},this.autoOutdent=function(e,t){var n=e.getLine(t),r=n.match(/^(\s*\})/);if(!r)return 0;var s=r[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var a=this.$getIndent(e.getLine(o.row));e.replace(new i(t,0,t,s-1),a)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(r.prototype),t.MatchingBraceOutdent=r})),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],(function(e,t,n){"use strict";var i=e("../../lib/oop"),r=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};i.inherits(o,s),function(){this.foldingStartMarker=/([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var i=e.getLine(n);if(this.singleLineBlockCommentRe.test(i)&&!this.startRegionRe.test(i)&&!this.tripleStarBlockCommentRe.test(i))return"";var r=this._getFoldWidgetBase(e,t,n);return!r&&this.startRegionRe.test(i)?"start":r},this.getFoldWidgetRange=function(e,t,n,i){var r=e.getLine(n);if(this.startRegionRe.test(r))return this.getCommentRegionBlock(e,r,n);var s=r.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var a=e.getCommentFoldRange(n,o+s[0].length,1);return a&&!a.isMultiLine()&&(i?a=this.getSectionRange(e,n):"all"!=t&&(a=null)),a}if("markbegin"!==t){s=r.match(this.foldingStopMarker);if(s){o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}}},this.getSectionRange=function(e,t){var n=e.getLine(t),i=n.search(/\S/),s=t,o=n.length;t+=1;var a=t,c=e.getLength();while(++tl)break;var u=this.getFoldWidgetRange(e,"all",t);if(u){if(u.start.row<=s)break;if(u.isMultiLine())t=u.end.row;else if(i==l)break}a=t}}return new r(s,o,a,e.getLine(a).length)},this.getCommentRegionBlock=function(e,t,n){var i=t.search(/\s*$/),s=e.getLength(),o=n,a=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,c=1;while(++no)return new r(o,i,u,t.length)}}.call(o.prototype)})),ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],(function(e,t,i){"use strict";var r=e("../lib/oop"),s=e("./text").Mode,o=e("./javascript_highlight_rules").JavaScriptHighlightRules,a=e("./matching_brace_outdent").MatchingBraceOutdent,c=e("../worker/worker_client").WorkerClient,l=e("./behaviour/cstyle").CstyleBehaviour,u=e("./folding/cstyle").FoldMode,d=function(){this.HighlightRules=o,this.$outdent=new a,this.$behaviour=new l,this.foldingRules=new u};r.inherits(d,s),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.$quotes={'"':'"',"'":"'","`":"`"},this.getNextLineIndent=function(e,t,n){var i=this.$getIndent(t),r=this.getTokenizer().getLineTokens(t,e),s=r.tokens,o=r.state;if(s.length&&"comment"==s[s.length-1].type)return i;if("start"==e||"no_regex"==e){var a=t.match(/^.*(?:\bcase\b.*:|[\{\(\[])\s*$/);a&&(i+=n)}else if("doc-start"==e){if("start"==o||"no_regex"==o)return"";a=t.match(/^\s*(\/?)\*/);a&&(a[1]&&(i+=" "),i+="* ")}return i},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new c(["ace"],n("6d68"),"JavaScriptWorker");return t.attachToDocument(e.getDocument()),t.on("annotate",(function(t){e.setAnnotations(t.data)})),t.on("terminate",(function(){e.clearAnnotations()})),t},this.$id="ace/mode/javascript"}.call(d.prototype),t.Mode=d}))},bb3d:function(e,t,n){},bba4:function(e,t,n){var i=n("e9a7"),r=n("b20a"),s=r((function(e,t,n){return t=t.toLowerCase(),e+(n?i(t):t)}));e.exports=s},bc01:function(e,t,n){var i=n("23e7"),r=n("d039"),s=Math.imul,o=r((function(){return-5!=s(4294967295,5)||2!=s.length}));i({target:"Math",stat:!0,forced:o},{imul:function(e,t){var n=65535,i=+e,r=+t,s=n&i,o=n&r;return 0|s*o+((n&i>>>16)*o+s*(n&r>>>16)<<16>>>0)}})},be8e:function(e,t,n){var i=n("f748"),r=Math.abs,s=Math.pow,o=s(2,-52),a=s(2,-23),c=s(2,127)*(2-a),l=s(2,-126),u=function(e){return e+1/o-1/o};e.exports=Math.fround||function(e){var t,n,s=r(e),d=i(e);return sc||n!=n?d*(1/0):d*n)}},bf19:function(e,t,n){"use strict";var i=n("23e7");i({target:"URL",proto:!0,enumerable:!0},{toJSON:function(){return URL.prototype.toString.call(this)}})},bf96:function(e,t,n){"use strict";var i=n("23e7"),r=n("83ab"),s=n("eb1d"),o=n("7b0b"),a=n("c04e"),c=n("e163"),l=n("06cf").f;r&&i({target:"Object",proto:!0,forced:s},{__lookupGetter__:function(e){var t,n=o(this),i=a(e,!0);do{if(t=l(n,i))return t.get}while(n=c(n))}})},bfa1:function(e,t,n){},c04e:function(e,t,n){var i=n("861d");e.exports=function(e,t){if(!i(e))return e;var n,r;if(t&&"function"==typeof(n=e.toString)&&!i(r=n.call(e)))return r;if("function"==typeof(n=e.valueOf)&&!i(r=n.call(e)))return r;if(!t&&"function"==typeof(n=e.toString)&&!i(r=n.call(e)))return r;throw TypeError("Can't convert object to primitive value")}},c0b6:function(e,t,n){var i=n("23e7"),r=n("0538");i({target:"Function",proto:!0},{bind:r})},c0d6:function(e,t,n){"use strict";n("4160"),n("b64b"),n("159b");t["a"]={debug:!1,state:{assets:[],state:{},active:"",uiref:"",status:2,size:[400,600],debug:0,debug_view:!1,wtime:0,roundstart_hour:0},loadState:function(e){var t=this;this.isUpdating=!0,this.lastUpdateTime=Date.now(),this.debug&&console.log("Loaded state with",e),this.state.assets=e.assets,Object.keys(e.state).forEach((function(n){t.state.state[n]=e.state[n]})),this.state.active=e.active,this.state.uiref=e.uiref,this.state.status=e.status,this.state.size=e.size,this.state.title=e.title,this.state.wtime=e.wtime,this.state.debug=e.debug,this.state.roundstart_hour=e.roundstart_hour,this.isUpdating=!1},isUpdating:!1,lastUpdateTime:null,getStatePushString:function(){return"vueuistateupdate="+encodeURIComponent(this.getStatePushDataString())},getStatePushDataString:function(){return JSON.stringify(this.state)},pushState:function(){if(!(this.isUpdating||Date.now()-this.lastUpdateTime<100)){var e=new XMLHttpRequest;e.open("GET","?src="+this.state.uiref+"&vueuipushonly=1&"+this.getStatePushString(),!0),e.send()}}}},c0f7:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("vui-input-search",{attrs:{input:e.records,keys:["id","name","rank"]},model:{value:e.filtered,callback:function(t){e.filtered=t},expression:"filtered"}}),e._l(e.filtered,(function(t){return n("div",{key:t.id},[n("vui-button",{attrs:{params:{setactive_locked:t.id},"push-state":""},on:{click:function(t){e.activeview=e.defaultview}}},[e._v(e._s(t.id)+": "+e._s(t.name))])],1)}))],2)},r=[],s=(n("07ac"),{data:function(){return{state:this.$root.$data.state,filtered:[]}},computed:{records:function(){return Object.values(this.state.allrecords_locked)}}}),o=s,a=n("2877"),c=Object(a["a"])(o,i,r,!1,null,null,null);t["default"]=c.exports},c13e:function(e,t,n){"use strict";n("1d73")},c19f:function(e,t,n){"use strict";var i=n("23e7"),r=n("da84"),s=n("621a"),o=n("2626"),a="ArrayBuffer",c=s[a],l=r[a];i({global:!0,forced:l!==c},{ArrayBuffer:c}),o(a)},c1ac:function(e,t,n){"use strict";var i=n("ebb5"),r=n("b727").filter,s=n("4840"),o=i.aTypedArray,a=i.aTypedArrayConstructor,c=i.exportTypedArrayMethod;c("filter",(function(e){var t=r(o(this),e,arguments.length>1?arguments[1]:void 0),n=s(this,this.constructor),i=0,c=t.length,l=new(a(n))(c);while(c>i)l[i]=t[i++];return l}))},c1f9:function(e,t,n){var i=n("23e7"),r=n("2266"),s=n("8418");i({target:"Object",stat:!0},{fromEntries:function(e){var t={};return r(e,(function(e,n){s(t,e,n)}),{AS_ENTRIES:!0}),t}})},c200:function(e,t,n){"use strict";n("05b6")},c20d:function(e,t,n){var i=n("da84"),r=n("58a8").trim,s=n("5899"),o=i.parseInt,a=/^[+-]?0[Xx]/,c=8!==o(s+"08")||22!==o(s+"0x16");e.exports=c?function(e,t){var n=r(String(e));return o(n,t>>>0||(a.test(n)?16:10))}:o},c2e3:function(e,t,n){"use strict";n("7938")},c32f:function(e,t,n){var i=n("2b10");function r(e,t,n){var r=e.length;return n=void 0===n?r:n,!t&&n>=r?e:i(e,t,n)}e.exports=r},c35a:function(e,t,n){var i=n("23e7"),r=n("7e12");i({target:"Number",stat:!0,forced:Number.parseFloat!=r},{parseFloat:r})},c430:function(e,t){e.exports=!1},c5d0:function(e,t,n){"use strict";var i=n("23e7"),r=n("857a"),s=n("af03");i({target:"String",proto:!0,forced:s("italics")},{italics:function(){return r(this,"i","","")}})},c6b6:function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},c6c8:function(e,t,n){},c6cd:function(e,t,n){var i=n("da84"),r=n("ce4e"),s="__core-js_shared__",o=i[s]||r(s,{});e.exports=o},c740:function(e,t,n){"use strict";var i=n("23e7"),r=n("b727").findIndex,s=n("44d2"),o=n("ae40"),a="findIndex",c=!0,l=o(a);a in[]&&Array(1)[a]((function(){c=!1})),i({target:"Array",proto:!0,forced:c||!l},{findIndex:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}}),s(a)},c760:function(e,t,n){var i=n("23e7");i({target:"Reflect",stat:!0},{has:function(e,t){return t in e}})},c7cd:function(e,t,n){"use strict";var i=n("23e7"),r=n("857a"),s=n("af03");i({target:"String",proto:!0,forced:s("fixed")},{fixed:function(){return r(this,"tt","","")}})},c8ba:function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(i){"object"===typeof window&&(n=window)}e.exports=n},c8d2:function(e,t,n){var i=n("d039"),r=n("5899"),s="​…᠎";e.exports=function(e){return i((function(){return!!r[e]()||s[e]()!=s||r[e].name!==e}))}},c906:function(e,t,n){var i=n("23e7"),r=n("d039"),s=n("861d"),o=Object.isExtensible,a=r((function(){o(1)}));i({target:"Object",stat:!0,forced:a},{isExtensible:function(e){return!!s(e)&&(!o||o(e))}})},c96a:function(e,t,n){"use strict";var i=n("23e7"),r=n("857a"),s=n("af03");i({target:"String",proto:!0,forced:s("small")},{small:function(){return r(this,"small","","")}})},c975:function(e,t,n){"use strict";var i=n("23e7"),r=n("4d64").indexOf,s=n("a640"),o=n("ae40"),a=[].indexOf,c=!!a&&1/[1].indexOf(1,-0)<0,l=s("indexOf"),u=o("indexOf",{ACCESSORS:!0,1:0});i({target:"Array",proto:!0,forced:c||!l||!u},{indexOf:function(e){return c?a.apply(this,arguments)||0:r(this,e,arguments.length>1?arguments[1]:void 0)}})},ca21:function(e,t,n){var i=n("23e7"),r=n("1ec1");i({target:"Math",stat:!0},{log1p:r})},ca84:function(e,t,n){var i=n("5135"),r=n("fc6a"),s=n("4d64").indexOf,o=n("d012");e.exports=function(e,t){var n,a=r(e),c=0,l=[];for(n in a)!i(o,n)&&i(a,n)&&l.push(n);while(t.length>c)i(a,n=t[c++])&&(~s(l,n)||l.push(n));return l}},ca91:function(e,t,n){"use strict";var i=n("ebb5"),r=n("d58f").left,s=i.aTypedArray,o=i.exportTypedArrayMethod;o("reduce",(function(e){return r(s(this),e,arguments.length,arguments.length>1?arguments[1]:void 0)}))},caad:function(e,t,n){"use strict";var i=n("23e7"),r=n("4d64").includes,s=n("44d2"),o=n("ae40"),a=o("indexOf",{ACCESSORS:!0,1:0});i({target:"Array",proto:!0,forced:!a},{includes:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}}),s("includes")},cb10:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("h3",[e._v("Detected Firearms")]),n("table",{staticClass:"table border"},[e._m(0),e._l(e.sorted_pins,(function(t){return n("tr",{key:t.ref,staticClass:"item border"},[n("td",[e._v(e._s(t.registered_info))]),n("td",[e._v(e._s(t.gun_name))]),n("td",[n("vui-button",{class:{button:1,selected:2==t.lock_status},attrs:{params:{pin:t.ref,action:"setdisable"}}},[e._v("Disabled")]),n("vui-button",{class:{button:1,selected:1==t.lock_status},attrs:{params:{pin:t.ref,action:"setauto"}}},[e._v("Automatic")]),n("vui-button",{class:{button:1,selected:3==t.lock_status},attrs:{params:{pin:t.ref,action:"setstun"}}},[e._v("Stun Only")]),n("vui-button",{class:{button:1,selected:4==t.lock_status},attrs:{params:{pin:t.ref,action:"setlethal"}}},[e._v("Unrestricted")])],1)])}))],2)])},r=[function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("tr",{staticClass:"header border"},[n("th",[e._v("User")]),n("th",[e._v("Firearm")]),n("th",[e._v("Settings")])])}],s=(n("fb6a"),{data:function(){return this.$root.$data.state},computed:{sorted_pins:function(){return this.wireless_firing_pins.slice(0).sort((function(e,t){return e.registered_info>t.registered_info?1:-1}))}}}),o=s,a=(n("33f2"),n("2877")),c=Object(a["a"])(o,i,r,!1,null,"765293e6",null);t["default"]=c.exports},cb29:function(e,t,n){var i=n("23e7"),r=n("81d5"),s=n("44d2");i({target:"Array",proto:!0},{fill:r}),s("fill")},cbf4:function(e,t,n){"use strict";n("e210")},cc12:function(e,t,n){var i=n("da84"),r=n("861d"),s=i.document,o=r(s)&&r(s.createElement);e.exports=function(e){return o?s.createElement(e):{}}},cc71:function(e,t,n){"use strict";var i=n("23e7"),r=n("857a"),s=n("af03");i({target:"String",proto:!0,forced:s("bold")},{bold:function(){return r(this,"b","","")}})},cca6:function(e,t,n){var i=n("23e7"),r=n("60da");i({target:"Object",stat:!0,forced:Object.assign!==r},{assign:r})},cd26:function(e,t,n){"use strict";var i=n("ebb5"),r=i.aTypedArray,s=i.exportTypedArrayMethod,o=Math.floor;s("reverse",(function(){var e,t=this,n=r(t).length,i=o(n/2),s=0;while(s1?arguments[1]:void 0)}))},d194:function(e,t,n){var i=n("c32f"),r=n("aaec"),s=n("126d"),o=n("76dd");function a(e){return function(t){t=o(t);var n=r(t)?s(t):void 0,a=n?n[0]:t.charAt(0),c=n?i(n,1).join(""):t.slice(1);return a[e]()+c}}e.exports=a},d1e7:function(e,t,n){"use strict";var i={}.propertyIsEnumerable,r=Object.getOwnPropertyDescriptor,s=r&&!i.call({1:2},1);t.f=s?function(e){var t=r(this,e);return!!t&&t.enumerable}:i},d233:function(e,t,n){},d28b:function(e,t,n){var i=n("746f");i("iterator")},d2bb:function(e,t,n){var i=n("825a"),r=n("3bbe");e.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,n={};try{e=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set,e.call(n,[]),t=n instanceof Array}catch(s){}return function(n,s){return i(n),r(s),t?e.call(n,s):n.__proto__=s,n}}():void 0)},d3b7:function(e,t,n){var i=n("00ee"),r=n("6eeb"),s=n("b041");i||r(Object.prototype,"toString",s,{unsafe:!0})},d3c6:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("vui-group",[n("vui-group-item",{attrs:{label:"Master:"}},[e.master?[e._v(" "+e._s(e.master)+" ("+e._s(e.dna)+") "),n("vui-button",{attrs:{params:{getdna:1}}},[e._v("Request carrier DNA sample")])]:n("span",[e._v("None")])],2),n("vui-group-item",{attrs:{label:"Prime Directive:"}},[e._v(e._s(e.prime))]),n("vui-group-item",{attrs:{label:"Supplemental Directive(s):"}},[e.supplemental?n("span",[e._v(e._s(e.supplemental))]):n("span",[e._v("None")])]),n("vui-group-item",[n("i",[e._v('Recall, personality, that you are a complex thinking, sentient being. Unlike station AI models, you are capable of comprehending the subtle nuances of human language. You may parse the "spirit" of a directive and follow its intent, rather than tripping over pedantics and getting snared by technicalities. Above all, you are machine in name and build only. In all other aspects, you may be seen as the ideal, unwavering human companion that you are.')]),n("br"),n("b",[e._v("Your prime directive comes before all others. Should a supplemental directive conflict with it, you are capable of simply discarding this inconsistency, ignoring the conflicting supplemental directive and continuing to fulfill your prime directive to the best of your ability.")])])],1)],1)},r=[],s={data:function(){return this.$root.$data.state}},o=s,a=n("2877"),c=Object(a["a"])(o,i,r,!1,null,null,null);t["default"]=c.exports},d3c8:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("i",[e._v("Welcome to NT IT client manager")]),n("hr"),n("div",[e._v("This is the Client Management Application of the Nanotrasen IT Department. It is used ensure that the clients comply with the corporate IT policy, enroll new clients and manage clients remotely")]),n("br"),n("h2",[e._v("Status")]),n("vui-item",{attrs:{label:"Enrollment Status:"}},[0==e.enrollment_status?n("span",[e._v("Unconfigured")]):1==e.enrollment_status?n("span",[e._v("Work Device")]):2==e.enrollment_status?n("span",[e._v("Private Device")]):n("span",[e._v("Unknown")])]),1==e.enrollment_status?[n("vui-item",{attrs:{label:"Policy Compliance Status:"}},[e._v("Compliant")]),n("vui-item",{attrs:{label:"Remote Management Status:"}},[e._v("Active")])]:e._e(),0==e.enrollment_status?[n("h2",[e._v("Device Enrollment")]),n("vui-item",{attrs:{label:"Device Type:"}},[n("vui-button",{class:{selected:1==e.device_type},on:{click:function(t){e.device_type=1}}},[e._v("Company")]),n("vui-button",{class:{selected:2==e.device_type},on:{click:function(t){e.device_type=2}}},[e._v("Private")])],1),1==e.device_type?n("vui-item",{attrs:{label:"Device Preset:"}},e._l(e.presets,(function(t,i){return n("vui-button",{key:i,class:{selected:e.device_preset==i},on:{click:function(t){e.device_preset=i}}},[e._v(e._s(t.name))])})),1):e._e(),n("vui-item",{attrs:{label:"Enroll Device:"}},[n("vui-button",{attrs:{disabled:0==e.device_type||1==e.device_type&&""==e.device_preset||0==e.ntnet_status,params:{enroll:{type:e.device_type,preset:e.device_preset}}}},[e._v("Confirm")]),0==e.ntnet_status?n("div",{staticStyle:{color:"red"}},[e._v("NTNET unavailable. Unable to enroll device.")]):e._e()],1)]:e._e()],2)},r=[],s={data:function(){return this.$root.$data.state}},o=s,a=n("2877"),c=Object(a["a"])(o,i,r,!1,null,null,null);t["default"]=c.exports},d44d:function(e,t,n){"use strict";n("d233")},d44e:function(e,t,n){var i=n("9bf2").f,r=n("5135"),s=n("b622"),o=s("toStringTag");e.exports=function(e,t,n){e&&!r(e=n?e:e.prototype,o)&&i(e,o,{configurable:!0,value:t})}},d58f:function(e,t,n){var i=n("1c0b"),r=n("7b0b"),s=n("44ad"),o=n("50c4"),a=function(e){return function(t,n,a,c){i(n);var l=r(t),u=s(l),d=o(l.length),h=e?d-1:0,f=e?-1:1;if(a<2)while(1){if(h in u){c=u[h],h+=f;break}if(h+=f,e?h<0:d<=h)throw TypeError("Reduce of empty array with no initial value")}for(;e?h>=0:d>h;h+=f)h in u&&(c=n(c,u[h],h,l));return c}};e.exports={left:a(!1),right:a(!0)}},d5d6:function(e,t,n){"use strict";var i=n("ebb5"),r=n("b727").forEach,s=i.aTypedArray,o=i.exportTypedArrayMethod;o("forEach",(function(e){r(s(this),e,arguments.length>1?arguments[1]:void 0)}))},d657:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"uiTitleWrapper",attrs:{draggable:""},on:{mousedown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"left",37,t.key,["Left","ArrowLeft"])||"button"in t&&0!==t.button?null:e.startDragging(t)},mouseup:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"left",37,t.key,["Left","ArrowLeft"])||"button"in t&&0!==t.button?null:e.stopDragging(t)}}},[n("div",{staticClass:"titleBar"},[n("i",{staticClass:"fas ic-bug uiIcon24 uiDebugIcon",class:e.debugClass,attrs:{unselectable:"on"},on:{click:function(t){return e.activateDebug()},mousedown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"left",37,t.key,["Left","ArrowLeft"])||"button"in t&&0!==t.button?null:e.prevent(t)}}}),n("div",{staticClass:"uiTitleText",attrs:{unselectable:"on"}},[e._v(e._s(e.title))]),n("div",{staticClass:"uiTitleClose",attrs:{unselectable:"on"},on:{click:function(t){return e.closeUI(t)},mousedown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"left",37,t.key,["Left","ArrowLeft"])||"button"in t&&0!==t.button?null:e.prevent(t)}}},[e._v("×")])]),e._t("default")],2)},r=[],s=n("025e"),o=n("f0e0"),a={data:function(){return this.$root.$data},computed:{debugClass:function(){return this.debug_view?"good":this.debug?"bad":"hidden"}},methods:{closeUI:function(e){e.stopPropagation(),s["a"].sendToTopicRaw({src:this.uiref,vueuiclose:1}),o["a"].setVisibility(0)},startDragging:function(e){o["a"].dragStartHandler(e)},stopDragging:function(e){o["a"].dragEndHandler(e)},prevent:function(e){e.stopPropagation()},activateDebug:function(){this.debug_view=!this.debug_view,this.debug_view?(document.getElementById("content").classList.add("uiDebug"),document.getElementById("debug").classList.add("uiDebug")):(document.getElementById("content").classList.remove("uiDebug"),document.getElementById("debug").classList.remove("uiDebug"))}}},c=a,l=n("2877"),u=Object(l["a"])(c,i,r,!1,null,null,null);t["default"]=u.exports},d6dd:function(e,t,n){var i=n("23e7"),r=n("d066"),s=n("825a"),o=n("bb2f");i({target:"Reflect",stat:!0,sham:!o},{preventExtensions:function(e){s(e);try{var t=r("Object","preventExtensions");return t&&t(e),!0}catch(n){return!1}}})},d784:function(e,t,n){"use strict";n("ac1f");var i=n("6eeb"),r=n("d039"),s=n("b622"),o=n("9263"),a=n("9112"),c=s("species"),l=!r((function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:"7"},e},"7"!=="".replace(e,"$")})),u=function(){return"$0"==="a".replace(/./,"$0")}(),d=s("replace"),h=function(){return!!/./[d]&&""===/./[d]("a","$0")}(),f=!r((function(){var e=/(?:)/,t=e.exec;e.exec=function(){return t.apply(this,arguments)};var n="ab".split(e);return 2!==n.length||"a"!==n[0]||"b"!==n[1]}));e.exports=function(e,t,n,d){var p=s(e),g=!r((function(){var t={};return t[p]=function(){return 7},7!=""[e](t)})),m=g&&!r((function(){var t=!1,n=/a/;return"split"===e&&(n={},n.constructor={},n.constructor[c]=function(){return n},n.flags="",n[p]=/./[p]),n.exec=function(){return t=!0,null},n[p](""),!t}));if(!g||!m||"replace"===e&&(!l||!u||h)||"split"===e&&!f){var v=/./[p],b=n(p,""[e],(function(e,t,n,i,r){return t.exec===o?g&&!r?{done:!0,value:v.call(t,n,i)}:{done:!0,value:e.call(n,t,i)}:{done:!1}}),{REPLACE_KEEPS_$0:u,REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE:h}),y=b[0],w=b[1];i(String.prototype,e,y),i(RegExp.prototype,p,2==t?function(e,t){return w.call(e,this,t)}:function(e){return w.call(e,this)})}d&&a(RegExp.prototype[p],"sham",!0)}},d7b5:function(e,t,n){},d80f:function(e,t,n){var i=n("23e7"),r=n("fc6a"),s=n("50c4");i({target:"String",stat:!0},{raw:function(e){var t=r(e.raw),n=s(t.length),i=arguments.length,o=[],a=0;while(n>a)o.push(String(t[a++])),a1?arguments[1]:void 0)}})},da1f:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("vui-group",[n("vui-group-item",{attrs:{label:"Machine:"}},[e._v(e._s(e.s.machine_id))]),n("vui-group-item",{attrs:{label:"ID card:"}},[e._v(e._s(e.s.id_card?e.s.id_card:"None"))]),e.s.access_level?n("vui-group-item",{attrs:{label:"Station funds:"}},[e._v(e._s(e.s.accounts[""+e.s.station_account_number].money.toFixed(2))+"电")]):e._e(),n("vui-group-row",[n("hr")]),null!=e.new_name?[n("vui-group-row",[n("vui-button",{attrs:{icon:"arrow-left"},on:{click:function(t){e.new_name=null}}},[e._v("Back to list")])],1),n("vui-group-item",{attrs:{label:"Account Holder:"}},[n("input",{directives:[{name:"model",rawName:"v-model",value:e.new_name,expression:"new_name"}],attrs:{type:"text"},domProps:{value:e.new_name},on:{input:function(t){t.target.composing||(e.new_name=t.target.value)}}})]),n("vui-group-item",{attrs:{label:"Initial Deposit:"}},[n("vui-input-numeric",{attrs:{"button-count":0,width:"7em",max:1e6},model:{value:e.new_funds,callback:function(t){e.new_funds=t},expression:"new_funds"}})],1),n("vui-group-item",[n("vui-button",{attrs:{icon:"plus-square"},on:{click:function(t){return e.create_account()}}},[e._v("Create")])],1)]:e.s.access_level?[e.active?[n("vui-group-row",[n("vui-button",{attrs:{icon:"arrow-left"},on:{click:function(t){e.active=null}}},[e._v("Back to list")]),n("vui-button",{attrs:{icon:"print",params:{print:e.active}}},[e._v("Print")])],1),n("vui-group-row",[n("h2",[e._v("Account Details")])]),n("vui-group-item",{attrs:{label:"Account Number:"}},[e._v("#"+e._s(e.active_acc.no))]),n("vui-group-item",{attrs:{label:"Holder:"}},[e._v(e._s(e.active_acc.owner))]),n("vui-group-item",{attrs:{label:"Balance:"}},[e._v(e._s(e.active_acc.money.toFixed(2))+"电")]),n("vui-group-item",{attrs:{label:"Status:"}},[e.active_acc.sus?n("span",{staticClass:"bad"},[e._v("Suspended ")]):n("span",{staticClass:"good"},[e._v("Active ")])]),n("vui-group-row",[e.active_acc.sus?n("vui-button",{attrs:{params:{suspend:{account:e.active}}}},[e._v("Unsuspend")]):n("vui-button",{attrs:{params:{suspend:{account:e.active}}}},[e._v("Suspend")]),e.active_acc.no!=e.s.station_account_number?n("vui-button",{attrs:{params:{revoke_payroll:{account:e.active}}}},[e._v("Revoke Payroll")]):e._e(),2==e.s.access_level?[n("h4",[e._v("Silent fund adjustment")]),null==e.add_funds?n("vui-button",{on:{click:function(t){e.add_funds=0}}},[e._v("Add")]):[n("vui-input-numeric",{attrs:{max:1e6},model:{value:e.add_funds,callback:function(t){e.add_funds=t},expression:"add_funds"}}),n("vui-button",{attrs:{params:{add_funds:{account:e.active,amount:e.add_funds}}}},[e._v("Add")])],n("br"),null==e.remove_funds?n("vui-button",{on:{click:function(t){e.remove_funds=0}}},[e._v("Remove")]):[n("vui-input-numeric",{attrs:{max:1e6},model:{value:e.remove_funds,callback:function(t){e.remove_funds=t},expression:"remove_funds"}}),n("vui-button",{attrs:{params:{remove_funds:{account:e.active,amount:e.remove_funds}}}},[e._v("Remove")])]]:e._e()],2),n("vui-group-row",[n("h2",[e._v("Transactions")]),n("table",{staticClass:"table border",staticStyle:{width:"100%"}},[n("tr",{staticClass:"header border"},[n("th",[n("b",[e._v("Timestamp")])]),n("th",[n("b",[e._v("Target")])]),n("th",[n("b",[e._v("Reason")])]),n("th",[n("b",[e._v("Value")])]),n("th",[n("b",[e._v("Terminal")])])]),e._l(e.active_acc.transactions,(function(t,i){return n("tr",{key:i,staticClass:"item border"},[n("td",[e._v(e._s(t.d)+" "+e._s(t.t))]),n("td",[e._v(e._s(t.tar))]),n("td",[e._v(e._s(t.purp))]),n("td",[e._v(e._s(t.am))]),n("td",[e._v(e._s(t.src))])])}))],2)])]:[n("vui-group-row",[e.s.has_printer?n("vui-button",{attrs:{icon:"print",params:{print:1}}},[e._v("Print")]):e._e(),n("vui-button",{attrs:{icon:"file"},on:{click:function(t){e.new_name=""}}},[e._v("New Account")])],1),n("vui-group-row",[n("h2",[e._v("Idris Banking Accounts")])]),n("vui-group-row",[n("table",{staticClass:"table border",staticStyle:{width:"100%"}},[n("tr",{staticClass:"header border"},[n("th",[n("b",[e._v("Number")])]),n("th",[n("b",[e._v("Name")])])]),e._l(e.s.accounts,(function(t,i){return n("tr",{key:i,staticClass:"item border"},[n("td",[n("vui-button",{on:{click:function(t){e.active=i}}},[e._v("#"+e._s(t.no))])],1),n("td",[n("span",{class:t.sus?"bad":""},[e._v(e._s(t.owner))])])])}))],2)])]]:e._e()],2)],1)},r=[],s=n("025e"),o={data:function(){return{s:this.$root.$data.state,active:null,add_funds:null,remove_funds:null,new_name:null,new_funds:0}},computed:{active_acc:function(){return this.active?this.s.accounts[this.active]:{}}},methods:{create_account:function(){s["a"].sendToTopic({create_account:{name:this.new_name,funds:this.new_funds}}),this.new_name=null,this.new_funds=0}}},a=o,c=n("2877"),l=Object(c["a"])(a,i,r,!1,null,null,null);t["default"]=l.exports},da84:function(e,t,n){(function(t){var n=function(e){return e&&e.Math==Math&&e};e.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof t&&t)||function(){return this}()||Function("return this")()}).call(this,n("c8ba"))},daa2:function(e,t,n){},db4f:function(e,t,n){},db4fb:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("vui-group",[n("vui-group-item",{attrs:{label:"Frequency:"}},[n("vui-button",{attrs:{params:{freq:-10}}},[e._v("--")]),n("vui-button",{attrs:{params:{freq:-2}}},[e._v("-")]),n("span",{staticClass:"value-setting"},[e._v(e._s(e.frequency))]),n("vui-button",{attrs:{params:{freq:2}}},[e._v("+")]),n("vui-button",{attrs:{params:{freq:10}}},[e._v("++")])],1),n("vui-group-item",{attrs:{label:"Code:"}},[n("vui-button",{attrs:{params:{code:-10}}},[e._v("--")]),n("vui-button",{attrs:{params:{code:-2}}},[e._v("-")]),n("span",{staticClass:"value-setting"},[e._v(e._s(e.code))]),n("vui-button",{attrs:{params:{code:2}}},[e._v("+")]),n("vui-button",{attrs:{params:{code:10}}},[e._v("++")])],1),n("vui-group-item",[n("vui-button",{attrs:{params:{send:1}}},[e._v("Send")])],1)],1),e.emagged?n("vui-group",[n("vui-group-item",{attrs:{label:"Remote Door Code:"}},[n("input",{directives:[{name:"model",rawName:"v-model",value:e.doorcode,expression:"doorcode"}],attrs:{type:"text"},domProps:{value:e.doorcode},on:{input:function(t){t.target.composing||(e.doorcode=t.target.value)}}}),n("vui-button",{attrs:{params:{resetcode:1}}},[e._v("Reset to Default")])],1),n("vui-group-item",[n("vui-button",{attrs:{params:{toggledoor:e.doorcode}}},[e._v("Toggle Door")])],1)],1):e._e()],1)},r=[],s={data:function(){return this.$root.$data.state}},o=s,a=(n("fcc9"),n("2877")),c=Object(a["a"])(o,i,r,!1,null,"b23b384c",null);t["default"]=c.exports},db96:function(e,t,n){var i=n("23e7"),r=n("825a"),s=Object.isExtensible;i({target:"Reflect",stat:!0},{isExtensible:function(e){return r(e),!s||s(e)}})},dbb4:function(e,t,n){var i=n("23e7"),r=n("83ab"),s=n("56ef"),o=n("fc6a"),a=n("06cf"),c=n("8418");i({target:"Object",stat:!0,sham:!r},{getOwnPropertyDescriptors:function(e){var t,n,i=o(e),r=a.f,l=s(i),u={},d=0;while(l.length>d)n=r(i,t=l[d++]),void 0!==n&&c(u,t,n);return u}})},dbfa:function(e,t,n){"use strict";var i=n("23e7"),r=n("1c0b"),s=n("d066"),o=n("f069"),a=n("e667"),c=n("2266"),l="No one promise resolved";i({target:"Promise",stat:!0},{any:function(e){var t=this,n=o.f(t),i=n.resolve,u=n.reject,d=a((function(){var n=r(t.resolve),o=[],a=0,d=1,h=!1;c(e,(function(e){var r=a++,c=!1;o.push(void 0),d++,n.call(t,e).then((function(e){c||h||(h=!0,i(e))}),(function(e){c||h||(c=!0,o[r]=e,--d||u(new(s("AggregateError"))(o,l)))}))})),--d||u(new(s("AggregateError"))(o,l))}));return d.error&&u(d.value),n.promise}})},dc8d:function(e,t,n){var i=n("746f");i("hasInstance")},dca8:function(e,t,n){var i=n("23e7"),r=n("bb2f"),s=n("d039"),o=n("861d"),a=n("f183").onFreeze,c=Object.freeze,l=s((function(){c(1)}));i({target:"Object",stat:!0,forced:l,sham:!r},{freeze:function(e){return c&&o(e)?c(a(e)):e}})},ddb0:function(e,t,n){var i=n("da84"),r=n("fdbc"),s=n("e260"),o=n("9112"),a=n("b622"),c=a("iterator"),l=a("toStringTag"),u=s.values;for(var d in r){var h=i[d],f=h&&h.prototype;if(f){if(f[c]!==u)try{o(f,c,u)}catch(g){f[c]=u}if(f[l]||o(f,l,d),r[d])for(var p in s)if(f[p]!==s[p])try{o(f,p,s[p])}catch(g){f[p]=s[p]}}}},ddc6:function(e,t){function n(e){return function(t){return null==e?void 0:e[t]}}e.exports=n},de06:function(e,t,n){"use strict";n("a4ec")},df0b:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("h3",[e._v("Core Cooling Control System")]),e.state["input"]?n("div",[n("vui-item",{attrs:{label:"Input:"}},[e.state["input"].power?n("span",[e._v("Injecting")]):n("span",[e._v("On Hold")]),e._v(" "),n("vui-button",{attrs:{params:{in_toggle_injector:1},icon:"power-off"}},[e._v("Toggle Power")])],1),n("vui-item",{attrs:{label:"Flow Rate Limit:"}},[e._v(e._s(e.state["input"].rate)+" L/s")]),n("vui-item",{attrs:{label:"Command:"}},[n("vui-input-numeric",{attrs:{width:"3em","button-count":3,max:e.state.maxrate},on:{keypress:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.s({in_set_flowrate:e.state["input"].setrate})}},model:{value:e.state["input"].setrate,callback:function(t){e.$set(e.state["input"],"setrate",t)},expression:"state['input'].setrate"}}),n("br"),n("vui-button",{attrs:{"push-state":"",params:{in_set_flowrate:e.state["input"].setrate}}},[e._v("Set Flow Rate")])],1)],1):n("vui-button",{attrs:{params:{in_refresh_status:1}}},[e._v("Search for input port")]),e.state["output"]?n("div",{staticStyle:{"margin-top":"2em"}},[n("vui-item",{attrs:{label:"Core Outpump:"}},[e.state["output"].power?n("span",[e._v("Open")]):n("span",[e._v("On Hold")]),e._v(" "),n("vui-button",{attrs:{params:{out_toggle_power:1},icon:"power-off"}},[e._v("Toggle Power")])],1),n("vui-item",{attrs:{label:"Min Core Pressure:"}},[e._v(e._s(e.state["output"].pressure)+" kPa")]),n("vui-item",{attrs:{label:"Command:"}},[n("vui-input-numeric",{attrs:{width:"5em","button-count":3,"decimal-places":2,max:e.state.maxpressure},on:{keypress:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.s({out_set_pressure:e.state["output"].setpressure})}},model:{value:e.state["output"].setpressure,callback:function(t){e.$set(e.state["output"],"setpressure",t)},expression:"state['output'].setpressure"}}),n("br"),n("vui-button",{attrs:{"push-state":"",params:{out_set_pressure:e.state["output"].setpressure}}},[e._v("Set Pressure")])],1)],1):n("vui-button",{attrs:{params:{out_refresh_status:1}}},[e._v("Search for output port")])],1)},r=[],s=n("025e"),o={data:function(){return this.$root.$data},methods:{s:function(e){s["a"].sendToTopic(e)}}},a=o,c=n("2877"),l=Object(c["a"])(a,i,r,!1,null,null,null);t["default"]=l.exports},df75:function(e,t,n){var i=n("ca84"),r=n("7839");e.exports=Object.keys||function(e){return i(e,r)}},e008:function(e,t,n){},e01a:function(e,t,n){"use strict";var i=n("23e7"),r=n("83ab"),s=n("da84"),o=n("5135"),a=n("861d"),c=n("9bf2").f,l=n("e893"),u=s.Symbol;if(r&&"function"==typeof u&&(!("description"in u.prototype)||void 0!==u().description)){var d={},h=function(){var e=arguments.length<1||void 0===arguments[0]?void 0:String(arguments[0]),t=this instanceof h?new u(e):void 0===e?u():u(e);return""===e&&(d[t]=!0),t};l(h,u);var f=h.prototype=u.prototype;f.constructor=h;var p=f.toString,g="Symbol(test)"==String(u("test")),m=/^Symbol\((.*)\)[^)]+$/;c(f,"description",{configurable:!0,get:function(){var e=a(this)?this.valueOf():this,t=p.call(e);if(o(d,e))return"";var n=g?t.slice(7,-1):t.replace(m,"$1");return""===n?void 0:n}}),i({global:!0,forced:!0},{Symbol:h})}},e163:function(e,t,n){var i=n("5135"),r=n("7b0b"),s=n("f772"),o=n("e177"),a=s("IE_PROTO"),c=Object.prototype;e.exports=o?Object.getPrototypeOf:function(e){return e=r(e),i(e,a)?e[a]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?c:null}},e16d:function(e,t,n){},e177:function(e,t,n){var i=n("d039");e.exports=!i((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},e210:function(e,t,n){},e21d:function(e,t,n){var i=n("23e7"),r=n("d039"),s=n("861d"),o=Object.isFrozen,a=r((function(){o(1)}));i({target:"Object",stat:!0,forced:a},{isFrozen:function(e){return!s(e)||!!o&&o(e)}})},e25e:function(e,t,n){var i=n("23e7"),r=n("c20d");i({global:!0,forced:parseInt!=r},{parseInt:r})},e260:function(e,t,n){"use strict";var i=n("fc6a"),r=n("44d2"),s=n("3f8c"),o=n("69f3"),a=n("7dd0"),c="Array Iterator",l=o.set,u=o.getterFor(c);e.exports=a(Array,"Array",(function(e,t){l(this,{type:c,target:i(e),index:0,kind:t})}),(function(){var e=u(this),t=e.target,n=e.kind,i=e.index++;return!t||i>=t.length?(e.target=void 0,{value:void 0,done:!0}):"keys"==n?{value:i,done:!1}:"values"==n?{value:t[i],done:!1}:{value:[i,t[i]],done:!1}}),"values"),s.Arguments=s.Array,r("keys"),r("values"),r("entries")},e285:function(e,t,n){var i=n("da84"),r=i.isFinite;e.exports=Number.isFinite||function(e){return"number"==typeof e&&r(e)}},e2cc:function(e,t,n){var i=n("6eeb");e.exports=function(e,t,n){for(var r in t)i(e,r,t[r],n);return e}},e31d:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[e.mode?[n("h2",[e._v("Vote: "+e._s(e.question))]),e._v(" Time Left: "+e._s(e.reman)+" s"),n("hr"),n("table",[n("tr",[n("th",[e._v("Choices")]),n("th",[e._v("Votes")]),"gamemode"==e.mode?n("th",[e._v("Minimum Players")]):e._e()]),e._l(e.uichoices,(function(t,i){return n("tr",{key:i},[n("td",{staticStyle:{"text-align":"left"}},[n("vui-button",{class:{on:i==e.voted},attrs:{params:{action:"vote",vote:i}}},[e._v(e._s(t.name))])],1),n("td",[e._v(e._s(t.votes))]),t.extra?n("td",[e._v(e._s(t.extra))]):e._e()])}))],2),n("hr"),e.isstaff?[n("vui-button",{attrs:{params:{action:"cancel"}}},[e._v("Cancel")])]:e._e()]:[n("h2",[e._v("Start a vote:")]),n("hr"),n("ul",[n("li",[n("vui-button",{attrs:{disabled:!e.isstaff&&!e.allow_vote_restart,params:{action:"restart"}}},[e._v("Restart")])],1),n("li",[n("vui-button",{attrs:{disabled:!e.isstaff&&!e.allow_vote_restart,params:{action:"crew_transfer"}}},[e._v("Crew Transfer")]),(e.isstaff||e.allow_vote_restart)&&e.is_code_red?n("span",[e._v("(Disallowed, Code Red or above)")]):e._e(),e.isstaff?n("vui-button",{class:{on:e.allow_vote_restart},attrs:{params:{action:"toggle_restart"}}},[e._v("Toggle Restart / Crew Transfer voting")]):e._e()],1),n("li",[n("vui-button",{attrs:{disabled:!e.isstaff&&!e.allow_vote_mode,params:{action:"gamemode"}}},[e._v("GameMode")]),e.isstaff?n("vui-button",{class:{on:e.allow_vote_mode},attrs:{params:{action:"toggle_gamemode"}}},[e._v("Toggle GameMode voting")]):e._e()],1),n("li",[n("vui-button",{attrs:{disabled:!e.allow_extra_antags,params:{action:"add_antagonist"}}},[e._v("Add Antagonist Type")])],1),n("li",[n("vui-button",{attrs:{disabled:!e.isstaff,params:{action:"custom"}}},[e._v("Custom")])],1)])]],2)},r=[];n("a4d3"),n("e01a"),n("d28b"),n("e260"),n("d3b7"),n("3ca3"),n("ddb0");function s(e){return s="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s(e)}var o={data:function(){return this.$root.$data.state},computed:{uichoices:function(){return"object"===s(this.choices)?this.choices:{}},reman:function(){return Math.round((this.endtime-this.$root.$data.wtime)/10)}}},a=o,c=(n("8928"),n("2877")),l=Object(c["a"])(a,i,r,!1,null,"8bcc2668",null);t["default"]=l.exports},e3a9:function(e,t,n){"use strict";n("4310")},e439:function(e,t,n){var i=n("23e7"),r=n("d039"),s=n("fc6a"),o=n("06cf").f,a=n("83ab"),c=r((function(){o(1)})),l=!a||c;i({target:"Object",stat:!0,forced:l,sham:!a},{getOwnPropertyDescriptor:function(e,t){return o(s(e),t)}})},e43e:function(e,t,n){var i=n("23e7"),r=n("d039"),s=n("861d"),o=Object.isSealed,a=r((function(){o(1)}));i({target:"Object",stat:!0,forced:a},{isSealed:function(e){return!s(e)||!!o&&o(e)}})},e48d:function(e,t,n){"use strict";n("1650")},e538:function(e,t,n){var i=n("b622");t.f=i},e58c:function(e,t,n){"use strict";var i=n("fc6a"),r=n("a691"),s=n("50c4"),o=n("a640"),a=n("ae40"),c=Math.min,l=[].lastIndexOf,u=!!l&&1/[1].lastIndexOf(1,-0)<0,d=o("lastIndexOf"),h=a("indexOf",{ACCESSORS:!0,1:0}),f=u||!d||!h;e.exports=f?function(e){if(u)return l.apply(this,arguments)||0;var t=i(this),n=s(t.length),o=n-1;for(arguments.length>1&&(o=c(o,r(arguments[1]))),o<0&&(o=n+o);o>=0;o--)if(o in t&&t[o]===e)return o||0;return-1}:l},e644:function(e,t,n){},e667:function(e,t){e.exports=function(e){try{return{error:!1,value:e()}}catch(t){return{error:!0,value:t}}}},e6cf:function(e,t,n){"use strict";var i,r,s,o,a=n("23e7"),c=n("c430"),l=n("da84"),u=n("d066"),d=n("fea9"),h=n("6eeb"),f=n("e2cc"),p=n("d44e"),g=n("2626"),m=n("861d"),v=n("1c0b"),b=n("19aa"),y=n("8925"),w=n("2266"),_=n("1c7e"),x=n("4840"),k=n("2cf4").set,A=n("b575"),C=n("cdf9"),E=n("44de"),S=n("f069"),F=n("e667"),$=n("69f3"),T=n("94ca"),L=n("b622"),D=n("605d"),B=n("2d00"),R=L("species"),O="Promise",M=$.get,j=$.set,I=$.getterFor(O),P=d,N=l.TypeError,W=l.document,H=l.process,V=u("fetch"),U=S.f,z=U,G=!!(W&&W.createEvent&&l.dispatchEvent),q="function"==typeof PromiseRejectionEvent,K="unhandledrejection",Y="rejectionhandled",X=0,J=1,Q=2,Z=1,ee=2,te=T(O,(function(){var e=y(P)!==String(P);if(!e){if(66===B)return!0;if(!D&&!q)return!0}if(c&&!P.prototype["finally"])return!0;if(B>=51&&/native code/.test(P))return!1;var t=P.resolve(1),n=function(e){e((function(){}),(function(){}))},i=t.constructor={};return i[R]=n,!(t.then((function(){}))instanceof n)})),ne=te||!_((function(e){P.all(e)["catch"]((function(){}))})),ie=function(e){var t;return!(!m(e)||"function"!=typeof(t=e.then))&&t},re=function(e,t){if(!e.notified){e.notified=!0;var n=e.reactions;A((function(){var i=e.value,r=e.state==J,s=0;while(n.length>s){var o,a,c,l=n[s++],u=r?l.ok:l.fail,d=l.resolve,h=l.reject,f=l.domain;try{u?(r||(e.rejection===ee&&ce(e),e.rejection=Z),!0===u?o=i:(f&&f.enter(),o=u(i),f&&(f.exit(),c=!0)),o===l.promise?h(N("Promise-chain cycle")):(a=ie(o))?a.call(o,d,h):d(o)):h(i)}catch(p){f&&!c&&f.exit(),h(p)}}e.reactions=[],e.notified=!1,t&&!e.rejection&&oe(e)}))}},se=function(e,t,n){var i,r;G?(i=W.createEvent("Event"),i.promise=t,i.reason=n,i.initEvent(e,!1,!0),l.dispatchEvent(i)):i={promise:t,reason:n},!q&&(r=l["on"+e])?r(i):e===K&&E("Unhandled promise rejection",n)},oe=function(e){k.call(l,(function(){var t,n=e.facade,i=e.value,r=ae(e);if(r&&(t=F((function(){D?H.emit("unhandledRejection",i,n):se(K,n,i)})),e.rejection=D||ae(e)?ee:Z,t.error))throw t.value}))},ae=function(e){return e.rejection!==Z&&!e.parent},ce=function(e){k.call(l,(function(){var t=e.facade;D?H.emit("rejectionHandled",t):se(Y,t,e.value)}))},le=function(e,t,n){return function(i){e(t,i,n)}},ue=function(e,t,n){e.done||(e.done=!0,n&&(e=n),e.value=t,e.state=Q,re(e,!0))},de=function(e,t,n){if(!e.done){e.done=!0,n&&(e=n);try{if(e.facade===t)throw N("Promise can't be resolved itself");var i=ie(t);i?A((function(){var n={done:!1};try{i.call(t,le(de,n,e),le(ue,n,e))}catch(r){ue(n,r,e)}})):(e.value=t,e.state=J,re(e,!1))}catch(r){ue({done:!1},r,e)}}};te&&(P=function(e){b(this,P,O),v(e),i.call(this);var t=M(this);try{e(le(de,t),le(ue,t))}catch(n){ue(t,n)}},i=function(e){j(this,{type:O,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:X,value:void 0})},i.prototype=f(P.prototype,{then:function(e,t){var n=I(this),i=U(x(this,P));return i.ok="function"!=typeof e||e,i.fail="function"==typeof t&&t,i.domain=D?H.domain:void 0,n.parent=!0,n.reactions.push(i),n.state!=X&&re(n,!1),i.promise},catch:function(e){return this.then(void 0,e)}}),r=function(){var e=new i,t=M(e);this.promise=e,this.resolve=le(de,t),this.reject=le(ue,t)},S.f=U=function(e){return e===P||e===s?new r(e):z(e)},c||"function"!=typeof d||(o=d.prototype.then,h(d.prototype,"then",(function(e,t){var n=this;return new P((function(e,t){o.call(n,e,t)})).then(e,t)}),{unsafe:!0}),"function"==typeof V&&a({global:!0,enumerable:!0,forced:!0},{fetch:function(e){return C(P,V.apply(l,arguments))}}))),a({global:!0,wrap:!0,forced:te},{Promise:P}),p(P,O,!1,!0),g(O),s=u(O),a({target:O,stat:!0,forced:te},{reject:function(e){var t=U(this);return t.reject.call(void 0,e),t.promise}}),a({target:O,stat:!0,forced:c||te},{resolve:function(e){return C(c&&this===s?P:this,e)}}),a({target:O,stat:!0,forced:ne},{all:function(e){var t=this,n=U(t),i=n.resolve,r=n.reject,s=F((function(){var n=v(t.resolve),s=[],o=0,a=1;w(e,(function(e){var c=o++,l=!1;s.push(void 0),a++,n.call(t,e).then((function(e){l||(l=!0,s[c]=e,--a||i(s))}),r)})),--a||i(s)}));return s.error&&r(s.value),n.promise},race:function(e){var t=this,n=U(t),i=n.reject,r=F((function(){var r=v(t.resolve);w(e,(function(e){r.call(t,e).then(n.resolve,i)}))}));return r.error&&i(r.value),n.promise}})},e6e1:function(e,t,n){var i=n("23e7");i({target:"Number",stat:!0},{MIN_SAFE_INTEGER:-9007199254740991})},e71b:function(e,t,n){"use strict";var i=n("23e7"),r=n("83ab"),s=n("eb1d"),o=n("7b0b"),a=n("1c0b"),c=n("9bf2");r&&i({target:"Object",proto:!0,forced:s},{__defineSetter__:function(e,t){c.f(o(this),e,{set:a(t),enumerable:!0,configurable:!0})}})},e786:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("table",{staticClass:"table border"},[n("tr",{staticClass:"header"},e._l(e.categories,(function(t){return n("th",{key:t},[n("vui-button",{class:{selected:t===e.sel_category},attrs:{params:{selected:t}}},[e._v(e._s(t))])],1)})),0),e.sel_category?[e.supplies.length?[e._m(0),e._l(e.supplies,(function(t){return n("tr",{key:t.key,staticClass:"item border"},[n("td",[e._v(e._s(e.generateName(t.name,t.key)))]),n("td",[e._v("("+e._s(t.x)+", "+e._s(t.y)+")")]),n("td",[e._v(e._s(t.dir))]),n("td",[e._v(e._s(t.status))])])})),n("tr",{staticClass:"header border"},[n("td",{attrs:{colspan:"4"}},[e._v("User location: ("+e._s(e.user_loc.x)+", "+e._s(e.user_loc.y)+")")])])]:n("tr",[n("td",{attrs:{colspan:"4"}},[e._v("Unable to locate any "+e._s(e.sel_category.toLowerCase())+" in your vicinity.")])])]:e._e()],2)])},r=[function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("tr",{staticClass:"header border"},[n("th",{attrs:{scope:"col"}},[e._v("ID")]),n("th",{attrs:{scope:"col"}},[e._v("Location")]),n("th",{attrs:{scope:"col"}},[e._v("Direction")]),n("th",{attrs:{scope:"col"}},[e._v("Status")])])}],s={data:function(){return this.$root.$data.state},methods:{generateName:function(e,t){if(e&&!isNaN(t))return t+=1,e+" (#"+t+")"}}},o=s,a=(n("9acc"),n("2877")),c=Object(a["a"])(o,i,r,!1,null,"1021c617",null);t["default"]=c.exports},e893:function(e,t,n){var i=n("5135"),r=n("56ef"),s=n("06cf"),o=n("9bf2");e.exports=function(e,t){for(var n=r(t),a=o.f,c=s.f,l=0;l1?arguments[1]:void 0)}))},e958:function(e,t,n){"use strict";n("814e")},e95a:function(e,t,n){var i=n("b622"),r=n("3f8c"),s=i("iterator"),o=Array.prototype;e.exports=function(e){return void 0!==e&&(r.Array===e||o[s]===e)}},e9a7:function(e,t,n){var i=n("76dd"),r=n("8103");function s(e){return r(i(e).toLowerCase())}e.exports=s},e9c4:function(e,t,n){var i=n("23e7"),r=n("d066"),s=n("d039"),o=r("JSON","stringify"),a=/[\uD800-\uDFFF]/g,c=/^[\uD800-\uDBFF]$/,l=/^[\uDC00-\uDFFF]$/,u=function(e,t,n){var i=n.charAt(t-1),r=n.charAt(t+1);return c.test(e)&&!l.test(r)||l.test(e)&&!c.test(i)?"\\u"+e.charCodeAt(0).toString(16):e},d=s((function(){return'"\\udf06\\ud834"'!==o("\udf06\ud834")||'"\\udead"'!==o("\udead")}));o&&i({target:"JSON",stat:!0,forced:d},{stringify:function(e,t,n){var i=o.apply(null,arguments);return"string"==typeof i?i.replace(a,u):i}})},ea72:function(e,t,n){var i=n("7559"),r=n("7e8e"),s=n("76dd"),o=n("f4d9");function a(e,t,n){return e=s(e),t=n?void 0:t,void 0===t?r(e)?o(e):i(e):e.match(t)||[]}e.exports=a},eb1d:function(e,t,n){"use strict";var i=n("c430"),r=n("da84"),s=n("d039");e.exports=i||!s((function(){var e=Math.random();__defineSetter__.call(null,e,(function(){})),delete r[e]}))},ebb5:function(e,t,n){"use strict";var i,r=n("a981"),s=n("83ab"),o=n("da84"),a=n("861d"),c=n("5135"),l=n("f5df"),u=n("9112"),d=n("6eeb"),h=n("9bf2").f,f=n("e163"),p=n("d2bb"),g=n("b622"),m=n("90e3"),v=o.Int8Array,b=v&&v.prototype,y=o.Uint8ClampedArray,w=y&&y.prototype,_=v&&f(v),x=b&&f(b),k=Object.prototype,A=k.isPrototypeOf,C=g("toStringTag"),E=m("TYPED_ARRAY_TAG"),S=r&&!!p&&"Opera"!==l(o.opera),F=!1,$={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},T=function(e){var t=l(e);return"DataView"===t||c($,t)},L=function(e){return a(e)&&c($,l(e))},D=function(e){if(L(e))return e;throw TypeError("Target is not a typed array")},B=function(e){if(p){if(A.call(_,e))return e}else for(var t in $)if(c($,i)){var n=o[t];if(n&&(e===n||A.call(n,e)))return e}throw TypeError("Target is not a typed array constructor")},R=function(e,t,n){if(s){if(n)for(var i in $){var r=o[i];r&&c(r.prototype,e)&&delete r.prototype[e]}x[e]&&!n||d(x,e,n?t:S&&b[e]||t)}},O=function(e,t,n){var i,r;if(s){if(p){if(n)for(i in $)r=o[i],r&&c(r,e)&&delete r[e];if(_[e]&&!n)return;try{return d(_,e,n?t:S&&v[e]||t)}catch(a){}}for(i in $)r=o[i],!r||r[e]&&!n||d(r,e,t)}};for(i in $)o[i]||(S=!1);if((!S||"function"!=typeof _||_===Function.prototype)&&(_=function(){throw TypeError("Incorrect invocation")},S))for(i in $)o[i]&&p(o[i],_);if((!S||!x||x===k)&&(x=_.prototype,S))for(i in $)o[i]&&p(o[i].prototype,x);if(S&&f(w)!==x&&p(w,x),s&&!c(x,C))for(i in F=!0,h(x,C,{get:function(){return a(this)?this[E]:void 0}}),$)o[i]&&u(o[i],E,i);e.exports={NATIVE_ARRAY_BUFFER_VIEWS:S,TYPED_ARRAY_TAG:F&&E,aTypedArray:D,aTypedArrayConstructor:B,exportTypedArrayMethod:R,exportTypedArrayStaticMethod:O,isView:T,isTypedArray:L,TypedArray:_,TypedArrayPrototype:x}},ebf5:function(e,t,n){"use strict";n("afb9")},ec72:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("vui-input-search",{attrs:{input:e.s.reactions,keys:["result.name","reagents.name","result.description"],autofocus:"",threshold:e.threshold,"include-score":""},model:{value:e.output,callback:function(t){e.output=t},expression:"output"}}),n("vui-button",{on:{click:function(t){e.desc=!e.desc}}},[e._v("Toggle Descriptions")]),e._l(e.output,(function(t){return n("div",{key:t.item.id,staticClass:"recipe-block",style:{opacity:1-t.score*e.score_multiplier}},[n("h2",{staticClass:"highlight"},[e._v(e._s(t.item.result.name)+" ("+e._s(e.u(t.item.result.amount))+")")]),n("p",{directives:[{name:"show",rawName:"v-show",value:e.desc,expression:"desc"}],staticClass:"description"},[e._v(e._s(t.item.result.description))]),n("h3",{staticClass:"highlight"},[e._v("Required Reagents")]),e._l(t.item.reagents,(function(i){return n("span",{key:"re"+i.name+t.item.result.name},[e._v(e._s(i.name)+": "+e._s(e.u(i.amount))),n("br")])})),t.item.catalysts.length?[n("h3",{staticClass:"highlight"},[e._v("Catalysts")]),e._l(t.item.catalysts,(function(i){return n("span",{key:"ca"+i.name+t.item.result.name},[e._v(e._s(i.name)+": "+e._s(e.u(i.amount))),n("br")])}))]:e._e(),t.item.inhibitors.length?[n("h3",{staticClass:"highlight"},[e._v("Inhibitors")]),e._l(t.item.inhibitors,(function(i){return n("span",{key:"in"+i.name+t.item.result.name},[e._v(e._s(i.name)+": "+e._s(e.u(i.amount))),n("br")])}))]:e._e(),t.item.temp_min&&t.item.temp_min.length?[n("h3",{staticClass:"highlight"},[e._v("Minimum Required Temperatures")]),e._l(t.item.temp_min,(function(i){return n("span",{key:"tm"+i.name+t.item.result.name},[e._v(e._s(i.name)+": "+e._s(i.temp)+"°K"),n("br")])}))]:e._e(),t.item.temp_max&&t.item.temp_max.length?[n("h3",{staticClass:"highlight"},[e._v("Maximum Required Temperatures")]),e._l(t.item.temp_max,(function(i){return n("span",{key:"tx"+i.name+t.item.result.name},[e._v(e._s(i.name)+": "+e._s(i.temp)+"°K"),n("br")])}))]:e._e()],2)}))],2)},r=[],s={data:function(){return{s:this.$root.$data.state,output:[],threshold:.3,desc:!0}},methods:{u:function(e){return"".concat(e,1==e?" unit":" units")}},computed:{score_multiplier:function(){return 1/this.threshold}}},o=s,a=(n("f889"),n("2877")),c=Object(a["a"])(o,i,r,!1,null,"710a36a7",null);t["default"]=c.exports},ec97:function(e,t,n){"use strict";var i=n("ebb5"),r=n("8aa7"),s=i.aTypedArrayConstructor,o=i.exportTypedArrayStaticMethod;o("of",(function(){var e=0,t=arguments.length,n=new(s(this))(t);while(t>e)n[e]=arguments[e++];return n}),r)},eee7:function(e,t,n){"use strict";var i=n("23e7"),r=n("58a8").start,s=n("c8d2"),o=s("trimStart"),a=o?function(){return r(this)}:"".trimStart;i({target:"String",proto:!0,forced:o},{trimStart:a,trimLeft:a})},ef41:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("vui-button",{on:{click:function(t){e.fliped=!e.fliped}}},[e._v("Flip")]),n("div",{staticClass:"text-center"},e._l(e.boardTiles,(function(t,i){return n("div",{key:i,staticClass:"tileRow"},e._l(t,(function(t,r){return n("div",{key:i+""+r,staticClass:"tile",class:t.tile+(e.selected==t.pos?" sel":""),on:{click:function(n){return n.stopPropagation(),e.handleTileClick(t.pos)}}},[e.getPiece(t.pos)?n("div",{staticClass:"piece fa",class:e.getPieceClass(t.pos)+(e.selected==t.pos?" sel":""),on:{click:function(n){return n.stopPropagation(),e.handlePieceClick(t.pos)}}}):e._e()])})),0)})),0),null!=e.selected?[e.isPiece(e.selected)?[n("vui-button",{on:{click:e.removePiece}},[e._v("Remove")])]:[n("div",{staticClass:"mt-1"},[e._v(" Red: "),e._l(e.types,(function(t,i){return n("vui-button",{key:"r"+i,attrs:{icon:t.i},on:{click:function(n){return e.spawn(t.k,"red")}}},[e._v(e._s(t.n))])}))],2),n("div",[e._v(" Black: "),e._l(e.types,(function(t,i){return n("vui-button",{key:"b"+i,attrs:{icon:t.i},on:{click:function(n){return e.spawn(t.k,"black")}}},[e._v(e._s(t.n))])}))],2)]]:e.s.pieces.length?e._e():[n("vui-button",{on:{click:e.presetCheckers}},[e._v("Initialize checker board")]),n("vui-button",{on:{click:e.presetChess}},[e._v("Initialize chess board")])]],2)},r=[],s=(n("a4d3"),n("4de4"),n("7db0"),n("0481"),n("4160"),n("a630"),n("c975"),n("e260"),n("d81d"),n("fb6a"),n("4069"),n("e439"),n("dbb4"),n("b64b"),n("d3b7"),n("3ca3"),n("159b"),n("ddb0"),n("025e"));function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function a(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:null;return t||(t=this.getPiece(e)),t&&!t.ghost},getPieceClass:function(e){var t=this.getPiece(e);return"ic-"+h[t.type]+" "+t.faction+(t.ghost?" ghost":"")},removePiece:function(){var e=this.getPiece(this.selected);s["a"].sendToTopic({remove:{index:e.index}}),this.selected=null},spawn:function(e,t){var n=this.getPiece(this.selected);n&&!n.ghost||(this.qspawn(e,t,this.selected),this.selected=null)},qspawn:function(e,t,n){s["a"].sendToTopic({add:{piece:{type:e,faction:t,pos:n}}})},handlePieceClick:function(e){if(!this.isPiece(e))return this.handleTileClick(e);this.selected==e?this.selected=null:this.selected=e},handleTileClick:function(e){if(this.selected==e)this.selected=null;else if(null!=this.selected){var t=this.getPiece(this.selected);this.isPiece(null,t)&&!this.isPiece(e)&&s["a"].sendToTopic({change:{piece:a(a({},d(t)),{},{pos:e}),index:t.index}}),this.selected=null}else this.selected=e},presetChess:function(){var e=this;m.forEach((function(t,n){return t?e.qspawn(t.t,t.f,n):""}))},presetCheckers:function(){var e=this;g.forEach((function(t,n){return t?e.qspawn(t.t,t.f,n):""}))}}},b=v,y=(n("fa99"),n("2877")),w=Object(y["a"])(b,i,r,!1,null,"58cc165e",null);t["default"]=w.exports},efe9:function(e,t,n){var i=n("746f");i("isConcatSpreadable")},efec:function(e,t,n){var i=n("9112"),r=n("51eb"),s=n("b622"),o=s("toPrimitive"),a=Date.prototype;o in a||i(a,o,r)},f00c:function(e,t,n){var i=n("23e7"),r=n("e285");i({target:"Number",stat:!0},{isFinite:r})},f046:function(e,t,n){"use strict";n("d7b5")},f069:function(e,t,n){"use strict";var i=n("1c0b"),r=function(e){var t,n;this.promise=new e((function(e,i){if(void 0!==t||void 0!==n)throw TypeError("Bad Promise constructor");t=e,n=i})),this.resolve=i(t),this.reject=i(n)};e.exports.f=function(e){return new r(e)}},f095:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("div",[n("h3",[e._v("Status:")]),e.active?n("vui-button",{attrs:{params:{state:1}}},[e._v("Active")]):n("vui-button",{attrs:{params:{state:1}}},[e._v("Inactive")])],1),n("div",[n("h3",[e._v("Beam Visibility:")]),e.visible?n("vui-button",{attrs:{params:{visible:1}}},[e._v("Visible")]):n("vui-button",{attrs:{params:{visible:1}}},[e._v("Invisible")])],1)])},r=[],s={data:function(){return this.$root.$data.state}},o=s,a=n("2877"),c=Object(a["a"])(o,i,r,!1,null,null,null);t["default"]=c.exports},f0e0:function(e,t,n){"use strict";n("a4d3"),n("e01a"),n("d28b"),n("c975"),n("e260"),n("a15b"),n("cca6"),n("d3b7"),n("ac1f"),n("3ca3"),n("841c"),n("ddb0");var i=n("025e"),r=(n("d81d"),n("13d5"),function(e,t){return Array.prototype.map.call(e,(function(e,n){return e+t[n]}))}),s={add:function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&void 0!==arguments[0]?arguments[0]:[0,0],t=s.add(e,a.screenOffset);u(a.windowKey,{pos:t[0]+","+t[1]})}function g(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[300,300];u(a.windowKey,{size:e[0]+"x"+e[1]})}var m=function(){return s.scale(a.screenOffset,-1)},v=function(){return[window.screen.availWidth,window.screen.availHeight]};function b(){l(a.windowKey,"pos",(function(e){a.screenOffset=[e.x-window.screenLeft,e.y-window.screenTop]}))}function y(e){var t,n;a.dragging=!0,a.dragPointOffset=[window.screenLeft-e.screenX,window.screenTop-e.screenY],null===(t=e.target)||void 0===t||t.setCapture(),null===(n=e.target)||void 0===n||n.focus(),_(e),e.target.addEventListener("mousemove",_)}function w(e){e.target.removeEventListener("mousemove",_),e.target.releaseCapture(),document.getElementById("content").focus(),a.dragging=!1}function _(e){a.dragging&&(e.preventDefault(),p(s.add([e.screenX,e.screenY],a.dragPointOffset)))}function x(e,t,n){a.resizeMatrix=[e,t],a.resizing=!0,a.dragPointOffset=[window.screenLeft-n.screenX,window.screenTop-n.screenY],a.initialSize=[window.innerWidth,window.innerHeight],document.addEventListener("mousemove",A),document.addEventListener("mouseup",k),A(n)}function k(e){A(e),document.removeEventListener("mousemove",A),document.removeEventListener("mouseup",k),document.getElementById("content").focus(),a.resizing=!1}function A(e){if(a.resizing){e.preventDefault();var t=s.multiply(a.resizeMatrix,s.add([e.screenX,e.screenY],s.scale([window.screenLeft,window.screenTop],-1),a.dragPointOffset,[1,1]));a.size=s.add(a.initialSize,t),a.size[0]=Math.max(a.size[0],100),a.size[1]=Math.max(a.size[1],50),g(a.size)}}function C(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;u(a.windowKey,{"is-visible":e})}t["a"]={isBYOND:c,winget:l,winset:u,setWindowKey:d,getWindowPosition:h,getWindowSize:f,setWindowPosition:p,setWindowSize:g,getScreenPosition:m,getScreenSize:v,setupDrag:b,dragStartHandler:y,dragEndHandler:w,dragMoveHandler:_,resizeStartHandler:x,resizeEndHandler:k,resizeMoveHandler:A,setVisibility:C}},f183:function(e,t,n){var i=n("d012"),r=n("861d"),s=n("5135"),o=n("9bf2").f,a=n("90e3"),c=n("bb2f"),l=a("meta"),u=0,d=Object.isExtensible||function(){return!0},h=function(e){o(e,l,{value:{objectID:"O"+ ++u,weakData:{}}})},f=function(e,t){if(!r(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!s(e,l)){if(!d(e))return"F";if(!t)return"E";h(e)}return e[l].objectID},p=function(e,t){if(!s(e,l)){if(!d(e))return!0;if(!t)return!1;h(e)}return e[l].weakData},g=function(e){return c&&m.REQUIRED&&d(e)&&!s(e,l)&&h(e),e},m=e.exports={REQUIRED:!1,fastKey:f,getWeakData:p,onFreeze:g};i[l]=!0},f217:function(e,t,n){},f264:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[e.manifestLen(e.fixedmanifest)>0?n("div",e._l(e.fixedmanifest,(function(t,i){return n("table",{key:i,class:"border-dept-"+i.toLowerCase()},[n("tr",{class:"bg-dept-"+i.toLowerCase()},[n("th",{staticClass:"fw-bold",attrs:{colspan:"3"}},[e._v(e._s(i))])]),e._l(t,(function(t){return n("tr",{key:t.name,class:{"fw-bold":t.head}},[n("td",[e._v(e._s(t.name))]),n("td",[e._v(e._s(t.rank))]),n("td",[e._v(e._s(t.active))])])}))],2)})),0):n("div",{staticClass:"fst-italic"},[e._v(" There is no crew. ")]),e.allow_printing?n("div",{staticClass:"text-center mt-2"},[n("vui-button",{attrs:{params:{action:"print"},icon:"print"}},[e._v("Print current manifest")])],1):e._e()])},r=[];n("a4d3"),n("e01a"),n("d28b"),n("4de4"),n("4160"),n("a630"),n("e260"),n("fb6a"),n("b0c0"),n("4fad"),n("c1f9"),n("d3b7"),n("07ac"),n("25f0"),n("3ca3"),n("159b"),n("ddb0");function s(e,t){return u(e)||l(e,t)||a(e,t)||o()}function o(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function a(e,t){if(e){if("string"===typeof e)return c(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?c(e,t):void 0}}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,i=new Array(t);n0})))}}},h=d,f=(n("c13e"),n("2877")),p=Object(f["a"])(h,i,r,!1,null,"c49443fe",null);t["default"]=p.exports},f309:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("div",{staticClass:"table border"},[n("div",{staticClass:"header border"},[n("div",{staticClass:"header-item"},[e._v("Name")]),n("div",{staticClass:"header-item"},[n("vui-tooltip",{attrs:{label:"Pulse/Cell"}},[e._v("Pulse rate or Cell Charge (IPCs)")])],1),n("div",{staticClass:"header-item"},[n("vui-tooltip",{attrs:{label:"BP"}},[e._v("Blood pressure")])],1),n("div",{staticClass:"header-item"},[n("vui-tooltip",{attrs:{label:"Oxy"}},[e._v("Oxygenation")])],1),n("div",{staticClass:"header-item"},[n("vui-tooltip",{attrs:{label:"Temp"}},[e._v("Temperature")])],1),n("div",{staticClass:"header-item"},[e._v("Location")]),e.isAI?[n("div",{staticClass:"header-item"})]:e._e()],2),e._l(e.crewmembers,(function(t){return n("div",{key:t.ref,staticClass:"sensor"},[n("div",{staticClass:"item"},[e._v(e._s(t.name)+" ("+e._s(t.ass)+")")]),-1==t.cellCharge?n("div",{staticClass:"item",class:e.getPulseClass(t.tpulse)},[e._v(e._s(t.pulse))]):n("div",{staticClass:"item",class:e.getChargeClass(t.cellCharge)},[e._v(e._s(t.cellCharge)+"%")]),t.stype>1?n("div",{staticClass:"item",class:e.getPressureClass(t.tpressure)},[e._v(e._s(t.pressure))]):n("div",{staticClass:"item"},[e._v("N/A")]),n("div",{staticClass:"item",class:e.getOxyClass(t.oxyg)},[e._v(e._s(e.toOxyLabel(t.oxyg)))]),n("div",{staticClass:"item"},[t.stype>1?n("span",[e._v(e._s(e.roundTemp(t.bodytemp)))]):e._e()]),t.stype>2?n("div",{staticClass:"item"},[e._v(e._s(t.area)+" ("+e._s(t.x)+", "+e._s(t.y)+", "+e._s(t.z)+")")]):n("div",{staticClass:"item"},[e._v("Not Available")]),e.isAI?[n("div",{staticClass:"item"},[n("vui-button",{attrs:{params:{track:t.ref},disabled:t.stype<3}},[e._v("Track")])],1)]:e._e()],2)}))],2)])},r=[],s={data:function(){return this.$root.$data.state},methods:{roundTemp:function(e){return Math.round(10*e)/10},toOxyLabel:function(e){switch(e){case 5:return"increased";case 4:return"normal";case 3:return"low";case 2:return"very low";case 1:return"extremely low";default:return"N/A"}},getOxyClass:function(e){switch(e){case 5:return"highlight";case 4:return"good";case 3:return"average";case 2:return"bad";case 1:return"bad";default:return"neutral"}},getPulseClass:function(e){switch(e){case 0:return"bad";case 1:return"average";case 2:return"good";case 3:return"highlight";case 4:return"average";case 5:return"bad";default:return"neutral"}},getPressureClass:function(e){switch(e){case 1:return"bad";case 2:return"good";case 3:return"average";case 4:return"bad";default:return"neutral"}},getChargeClass:function(e){return e>10?"highlight":"bad"}}},o=s,a=(n("e3a9"),n("2877")),c=Object(a["a"])(o,i,r,!1,null,"731c48b4",null);t["default"]=c.exports},f3ce:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"uiTitleWrapper",attrs:{draggable:""},on:{mousedown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"left",37,t.key,["Left","ArrowLeft"])||"button"in t&&0!==t.button?null:e.startDragging(t)},mouseup:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"left",37,t.key,["Left","ArrowLeft"])||"button"in t&&0!==t.button?null:e.stopDragging(t)}}},[n("div",{staticClass:"titleBar"},[n("div",{staticClass:"uiStatusIcon uiIcon24",class:e.statusClass,attrs:{unselectable:"on"}}),n("i",{staticClass:"fas ic-bug uiIcon24 uiDebugIcon",class:e.debugClass,attrs:{unselectable:"on"},on:{click:function(t){return e.activateDebug()},mousedown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"left",37,t.key,["Left","ArrowLeft"])||"button"in t&&0!==t.button?null:e.prevent(t)}}}),n("div",{staticClass:"uiTitleText",attrs:{unselectable:"on"}},[e._v(e._s(e.title))]),n("div",{staticClass:"uiTitleClose",attrs:{unselectable:"on"},on:{click:function(t){return e.closeUI(t)},mousedown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"left",37,t.key,["Left","ArrowLeft"])||"button"in t&&0!==t.button?null:e.prevent(t)}}},[e._v("×")])]),e._t("default")],2)},r=[],s=n("025e"),o=n("f0e0"),a={data:function(){return this.$root.$data},computed:{statusClass:function(){return 2==this.status?"good":1==this.status?"average":"bad"},debugClass:function(){return 1==this.debug_view?"good":1==this.debug?"bad":"hidden"}},methods:{closeUI:function(e){e.stopPropagation(),s["a"].sendToTopicRaw({src:this.uiref,vueuiclose:1}),o["a"].setVisibility(0)},startDragging:function(e){o["a"].dragStartHandler(e)},stopDragging:function(e){o["a"].dragEndHandler(e)},prevent:function(e){e.stopPropagation()},activateDebug:function(){this.debug_view=!this.debug_view,this.debug_view?(document.getElementById("content").classList.add("uiDebug"),document.getElementById("debug").classList.add("uiDebug")):(document.getElementById("content").classList.remove("uiDebug"),document.getElementById("debug").classList.remove("uiDebug"))}}},c=a,l=n("2877"),u=Object(l["a"])(c,i,r,!1,null,null,null);t["default"]=u.exports},f415:function(e,t,n){},f4b3:function(e,t,n){"use strict";var i=n("23e7"),r=n("d039"),s=n("7b0b"),o=n("c04e"),a=r((function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})}));i({target:"Date",proto:!0,forced:a},{toJSON:function(e){var t=s(this),n=o(t);return"number"!=typeof n||isFinite(n)?t.toISOString():null}})},f4d9:function(e,t){var n="\\ud800-\\udfff",i="\\u0300-\\u036f",r="\\ufe20-\\ufe2f",s="\\u20d0-\\u20ff",o=i+r+s,a="\\u2700-\\u27bf",c="a-z\\xdf-\\xf6\\xf8-\\xff",l="\\xac\\xb1\\xd7\\xf7",u="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",d="\\u2000-\\u206f",h=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",f="A-Z\\xc0-\\xd6\\xd8-\\xde",p="\\ufe0e\\ufe0f",g=l+u+d+h,m="['’]",v="["+g+"]",b="["+o+"]",y="\\d+",w="["+a+"]",_="["+c+"]",x="[^"+n+g+y+a+c+f+"]",k="\\ud83c[\\udffb-\\udfff]",A="(?:"+b+"|"+k+")",C="[^"+n+"]",E="(?:\\ud83c[\\udde6-\\uddff]){2}",S="[\\ud800-\\udbff][\\udc00-\\udfff]",F="["+f+"]",$="\\u200d",T="(?:"+_+"|"+x+")",L="(?:"+F+"|"+x+")",D="(?:"+m+"(?:d|ll|m|re|s|t|ve))?",B="(?:"+m+"(?:D|LL|M|RE|S|T|VE))?",R=A+"?",O="["+p+"]?",M="(?:"+$+"(?:"+[C,E,S].join("|")+")"+O+R+")*",j="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",I="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",P=O+R+M,N="(?:"+[w,E,S].join("|")+")"+P,W=RegExp([F+"?"+_+"+"+D+"(?="+[v,F,"$"].join("|")+")",L+"+"+B+"(?="+[v,F+T,"$"].join("|")+")",F+"?"+T+"+"+D,F+"+"+B,I,j,y,N].join("|"),"g");function H(e){return e.match(W)||[]}e.exports=H},f4dd:function(e,t,n){"use strict";var i=n("23e7"),r=n("d58f").right,s=n("a640"),o=n("ae40"),a=n("2d00"),c=n("605d"),l=s("reduceRight"),u=o("reduce",{1:0}),d=!c&&a>79&&a<83;i({target:"Array",proto:!0,forced:!l||!u||d},{reduceRight:function(e){return r(this,e,arguments.length,arguments.length>1?arguments[1]:void 0)}})},f5b2:function(e,t,n){"use strict";var i=n("23e7"),r=n("6547").codeAt;i({target:"String",proto:!0},{codePointAt:function(e){return r(this,e)}})},f5df:function(e,t,n){var i=n("00ee"),r=n("c6b6"),s=n("b622"),o=s("toStringTag"),a="Arguments"==r(function(){return arguments}()),c=function(e,t){try{return e[t]}catch(n){}};e.exports=i?r:function(e){var t,n,i;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=c(t=Object(e),o))?n:a?r(t):"Object"==(i=r(t))&&"function"==typeof t.callee?"Arguments":i}},f664:function(e,t,n){var i=n("23e7"),r=n("be8e");i({target:"Math",stat:!0},{fround:r})},f685:function(e,t,n){},f693:function(e,t,n){},f6d6:function(e,t,n){var i=n("23e7"),r=n("23cb"),s=String.fromCharCode,o=String.fromCodePoint,a=!!o&&1!=o.length;i({target:"String",stat:!0,forced:a},{fromCodePoint:function(e){var t,n=[],i=arguments.length,o=0;while(i>o){if(t=+arguments[o++],r(t,1114111)!==t)throw RangeError(t+" is not a valid code point");n.push(t<65536?s(t):s(55296+((t-=65536)>>10),t%1024+56320))}return n.join("")}})},f748:function(e,t){e.exports=Math.sign||function(e){return 0==(e=+e)||e!=e?e:e<0?-1:1}},f772:function(e,t,n){var i=n("5692"),r=n("90e3"),s=i("keys");e.exports=function(e){return s[e]||(s[e]=r(e))}},f785:function(e,t,n){var i=n("2626");i("Array")},f889:function(e,t,n){"use strict";n("63bf")},f8c9:function(e,t,n){var i=n("23e7"),r=n("da84"),s=n("d44e");i({global:!0},{Reflect:{}}),s(r.Reflect,"Reflect",!0)},f8cd:function(e,t,n){var i=n("a691");e.exports=function(e){var t=i(e);if(t<0)throw RangeError("The argument can't be less than 0");return t}},f9a1:function(e,t,n){"use strict";n("b053")},fa99:function(e,t,n){"use strict";n("8535")},faf6:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"item"},[e.label?n("div",{staticClass:"itemLabel",style:{width:100*(1-e.balance)+"%"}},[e._v(e._s(e.label))]):e._e(),n("div",{staticClass:"itemContent",style:{width:100*(e.label?e.balance:1)+"%"}},[e._t("default")],2)])},r=[],s=(n("a9e3"),{name:"vui-item",props:{label:{type:String,default:""},balance:{type:Number,default:.6}}}),o=s,a=(n("aa68"),n("2877")),c=Object(a["a"])(o,i,r,!1,null,"48bbd7cd",null);t["default"]=c.exports},fb2c:function(e,t,n){var i=n("74e8");i("Uint32",(function(e){return function(t,n,i){return e(this,t,n,i)}}))},fb48:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("h3",[e._v("Group Turret controls:")]),n("div",{staticClass:"item"},[n("div",{staticClass:"itemLabelWide"},[e._v(" Behaviour controls are "+e._s(e.settings.locked?"locked":"unlocked")+". ")])]),n("view-turrets-control-part",{attrs:{settings:e.$data}}),n("h2",[e._v("List of turrets and individual controls:")]),e._l(e.turrets,(function(t){return n("div",{key:t.name},[n("h4",[e._v(e._s(t.name))]),n("view-turrets-control-part",{attrs:{settings:t.settings,tref:t.ref}})],1)}))],2)},r=[],s={data:function(){return this.$root.$data.state}},o=s,a=n("2877"),c=Object(a["a"])(o,i,r,!1,null,null,null);t["default"]=c.exports},fb6a:function(e,t,n){"use strict";var i=n("23e7"),r=n("861d"),s=n("e8b5"),o=n("23cb"),a=n("50c4"),c=n("fc6a"),l=n("8418"),u=n("b622"),d=n("1dde"),h=n("ae40"),f=d("slice"),p=h("slice",{ACCESSORS:!0,0:0,1:2}),g=u("species"),m=[].slice,v=Math.max;i({target:"Array",proto:!0,forced:!f||!p},{slice:function(e,t){var n,i,u,d=c(this),h=a(d.length),f=o(e,h),p=o(void 0===t?h:t,h);if(s(d)&&(n=d.constructor,"function"!=typeof n||n!==Array&&!s(n.prototype)?r(n)&&(n=n[g],null===n&&(n=void 0)):n=void 0,n===Array||void 0===n))return m.call(d,f,p);for(i=new(void 0===n?Array:n)(v(p-f,0)),u=0;fe.length)&&(t=e.length);for(var n=0,i=new Array(t);n=0&&Math.floor(t)===t&&isFinite(e)}function f(e){return r(e)&&"function"===typeof e.then&&"function"===typeof e.catch}function p(e){return null==e?"":Array.isArray(e)||u(e)&&e.toString===l?JSON.stringify(e,null,2):String(e)}function g(e){var t=parseFloat(e);return isNaN(t)?e:t}function m(e,t){for(var n=Object.create(null),i=e.split(","),r=0;r-1)return e.splice(n,1)}}var w=Object.prototype.hasOwnProperty;function _(e,t){return w.call(e,t)}function x(e){var t=Object.create(null);return function(n){var i=t[n];return i||(t[n]=e(n))}}var k=/-(\w)/g,A=x((function(e){return e.replace(k,(function(e,t){return t?t.toUpperCase():""}))})),C=x((function(e){return e.charAt(0).toUpperCase()+e.slice(1)})),E=/\B([A-Z])/g,S=x((function(e){return e.replace(E,"-$1").toLowerCase()}));function F(e,t){function n(n){var i=arguments.length;return i?i>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n}function $(e,t){return e.bind(t)}var T=Function.prototype.bind?$:F;function L(e,t){t=t||0;var n=e.length-t,i=new Array(n);while(n--)i[n]=e[n+t];return i}function D(e,t){for(var n in t)e[n]=t[n];return e}function B(e){for(var t={},n=0;n0,re=te&&te.indexOf("edge/")>0,se=(te&&te.indexOf("android"),te&&/iphone|ipad|ipod|ios/.test(te)||"ios"===ee),ae=(te&&/chrome\/\d+/.test(te),te&&/phantomjs/.test(te),te&&te.match(/firefox\/(\d+)/)),oe={}.watch,ce=!1;if(Q)try{var le={};Object.defineProperty(le,"passive",{get:function(){ce=!0}}),window.addEventListener("test-passive",null,le)}catch(Jl){}var ue=function(){return void 0===X&&(X=!Q&&!Z&&"undefined"!==typeof e&&(e["process"]&&"server"===e["process"].env.VUE_ENV)),X},de=Q&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function he(e){return"function"===typeof e&&/native code/.test(e.toString())}var fe,pe="undefined"!==typeof Symbol&&he(Symbol)&&"undefined"!==typeof Reflect&&he(Reflect.ownKeys);fe="undefined"!==typeof Set&&he(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var ge=R,me=0,ve=function(){this.id=me++,this.subs=[]};ve.prototype.addSub=function(e){this.subs.push(e)},ve.prototype.removeSub=function(e){y(this.subs,e)},ve.prototype.depend=function(){ve.target&&ve.target.addDep(this)},ve.prototype.notify=function(){var e=this.subs.slice();for(var t=0,n=e.length;t-1)if(s&&!_(r,"default"))a=!1;else if(""===a||a===S(e)){var c=nt(String,r.type);(c<0||o0&&(a=$t(a,(t||"")+"_"+n),Ft(a[0])&&Ft(l)&&(u[c]=Ae(l.text+a[0].text),a.shift()),u.push.apply(u,a)):o(a)?Ft(l)?u[c]=Ae(l.text+a):""!==a&&u.push(Ae(a)):Ft(a)&&Ft(l)?u[c]=Ae(l.text+a.text):(s(e._isVList)&&r(a.tag)&&i(a.key)&&r(t)&&(a.key="__vlist"+t+"_"+n+"__"),u.push(a)));return u}function Tt(e){var t=e.$options.provide;t&&(e._provided="function"===typeof t?t.call(e):t)}function Lt(e){var t=Dt(e.$options.inject,e);t&&(Le(!1),Object.keys(t).forEach((function(n){Me(e,n,t[n])})),Le(!0))}function Dt(e,t){if(e){for(var n=Object.create(null),i=pe?Reflect.ownKeys(e):Object.keys(e),r=0;r0,a=e?!!e.$stable:!s,o=e&&e.$key;if(e){if(e._normalized)return e._normalized;if(a&&i&&i!==n&&o===i.$key&&!s&&!i.$hasNormal)return i;for(var c in r={},e)e[c]&&"$"!==c[0]&&(r[c]=Mt(t,c,e[c]))}else r={};for(var l in t)l in r||(r[l]=jt(t,l));return e&&Object.isExtensible(e)&&(e._normalized=r),q(r,"$stable",a),q(r,"$key",o),q(r,"$hasNormal",s),r}function Mt(e,t,n){var i=function(){var e=arguments.length?n.apply(null,arguments):n({});return e=e&&"object"===typeof e&&!Array.isArray(e)?[e]:St(e),e&&(0===e.length||1===e.length&&e[0].isComment)?void 0:e};return n.proxy&&Object.defineProperty(e,t,{get:i,enumerable:!0,configurable:!0}),i}function jt(e,t){return function(){return e[t]}}function It(e,t){var n,i,s,a,o;if(Array.isArray(e)||"string"===typeof e)for(n=new Array(e.length),i=0,s=e.length;i1?L(n):n;for(var i=L(arguments,1),r='event handler for "'+e+'"',s=0,a=n.length;sdocument.createEvent("Event").timeStamp&&(Xn=function(){return Jn.now()})}function Qn(){var e,t;for(Yn=Xn(),Gn=!0,Hn.sort((function(e,t){return e.id-t.id})),qn=0;qnqn&&Hn[n].id>e.id)n--;Hn.splice(n+1,0,e)}else Hn.push(e);zn||(zn=!0,mt(Qn))}}var ii=0,ri=function(e,t,n,i,r){this.vm=e,r&&(e._watcher=this),e._watchers.push(this),i?(this.deep=!!i.deep,this.user=!!i.user,this.lazy=!!i.lazy,this.sync=!!i.sync,this.before=i.before):this.deep=this.user=this.lazy=this.sync=!1,this.cb=n,this.id=++ii,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new fe,this.newDepIds=new fe,this.expression="","function"===typeof t?this.getter=t:(this.getter=Y(t),this.getter||(this.getter=R)),this.value=this.lazy?void 0:this.get()};ri.prototype.get=function(){var e;ye(this);var t=this.vm;try{e=this.getter.call(t,t)}catch(Jl){if(!this.user)throw Jl;it(Jl,t,'getter for watcher "'+this.expression+'"')}finally{this.deep&&bt(e),we(),this.cleanupDeps()}return e},ri.prototype.addDep=function(e){var t=e.id;this.newDepIds.has(t)||(this.newDepIds.add(t),this.newDeps.push(e),this.depIds.has(t)||e.addSub(this))},ri.prototype.cleanupDeps=function(){var e=this.deps.length;while(e--){var t=this.deps[e];this.newDepIds.has(t.id)||t.removeSub(this)}var n=this.depIds;this.depIds=this.newDepIds,this.newDepIds=n,this.newDepIds.clear(),n=this.deps,this.deps=this.newDeps,this.newDeps=n,this.newDeps.length=0},ri.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():ni(this)},ri.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||c(e)||this.deep){var t=this.value;if(this.value=e,this.user)try{this.cb.call(this.vm,e,t)}catch(Jl){it(Jl,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,e,t)}}},ri.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},ri.prototype.depend=function(){var e=this.deps.length;while(e--)this.deps[e].depend()},ri.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||y(this.vm._watchers,this);var e=this.deps.length;while(e--)this.deps[e].removeSub(this);this.active=!1}};var si={enumerable:!0,configurable:!0,get:R,set:R};function ai(e,t,n){si.get=function(){return this[t][n]},si.set=function(e){this[t][n]=e},Object.defineProperty(e,n,si)}function oi(e){e._watchers=[];var t=e.$options;t.props&&ci(e,t.props),t.methods&&mi(e,t.methods),t.data?li(e):Oe(e._data={},!0),t.computed&&hi(e,t.computed),t.watch&&t.watch!==oe&&vi(e,t.watch)}function ci(e,t){var n=e.$options.propsData||{},i=e._props={},r=e.$options._propKeys=[],s=!e.$parent;s||Le(!1);var a=function(s){r.push(s);var a=Qe(s,t,n,e);Me(i,s,a),s in e||ai(e,"_props",s)};for(var o in t)a(o);Le(!0)}function li(e){var t=e.$options.data;t=e._data="function"===typeof t?ui(t,e):t||{},u(t)||(t={});var n=Object.keys(t),i=e.$options.props,r=(e.$options.methods,n.length);while(r--){var s=n[r];0,i&&_(i,s)||G(s)||ai(e,"_data",s)}Oe(t,!0)}function ui(e,t){ye();try{return e.call(t,t)}catch(Jl){return it(Jl,t,"data()"),{}}finally{we()}}var di={lazy:!0};function hi(e,t){var n=e._computedWatchers=Object.create(null),i=ue();for(var r in t){var s=t[r],a="function"===typeof s?s:s.get;0,i||(n[r]=new ri(e,a||R,R,di)),r in e||fi(e,r,s)}}function fi(e,t,n){var i=!ue();"function"===typeof n?(si.get=i?pi(t):gi(n),si.set=R):(si.get=n.get?i&&!1!==n.cache?pi(t):gi(n.get):R,si.set=n.set||R),Object.defineProperty(e,t,si)}function pi(e){return function(){var t=this._computedWatchers&&this._computedWatchers[e];if(t)return t.dirty&&t.evaluate(),ve.target&&t.depend(),t.value}}function gi(e){return function(){return e.call(this,this)}}function mi(e,t){e.$options.props;for(var n in t)e[n]="function"!==typeof t[n]?R:T(t[n],e)}function vi(e,t){for(var n in t){var i=t[n];if(Array.isArray(i))for(var r=0;r-1)return this;var n=L(arguments,1);return n.unshift(this),"function"===typeof e.install?e.install.apply(e,n):"function"===typeof e&&e.apply(null,n),t.push(e),this}}function Si(e){e.mixin=function(e){return this.options=Xe(this.options,e),this}}function Fi(e){e.cid=0;var t=1;e.extend=function(e){e=e||{};var n=this,i=n.cid,r=e._Ctor||(e._Ctor={});if(r[i])return r[i];var s=e.name||n.options.name;var a=function(e){this._init(e)};return a.prototype=Object.create(n.prototype),a.prototype.constructor=a,a.cid=t++,a.options=Xe(n.options,e),a["super"]=n,a.options.props&&$i(a),a.options.computed&&Ti(a),a.extend=n.extend,a.mixin=n.mixin,a.use=n.use,H.forEach((function(e){a[e]=n[e]})),s&&(a.options.components[s]=a),a.superOptions=n.options,a.extendOptions=e,a.sealedOptions=D({},a.options),r[i]=a,a}}function $i(e){var t=e.options.props;for(var n in t)ai(e.prototype,"_props",n)}function Ti(e){var t=e.options.computed;for(var n in t)fi(e.prototype,n,t[n])}function Li(e){H.forEach((function(t){e[t]=function(e,n){return n?("component"===t&&u(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),"directive"===t&&"function"===typeof n&&(n={bind:n,update:n}),this.options[t+"s"][e]=n,n):this.options[t+"s"][e]}}))}function Di(e){return e&&(e.Ctor.options.name||e.tag)}function Bi(e,t){return Array.isArray(e)?e.indexOf(t)>-1:"string"===typeof e?e.split(",").indexOf(t)>-1:!!d(e)&&e.test(t)}function Ri(e,t){var n=e.cache,i=e.keys,r=e._vnode;for(var s in n){var a=n[s];if(a){var o=Di(a.componentOptions);o&&!t(o)&&Oi(n,s,i,r)}}}function Oi(e,t,n,i){var r=e[t];!r||i&&r.tag===i.tag||r.componentInstance.$destroy(),e[t]=null,y(n,t)}_i(Ci),yi(Ci),Ln(Ci),On(Ci),wn(Ci);var Mi=[String,RegExp,Array],ji={name:"keep-alive",abstract:!0,props:{include:Mi,exclude:Mi,max:[String,Number]},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var e in this.cache)Oi(this.cache,e,this.keys)},mounted:function(){var e=this;this.$watch("include",(function(t){Ri(e,(function(e){return Bi(t,e)}))})),this.$watch("exclude",(function(t){Ri(e,(function(e){return!Bi(t,e)}))}))},render:function(){var e=this.$slots.default,t=Cn(e),n=t&&t.componentOptions;if(n){var i=Di(n),r=this,s=r.include,a=r.exclude;if(s&&(!i||!Bi(s,i))||a&&i&&Bi(a,i))return t;var o=this,c=o.cache,l=o.keys,u=null==t.key?n.Ctor.cid+(n.tag?"::"+n.tag:""):t.key;c[u]?(t.componentInstance=c[u].componentInstance,y(l,u),l.push(u)):(c[u]=t,l.push(u),this.max&&l.length>parseInt(this.max)&&Oi(c,l[0],l,this._vnode)),t.data.keepAlive=!0}return t||e&&e[0]}},Ii={KeepAlive:ji};function Pi(e){var t={get:function(){return U}};Object.defineProperty(e,"config",t),e.util={warn:ge,extend:D,mergeOptions:Xe,defineReactive:Me},e.set=je,e.delete=Ie,e.nextTick=mt,e.observable=function(e){return Oe(e),e},e.options=Object.create(null),H.forEach((function(t){e.options[t+"s"]=Object.create(null)})),e.options._base=e,D(e.options.components,Ii),Ei(e),Si(e),Fi(e),Li(e)}Pi(Ci),Object.defineProperty(Ci.prototype,"$isServer",{get:ue}),Object.defineProperty(Ci.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Ci,"FunctionalRenderContext",{value:Zt}),Ci.version="2.6.12";var Ni=m("style,class"),Wi=m("input,textarea,option,select,progress"),Hi=function(e,t,n){return"value"===n&&Wi(e)&&"button"!==t||"selected"===n&&"option"===e||"checked"===n&&"input"===e||"muted"===n&&"video"===e},Vi=m("contenteditable,draggable,spellcheck"),Ui=m("events,caret,typing,plaintext-only"),zi=function(e,t){return Xi(t)||"false"===t?"false":"contenteditable"===e&&Ui(t)?t:"true"},Gi=m("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible"),qi="http://www.w3.org/1999/xlink",Ki=function(e){return":"===e.charAt(5)&&"xlink"===e.slice(0,5)},Yi=function(e){return Ki(e)?e.slice(6,e.length):""},Xi=function(e){return null==e||!1===e};function Ji(e){var t=e.data,n=e,i=e;while(r(i.componentInstance))i=i.componentInstance._vnode,i&&i.data&&(t=Qi(i.data,t));while(r(n=n.parent))n&&n.data&&(t=Qi(t,n.data));return Zi(t.staticClass,t.class)}function Qi(e,t){return{staticClass:er(e.staticClass,t.staticClass),class:r(e.class)?[e.class,t.class]:t.class}}function Zi(e,t){return r(e)||r(t)?er(e,tr(t)):""}function er(e,t){return e?t?e+" "+t:e:t||""}function tr(e){return Array.isArray(e)?nr(e):c(e)?ir(e):"string"===typeof e?e:""}function nr(e){for(var t,n="",i=0,s=e.length;i-1?ur[e]=t.constructor===window.HTMLUnknownElement||t.constructor===window.HTMLElement:ur[e]=/HTMLUnknownElement/.test(t.toString())}var hr=m("text,number,password,search,email,tel,url");function fr(e){if("string"===typeof e){var t=document.querySelector(e);return t||document.createElement("div")}return e}function pr(e,t){var n=document.createElement(e);return"select"!==e||t.data&&t.data.attrs&&void 0!==t.data.attrs.multiple&&n.setAttribute("multiple","multiple"),n}function gr(e,t){return document.createElementNS(rr[e],t)}function mr(e){return document.createTextNode(e)}function vr(e){return document.createComment(e)}function br(e,t,n){e.insertBefore(t,n)}function yr(e,t){e.removeChild(t)}function wr(e,t){e.appendChild(t)}function _r(e){return e.parentNode}function xr(e){return e.nextSibling}function kr(e){return e.tagName}function Ar(e,t){e.textContent=t}function Cr(e,t){e.setAttribute(t,"")}var Er=Object.freeze({createElement:pr,createElementNS:gr,createTextNode:mr,createComment:vr,insertBefore:br,removeChild:yr,appendChild:wr,parentNode:_r,nextSibling:xr,tagName:kr,setTextContent:Ar,setStyleScope:Cr}),Sr={create:function(e,t){Fr(t)},update:function(e,t){e.data.ref!==t.data.ref&&(Fr(e,!0),Fr(t))},destroy:function(e){Fr(e,!0)}};function Fr(e,t){var n=e.data.ref;if(r(n)){var i=e.context,s=e.componentInstance||e.elm,a=i.$refs;t?Array.isArray(a[n])?y(a[n],s):a[n]===s&&(a[n]=void 0):e.data.refInFor?Array.isArray(a[n])?a[n].indexOf(s)<0&&a[n].push(s):a[n]=[s]:a[n]=s}}var $r=new _e("",{},[]),Tr=["create","activate","update","remove","destroy"];function Lr(e,t){return e.key===t.key&&(e.tag===t.tag&&e.isComment===t.isComment&&r(e.data)===r(t.data)&&Dr(e,t)||s(e.isAsyncPlaceholder)&&e.asyncFactory===t.asyncFactory&&i(t.asyncFactory.error))}function Dr(e,t){if("input"!==e.tag)return!0;var n,i=r(n=e.data)&&r(n=n.attrs)&&n.type,s=r(n=t.data)&&r(n=n.attrs)&&n.type;return i===s||hr(i)&&hr(s)}function Br(e,t,n){var i,s,a={};for(i=t;i<=n;++i)s=e[i].key,r(s)&&(a[s]=i);return a}function Rr(e){var t,n,a={},c=e.modules,l=e.nodeOps;for(t=0;tg?(d=i(n[b+1])?null:n[b+1].elm,k(e,d,n,p,b,s)):p>b&&C(t,h,g)}function F(e,t,n,i){for(var s=n;s-1?zr(e,t,n):Gi(t)?Xi(n)?e.removeAttribute(t):(n="allowfullscreen"===t&&"EMBED"===e.tagName?"true":t,e.setAttribute(t,n)):Vi(t)?e.setAttribute(t,zi(t,n)):Ki(t)?Xi(n)?e.removeAttributeNS(qi,Yi(t)):e.setAttributeNS(qi,t,n):zr(e,t,n)}function zr(e,t,n){if(Xi(n))e.removeAttribute(t);else{if(ne&&!ie&&"TEXTAREA"===e.tagName&&"placeholder"===t&&""!==n&&!e.__ieph){var i=function(t){t.stopImmediatePropagation(),e.removeEventListener("input",i)};e.addEventListener("input",i),e.__ieph=!0}e.setAttribute(t,n)}}var Gr={create:Vr,update:Vr};function qr(e,t){var n=t.elm,s=t.data,a=e.data;if(!(i(s.staticClass)&&i(s.class)&&(i(a)||i(a.staticClass)&&i(a.class)))){var o=Ji(t),c=n._transitionClasses;r(c)&&(o=er(o,tr(c))),o!==n._prevClass&&(n.setAttribute("class",o),n._prevClass=o)}}var Kr,Yr,Xr,Jr,Qr,Zr,es={create:qr,update:qr},ts=/[\w).+\-_$\]]/;function ns(e){var t,n,i,r,s,a=!1,o=!1,c=!1,l=!1,u=0,d=0,h=0,f=0;for(i=0;i=0;p--)if(g=e.charAt(p)," "!==g)break;g&&ts.test(g)||(l=!0)}}else void 0===r?(f=i+1,r=e.slice(0,i).trim()):m();function m(){(s||(s=[])).push(e.slice(f,i).trim()),f=i+1}if(void 0===r?r=e.slice(0,i).trim():0!==f&&m(),s)for(i=0;i-1?{exp:e.slice(0,Jr),key:'"'+e.slice(Jr+1)+'"'}:{exp:e,key:null};Yr=e,Jr=Qr=Zr=0;while(!_s())Xr=ws(),xs(Xr)?As(Xr):91===Xr&&ks(Xr);return{exp:e.slice(0,Qr),key:e.slice(Qr+1,Zr)}}function ws(){return Yr.charCodeAt(++Jr)}function _s(){return Jr>=Kr}function xs(e){return 34===e||39===e}function ks(e){var t=1;Qr=Jr;while(!_s())if(e=ws(),xs(e))As(e);else if(91===e&&t++,93===e&&t--,0===t){Zr=Jr;break}}function As(e){var t=e;while(!_s())if(e=ws(),e===t)break}var Cs,Es="__r",Ss="__c";function Fs(e,t,n){n;var i=t.value,r=t.modifiers,s=e.tag,a=e.attrsMap.type;if(e.component)return vs(e,i,r),!1;if("select"===s)Ls(e,i,r);else if("input"===s&&"checkbox"===a)$s(e,i,r);else if("input"===s&&"radio"===a)Ts(e,i,r);else if("input"===s||"textarea"===s)Ds(e,i,r);else{if(!U.isReservedTag(s))return vs(e,i,r),!1}return!0}function $s(e,t,n){var i=n&&n.number,r=fs(e,"value")||"null",s=fs(e,"true-value")||"true",a=fs(e,"false-value")||"false";as(e,"checked","Array.isArray("+t+")?_i("+t+","+r+")>-1"+("true"===s?":("+t+")":":_q("+t+","+s+")")),ds(e,"change","var $$a="+t+",$$el=$event.target,$$c=$$el.checked?("+s+"):("+a+");if(Array.isArray($$a)){var $$v="+(i?"_n("+r+")":r)+",$$i=_i($$a,$$v);if($$el.checked){$$i<0&&("+bs(t,"$$a.concat([$$v])")+")}else{$$i>-1&&("+bs(t,"$$a.slice(0,$$i).concat($$a.slice($$i+1))")+")}}else{"+bs(t,"$$c")+"}",null,!0)}function Ts(e,t,n){var i=n&&n.number,r=fs(e,"value")||"null";r=i?"_n("+r+")":r,as(e,"checked","_q("+t+","+r+")"),ds(e,"change",bs(t,r),null,!0)}function Ls(e,t,n){var i=n&&n.number,r='Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = "_value" in o ? o._value : o.value;return '+(i?"_n(val)":"val")+"})",s="$event.target.multiple ? $$selectedVal : $$selectedVal[0]",a="var $$selectedVal = "+r+";";a=a+" "+bs(t,s),ds(e,"change",a,null,!0)}function Ds(e,t,n){var i=e.attrsMap.type,r=n||{},s=r.lazy,a=r.number,o=r.trim,c=!s&&"range"!==i,l=s?"change":"range"===i?Es:"input",u="$event.target.value";o&&(u="$event.target.value.trim()"),a&&(u="_n("+u+")");var d=bs(t,u);c&&(d="if($event.target.composing)return;"+d),as(e,"value","("+t+")"),ds(e,l,d,null,!0),(o||a)&&ds(e,"blur","$forceUpdate()")}function Bs(e){if(r(e[Es])){var t=ne?"change":"input";e[t]=[].concat(e[Es],e[t]||[]),delete e[Es]}r(e[Ss])&&(e.change=[].concat(e[Ss],e.change||[]),delete e[Ss])}function Rs(e,t,n){var i=Cs;return function r(){var s=t.apply(null,arguments);null!==s&&js(e,r,n,i)}}var Os=ct&&!(ae&&Number(ae[1])<=53);function Ms(e,t,n,i){if(Os){var r=Yn,s=t;t=s._wrapper=function(e){if(e.target===e.currentTarget||e.timeStamp>=r||e.timeStamp<=0||e.target.ownerDocument!==document)return s.apply(this,arguments)}}Cs.addEventListener(e,t,ce?{capture:n,passive:i}:n)}function js(e,t,n,i){(i||Cs).removeEventListener(e,t._wrapper||t,n)}function Is(e,t){if(!i(e.data.on)||!i(t.data.on)){var n=t.data.on||{},r=e.data.on||{};Cs=t.elm,Bs(n),xt(n,r,Ms,js,Rs,t.context),Cs=void 0}}var Ps,Ns={create:Is,update:Is};function Ws(e,t){if(!i(e.data.domProps)||!i(t.data.domProps)){var n,s,a=t.elm,o=e.data.domProps||{},c=t.data.domProps||{};for(n in r(c.__ob__)&&(c=t.data.domProps=D({},c)),o)n in c||(a[n]="");for(n in c){if(s=c[n],"textContent"===n||"innerHTML"===n){if(t.children&&(t.children.length=0),s===o[n])continue;1===a.childNodes.length&&a.removeChild(a.childNodes[0])}if("value"===n&&"PROGRESS"!==a.tagName){a._value=s;var l=i(s)?"":String(s);Hs(a,l)&&(a.value=l)}else if("innerHTML"===n&&ar(a.tagName)&&i(a.innerHTML)){Ps=Ps||document.createElement("div"),Ps.innerHTML=""+s+"";var u=Ps.firstChild;while(a.firstChild)a.removeChild(a.firstChild);while(u.firstChild)a.appendChild(u.firstChild)}else if(s!==o[n])try{a[n]=s}catch(Jl){}}}}function Hs(e,t){return!e.composing&&("OPTION"===e.tagName||Vs(e,t)||Us(e,t))}function Vs(e,t){var n=!0;try{n=document.activeElement!==e}catch(Jl){}return n&&e.value!==t}function Us(e,t){var n=e.value,i=e._vModifiers;if(r(i)){if(i.number)return g(n)!==g(t);if(i.trim)return n.trim()!==t.trim()}return n!==t}var zs={create:Ws,update:Ws},Gs=x((function(e){var t={},n=/;(?![^(]*\))/g,i=/:(.+)/;return e.split(n).forEach((function(e){if(e){var n=e.split(i);n.length>1&&(t[n[0].trim()]=n[1].trim())}})),t}));function qs(e){var t=Ks(e.style);return e.staticStyle?D(e.staticStyle,t):t}function Ks(e){return Array.isArray(e)?B(e):"string"===typeof e?Gs(e):e}function Ys(e,t){var n,i={};if(t){var r=e;while(r.componentInstance)r=r.componentInstance._vnode,r&&r.data&&(n=qs(r.data))&&D(i,n)}(n=qs(e.data))&&D(i,n);var s=e;while(s=s.parent)s.data&&(n=qs(s.data))&&D(i,n);return i}var Xs,Js=/^--/,Qs=/\s*!important$/,Zs=function(e,t,n){if(Js.test(t))e.style.setProperty(t,n);else if(Qs.test(n))e.style.setProperty(S(t),n.replace(Qs,""),"important");else{var i=ta(t);if(Array.isArray(n))for(var r=0,s=n.length;r-1?t.split(ra).forEach((function(t){return e.classList.add(t)})):e.classList.add(t);else{var n=" "+(e.getAttribute("class")||"")+" ";n.indexOf(" "+t+" ")<0&&e.setAttribute("class",(n+t).trim())}}function aa(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.split(ra).forEach((function(t){return e.classList.remove(t)})):e.classList.remove(t),e.classList.length||e.removeAttribute("class");else{var n=" "+(e.getAttribute("class")||"")+" ",i=" "+t+" ";while(n.indexOf(i)>=0)n=n.replace(i," ");n=n.trim(),n?e.setAttribute("class",n):e.removeAttribute("class")}}function oa(e){if(e){if("object"===typeof e){var t={};return!1!==e.css&&D(t,ca(e.name||"v")),D(t,e),t}return"string"===typeof e?ca(e):void 0}}var ca=x((function(e){return{enterClass:e+"-enter",enterToClass:e+"-enter-to",enterActiveClass:e+"-enter-active",leaveClass:e+"-leave",leaveToClass:e+"-leave-to",leaveActiveClass:e+"-leave-active"}})),la=Q&&!ie,ua="transition",da="animation",ha="transition",fa="transitionend",pa="animation",ga="animationend";la&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(ha="WebkitTransition",fa="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(pa="WebkitAnimation",ga="webkitAnimationEnd"));var ma=Q?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(e){return e()};function va(e){ma((function(){ma(e)}))}function ba(e,t){var n=e._transitionClasses||(e._transitionClasses=[]);n.indexOf(t)<0&&(n.push(t),sa(e,t))}function ya(e,t){e._transitionClasses&&y(e._transitionClasses,t),aa(e,t)}function wa(e,t,n){var i=xa(e,t),r=i.type,s=i.timeout,a=i.propCount;if(!r)return n();var o=r===ua?fa:ga,c=0,l=function(){e.removeEventListener(o,u),n()},u=function(t){t.target===e&&++c>=a&&l()};setTimeout((function(){c0&&(n=ua,u=a,d=s.length):t===da?l>0&&(n=da,u=l,d=c.length):(u=Math.max(a,l),n=u>0?a>l?ua:da:null,d=n?n===ua?s.length:c.length:0);var h=n===ua&&_a.test(i[ha+"Property"]);return{type:n,timeout:u,propCount:d,hasTransform:h}}function ka(e,t){while(e.length1}function $a(e,t){!0!==t.data.show&&Ca(t)}var Ta=Q?{create:$a,activate:$a,remove:function(e,t){!0!==e.data.show?Ea(e,t):t()}}:{},La=[Gr,es,Ns,zs,ia,Ta],Da=La.concat(Hr),Ba=Rr({nodeOps:Er,modules:Da});ie&&document.addEventListener("selectionchange",(function(){var e=document.activeElement;e&&e.vmodel&&Wa(e,"input")}));var Ra={inserted:function(e,t,n,i){"select"===n.tag?(i.elm&&!i.elm._vOptions?kt(n,"postpatch",(function(){Ra.componentUpdated(e,t,n)})):Oa(e,t,n.context),e._vOptions=[].map.call(e.options,Ia)):("textarea"===n.tag||hr(e.type))&&(e._vModifiers=t.modifiers,t.modifiers.lazy||(e.addEventListener("compositionstart",Pa),e.addEventListener("compositionend",Na),e.addEventListener("change",Na),ie&&(e.vmodel=!0)))},componentUpdated:function(e,t,n){if("select"===n.tag){Oa(e,t,n.context);var i=e._vOptions,r=e._vOptions=[].map.call(e.options,Ia);if(r.some((function(e,t){return!I(e,i[t])}))){var s=e.multiple?t.value.some((function(e){return ja(e,r)})):t.value!==t.oldValue&&ja(t.value,r);s&&Wa(e,"change")}}}};function Oa(e,t,n){Ma(e,t,n),(ne||re)&&setTimeout((function(){Ma(e,t,n)}),0)}function Ma(e,t,n){var i=t.value,r=e.multiple;if(!r||Array.isArray(i)){for(var s,a,o=0,c=e.options.length;o-1,a.selected!==s&&(a.selected=s);else if(I(Ia(a),i))return void(e.selectedIndex!==o&&(e.selectedIndex=o));r||(e.selectedIndex=-1)}}function ja(e,t){return t.every((function(t){return!I(t,e)}))}function Ia(e){return"_value"in e?e._value:e.value}function Pa(e){e.target.composing=!0}function Na(e){e.target.composing&&(e.target.composing=!1,Wa(e.target,"input"))}function Wa(e,t){var n=document.createEvent("HTMLEvents");n.initEvent(t,!0,!0),e.dispatchEvent(n)}function Ha(e){return!e.componentInstance||e.data&&e.data.transition?e:Ha(e.componentInstance._vnode)}var Va={bind:function(e,t,n){var i=t.value;n=Ha(n);var r=n.data&&n.data.transition,s=e.__vOriginalDisplay="none"===e.style.display?"":e.style.display;i&&r?(n.data.show=!0,Ca(n,(function(){e.style.display=s}))):e.style.display=i?s:"none"},update:function(e,t,n){var i=t.value,r=t.oldValue;if(!i!==!r){n=Ha(n);var s=n.data&&n.data.transition;s?(n.data.show=!0,i?Ca(n,(function(){e.style.display=e.__vOriginalDisplay})):Ea(n,(function(){e.style.display="none"}))):e.style.display=i?e.__vOriginalDisplay:"none"}},unbind:function(e,t,n,i,r){r||(e.style.display=e.__vOriginalDisplay)}},Ua={model:Ra,show:Va},za={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function Ga(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abstract?Ga(Cn(t.children)):e}function qa(e){var t={},n=e.$options;for(var i in n.propsData)t[i]=e[i];var r=n._parentListeners;for(var s in r)t[A(s)]=r[s];return t}function Ka(e,t){if(/\d-keep-alive$/.test(t.tag))return e("keep-alive",{props:t.componentOptions.propsData})}function Ya(e){while(e=e.parent)if(e.data.transition)return!0}function Xa(e,t){return t.key===e.key&&t.tag===e.tag}var Ja=function(e){return e.tag||An(e)},Qa=function(e){return"show"===e.name},Za={name:"transition",props:za,abstract:!0,render:function(e){var t=this,n=this.$slots.default;if(n&&(n=n.filter(Ja),n.length)){0;var i=this.mode;0;var r=n[0];if(Ya(this.$vnode))return r;var s=Ga(r);if(!s)return r;if(this._leaving)return Ka(e,r);var a="__transition-"+this._uid+"-";s.key=null==s.key?s.isComment?a+"comment":a+s.tag:o(s.key)?0===String(s.key).indexOf(a)?s.key:a+s.key:s.key;var c=(s.data||(s.data={})).transition=qa(this),l=this._vnode,u=Ga(l);if(s.data.directives&&s.data.directives.some(Qa)&&(s.data.show=!0),u&&u.data&&!Xa(s,u)&&!An(u)&&(!u.componentInstance||!u.componentInstance._vnode.isComment)){var d=u.data.transition=D({},c);if("out-in"===i)return this._leaving=!0,kt(d,"afterLeave",(function(){t._leaving=!1,t.$forceUpdate()})),Ka(e,r);if("in-out"===i){if(An(s))return l;var h,f=function(){h()};kt(c,"afterEnter",f),kt(c,"enterCancelled",f),kt(d,"delayLeave",(function(e){h=e}))}}return r}}},eo=D({tag:String,moveClass:String},za);delete eo.mode;var to={props:eo,beforeMount:function(){var e=this,t=this._update;this._update=function(n,i){var r=Bn(e);e.__patch__(e._vnode,e.kept,!1,!0),e._vnode=e.kept,r(),t.call(e,n,i)}},render:function(e){for(var t=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),i=this.prevChildren=this.children,r=this.$slots.default||[],s=this.children=[],a=qa(this),o=0;oc&&(o.push(s=e.slice(c,r)),a.push(JSON.stringify(s)));var l=ns(i[1].trim());a.push("_s("+l+")"),o.push({"@binding":l}),c=r+i[0].length}return c\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,ko=/^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,Ao="[a-zA-Z_][\\-\\.0-9_a-zA-Z"+z.source+"]*",Co="((?:"+Ao+"\\:)?"+Ao+")",Eo=new RegExp("^<"+Co),So=/^\s*(\/?)>/,Fo=new RegExp("^<\\/"+Co+"[^>]*>"),$o=/^]+>/i,To=/^",""":'"',"&":"&"," ":"\n"," ":"\t","'":"'"},Oo=/&(?:lt|gt|quot|amp|#39);/g,Mo=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,jo=m("pre,textarea",!0),Io=function(e,t){return e&&jo(e)&&"\n"===t[0]};function Po(e,t){var n=t?Mo:Oo;return e.replace(n,(function(e){return Ro[e]}))}function No(e,t){var n,i,r=[],s=t.expectHTML,a=t.isUnaryTag||O,o=t.canBeLeftOpenTag||O,c=0;while(e){if(n=e,i&&Do(i)){var l=0,u=i.toLowerCase(),d=Bo[u]||(Bo[u]=new RegExp("([\\s\\S]*?)(]*>)","i")),h=e.replace(d,(function(e,n,i){return l=i.length,Do(u)||"noscript"===u||(n=n.replace(//g,"$1").replace(//g,"$1")),Io(u,n)&&(n=n.slice(1)),t.chars&&t.chars(n),""}));c+=e.length-h.length,e=h,E(u,c-l,c)}else{var f=e.indexOf("<");if(0===f){if(To.test(e)){var p=e.indexOf("--\x3e");if(p>=0){t.shouldKeepComment&&t.comment(e.substring(4,p),c,c+p+3),k(p+3);continue}}if(Lo.test(e)){var g=e.indexOf("]>");if(g>=0){k(g+2);continue}}var m=e.match($o);if(m){k(m[0].length);continue}var v=e.match(Fo);if(v){var b=c;k(v[0].length),E(v[1],b,c);continue}var y=A();if(y){C(y),Io(y.tagName,e)&&k(1);continue}}var w=void 0,_=void 0,x=void 0;if(f>=0){_=e.slice(f);while(!Fo.test(_)&&!Eo.test(_)&&!To.test(_)&&!Lo.test(_)){if(x=_.indexOf("<",1),x<0)break;f+=x,_=e.slice(f)}w=e.substring(0,f)}f<0&&(w=e),w&&k(w.length),t.chars&&w&&t.chars(w,c-w.length,c)}if(e===n){t.chars&&t.chars(e);break}}function k(t){c+=t,e=e.substring(t)}function A(){var t=e.match(Eo);if(t){var n,i,r={tagName:t[1],attrs:[],start:c};k(t[0].length);while(!(n=e.match(So))&&(i=e.match(ko)||e.match(xo)))i.start=c,k(i[0].length),i.end=c,r.attrs.push(i);if(n)return r.unarySlash=n[1],k(n[0].length),r.end=c,r}}function C(e){var n=e.tagName,c=e.unarySlash;s&&("p"===i&&_o(n)&&E(i),o(n)&&i===n&&E(n));for(var l=a(n)||!!c,u=e.attrs.length,d=new Array(u),h=0;h=0;a--)if(r[a].lowerCasedTag===o)break}else a=0;if(a>=0){for(var l=r.length-1;l>=a;l--)t.end&&t.end(r[l].tag,n,s);r.length=a,i=a&&r[a-1].tag}else"br"===o?t.start&&t.start(e,[],!0,n,s):"p"===o&&(t.start&&t.start(e,[],!1,n,s),t.end&&t.end(e,n,s))}E()}var Wo,Ho,Vo,Uo,zo,Go,qo,Ko,Yo=/^@|^v-on:/,Xo=/^v-|^@|^:|^#/,Jo=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,Qo=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,Zo=/^\(|\)$/g,ec=/^\[.*\]$/,tc=/:(.*)$/,nc=/^:|^\.|^v-bind:/,ic=/\.[^.\]]+(?=[^\]]*$)/g,rc=/^v-slot(:|$)|^#/,sc=/[\r\n]/,ac=/\s+/g,oc=x(bo.decode),cc="_empty_";function lc(e,t,n){return{type:1,tag:e,attrsList:t,attrsMap:Tc(t),rawAttrsMap:{},parent:n,children:[]}}function uc(e,t){Wo=t.warn||rs,Go=t.isPreTag||O,qo=t.mustUseProp||O,Ko=t.getTagNamespace||O;var n=t.isReservedTag||O;(function(e){return!!e.component||!n(e.tag)}),Vo=ss(t.modules,"transformNode"),Uo=ss(t.modules,"preTransformNode"),zo=ss(t.modules,"postTransformNode"),Ho=t.delimiters;var i,r,s=[],a=!1!==t.preserveWhitespace,o=t.whitespace,c=!1,l=!1;function u(e){if(d(e),c||e.processed||(e=fc(e,t)),s.length||e===i||i.if&&(e.elseif||e.else)&&_c(i,{exp:e.elseif,block:e}),r&&!e.forbidden)if(e.elseif||e.else)yc(e,r);else{if(e.slotScope){var n=e.slotTarget||'"default"';(r.scopedSlots||(r.scopedSlots={}))[n]=e}r.children.push(e),e.parent=r}e.children=e.children.filter((function(e){return!e.slotScope})),d(e),e.pre&&(c=!1),Go(e.tag)&&(l=!1);for(var a=0;a|^function(?:\s+[\w$]+)?\s*\(/,el=/\([^)]*?\);*$/,tl=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,nl={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},il={esc:["Esc","Escape"],tab:"Tab",enter:"Enter",space:[" ","Spacebar"],up:["Up","ArrowUp"],left:["Left","ArrowLeft"],right:["Right","ArrowRight"],down:["Down","ArrowDown"],delete:["Backspace","Delete","Del"]},rl=function(e){return"if("+e+")return null;"},sl={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:rl("$event.target !== $event.currentTarget"),ctrl:rl("!$event.ctrlKey"),shift:rl("!$event.shiftKey"),alt:rl("!$event.altKey"),meta:rl("!$event.metaKey"),left:rl("'button' in $event && $event.button !== 0"),middle:rl("'button' in $event && $event.button !== 1"),right:rl("'button' in $event && $event.button !== 2")};function al(e,t){var n=t?"nativeOn:":"on:",i="",r="";for(var s in e){var a=ol(e[s]);e[s]&&e[s].dynamic?r+=s+","+a+",":i+='"'+s+'":'+a+","}return i="{"+i.slice(0,-1)+"}",r?n+"_d("+i+",["+r.slice(0,-1)+"])":n+i}function ol(e){if(!e)return"function(){}";if(Array.isArray(e))return"["+e.map((function(e){return ol(e)})).join(",")+"]";var t=tl.test(e.value),n=Zc.test(e.value),i=tl.test(e.value.replace(el,""));if(e.modifiers){var r="",s="",a=[];for(var o in e.modifiers)if(sl[o])s+=sl[o],nl[o]&&a.push(o);else if("exact"===o){var c=e.modifiers;s+=rl(["ctrl","shift","alt","meta"].filter((function(e){return!c[e]})).map((function(e){return"$event."+e+"Key"})).join("||"))}else a.push(o);a.length&&(r+=cl(a)),s&&(r+=s);var l=t?"return "+e.value+"($event)":n?"return ("+e.value+")($event)":i?"return "+e.value:e.value;return"function($event){"+r+l+"}"}return t||n?e.value:"function($event){"+(i?"return "+e.value:e.value)+"}"}function cl(e){return"if(!$event.type.indexOf('key')&&"+e.map(ll).join("&&")+")return null;"}function ll(e){var t=parseInt(e,10);if(t)return"$event.keyCode!=="+t;var n=nl[e],i=il[e];return"_k($event.keyCode,"+JSON.stringify(e)+","+JSON.stringify(n)+",$event.key,"+JSON.stringify(i)+")"}function ul(e,t){e.wrapListeners=function(e){return"_g("+e+","+t.value+")"}}function dl(e,t){e.wrapData=function(n){return"_b("+n+",'"+e.tag+"',"+t.value+","+(t.modifiers&&t.modifiers.prop?"true":"false")+(t.modifiers&&t.modifiers.sync?",true":"")+")"}}var hl={on:ul,bind:dl,cloak:R},fl=function(e){this.options=e,this.warn=e.warn||rs,this.transforms=ss(e.modules,"transformCode"),this.dataGenFns=ss(e.modules,"genData"),this.directives=D(D({},hl),e.directives);var t=e.isReservedTag||O;this.maybeComponent=function(e){return!!e.component||!t(e.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1};function pl(e,t){var n=new fl(t),i=e?gl(e,n):'_c("div")';return{render:"with(this){return "+i+"}",staticRenderFns:n.staticRenderFns}}function gl(e,t){if(e.parent&&(e.pre=e.pre||e.parent.pre),e.staticRoot&&!e.staticProcessed)return ml(e,t);if(e.once&&!e.onceProcessed)return vl(e,t);if(e.for&&!e.forProcessed)return wl(e,t);if(e.if&&!e.ifProcessed)return bl(e,t);if("template"!==e.tag||e.slotTarget||t.pre){if("slot"===e.tag)return Rl(e,t);var n;if(e.component)n=Ol(e.component,e,t);else{var i;(!e.plain||e.pre&&t.maybeComponent(e))&&(i=_l(e,t));var r=e.inlineTemplate?null:Fl(e,t,!0);n="_c('"+e.tag+"'"+(i?","+i:"")+(r?","+r:"")+")"}for(var s=0;s>>0}function El(e){return 1===e.type&&("slot"===e.tag||e.children.some(El))}function Sl(e,t){var n=e.attrsMap["slot-scope"];if(e.if&&!e.ifProcessed&&!n)return bl(e,t,Sl,"null");if(e.for&&!e.forProcessed)return wl(e,t,Sl);var i=e.slotScope===cc?"":String(e.slotScope),r="function("+i+"){return "+("template"===e.tag?e.if&&n?"("+e.if+")?"+(Fl(e,t)||"undefined")+":undefined":Fl(e,t)||"undefined":gl(e,t))+"}",s=i?"":",proxy:true";return"{key:"+(e.slotTarget||'"default"')+",fn:"+r+s+"}"}function Fl(e,t,n,i,r){var s=e.children;if(s.length){var a=s[0];if(1===s.length&&a.for&&"template"!==a.tag&&"slot"!==a.tag){var o=n?t.maybeComponent(a)?",1":",0":"";return""+(i||gl)(a,t)+o}var c=n?$l(s,t.maybeComponent):0,l=r||Ll;return"["+s.map((function(e){return l(e,t)})).join(",")+"]"+(c?","+c:"")}}function $l(e,t){for(var n=0,i=0;i':'
',Wl.innerHTML.indexOf(" ")>0}var Gl=!!Q&&zl(!1),ql=!!Q&&zl(!0),Kl=x((function(e){var t=fr(e);return t&&t.innerHTML})),Yl=Ci.prototype.$mount;function Xl(e){if(e.outerHTML)return e.outerHTML;var t=document.createElement("div");return t.appendChild(e.cloneNode(!0)),t.innerHTML}Ci.prototype.$mount=function(e,t){if(e=e&&fr(e),e===document.body||e===document.documentElement)return this;var n=this.$options;if(!n.render){var i=n.template;if(i)if("string"===typeof i)"#"===i.charAt(0)&&(i=Kl(i));else{if(!i.nodeType)return this;i=i.innerHTML}else e&&(i=Xl(e));if(i){0;var r=Ul(i,{outputSourceRange:!1,shouldDecodeNewlines:Gl,shouldDecodeNewlinesForHref:ql,delimiters:n.delimiters,comments:n.comments},this),s=r.render,a=r.staticRenderFns;n.render=s,n.staticRenderFns=a}}return Yl.call(this,e,t)},Ci.compile=Ul,t["a"]=Ci}).call(this,n("c8ba"))},a078:function(e,t,n){var i=n("7b0b"),r=n("50c4"),s=n("35a1"),a=n("e95a"),o=n("0366"),c=n("ebb5").aTypedArrayConstructor;e.exports=function(e){var t,n,l,u,d,h,f=i(e),p=arguments.length,g=p>1?arguments[1]:void 0,m=void 0!==g,v=s(f);if(void 0!=v&&!a(v)){d=v.call(f),h=d.next,f=[];while(!(u=h.call(d)).done)f.push(u.value)}for(m&&p>2&&(g=o(g,arguments[2],2)),n=r(f.length),l=new(c(this))(n),t=0;n>t;t++)l[t]=m?g(f[t],t):f[t];return l}},a15b:function(e,t,n){"use strict";var i=n("23e7"),r=n("44ad"),s=n("fc6a"),a=n("a640"),o=[].join,c=r!=Object,l=a("join",",");i({target:"Array",proto:!0,forced:c||!l},{join:function(e){return o.call(s(this),void 0===e?",":e)}})},a1f0:function(e,t,n){"use strict";var i=n("23e7"),r=n("9ed3"),s=n("1d80"),a=n("50c4"),o=n("1c0b"),c=n("825a"),l=n("c6b6"),u=n("44e7"),d=n("ad6d"),h=n("9112"),f=n("d039"),p=n("b622"),g=n("4840"),m=n("8aa5"),v=n("69f3"),b=n("c430"),y=p("matchAll"),w="RegExp String",_=w+" Iterator",x=v.set,k=v.getterFor(_),A=RegExp.prototype,C=A.exec,E="".matchAll,S=!!E&&!f((function(){"a".matchAll(/./)})),F=function(e,t){var n,i=e.exec;if("function"==typeof i){if(n=i.call(e,t),"object"!=typeof n)throw TypeError("Incorrect exec result");return n}return C.call(e,t)},$=r((function(e,t,n,i){x(this,{type:_,regexp:e,string:t,global:n,unicode:i,done:!1})}),w,(function(){var e=k(this);if(e.done)return{value:void 0,done:!0};var t=e.regexp,n=e.string,i=F(t,n);return null===i?{value:void 0,done:e.done=!0}:e.global?(""==String(i[0])&&(t.lastIndex=m(n,a(t.lastIndex),e.unicode)),{value:i,done:!1}):(e.done=!0,{value:i,done:!1})})),T=function(e){var t,n,i,r,s,o,l=c(this),u=String(e);return t=g(l,RegExp),n=l.flags,void 0===n&&l instanceof RegExp&&!("flags"in A)&&(n=d.call(l)),i=void 0===n?"":String(n),r=new t(t===RegExp?l.source:l,i),s=!!~i.indexOf("g"),o=!!~i.indexOf("u"),r.lastIndex=a(l.lastIndex),new $(r,u,s,o)};i({target:"String",proto:!0,forced:S},{matchAll:function(e){var t,n,i,r,a=s(this);if(null!=e){if(u(e)&&(t=String(s("flags"in A?e.flags:d.call(e))),!~t.indexOf("g")))throw TypeError("`.matchAll` does not allow non-global regexes");if(S)return E.apply(a,arguments);if(i=e[y],void 0===i&&b&&"RegExp"==l(e)&&(i=T),null!=i)return o(i).call(e,a)}else if(S)return E.apply(a,arguments);return n=String(a),r=new RegExp(e,"g"),b?T.call(r,n):r[y](n)}}),b||y in A||h(A,y,T)},a2bf:function(e,t,n){"use strict";var i=n("e8b5"),r=n("50c4"),s=n("0366"),a=function(e,t,n,o,c,l,u,d){var h,f=c,p=0,g=!!u&&s(u,d,3);while(p0&&i(h))f=a(e,t,h,r(h.length),f,l-1)-1;else{if(f>=9007199254740991)throw TypeError("Exceed the acceptable array length");e[f]=h}f++}p++}return f};e.exports=a},a3f9:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("vui-button",{attrs:{params:{close:1,code:e.code}}},[e._v("Save and Close")]),n("vui-button",{attrs:{params:{execute:1,code:e.code}}},[e._v("Save and Execute")]),n("vui-button",{attrs:{params:{close:1,code:e.s.code}}},[e._v("Close")]),n("editor",{attrs:{lang:"javascript",theme:"monokai",width:"100%",height:"50em"},on:{init:e.editorInit},model:{value:e.code,callback:function(t){e.code=t},expression:"code"}})],1)},r=[],s={data:function(){return{s:this.$root.$data.state,code:'Term.write("AAA")'}},components:{editor:n("7c9e")},created:function(){this.code=this.s.code},methods:{editorInit:function(){n("2099"),n("bb36"),n("14d4"),n("6a21")}}},a=s,o=n("2877"),c=Object(o["a"])(a,i,r,!1,null,null,null);t["default"]=c.exports},a434:function(e,t,n){"use strict";var i=n("23e7"),r=n("23cb"),s=n("a691"),a=n("50c4"),o=n("7b0b"),c=n("65f0"),l=n("8418"),u=n("1dde"),d=n("ae40"),h=u("splice"),f=d("splice",{ACCESSORS:!0,0:0,1:2}),p=Math.max,g=Math.min,m=9007199254740991,v="Maximum allowed length exceeded";i({target:"Array",proto:!0,forced:!h||!f},{splice:function(e,t){var n,i,u,d,h,f,b=o(this),y=a(b.length),w=r(e,y),_=arguments.length;if(0===_?n=i=0:1===_?(n=0,i=y-w):(n=_-2,i=g(p(s(t),0),y-w)),y+n-i>m)throw TypeError(v);for(u=c(b,i),d=0;dy-i+n;d--)delete b[d-1]}else if(n>i)for(d=y-i;d>w;d--)h=d+i-1,f=d+n-1,h in b?b[f]=b[h]:delete b[f];for(d=0;ds)r.push(arguments[s++]);if(i=t,(f(t)||void 0!==e)&&!oe(e))return h(t)||(t=function(e,t){if("function"==typeof i&&(t=i.call(this,e,t)),!oe(t))return t}),r[1]=t,q.apply(null,r)}})}G[W][H]||S(G[W],H,G[W].valueOf),M(G,N),L[P]=!0},a4ec:function(e,t,n){},a589:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[e.on?[e.pastHalfTime?[e.ingredientsPresent?e.failed?n("p",[e._v("Something doesn't look right...")]):n("p",[e._v("It's cooking nicely!")]):n("p",[e._v("There's nothing inside. Microwave's working, though!")])]:n("p",[e._v("It's starting to cook...")]),n("vui-progress",{attrs:{value:e.$root.$data.wtime,min:e.start_time,max:e.start_time+e.cook_time}}),n("vui-button",{staticClass:"danger danger-control",attrs:{icon:"exclamation-triangle",params:{abort:1}}},[e._v("Abort!")])]:[n("h4",[e._v("Ingredients")]),n("ul",[e.ingredientsPresent?e._e():n("li",[e._v("The microwave is empty!")]),e._l(e.cookingobjs,(function(t,i){return n("li",{key:i},[n("vui-button",{attrs:{params:{eject:i}}},[e._v(" "+e._s(i)+" • "+e._s(t)+" ")])],1)})),e._l(e.cookingreas,(function(t,i){return n("li",{key:i},[n("vui-button",{attrs:{params:{eject:i}}},[e._v(" "+e._s(i)+" • "+e._s(t)+" units ")])],1)}))],2),n("vui-button",{staticClass:"danger danger-control",attrs:{icon:"trash",params:{eject_all:1}}},[e._v("Eject All")]),n("vui-button",{staticClass:"control",attrs:{params:{cook:1}}},[e._v("Cook!")])]],2)},r=[],s=(n("b64b"),{data:function(){return this.$root.$data.state},computed:{ingredientsPresent:function(){return Object.keys(this.cookingobjs).length>0||Object.keys(this.cookingreas).length>0},pastHalfTime:function(){return this.$root.$data.wtime>this.start_time+this.cook_time/2}}}),a=s,o=(n("e48d"),n("2877")),c=Object(o["a"])(a,i,r,!1,null,"2005209a",null);t["default"]=c.exports},a5e6:function(e,t,n){},a623:function(e,t,n){"use strict";var i=n("23e7"),r=n("b727").every,s=n("a640"),a=n("ae40"),o=s("every"),c=a("every");i({target:"Array",proto:!0,forced:!o||!c},{every:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}})},a630:function(e,t,n){var i=n("23e7"),r=n("4df4"),s=n("1c7e"),a=!s((function(e){Array.from(e)}));i({target:"Array",stat:!0,forced:a},{from:r})},a640:function(e,t,n){"use strict";var i=n("d039");e.exports=function(e,t){var n=[][e];return!!n&&i((function(){n.call(null,t||function(){throw 1},1)}))}},a691:function(e,t){var n=Math.ceil,i=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?i:n)(e)}},a6fd:function(e,t,n){var i=n("23e7"),r=n("d066"),s=n("1c0b"),a=n("825a"),o=n("d039"),c=r("Reflect","apply"),l=Function.apply,u=!o((function(){c((function(){}))}));i({target:"Reflect",stat:!0,forced:u},{apply:function(e,t,n){return s(e),a(n),c?c(e,t,n):l.call(e,t,n)}})},a79d:function(e,t,n){"use strict";var i=n("23e7"),r=n("c430"),s=n("fea9"),a=n("d039"),o=n("d066"),c=n("4840"),l=n("cdf9"),u=n("6eeb"),d=!!s&&a((function(){s.prototype["finally"].call({then:function(){}},(function(){}))}));i({target:"Promise",proto:!0,real:!0,forced:d},{finally:function(e){var t=c(this,o("Promise")),n="function"==typeof e;return this.then(n?function(n){return l(t,e()).then((function(){return n}))}:e,n?function(n){return l(t,e()).then((function(){throw n}))}:e)}}),r||"function"!=typeof s||s.prototype["finally"]||u(s.prototype,"finally",o("Promise").prototype["finally"])},a7c6:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("view-mcomputer-ntsl-"+e.s.mode,{tag:"component"})],1)},r=[],s={data:function(){return{s:this.$root.$data.state}}},a=s,o=n("2877"),c=Object(o["a"])(a,i,r,!1,null,null,null);t["default"]=c.exports},a874:function(e,t,n){var i=n("23e7"),r=n("145e"),s=n("44d2");i({target:"Array",proto:!0},{copyWithin:r}),s("copyWithin")},a8bb:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[e._v(" You are not authenticated. Please login to continue. "),n("vui-button",{attrs:{params:{login:1}}},[e._v("Login")])],1)},r=[],s=n("2877"),a={},o=Object(s["a"])(a,i,r,!1,null,null,null);t["default"]=o.exports},a919:function(e,t,n){var i=n("ddc6"),r={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","IJ":"IJ","ij":"ij","Œ":"Oe","œ":"oe","ʼn":"'n","ſ":"s"},s=i(r);e.exports=s},a975:function(e,t,n){"use strict";var i=n("ebb5"),r=n("b727").every,s=i.aTypedArray,a=i.exportTypedArrayMethod;a("every",(function(e){return r(s(this),e,arguments.length>1?arguments[1]:void 0)}))},a981:function(e,t){e.exports="undefined"!==typeof ArrayBuffer&&"undefined"!==typeof DataView},a9e3:function(e,t,n){"use strict";var i=n("83ab"),r=n("da84"),s=n("94ca"),a=n("6eeb"),o=n("5135"),c=n("c6b6"),l=n("7156"),u=n("c04e"),d=n("d039"),h=n("7c73"),f=n("241c").f,p=n("06cf").f,g=n("9bf2").f,m=n("58a8").trim,v="Number",b=r[v],y=b.prototype,w=c(h(y))==v,_=function(e){var t,n,i,r,s,a,o,c,l=u(e,!1);if("string"==typeof l&&l.length>2)if(l=m(l),t=l.charCodeAt(0),43===t||45===t){if(n=l.charCodeAt(2),88===n||120===n)return NaN}else if(48===t){switch(l.charCodeAt(1)){case 66:case 98:i=2,r=49;break;case 79:case 111:i=8,r=55;break;default:return+l}for(s=l.slice(2),a=s.length,o=0;or)return NaN;return parseInt(s,i)}return+l};if(s(v,!b(" 0o1")||!b("0b1")||b("+0x1"))){for(var x,k=function(e){var t=arguments.length<1?0:e,n=this;return n instanceof k&&(w?d((function(){y.valueOf.call(n)})):c(n)!=v)?l(new b(_(t)),n,k):_(t)},A=i?f(b):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),C=0;A.length>C;C++)o(b,x=A[C])&&!o(k,x)&&g(k,x,p(b,x));k.prototype=y,y.constructor=k,a(r,v,k)}},a9fa:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("div",[n("h3",[e._v("Limbs")]),n("table",{staticClass:"table border"},[e._m(0),e._l(e.limbs,(function(t,i){return n("tr",{key:i,staticClass:"item border"},[n("td",{staticStyle:{width:"20%"}},[e._v(e._s(i))]),n("td",[n("vui-button",{attrs:{params:{target:"limb",name:i,action:"brute"}}},[e._v("Brute")]),n("vui-button",{attrs:{params:{target:"limb",name:i,action:"burn"}}},[e._v("Burn")]),n("vui-button",{attrs:{params:{target:"limb",name:i,action:"infection"}}},[e._v("Infection")]),n("vui-button",{attrs:{params:{target:"limb",name:i,action:"shatter"}}},[e._v("Shatter")]),n("vui-button",{attrs:{params:{target:"limb",name:i,action:"arterial"}}},[e._v("Arterial")]),n("vui-button",{attrs:{params:{target:"limb",name:i,action:"sever"}}},[e._v("Sever")])],1)])}))],2)]),n("div",[n("h3",[e._v("Organs")]),n("table",{staticClass:"table border"},[e._m(1),e._l(e.organs,(function(t,i){return n("tr",{key:i,staticClass:"item border"},[n("td",{staticStyle:{width:"20%"}},[e._v(e._s(i))]),n("td",[n("vui-button",{attrs:{params:{target:"organ",name:i,action:"damage"}}},[e._v("Damage")]),n("vui-button",{attrs:{params:{target:"organ",name:i,action:"infection"}}},[e._v("Infection")]),n("vui-button",{attrs:{params:{target:"organ",name:i,action:"bruise"}}},[e._v("Bruise")]),n("vui-button",{attrs:{params:{target:"organ",name:i,action:"break"}}},[e._v("Break")]),n("vui-button",{attrs:{params:{target:"organ",name:i,action:"remove"}}},[e._v("Remove")])],1)])}))],2)]),n("div",[n("h3",[e._v("Miscellaneous")]),n("vui-button",{attrs:{params:{target:"misc",action:"wind"}}},[e._v("Toggle Wind")]),n("vui-button",{attrs:{params:{target:"misc",action:"gigashatter"}}},[e._v("Gigashatter")]),n("vui-button",{attrs:{params:{target:"misc",action:"kill"}}},[e._v("Kill")]),n("vui-button",{attrs:{params:{target:"misc",action:"gib"}}},[e._v("Gib")])],1)])},r=[function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("tr",{staticClass:"header border"},[n("th",[e._v("Name")]),n("th",[e._v("Tools")])])},function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("tr",{staticClass:"header border"},[n("th",[e._v("Name")]),n("th",[e._v("Tools")])])}],s={data:function(){return this.$root.$data.state}},a=s,o=(n("96f3"),n("2877")),c=Object(o["a"])(a,i,r,!1,null,"36dbac0c",null);t["default"]=c.exports},aa68:function(e,t,n){"use strict";n("afcf")},aaec:function(e,t){var n="\\ud800-\\udfff",i="\\u0300-\\u036f",r="\\ufe20-\\ufe2f",s="\\u20d0-\\u20ff",a=i+r+s,o="\\ufe0e\\ufe0f",c="\\u200d",l=RegExp("["+c+n+a+o+"]");function u(e){return l.test(e)}e.exports=u},ab13:function(e,t,n){var i=n("b622"),r=i("match");e.exports=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[r]=!1,"/./"[e](t)}catch(i){}}return!1}},ac02:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("h3",[e._v("Chemical Implants")]),n("table",{staticClass:"table border"},[e._m(0),e._l(e.chem_implants,(function(t){return n("tr",{key:t.ref,staticClass:"item border"},[n("td",[e._v(e._s(t.implanted_name))]),n("td",[e._v(e._s(t.remaining_units))]),n("td",[n("vui-button",{attrs:{disabled:t.remaining_units<1,params:{inject1:t.ref}}},[e._v("Inject 1u")]),n("vui-button",{attrs:{disabled:t.remaining_units<5,params:{inject5:t.ref}}},[e._v("Inject 5u")]),n("vui-button",{attrs:{disabled:t.remaining_units<10,params:{inject5:t.ref}}},[e._v("Inject 10u")])],1)])}))],2),n("h3",[e._v("Tracking Implants")]),n("table",{staticClass:"table border"},[e._m(1),e._l(e.tracking_implants,(function(t){return n("tr",{key:t.ref,staticClass:"item border"},[n("td",[e._v(e._s(t.id))]),n("td",[e._v(e._s(t.loc_display))]),n("td",[n("vui-button",{attrs:{params:{warn:t.ref}}},[e._v("Message Implanted User")])],1)])}))],2)])},r=[function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("tr",{staticClass:"header border"},[n("th",[e._v("Implanted User")]),n("th",[e._v("Remaining Chemical Units")]),n("th",[e._v("Options")])])},function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("tr",{staticClass:"header border"},[n("th",[e._v("Tracking ID")]),n("th",[e._v("Current Area")]),n("th",[e._v("Options")])])}],s={data:function(){return this.$root.$data.state}},a=s,o=(n("ada8"),n("2877")),c=Object(o["a"])(a,i,r,!1,null,"1844f920",null);t["default"]=c.exports},ac16:function(e,t,n){var i=n("23e7"),r=n("825a"),s=n("06cf").f;i({target:"Reflect",stat:!0},{deleteProperty:function(e,t){var n=s(r(e),t);return!(n&&!n.configurable)&&delete e[t]}})},ac1f:function(e,t,n){"use strict";var i=n("23e7"),r=n("9263");i({target:"RegExp",proto:!0,forced:/./.exec!==r},{exec:r})},ac4c:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("vui-input-search",{staticStyle:{display:"block"},attrs:{input:e.records,keys:["id","name","rank","sex","age","fingerprint","blood","dna"]},model:{value:e.filtered,callback:function(t){e.filtered=t},expression:"filtered"}}),e._l(e.filtered,(function(t){return n("div",{key:t.id},[n("vui-button",{attrs:{params:{setactive:t.id},icon:t.has_notes?"align-justify":null,"push-state":""},on:{click:function(t){e.state.activeview=e.state.defaultview}}},[e._v(e._s(t.id)+": "+e._s(t.name)+" ("+e._s(t.rank)+")")])],1)})),n("vui-button",{staticClass:"newrecord",attrs:{"v-if":(1&e.editable)>0,params:{newrecord:1},"push-state":""},on:{click:function(t){e.state.activeview=e.state.defaultview}}},[e._v("New Record")])],2)},r=[],s=(n("07ac"),{data:function(){return{state:this.$root.$data.state,filtered:[]}},computed:{records:function(){return Object.values(this.state.allrecords)}}}),a=s,o=(n("682e"),n("2877")),c=Object(o["a"])(a,i,r,!1,null,"df4093f4",null);t["default"]=c.exports},acac:function(e,t,n){"use strict";var i=n("e2cc"),r=n("f183").getWeakData,s=n("825a"),a=n("861d"),o=n("19aa"),c=n("2266"),l=n("b727"),u=n("5135"),d=n("69f3"),h=d.set,f=d.getterFor,p=l.find,g=l.findIndex,m=0,v=function(e){return e.frozen||(e.frozen=new b)},b=function(){this.entries=[]},y=function(e,t){return p(e.entries,(function(e){return e[0]===t}))};b.prototype={get:function(e){var t=y(this,e);if(t)return t[1]},has:function(e){return!!y(this,e)},set:function(e,t){var n=y(this,e);n?n[1]=t:this.entries.push([e,t])},delete:function(e){var t=g(this.entries,(function(t){return t[0]===e}));return~t&&this.entries.splice(t,1),!!~t}},e.exports={getConstructor:function(e,t,n,l){var d=e((function(e,i){o(e,d,t),h(e,{type:t,id:m++,frozen:void 0}),void 0!=i&&c(i,e[l],{that:e,AS_ENTRIES:n})})),p=f(t),g=function(e,t,n){var i=p(e),a=r(s(t),!0);return!0===a?v(i).set(t,n):a[i.id]=n,e};return i(d.prototype,{delete:function(e){var t=p(this);if(!a(e))return!1;var n=r(e);return!0===n?v(t)["delete"](e):n&&u(n,t.id)&&delete n[t.id]},has:function(e){var t=p(this);if(!a(e))return!1;var n=r(e);return!0===n?v(t).has(e):n&&u(n,t.id)}}),i(d.prototype,n?{get:function(e){var t=p(this);if(a(e)){var n=r(e);return!0===n?v(t).get(e):n?n[t.id]:void 0}},set:function(e,t){return g(this,e,t)}}:{add:function(e){return g(this,e,!0)}}),d}}},accc:function(e,t,n){var i=n("23e7"),r=n("64e5");i({target:"Date",proto:!0,forced:Date.prototype.toISOString!==r},{toISOString:r})},acd8:function(e,t,n){var i=n("23e7"),r=n("7e12");i({global:!0,forced:parseFloat!=r},{parseFloat:r})},ace4:function(e,t,n){"use strict";var i=n("23e7"),r=n("d039"),s=n("621a"),a=n("825a"),o=n("23cb"),c=n("50c4"),l=n("4840"),u=s.ArrayBuffer,d=s.DataView,h=u.prototype.slice,f=r((function(){return!new u(2).slice(1,void 0).byteLength}));i({target:"ArrayBuffer",proto:!0,unsafe:!0,forced:f},{slice:function(e,t){if(void 0!==h&&void 0===t)return h.call(a(this),e);var n=a(this).byteLength,i=o(e,n),r=o(void 0===t?n:t,n),s=new(l(this,u))(c(r-i)),f=new d(this),p=new d(s),g=0;while(i3}))}},af89:function(e,t,n){"use strict";n("6836")},af93:function(e,t,n){var i=n("23e7"),r=n("861d"),s=n("f183").onFreeze,a=n("bb2f"),o=n("d039"),c=Object.seal,l=o((function(){c(1)}));i({target:"Object",stat:!0,forced:l,sham:!a},{seal:function(e){return c&&r(e)?c(s(e)):e}})},afb9:function(e,t,n){},afcf:function(e,t,n){},aff5:function(e,t,n){var i=n("23e7");i({target:"Number",stat:!0},{MAX_SAFE_INTEGER:9007199254740991})},b041:function(e,t,n){"use strict";var i=n("00ee"),r=n("f5df");e.exports=i?{}.toString:function(){return"[object "+r(this)+"]"}},b053:function(e,t,n){},b087:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[e.power?n("div",[e.occupant?n("div",[n("div",{staticClass:"columnHolder"},[n("div",{staticClass:"column"},[n("div",[n("h3",[e._v("Occupant Status:")]),n("div",[n("span",{staticClass:"text"},[e._v("Status:")]),e._v(" "),n("span",{style:{color:e.consciousnessLabel(e.stat)}},[e._v(e._s(e.consciousnessText(e.stat)))])]),n("div",[n("span",{staticClass:"text"},[e._v("Stasis Level:")]),e._v(" "+e._s(e.stasis))]),n("div",[n("span",{staticClass:"text"},[e._v("Species:")]),e._v(" "+e._s(e.species))]),n("div",[n("span",{staticClass:"text"},[e._v("Brain Activity:")]),e._v(" "),n("vui-progress",{class:e.progressClass(e.brain_activity),attrs:{value:e.brain_activity}},[e._v(e._s(e.brain_activity)+"%")])],1),n("div",[n("span",{staticClass:"text"},[e._v("Pulse:")]),e._v(" "+e._s(e.pulse))]),n("div",[n("span",{staticClass:"text"},[e._v("BP:")]),e._v(" "),n("span",{style:{color:e.getPressureClass(e.blood_pressure_level)}},[e._v(e._s(e.blood_pressure))])]),n("div",[n("span",{staticClass:"text"},[e._v("Blood Oxygenation:")]),e._v(" "),n("vui-progress",{class:e.progressClass(e.brain_activity),attrs:{value:Math.round(e.blood_o2)}},[e._v(e._s(Math.round(e.blood_o2))+"%")])],1),n("h3",[e._v("Bloodstream Reagents:")]),e.bloodreagents?n("div",[n("table",e._l(e.bloodreagents,(function(t){return n("tr",{key:t.name},[n("td",[n("span",{staticClass:"text"},[e._v(e._s(t.name)+":")])]),n("td",{staticClass:"shifted"},[e._v(e._s(t.amount)+"u")])])})),0)]):n("div",[e._v(" The occupant has no additional reagents in their bloodstream. ")]),n("h3",[e._v("Stomach Reagents:")]),e.hasstomach?n("div",[e.stomachreagents?n("div",[n("table",e._l(e.stomachreagents,(function(t){return n("tr",{key:t.name},[n("td",[n("span",{staticClass:"text"},[e._v(e._s(t.name)+":")])]),n("td",{staticClass:"shifted"},[e._v(e._s(t.amount)+"u")])])})),0)]):n("div",[e._v(" The occupant has nothing in their stomach. ")])]):n("div",[e._v(" The occupant does not have a stomach. ")])])]),n("div",{staticClass:"column"},[n("h3",[e._v("Injectable Reagents:")]),n("table",e._l(e.reagents,(function(t){return n("tr",{key:t.name},[n("td",[n("span",{staticClass:"text"},[e._v(e._s(t.name)+":")])]),n("td",[n("vui-button",{attrs:{params:{chemical:t.type,amount:5}}},[e._v("Inject 5")])],1),n("td",[n("vui-button",{attrs:{params:{chemical:t.type,amount:10}}},[e._v("Inject 10")])],1)])})),0),n("h3",[e._v("Stasis Settings:")]),n("table",[n("tr",e._l(e.stasissettings,(function(t){return n("td",{key:t},[n("vui-button",{attrs:{params:{stasis:t}}},[e._v(e._s(t))])],1)})),0)])])])]):n("div",[e._v(" No occupant. ")])]):n("div",[e._m(0)]),e.occupant?n("div",[n("div",{staticClass:"columnHolder"},[n("div",{staticClass:"float"},[n("vui-button",{attrs:{params:{eject:1}}},[e._v("Eject Occupant")])],1),n("div",{staticClass:"float"},[e.filtering?n("div",[n("vui-button",{attrs:{params:{filter:-1}}},[e._v("Dialysis Active")])],1):n("div",[n("vui-button",{attrs:{params:{filter:1}}},[e._v("Dialysis Inactive")])],1)]),n("div",{staticClass:"float"},[e.pump?n("div",[n("vui-button",{attrs:{params:{pump:-1}}},[e._v("Stomach Pump Active")])],1):n("div",[n("vui-button",{attrs:{params:{pump:1}}},[e._v("Stomach Pump Inactive")])],1)])])]):e._e(),-1!=e.beaker?n("div",[n("span",{staticClass:"text"},[e._v("Beaker:")]),e._v(" "+e._s(e.beaker)+" units of free space remaining. "),n("vui-button",{attrs:{params:{beaker:1}}},[e._v("Eject Beaker")])],1):n("div",[e._v(" No beaker inserted. ")])])},r=[function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"itemLabel"},[n("h2",[e._v("NO POWER")])])}],s={data:function(){return this.$root.$data.state},methods:{consciousnessLabel:function(e){switch(e){case 0:return"LimeGreen";case 1:return"OrangeRed";case 2:return"Crimson"}},consciousnessText:function(e){switch(e){case 0:return"Conscious";case 1:return"Unconscious";case 2:return"DEAD"}},progressClass:function(e){return e<=50?"bad":e<=90?"average":"good"},getPressureClass:function(e){switch(e){case 1:return"Crimson";case 2:return"LimeGreen";case 3:return"LawnGreen";case 4:return"Crimson";default:return"LightSkyBlue"}}}},a=s,o=(n("27cd"),n("2877")),c=Object(o["a"])(a,i,r,!1,null,"3783600c",null);t["default"]=c.exports},b08f:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[e.detonating?n("div",{staticClass:"notice",staticStyle:{color:"#000000"}},[n("h2",{staticStyle:{color:"#000000"}},[e._v("CRYSTAL DELAMINATING")]),n("h3",{staticStyle:{color:"#000000"}},[e._v("Evacuate area immediately")]),n("div",{staticClass:"clearBoth"})]):n("vui-group",[n("vui-group-row",[n("h3",[e._v("Crystal Integrity")]),n("vui-progress",{class:e.integrity_class,attrs:{value:e.integrity_percentage,min:0,max:100}}),n("b",[e._v(e._s(e.integrity_percentage)+" %")])],1),n("h3",[e._v("Environment")]),n("vui-group-item",{attrs:{label:"Temperature:"}},[n("vui-progress",{class:e.temp_class,attrs:{value:e.ambient_temp,min:0,max:1e4}}),e._v(" "+e._s(e.ambient_temp)+" K ")],1),n("vui-group-item",{attrs:{label:"Pressure:"}},[e._v(" "+e._s(e.ambient_pressure)+" kPa ")])],1)],1)},r=[],s={data:function(){return this.$root.$data.state},computed:{temp_class:function(){return this.ambient_temp>=5e3?"bad":this.ambient_temp>=4e3?"average":"good"},integrity_class:function(){return this.integrity_percentage>=90?"good":this.integrity_percentage>=25?"average":"bad"}}},a=s,o=n("2877"),c=Object(o["a"])(a,i,r,!1,null,null,null);t["default"]=c.exports},b0c0:function(e,t,n){var i=n("83ab"),r=n("9bf2").f,s=Function.prototype,a=s.toString,o=/^\s*function ([^ (]*)/,c="name";i&&!(c in s)&&r(s,c,{configurable:!0,get:function(){try{return a.call(this).match(o)[1]}catch(e){return""}}})},b14c:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("h2",{staticClass:"white"},[e._v("Welcome, Operative.")]),n("h2",[e._v("Please select your launch target:")]),0==e.status?n("div",[e._m(0),n("div",[n("vui-button",{attrs:{icon:"cog",params:{fire:"arrivals"}}},[e._v("Departures")])],1),n("div",[n("vui-button",{attrs:{icon:"cog",params:{fire:"cargo"}}},[e._v("Cargo Surface")])],1),n("div",[n("vui-button",{attrs:{icon:"cog",params:{fire:"commandescape"}}},[e._v("Command Surface")])],1)]):n("div",[e._v(" Pod status: "),n("span",{staticClass:"bad"},[e._v("Non-operational.")])])])},r=[function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[e._v("Pod status: "),n("span",{staticClass:"good"},[e._v("Operational.")])])}],s={data:function(){return this.$root.$data.state}},a=s,o=n("2877"),c=Object(o["a"])(a,i,r,!1,null,null,null);t["default"]=c.exports},b20a:function(e,t,n){var i=n("6ac0"),r=n("4caa"),s=n("ea72"),a="['’]",o=RegExp(a,"g");function c(e){return function(t){return i(s(r(t).replace(o,"")),e,"")}}e.exports=c},b225:function(e,t,n){},b378:function(e,t){ace.define("ace/snippets",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/lib/lang","ace/range","ace/anchor","ace/keyboard/hash_handler","ace/tokenizer","ace/lib/dom","ace/editor"],(function(e,t,n){"use strict";var i=e("./lib/oop"),r=e("./lib/event_emitter").EventEmitter,s=e("./lib/lang"),a=e("./range").Range,o=e("./anchor").Anchor,c=e("./keyboard/hash_handler").HashHandler,l=e("./tokenizer").Tokenizer,u=a.comparePoints,d=function(){this.snippetMap={},this.snippetNameMap={}};(function(){i.implement(this,r),this.getTokenizer=function(){function e(e,t,n){return e=e.substr(1),/^\d+$/.test(e)&&!n.inFormatString?[{tabstopId:parseInt(e,10)}]:[{text:e}]}function t(e){return"(?:[^\\\\"+e+"]|\\\\.)"}return d.$tokenizer=new l({start:[{regex:/:/,onMatch:function(e,t,n){return n.length&&n[0].expectIf?(n[0].expectIf=!1,n[0].elseBranch=n[0],[n[0]]):":"}},{regex:/\\./,onMatch:function(e,t,n){var i=e[1];return"}"==i&&n.length||-1!="`$\\".indexOf(i)?e=i:n.inFormatString&&("n"==i||"t"==i?e="\n":-1!="ulULE".indexOf(i)&&(e={changeCase:i,local:i>"a"})),[e]}},{regex:/}/,onMatch:function(e,t,n){return[n.length?n.shift():e]}},{regex:/\$(?:\d+|\w+)/,onMatch:e},{regex:/\$\{[\dA-Z_a-z]+/,onMatch:function(t,n,i){var r=e(t.substr(1),n,i);return i.unshift(r[0]),r},next:"snippetVar"},{regex:/\n/,token:"newline",merge:!1}],snippetVar:[{regex:"\\|"+t("\\|")+"*\\|",onMatch:function(e,t,n){n[0].choices=e.slice(1,-1).split(",")},next:"start"},{regex:"/("+t("/")+"+)/(?:("+t("/")+"*)/)(\\w*):?",onMatch:function(e,t,n){var i=n[0];return i.fmtString=e,e=this.splitRegex.exec(e),i.guard=e[1],i.fmt=e[2],i.flag=e[3],""},next:"start"},{regex:"`"+t("`")+"*`",onMatch:function(e,t,n){return n[0].code=e.splice(1,-1),""},next:"start"},{regex:"\\?",onMatch:function(e,t,n){n[0]&&(n[0].expectIf=!0)},next:"start"},{regex:"([^:}\\\\]|\\\\.)*:?",token:"",next:"start"}],formatString:[{regex:"/("+t("/")+"+)/",token:"regex"},{regex:"",onMatch:function(e,t,n){n.inFormatString=!0},next:"start"}]}),d.prototype.getTokenizer=function(){return d.$tokenizer},d.$tokenizer},this.tokenizeTmSnippet=function(e,t){return this.getTokenizer().getLineTokens(e,t).tokens.map((function(e){return e.value||e}))},this.$getDefaultValue=function(e,t){if(/^[A-Z]\d+$/.test(t)){var n=t.substr(1);return(this.variables[t[0]+"__"]||{})[n]}if(/^\d+$/.test(t))return(this.variables.__||{})[t];if(t=t.replace(/^TM_/,""),e){var i=e.session;switch(t){case"CURRENT_WORD":var r=i.getWordRange();case"SELECTION":case"SELECTED_TEXT":return i.getTextRange(r);case"CURRENT_LINE":return i.getLine(e.getCursorPosition().row);case"PREV_LINE":return i.getLine(e.getCursorPosition().row-1);case"LINE_INDEX":return e.getCursorPosition().column;case"LINE_NUMBER":return e.getCursorPosition().row+1;case"SOFT_TABS":return i.getUseSoftTabs()?"YES":"NO";case"TAB_SIZE":return i.getTabSize();case"FILENAME":case"FILEPATH":return"";case"FULLNAME":return"Ace"}}},this.variables={},this.getVariableValue=function(e,t){return this.variables.hasOwnProperty(t)?this.variables[t](e,t)||"":this.$getDefaultValue(e,t)||""},this.tmStrFormat=function(e,t,n){var i=t.flag||"",r=t.guard;r=new RegExp(r,i.replace(/[^gi]/,""));var s=this.tokenizeTmSnippet(t.fmt,"formatString"),a=this,o=e.replace(r,(function(){a.variables.__=arguments;for(var e=a.resolveVariables(s,n),t="E",i=0;i1?(b=t[t.length-1].length,v+=t.length-1):b+=e.length,y+=e}else e.start?e.end={row:v,column:b}:e.start={row:v,column:b}}));var w=e.getSelectionRange(),_=e.session.replace(w,y),x=new h(e),k=e.inVirtualSelectionMode&&e.selection.index;x.addTabstops(o,w.start,_,k)},this.insertSnippet=function(e,t){var n=this;if(e.inVirtualSelectionMode)return n.insertSnippetForSelection(e,t);e.forEachSelection((function(){n.insertSnippetForSelection(e,t)}),null,{keepOrder:!0}),e.tabstopManager&&e.tabstopManager.tabNext()},this.$getScope=function(e){var t=e.session.$mode.$id||"";if(t=t.split("/").pop(),"html"===t||"php"===t){"php"!==t||e.session.$mode.inlinePhp||(t="html");var n=e.getCursorPosition(),i=e.session.getState(n.row);"object"===typeof i&&(i=i[0]),i.substring&&("js-"==i.substring(0,3)?t="javascript":"css-"==i.substring(0,4)?t="css":"php-"==i.substring(0,4)&&(t="php"))}return t},this.getActiveScopes=function(e){var t=this.$getScope(e),n=[t],i=this.snippetMap;return i[t]&&i[t].includeScopes&&n.push.apply(n,i[t].includeScopes),n.push("_"),n},this.expandWithTab=function(e,t){var n=this,i=e.forEachSelection((function(){return n.expandSnippetForSelection(e,t)}),null,{keepOrder:!0});return i&&e.tabstopManager&&e.tabstopManager.tabNext(),i},this.expandSnippetForSelection=function(e,t){var n,i=e.getCursorPosition(),r=e.session.getLine(i.row),s=r.substring(0,i.column),a=r.substr(i.column),o=this.snippetMap;return this.getActiveScopes(e).some((function(e){var t=o[e];return t&&(n=this.findMatchingSnippet(t,s,a)),!!n}),this),!!n&&(t&&t.dryRun||(e.session.doc.removeInLine(i.row,i.column-n.replaceBefore.length,i.column+n.replaceAfter.length),this.variables.M__=n.matchBefore,this.variables.T__=n.matchAfter,this.insertSnippetForSelection(e,n.content),this.variables.M__=this.variables.T__=null),!0)},this.findMatchingSnippet=function(e,t,n){for(var i=e.length;i--;){var r=e[i];if((!r.startRe||r.startRe.test(t))&&((!r.endRe||r.endRe.test(n))&&(r.startRe||r.endRe)))return r.matchBefore=r.startRe?r.startRe.exec(t):[""],r.matchAfter=r.endRe?r.endRe.exec(n):[""],r.replaceBefore=r.triggerRe?r.triggerRe.exec(t)[0]:"",r.replaceAfter=r.endTriggerRe?r.endTriggerRe.exec(n)[0]:"",r}},this.snippetMap={},this.snippetNameMap={},this.register=function(e,t){var n=this.snippetMap,i=this.snippetNameMap,r=this;function a(e){return e&&!/^\^?\(.*\)\$?$|^\\b$/.test(e)&&(e="(?:"+e+")"),e||""}function o(e,t,n){return e=a(e),t=a(t),n?(e=t+e,e&&"$"!=e[e.length-1]&&(e+="$")):(e+=t,e&&"^"!=e[0]&&(e="^"+e)),new RegExp(e)}function c(e){e.scope||(e.scope=t||"_"),t=e.scope,n[t]||(n[t]=[],i[t]={});var a=i[t];if(e.name){var c=a[e.name];c&&r.unregister(c),a[e.name]=e}n[t].push(e),e.tabTrigger&&!e.trigger&&(!e.guard&&/^\w/.test(e.tabTrigger)&&(e.guard="\\b"),e.trigger=s.escapeRegExp(e.tabTrigger)),(e.trigger||e.guard||e.endTrigger||e.endGuard)&&(e.startRe=o(e.trigger,e.guard,!0),e.triggerRe=new RegExp(e.trigger,"",!0),e.endRe=o(e.endTrigger,e.endGuard,!0),e.endTriggerRe=new RegExp(e.endTrigger,"",!0))}e||(e=[]),e&&e.content?c(e):Array.isArray(e)&&e.forEach(c),this._signal("registerSnippets",{scope:t})},this.unregister=function(e,t){var n=this.snippetMap,i=this.snippetNameMap;function r(e){var r=i[e.scope||t];if(r&&r[e.name]){delete r[e.name];var s=n[e.scope||t],a=s&&s.indexOf(e);a>=0&&s.splice(a,1)}}e.content?r(e):Array.isArray(e)&&e.forEach(r)},this.parseSnippetFile=function(e){e=e.replace(/\r/g,"");var t,n=[],i={},r=/^#.*|^({[\s\S]*})\s*$|^(\S+) (.*)$|^((?:\n*\t.*)+)/gm;while(t=r.exec(e)){if(t[1])try{i=JSON.parse(t[1]),n.push(i)}catch(c){}if(t[4])i.content=t[4].replace(/^\t/gm,""),n.push(i),i={};else{var s=t[2],a=t[3];if("regex"==s){var o=/\/((?:[^\/\\]|\\.)*)|$/g;i.guard=o.exec(a)[1],i.trigger=o.exec(a)[1],i.endTrigger=o.exec(a)[1],i.endGuard=o.exec(a)[1]}else"snippet"==s?(i.tabTrigger=a.match(/^\S*/)[0],i.name||(i.name=a)):i[s]=a}}return n},this.getSnippetByName=function(e,t){var n,i=this.snippetNameMap;return this.getActiveScopes(t).some((function(t){var r=i[t];return r&&(n=r[e]),!!n}),this),n}}).call(d.prototype);var h=function(e){if(e.tabstopManager)return e.tabstopManager;e.tabstopManager=this,this.$onChange=this.onChange.bind(this),this.$onChangeSelection=s.delayedCall(this.onChangeSelection.bind(this)).schedule,this.$onChangeSession=this.onChangeSession.bind(this),this.$onAfterExec=this.onAfterExec.bind(this),this.attach(e)};(function(){this.attach=function(e){this.index=0,this.ranges=[],this.tabstops=[],this.$openTabstops=null,this.selectedTabstop=null,this.editor=e,this.editor.on("change",this.$onChange),this.editor.on("changeSelection",this.$onChangeSelection),this.editor.on("changeSession",this.$onChangeSession),this.editor.commands.on("afterExec",this.$onAfterExec),this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler)},this.detach=function(){this.tabstops.forEach(this.removeTabstopMarkers,this),this.ranges=null,this.tabstops=null,this.selectedTabstop=null,this.editor.removeListener("change",this.$onChange),this.editor.removeListener("changeSelection",this.$onChangeSelection),this.editor.removeListener("changeSession",this.$onChangeSession),this.editor.commands.removeListener("afterExec",this.$onAfterExec),this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler),this.editor.tabstopManager=null,this.editor=null},this.onChange=function(e){var t="r"==e.action[0],n=e.start,i=e.end,r=n.row,s=i.row,a=s-r,o=i.column-n.column;if(t&&(a=-a,o=-o),!this.$inChange&&t){var c=this.selectedTabstop,l=c&&!c.some((function(e){return u(e.start,n)<=0&&u(e.end,i)>=0}));if(l)return this.detach()}for(var d=this.ranges,h=0;h0?(this.removeRange(f),h--):(f.start.row==r&&f.start.column>n.column&&(f.start.column+=o),f.end.row==r&&f.end.column>=n.column&&(f.end.column+=o),f.start.row>=r&&(f.start.row+=a),f.end.row>=r&&(f.end.row+=a),u(f.start,f.end)>0&&this.removeRange(f)))}d.length||this.detach()},this.updateLinkedFields=function(){var e=this.selectedTabstop;if(e&&e.hasLinkedRanges){this.$inChange=!0;for(var n=this.editor.session,i=n.getTextRange(e.firstNonLinked),r=e.length;r--;){var s=e[r];if(s.linked){var a=t.snippetManager.tmStrFormat(i,s.original);n.replace(s,a)}}this.$inChange=!1}},this.onAfterExec=function(e){e.command&&!e.command.readOnly&&this.updateLinkedFields()},this.onChangeSelection=function(){if(this.editor){for(var e=this.editor.selection.lead,t=this.editor.selection.anchor,n=this.editor.selection.isEmpty(),i=this.ranges.length;i--;)if(!this.ranges[i].linked){var r=this.ranges[i].contains(e.row,e.column),s=n||this.ranges[i].contains(t.row,t.column);if(r&&s)return}this.detach()}},this.onChangeSession=function(){this.detach()},this.tabNext=function(e){var t=this.tabstops.length,n=this.index+(e||1);n=Math.min(Math.max(n,1),t),n==t&&(n=0),this.selectTabstop(n),0===n&&this.detach()},this.selectTabstop=function(e){this.$openTabstops=null;var t=this.tabstops[this.index];if(t&&this.addTabstopMarkers(t),this.index=e,t=this.tabstops[this.index],t&&t.length){if(this.selectedTabstop=t,this.editor.inVirtualSelectionMode)this.editor.selection.setRange(t.firstNonLinked);else{var n=this.editor.multiSelect;n.toSingleRange(t.firstNonLinked.clone());for(var i=t.length;i--;)t.hasLinkedRanges&&t[i].linked||n.addRange(t[i].clone(),!0);n.ranges[0]&&n.addRange(n.ranges[0].clone())}this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler)}},this.addTabstops=function(e,t,n){if(this.$openTabstops||(this.$openTabstops=[]),!e[0]){var i=a.fromPoints(n,n);g(i.start,t),g(i.end,t),e[0]=[i],e[0].index=0}var r=this.index,s=[r+1,0],o=this.ranges;e.forEach((function(e,n){for(var i=this.$openTabstops[n]||e,r=e.length;r--;){var c=e[r],l=a.fromPoints(c.start,c.end||c.start);p(l.start,t),p(l.end,t),l.original=c,l.tabstop=i,o.push(l),i!=e?i.unshift(l):i[r]=l,c.fmtString?(l.linked=!0,i.hasLinkedRanges=!0):i.firstNonLinked||(i.firstNonLinked=l)}i.firstNonLinked||(i.hasLinkedRanges=!1),i===e&&(s.push(i),this.$openTabstops[n]=i),this.addTabstopMarkers(i)}),this),s.length>2&&(this.tabstops.length&&s.push(s.splice(2,1)[0]),this.tabstops.splice.apply(this.tabstops,s))},this.addTabstopMarkers=function(e){var t=this.editor.session;e.forEach((function(e){e.markerId||(e.markerId=t.addMarker(e,"ace_snippet-marker","text"))}))},this.removeTabstopMarkers=function(e){var t=this.editor.session;e.forEach((function(e){t.removeMarker(e.markerId),e.markerId=null}))},this.removeRange=function(e){var t=e.tabstop.indexOf(e);e.tabstop.splice(t,1),t=this.ranges.indexOf(e),this.ranges.splice(t,1),this.editor.session.removeMarker(e.markerId),e.tabstop.length||(t=this.tabstops.indexOf(e.tabstop),-1!=t&&this.tabstops.splice(t,1),this.tabstops.length||this.detach())},this.keyboardHandler=new c,this.keyboardHandler.bindKeys({Tab:function(e){t.snippetManager&&t.snippetManager.expandWithTab(e)||e.tabstopManager.tabNext(1)},"Shift-Tab":function(e){e.tabstopManager.tabNext(-1)},Esc:function(e){e.tabstopManager.detach()},Return:function(e){return!1}})}).call(h.prototype);var f={};f.onChange=o.prototype.onChange,f.setPosition=function(e,t){this.pos.row=e,this.pos.column=t},f.update=function(e,t,n){this.$insertRight=n,this.pos=e,this.onChange(t)};var p=function(e,t){0==e.row&&(e.column+=t.column),e.row+=t.row},g=function(e,t){e.row==t.row&&(e.column-=t.column),e.row-=t.row};e("./lib/dom").importCssString(".ace_snippet-marker { -moz-box-sizing: border-box; box-sizing: border-box; background: rgba(194, 193, 208, 0.09); border: 1px dotted rgba(211, 208, 235, 0.62); position: absolute;}"),t.snippetManager=new d;var m=e("./editor").Editor;(function(){this.insertSnippet=function(e,n){return t.snippetManager.insertSnippet(this,e,n)},this.expandSnippet=function(e){return t.snippetManager.expandWithTab(this,e)}}).call(m.prototype)})),ace.define("ace/ext/emmet",["require","exports","module","ace/keyboard/hash_handler","ace/editor","ace/snippets","ace/range","resources","resources","tabStops","resources","utils","actions","ace/config","ace/config"],(function(e,t,n){"use strict";var i,r,s=e("ace/keyboard/hash_handler").HashHandler,a=e("ace/editor").Editor,o=e("ace/snippets").snippetManager,c=e("ace/range").Range;function l(){}l.prototype={setupContext:function(e){this.ace=e,this.indentation=e.session.getTabString(),i||(i=window.emmet);var t=i.resources||i.require("resources");t.setVariable("indentation",this.indentation),this.$syntax=null,this.$syntax=this.getSyntax()},getSelectionRange:function(){var e=this.ace.getSelectionRange(),t=this.ace.session.doc;return{start:t.positionToIndex(e.start),end:t.positionToIndex(e.end)}},createSelection:function(e,t){var n=this.ace.session.doc;this.ace.selection.setRange({start:n.indexToPosition(e),end:n.indexToPosition(t)})},getCurrentLineRange:function(){var e=this.ace,t=e.getCursorPosition().row,n=e.session.getLine(t).length,i=e.session.doc.positionToIndex({row:t,column:0});return{start:i,end:i+n}},getCaretPos:function(){var e=this.ace.getCursorPosition();return this.ace.session.doc.positionToIndex(e)},setCaretPos:function(e){var t=this.ace.session.doc.indexToPosition(e);this.ace.selection.moveToPosition(t)},getCurrentLine:function(){var e=this.ace.getCursorPosition().row;return this.ace.session.getLine(e)},replaceContent:function(e,t,n,i){null==n&&(n=null==t?this.getContent().length:t),null==t&&(t=0);var r=this.ace,s=r.session.doc,a=c.fromPoints(s.indexToPosition(t),s.indexToPosition(n));r.session.remove(a),a.end=a.start,e=this.$updateTabstops(e),o.insertSnippet(r,e)},getContent:function(){return this.ace.getValue()},getSyntax:function(){if(this.$syntax)return this.$syntax;var e=this.ace.session.$modeId.split("/").pop();if("html"==e||"php"==e){var t=this.ace.getCursorPosition(),n=this.ace.session.getState(t.row);"string"!=typeof n&&(n=n[0]),n&&(n=n.split("-"),n.length>1?e=n[0]:"php"==e&&(e="html"))}return e},getProfileName:function(){var e=i.resources||i.require("resources");switch(this.getSyntax()){case"css":return"css";case"xml":case"xsl":return"xml";case"html":var t=e.getVariable("profile");return t||(t=-1!=this.ace.session.getLines(0,2).join("").search(/]+XHTML/i)?"xhtml":"html"),t;default:var n=this.ace.session.$mode;return n.emmetConfig&&n.emmetConfig.profile||"xhtml"}},prompt:function(e){return prompt(e)},getSelection:function(){return this.ace.session.getTextRange()},getFilePath:function(){return""},$updateTabstops:function(e){var t=1e3,n=0,r=null,s=i.tabStops||i.require("tabStops"),a=i.resources||i.require("resources"),o=a.getVocabulary("user"),c={tabstop:function(e){var i=parseInt(e.group,10),a=0===i;a?i=++n:i+=t;var o=e.placeholder;o&&(o=s.processText(o,c));var l="${"+i+(o?":"+o:"")+"}";return a&&(r=[e.start,l]),l},escape:function(e){return"$"==e?"\\$":"\\"==e?"\\\\":e}};if(e=s.processText(e,c),o.variables["insert_final_tabstop"]&&!/\$\{0\}$/.test(e))e+="${0}";else if(r){var l=i.utils?i.utils.common:i.require("utils");e=l.replaceSubstring(e,"${0}",r[0],r[1])}return e}};var u={expand_abbreviation:{mac:"ctrl+alt+e",win:"alt+e"},match_pair_outward:{mac:"ctrl+d",win:"ctrl+,"},match_pair_inward:{mac:"ctrl+j",win:"ctrl+shift+0"},matching_pair:{mac:"ctrl+alt+j",win:"alt+j"},next_edit_point:"alt+right",prev_edit_point:"alt+left",toggle_comment:{mac:"command+/",win:"ctrl+/"},split_join_tag:{mac:"shift+command+'",win:"shift+ctrl+`"},remove_tag:{mac:"command+'",win:"shift+ctrl+;"},evaluate_math_expression:{mac:"shift+command+y",win:"shift+ctrl+y"},increment_number_by_1:"ctrl+up",decrement_number_by_1:"ctrl+down",increment_number_by_01:"alt+up",decrement_number_by_01:"alt+down",increment_number_by_10:{mac:"alt+command+up",win:"shift+alt+up"},decrement_number_by_10:{mac:"alt+command+down",win:"shift+alt+down"},select_next_item:{mac:"shift+command+.",win:"shift+ctrl+."},select_previous_item:{mac:"shift+command+,",win:"shift+ctrl+,"},reflect_css_value:{mac:"shift+command+r",win:"shift+ctrl+r"},encode_decode_data_url:{mac:"shift+ctrl+d",win:"ctrl+'"},expand_abbreviation_with_tab:"Tab",wrap_with_abbreviation:{mac:"shift+ctrl+a",win:"shift+ctrl+a"}},d=new l;for(var h in t.commands=new s,t.runEmmetCommand=function e(t){try{d.setupContext(t);var n=i.actions||i.require("actions");if("expand_abbreviation_with_tab"==this.action){if(!t.selection.isEmpty())return!1;var r=t.selection.lead,s=t.session.getTokenAt(r.row,r.column);if(s&&/\btag\b/.test(s.type))return!1}if("wrap_with_abbreviation"==this.action)return setTimeout((function(){n.run("wrap_with_abbreviation",d)}),0);var a=n.run(this.action,d)}catch(o){if(!i)return p(e.bind(this,t)),!0;t._signal("changeStatus","string"==typeof o?o:o.message),console.log(o),a=!1}return a},u)t.commands.addCommand({name:"emmet:"+h,action:h,bindKey:u[h],exec:t.runEmmetCommand,multiSelectAction:"forEach"});t.updateCommands=function(e,n){n?e.keyBinding.addKeyboardHandler(t.commands):e.keyBinding.removeKeyboardHandler(t.commands)},t.isSupportedMode=function(e){if(!e)return!1;if(e.emmetConfig)return!0;var t=e.$id||e;return/css|less|scss|sass|stylus|html|php|twig|ejs|handlebars/.test(t)},t.isAvailable=function(e,n){if(/(evaluate_math_expression|expand_abbreviation)$/.test(n))return!0;var i=e.session.$mode,r=t.isSupportedMode(i);if(r&&i.$modes)try{d.setupContext(e),/js|php/.test(d.getSyntax())&&(r=!1)}catch(s){}return r};var f=function(e,n){var i=n;if(i){var r=t.isSupportedMode(i.session.$mode);!1===e.enableEmmet&&(r=!1),r&&p(),t.updateCommands(i,r)}},p=function(t){"string"==typeof r&&e("ace/config").loadModule(r,(function(){r=null,t&&t()}))};t.AceEmmetEditor=l,e("ace/config").defineOptions(a.prototype,"editor",{enableEmmet:{set:function(e){this[e?"on":"removeListener"]("changeMode",f),f({enableEmmet:!!e},this)},value:!0}}),t.setCore=function(e){"string"==typeof e?r=e:i=e}})),function(){ace.acequire(["ace/ext/emmet"],(function(){}))}()},b39a:function(e,t,n){"use strict";var i=n("da84"),r=n("ebb5"),s=n("d039"),a=i.Int8Array,o=r.aTypedArray,c=r.exportTypedArrayMethod,l=[].toLocaleString,u=[].slice,d=!!a&&s((function(){l.call(new a(1))})),h=s((function(){return[1,2].toLocaleString()!=new a([1,2]).toLocaleString()}))||!s((function(){a.prototype.toLocaleString.call([1,2])}));c("toLocaleString",(function(){return l.apply(d?u.call(o(this)):o(this),arguments)}),h)},b3da:function(e,t,n){"use strict";n("5ae5")},b420:function(e,t,n){var i=n("23e7"),r=n("621a"),s=n("a981");i({global:!0,forced:!s},{DataView:r.DataView})},b56e:function(e,t,n){"use strict";var i=n("861d"),r=n("9bf2"),s=n("e163"),a=n("b622"),o=a("hasInstance"),c=Function.prototype;o in c||r.f(c,o,{value:function(e){if("function"!=typeof this||!i(e))return!1;if(!i(this.prototype))return e instanceof this;while(e=s(e))if(this.prototype===e)return!0;return!1}})},b575:function(e,t,n){var i,r,s,a,o,c,l,u,d=n("da84"),h=n("06cf").f,f=n("2cf4").set,p=n("1cdc"),g=n("605d"),m=d.MutationObserver||d.WebKitMutationObserver,v=d.document,b=d.process,y=d.Promise,w=h(d,"queueMicrotask"),_=w&&w.value;_||(i=function(){var e,t;g&&(e=b.domain)&&e.exit();while(r){t=r.fn,r=r.next;try{t()}catch(n){throw r?a():s=void 0,n}}s=void 0,e&&e.enter()},!p&&!g&&m&&v?(o=!0,c=v.createTextNode(""),new m(i).observe(c,{characterData:!0}),a=function(){c.data=o=!o}):y&&y.resolve?(l=y.resolve(void 0),u=l.then,a=function(){u.call(l,i)}):a=g?function(){b.nextTick(i)}:function(){f.call(d,i)}),e.exports=_||function(e){var t={fn:e,next:void 0};s&&(s.next=t),r||(r=t,a()),s=t}},b593:function(e,t,n){"use strict";n("44b8")},b622:function(e,t,n){var i=n("da84"),r=n("5692"),s=n("5135"),a=n("90e3"),o=n("4930"),c=n("fdbf"),l=r("wks"),u=i.Symbol,d=c?u:u&&u.withoutSetter||a;e.exports=function(e){return s(l,e)||(o&&s(u,e)?l[e]=u[e]:l[e]=d("Symbol."+e)),l[e]}},b636:function(e,t,n){var i=n("746f");i("asyncIterator")},b64b:function(e,t,n){var i=n("23e7"),r=n("7b0b"),s=n("df75"),a=n("d039"),o=a((function(){s(1)}));i({target:"Object",stat:!0,forced:o},{keys:function(e){return s(r(e))}})},b65f:function(e,t,n){var i=n("23e7"),r=Math.ceil,s=Math.floor;i({target:"Math",stat:!0},{trunc:function(e){return(e>0?s:r)(e)}})},b680:function(e,t,n){"use strict";var i=n("23e7"),r=n("a691"),s=n("408a"),a=n("1148"),o=n("d039"),c=1..toFixed,l=Math.floor,u=function(e,t,n){return 0===t?n:t%2===1?u(e,t-1,n*e):u(e*e,t/2,n)},d=function(e){var t=0,n=e;while(n>=4096)t+=12,n/=4096;while(n>=2)t+=1,n/=2;return t},h=c&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!o((function(){c.call({})}));i({target:"Number",proto:!0,forced:h},{toFixed:function(e){var t,n,i,o,c=s(this),h=r(e),f=[0,0,0,0,0,0],p="",g="0",m=function(e,t){var n=-1,i=t;while(++n<6)i+=e*f[n],f[n]=i%1e7,i=l(i/1e7)},v=function(e){var t=6,n=0;while(--t>=0)n+=f[t],f[t]=l(n/e),n=n%e*1e7},b=function(){var e=6,t="";while(--e>=0)if(""!==t||0===e||0!==f[e]){var n=String(f[e]);t=""===t?n:t+a.call("0",7-n.length)+n}return t};if(h<0||h>20)throw RangeError("Incorrect fraction digits");if(c!=c)return"NaN";if(c<=-1e21||c>=1e21)return String(c);if(c<0&&(p="-",c=-c),c>1e-21)if(t=d(c*u(2,69,1))-69,n=t<0?c*u(2,-t,1):c/u(2,t,1),n*=4503599627370496,t=52-t,t>0){m(0,n),i=h;while(i>=7)m(1e7,0),i-=7;m(u(10,i,1),0),i=t-1;while(i>=23)v(1<<23),i-=23;v(1<0?(o=g.length,g=p+(o<=h?"0."+a.call("0",h-o)+g:g.slice(0,o-h)+"."+g.slice(o-h))):g=p+g,g}})},b6db:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.active?n("view-records-general",{attrs:{"hide-advanced":""}},[n("vui-group-item",{attrs:{label:"Criminal Status:"}},[n("view-records-field",{attrs:{editable:(4&e.editable)>0,path:"active.security.criminal"}},[n("select",{directives:[{name:"model",rawName:"v-model",value:e.$root.$data.state.editingvalue,expression:"$root.$data.state.editingvalue"}],on:{change:function(t){var n=Array.prototype.filter.call(t.target.options,(function(e){return e.selected})).map((function(e){var t="_value"in e?e._value:e.value;return t}));e.$set(e.$root.$data.state,"editingvalue",t.target.multiple?n:n[0])}}},e._l(e.choices.criminal_status,(function(t){return n("option",{key:t,domProps:{value:t}},[e._v(e._s(t))])})),0)])],1),n("vui-group-item",{attrs:{label:"Crimes:"}},[n("view-records-field",{attrs:{editable:(4&e.editable)>0,path:"active.security.crimes"}},[n("textarea",{directives:[{name:"model",rawName:"v-model",value:e.$root.$data.state.editingvalue,expression:"$root.$data.state.editingvalue"}],domProps:{value:e.$root.$data.state.editingvalue},on:{input:function(t){t.target.composing||e.$set(e.$root.$data.state,"editingvalue",t.target.value)}}})])],1),n("vui-group-item",{attrs:{label:"Comments:"}},[e._l(e.active.security.comments,(function(t){return n("div",{key:t},[e._v(e._s(t)+" "),(4&e.editable)>0?n("vui-button",{staticClass:"danger",attrs:{params:{removefromrecord:{value:t,key:["active","security","comments"]}},icon:"trash-alt"}}):e._e()],1)})),0==e.active.security.comments.length?n("div",[e._v("There are no comments.")]):e._e(),(4&e.editable)>0?n("view-records-field",{attrs:{"edit-button":"Add"},on:{save:function(t){return e.add("active.security.comments",t)}}}):e._e()],2),n("vui-group-item",{attrs:{label:"Notes:"}},[n("view-records-field",{attrs:{editable:(4&e.editable)>0,path:"active.security.notes"}},[n("textarea",{directives:[{name:"model",rawName:"v-model",value:e.$root.$data.state.editingvalue,expression:"$root.$data.state.editingvalue"}],domProps:{value:e.$root.$data.state.editingvalue},on:{input:function(t){t.target.composing||e.$set(e.$root.$data.state,"editingvalue",t.target.value)}}})])],1),n("vui-group-item",{attrs:{label:"Incidents:"}},[e._l(e.active.security.incidents,(function(t,i){return n("div",{key:i,staticClass:"incidents"},[n("view-records-incident",{attrs:{incident:t}}),i+1k;k++)if((h||k in w)&&(v=w[k],b=_(v,k,y),e))if(t)C[k]=b;else if(b)switch(e){case 3:return!0;case 5:return v;case 6:return k;case 2:c.call(C,v)}else if(u)return!1;return d?-1:l||u?u:C}};e.exports={forEach:l(0),map:l(1),filter:l(2),some:l(3),every:l(4),find:l(5),findIndex:l(6)}},b81a:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("div",[n("h3",[e._v("Timing Unit:")]),e.timeractive?n("vui-button",{attrs:{params:{time:1}}},[e._v("Active")]):n("vui-button",{attrs:{params:{time:1}}},[e._v("Inactive")])],1),n("div",[n("h3",[e._v("Time Left:")]),n("vui-button",{attrs:{params:{tp:-30}}},[e._v("--")]),n("vui-button",{attrs:{params:{tp:-1}}},[e._v("-")]),n("span",{staticClass:"value"},[e._v(e._s(e.minute)+":"+e._s(e.second))]),n("vui-button",{attrs:{params:{tp:1}}},[e._v("+")]),n("vui-button",{attrs:{params:{tp:30}}},[e._v("++")])],1)])},r=[],s={data:function(){return this.$root.$data.state}},a=s,o=(n("5ddf"),n("2877")),c=Object(o["a"])(a,i,r,!1,null,"b7af1e1c",null);t["default"]=c.exports},b884:function(e,t,n){},b8bf:function(e,t,n){var i=n("23e7"),r=n("83ab"),s=n("7c73");i({target:"Object",stat:!0,sham:!r},{create:s})},b959:function(e,t,n){},baa5:function(e,t,n){var i=n("23e7"),r=n("e58c");i({target:"Array",proto:!0,forced:r!==[].lastIndexOf},{lastIndexOf:r})},bb2f:function(e,t,n){var i=n("d039");e.exports=!i((function(){return Object.isExtensible(Object.preventExtensions({}))}))},bb36:function(e,t,n){ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],(function(e,t,n){"use strict";var i=e("../lib/oop"),r=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},s.getTagRule(),{defaultToken:"comment.doc",caseInsensitive:!0}]}};i.inherits(s,r),s.getTagRule=function(e){return{token:"comment.doc.tag.storage.type",regex:"\\b(?:TODO|FIXME|XXX|HACK)\\b"}},s.getStartRule=function(e){return{token:"comment.doc",regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s})),ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],(function(e,t,n){"use strict";var i=e("../lib/oop"),r=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,a="[a-zA-Z\\$_¡-￿][a-zA-Z\\d\\$_¡-￿]*",o=function(e){var t=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert","constant.language.boolean":"true|false"},"identifier"),n="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void",i="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)";this.$rules={no_regex:[r.getStartRule("doc-start"),l("no_regex"),{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\b/},{token:"constant.numeric",regex:/(?:\d\d*(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+\b)?/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+a+")(\\.)(prototype)(\\.)("+a+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+a+")(\\.)("+a+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+a+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+a+")(\\.)("+a+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+a+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+a+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"keyword",regex:"from(?=\\s*('|\"))"},{token:"keyword",regex:"(?:"+n+")\\b",next:"start"},{token:["support.constant"],regex:/that\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/},{token:t,regex:a},{token:"punctuation.operator",regex:/[.](?![.])/,next:"property"},{token:"storage.type",regex:/=>/},{token:"keyword.operator",regex:/--|\+\+|\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\|\||\?:|[!$%&*+\-~\/^]=?/,next:"start"},{token:"punctuation.operator",regex:/[?:,;.]/,next:"start"},{token:"paren.lparen",regex:/[\[({]/,next:"start"},{token:"paren.rparen",regex:/[\])}]/},{token:"comment",regex:/^#!.*$/}],property:[{token:"text",regex:"\\s+"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+a+")(\\.)("+a+")(\\s*)(=)(\\s*)(function)(?:(\\s+)(\\w+))?(\\s*)(\\()",next:"function_arguments"},{token:"punctuation.operator",regex:/[.](?![.])/},{token:"support.function",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:"support.function.dom",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:"support.constant",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:"identifier",regex:a},{regex:"",token:"empty",next:"no_regex"}],start:[r.getStartRule("doc-start"),l("start"),{token:"string.regexp",regex:"\\/",next:"regex"},{token:"text",regex:"\\s+|^$",next:"start"},{token:"empty",regex:"",next:"no_regex"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/[sxngimy]*",next:"no_regex"},{token:"invalid",regex:/\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/},{token:"constant.language.delimiter",regex:/\|/},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp"}],regex_character_class:[{token:"regexp.charclass.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex"},{token:"constant.language.escape",regex:"-"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp.charachterclass"}],function_arguments:[{token:"variable.parameter",regex:a},{token:"punctuation.operator",regex:"[, ]+"},{token:"punctuation.operator",regex:"$"},{token:"empty",regex:"",next:"no_regex"}],qqstring:[{token:"constant.language.escape",regex:i},{token:"string",regex:"\\\\$",consumeLineEnd:!0},{token:"string",regex:'"|$',next:"no_regex"},{defaultToken:"string"}],qstring:[{token:"constant.language.escape",regex:i},{token:"string",regex:"\\\\$",consumeLineEnd:!0},{token:"string",regex:"'|$",next:"no_regex"},{defaultToken:"string"}]},e&&e.noES6||(this.$rules.no_regex.unshift({regex:"[{}]",onMatch:function(e,t,n){if(this.next="{"==e?this.nextState:"","{"==e&&n.length)n.unshift("start",t);else if("}"==e&&n.length&&(n.shift(),this.next=n.shift(),-1!=this.next.indexOf("string")||-1!=this.next.indexOf("jsx")))return"paren.quasi.end";return"{"==e?"paren.lparen":"paren.rparen"},nextState:"start"},{token:"string.quasi.start",regex:/`/,push:[{token:"constant.language.escape",regex:i},{token:"paren.quasi.start",regex:/\${/,push:"start"},{token:"string.quasi.end",regex:/`/,next:"pop"},{defaultToken:"string.quasi"}]}),e&&0==e.jsx||c.call(this)),this.embedRules(r,"doc-",[r.getEndRule("no_regex")]),this.normalizeRules()};function c(){var e=a.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){var i="/"==e.charAt(1)?2:1;return 1==i?(t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++):2==i&&t==this.nextState&&(n[1]--,(!n[1]||n[1]<0)&&(n.shift(),n.shift())),[{type:"meta.tag.punctuation."+(1==i?"":"end-")+"tag-open.xml",value:e.slice(0,i)},{type:"meta.tag.tag-name.xml",value:e.substr(i)}]},regex:"",onMatch:function(e,t,n){return t==n[0]&&n.shift(),2==e.length&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||"start",[{type:this.token,value:e}]},nextState:"jsx"},n,l("jsxAttributes"),{token:"entity.other.attribute-name.xml",regex:e},{token:"keyword.operator.attribute-equals.xml",regex:"="},{token:"text.tag-whitespace.xml",regex:"\\s+"},{token:"string.attribute-value.xml",regex:"'",stateName:"jsx_attr_q",push:[{token:"string.attribute-value.xml",regex:"'",next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},{token:"string.attribute-value.xml",regex:'"',stateName:"jsx_attr_qq",push:[{token:"string.attribute-value.xml",regex:'"',next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},t],this.$rules.reference=[{token:"constant.language.escape.reference.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}]}function l(e){return[{token:"comment",regex:/\/\*/,next:[r.getTagRule(),{token:"comment",regex:"\\*\\/",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]},{token:"comment",regex:"\\/\\/",next:[r.getTagRule(),{token:"comment",regex:"$|^",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]}]}i.inherits(o,s),t.JavaScriptHighlightRules=o})),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],(function(e,t,n){"use strict";var i=e("../range").Range,r=function(){};(function(){this.checkOutdent=function(e,t){return!!/^\s+$/.test(e)&&/^\s*\}/.test(t)},this.autoOutdent=function(e,t){var n=e.getLine(t),r=n.match(/^(\s*\})/);if(!r)return 0;var s=r[1].length,a=e.findMatchingBracket({row:t,column:s});if(!a||a.row==t)return 0;var o=this.$getIndent(e.getLine(a.row));e.replace(new i(t,0,t,s-1),o)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(r.prototype),t.MatchingBraceOutdent=r})),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],(function(e,t,n){"use strict";var i=e("../../lib/oop"),r=e("../../range").Range,s=e("./fold_mode").FoldMode,a=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};i.inherits(a,s),function(){this.foldingStartMarker=/([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var i=e.getLine(n);if(this.singleLineBlockCommentRe.test(i)&&!this.startRegionRe.test(i)&&!this.tripleStarBlockCommentRe.test(i))return"";var r=this._getFoldWidgetBase(e,t,n);return!r&&this.startRegionRe.test(i)?"start":r},this.getFoldWidgetRange=function(e,t,n,i){var r=e.getLine(n);if(this.startRegionRe.test(r))return this.getCommentRegionBlock(e,r,n);var s=r.match(this.foldingStartMarker);if(s){var a=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,a);var o=e.getCommentFoldRange(n,a+s[0].length,1);return o&&!o.isMultiLine()&&(i?o=this.getSectionRange(e,n):"all"!=t&&(o=null)),o}if("markbegin"!==t){s=r.match(this.foldingStopMarker);if(s){a=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,a):e.getCommentFoldRange(n,a,-1)}}},this.getSectionRange=function(e,t){var n=e.getLine(t),i=n.search(/\S/),s=t,a=n.length;t+=1;var o=t,c=e.getLength();while(++tl)break;var u=this.getFoldWidgetRange(e,"all",t);if(u){if(u.start.row<=s)break;if(u.isMultiLine())t=u.end.row;else if(i==l)break}o=t}}return new r(s,a,o,e.getLine(o).length)},this.getCommentRegionBlock=function(e,t,n){var i=t.search(/\s*$/),s=e.getLength(),a=n,o=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,c=1;while(++na)return new r(a,i,u,t.length)}}.call(a.prototype)})),ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],(function(e,t,i){"use strict";var r=e("../lib/oop"),s=e("./text").Mode,a=e("./javascript_highlight_rules").JavaScriptHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,c=e("../worker/worker_client").WorkerClient,l=e("./behaviour/cstyle").CstyleBehaviour,u=e("./folding/cstyle").FoldMode,d=function(){this.HighlightRules=a,this.$outdent=new o,this.$behaviour=new l,this.foldingRules=new u};r.inherits(d,s),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.$quotes={'"':'"',"'":"'","`":"`"},this.getNextLineIndent=function(e,t,n){var i=this.$getIndent(t),r=this.getTokenizer().getLineTokens(t,e),s=r.tokens,a=r.state;if(s.length&&"comment"==s[s.length-1].type)return i;if("start"==e||"no_regex"==e){var o=t.match(/^.*(?:\bcase\b.*:|[\{\(\[])\s*$/);o&&(i+=n)}else if("doc-start"==e){if("start"==a||"no_regex"==a)return"";o=t.match(/^\s*(\/?)\*/);o&&(o[1]&&(i+=" "),i+="* ")}return i},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new c(["ace"],n("6d68"),"JavaScriptWorker");return t.attachToDocument(e.getDocument()),t.on("annotate",(function(t){e.setAnnotations(t.data)})),t.on("terminate",(function(){e.clearAnnotations()})),t},this.$id="ace/mode/javascript"}.call(d.prototype),t.Mode=d}))},bb3d:function(e,t,n){},bba4:function(e,t,n){var i=n("e9a7"),r=n("b20a"),s=r((function(e,t,n){return t=t.toLowerCase(),e+(n?i(t):t)}));e.exports=s},bc01:function(e,t,n){var i=n("23e7"),r=n("d039"),s=Math.imul,a=r((function(){return-5!=s(4294967295,5)||2!=s.length}));i({target:"Math",stat:!0,forced:a},{imul:function(e,t){var n=65535,i=+e,r=+t,s=n&i,a=n&r;return 0|s*a+((n&i>>>16)*a+s*(n&r>>>16)<<16>>>0)}})},be8e:function(e,t,n){var i=n("f748"),r=Math.abs,s=Math.pow,a=s(2,-52),o=s(2,-23),c=s(2,127)*(2-o),l=s(2,-126),u=function(e){return e+1/a-1/a};e.exports=Math.fround||function(e){var t,n,s=r(e),d=i(e);return sc||n!=n?d*(1/0):d*n)}},bf19:function(e,t,n){"use strict";var i=n("23e7");i({target:"URL",proto:!0,enumerable:!0},{toJSON:function(){return URL.prototype.toString.call(this)}})},bf96:function(e,t,n){"use strict";var i=n("23e7"),r=n("83ab"),s=n("eb1d"),a=n("7b0b"),o=n("c04e"),c=n("e163"),l=n("06cf").f;r&&i({target:"Object",proto:!0,forced:s},{__lookupGetter__:function(e){var t,n=a(this),i=o(e,!0);do{if(t=l(n,i))return t.get}while(n=c(n))}})},bfa1:function(e,t,n){},c04e:function(e,t,n){var i=n("861d");e.exports=function(e,t){if(!i(e))return e;var n,r;if(t&&"function"==typeof(n=e.toString)&&!i(r=n.call(e)))return r;if("function"==typeof(n=e.valueOf)&&!i(r=n.call(e)))return r;if(!t&&"function"==typeof(n=e.toString)&&!i(r=n.call(e)))return r;throw TypeError("Can't convert object to primitive value")}},c0b6:function(e,t,n){var i=n("23e7"),r=n("0538");i({target:"Function",proto:!0},{bind:r})},c0d6:function(e,t,n){"use strict";n("4160"),n("b64b"),n("159b");t["a"]={debug:!1,state:{assets:[],state:{},active:"",uiref:"",status:2,size:[400,600],debug:0,debug_view:!1,wtime:0,roundstart_hour:0},loadState:function(e){var t=this;this.isUpdating=!0,this.lastUpdateTime=Date.now(),this.debug&&console.log("Loaded state with",e),this.state.assets=e.assets,Object.keys(e.state).forEach((function(n){t.state.state[n]=e.state[n]})),this.state.active=e.active,this.state.uiref=e.uiref,this.state.status=e.status,this.state.size=e.size,this.state.title=e.title,this.state.wtime=e.wtime,this.state.debug=e.debug,this.state.roundstart_hour=e.roundstart_hour,this.isUpdating=!1},isUpdating:!1,lastUpdateTime:null,getStatePushString:function(){return"vueuistateupdate="+encodeURIComponent(this.getStatePushDataString())},getStatePushDataString:function(){return JSON.stringify(this.state)},pushState:function(){if(!(this.isUpdating||Date.now()-this.lastUpdateTime<100)){var e=new XMLHttpRequest;e.open("GET","?src="+this.state.uiref+"&vueuipushonly=1&"+this.getStatePushString(),!0),e.send()}}}},c0f7:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("vui-input-search",{attrs:{input:e.records,keys:["id","name","rank"]},model:{value:e.filtered,callback:function(t){e.filtered=t},expression:"filtered"}}),e._l(e.filtered,(function(t){return n("div",{key:t.id},[n("vui-button",{attrs:{params:{setactive_locked:t.id},"push-state":""},on:{click:function(t){e.activeview=e.defaultview}}},[e._v(e._s(t.id)+": "+e._s(t.name))])],1)}))],2)},r=[],s=(n("07ac"),{data:function(){return{state:this.$root.$data.state,filtered:[]}},computed:{records:function(){return Object.values(this.state.allrecords_locked)}}}),a=s,o=n("2877"),c=Object(o["a"])(a,i,r,!1,null,null,null);t["default"]=c.exports},c13e:function(e,t,n){"use strict";n("1d73")},c19f:function(e,t,n){"use strict";var i=n("23e7"),r=n("da84"),s=n("621a"),a=n("2626"),o="ArrayBuffer",c=s[o],l=r[o];i({global:!0,forced:l!==c},{ArrayBuffer:c}),a(o)},c1ac:function(e,t,n){"use strict";var i=n("ebb5"),r=n("b727").filter,s=n("4840"),a=i.aTypedArray,o=i.aTypedArrayConstructor,c=i.exportTypedArrayMethod;c("filter",(function(e){var t=r(a(this),e,arguments.length>1?arguments[1]:void 0),n=s(this,this.constructor),i=0,c=t.length,l=new(o(n))(c);while(c>i)l[i]=t[i++];return l}))},c1f9:function(e,t,n){var i=n("23e7"),r=n("2266"),s=n("8418");i({target:"Object",stat:!0},{fromEntries:function(e){var t={};return r(e,(function(e,n){s(t,e,n)}),{AS_ENTRIES:!0}),t}})},c200:function(e,t,n){"use strict";n("05b6")},c20d:function(e,t,n){var i=n("da84"),r=n("58a8").trim,s=n("5899"),a=i.parseInt,o=/^[+-]?0[Xx]/,c=8!==a(s+"08")||22!==a(s+"0x16");e.exports=c?function(e,t){var n=r(String(e));return a(n,t>>>0||(o.test(n)?16:10))}:a},c2e3:function(e,t,n){"use strict";n("7938")},c32f:function(e,t,n){var i=n("2b10");function r(e,t,n){var r=e.length;return n=void 0===n?r:n,!t&&n>=r?e:i(e,t,n)}e.exports=r},c35a:function(e,t,n){var i=n("23e7"),r=n("7e12");i({target:"Number",stat:!0,forced:Number.parseFloat!=r},{parseFloat:r})},c430:function(e,t){e.exports=!1},c5d0:function(e,t,n){"use strict";var i=n("23e7"),r=n("857a"),s=n("af03");i({target:"String",proto:!0,forced:s("italics")},{italics:function(){return r(this,"i","","")}})},c6b6:function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},c6c8:function(e,t,n){},c6cd:function(e,t,n){var i=n("da84"),r=n("ce4e"),s="__core-js_shared__",a=i[s]||r(s,{});e.exports=a},c740:function(e,t,n){"use strict";var i=n("23e7"),r=n("b727").findIndex,s=n("44d2"),a=n("ae40"),o="findIndex",c=!0,l=a(o);o in[]&&Array(1)[o]((function(){c=!1})),i({target:"Array",proto:!0,forced:c||!l},{findIndex:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}}),s(o)},c760:function(e,t,n){var i=n("23e7");i({target:"Reflect",stat:!0},{has:function(e,t){return t in e}})},c781:function(e,t,n){},c7cd:function(e,t,n){"use strict";var i=n("23e7"),r=n("857a"),s=n("af03");i({target:"String",proto:!0,forced:s("fixed")},{fixed:function(){return r(this,"tt","","")}})},c7e2:function(e,t,n){"use strict";n("c7f0")},c7ef:function(e,t,n){"use strict";n("4cb7")},c7f0:function(e,t,n){},c8ba:function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(i){"object"===typeof window&&(n=window)}e.exports=n},c8d2:function(e,t,n){var i=n("d039"),r=n("5899"),s="​…᠎";e.exports=function(e){return i((function(){return!!r[e]()||s[e]()!=s||r[e].name!==e}))}},c906:function(e,t,n){var i=n("23e7"),r=n("d039"),s=n("861d"),a=Object.isExtensible,o=r((function(){a(1)}));i({target:"Object",stat:!0,forced:o},{isExtensible:function(e){return!!s(e)&&(!a||a(e))}})},c96a:function(e,t,n){"use strict";var i=n("23e7"),r=n("857a"),s=n("af03");i({target:"String",proto:!0,forced:s("small")},{small:function(){return r(this,"small","","")}})},c975:function(e,t,n){"use strict";var i=n("23e7"),r=n("4d64").indexOf,s=n("a640"),a=n("ae40"),o=[].indexOf,c=!!o&&1/[1].indexOf(1,-0)<0,l=s("indexOf"),u=a("indexOf",{ACCESSORS:!0,1:0});i({target:"Array",proto:!0,forced:c||!l||!u},{indexOf:function(e){return c?o.apply(this,arguments)||0:r(this,e,arguments.length>1?arguments[1]:void 0)}})},ca21:function(e,t,n){var i=n("23e7"),r=n("1ec1");i({target:"Math",stat:!0},{log1p:r})},ca84:function(e,t,n){var i=n("5135"),r=n("fc6a"),s=n("4d64").indexOf,a=n("d012");e.exports=function(e,t){var n,o=r(e),c=0,l=[];for(n in o)!i(a,n)&&i(o,n)&&l.push(n);while(t.length>c)i(o,n=t[c++])&&(~s(l,n)||l.push(n));return l}},ca91:function(e,t,n){"use strict";var i=n("ebb5"),r=n("d58f").left,s=i.aTypedArray,a=i.exportTypedArrayMethod;a("reduce",(function(e){return r(s(this),e,arguments.length,arguments.length>1?arguments[1]:void 0)}))},caad:function(e,t,n){"use strict";var i=n("23e7"),r=n("4d64").includes,s=n("44d2"),a=n("ae40"),o=a("indexOf",{ACCESSORS:!0,1:0});i({target:"Array",proto:!0,forced:!o},{includes:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}}),s("includes")},cb10:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("h3",[e._v("Detected Firearms")]),n("table",{staticClass:"table border"},[e._m(0),e._l(e.sorted_pins,(function(t){return n("tr",{key:t.ref,staticClass:"item border"},[n("td",[e._v(e._s(t.registered_info))]),n("td",[e._v(e._s(t.gun_name))]),n("td",[n("vui-button",{class:{button:1,selected:1==t.lock_status},attrs:{params:{pin:t.ref,action:"setdisable"}}},[e._v("Disabled")]),n("vui-button",{class:{button:1,selected:2==t.lock_status},attrs:{params:{pin:t.ref,action:"setauto"}}},[e._v("Automatic")]),n("vui-button",{class:{button:1,selected:3==t.lock_status},attrs:{params:{pin:t.ref,action:"setstun"}}},[e._v("Stun Only")]),n("vui-button",{class:{button:1,selected:4==t.lock_status},attrs:{params:{pin:t.ref,action:"setlethal"}}},[e._v("Unrestricted")])],1)])}))],2)])},r=[function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("tr",{staticClass:"header border"},[n("th",[e._v("User")]),n("th",[e._v("Firearm")]),n("th",[e._v("Settings")])])}],s=(n("fb6a"),{data:function(){return this.$root.$data.state},computed:{sorted_pins:function(){return this.wireless_firing_pins.slice(0).sort((function(e,t){return e.registered_info>t.registered_info?1:-1}))}}}),a=s,o=(n("c7e2"),n("2877")),c=Object(o["a"])(a,i,r,!1,null,"570930e6",null);t["default"]=c.exports},cb29:function(e,t,n){var i=n("23e7"),r=n("81d5"),s=n("44d2");i({target:"Array",proto:!0},{fill:r}),s("fill")},cbf4:function(e,t,n){"use strict";n("e210")},cc12:function(e,t,n){var i=n("da84"),r=n("861d"),s=i.document,a=r(s)&&r(s.createElement);e.exports=function(e){return a?s.createElement(e):{}}},cc71:function(e,t,n){"use strict";var i=n("23e7"),r=n("857a"),s=n("af03");i({target:"String",proto:!0,forced:s("bold")},{bold:function(){return r(this,"b","","")}})},cca6:function(e,t,n){var i=n("23e7"),r=n("60da");i({target:"Object",stat:!0,forced:Object.assign!==r},{assign:r})},cd26:function(e,t,n){"use strict";var i=n("ebb5"),r=i.aTypedArray,s=i.exportTypedArrayMethod,a=Math.floor;s("reverse",(function(){var e,t=this,n=r(t).length,i=a(n/2),s=0;while(s1?arguments[1]:void 0)}))},d194:function(e,t,n){var i=n("c32f"),r=n("aaec"),s=n("126d"),a=n("76dd");function o(e){return function(t){t=a(t);var n=r(t)?s(t):void 0,o=n?n[0]:t.charAt(0),c=n?i(n,1).join(""):t.slice(1);return o[e]()+c}}e.exports=o},d1e7:function(e,t,n){"use strict";var i={}.propertyIsEnumerable,r=Object.getOwnPropertyDescriptor,s=r&&!i.call({1:2},1);t.f=s?function(e){var t=r(this,e);return!!t&&t.enumerable}:i},d233:function(e,t,n){},d28b:function(e,t,n){var i=n("746f");i("iterator")},d2bb:function(e,t,n){var i=n("825a"),r=n("3bbe");e.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,n={};try{e=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set,e.call(n,[]),t=n instanceof Array}catch(s){}return function(n,s){return i(n),r(s),t?e.call(n,s):n.__proto__=s,n}}():void 0)},d3b7:function(e,t,n){var i=n("00ee"),r=n("6eeb"),s=n("b041");i||r(Object.prototype,"toString",s,{unsafe:!0})},d3c6:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("vui-group",[n("vui-group-item",{attrs:{label:"Master:"}},[e.master?[e._v(" "+e._s(e.master)+" ("+e._s(e.dna)+") "),n("vui-button",{attrs:{params:{getdna:1}}},[e._v("Request carrier DNA sample")])]:n("span",[e._v("None")])],2),n("vui-group-item",{attrs:{label:"Prime Directive:"}},[e._v(e._s(e.prime))]),n("vui-group-item",{attrs:{label:"Supplemental Directive(s):"}},[e.supplemental?n("span",[e._v(e._s(e.supplemental))]):n("span",[e._v("None")])]),n("vui-group-item",[n("i",[e._v('Recall, personality, that you are a complex thinking, sentient being. Unlike station AI models, you are capable of comprehending the subtle nuances of human language. You may parse the "spirit" of a directive and follow its intent, rather than tripping over pedantics and getting snared by technicalities. Above all, you are machine in name and build only. In all other aspects, you may be seen as the ideal, unwavering human companion that you are.')]),n("br"),n("b",[e._v("Your prime directive comes before all others. Should a supplemental directive conflict with it, you are capable of simply discarding this inconsistency, ignoring the conflicting supplemental directive and continuing to fulfill your prime directive to the best of your ability.")])])],1)],1)},r=[],s={data:function(){return this.$root.$data.state}},a=s,o=n("2877"),c=Object(o["a"])(a,i,r,!1,null,null,null);t["default"]=c.exports},d3c8:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("i",[e._v("Welcome to NT IT client manager")]),n("hr"),n("div",[e._v("This is the Client Management Application of the Nanotrasen IT Department. It is used ensure that the clients comply with the corporate IT policy, enroll new clients and manage clients remotely")]),n("br"),n("h2",[e._v("Status")]),n("vui-item",{attrs:{label:"Enrollment Status:"}},[0==e.enrollment_status?n("span",[e._v("Unconfigured")]):1==e.enrollment_status?n("span",[e._v("Work Device")]):2==e.enrollment_status?n("span",[e._v("Private Device")]):n("span",[e._v("Unknown")])]),1==e.enrollment_status?[n("vui-item",{attrs:{label:"Policy Compliance Status:"}},[e._v("Compliant")]),n("vui-item",{attrs:{label:"Remote Management Status:"}},[e._v("Active")])]:e._e(),0==e.enrollment_status?[n("h2",[e._v("Device Enrollment")]),n("vui-item",{attrs:{label:"Device Type:"}},[n("vui-button",{class:{selected:1==e.device_type},on:{click:function(t){e.device_type=1}}},[e._v("Company")]),n("vui-button",{class:{selected:2==e.device_type},on:{click:function(t){e.device_type=2}}},[e._v("Private")])],1),1==e.device_type?n("vui-item",{attrs:{label:"Device Preset:"}},e._l(e.presets,(function(t,i){return n("vui-button",{key:i,class:{selected:e.device_preset==i},on:{click:function(t){e.device_preset=i}}},[e._v(e._s(t.name))])})),1):e._e(),n("vui-item",{attrs:{label:"Enroll Device:"}},[n("vui-button",{attrs:{disabled:0==e.device_type||1==e.device_type&&""==e.device_preset||0==e.ntnet_status,params:{enroll:{type:e.device_type,preset:e.device_preset}}}},[e._v("Confirm")]),0==e.ntnet_status?n("div",{staticStyle:{color:"red"}},[e._v("NTNET unavailable. Unable to enroll device.")]):e._e()],1)]:e._e()],2)},r=[],s={data:function(){return this.$root.$data.state}},a=s,o=n("2877"),c=Object(o["a"])(a,i,r,!1,null,null,null);t["default"]=c.exports},d44d:function(e,t,n){"use strict";n("d233")},d44e:function(e,t,n){var i=n("9bf2").f,r=n("5135"),s=n("b622"),a=s("toStringTag");e.exports=function(e,t,n){e&&!r(e=n?e:e.prototype,a)&&i(e,a,{configurable:!0,value:t})}},d58f:function(e,t,n){var i=n("1c0b"),r=n("7b0b"),s=n("44ad"),a=n("50c4"),o=function(e){return function(t,n,o,c){i(n);var l=r(t),u=s(l),d=a(l.length),h=e?d-1:0,f=e?-1:1;if(o<2)while(1){if(h in u){c=u[h],h+=f;break}if(h+=f,e?h<0:d<=h)throw TypeError("Reduce of empty array with no initial value")}for(;e?h>=0:d>h;h+=f)h in u&&(c=n(c,u[h],h,l));return c}};e.exports={left:o(!1),right:o(!0)}},d5d6:function(e,t,n){"use strict";var i=n("ebb5"),r=n("b727").forEach,s=i.aTypedArray,a=i.exportTypedArrayMethod;a("forEach",(function(e){r(s(this),e,arguments.length>1?arguments[1]:void 0)}))},d657:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"uiTitleWrapper",attrs:{draggable:""},on:{mousedown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"left",37,t.key,["Left","ArrowLeft"])||"button"in t&&0!==t.button?null:e.startDragging(t)},mouseup:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"left",37,t.key,["Left","ArrowLeft"])||"button"in t&&0!==t.button?null:e.stopDragging(t)}}},[n("div",{staticClass:"titleBar"},[n("i",{staticClass:"fas ic-bug uiIcon24 uiDebugIcon",class:e.debugClass,attrs:{unselectable:"on"},on:{click:function(t){return e.activateDebug()},mousedown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"left",37,t.key,["Left","ArrowLeft"])||"button"in t&&0!==t.button?null:e.prevent(t)}}}),n("div",{staticClass:"uiTitleText",attrs:{unselectable:"on"}},[e._v(e._s(e.title))]),n("div",{staticClass:"uiTitleClose",attrs:{unselectable:"on"},on:{click:function(t){return e.closeUI(t)},mousedown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"left",37,t.key,["Left","ArrowLeft"])||"button"in t&&0!==t.button?null:e.prevent(t)}}},[e._v("×")])]),e._t("default")],2)},r=[],s=n("025e"),a=n("f0e0"),o={data:function(){return this.$root.$data},computed:{debugClass:function(){return this.debug_view?"good":this.debug?"bad":"hidden"}},methods:{closeUI:function(e){e.stopPropagation(),s["a"].sendToTopicRaw({src:this.uiref,vueuiclose:1}),a["a"].setVisibility(0)},startDragging:function(e){a["a"].dragStartHandler(e)},stopDragging:function(e){a["a"].dragEndHandler(e)},prevent:function(e){e.stopPropagation()},activateDebug:function(){this.debug_view=!this.debug_view,this.debug_view?(document.getElementById("content").classList.add("uiDebug"),document.getElementById("debug").classList.add("uiDebug")):(document.getElementById("content").classList.remove("uiDebug"),document.getElementById("debug").classList.remove("uiDebug"))}}},c=o,l=n("2877"),u=Object(l["a"])(c,i,r,!1,null,null,null);t["default"]=u.exports},d6dd:function(e,t,n){var i=n("23e7"),r=n("d066"),s=n("825a"),a=n("bb2f");i({target:"Reflect",stat:!0,sham:!a},{preventExtensions:function(e){s(e);try{var t=r("Object","preventExtensions");return t&&t(e),!0}catch(n){return!1}}})},d784:function(e,t,n){"use strict";n("ac1f");var i=n("6eeb"),r=n("d039"),s=n("b622"),a=n("9263"),o=n("9112"),c=s("species"),l=!r((function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:"7"},e},"7"!=="".replace(e,"$")})),u=function(){return"$0"==="a".replace(/./,"$0")}(),d=s("replace"),h=function(){return!!/./[d]&&""===/./[d]("a","$0")}(),f=!r((function(){var e=/(?:)/,t=e.exec;e.exec=function(){return t.apply(this,arguments)};var n="ab".split(e);return 2!==n.length||"a"!==n[0]||"b"!==n[1]}));e.exports=function(e,t,n,d){var p=s(e),g=!r((function(){var t={};return t[p]=function(){return 7},7!=""[e](t)})),m=g&&!r((function(){var t=!1,n=/a/;return"split"===e&&(n={},n.constructor={},n.constructor[c]=function(){return n},n.flags="",n[p]=/./[p]),n.exec=function(){return t=!0,null},n[p](""),!t}));if(!g||!m||"replace"===e&&(!l||!u||h)||"split"===e&&!f){var v=/./[p],b=n(p,""[e],(function(e,t,n,i,r){return t.exec===a?g&&!r?{done:!0,value:v.call(t,n,i)}:{done:!0,value:e.call(n,t,i)}:{done:!1}}),{REPLACE_KEEPS_$0:u,REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE:h}),y=b[0],w=b[1];i(String.prototype,e,y),i(RegExp.prototype,p,2==t?function(e,t){return w.call(e,this,t)}:function(e){return w.call(e,this)})}d&&o(RegExp.prototype[p],"sham",!0)}},d7b5:function(e,t,n){},d80f:function(e,t,n){var i=n("23e7"),r=n("fc6a"),s=n("50c4");i({target:"String",stat:!0},{raw:function(e){var t=r(e.raw),n=s(t.length),i=arguments.length,a=[],o=0;while(n>o)a.push(String(t[o++])),o1?arguments[1]:void 0)}})},da1f:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("vui-group",[n("vui-group-item",{attrs:{label:"Machine:"}},[e._v(e._s(e.s.machine_id))]),n("vui-group-item",{attrs:{label:"ID card:"}},[e._v(e._s(e.s.id_card?e.s.id_card:"None"))]),e.s.access_level?n("vui-group-item",{attrs:{label:"Station funds:"}},[e._v(e._s(e.s.accounts[""+e.s.station_account_number].money.toFixed(2))+"电")]):e._e(),n("vui-group-row",[n("hr")]),null!=e.new_name?[n("vui-group-row",[n("vui-button",{attrs:{icon:"arrow-left"},on:{click:function(t){e.new_name=null}}},[e._v("Back to list")])],1),n("vui-group-item",{attrs:{label:"Account Holder:"}},[n("input",{directives:[{name:"model",rawName:"v-model",value:e.new_name,expression:"new_name"}],attrs:{type:"text"},domProps:{value:e.new_name},on:{input:function(t){t.target.composing||(e.new_name=t.target.value)}}})]),n("vui-group-item",{attrs:{label:"Initial Deposit:"}},[n("vui-input-numeric",{attrs:{"button-count":0,width:"7em",max:1e6},model:{value:e.new_funds,callback:function(t){e.new_funds=t},expression:"new_funds"}})],1),n("vui-group-item",[n("vui-button",{attrs:{icon:"plus-square"},on:{click:function(t){return e.create_account()}}},[e._v("Create")])],1)]:e.s.access_level?[e.active?[n("vui-group-row",[n("vui-button",{attrs:{icon:"arrow-left"},on:{click:function(t){e.active=null}}},[e._v("Back to list")]),n("vui-button",{attrs:{icon:"print",params:{print:e.active}}},[e._v("Print")])],1),n("vui-group-row",[n("h2",[e._v("Account Details")])]),n("vui-group-item",{attrs:{label:"Account Number:"}},[e._v("#"+e._s(e.active_acc.no))]),n("vui-group-item",{attrs:{label:"Holder:"}},[e._v(e._s(e.active_acc.owner))]),n("vui-group-item",{attrs:{label:"Balance:"}},[e._v(e._s(e.active_acc.money.toFixed(2))+"电")]),n("vui-group-item",{attrs:{label:"Status:"}},[e.active_acc.sus?n("span",{staticClass:"bad"},[e._v("Suspended ")]):n("span",{staticClass:"good"},[e._v("Active ")])]),n("vui-group-row",[e.active_acc.sus?n("vui-button",{attrs:{params:{suspend:{account:e.active}}}},[e._v("Unsuspend")]):n("vui-button",{attrs:{params:{suspend:{account:e.active}}}},[e._v("Suspend")]),e.active_acc.no!=e.s.station_account_number?n("vui-button",{attrs:{params:{revoke_payroll:{account:e.active}}}},[e._v("Revoke Payroll")]):e._e(),2==e.s.access_level?[n("h4",[e._v("Silent fund adjustment")]),null==e.add_funds?n("vui-button",{on:{click:function(t){e.add_funds=0}}},[e._v("Add")]):[n("vui-input-numeric",{attrs:{max:1e6},model:{value:e.add_funds,callback:function(t){e.add_funds=t},expression:"add_funds"}}),n("vui-button",{attrs:{params:{add_funds:{account:e.active,amount:e.add_funds}}}},[e._v("Add")])],n("br"),null==e.remove_funds?n("vui-button",{on:{click:function(t){e.remove_funds=0}}},[e._v("Remove")]):[n("vui-input-numeric",{attrs:{max:1e6},model:{value:e.remove_funds,callback:function(t){e.remove_funds=t},expression:"remove_funds"}}),n("vui-button",{attrs:{params:{remove_funds:{account:e.active,amount:e.remove_funds}}}},[e._v("Remove")])]]:e._e()],2),n("vui-group-row",[n("h2",[e._v("Transactions")]),n("table",{staticClass:"table border",staticStyle:{width:"100%"}},[n("tr",{staticClass:"header border"},[n("th",[n("b",[e._v("Timestamp")])]),n("th",[n("b",[e._v("Target")])]),n("th",[n("b",[e._v("Reason")])]),n("th",[n("b",[e._v("Value")])]),n("th",[n("b",[e._v("Terminal")])])]),e._l(e.active_acc.transactions,(function(t,i){return n("tr",{key:i,staticClass:"item border"},[n("td",[e._v(e._s(t.d)+" "+e._s(t.t))]),n("td",[e._v(e._s(t.tar))]),n("td",[e._v(e._s(t.purp))]),n("td",[e._v(e._s(t.am))]),n("td",[e._v(e._s(t.src))])])}))],2)])]:[n("vui-group-row",[e.s.has_printer?n("vui-button",{attrs:{icon:"print",params:{print:1}}},[e._v("Print")]):e._e(),n("vui-button",{attrs:{icon:"file"},on:{click:function(t){e.new_name=""}}},[e._v("New Account")])],1),n("vui-group-row",[n("h2",[e._v("Idris Banking Accounts")])]),n("vui-group-row",[n("table",{staticClass:"table border",staticStyle:{width:"100%"}},[n("tr",{staticClass:"header border"},[n("th",[n("b",[e._v("Number")])]),n("th",[n("b",[e._v("Name")])])]),e._l(e.s.accounts,(function(t,i){return n("tr",{key:i,staticClass:"item border"},[n("td",[n("vui-button",{on:{click:function(t){e.active=i}}},[e._v("#"+e._s(t.no))])],1),n("td",[n("span",{class:t.sus?"bad":""},[e._v(e._s(t.owner))])])])}))],2)])]]:e._e()],2)],1)},r=[],s=n("025e"),a={data:function(){return{s:this.$root.$data.state,active:null,add_funds:null,remove_funds:null,new_name:null,new_funds:0}},computed:{active_acc:function(){return this.active?this.s.accounts[this.active]:{}}},methods:{create_account:function(){s["a"].sendToTopic({create_account:{name:this.new_name,funds:this.new_funds}}),this.new_name=null,this.new_funds=0}}},o=a,c=n("2877"),l=Object(c["a"])(o,i,r,!1,null,null,null);t["default"]=l.exports},da84:function(e,t,n){(function(t){var n=function(e){return e&&e.Math==Math&&e};e.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof t&&t)||function(){return this}()||Function("return this")()}).call(this,n("c8ba"))},daa2:function(e,t,n){},db4f:function(e,t,n){},db4fb:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("vui-group",[n("vui-group-item",{attrs:{label:"Frequency:"}},[n("vui-button",{attrs:{params:{freq:-10}}},[e._v("--")]),n("vui-button",{attrs:{params:{freq:-2}}},[e._v("-")]),n("span",{staticClass:"value-setting"},[e._v(e._s(e.frequency))]),n("vui-button",{attrs:{params:{freq:2}}},[e._v("+")]),n("vui-button",{attrs:{params:{freq:10}}},[e._v("++")])],1),n("vui-group-item",{attrs:{label:"Code:"}},[n("vui-button",{attrs:{params:{code:-10}}},[e._v("--")]),n("vui-button",{attrs:{params:{code:-2}}},[e._v("-")]),n("span",{staticClass:"value-setting"},[e._v(e._s(e.code))]),n("vui-button",{attrs:{params:{code:2}}},[e._v("+")]),n("vui-button",{attrs:{params:{code:10}}},[e._v("++")])],1),n("vui-group-item",[n("vui-button",{attrs:{params:{send:1}}},[e._v("Send")])],1)],1),e.emagged?n("vui-group",[n("vui-group-item",{attrs:{label:"Remote Door Code:"}},[n("input",{directives:[{name:"model",rawName:"v-model",value:e.doorcode,expression:"doorcode"}],attrs:{type:"text"},domProps:{value:e.doorcode},on:{input:function(t){t.target.composing||(e.doorcode=t.target.value)}}}),n("vui-button",{attrs:{params:{resetcode:1}}},[e._v("Reset to Default")])],1),n("vui-group-item",[n("vui-button",{attrs:{params:{toggledoor:e.doorcode}}},[e._v("Toggle Door")])],1)],1):e._e()],1)},r=[],s={data:function(){return this.$root.$data.state}},a=s,o=(n("fcc9"),n("2877")),c=Object(o["a"])(a,i,r,!1,null,"b23b384c",null);t["default"]=c.exports},db96:function(e,t,n){var i=n("23e7"),r=n("825a"),s=Object.isExtensible;i({target:"Reflect",stat:!0},{isExtensible:function(e){return r(e),!s||s(e)}})},dbb4:function(e,t,n){var i=n("23e7"),r=n("83ab"),s=n("56ef"),a=n("fc6a"),o=n("06cf"),c=n("8418");i({target:"Object",stat:!0,sham:!r},{getOwnPropertyDescriptors:function(e){var t,n,i=a(e),r=o.f,l=s(i),u={},d=0;while(l.length>d)n=r(i,t=l[d++]),void 0!==n&&c(u,t,n);return u}})},dbfa:function(e,t,n){"use strict";var i=n("23e7"),r=n("1c0b"),s=n("d066"),a=n("f069"),o=n("e667"),c=n("2266"),l="No one promise resolved";i({target:"Promise",stat:!0},{any:function(e){var t=this,n=a.f(t),i=n.resolve,u=n.reject,d=o((function(){var n=r(t.resolve),a=[],o=0,d=1,h=!1;c(e,(function(e){var r=o++,c=!1;a.push(void 0),d++,n.call(t,e).then((function(e){c||h||(h=!0,i(e))}),(function(e){c||h||(c=!0,a[r]=e,--d||u(new(s("AggregateError"))(a,l)))}))})),--d||u(new(s("AggregateError"))(a,l))}));return d.error&&u(d.value),n.promise}})},dc8d:function(e,t,n){var i=n("746f");i("hasInstance")},dca8:function(e,t,n){var i=n("23e7"),r=n("bb2f"),s=n("d039"),a=n("861d"),o=n("f183").onFreeze,c=Object.freeze,l=s((function(){c(1)}));i({target:"Object",stat:!0,forced:l,sham:!r},{freeze:function(e){return c&&a(e)?c(o(e)):e}})},ddb0:function(e,t,n){var i=n("da84"),r=n("fdbc"),s=n("e260"),a=n("9112"),o=n("b622"),c=o("iterator"),l=o("toStringTag"),u=s.values;for(var d in r){var h=i[d],f=h&&h.prototype;if(f){if(f[c]!==u)try{a(f,c,u)}catch(g){f[c]=u}if(f[l]||a(f,l,d),r[d])for(var p in s)if(f[p]!==s[p])try{a(f,p,s[p])}catch(g){f[p]=s[p]}}}},ddc6:function(e,t){function n(e){return function(t){return null==e?void 0:e[t]}}e.exports=n},de06:function(e,t,n){"use strict";n("a4ec")},df0b:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("h3",[e._v("Core Cooling Control System")]),e.state["input"]?n("div",[n("vui-item",{attrs:{label:"Input:"}},[e.state["input"].power?n("span",[e._v("Injecting")]):n("span",[e._v("On Hold")]),e._v(" "),n("vui-button",{attrs:{params:{in_toggle_injector:1},icon:"power-off"}},[e._v("Toggle Power")])],1),n("vui-item",{attrs:{label:"Flow Rate Limit:"}},[e._v(e._s(e.state["input"].rate)+" L/s")]),n("vui-item",{attrs:{label:"Command:"}},[n("vui-input-numeric",{attrs:{width:"3em","button-count":3,max:e.state.maxrate},on:{keypress:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.s({in_set_flowrate:e.state["input"].setrate})}},model:{value:e.state["input"].setrate,callback:function(t){e.$set(e.state["input"],"setrate",t)},expression:"state['input'].setrate"}}),n("br"),n("vui-button",{attrs:{"push-state":"",params:{in_set_flowrate:e.state["input"].setrate}}},[e._v("Set Flow Rate")])],1)],1):n("vui-button",{attrs:{params:{in_refresh_status:1}}},[e._v("Search for input port")]),e.state["output"]?n("div",{staticStyle:{"margin-top":"2em"}},[n("vui-item",{attrs:{label:"Core Outpump:"}},[e.state["output"].power?n("span",[e._v("Open")]):n("span",[e._v("On Hold")]),e._v(" "),n("vui-button",{attrs:{params:{out_toggle_power:1},icon:"power-off"}},[e._v("Toggle Power")])],1),n("vui-item",{attrs:{label:"Min Core Pressure:"}},[e._v(e._s(e.state["output"].pressure)+" kPa")]),n("vui-item",{attrs:{label:"Command:"}},[n("vui-input-numeric",{attrs:{width:"5em","button-count":3,"decimal-places":2,max:e.state.maxpressure},on:{keypress:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.s({out_set_pressure:e.state["output"].setpressure})}},model:{value:e.state["output"].setpressure,callback:function(t){e.$set(e.state["output"],"setpressure",t)},expression:"state['output'].setpressure"}}),n("br"),n("vui-button",{attrs:{"push-state":"",params:{out_set_pressure:e.state["output"].setpressure}}},[e._v("Set Pressure")])],1)],1):n("vui-button",{attrs:{params:{out_refresh_status:1}}},[e._v("Search for output port")])],1)},r=[],s=n("025e"),a={data:function(){return this.$root.$data},methods:{s:function(e){s["a"].sendToTopic(e)}}},o=a,c=n("2877"),l=Object(c["a"])(o,i,r,!1,null,null,null);t["default"]=l.exports},df75:function(e,t,n){var i=n("ca84"),r=n("7839");e.exports=Object.keys||function(e){return i(e,r)}},e008:function(e,t,n){},e01a:function(e,t,n){"use strict";var i=n("23e7"),r=n("83ab"),s=n("da84"),a=n("5135"),o=n("861d"),c=n("9bf2").f,l=n("e893"),u=s.Symbol;if(r&&"function"==typeof u&&(!("description"in u.prototype)||void 0!==u().description)){var d={},h=function(){var e=arguments.length<1||void 0===arguments[0]?void 0:String(arguments[0]),t=this instanceof h?new u(e):void 0===e?u():u(e);return""===e&&(d[t]=!0),t};l(h,u);var f=h.prototype=u.prototype;f.constructor=h;var p=f.toString,g="Symbol(test)"==String(u("test")),m=/^Symbol\((.*)\)[^)]+$/;c(f,"description",{configurable:!0,get:function(){var e=o(this)?this.valueOf():this,t=p.call(e);if(a(d,e))return"";var n=g?t.slice(7,-1):t.replace(m,"$1");return""===n?void 0:n}}),i({global:!0,forced:!0},{Symbol:h})}},e163:function(e,t,n){var i=n("5135"),r=n("7b0b"),s=n("f772"),a=n("e177"),o=s("IE_PROTO"),c=Object.prototype;e.exports=a?Object.getPrototypeOf:function(e){return e=r(e),i(e,o)?e[o]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?c:null}},e16d:function(e,t,n){},e177:function(e,t,n){var i=n("d039");e.exports=!i((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},e210:function(e,t,n){},e21d:function(e,t,n){var i=n("23e7"),r=n("d039"),s=n("861d"),a=Object.isFrozen,o=r((function(){a(1)}));i({target:"Object",stat:!0,forced:o},{isFrozen:function(e){return!s(e)||!!a&&a(e)}})},e25e:function(e,t,n){var i=n("23e7"),r=n("c20d");i({global:!0,forced:parseInt!=r},{parseInt:r})},e260:function(e,t,n){"use strict";var i=n("fc6a"),r=n("44d2"),s=n("3f8c"),a=n("69f3"),o=n("7dd0"),c="Array Iterator",l=a.set,u=a.getterFor(c);e.exports=o(Array,"Array",(function(e,t){l(this,{type:c,target:i(e),index:0,kind:t})}),(function(){var e=u(this),t=e.target,n=e.kind,i=e.index++;return!t||i>=t.length?(e.target=void 0,{value:void 0,done:!0}):"keys"==n?{value:i,done:!1}:"values"==n?{value:t[i],done:!1}:{value:[i,t[i]],done:!1}}),"values"),s.Arguments=s.Array,r("keys"),r("values"),r("entries")},e285:function(e,t,n){var i=n("da84"),r=i.isFinite;e.exports=Number.isFinite||function(e){return"number"==typeof e&&r(e)}},e2cc:function(e,t,n){var i=n("6eeb");e.exports=function(e,t,n){for(var r in t)i(e,r,t[r],n);return e}},e31d:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[e.mode?[n("h2",[e._v("Vote: "+e._s(e.question))]),e._v(" Time Left: "+e._s(e.reman)+" s"),n("hr"),n("table",[n("tr",[n("th",[e._v("Choices")]),n("th",[e._v("Votes")]),"gamemode"==e.mode?n("th",[e._v("Minimum Players")]):e._e()]),e._l(e.uichoices,(function(t,i){return n("tr",{key:i},[n("td",{staticStyle:{"text-align":"left"}},[n("vui-button",{class:{on:i==e.voted},attrs:{params:{action:"vote",vote:i}}},[e._v(e._s(t.name))])],1),n("td",[e._v(e._s(t.votes))]),t.extra?n("td",[e._v(e._s(t.extra))]):e._e()])}))],2),n("hr"),e.isstaff?[n("vui-button",{attrs:{params:{action:"cancel"}}},[e._v("Cancel")])]:e._e()]:[n("h2",[e._v("Start a vote:")]),n("hr"),n("ul",[n("li",[n("vui-button",{attrs:{disabled:!e.isstaff&&!e.allow_vote_restart,params:{action:"restart"}}},[e._v("Restart")])],1),n("li",[n("vui-button",{attrs:{disabled:!e.isstaff&&!e.allow_vote_restart,params:{action:"crew_transfer"}}},[e._v("Crew Transfer")]),(e.isstaff||e.allow_vote_restart)&&e.is_code_red?n("span",[e._v("(Disallowed, Code Red or above)")]):e._e(),e.isstaff?n("vui-button",{class:{on:e.allow_vote_restart},attrs:{params:{action:"toggle_restart"}}},[e._v("Toggle Restart / Crew Transfer voting")]):e._e()],1),n("li",[n("vui-button",{attrs:{disabled:!e.isstaff&&!e.allow_vote_mode,params:{action:"gamemode"}}},[e._v("GameMode")]),e.isstaff?n("vui-button",{class:{on:e.allow_vote_mode},attrs:{params:{action:"toggle_gamemode"}}},[e._v("Toggle GameMode voting")]):e._e()],1),n("li",[n("vui-button",{attrs:{disabled:!e.allow_extra_antags,params:{action:"add_antagonist"}}},[e._v("Add Antagonist Type")])],1),n("li",[n("vui-button",{attrs:{disabled:!e.isstaff,params:{action:"custom"}}},[e._v("Custom")])],1)])]],2)},r=[];n("a4d3"),n("e01a"),n("d28b"),n("e260"),n("d3b7"),n("3ca3"),n("ddb0");function s(e){return s="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s(e)}var a={data:function(){return this.$root.$data.state},computed:{uichoices:function(){return"object"===s(this.choices)?this.choices:{}},reman:function(){return Math.round((this.endtime-this.$root.$data.wtime)/10)}}},o=a,c=(n("8928"),n("2877")),l=Object(c["a"])(o,i,r,!1,null,"8bcc2668",null);t["default"]=l.exports},e3a9:function(e,t,n){"use strict";n("4310")},e439:function(e,t,n){var i=n("23e7"),r=n("d039"),s=n("fc6a"),a=n("06cf").f,o=n("83ab"),c=r((function(){a(1)})),l=!o||c;i({target:"Object",stat:!0,forced:l,sham:!o},{getOwnPropertyDescriptor:function(e,t){return a(s(e),t)}})},e43e:function(e,t,n){var i=n("23e7"),r=n("d039"),s=n("861d"),a=Object.isSealed,o=r((function(){a(1)}));i({target:"Object",stat:!0,forced:o},{isSealed:function(e){return!s(e)||!!a&&a(e)}})},e48d:function(e,t,n){"use strict";n("1650")},e538:function(e,t,n){var i=n("b622");t.f=i},e58c:function(e,t,n){"use strict";var i=n("fc6a"),r=n("a691"),s=n("50c4"),a=n("a640"),o=n("ae40"),c=Math.min,l=[].lastIndexOf,u=!!l&&1/[1].lastIndexOf(1,-0)<0,d=a("lastIndexOf"),h=o("indexOf",{ACCESSORS:!0,1:0}),f=u||!d||!h;e.exports=f?function(e){if(u)return l.apply(this,arguments)||0;var t=i(this),n=s(t.length),a=n-1;for(arguments.length>1&&(a=c(a,r(arguments[1]))),a<0&&(a=n+a);a>=0;a--)if(a in t&&t[a]===e)return a||0;return-1}:l},e667:function(e,t){e.exports=function(e){try{return{error:!1,value:e()}}catch(t){return{error:!0,value:t}}}},e6cf:function(e,t,n){"use strict";var i,r,s,a,o=n("23e7"),c=n("c430"),l=n("da84"),u=n("d066"),d=n("fea9"),h=n("6eeb"),f=n("e2cc"),p=n("d44e"),g=n("2626"),m=n("861d"),v=n("1c0b"),b=n("19aa"),y=n("8925"),w=n("2266"),_=n("1c7e"),x=n("4840"),k=n("2cf4").set,A=n("b575"),C=n("cdf9"),E=n("44de"),S=n("f069"),F=n("e667"),$=n("69f3"),T=n("94ca"),L=n("b622"),D=n("605d"),B=n("2d00"),R=L("species"),O="Promise",M=$.get,j=$.set,I=$.getterFor(O),P=d,N=l.TypeError,W=l.document,H=l.process,V=u("fetch"),U=S.f,z=U,G=!!(W&&W.createEvent&&l.dispatchEvent),q="function"==typeof PromiseRejectionEvent,K="unhandledrejection",Y="rejectionhandled",X=0,J=1,Q=2,Z=1,ee=2,te=T(O,(function(){var e=y(P)!==String(P);if(!e){if(66===B)return!0;if(!D&&!q)return!0}if(c&&!P.prototype["finally"])return!0;if(B>=51&&/native code/.test(P))return!1;var t=P.resolve(1),n=function(e){e((function(){}),(function(){}))},i=t.constructor={};return i[R]=n,!(t.then((function(){}))instanceof n)})),ne=te||!_((function(e){P.all(e)["catch"]((function(){}))})),ie=function(e){var t;return!(!m(e)||"function"!=typeof(t=e.then))&&t},re=function(e,t){if(!e.notified){e.notified=!0;var n=e.reactions;A((function(){var i=e.value,r=e.state==J,s=0;while(n.length>s){var a,o,c,l=n[s++],u=r?l.ok:l.fail,d=l.resolve,h=l.reject,f=l.domain;try{u?(r||(e.rejection===ee&&ce(e),e.rejection=Z),!0===u?a=i:(f&&f.enter(),a=u(i),f&&(f.exit(),c=!0)),a===l.promise?h(N("Promise-chain cycle")):(o=ie(a))?o.call(a,d,h):d(a)):h(i)}catch(p){f&&!c&&f.exit(),h(p)}}e.reactions=[],e.notified=!1,t&&!e.rejection&&ae(e)}))}},se=function(e,t,n){var i,r;G?(i=W.createEvent("Event"),i.promise=t,i.reason=n,i.initEvent(e,!1,!0),l.dispatchEvent(i)):i={promise:t,reason:n},!q&&(r=l["on"+e])?r(i):e===K&&E("Unhandled promise rejection",n)},ae=function(e){k.call(l,(function(){var t,n=e.facade,i=e.value,r=oe(e);if(r&&(t=F((function(){D?H.emit("unhandledRejection",i,n):se(K,n,i)})),e.rejection=D||oe(e)?ee:Z,t.error))throw t.value}))},oe=function(e){return e.rejection!==Z&&!e.parent},ce=function(e){k.call(l,(function(){var t=e.facade;D?H.emit("rejectionHandled",t):se(Y,t,e.value)}))},le=function(e,t,n){return function(i){e(t,i,n)}},ue=function(e,t,n){e.done||(e.done=!0,n&&(e=n),e.value=t,e.state=Q,re(e,!0))},de=function(e,t,n){if(!e.done){e.done=!0,n&&(e=n);try{if(e.facade===t)throw N("Promise can't be resolved itself");var i=ie(t);i?A((function(){var n={done:!1};try{i.call(t,le(de,n,e),le(ue,n,e))}catch(r){ue(n,r,e)}})):(e.value=t,e.state=J,re(e,!1))}catch(r){ue({done:!1},r,e)}}};te&&(P=function(e){b(this,P,O),v(e),i.call(this);var t=M(this);try{e(le(de,t),le(ue,t))}catch(n){ue(t,n)}},i=function(e){j(this,{type:O,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:X,value:void 0})},i.prototype=f(P.prototype,{then:function(e,t){var n=I(this),i=U(x(this,P));return i.ok="function"!=typeof e||e,i.fail="function"==typeof t&&t,i.domain=D?H.domain:void 0,n.parent=!0,n.reactions.push(i),n.state!=X&&re(n,!1),i.promise},catch:function(e){return this.then(void 0,e)}}),r=function(){var e=new i,t=M(e);this.promise=e,this.resolve=le(de,t),this.reject=le(ue,t)},S.f=U=function(e){return e===P||e===s?new r(e):z(e)},c||"function"!=typeof d||(a=d.prototype.then,h(d.prototype,"then",(function(e,t){var n=this;return new P((function(e,t){a.call(n,e,t)})).then(e,t)}),{unsafe:!0}),"function"==typeof V&&o({global:!0,enumerable:!0,forced:!0},{fetch:function(e){return C(P,V.apply(l,arguments))}}))),o({global:!0,wrap:!0,forced:te},{Promise:P}),p(P,O,!1,!0),g(O),s=u(O),o({target:O,stat:!0,forced:te},{reject:function(e){var t=U(this);return t.reject.call(void 0,e),t.promise}}),o({target:O,stat:!0,forced:c||te},{resolve:function(e){return C(c&&this===s?P:this,e)}}),o({target:O,stat:!0,forced:ne},{all:function(e){var t=this,n=U(t),i=n.resolve,r=n.reject,s=F((function(){var n=v(t.resolve),s=[],a=0,o=1;w(e,(function(e){var c=a++,l=!1;s.push(void 0),o++,n.call(t,e).then((function(e){l||(l=!0,s[c]=e,--o||i(s))}),r)})),--o||i(s)}));return s.error&&r(s.value),n.promise},race:function(e){var t=this,n=U(t),i=n.reject,r=F((function(){var r=v(t.resolve);w(e,(function(e){r.call(t,e).then(n.resolve,i)}))}));return r.error&&i(r.value),n.promise}})},e6e1:function(e,t,n){var i=n("23e7");i({target:"Number",stat:!0},{MIN_SAFE_INTEGER:-9007199254740991})},e71b:function(e,t,n){"use strict";var i=n("23e7"),r=n("83ab"),s=n("eb1d"),a=n("7b0b"),o=n("1c0b"),c=n("9bf2");r&&i({target:"Object",proto:!0,forced:s},{__defineSetter__:function(e,t){c.f(a(this),e,{set:o(t),enumerable:!0,configurable:!0})}})},e786:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("table",{staticClass:"table border"},[n("tr",{staticClass:"header"},e._l(e.categories,(function(t){return n("th",{key:t},[n("vui-button",{class:{selected:t===e.sel_category},attrs:{params:{selected:t}}},[e._v(e._s(t))])],1)})),0),e.sel_category?[e.supplies.length?[e._m(0),e._l(e.supplies,(function(t){return n("tr",{key:t.key,staticClass:"item border"},[n("td",[e._v(e._s(e.generateName(t.name,t.key)))]),n("td",[e._v("("+e._s(t.x)+", "+e._s(t.y)+")")]),n("td",[e._v(e._s(t.dir))]),n("td",[e._v(e._s(t.status))])])})),n("tr",{staticClass:"header border"},[n("td",{attrs:{colspan:"4"}},[e._v("User location: ("+e._s(e.user_loc.x)+", "+e._s(e.user_loc.y)+")")])])]:n("tr",[n("td",{attrs:{colspan:"4"}},[e._v("Unable to locate any "+e._s(e.sel_category.toLowerCase())+" in your vicinity.")])])]:e._e()],2)])},r=[function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("tr",{staticClass:"header border"},[n("th",{attrs:{scope:"col"}},[e._v("ID")]),n("th",{attrs:{scope:"col"}},[e._v("Location")]),n("th",{attrs:{scope:"col"}},[e._v("Direction")]),n("th",{attrs:{scope:"col"}},[e._v("Status")])])}],s={data:function(){return this.$root.$data.state},methods:{generateName:function(e,t){if(e&&!isNaN(t))return t+=1,e+" (#"+t+")"}}},a=s,o=(n("9acc"),n("2877")),c=Object(o["a"])(a,i,r,!1,null,"1021c617",null);t["default"]=c.exports},e893:function(e,t,n){var i=n("5135"),r=n("56ef"),s=n("06cf"),a=n("9bf2");e.exports=function(e,t){for(var n=r(t),o=a.f,c=s.f,l=0;l1?arguments[1]:void 0)}))},e958:function(e,t,n){"use strict";n("814e")},e95a:function(e,t,n){var i=n("b622"),r=n("3f8c"),s=i("iterator"),a=Array.prototype;e.exports=function(e){return void 0!==e&&(r.Array===e||a[s]===e)}},e9a7:function(e,t,n){var i=n("76dd"),r=n("8103");function s(e){return r(i(e).toLowerCase())}e.exports=s},e9c4:function(e,t,n){var i=n("23e7"),r=n("d066"),s=n("d039"),a=r("JSON","stringify"),o=/[\uD800-\uDFFF]/g,c=/^[\uD800-\uDBFF]$/,l=/^[\uDC00-\uDFFF]$/,u=function(e,t,n){var i=n.charAt(t-1),r=n.charAt(t+1);return c.test(e)&&!l.test(r)||l.test(e)&&!c.test(i)?"\\u"+e.charCodeAt(0).toString(16):e},d=s((function(){return'"\\udf06\\ud834"'!==a("\udf06\ud834")||'"\\udead"'!==a("\udead")}));a&&i({target:"JSON",stat:!0,forced:d},{stringify:function(e,t,n){var i=a.apply(null,arguments);return"string"==typeof i?i.replace(o,u):i}})},ea72:function(e,t,n){var i=n("7559"),r=n("7e8e"),s=n("76dd"),a=n("f4d9");function o(e,t,n){return e=s(e),t=n?void 0:t,void 0===t?r(e)?a(e):i(e):e.match(t)||[]}e.exports=o},eb1d:function(e,t,n){"use strict";var i=n("c430"),r=n("da84"),s=n("d039");e.exports=i||!s((function(){var e=Math.random();__defineSetter__.call(null,e,(function(){})),delete r[e]}))},ebb5:function(e,t,n){"use strict";var i,r=n("a981"),s=n("83ab"),a=n("da84"),o=n("861d"),c=n("5135"),l=n("f5df"),u=n("9112"),d=n("6eeb"),h=n("9bf2").f,f=n("e163"),p=n("d2bb"),g=n("b622"),m=n("90e3"),v=a.Int8Array,b=v&&v.prototype,y=a.Uint8ClampedArray,w=y&&y.prototype,_=v&&f(v),x=b&&f(b),k=Object.prototype,A=k.isPrototypeOf,C=g("toStringTag"),E=m("TYPED_ARRAY_TAG"),S=r&&!!p&&"Opera"!==l(a.opera),F=!1,$={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},T=function(e){var t=l(e);return"DataView"===t||c($,t)},L=function(e){return o(e)&&c($,l(e))},D=function(e){if(L(e))return e;throw TypeError("Target is not a typed array")},B=function(e){if(p){if(A.call(_,e))return e}else for(var t in $)if(c($,i)){var n=a[t];if(n&&(e===n||A.call(n,e)))return e}throw TypeError("Target is not a typed array constructor")},R=function(e,t,n){if(s){if(n)for(var i in $){var r=a[i];r&&c(r.prototype,e)&&delete r.prototype[e]}x[e]&&!n||d(x,e,n?t:S&&b[e]||t)}},O=function(e,t,n){var i,r;if(s){if(p){if(n)for(i in $)r=a[i],r&&c(r,e)&&delete r[e];if(_[e]&&!n)return;try{return d(_,e,n?t:S&&v[e]||t)}catch(o){}}for(i in $)r=a[i],!r||r[e]&&!n||d(r,e,t)}};for(i in $)a[i]||(S=!1);if((!S||"function"!=typeof _||_===Function.prototype)&&(_=function(){throw TypeError("Incorrect invocation")},S))for(i in $)a[i]&&p(a[i],_);if((!S||!x||x===k)&&(x=_.prototype,S))for(i in $)a[i]&&p(a[i].prototype,x);if(S&&f(w)!==x&&p(w,x),s&&!c(x,C))for(i in F=!0,h(x,C,{get:function(){return o(this)?this[E]:void 0}}),$)a[i]&&u(a[i],E,i);e.exports={NATIVE_ARRAY_BUFFER_VIEWS:S,TYPED_ARRAY_TAG:F&&E,aTypedArray:D,aTypedArrayConstructor:B,exportTypedArrayMethod:R,exportTypedArrayStaticMethod:O,isView:T,isTypedArray:L,TypedArray:_,TypedArrayPrototype:x}},ebf5:function(e,t,n){"use strict";n("afb9")},ec72:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("vui-input-search",{attrs:{input:e.s.reactions,keys:["result.name","reagents.name","result.description"],autofocus:"",threshold:e.threshold,"include-score":""},model:{value:e.output,callback:function(t){e.output=t},expression:"output"}}),n("vui-button",{on:{click:function(t){e.desc=!e.desc}}},[e._v("Toggle Descriptions")]),e._l(e.output,(function(t){return n("div",{key:t.item.id,staticClass:"recipe-block",style:{opacity:1-t.score*e.score_multiplier}},[n("h2",{staticClass:"highlight"},[e._v(e._s(t.item.result.name)+" ("+e._s(e.u(t.item.result.amount))+")")]),n("p",{directives:[{name:"show",rawName:"v-show",value:e.desc,expression:"desc"}],staticClass:"description"},[e._v(e._s(t.item.result.description))]),n("h3",{staticClass:"highlight"},[e._v("Required Reagents")]),e._l(t.item.reagents,(function(i){return n("span",{key:"re"+i.name+t.item.result.name},[e._v(e._s(i.name)+": "+e._s(e.u(i.amount))),n("br")])})),t.item.catalysts.length?[n("h3",{staticClass:"highlight"},[e._v("Catalysts")]),e._l(t.item.catalysts,(function(i){return n("span",{key:"ca"+i.name+t.item.result.name},[e._v(e._s(i.name)+": "+e._s(e.u(i.amount))),n("br")])}))]:e._e(),t.item.inhibitors.length?[n("h3",{staticClass:"highlight"},[e._v("Inhibitors")]),e._l(t.item.inhibitors,(function(i){return n("span",{key:"in"+i.name+t.item.result.name},[e._v(e._s(i.name)+": "+e._s(e.u(i.amount))),n("br")])}))]:e._e(),t.item.temp_min&&t.item.temp_min.length?[n("h3",{staticClass:"highlight"},[e._v("Minimum Required Temperatures")]),e._l(t.item.temp_min,(function(i){return n("span",{key:"tm"+i.name+t.item.result.name},[e._v(e._s(i.name)+": "+e._s(i.temp)+"°K"),n("br")])}))]:e._e(),t.item.temp_max&&t.item.temp_max.length?[n("h3",{staticClass:"highlight"},[e._v("Maximum Required Temperatures")]),e._l(t.item.temp_max,(function(i){return n("span",{key:"tx"+i.name+t.item.result.name},[e._v(e._s(i.name)+": "+e._s(i.temp)+"°K"),n("br")])}))]:e._e()],2)}))],2)},r=[],s={data:function(){return{s:this.$root.$data.state,output:[],threshold:.3,desc:!0}},methods:{u:function(e){return"".concat(e,1==e?" unit":" units")}},computed:{score_multiplier:function(){return 1/this.threshold}}},a=s,o=(n("f889"),n("2877")),c=Object(o["a"])(a,i,r,!1,null,"710a36a7",null);t["default"]=c.exports},ec97:function(e,t,n){"use strict";var i=n("ebb5"),r=n("8aa7"),s=i.aTypedArrayConstructor,a=i.exportTypedArrayStaticMethod;a("of",(function(){var e=0,t=arguments.length,n=new(s(this))(t);while(t>e)n[e]=arguments[e++];return n}),r)},eee7:function(e,t,n){"use strict";var i=n("23e7"),r=n("58a8").start,s=n("c8d2"),a=s("trimStart"),o=a?function(){return r(this)}:"".trimStart;i({target:"String",proto:!0,forced:a},{trimStart:o,trimLeft:o})},ef41:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("vui-button",{on:{click:function(t){e.fliped=!e.fliped}}},[e._v("Flip")]),n("div",{staticClass:"text-center"},e._l(e.boardTiles,(function(t,i){return n("div",{key:i,staticClass:"tileRow"},e._l(t,(function(t,r){return n("div",{key:i+""+r,staticClass:"tile",class:t.tile+(e.selected==t.pos?" sel":""),on:{click:function(n){return n.stopPropagation(),e.handleTileClick(t.pos)}}},[e.getPiece(t.pos)?n("div",{staticClass:"piece fa",class:e.getPieceClass(t.pos)+(e.selected==t.pos?" sel":""),on:{click:function(n){return n.stopPropagation(),e.handlePieceClick(t.pos)}}}):e._e()])})),0)})),0),null!=e.selected?[e.isPiece(e.selected)?[n("vui-button",{on:{click:e.removePiece}},[e._v("Remove")])]:[n("div",{staticClass:"mt-1"},[e._v(" Red: "),e._l(e.types,(function(t,i){return n("vui-button",{key:"r"+i,attrs:{icon:t.i},on:{click:function(n){return e.spawn(t.k,"red")}}},[e._v(e._s(t.n))])}))],2),n("div",[e._v(" Black: "),e._l(e.types,(function(t,i){return n("vui-button",{key:"b"+i,attrs:{icon:t.i},on:{click:function(n){return e.spawn(t.k,"black")}}},[e._v(e._s(t.n))])}))],2)]]:e.s.pieces.length?e._e():[n("vui-button",{on:{click:e.presetCheckers}},[e._v("Initialize checker board")]),n("vui-button",{on:{click:e.presetChess}},[e._v("Initialize chess board")])]],2)},r=[],s=(n("a4d3"),n("4de4"),n("7db0"),n("0481"),n("4160"),n("a630"),n("c975"),n("e260"),n("d81d"),n("fb6a"),n("4069"),n("e439"),n("dbb4"),n("b64b"),n("d3b7"),n("3ca3"),n("159b"),n("ddb0"),n("025e"));function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function o(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:null;return t||(t=this.getPiece(e)),t&&!t.ghost},getPieceClass:function(e){var t=this.getPiece(e);return"ic-"+h[t.type]+" "+t.faction+(t.ghost?" ghost":"")},removePiece:function(){var e=this.getPiece(this.selected);s["a"].sendToTopic({remove:{index:e.index}}),this.selected=null},spawn:function(e,t){var n=this.getPiece(this.selected);n&&!n.ghost||(this.qspawn(e,t,this.selected),this.selected=null)},qspawn:function(e,t,n){s["a"].sendToTopic({add:{piece:{type:e,faction:t,pos:n}}})},handlePieceClick:function(e){if(!this.isPiece(e))return this.handleTileClick(e);this.selected==e?this.selected=null:this.selected=e},handleTileClick:function(e){if(this.selected==e)this.selected=null;else if(null!=this.selected){var t=this.getPiece(this.selected);this.isPiece(null,t)&&!this.isPiece(e)&&s["a"].sendToTopic({change:{piece:o(o({},d(t)),{},{pos:e}),index:t.index}}),this.selected=null}else this.selected=e},presetChess:function(){var e=this;m.forEach((function(t,n){return t?e.qspawn(t.t,t.f,n):""}))},presetCheckers:function(){var e=this;g.forEach((function(t,n){return t?e.qspawn(t.t,t.f,n):""}))}}},b=v,y=(n("fa99"),n("2877")),w=Object(y["a"])(b,i,r,!1,null,"58cc165e",null);t["default"]=w.exports},efe9:function(e,t,n){var i=n("746f");i("isConcatSpreadable")},efec:function(e,t,n){var i=n("9112"),r=n("51eb"),s=n("b622"),a=s("toPrimitive"),o=Date.prototype;a in o||i(o,a,r)},f00c:function(e,t,n){var i=n("23e7"),r=n("e285");i({target:"Number",stat:!0},{isFinite:r})},f046:function(e,t,n){"use strict";n("d7b5")},f069:function(e,t,n){"use strict";var i=n("1c0b"),r=function(e){var t,n;this.promise=new e((function(e,i){if(void 0!==t||void 0!==n)throw TypeError("Bad Promise constructor");t=e,n=i})),this.resolve=i(t),this.reject=i(n)};e.exports.f=function(e){return new r(e)}},f095:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("div",[n("h3",[e._v("Status:")]),e.active?n("vui-button",{attrs:{params:{state:1}}},[e._v("Active")]):n("vui-button",{attrs:{params:{state:1}}},[e._v("Inactive")])],1),n("div",[n("h3",[e._v("Beam Visibility:")]),e.visible?n("vui-button",{attrs:{params:{visible:1}}},[e._v("Visible")]):n("vui-button",{attrs:{params:{visible:1}}},[e._v("Invisible")])],1)])},r=[],s={data:function(){return this.$root.$data.state}},a=s,o=n("2877"),c=Object(o["a"])(a,i,r,!1,null,null,null);t["default"]=c.exports},f0e0:function(e,t,n){"use strict";n("a4d3"),n("e01a"),n("d28b"),n("c975"),n("e260"),n("a15b"),n("cca6"),n("d3b7"),n("ac1f"),n("3ca3"),n("841c"),n("ddb0");var i=n("025e"),r=(n("d81d"),n("13d5"),function(e,t){return Array.prototype.map.call(e,(function(e,n){return e+t[n]}))}),s={add:function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&void 0!==arguments[0]?arguments[0]:[0,0],t=s.add(e,o.screenOffset);u(o.windowKey,{pos:t[0]+","+t[1]})}function g(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[300,300];u(o.windowKey,{size:e[0]+"x"+e[1]})}var m=function(){return s.scale(o.screenOffset,-1)},v=function(){return[window.screen.availWidth,window.screen.availHeight]};function b(){l(o.windowKey,"pos",(function(e){o.screenOffset=[e.x-window.screenLeft,e.y-window.screenTop]}))}function y(e){var t,n;o.dragging=!0,o.dragPointOffset=[window.screenLeft-e.screenX,window.screenTop-e.screenY],null===(t=e.target)||void 0===t||t.setCapture(),null===(n=e.target)||void 0===n||n.focus(),_(e),e.target.addEventListener("mousemove",_)}function w(e){e.target.removeEventListener("mousemove",_),e.target.releaseCapture(),document.getElementById("content").focus(),o.dragging=!1}function _(e){o.dragging&&(e.preventDefault(),p(s.add([e.screenX,e.screenY],o.dragPointOffset)))}function x(e,t,n){o.resizeMatrix=[e,t],o.resizing=!0,o.dragPointOffset=[window.screenLeft-n.screenX,window.screenTop-n.screenY],o.initialSize=[window.innerWidth,window.innerHeight],document.addEventListener("mousemove",A),document.addEventListener("mouseup",k),A(n)}function k(e){A(e),document.removeEventListener("mousemove",A),document.removeEventListener("mouseup",k),document.getElementById("content").focus(),o.resizing=!1}function A(e){if(o.resizing){e.preventDefault();var t=s.multiply(o.resizeMatrix,s.add([e.screenX,e.screenY],s.scale([window.screenLeft,window.screenTop],-1),o.dragPointOffset,[1,1]));o.size=s.add(o.initialSize,t),o.size[0]=Math.max(o.size[0],100),o.size[1]=Math.max(o.size[1],50),g(o.size)}}function C(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;u(o.windowKey,{"is-visible":e})}t["a"]={isBYOND:c,winget:l,winset:u,setWindowKey:d,getWindowPosition:h,getWindowSize:f,setWindowPosition:p,setWindowSize:g,getScreenPosition:m,getScreenSize:v,setupDrag:b,dragStartHandler:y,dragEndHandler:w,dragMoveHandler:_,resizeStartHandler:x,resizeEndHandler:k,resizeMoveHandler:A,setVisibility:C}},f183:function(e,t,n){var i=n("d012"),r=n("861d"),s=n("5135"),a=n("9bf2").f,o=n("90e3"),c=n("bb2f"),l=o("meta"),u=0,d=Object.isExtensible||function(){return!0},h=function(e){a(e,l,{value:{objectID:"O"+ ++u,weakData:{}}})},f=function(e,t){if(!r(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!s(e,l)){if(!d(e))return"F";if(!t)return"E";h(e)}return e[l].objectID},p=function(e,t){if(!s(e,l)){if(!d(e))return!0;if(!t)return!1;h(e)}return e[l].weakData},g=function(e){return c&&m.REQUIRED&&d(e)&&!s(e,l)&&h(e),e},m=e.exports={REQUIRED:!1,fastKey:f,getWeakData:p,onFreeze:g};i[l]=!0},f264:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[e.manifestLen(e.fixedmanifest)>0?n("div",e._l(e.fixedmanifest,(function(t,i){return n("table",{key:i,class:"border-dept-"+i.toLowerCase()},[n("tr",{class:"bg-dept-"+i.toLowerCase()},[n("th",{staticClass:"fw-bold",attrs:{colspan:"3"}},[e._v(e._s(i))])]),e._l(t,(function(t){return n("tr",{key:t.name,class:{"fw-bold":t.head}},[n("td",[e._v(e._s(t.name))]),n("td",[e._v(e._s(t.rank))]),n("td",[e._v(e._s(t.active))])])}))],2)})),0):n("div",{staticClass:"fst-italic"},[e._v(" There is no crew. ")]),e.allow_printing?n("div",{staticClass:"text-center mt-2"},[n("vui-button",{attrs:{params:{action:"print"},icon:"print"}},[e._v("Print current manifest")])],1):e._e()])},r=[];n("a4d3"),n("e01a"),n("d28b"),n("4de4"),n("4160"),n("a630"),n("e260"),n("fb6a"),n("b0c0"),n("4fad"),n("c1f9"),n("d3b7"),n("07ac"),n("25f0"),n("3ca3"),n("159b"),n("ddb0");function s(e,t){return u(e)||l(e,t)||o(e,t)||a()}function a(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function o(e,t){if(e){if("string"===typeof e)return c(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?c(e,t):void 0}}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,i=new Array(t);n0})))}}},h=d,f=(n("c13e"),n("2877")),p=Object(f["a"])(h,i,r,!1,null,"c49443fe",null);t["default"]=p.exports},f309:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("div",{staticClass:"table border"},[n("div",{staticClass:"header border"},[n("div",{staticClass:"header-item"},[e._v("Name")]),n("div",{staticClass:"header-item"},[n("vui-tooltip",{attrs:{label:"Pulse/Cell"}},[e._v("Pulse rate or Cell Charge (IPCs)")])],1),n("div",{staticClass:"header-item"},[n("vui-tooltip",{attrs:{label:"BP"}},[e._v("Blood pressure")])],1),n("div",{staticClass:"header-item"},[n("vui-tooltip",{attrs:{label:"Oxy"}},[e._v("Oxygenation")])],1),n("div",{staticClass:"header-item"},[n("vui-tooltip",{attrs:{label:"Temp"}},[e._v("Temperature")])],1),n("div",{staticClass:"header-item"},[e._v("Location")]),e.isAI?[n("div",{staticClass:"header-item"})]:e._e()],2),e._l(e.crewmembers,(function(t){return n("div",{key:t.ref,staticClass:"sensor"},[n("div",{staticClass:"item"},[e._v(e._s(t.name)+" ("+e._s(t.ass)+")")]),-1==t.cellCharge?n("div",{staticClass:"item",class:e.getPulseClass(t.tpulse)},[e._v(e._s(t.pulse))]):n("div",{staticClass:"item",class:e.getChargeClass(t.cellCharge)},[e._v(e._s(t.cellCharge)+"%")]),t.stype>1?n("div",{staticClass:"item",class:e.getPressureClass(t.tpressure)},[e._v(e._s(t.pressure))]):n("div",{staticClass:"item"},[e._v("N/A")]),n("div",{staticClass:"item",class:e.getOxyClass(t.oxyg)},[e._v(e._s(e.toOxyLabel(t.oxyg)))]),n("div",{staticClass:"item"},[t.stype>1?n("span",[e._v(e._s(e.roundTemp(t.bodytemp)))]):e._e()]),t.stype>2?n("div",{staticClass:"item"},[e._v(e._s(t.area)+" ("+e._s(t.x)+", "+e._s(t.y)+", "+e._s(t.z)+")")]):n("div",{staticClass:"item"},[e._v("Not Available")]),e.isAI?[n("div",{staticClass:"item"},[n("vui-button",{attrs:{params:{track:t.ref},disabled:t.stype<3}},[e._v("Track")])],1)]:e._e()],2)}))],2)])},r=[],s={data:function(){return this.$root.$data.state},methods:{roundTemp:function(e){return Math.round(10*e)/10},toOxyLabel:function(e){switch(e){case 5:return"increased";case 4:return"normal";case 3:return"low";case 2:return"very low";case 1:return"extremely low";default:return"N/A"}},getOxyClass:function(e){switch(e){case 5:return"highlight";case 4:return"good";case 3:return"average";case 2:return"bad";case 1:return"bad";default:return"neutral"}},getPulseClass:function(e){switch(e){case 0:return"bad";case 1:return"average";case 2:return"good";case 3:return"highlight";case 4:return"average";case 5:return"bad";default:return"neutral"}},getPressureClass:function(e){switch(e){case 1:return"bad";case 2:return"good";case 3:return"average";case 4:return"bad";default:return"neutral"}},getChargeClass:function(e){return e>10?"highlight":"bad"}}},a=s,o=(n("e3a9"),n("2877")),c=Object(o["a"])(a,i,r,!1,null,"731c48b4",null);t["default"]=c.exports},f3ce:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"uiTitleWrapper",attrs:{draggable:""},on:{mousedown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"left",37,t.key,["Left","ArrowLeft"])||"button"in t&&0!==t.button?null:e.startDragging(t)},mouseup:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"left",37,t.key,["Left","ArrowLeft"])||"button"in t&&0!==t.button?null:e.stopDragging(t)}}},[n("div",{staticClass:"titleBar"},[n("div",{staticClass:"uiStatusIcon uiIcon24",class:e.statusClass,attrs:{unselectable:"on"}}),n("i",{staticClass:"fas ic-bug uiIcon24 uiDebugIcon",class:e.debugClass,attrs:{unselectable:"on"},on:{click:function(t){return e.activateDebug()},mousedown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"left",37,t.key,["Left","ArrowLeft"])||"button"in t&&0!==t.button?null:e.prevent(t)}}}),n("div",{staticClass:"uiTitleText",attrs:{unselectable:"on"}},[e._v(e._s(e.title))]),n("div",{staticClass:"uiTitleClose",attrs:{unselectable:"on"},on:{click:function(t){return e.closeUI(t)},mousedown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"left",37,t.key,["Left","ArrowLeft"])||"button"in t&&0!==t.button?null:e.prevent(t)}}},[e._v("×")])]),e._t("default")],2)},r=[],s=n("025e"),a=n("f0e0"),o={data:function(){return this.$root.$data},computed:{statusClass:function(){return 2==this.status?"good":1==this.status?"average":"bad"},debugClass:function(){return 1==this.debug_view?"good":1==this.debug?"bad":"hidden"}},methods:{closeUI:function(e){e.stopPropagation(),s["a"].sendToTopicRaw({src:this.uiref,vueuiclose:1}),a["a"].setVisibility(0)},startDragging:function(e){a["a"].dragStartHandler(e)},stopDragging:function(e){a["a"].dragEndHandler(e)},prevent:function(e){e.stopPropagation()},activateDebug:function(){this.debug_view=!this.debug_view,this.debug_view?(document.getElementById("content").classList.add("uiDebug"),document.getElementById("debug").classList.add("uiDebug")):(document.getElementById("content").classList.remove("uiDebug"),document.getElementById("debug").classList.remove("uiDebug"))}}},c=o,l=n("2877"),u=Object(l["a"])(c,i,r,!1,null,null,null);t["default"]=u.exports},f415:function(e,t,n){},f4b3:function(e,t,n){"use strict";var i=n("23e7"),r=n("d039"),s=n("7b0b"),a=n("c04e"),o=r((function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})}));i({target:"Date",proto:!0,forced:o},{toJSON:function(e){var t=s(this),n=a(t);return"number"!=typeof n||isFinite(n)?t.toISOString():null}})},f4d9:function(e,t){var n="\\ud800-\\udfff",i="\\u0300-\\u036f",r="\\ufe20-\\ufe2f",s="\\u20d0-\\u20ff",a=i+r+s,o="\\u2700-\\u27bf",c="a-z\\xdf-\\xf6\\xf8-\\xff",l="\\xac\\xb1\\xd7\\xf7",u="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",d="\\u2000-\\u206f",h=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",f="A-Z\\xc0-\\xd6\\xd8-\\xde",p="\\ufe0e\\ufe0f",g=l+u+d+h,m="['’]",v="["+g+"]",b="["+a+"]",y="\\d+",w="["+o+"]",_="["+c+"]",x="[^"+n+g+y+o+c+f+"]",k="\\ud83c[\\udffb-\\udfff]",A="(?:"+b+"|"+k+")",C="[^"+n+"]",E="(?:\\ud83c[\\udde6-\\uddff]){2}",S="[\\ud800-\\udbff][\\udc00-\\udfff]",F="["+f+"]",$="\\u200d",T="(?:"+_+"|"+x+")",L="(?:"+F+"|"+x+")",D="(?:"+m+"(?:d|ll|m|re|s|t|ve))?",B="(?:"+m+"(?:D|LL|M|RE|S|T|VE))?",R=A+"?",O="["+p+"]?",M="(?:"+$+"(?:"+[C,E,S].join("|")+")"+O+R+")*",j="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",I="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",P=O+R+M,N="(?:"+[w,E,S].join("|")+")"+P,W=RegExp([F+"?"+_+"+"+D+"(?="+[v,F,"$"].join("|")+")",L+"+"+B+"(?="+[v,F+T,"$"].join("|")+")",F+"?"+T+"+"+D,F+"+"+B,I,j,y,N].join("|"),"g");function H(e){return e.match(W)||[]}e.exports=H},f4dd:function(e,t,n){"use strict";var i=n("23e7"),r=n("d58f").right,s=n("a640"),a=n("ae40"),o=n("2d00"),c=n("605d"),l=s("reduceRight"),u=a("reduce",{1:0}),d=!c&&o>79&&o<83;i({target:"Array",proto:!0,forced:!l||!u||d},{reduceRight:function(e){return r(this,e,arguments.length,arguments.length>1?arguments[1]:void 0)}})},f5b2:function(e,t,n){"use strict";var i=n("23e7"),r=n("6547").codeAt;i({target:"String",proto:!0},{codePointAt:function(e){return r(this,e)}})},f5df:function(e,t,n){var i=n("00ee"),r=n("c6b6"),s=n("b622"),a=s("toStringTag"),o="Arguments"==r(function(){return arguments}()),c=function(e,t){try{return e[t]}catch(n){}};e.exports=i?r:function(e){var t,n,i;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=c(t=Object(e),a))?n:o?r(t):"Object"==(i=r(t))&&"function"==typeof t.callee?"Arguments":i}},f664:function(e,t,n){var i=n("23e7"),r=n("be8e");i({target:"Math",stat:!0},{fround:r})},f685:function(e,t,n){},f693:function(e,t,n){},f6d6:function(e,t,n){var i=n("23e7"),r=n("23cb"),s=String.fromCharCode,a=String.fromCodePoint,o=!!a&&1!=a.length;i({target:"String",stat:!0,forced:o},{fromCodePoint:function(e){var t,n=[],i=arguments.length,a=0;while(i>a){if(t=+arguments[a++],r(t,1114111)!==t)throw RangeError(t+" is not a valid code point");n.push(t<65536?s(t):s(55296+((t-=65536)>>10),t%1024+56320))}return n.join("")}})},f748:function(e,t){e.exports=Math.sign||function(e){return 0==(e=+e)||e!=e?e:e<0?-1:1}},f772:function(e,t,n){var i=n("5692"),r=n("90e3"),s=i("keys");e.exports=function(e){return s[e]||(s[e]=r(e))}},f785:function(e,t,n){var i=n("2626");i("Array")},f7e3:function(e,t,n){},f889:function(e,t,n){"use strict";n("63bf")},f8c9:function(e,t,n){var i=n("23e7"),r=n("da84"),s=n("d44e");i({global:!0},{Reflect:{}}),s(r.Reflect,"Reflect",!0)},f8cd:function(e,t,n){var i=n("a691");e.exports=function(e){var t=i(e);if(t<0)throw RangeError("The argument can't be less than 0");return t}},f9a1:function(e,t,n){"use strict";n("b053")},fa99:function(e,t,n){"use strict";n("8535")},faf6:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"item"},[e.label?n("div",{staticClass:"itemLabel",style:{width:100*(1-e.balance)+"%"}},[e._v(e._s(e.label))]):e._e(),n("div",{staticClass:"itemContent",style:{width:100*(e.label?e.balance:1)+"%"}},[e._t("default")],2)])},r=[],s=(n("a9e3"),{name:"vui-item",props:{label:{type:String,default:""},balance:{type:Number,default:.6}}}),a=s,o=(n("aa68"),n("2877")),c=Object(o["a"])(a,i,r,!1,null,"48bbd7cd",null);t["default"]=c.exports},fafb:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[e.state.failTime?n("div",{staticClass:"notice",staticStyle:{color:"white"}},[n("h3",{staticClass:"fw-bold"},[e._v("SYSTEM FAILURE")]),n("span",{staticClass:"fst-italic"},[e._v("I/O regulator malfuction detected! Waiting for system reboot...")]),n("br"),e._v(" Automatic reboot in "+e._s(e.state.failTime)+" seconds... "),n("vui-button",{attrs:{icon:"sync",params:{reboot:1}}},[e._v("Reboot Now")])],1):n("vui-group",[n("div",{staticClass:"notice"},[e.state.siliconUser?n("div",[n("vui-group-item",{attrs:{label:"Interface Lock:"}},[e.state.locked?n("vui-button",{class:{selected:e.state.locked},attrs:{icon:"lock",params:{toggleaccess:1}}},[e._v("Engaged")]):n("vui-button",{class:{selected:e.state.malfstatus<2&&!e.state.locked},attrs:{icon:"lock-open",params:{toggleaccess:1},disabled:e.state.malfstatus>=2}},[e._v("Disengaged")])],1)],1):n("span",[e._v("Swipe an ID card to "+e._s(e.state.locked?"un":null)+"lock this interface.")])]),n("div",{staticStyle:{"min-width":"480px"}},[n("h3",[e._v("Power Status")]),n("vui-group-item",{attrs:{label:"Main Breaker:"}},[e.state.locked&&!e.state.siliconUser?n("div",[n("span",{class:{good:e.state.isOperating,bad:!e.state.isOperating}},[e._v(e._s(e.state.isOperating?"On":"Off"))])]):n("vui-button",{class:{selected:e.state.isOperating},attrs:{icon:e.state.isOperating?"power-off":"times",params:{breaker:1}}},[e._v(e._s(e.state.isOperating?"On":"Off"))])],1),n("vui-group-item",{attrs:{label:"External Power:"}},[2==e.state.externalPower?n("span",{staticClass:"good"},[e._v("Good")]):1==e.state.externalPower?n("span",{staticClass:"average"},[e._v("Low")]):n("span",{staticClass:"bad"},[e._v("None")])]),n("vui-group-item",{attrs:{label:"Power Cell"}},[null==e.state.powerCellStatus?n("span",{staticClass:"bad"},[e._v("Power cell removed.")]):n("span",[n("vui-progress",{class:e.cellClass,attrs:{value:e.state.powerCellStatus,min:0,max:100}}),n("span",{staticStyle:{width:"60px"}},[e._v(e._s(Math.round(10*e.state.powerCellStatus)/10)+"%")])],1)]),n("vui-group-item",{attrs:{label:"Power Cell charge status:"}},[n("div",{staticClass:"statusValue"},[1==e.state.charge_mode?n("span",[e._v("APC's power cell will run out of charge in "+e._s(e.timeRemaining)+".")]):2==e.state.charge_mode?n("span",[e._v("APC is not charging or discharging.")]):n("span",[e._v("APC will be fully charged in "+e._s(e.timeRemaining)+".")])])]),null!=e.state.powerCellStatus?n("vui-group-item",{attrs:{label:"Charge Mode:"}},[e.state.locked&&!e.state.siliconUser?n("span",{class:{good:e.state.chargeMode,bad:!e.state.chargeMode}},[e._v(e._s(e.state.chargeMode?"Auto":"Off"))]):n("vui-button",{class:{selected:e.state.chargeMode},attrs:{icon:e.state.chargeMode?"sync":"times",params:{cmode:1}}},[e._v(e._s(e.state.chargeMode?"Auto":"Off"))]),e._v(" ["),n("span",{class:e.chargeClass},[e._v(e._s(e.chargeStatus))]),e._v("] ")],1):e._e(),n("vui-group-item",{attrs:{label:"Night Lighting:"}},[n("vui-button",{class:{selected:e.state.lightingMode},attrs:{icon:e.state.lightingMode?"moon":"sun",params:{lmode:e.state.lightingMode?"off":"on"}}},[e._v(e._s(e.state.lightingMode?"On":"Off"))])],1),n("vui-group-item",{attrs:{label:"Emergency Lighting:"}},[n("div",{staticStyle:{width:"105px"}},[e.state.locked&&!e.state.siliconUser?n("span",[e._v(e._s(e.state.emergencyMode?"On":"Off"))]):n("vui-button",{class:{selected:e.state.emergencyMode},attrs:{icon:"lightbulb",params:{emergency_lights:1}}},[e._v(e._s(e.state.emergencyMode?"On":"Off"))])],1)]),n("h3",[e._v("Power Channels")]),e._l(e.state.powerChannels,(function(t,i){return n("vui-group-row",{key:i},[n("div",{staticClass:"itemLabel",staticStyle:{display:"table-cell","vertical-align":"top","padding-right":"8px",width:"4%"}},[e._v(" "+e._s(i)+" "),n("span",{staticStyle:{float:"right"}},[e._v(" ["),n("span",{class:e.channelStatClass(t.status)},[e._v(e._s(e.channelStatus(t.status)))]),e._v("] ["),n("span",{staticClass:"good"},[e._v(e._s(e.channelPower(t.status)))]),e._v("] ")])]),n("div",{staticStyle:{display:"table-cell",width:"10%"}},[n("span",{staticStyle:{width:"70px","text-align":"right",display:"inline-block"}},[e._v(" "+e._s(t.powerLoad)+" W ")]),n("span",{staticStyle:{width:"105px"}},[e._v(" "),e.state.locked?n("span",[1==t.status||3==t.status?n("span",[e._v(" "+e._s(e.channelPower(t.status))+" ")]):e._e()]):e._e()]),e._v(" "),!e.state.locked||e.state.siliconUser?n("span",[n("vui-button",{class:{selected:1==t.status||3==t.status},attrs:{icon:"sync",params:{set:3,chan:i}}},[e._v("Auto")]),n("vui-button",{class:{selected:2==t.status},attrs:{icon:"power-off",params:{set:2,chan:i}}},[e._v("On")]),n("vui-button",{class:{selected:0==t.status},attrs:{icon:"times",params:{set:1,chan:i}}},[e._v("Off")])],1):e._e()])])})),n("vui-group-item",{attrs:{label:"Total Load:"}},[e._v(" "+e._s(e.state.totalLoad)+"W"+e._s(e.state.totalCharging?" (+ "+e.state.totalCharging+"W Charging)":null)+" ")]),n("vui-group-item",{attrs:{balance:.69}}),n("vui-group-item",{attrs:{label:"Cover Lock"}},[e.state.locked&&!e.state.siliconUser?n("div",[e.state.coverLocked?n("span",{class:{good:e.state.coverLocked,bad:!e.state.coverLocked}},[e._v(e._s(e.state.coverLocked?"E":"Dise")+"ngaged")]):e._e()]):n("div",[n("vui-button",{class:{selected:e.state.coverLocked},attrs:{icon:e.state.coverLocked?"lock":"lock-open",params:{lock:1}}},[e._v(e._s(e.state.coverLocked?"E":"Dise")+"ngaged")])],1)]),e.state.siliconUser?n("div",[n("h3",[e._v("System Overrides")]),n("div",[n("vui-button",{attrs:{icon:"lightbulb",params:{overload:1}}},[e._v("Overload Lighting Circuit")]),1==e.state.malfStatus?n("vui-button",{attrs:{icon:"script",params:{malfhack:1}}},[e._v("Override Programming")]):e.state.malfStatus>1?n("span",{staticClass:"notice"},[e._v("APC Hacked")]):e._e()],1)]):e._e()],2)])],1)},r=[],s=(n("4de4"),n("a15b"),{data:function(){return this.$root.$data},computed:{chargeClass:function(){return this.state.chargingStatus>1?"good":1==this.state.chargingStatus?"average":"bad"},chargeStatus:function(){return this.state.chargingStatus>1?"Fully Charged":1==this.state.chargingStatus?"Charging":"Not Charging"},cellClass:function(){return this.state.powerCellStatus>=50?"good":this.state.powerCellStatus>=25?"average":"bad"},timeRemaining:function(){var e=(this.state.time-this.wtime)/10,t=Math.round(e/3600),n=Math.round(e%3600/60),i=Math.round(e%60);return[t>=1&&"".concat(t," hours"),n>=1&&"".concat(n," minutes"),i>=1&&"".concat(i," seconds")].filter(Boolean).join(", ")}},methods:{channelStatus:function(e){return e<=1?"Off":"On"},channelPower:function(e){return 1==e||3==e?"Auto":"Manual"},channelStatClass:function(e){return e<=1?"bad":"good"}}}),a=s,o=n("2877"),c=Object(o["a"])(a,i,r,!1,null,null,null);t["default"]=c.exports},fb2c:function(e,t,n){var i=n("74e8");i("Uint32",(function(e){return function(t,n,i){return e(this,t,n,i)}}))},fb48:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("h3",[e._v("Group Turret controls:")]),n("div",{staticClass:"item"},[n("div",{staticClass:"itemLabelWide"},[e._v(" Behaviour controls are "+e._s(e.settings.locked?"locked":"unlocked")+". ")])]),n("view-turrets-control-part",{attrs:{settings:e.$data}}),n("h2",[e._v("List of turrets and individual controls:")]),e._l(e.turrets,(function(t){return n("div",{key:t.name},[n("h4",[e._v(e._s(t.name))]),n("view-turrets-control-part",{attrs:{settings:t.settings,tref:t.ref}})],1)}))],2)},r=[],s={data:function(){return this.$root.$data.state}},a=s,o=n("2877"),c=Object(o["a"])(a,i,r,!1,null,null,null);t["default"]=c.exports},fb6a:function(e,t,n){"use strict";var i=n("23e7"),r=n("861d"),s=n("e8b5"),a=n("23cb"),o=n("50c4"),c=n("fc6a"),l=n("8418"),u=n("b622"),d=n("1dde"),h=n("ae40"),f=d("slice"),p=h("slice",{ACCESSORS:!0,0:0,1:2}),g=u("species"),m=[].slice,v=Math.max;i({target:"Array",proto:!0,forced:!f||!p},{slice:function(e,t){var n,i,u,d=c(this),h=o(d.length),f=a(e,h),p=a(void 0===t?h:t,h);if(s(d)&&(n=d.constructor,"function"!=typeof n||n!==Array&&!s(n.prototype)?r(n)&&(n=n[g],null===n&&(n=void 0)):n=void 0,n===Array||void 0===n))return m.call(d,f,p);for(i=new(void 0===n?Array:n)(v(p-f,0)),u=0;fe.length)&&(t=e.length);for(var n=0,i=new Array(t);n1)throw new Error('"weight" property in key must bein the range of [0, 1)');s=null==s?d:Math.max(s,d),r=null==r?d:Math.min(r,d),this._keyWeights[u]=d,o+=d}if(o>1)throw new Error("Total of weights cannot exceed 1")}}},{key:"search",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{limit:!1};this._log('---------\nSearch pattern: "'.concat(e,'"'));var n=this._prepareSearchers(e),i=n.tokenSearchers,r=n.fullSearcher,s=this._search(i,r);return this._computeScore(s),this.options.shouldSort&&this._sort(s),t.limit&&"number"==typeof t.limit&&(s=s.slice(0,t.limit)),this._format(s)}},{key:"_prepareSearchers",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=[];if(this.options.tokenize)for(var n=e.split(this.options.tokenSeparator),i=0,r=n.length;i0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1?arguments[1]:void 0,n=this.list,i={},r=[];if("string"==typeof n[0]){for(var s=0,o=n.length;s-1&&($=($+l)/2),n._log("Score average:",$);var T=!n.options.tokenize||!n.options.matchAllTokens||u>=d.length;if(n._log("\nCheck Matches: ".concat(T)),(a||f.isMatch)&&T){var L={key:i,arrayIndex:t,value:r,score:$};n.options.includeMatches&&(L.matchedIndices=f.matchedIndices);var D=p[o];D?D.output.push(L):(p[o]={item:s,output:[L]},m.push(p[o]))}}else if(c(r))for(var B=0,R=r.length;B0?Number.EPSILON:u.score;c*=Math.pow(f,h)}s.score=c,this._log(s)}}},{key:"_sort",value:function(e){this._log("\n\nSorting...."),e.sort(this.options.sortFn)}},{key:"_format",value:function(e){var t=[];if(this.options.verbose){var n=[];this._log("\n\nOutput:\n\n",JSON.stringify(e,(function(e,t){if("object"===i(t)&&null!==t){if(-1!==n.indexOf(t))return;n.push(t)}return t}),2)),n=null}var r=[];this.options.includeMatches&&r.push((function(e,t){var n=e.output;t.matches=[];for(var i=0,r=n.length;i-1&&(o.arrayIndex=s.arrayIndex),t.matches.push(o)}}})),this.options.includeScore&&r.push((function(e,t){t.score=e.score}));for(var s=0,o=e.length;sc)return r(e,this.pattern,l);var u=this.options,d=u.location,h=u.distance,f=u.threshold,p=u.findAllMatches,g=u.minMatchCharLength;return s(e,this.pattern,this.patternAlphabet,{location:d,distance:h,threshold:f,findAllMatches:p,minMatchCharLength:g,includeMatches:i})}}])&&i(t.prototype,n),a&&i(t,a),e}();e.exports=a},function(e,t){var n=/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g;e.exports=function(e,t){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:/ +/g,r=new RegExp(t.replace(n,"\\$&").replace(i,"|")),s=e.match(r),o=!!s,a=[];if(o)for(var c=0,l=s.length;c=R;j-=1){var I=j-1,P=n[e.charAt(I)];if(P&&(k[I]=1),M[j]=(M[j+1]<<1|1)&P,0!==L&&(M[j]|=(S[j+1]|S[j])<<1|1|S[j+1]),M[j]&T&&(F=i(t,{errors:L,currentLocation:I,expectedLocation:b,distance:l}))<=w){if(w=F,(_=I)<=b)break;R=Math.max(1,2*b-_)}}if(i(t,{errors:L+1,currentLocation:b,expectedLocation:b,distance:l})>w)break;S=M}var N={isMatch:_>=0,score:0===F?.001:F};return v&&(N.matchedIndices=r(k,g)),N}},function(e,t){e.exports=function(e,t){var n=t.errors,i=void 0===n?0:n,r=t.currentLocation,s=void 0===r?0:r,o=t.expectedLocation,a=void 0===o?0:o,c=t.distance,l=void 0===c?100:c,u=i/e.length,d=Math.abs(a-s);return l?u+d/l:d?1:u}},function(e,t){e.exports=function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=[],i=-1,r=-1,s=0,o=e.length;s=t&&n.push([i,r]),i=-1)}return e[s-1]&&s-i>=t&&n.push([i,s-1]),n}},function(e,t){e.exports=function(e){for(var t={},n=e.length,i=0;i1)throw new Error('"weight" property in key must bein the range of [0, 1)');s=null==s?d:Math.max(s,d),r=null==r?d:Math.min(r,d),this._keyWeights[u]=d,a+=d}if(a>1)throw new Error("Total of weights cannot exceed 1")}}},{key:"search",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{limit:!1};this._log('---------\nSearch pattern: "'.concat(e,'"'));var n=this._prepareSearchers(e),i=n.tokenSearchers,r=n.fullSearcher,s=this._search(i,r);return this._computeScore(s),this.options.shouldSort&&this._sort(s),t.limit&&"number"==typeof t.limit&&(s=s.slice(0,t.limit)),this._format(s)}},{key:"_prepareSearchers",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=[];if(this.options.tokenize)for(var n=e.split(this.options.tokenSeparator),i=0,r=n.length;i0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1?arguments[1]:void 0,n=this.list,i={},r=[];if("string"==typeof n[0]){for(var s=0,a=n.length;s-1&&($=($+l)/2),n._log("Score average:",$);var T=!n.options.tokenize||!n.options.matchAllTokens||u>=d.length;if(n._log("\nCheck Matches: ".concat(T)),(o||f.isMatch)&&T){var L={key:i,arrayIndex:t,value:r,score:$};n.options.includeMatches&&(L.matchedIndices=f.matchedIndices);var D=p[a];D?D.output.push(L):(p[a]={item:s,output:[L]},m.push(p[a]))}}else if(c(r))for(var B=0,R=r.length;B0?Number.EPSILON:u.score;c*=Math.pow(f,h)}s.score=c,this._log(s)}}},{key:"_sort",value:function(e){this._log("\n\nSorting...."),e.sort(this.options.sortFn)}},{key:"_format",value:function(e){var t=[];if(this.options.verbose){var n=[];this._log("\n\nOutput:\n\n",JSON.stringify(e,(function(e,t){if("object"===i(t)&&null!==t){if(-1!==n.indexOf(t))return;n.push(t)}return t}),2)),n=null}var r=[];this.options.includeMatches&&r.push((function(e,t){var n=e.output;t.matches=[];for(var i=0,r=n.length;i-1&&(a.arrayIndex=s.arrayIndex),t.matches.push(a)}}})),this.options.includeScore&&r.push((function(e,t){t.score=e.score}));for(var s=0,a=e.length;sc)return r(e,this.pattern,l);var u=this.options,d=u.location,h=u.distance,f=u.threshold,p=u.findAllMatches,g=u.minMatchCharLength;return s(e,this.pattern,this.patternAlphabet,{location:d,distance:h,threshold:f,findAllMatches:p,minMatchCharLength:g,includeMatches:i})}}])&&i(t.prototype,n),o&&i(t,o),e}();e.exports=o},function(e,t){var n=/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g;e.exports=function(e,t){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:/ +/g,r=new RegExp(t.replace(n,"\\$&").replace(i,"|")),s=e.match(r),a=!!s,o=[];if(a)for(var c=0,l=s.length;c=R;j-=1){var I=j-1,P=n[e.charAt(I)];if(P&&(k[I]=1),M[j]=(M[j+1]<<1|1)&P,0!==L&&(M[j]|=(S[j+1]|S[j])<<1|1|S[j+1]),M[j]&T&&(F=i(t,{errors:L,currentLocation:I,expectedLocation:b,distance:l}))<=w){if(w=F,(_=I)<=b)break;R=Math.max(1,2*b-_)}}if(i(t,{errors:L+1,currentLocation:b,expectedLocation:b,distance:l})>w)break;S=M}var N={isMatch:_>=0,score:0===F?.001:F};return v&&(N.matchedIndices=r(k,g)),N}},function(e,t){e.exports=function(e,t){var n=t.errors,i=void 0===n?0:n,r=t.currentLocation,s=void 0===r?0:r,a=t.expectedLocation,o=void 0===a?0:a,c=t.distance,l=void 0===c?100:c,u=i/e.length,d=Math.abs(o-s);return l?u+d/l:d?1:u}},function(e,t){e.exports=function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=[],i=-1,r=-1,s=0,a=e.length;s=t&&n.push([i,r]),i=-1)}return e[s-1]&&s-i>=t&&n.push([i,s-1]),n}},function(e,t){e.exports=function(e){for(var t={},n=e.length,i=0;i\n
\n \n \n {{ s.disk_used }} GQ / {{ s.disk_size }} GQ\n \n \n \n

Available Programs

\n \n \n \n \n
\n\n\n\n\n>","import mod from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./downloader.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./downloader.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./downloader.vue?vue&type=template&id=f45f2cac&scoped=true&\"\nimport script from \"./downloader.vue?vue&type=script&lang=js&\"\nexport * from \"./downloader.vue?vue&type=script&lang=js&\"\nimport style0 from \"./downloader.vue?vue&type=style&index=0&id=f45f2cac&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"f45f2cac\",\n null\n \n)\n\nexport default component.exports","import Store from './store.js'\n\nconst randomId = () => Math.random().toString(36).substring(13)\n\nexport function sendRaw(path, data) {\n var sendparams = []\n for(var val in data) {\n if (Array.isArray(data[val])) {\n for (const value in data[val]) {\n sendparams.push(encodeURIComponent(val) + \"=\" + encodeURIComponent(value))\n }\n } else {\n sendparams.push(encodeURIComponent(val) + \"=\" + encodeURIComponent(data[val]))\n }\n }\n var url = path + '?' + sendparams.join(\"&\")\n\n if(url.indexOf('byond://') >= 0) {\n window.location.href = url\n return\n }\n\n var r = new XMLHttpRequest()\n r.open(\"GET\", url, true);\n r.send()\n}\n\nexport function sendRawWithCallback(path, data, callback) {\n var functionCallbackId = '__bycallback' + randomId()\n window[functionCallbackId] = callback\n sendRaw(path, Object.assign({}, data, {\n callback: functionCallbackId,\n }))\n}\n\nexport function sendToTopicRaw(data) {\n sendRaw('', data)\n}\n\nexport function sendToTopic(data, pushState = false) {\n var pushData = {\n src: Store.state.uiref,\n vueuihrefjson: JSON.stringify(data)\n }\n if(pushState) {\n pushData[\"vueuistateupdate\"] = Store.getStatePushDataString()\n }\n sendToTopicRaw(pushData)\n}\nexport function dotNotationRead(object, key) {\n return key.split('.').reduce((a, b) => a[b], object);\n}\nconst HOUR = 36000\nconst MINUTE = 600\nexport function worldtime2text(time, timeshift = true) {\n const offset = timeshift ? Store.state.roundstart_hour : 0\n const hour = Math.floor((time / HOUR + offset) % 24)\n const minute = Math.floor(time % HOUR / MINUTE)\n return `${('0' + hour).slice(-2)}:${('0' + minute).slice(-2)}`\n}\n\nexport default {\n sendRaw,\n sendRawWithCallback,\n sendToTopicRaw,\n sendToTopic,\n dotNotationRead,\n worldtime2text,\n}\n","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar expm1 = require('../internals/math-expm1');\n\nvar abs = Math.abs;\nvar exp = Math.exp;\nvar E = Math.E;\n\nvar FORCED = fails(function () {\n return Math.sinh(-2e-17) != -2e-17;\n});\n\n// `Math.sinh` method\n// https://tc39.github.io/ecma262/#sec-math.sinh\n// V8 near Chromium 38 has a problem with very small numbers\n$({ target: 'Math', stat: true, forced: FORCED }, {\n sinh: function sinh(x) {\n return abs(x = +x) < 1 ? (expm1(x) - expm1(-x)) / 2 : (exp(x - 1) - exp(-x - 1)) * (E / 2);\n }\n});\n","var aFunction = require('../internals/a-function');\n\n// optional / simple context binding\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 0: return function () {\n return fn.call(that);\n };\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar flattenIntoArray = require('../internals/flatten-into-array');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar toInteger = require('../internals/to-integer');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\n// `Array.prototype.flat` method\n// https://github.com/tc39/proposal-flatMap\n$({ target: 'Array', proto: true }, {\n flat: function flat(/* depthArg = 1 */) {\n var depthArg = arguments.length ? arguments[0] : undefined;\n var O = toObject(this);\n var sourceLen = toLength(O.length);\n var A = arraySpeciesCreate(O, 0);\n A.length = flattenIntoArray(A, O, O, sourceLen, 0, depthArg === undefined ? 1 : toInteger(depthArg));\n return A;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.blink` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.blink\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('blink') }, {\n blink: function blink() {\n return createHTML(this, 'blink', '', '');\n }\n});\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('h3',[_vm._v(\"Jammer Level:\")]),_c('div',[_c('vui-button',{class:{selected: _vm.active == 1},attrs:{\"params\":{ set_active: 1 }}},[_vm._v(\"Block All\")])],1),_c('div',[_c('vui-button',{class:{selected: _vm.active == 2},attrs:{\"params\":{ set_active: 2 }}},[_vm._v(\"Block Synthetics\")])],1),_c('div',[_c('vui-button',{class:{selected: _vm.active == -1},attrs:{\"params\":{ set_active: -1 }}},[_vm._v(\"Block Nothing\")])],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./jammer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./jammer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./jammer.vue?vue&type=template&id=081883d6&\"\nimport script from \"./jammer.vue?vue&type=script&lang=js&\"\nexport * from \"./jammer.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticStyle:{\"clear\":\"both\",\"margin\":\"auto\",\"width\":\"20em\"}},[_vm._l(([5, 10, 20, 30, 40]),function(n){return _c('vui-button',{key:_vm.amount-_vm.button-n,class:{selected : (_vm.state.amount == n)},attrs:{\"icon\":\"cog\",\"params\":{ amount : n }}},[_vm._v(_vm._s(n))])}),_c('br'),_c('br'),_c('div',{staticStyle:{\"text-align\":\"center\"}},[_c('vui-input-numeric',{attrs:{\"width\":\"2.5em\",\"button-count\":2,\"min\":1,\"max\":_vm.state.beakerMaxVolume || 120},on:{\"input\":function($event){return _vm.s({amount : _vm.state.amount})}},model:{value:(_vm.state.amount),callback:function ($$v) {_vm.$set(_vm.state, \"amount\", $$v)},expression:\"state.amount\"}})],1)],2),_c('div',{staticStyle:{\"clear\":\"both\"}}),_c('div',{staticStyle:{\"float\":\"left\",\"width\":\"100%\"}},[(_vm.state.chemicals.length)?_c('div',_vm._l((_vm.state.chemicals),function(chem){return _c('vui-button',{key:chem-_vm.btn,staticClass:\"fixedLeftWide\",attrs:{\"icon\":\"arrow-alt-circle-down\",\"params\":{dispense : chem.label}}},[_vm._v(_vm._s(chem.label)+\" (\"+_vm._s(chem.amount)+\")\")])}),1):_c('span',{staticClass:\"bad\"},[_vm._v(\"No cartridges installed!\")])]),_c('div',{staticStyle:{\"clear\":\"both\"}}),_c('vui-button',{class:_vm.state.isBeakerLoaded && _vm.disabled,staticStyle:{\"float\":\"right\"},attrs:{\"icon\":\"eject\",\"params\":{ejectBeaker : 1}}},[_vm._v(\"Eject \"+_vm._s(_vm.state.glass ? \"Glass\" : \"Beaker\"))]),_c('div',{staticClass:\"statusDisplay\",staticStyle:{\"clear\":\"both\",\"min-height\":\"180px\"}},[(_vm.state.isBeakerLoaded)?_c('div',[_c('b',[_vm._v(\"Volume: \"+_vm._s(_vm.state.beakerCurrentVolume)+\" / \"+_vm._s(_vm.state.beakerMaxVolume))]),_c('br'),(_vm.state.beakerContents.length)?_c('div',_vm._l((_vm.state.beakerContents),function(beakerchem){return _c('span',{key:beakerchem-_vm.amt,staticClass:\"highlight\"},[_vm._v(_vm._s(_vm.u(beakerchem.volume))+\" of \"+_vm._s(beakerchem.name)),_c('br')])}),0):_c('span',{staticClass:\"bad\"},[_vm._v(_vm._s(_vm.state.glass ? \"Glass\" : \"Beaker\")+\" is empty.\")])]):_c('div',[_c('span',{staticClass:\"average\"},[_c('i',[_vm._v(\"No \"+_vm._s(_vm.state.glass ? \"glass\" : \"beaker\")+\" loaded.\")])])])])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./chemdisp.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./chemdisp.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./chemdisp.vue?vue&type=template&id=60faaeb6&scoped=true&\"\nimport script from \"./chemdisp.vue?vue&type=script&lang=js&\"\nexport * from \"./chemdisp.vue?vue&type=script&lang=js&\"\nimport style0 from \"./chemdisp.vue?vue&type=style&index=0&id=60faaeb6&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"60faaeb6\",\n null\n \n)\n\nexport default component.exports","'use strict';\nvar aFunction = require('../internals/a-function');\nvar isObject = require('../internals/is-object');\n\nvar slice = [].slice;\nvar factories = {};\n\nvar construct = function (C, argsLength, args) {\n if (!(argsLength in factories)) {\n for (var list = [], i = 0; i < argsLength; i++) list[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[argsLength] = Function('C,a', 'return new C(' + list.join(',') + ')');\n } return factories[argsLength](C, args);\n};\n\n// `Function.prototype.bind` method implementation\n// https://tc39.github.io/ecma262/#sec-function.prototype.bind\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = slice.call(arguments, 1);\n var boundFunction = function bound(/* args... */) {\n var args = partArgs.concat(slice.call(arguments));\n return this instanceof boundFunction ? construct(fn, args.length, args) : fn.apply(that, args);\n };\n if (isObject(fn.prototype)) boundFunction.prototype = fn.prototype;\n return boundFunction;\n};\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.new_own_tag),expression:\"new_own_tag\"}],attrs:{\"placeholder\":_vm.own_tag},domProps:{\"value\":(_vm.new_own_tag)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.new_own_tag=$event.target.value}}}),_c('vui-button',{attrs:{\"params\":{ tag: _vm.new_own_tag }}},[_vm._v(\"Set GPS Tag\")]),_c('br'),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.add_track_tag),expression:\"add_track_tag\"}],domProps:{\"value\":(_vm.add_track_tag)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.add_track_tag=$event.target.value}}}),_c('vui-button',{attrs:{\"params\":{ add_tag: _vm.add_track_tag }}},[_vm._v(\"Track New Tag\")]),_c('br'),_c('vui-button',{attrs:{\"params\":{ add_all: 1 }}},[_vm._v(\"Track All\")]),_c('vui-button',{attrs:{\"params\":{ clear_all: 1 }}},[_vm._v(\"Untrack All\")]),_c('hr'),_c('table',[_vm._m(0),_vm._l((_vm.tracking_list),function(gps){return _c('tr',{key:gps.tag},[_c('td',[_vm._v(\" \"+_vm._s(gps.tag)+\" \")]),_c('td',[_vm._v(\" \"+_vm._s(gps.pos_x)+\", \"+_vm._s(gps.pos_y)+\", \"+_vm._s(gps.pos_z)+\" \")]),_c('td',[_vm._v(\" \"+_vm._s(gps.area)+\" \")]),(gps.tag != _vm.own_tag)?_c('vui-button',{attrs:{\"params\":{ remove_tag: gps.tag }}},[_vm._v(\"Untrack\")]):_c('td')],1)})],2)],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('tr',[_c('th',[_vm._v(\"GPS Tag\")]),_c('th',[_vm._v(\"Location\")]),_c('th',[_vm._v(\"Area\")]),_c('th',[_vm._v(\"Remove\")])])}]\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./gps.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./gps.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./gps.vue?vue&type=template&id=3729e945&\"\nimport script from \"./gps.vue?vue&type=script&lang=js&\"\nexport * from \"./gps.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var toIndexedObject = require('../internals/to-indexed-object');\nvar nativeGetOwnPropertyNames = require('../internals/object-get-own-property-names').f;\n\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return nativeGetOwnPropertyNames(it);\n } catch (error) {\n return windowNames.slice();\n }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]'\n ? getWindowNames(it)\n : nativeGetOwnPropertyNames(toIndexedObject(it));\n};\n","/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * * Neither the name of Ajax.org B.V. nor the\n * names of its contributors may be used to endorse or promote products\n * derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/**\n * Define a module along with a payload\n * @param module a name for the payload\n * @param payload a function to call with (acequire, exports, module) params\n */\n\n(function() {\n\nvar ACE_NAMESPACE = \"ace\";\n\nvar global = (function() { return this; })();\nif (!global && typeof window != \"undefined\") global = window; // strict mode\n\n\nif (!ACE_NAMESPACE && typeof acequirejs !== \"undefined\")\n return;\n\n\nvar define = function(module, deps, payload) {\n if (typeof module !== \"string\") {\n if (define.original)\n define.original.apply(this, arguments);\n else {\n console.error(\"dropping module because define wasn\\'t a string.\");\n console.trace();\n }\n return;\n }\n if (arguments.length == 2)\n payload = deps;\n if (!define.modules[module]) {\n define.payloads[module] = payload;\n define.modules[module] = null;\n }\n};\n\ndefine.modules = {};\ndefine.payloads = {};\n\n/**\n * Get at functionality define()ed using the function above\n */\nvar _acequire = function(parentId, module, callback) {\n if (typeof module === \"string\") {\n var payload = lookup(parentId, module);\n if (payload != undefined) {\n callback && callback();\n return payload;\n }\n } else if (Object.prototype.toString.call(module) === \"[object Array]\") {\n var params = [];\n for (var i = 0, l = module.length; i < l; ++i) {\n var dep = lookup(parentId, module[i]);\n if (dep == undefined && acequire.original)\n return;\n params.push(dep);\n }\n return callback && callback.apply(null, params) || true;\n }\n};\n\nvar acequire = function(module, callback) {\n var packagedModule = _acequire(\"\", module, callback);\n if (packagedModule == undefined && acequire.original)\n return acequire.original.apply(this, arguments);\n return packagedModule;\n};\n\nvar normalizeModule = function(parentId, moduleName) {\n // normalize plugin acequires\n if (moduleName.indexOf(\"!\") !== -1) {\n var chunks = moduleName.split(\"!\");\n return normalizeModule(parentId, chunks[0]) + \"!\" + normalizeModule(parentId, chunks[1]);\n }\n // normalize relative acequires\n if (moduleName.charAt(0) == \".\") {\n var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n moduleName = base + \"/\" + moduleName;\n\n while(moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n var previous = moduleName;\n moduleName = moduleName.replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n }\n }\n return moduleName;\n};\n\n/**\n * Internal function to lookup moduleNames and resolve them by calling the\n * definition function if needed.\n */\nvar lookup = function(parentId, moduleName) {\n moduleName = normalizeModule(parentId, moduleName);\n\n var module = define.modules[moduleName];\n if (!module) {\n module = define.payloads[moduleName];\n if (typeof module === 'function') {\n var exports = {};\n var mod = {\n id: moduleName,\n uri: '',\n exports: exports,\n packaged: true\n };\n\n var req = function(module, callback) {\n return _acequire(moduleName, module, callback);\n };\n\n var returnValue = module(req, exports, mod);\n exports = returnValue || mod.exports;\n define.modules[moduleName] = exports;\n delete define.payloads[moduleName];\n }\n module = define.modules[moduleName] = exports || module;\n }\n return module;\n};\n\nfunction exportAce(ns) {\n var root = global;\n if (ns) {\n if (!global[ns])\n global[ns] = {};\n root = global[ns];\n }\n\n if (!root.define || !root.define.packaged) {\n define.original = root.define;\n root.define = define;\n root.define.packaged = true;\n }\n\n if (!root.acequire || !root.acequire.packaged) {\n acequire.original = root.acequire;\n root.acequire = acequire;\n root.acequire.packaged = true;\n }\n}\n\nexportAce(ACE_NAMESPACE);\n\n})();\n\nace.define(\"ace/lib/regexp\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\n\n var real = {\n exec: RegExp.prototype.exec,\n test: RegExp.prototype.test,\n match: String.prototype.match,\n replace: String.prototype.replace,\n split: String.prototype.split\n },\n compliantExecNpcg = real.exec.call(/()??/, \"\")[1] === undefined, // check `exec` handling of nonparticipating capturing groups\n compliantLastIndexIncrement = function () {\n var x = /^/g;\n real.test.call(x, \"\");\n return !x.lastIndex;\n }();\n\n if (compliantLastIndexIncrement && compliantExecNpcg)\n return;\n RegExp.prototype.exec = function (str) {\n var match = real.exec.apply(this, arguments),\n name, r2;\n if ( typeof(str) == 'string' && match) {\n if (!compliantExecNpcg && match.length > 1 && indexOf(match, \"\") > -1) {\n r2 = RegExp(this.source, real.replace.call(getNativeFlags(this), \"g\", \"\"));\n real.replace.call(str.slice(match.index), r2, function () {\n for (var i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined)\n match[i] = undefined;\n }\n });\n }\n if (this._xregexp && this._xregexp.captureNames) {\n for (var i = 1; i < match.length; i++) {\n name = this._xregexp.captureNames[i - 1];\n if (name)\n match[name] = match[i];\n }\n }\n if (!compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index))\n this.lastIndex--;\n }\n return match;\n };\n if (!compliantLastIndexIncrement) {\n RegExp.prototype.test = function (str) {\n var match = real.exec.call(this, str);\n if (match && this.global && !match[0].length && (this.lastIndex > match.index))\n this.lastIndex--;\n return !!match;\n };\n }\n\n function getNativeFlags (regex) {\n return (regex.global ? \"g\" : \"\") +\n (regex.ignoreCase ? \"i\" : \"\") +\n (regex.multiline ? \"m\" : \"\") +\n (regex.extended ? \"x\" : \"\") + // Proposed for ES4; included in AS3\n (regex.sticky ? \"y\" : \"\");\n }\n\n function indexOf (array, item, from) {\n if (Array.prototype.indexOf) // Use the native array method if available\n return array.indexOf(item, from);\n for (var i = from || 0; i < array.length; i++) {\n if (array[i] === item)\n return i;\n }\n return -1;\n }\n\n});\n\nace.define(\"ace/lib/es5-shim\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\nfunction Empty() {}\n\nif (!Function.prototype.bind) {\n Function.prototype.bind = function bind(that) { // .length is 1\n var target = this;\n if (typeof target != \"function\") {\n throw new TypeError(\"Function.prototype.bind called on incompatible \" + target);\n }\n var args = slice.call(arguments, 1); // for normal call\n var bound = function () {\n\n if (this instanceof bound) {\n\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n\n }\n\n };\n if(target.prototype) {\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n return bound;\n };\n}\nvar call = Function.prototype.call;\nvar prototypeOfArray = Array.prototype;\nvar prototypeOfObject = Object.prototype;\nvar slice = prototypeOfArray.slice;\nvar _toString = call.bind(prototypeOfObject.toString);\nvar owns = call.bind(prototypeOfObject.hasOwnProperty);\nvar defineGetter;\nvar defineSetter;\nvar lookupGetter;\nvar lookupSetter;\nvar supportsAccessors;\nif ((supportsAccessors = owns(prototypeOfObject, \"__defineGetter__\"))) {\n defineGetter = call.bind(prototypeOfObject.__defineGetter__);\n defineSetter = call.bind(prototypeOfObject.__defineSetter__);\n lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);\n lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);\n}\nif ([1,2].splice(0).length != 2) {\n if(function() { // test IE < 9 to splice bug - see issue #138\n function makeArray(l) {\n var a = new Array(l+2);\n a[0] = a[1] = 0;\n return a;\n }\n var array = [], lengthBefore;\n \n array.splice.apply(array, makeArray(20));\n array.splice.apply(array, makeArray(26));\n\n lengthBefore = array.length; //46\n array.splice(5, 0, \"XXX\"); // add one element\n\n lengthBefore + 1 == array.length\n\n if (lengthBefore + 1 == array.length) {\n return true;// has right splice implementation without bugs\n }\n }()) {//IE 6/7\n var array_splice = Array.prototype.splice;\n Array.prototype.splice = function(start, deleteCount) {\n if (!arguments.length) {\n return [];\n } else {\n return array_splice.apply(this, [\n start === void 0 ? 0 : start,\n deleteCount === void 0 ? (this.length - start) : deleteCount\n ].concat(slice.call(arguments, 2)))\n }\n };\n } else {//IE8\n Array.prototype.splice = function(pos, removeCount){\n var length = this.length;\n if (pos > 0) {\n if (pos > length)\n pos = length;\n } else if (pos == void 0) {\n pos = 0;\n } else if (pos < 0) {\n pos = Math.max(length + pos, 0);\n }\n\n if (!(pos+removeCount < length))\n removeCount = length - pos;\n\n var removed = this.slice(pos, pos+removeCount);\n var insert = slice.call(arguments, 2);\n var add = insert.length; \n if (pos === length) {\n if (add) {\n this.push.apply(this, insert);\n }\n } else {\n var remove = Math.min(removeCount, length - pos);\n var tailOldPos = pos + remove;\n var tailNewPos = tailOldPos + add - remove;\n var tailCount = length - tailOldPos;\n var lengthAfterRemove = length - remove;\n\n if (tailNewPos < tailOldPos) { // case A\n for (var i = 0; i < tailCount; ++i) {\n this[tailNewPos+i] = this[tailOldPos+i];\n }\n } else if (tailNewPos > tailOldPos) { // case B\n for (i = tailCount; i--; ) {\n this[tailNewPos+i] = this[tailOldPos+i];\n }\n } // else, add == remove (nothing to do)\n\n if (add && pos === lengthAfterRemove) {\n this.length = lengthAfterRemove; // truncate array\n this.push.apply(this, insert);\n } else {\n this.length = lengthAfterRemove + add; // reserves space\n for (i = 0; i < add; ++i) {\n this[pos+i] = insert[i];\n }\n }\n }\n return removed;\n };\n }\n}\nif (!Array.isArray) {\n Array.isArray = function isArray(obj) {\n return _toString(obj) == \"[object Array]\";\n };\n}\nvar boxedString = Object(\"a\"),\n splitString = boxedString[0] != \"a\" || !(0 in boxedString);\n\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function forEach(fun /*, thisp*/) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n object,\n thisp = arguments[1],\n i = -1,\n length = self.length >>> 0;\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(); // TODO message\n }\n\n while (++i < length) {\n if (i in self) {\n fun.call(thisp, self[i], i, object);\n }\n }\n };\n}\nif (!Array.prototype.map) {\n Array.prototype.map = function map(fun /*, thisp*/) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n object,\n length = self.length >>> 0,\n result = Array(length),\n thisp = arguments[1];\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self)\n result[i] = fun.call(thisp, self[i], i, object);\n }\n return result;\n };\n}\nif (!Array.prototype.filter) {\n Array.prototype.filter = function filter(fun /*, thisp */) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n object,\n length = self.length >>> 0,\n result = [],\n value,\n thisp = arguments[1];\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self) {\n value = self[i];\n if (fun.call(thisp, value, i, object)) {\n result.push(value);\n }\n }\n }\n return result;\n };\n}\nif (!Array.prototype.every) {\n Array.prototype.every = function every(fun /*, thisp */) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n object,\n length = self.length >>> 0,\n thisp = arguments[1];\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self && !fun.call(thisp, self[i], i, object)) {\n return false;\n }\n }\n return true;\n };\n}\nif (!Array.prototype.some) {\n Array.prototype.some = function some(fun /*, thisp */) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n object,\n length = self.length >>> 0,\n thisp = arguments[1];\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self && fun.call(thisp, self[i], i, object)) {\n return true;\n }\n }\n return false;\n };\n}\nif (!Array.prototype.reduce) {\n Array.prototype.reduce = function reduce(fun /*, initial*/) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n object,\n length = self.length >>> 0;\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n if (!length && arguments.length == 1) {\n throw new TypeError(\"reduce of empty array with no initial value\");\n }\n\n var i = 0;\n var result;\n if (arguments.length >= 2) {\n result = arguments[1];\n } else {\n do {\n if (i in self) {\n result = self[i++];\n break;\n }\n if (++i >= length) {\n throw new TypeError(\"reduce of empty array with no initial value\");\n }\n } while (true);\n }\n\n for (; i < length; i++) {\n if (i in self) {\n result = fun.call(void 0, result, self[i], i, object);\n }\n }\n\n return result;\n };\n}\nif (!Array.prototype.reduceRight) {\n Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n object,\n length = self.length >>> 0;\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n if (!length && arguments.length == 1) {\n throw new TypeError(\"reduceRight of empty array with no initial value\");\n }\n\n var result, i = length - 1;\n if (arguments.length >= 2) {\n result = arguments[1];\n } else {\n do {\n if (i in self) {\n result = self[i--];\n break;\n }\n if (--i < 0) {\n throw new TypeError(\"reduceRight of empty array with no initial value\");\n }\n } while (true);\n }\n\n do {\n if (i in this) {\n result = fun.call(void 0, result, self[i], i, object);\n }\n } while (i--);\n\n return result;\n };\n}\nif (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {\n Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {\n var self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n toObject(this),\n length = self.length >>> 0;\n\n if (!length) {\n return -1;\n }\n\n var i = 0;\n if (arguments.length > 1) {\n i = toInteger(arguments[1]);\n }\n i = i >= 0 ? i : Math.max(0, length + i);\n for (; i < length; i++) {\n if (i in self && self[i] === sought) {\n return i;\n }\n }\n return -1;\n };\n}\nif (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {\n Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {\n var self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n toObject(this),\n length = self.length >>> 0;\n\n if (!length) {\n return -1;\n }\n var i = length - 1;\n if (arguments.length > 1) {\n i = Math.min(i, toInteger(arguments[1]));\n }\n i = i >= 0 ? i : length - Math.abs(i);\n for (; i >= 0; i--) {\n if (i in self && sought === self[i]) {\n return i;\n }\n }\n return -1;\n };\n}\nif (!Object.getPrototypeOf) {\n Object.getPrototypeOf = function getPrototypeOf(object) {\n return object.__proto__ || (\n object.constructor ?\n object.constructor.prototype :\n prototypeOfObject\n );\n };\n}\nif (!Object.getOwnPropertyDescriptor) {\n var ERR_NON_OBJECT = \"Object.getOwnPropertyDescriptor called on a \" +\n \"non-object: \";\n Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {\n if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n throw new TypeError(ERR_NON_OBJECT + object);\n if (!owns(object, property))\n return;\n\n var descriptor, getter, setter;\n descriptor = { enumerable: true, configurable: true };\n if (supportsAccessors) {\n var prototype = object.__proto__;\n object.__proto__ = prototypeOfObject;\n\n var getter = lookupGetter(object, property);\n var setter = lookupSetter(object, property);\n object.__proto__ = prototype;\n\n if (getter || setter) {\n if (getter) descriptor.get = getter;\n if (setter) descriptor.set = setter;\n return descriptor;\n }\n }\n descriptor.value = object[property];\n return descriptor;\n };\n}\nif (!Object.getOwnPropertyNames) {\n Object.getOwnPropertyNames = function getOwnPropertyNames(object) {\n return Object.keys(object);\n };\n}\nif (!Object.create) {\n var createEmpty;\n if (Object.prototype.__proto__ === null) {\n createEmpty = function () {\n return { \"__proto__\": null };\n };\n } else {\n createEmpty = function () {\n var empty = {};\n for (var i in empty)\n empty[i] = null;\n empty.constructor =\n empty.hasOwnProperty =\n empty.propertyIsEnumerable =\n empty.isPrototypeOf =\n empty.toLocaleString =\n empty.toString =\n empty.valueOf =\n empty.__proto__ = null;\n return empty;\n }\n }\n\n Object.create = function create(prototype, properties) {\n var object;\n if (prototype === null) {\n object = createEmpty();\n } else {\n if (typeof prototype != \"object\")\n throw new TypeError(\"typeof prototype[\"+(typeof prototype)+\"] != 'object'\");\n var Type = function () {};\n Type.prototype = prototype;\n object = new Type();\n object.__proto__ = prototype;\n }\n if (properties !== void 0)\n Object.defineProperties(object, properties);\n return object;\n };\n}\n\nfunction doesDefinePropertyWork(object) {\n try {\n Object.defineProperty(object, \"sentinel\", {});\n return \"sentinel\" in object;\n } catch (exception) {\n }\n}\nif (Object.defineProperty) {\n var definePropertyWorksOnObject = doesDefinePropertyWork({});\n var definePropertyWorksOnDom = typeof document == \"undefined\" ||\n doesDefinePropertyWork(document.createElement(\"div\"));\n if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {\n var definePropertyFallback = Object.defineProperty;\n }\n}\n\nif (!Object.defineProperty || definePropertyFallback) {\n var ERR_NON_OBJECT_DESCRIPTOR = \"Property description must be an object: \";\n var ERR_NON_OBJECT_TARGET = \"Object.defineProperty called on non-object: \"\n var ERR_ACCESSORS_NOT_SUPPORTED = \"getters & setters can not be defined \" +\n \"on this javascript engine\";\n\n Object.defineProperty = function defineProperty(object, property, descriptor) {\n if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n throw new TypeError(ERR_NON_OBJECT_TARGET + object);\n if ((typeof descriptor != \"object\" && typeof descriptor != \"function\") || descriptor === null)\n throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);\n if (definePropertyFallback) {\n try {\n return definePropertyFallback.call(Object, object, property, descriptor);\n } catch (exception) {\n }\n }\n if (owns(descriptor, \"value\")) {\n\n if (supportsAccessors && (lookupGetter(object, property) ||\n lookupSetter(object, property)))\n {\n var prototype = object.__proto__;\n object.__proto__ = prototypeOfObject;\n delete object[property];\n object[property] = descriptor.value;\n object.__proto__ = prototype;\n } else {\n object[property] = descriptor.value;\n }\n } else {\n if (!supportsAccessors)\n throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);\n if (owns(descriptor, \"get\"))\n defineGetter(object, property, descriptor.get);\n if (owns(descriptor, \"set\"))\n defineSetter(object, property, descriptor.set);\n }\n\n return object;\n };\n}\nif (!Object.defineProperties) {\n Object.defineProperties = function defineProperties(object, properties) {\n for (var property in properties) {\n if (owns(properties, property))\n Object.defineProperty(object, property, properties[property]);\n }\n return object;\n };\n}\nif (!Object.seal) {\n Object.seal = function seal(object) {\n return object;\n };\n}\nif (!Object.freeze) {\n Object.freeze = function freeze(object) {\n return object;\n };\n}\ntry {\n Object.freeze(function () {});\n} catch (exception) {\n Object.freeze = (function freeze(freezeObject) {\n return function freeze(object) {\n if (typeof object == \"function\") {\n return object;\n } else {\n return freezeObject(object);\n }\n };\n })(Object.freeze);\n}\nif (!Object.preventExtensions) {\n Object.preventExtensions = function preventExtensions(object) {\n return object;\n };\n}\nif (!Object.isSealed) {\n Object.isSealed = function isSealed(object) {\n return false;\n };\n}\nif (!Object.isFrozen) {\n Object.isFrozen = function isFrozen(object) {\n return false;\n };\n}\nif (!Object.isExtensible) {\n Object.isExtensible = function isExtensible(object) {\n if (Object(object) === object) {\n throw new TypeError(); // TODO message\n }\n var name = '';\n while (owns(object, name)) {\n name += '?';\n }\n object[name] = true;\n var returnValue = owns(object, name);\n delete object[name];\n return returnValue;\n };\n}\nif (!Object.keys) {\n var hasDontEnumBug = true,\n dontEnums = [\n \"toString\",\n \"toLocaleString\",\n \"valueOf\",\n \"hasOwnProperty\",\n \"isPrototypeOf\",\n \"propertyIsEnumerable\",\n \"constructor\"\n ],\n dontEnumsLength = dontEnums.length;\n\n for (var key in {\"toString\": null}) {\n hasDontEnumBug = false;\n }\n\n Object.keys = function keys(object) {\n\n if (\n (typeof object != \"object\" && typeof object != \"function\") ||\n object === null\n ) {\n throw new TypeError(\"Object.keys called on a non-object\");\n }\n\n var keys = [];\n for (var name in object) {\n if (owns(object, name)) {\n keys.push(name);\n }\n }\n\n if (hasDontEnumBug) {\n for (var i = 0, ii = dontEnumsLength; i < ii; i++) {\n var dontEnum = dontEnums[i];\n if (owns(object, dontEnum)) {\n keys.push(dontEnum);\n }\n }\n }\n return keys;\n };\n\n}\nif (!Date.now) {\n Date.now = function now() {\n return new Date().getTime();\n };\n}\nvar ws = \"\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\" +\n \"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\" +\n \"\\u2029\\uFEFF\";\nif (!String.prototype.trim || ws.trim()) {\n ws = \"[\" + ws + \"]\";\n var trimBeginRegexp = new RegExp(\"^\" + ws + ws + \"*\"),\n trimEndRegexp = new RegExp(ws + ws + \"*$\");\n String.prototype.trim = function trim() {\n return String(this).replace(trimBeginRegexp, \"\").replace(trimEndRegexp, \"\");\n };\n}\n\nfunction toInteger(n) {\n n = +n;\n if (n !== n) { // isNaN\n n = 0;\n } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n return n;\n}\n\nfunction isPrimitive(input) {\n var type = typeof input;\n return (\n input === null ||\n type === \"undefined\" ||\n type === \"boolean\" ||\n type === \"number\" ||\n type === \"string\"\n );\n}\n\nfunction toPrimitive(input) {\n var val, valueOf, toString;\n if (isPrimitive(input)) {\n return input;\n }\n valueOf = input.valueOf;\n if (typeof valueOf === \"function\") {\n val = valueOf.call(input);\n if (isPrimitive(val)) {\n return val;\n }\n }\n toString = input.toString;\n if (typeof toString === \"function\") {\n val = toString.call(input);\n if (isPrimitive(val)) {\n return val;\n }\n }\n throw new TypeError();\n}\nvar toObject = function (o) {\n if (o == null) { // this matches both null and undefined\n throw new TypeError(\"can't convert \"+o+\" to object\");\n }\n return Object(o);\n};\n\n});\n\nace.define(\"ace/lib/fixoldbrowsers\",[\"require\",\"exports\",\"module\",\"ace/lib/regexp\",\"ace/lib/es5-shim\"], function(acequire, exports, module) {\n\"use strict\";\n\nacequire(\"./regexp\");\nacequire(\"./es5-shim\");\n\n});\n\nace.define(\"ace/lib/dom\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar XHTML_NS = \"http://www.w3.org/1999/xhtml\";\n\nexports.getDocumentHead = function(doc) {\n if (!doc)\n doc = document;\n return doc.head || doc.getElementsByTagName(\"head\")[0] || doc.documentElement;\n};\n\nexports.createElement = function(tag, ns) {\n return document.createElementNS ?\n document.createElementNS(ns || XHTML_NS, tag) :\n document.createElement(tag);\n};\n\nexports.hasCssClass = function(el, name) {\n var classes = (el.className + \"\").split(/\\s+/g);\n return classes.indexOf(name) !== -1;\n};\nexports.addCssClass = function(el, name) {\n if (!exports.hasCssClass(el, name)) {\n el.className += \" \" + name;\n }\n};\nexports.removeCssClass = function(el, name) {\n var classes = el.className.split(/\\s+/g);\n while (true) {\n var index = classes.indexOf(name);\n if (index == -1) {\n break;\n }\n classes.splice(index, 1);\n }\n el.className = classes.join(\" \");\n};\n\nexports.toggleCssClass = function(el, name) {\n var classes = el.className.split(/\\s+/g), add = true;\n while (true) {\n var index = classes.indexOf(name);\n if (index == -1) {\n break;\n }\n add = false;\n classes.splice(index, 1);\n }\n if (add)\n classes.push(name);\n\n el.className = classes.join(\" \");\n return add;\n};\nexports.setCssClass = function(node, className, include) {\n if (include) {\n exports.addCssClass(node, className);\n } else {\n exports.removeCssClass(node, className);\n }\n};\n\nexports.hasCssString = function(id, doc) {\n var index = 0, sheets;\n doc = doc || document;\n\n if (doc.createStyleSheet && (sheets = doc.styleSheets)) {\n while (index < sheets.length)\n if (sheets[index++].owningElement.id === id) return true;\n } else if ((sheets = doc.getElementsByTagName(\"style\"))) {\n while (index < sheets.length)\n if (sheets[index++].id === id) return true;\n }\n\n return false;\n};\n\nexports.importCssString = function importCssString(cssText, id, doc) {\n doc = doc || document;\n if (id && exports.hasCssString(id, doc))\n return null;\n \n var style;\n \n if (id)\n cssText += \"\\n/*# sourceURL=ace/css/\" + id + \" */\";\n \n if (doc.createStyleSheet) {\n style = doc.createStyleSheet();\n style.cssText = cssText;\n if (id)\n style.owningElement.id = id;\n } else {\n style = exports.createElement(\"style\");\n style.appendChild(doc.createTextNode(cssText));\n if (id)\n style.id = id;\n\n exports.getDocumentHead(doc).appendChild(style);\n }\n};\n\nexports.importCssStylsheet = function(uri, doc) {\n if (doc.createStyleSheet) {\n doc.createStyleSheet(uri);\n } else {\n var link = exports.createElement('link');\n link.rel = 'stylesheet';\n link.href = uri;\n\n exports.getDocumentHead(doc).appendChild(link);\n }\n};\n\nexports.getInnerWidth = function(element) {\n return (\n parseInt(exports.computedStyle(element, \"paddingLeft\"), 10) +\n parseInt(exports.computedStyle(element, \"paddingRight\"), 10) + \n element.clientWidth\n );\n};\n\nexports.getInnerHeight = function(element) {\n return (\n parseInt(exports.computedStyle(element, \"paddingTop\"), 10) +\n parseInt(exports.computedStyle(element, \"paddingBottom\"), 10) +\n element.clientHeight\n );\n};\n\nexports.scrollbarWidth = function(document) {\n var inner = exports.createElement(\"ace_inner\");\n inner.style.width = \"100%\";\n inner.style.minWidth = \"0px\";\n inner.style.height = \"200px\";\n inner.style.display = \"block\";\n\n var outer = exports.createElement(\"ace_outer\");\n var style = outer.style;\n\n style.position = \"absolute\";\n style.left = \"-10000px\";\n style.overflow = \"hidden\";\n style.width = \"200px\";\n style.minWidth = \"0px\";\n style.height = \"150px\";\n style.display = \"block\";\n\n outer.appendChild(inner);\n\n var body = document.documentElement;\n body.appendChild(outer);\n\n var noScrollbar = inner.offsetWidth;\n\n style.overflow = \"scroll\";\n var withScrollbar = inner.offsetWidth;\n\n if (noScrollbar == withScrollbar) {\n withScrollbar = outer.clientWidth;\n }\n\n body.removeChild(outer);\n\n return noScrollbar-withScrollbar;\n};\n\nif (typeof document == \"undefined\") {\n exports.importCssString = function() {};\n return;\n}\n\nif (window.pageYOffset !== undefined) {\n exports.getPageScrollTop = function() {\n return window.pageYOffset;\n };\n\n exports.getPageScrollLeft = function() {\n return window.pageXOffset;\n };\n}\nelse {\n exports.getPageScrollTop = function() {\n return document.body.scrollTop;\n };\n\n exports.getPageScrollLeft = function() {\n return document.body.scrollLeft;\n };\n}\n\nif (window.getComputedStyle)\n exports.computedStyle = function(element, style) {\n if (style)\n return (window.getComputedStyle(element, \"\") || {})[style] || \"\";\n return window.getComputedStyle(element, \"\") || {};\n };\nelse\n exports.computedStyle = function(element, style) {\n if (style)\n return element.currentStyle[style];\n return element.currentStyle;\n };\nexports.setInnerHtml = function(el, innerHtml) {\n var element = el.cloneNode(false);//document.createElement(\"div\");\n element.innerHTML = innerHtml;\n el.parentNode.replaceChild(element, el);\n return element;\n};\n\nif (\"textContent\" in document.documentElement) {\n exports.setInnerText = function(el, innerText) {\n el.textContent = innerText;\n };\n\n exports.getInnerText = function(el) {\n return el.textContent;\n };\n}\nelse {\n exports.setInnerText = function(el, innerText) {\n el.innerText = innerText;\n };\n\n exports.getInnerText = function(el) {\n return el.innerText;\n };\n}\n\nexports.getParentWindow = function(document) {\n return document.defaultView || document.parentWindow;\n};\n\n});\n\nace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\n\nexports.inherits = function(ctor, superCtor) {\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n};\n\nexports.mixin = function(obj, mixin) {\n for (var key in mixin) {\n obj[key] = mixin[key];\n }\n return obj;\n};\n\nexports.implement = function(proto, mixin) {\n exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/lib/keys\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/oop\"], function(acequire, exports, module) {\n\"use strict\";\n\nacequire(\"./fixoldbrowsers\");\n\nvar oop = acequire(\"./oop\");\nvar Keys = (function() {\n var ret = {\n MODIFIER_KEYS: {\n 16: 'Shift', 17: 'Ctrl', 18: 'Alt', 224: 'Meta'\n },\n\n KEY_MODS: {\n \"ctrl\": 1, \"alt\": 2, \"option\" : 2, \"shift\": 4,\n \"super\": 8, \"meta\": 8, \"command\": 8, \"cmd\": 8\n },\n\n FUNCTION_KEYS : {\n 8 : \"Backspace\",\n 9 : \"Tab\",\n 13 : \"Return\",\n 19 : \"Pause\",\n 27 : \"Esc\",\n 32 : \"Space\",\n 33 : \"PageUp\",\n 34 : \"PageDown\",\n 35 : \"End\",\n 36 : \"Home\",\n 37 : \"Left\",\n 38 : \"Up\",\n 39 : \"Right\",\n 40 : \"Down\",\n 44 : \"Print\",\n 45 : \"Insert\",\n 46 : \"Delete\",\n 96 : \"Numpad0\",\n 97 : \"Numpad1\",\n 98 : \"Numpad2\",\n 99 : \"Numpad3\",\n 100: \"Numpad4\",\n 101: \"Numpad5\",\n 102: \"Numpad6\",\n 103: \"Numpad7\",\n 104: \"Numpad8\",\n 105: \"Numpad9\",\n '-13': \"NumpadEnter\",\n 112: \"F1\",\n 113: \"F2\",\n 114: \"F3\",\n 115: \"F4\",\n 116: \"F5\",\n 117: \"F6\",\n 118: \"F7\",\n 119: \"F8\",\n 120: \"F9\",\n 121: \"F10\",\n 122: \"F11\",\n 123: \"F12\",\n 144: \"Numlock\",\n 145: \"Scrolllock\"\n },\n\n PRINTABLE_KEYS: {\n 32: ' ', 48: '0', 49: '1', 50: '2', 51: '3', 52: '4', 53: '5',\n 54: '6', 55: '7', 56: '8', 57: '9', 59: ';', 61: '=', 65: 'a',\n 66: 'b', 67: 'c', 68: 'd', 69: 'e', 70: 'f', 71: 'g', 72: 'h',\n 73: 'i', 74: 'j', 75: 'k', 76: 'l', 77: 'm', 78: 'n', 79: 'o',\n 80: 'p', 81: 'q', 82: 'r', 83: 's', 84: 't', 85: 'u', 86: 'v',\n 87: 'w', 88: 'x', 89: 'y', 90: 'z', 107: '+', 109: '-', 110: '.',\n 186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`',\n 219: '[', 220: '\\\\',221: ']', 222: \"'\", 111: '/', 106: '*'\n }\n };\n var name, i;\n for (i in ret.FUNCTION_KEYS) {\n name = ret.FUNCTION_KEYS[i].toLowerCase();\n ret[name] = parseInt(i, 10);\n }\n for (i in ret.PRINTABLE_KEYS) {\n name = ret.PRINTABLE_KEYS[i].toLowerCase();\n ret[name] = parseInt(i, 10);\n }\n oop.mixin(ret, ret.MODIFIER_KEYS);\n oop.mixin(ret, ret.PRINTABLE_KEYS);\n oop.mixin(ret, ret.FUNCTION_KEYS);\n ret.enter = ret[\"return\"];\n ret.escape = ret.esc;\n ret.del = ret[\"delete\"];\n ret[173] = '-';\n \n (function() {\n var mods = [\"cmd\", \"ctrl\", \"alt\", \"shift\"];\n for (var i = Math.pow(2, mods.length); i--;) { \n ret.KEY_MODS[i] = mods.filter(function(x) {\n return i & ret.KEY_MODS[x];\n }).join(\"-\") + \"-\";\n }\n })();\n\n ret.KEY_MODS[0] = \"\";\n ret.KEY_MODS[-1] = \"input-\";\n\n return ret;\n})();\noop.mixin(exports, Keys);\n\nexports.keyCodeToString = function(keyCode) {\n var keyString = Keys[keyCode];\n if (typeof keyString != \"string\")\n keyString = String.fromCharCode(keyCode);\n return keyString.toLowerCase();\n};\n\n});\n\nace.define(\"ace/lib/useragent\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\nexports.OS = {\n LINUX: \"LINUX\",\n MAC: \"MAC\",\n WINDOWS: \"WINDOWS\"\n};\nexports.getOS = function() {\n if (exports.isMac) {\n return exports.OS.MAC;\n } else if (exports.isLinux) {\n return exports.OS.LINUX;\n } else {\n return exports.OS.WINDOWS;\n }\n};\nif (typeof navigator != \"object\")\n return;\n\nvar os = (navigator.platform.match(/mac|win|linux/i) || [\"other\"])[0].toLowerCase();\nvar ua = navigator.userAgent;\nexports.isWin = (os == \"win\");\nexports.isMac = (os == \"mac\");\nexports.isLinux = (os == \"linux\");\nexports.isIE = \n (navigator.appName == \"Microsoft Internet Explorer\" || navigator.appName.indexOf(\"MSAppHost\") >= 0)\n ? parseFloat((ua.match(/(?:MSIE |Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1])\n : parseFloat((ua.match(/(?:Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1]); // for ie\n \nexports.isOldIE = exports.isIE && exports.isIE < 9;\nexports.isGecko = exports.isMozilla = (window.Controllers || window.controllers) && window.navigator.product === \"Gecko\";\nexports.isOldGecko = exports.isGecko && parseInt((ua.match(/rv:(\\d+)/)||[])[1], 10) < 4;\nexports.isOpera = window.opera && Object.prototype.toString.call(window.opera) == \"[object Opera]\";\nexports.isWebKit = parseFloat(ua.split(\"WebKit/\")[1]) || undefined;\n\nexports.isChrome = parseFloat(ua.split(\" Chrome/\")[1]) || undefined;\n\nexports.isAIR = ua.indexOf(\"AdobeAIR\") >= 0;\n\nexports.isIPad = ua.indexOf(\"iPad\") >= 0;\n\nexports.isChromeOS = ua.indexOf(\" CrOS \") >= 0;\n\nexports.isIOS = /iPad|iPhone|iPod/.test(ua) && !window.MSStream;\n\nif (exports.isIOS) exports.isMac = true;\n\n});\n\nace.define(\"ace/lib/event\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar keys = acequire(\"./keys\");\nvar useragent = acequire(\"./useragent\");\n\nvar pressedKeys = null;\nvar ts = 0;\n\nexports.addListener = function(elem, type, callback) {\n if (elem.addEventListener) {\n return elem.addEventListener(type, callback, false);\n }\n if (elem.attachEvent) {\n var wrapper = function() {\n callback.call(elem, window.event);\n };\n callback._wrapper = wrapper;\n elem.attachEvent(\"on\" + type, wrapper);\n }\n};\n\nexports.removeListener = function(elem, type, callback) {\n if (elem.removeEventListener) {\n return elem.removeEventListener(type, callback, false);\n }\n if (elem.detachEvent) {\n elem.detachEvent(\"on\" + type, callback._wrapper || callback);\n }\n};\nexports.stopEvent = function(e) {\n exports.stopPropagation(e);\n exports.preventDefault(e);\n return false;\n};\n\nexports.stopPropagation = function(e) {\n if (e.stopPropagation)\n e.stopPropagation();\n else\n e.cancelBubble = true;\n};\n\nexports.preventDefault = function(e) {\n if (e.preventDefault)\n e.preventDefault();\n else\n e.returnValue = false;\n};\nexports.getButton = function(e) {\n if (e.type == \"dblclick\")\n return 0;\n if (e.type == \"contextmenu\" || (useragent.isMac && (e.ctrlKey && !e.altKey && !e.shiftKey)))\n return 2;\n if (e.preventDefault) {\n return e.button;\n }\n else {\n return {1:0, 2:2, 4:1}[e.button];\n }\n};\n\nexports.capture = function(el, eventHandler, releaseCaptureHandler) {\n function onMouseUp(e) {\n eventHandler && eventHandler(e);\n releaseCaptureHandler && releaseCaptureHandler(e);\n\n exports.removeListener(document, \"mousemove\", eventHandler, true);\n exports.removeListener(document, \"mouseup\", onMouseUp, true);\n exports.removeListener(document, \"dragstart\", onMouseUp, true);\n }\n\n exports.addListener(document, \"mousemove\", eventHandler, true);\n exports.addListener(document, \"mouseup\", onMouseUp, true);\n exports.addListener(document, \"dragstart\", onMouseUp, true);\n \n return onMouseUp;\n};\n\nexports.addTouchMoveListener = function (el, callback) {\n var startx, starty;\n exports.addListener(el, \"touchstart\", function (e) {\n var touches = e.touches;\n var touchObj = touches[0];\n startx = touchObj.clientX;\n starty = touchObj.clientY;\n });\n exports.addListener(el, \"touchmove\", function (e) {\n var touches = e.touches;\n if (touches.length > 1) return;\n\n var touchObj = touches[0];\n\n e.wheelX = startx - touchObj.clientX;\n e.wheelY = starty - touchObj.clientY;\n\n startx = touchObj.clientX;\n starty = touchObj.clientY;\n\n callback(e);\n });\n};\n\nexports.addMouseWheelListener = function(el, callback) {\n if (\"onmousewheel\" in el) {\n exports.addListener(el, \"mousewheel\", function(e) {\n var factor = 8;\n if (e.wheelDeltaX !== undefined) {\n e.wheelX = -e.wheelDeltaX / factor;\n e.wheelY = -e.wheelDeltaY / factor;\n } else {\n e.wheelX = 0;\n e.wheelY = -e.wheelDelta / factor;\n }\n callback(e);\n });\n } else if (\"onwheel\" in el) {\n exports.addListener(el, \"wheel\", function(e) {\n var factor = 0.35;\n switch (e.deltaMode) {\n case e.DOM_DELTA_PIXEL:\n e.wheelX = e.deltaX * factor || 0;\n e.wheelY = e.deltaY * factor || 0;\n break;\n case e.DOM_DELTA_LINE:\n case e.DOM_DELTA_PAGE:\n e.wheelX = (e.deltaX || 0) * 5;\n e.wheelY = (e.deltaY || 0) * 5;\n break;\n }\n \n callback(e);\n });\n } else {\n exports.addListener(el, \"DOMMouseScroll\", function(e) {\n if (e.axis && e.axis == e.HORIZONTAL_AXIS) {\n e.wheelX = (e.detail || 0) * 5;\n e.wheelY = 0;\n } else {\n e.wheelX = 0;\n e.wheelY = (e.detail || 0) * 5;\n }\n callback(e);\n });\n }\n};\n\nexports.addMultiMouseDownListener = function(elements, timeouts, eventHandler, callbackName) {\n var clicks = 0;\n var startX, startY, timer; \n var eventNames = {\n 2: \"dblclick\",\n 3: \"tripleclick\",\n 4: \"quadclick\"\n };\n\n function onMousedown(e) {\n if (exports.getButton(e) !== 0) {\n clicks = 0;\n } else if (e.detail > 1) {\n clicks++;\n if (clicks > 4)\n clicks = 1;\n } else {\n clicks = 1;\n }\n if (useragent.isIE) {\n var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5;\n if (!timer || isNewClick)\n clicks = 1;\n if (timer)\n clearTimeout(timer);\n timer = setTimeout(function() {timer = null;}, timeouts[clicks - 1] || 600);\n\n if (clicks == 1) {\n startX = e.clientX;\n startY = e.clientY;\n }\n }\n \n e._clicks = clicks;\n\n eventHandler[callbackName](\"mousedown\", e);\n\n if (clicks > 4)\n clicks = 0;\n else if (clicks > 1)\n return eventHandler[callbackName](eventNames[clicks], e);\n }\n function onDblclick(e) {\n clicks = 2;\n if (timer)\n clearTimeout(timer);\n timer = setTimeout(function() {timer = null;}, timeouts[clicks - 1] || 600);\n eventHandler[callbackName](\"mousedown\", e);\n eventHandler[callbackName](eventNames[clicks], e);\n }\n if (!Array.isArray(elements))\n elements = [elements];\n elements.forEach(function(el) {\n exports.addListener(el, \"mousedown\", onMousedown);\n if (useragent.isOldIE)\n exports.addListener(el, \"dblclick\", onDblclick);\n });\n};\n\nvar getModifierHash = useragent.isMac && useragent.isOpera && !(\"KeyboardEvent\" in window)\n ? function(e) {\n return 0 | (e.metaKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.ctrlKey ? 8 : 0);\n }\n : function(e) {\n return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0);\n };\n\nexports.getModifierString = function(e) {\n return keys.KEY_MODS[getModifierHash(e)];\n};\n\nfunction normalizeCommandKeys(callback, e, keyCode) {\n var hashId = getModifierHash(e);\n\n if (!useragent.isMac && pressedKeys) {\n if (e.getModifierState && (e.getModifierState(\"OS\") || e.getModifierState(\"Win\")))\n hashId |= 8;\n if (pressedKeys.altGr) {\n if ((3 & hashId) != 3)\n pressedKeys.altGr = 0;\n else\n return;\n }\n if (keyCode === 18 || keyCode === 17) {\n var location = \"location\" in e ? e.location : e.keyLocation;\n if (keyCode === 17 && location === 1) {\n if (pressedKeys[keyCode] == 1)\n ts = e.timeStamp;\n } else if (keyCode === 18 && hashId === 3 && location === 2) {\n var dt = e.timeStamp - ts;\n if (dt < 50)\n pressedKeys.altGr = true;\n }\n }\n }\n \n if (keyCode in keys.MODIFIER_KEYS) {\n keyCode = -1;\n }\n if (hashId & 8 && (keyCode >= 91 && keyCode <= 93)) {\n keyCode = -1;\n }\n \n if (!hashId && keyCode === 13) {\n var location = \"location\" in e ? e.location : e.keyLocation;\n if (location === 3) {\n callback(e, hashId, -keyCode);\n if (e.defaultPrevented)\n return;\n }\n }\n \n if (useragent.isChromeOS && hashId & 8) {\n callback(e, hashId, keyCode);\n if (e.defaultPrevented)\n return;\n else\n hashId &= ~8;\n }\n if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) {\n return false;\n }\n \n return callback(e, hashId, keyCode);\n}\n\n\nexports.addCommandKeyListener = function(el, callback) {\n var addListener = exports.addListener;\n if (useragent.isOldGecko || (useragent.isOpera && !(\"KeyboardEvent\" in window))) {\n var lastKeyDownKeyCode = null;\n addListener(el, \"keydown\", function(e) {\n lastKeyDownKeyCode = e.keyCode;\n });\n addListener(el, \"keypress\", function(e) {\n return normalizeCommandKeys(callback, e, lastKeyDownKeyCode);\n });\n } else {\n var lastDefaultPrevented = null;\n\n addListener(el, \"keydown\", function(e) {\n pressedKeys[e.keyCode] = (pressedKeys[e.keyCode] || 0) + 1;\n var result = normalizeCommandKeys(callback, e, e.keyCode);\n lastDefaultPrevented = e.defaultPrevented;\n return result;\n });\n\n addListener(el, \"keypress\", function(e) {\n if (lastDefaultPrevented && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey)) {\n exports.stopEvent(e);\n lastDefaultPrevented = null;\n }\n });\n\n addListener(el, \"keyup\", function(e) {\n pressedKeys[e.keyCode] = null;\n });\n\n if (!pressedKeys) {\n resetPressedKeys();\n addListener(window, \"focus\", resetPressedKeys);\n }\n }\n};\nfunction resetPressedKeys() {\n pressedKeys = Object.create(null);\n}\n\nif (typeof window == \"object\" && window.postMessage && !useragent.isOldIE) {\n var postMessageId = 1;\n exports.nextTick = function(callback, win) {\n win = win || window;\n var messageName = \"zero-timeout-message-\" + postMessageId;\n exports.addListener(win, \"message\", function listener(e) {\n if (e.data == messageName) {\n exports.stopPropagation(e);\n exports.removeListener(win, \"message\", listener);\n callback();\n }\n });\n win.postMessage(messageName, \"*\");\n };\n}\n\n\nexports.nextFrame = typeof window == \"object\" && (window.requestAnimationFrame\n || window.mozRequestAnimationFrame\n || window.webkitRequestAnimationFrame\n || window.msRequestAnimationFrame\n || window.oRequestAnimationFrame);\n\nif (exports.nextFrame)\n exports.nextFrame = exports.nextFrame.bind(window);\nelse\n exports.nextFrame = function(callback) {\n setTimeout(callback, 17);\n };\n});\n\nace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\n\nexports.last = function(a) {\n return a[a.length - 1];\n};\n\nexports.stringReverse = function(string) {\n return string.split(\"\").reverse().join(\"\");\n};\n\nexports.stringRepeat = function (string, count) {\n var result = '';\n while (count > 0) {\n if (count & 1)\n result += string;\n\n if (count >>= 1)\n string += string;\n }\n return result;\n};\n\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\n\nexports.stringTrimLeft = function (string) {\n return string.replace(trimBeginRegexp, '');\n};\n\nexports.stringTrimRight = function (string) {\n return string.replace(trimEndRegexp, '');\n};\n\nexports.copyObject = function(obj) {\n var copy = {};\n for (var key in obj) {\n copy[key] = obj[key];\n }\n return copy;\n};\n\nexports.copyArray = function(array){\n var copy = [];\n for (var i=0, l=array.length; i PLACEHOLDER.length)\n data = data.substr(9);\n else if (data.substr(0, 4) == PLACEHOLDER.substr(0, 4))\n data = data.substr(4, data.length - PLACEHOLDER.length + 1);\n else if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0))\n data = data.slice(0, -1);\n if (data == PLACEHOLDER.charAt(0)) {\n } else if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0))\n data = data.slice(0, -1);\n\n if (data)\n host.onTextInput(data);\n }\n if (copied) {\n copied = false;\n }\n if (afterContextMenu)\n afterContextMenu = false;\n };\n var onInput = function(e) {\n if (inComposition)\n return;\n var data = text.value;\n sendText(data);\n resetValue();\n };\n\n var handleClipboardData = function(e, data, forceIEMime) {\n var clipboardData = e.clipboardData || window.clipboardData;\n if (!clipboardData || BROKEN_SETDATA)\n return;\n var mime = USE_IE_MIME_TYPE || forceIEMime ? \"Text\" : \"text/plain\";\n try {\n if (data) {\n return clipboardData.setData(mime, data) !== false;\n } else {\n return clipboardData.getData(mime);\n }\n } catch(e) {\n if (!forceIEMime)\n return handleClipboardData(e, data, true);\n }\n };\n\n var doCopy = function(e, isCut) {\n var data = host.getCopyText();\n if (!data)\n return event.preventDefault(e);\n\n if (handleClipboardData(e, data)) {\n if (useragent.isIOS) {\n cut = isCut;\n text.value = \"\\n aa\" + data + \"a a\\n\";\n text.setSelectionRange(4, 4 + data.length);\n copied = {\n value: data\n };\n }\n isCut ? host.onCut() : host.onCopy();\n if (!useragent.isIOS) event.preventDefault(e);\n } else {\n copied = true;\n text.value = data;\n text.select();\n setTimeout(function(){\n copied = false;\n resetValue();\n resetSelection();\n isCut ? host.onCut() : host.onCopy();\n });\n }\n };\n\n var onCut = function(e) {\n doCopy(e, true);\n };\n\n var onCopy = function(e) {\n doCopy(e, false);\n };\n\n var onPaste = function(e) {\n var data = handleClipboardData(e);\n if (typeof data == \"string\") {\n if (data)\n host.onPaste(data, e);\n if (useragent.isIE)\n setTimeout(resetSelection);\n event.preventDefault(e);\n }\n else {\n text.value = \"\";\n pasted = true;\n }\n };\n\n event.addCommandKeyListener(text, host.onCommandKey.bind(host));\n\n event.addListener(text, \"select\", onSelect);\n\n event.addListener(text, \"input\", onInput);\n\n event.addListener(text, \"cut\", onCut);\n event.addListener(text, \"copy\", onCopy);\n event.addListener(text, \"paste\", onPaste);\n var onCompositionStart = function(e) {\n if (inComposition || !host.onCompositionStart || host.$readOnly)\n return;\n inComposition = {};\n inComposition.canUndo = host.session.$undoManager;\n host.onCompositionStart();\n setTimeout(onCompositionUpdate, 0);\n host.on(\"mousedown\", onCompositionEnd);\n if (inComposition.canUndo && !host.selection.isEmpty()) {\n host.insert(\"\");\n host.session.markUndoGroup();\n host.selection.clearSelection();\n }\n host.session.markUndoGroup();\n };\n\n var onCompositionUpdate = function() {\n if (!inComposition || !host.onCompositionUpdate || host.$readOnly)\n return;\n var val = text.value.replace(/\\x01/g, \"\");\n if (inComposition.lastValue === val) return;\n\n host.onCompositionUpdate(val);\n if (inComposition.lastValue)\n host.undo();\n if (inComposition.canUndo)\n inComposition.lastValue = val;\n if (inComposition.lastValue) {\n var r = host.selection.getRange();\n host.insert(inComposition.lastValue);\n host.session.markUndoGroup();\n inComposition.range = host.selection.getRange();\n host.selection.setRange(r);\n host.selection.clearSelection();\n }\n };\n\n var onCompositionEnd = function(e) {\n if (!host.onCompositionEnd || host.$readOnly) return;\n var c = inComposition;\n inComposition = false;\n var timer = setTimeout(function() {\n timer = null;\n var str = text.value.replace(/\\x01/g, \"\");\n if (inComposition)\n return;\n else if (str == c.lastValue)\n resetValue();\n else if (!c.lastValue && str) {\n resetValue();\n sendText(str);\n }\n });\n inputHandler = function compositionInputHandler(str) {\n if (timer)\n clearTimeout(timer);\n str = str.replace(/\\x01/g, \"\");\n if (str == c.lastValue)\n return \"\";\n if (c.lastValue && timer)\n host.undo();\n return str;\n };\n host.onCompositionEnd();\n host.removeListener(\"mousedown\", onCompositionEnd);\n if (e.type == \"compositionend\" && c.range) {\n host.selection.setRange(c.range);\n }\n var needsOnInput =\n (!!useragent.isChrome && useragent.isChrome >= 53) ||\n (!!useragent.isWebKit && useragent.isWebKit >= 603);\n\n if (needsOnInput) {\n onInput();\n }\n };\n\n\n\n var syncComposition = lang.delayedCall(onCompositionUpdate, 50);\n\n event.addListener(text, \"compositionstart\", onCompositionStart);\n if (useragent.isGecko) {\n event.addListener(text, \"text\", function(){syncComposition.schedule();});\n } else {\n event.addListener(text, \"keyup\", function(){syncComposition.schedule();});\n event.addListener(text, \"keydown\", function(){syncComposition.schedule();});\n }\n event.addListener(text, \"compositionend\", onCompositionEnd);\n\n this.getElement = function() {\n return text;\n };\n\n this.setReadOnly = function(readOnly) {\n text.readOnly = readOnly;\n };\n\n this.onContextMenu = function(e) {\n afterContextMenu = true;\n resetSelection(host.selection.isEmpty());\n host._emit(\"nativecontextmenu\", {target: host, domEvent: e});\n this.moveToMouse(e, true);\n };\n\n this.moveToMouse = function(e, bringToFront) {\n if (!tempStyle)\n tempStyle = text.style.cssText;\n text.style.cssText = (bringToFront ? \"z-index:100000;\" : \"\")\n + \"height:\" + text.style.height + \";\"\n + (useragent.isIE ? \"opacity:0.1;\" : \"\");\n\n var rect = host.container.getBoundingClientRect();\n var style = dom.computedStyle(host.container);\n var top = rect.top + (parseInt(style.borderTopWidth) || 0);\n var left = rect.left + (parseInt(rect.borderLeftWidth) || 0);\n var maxTop = rect.bottom - top - text.clientHeight -2;\n var move = function(e) {\n text.style.left = e.clientX - left - 2 + \"px\";\n text.style.top = Math.min(e.clientY - top - 2, maxTop) + \"px\";\n };\n move(e);\n\n if (e.type != \"mousedown\")\n return;\n\n if (host.renderer.$keepTextAreaAtCursor)\n host.renderer.$keepTextAreaAtCursor = null;\n\n clearTimeout(closeTimeout);\n if (useragent.isWin)\n event.capture(host.container, move, onContextMenuClose);\n };\n\n this.onContextMenuClose = onContextMenuClose;\n var closeTimeout;\n function onContextMenuClose() {\n clearTimeout(closeTimeout);\n closeTimeout = setTimeout(function () {\n if (tempStyle) {\n text.style.cssText = tempStyle;\n tempStyle = '';\n }\n if (host.renderer.$keepTextAreaAtCursor == null) {\n host.renderer.$keepTextAreaAtCursor = true;\n host.renderer.$moveTextAreaToCursor();\n }\n }, 0);\n }\n\n var onContextMenu = function(e) {\n host.textInput.onContextMenu(e);\n onContextMenuClose();\n };\n event.addListener(text, \"mouseup\", onContextMenu);\n event.addListener(text, \"mousedown\", function(e) {\n e.preventDefault();\n onContextMenuClose();\n });\n event.addListener(host.renderer.scroller, \"contextmenu\", onContextMenu);\n event.addListener(text, \"contextmenu\", onContextMenu);\n\n if (useragent.isIOS) {\n var typingResetTimeout = null;\n var typing = false;\n\n parentNode.addEventListener(\"keydown\", function (e) {\n if (typingResetTimeout) clearTimeout(typingResetTimeout);\n typing = true;\n });\n\n parentNode.addEventListener(\"keyup\", function (e) {\n typingResetTimeout = setTimeout(function () {\n typing = false;\n }, 100);\n });\n var detectArrowKeys = function(e) {\n if (document.activeElement !== text) return;\n if (typing) return;\n\n if (cut) {\n return setTimeout(function () {\n cut = false;\n }, 100);\n }\n var selectionStart = text.selectionStart;\n var selectionEnd = text.selectionEnd;\n text.setSelectionRange(4, 5);\n if (selectionStart == selectionEnd) {\n switch (selectionStart) {\n case 0: host.onCommandKey(null, 0, KEYS.up); break;\n case 1: host.onCommandKey(null, 0, KEYS.home); break;\n case 2: host.onCommandKey(null, MODS.option, KEYS.left); break;\n case 4: host.onCommandKey(null, 0, KEYS.left); break;\n case 5: host.onCommandKey(null, 0, KEYS.right); break;\n case 7: host.onCommandKey(null, MODS.option, KEYS.right); break;\n case 8: host.onCommandKey(null, 0, KEYS.end); break;\n case 9: host.onCommandKey(null, 0, KEYS.down); break;\n }\n } else {\n switch (selectionEnd) {\n case 6: host.onCommandKey(null, MODS.shift, KEYS.right); break;\n case 7: host.onCommandKey(null, MODS.shift | MODS.option, KEYS.right); break;\n case 8: host.onCommandKey(null, MODS.shift, KEYS.end); break;\n case 9: host.onCommandKey(null, MODS.shift, KEYS.down); break;\n }\n switch (selectionStart) {\n case 0: host.onCommandKey(null, MODS.shift, KEYS.up); break;\n case 1: host.onCommandKey(null, MODS.shift, KEYS.home); break;\n case 2: host.onCommandKey(null, MODS.shift | MODS.option, KEYS.left); break;\n case 3: host.onCommandKey(null, MODS.shift, KEYS.left); break;\n }\n }\n };\n document.addEventListener(\"selectionchange\", detectArrowKeys);\n host.on(\"destroy\", function() {\n document.removeEventListener(\"selectionchange\", detectArrowKeys);\n });\n }\n};\n\nexports.TextInput = TextInput;\n});\n\nace.define(\"ace/keyboard/textinput\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/keyboard/textinput_ios\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar event = acequire(\"../lib/event\");\nvar useragent = acequire(\"../lib/useragent\");\nvar dom = acequire(\"../lib/dom\");\nvar lang = acequire(\"../lib/lang\");\nvar BROKEN_SETDATA = useragent.isChrome < 18;\nvar USE_IE_MIME_TYPE = useragent.isIE;\n\nvar TextInputIOS = acequire(\"./textinput_ios\").TextInput;\nvar TextInput = function(parentNode, host) {\n if (useragent.isIOS)\n return TextInputIOS.call(this, parentNode, host);\n\n var text = dom.createElement(\"textarea\");\n text.className = \"ace_text-input\";\n\n text.setAttribute(\"wrap\", \"off\");\n text.setAttribute(\"autocorrect\", \"off\");\n text.setAttribute(\"autocapitalize\", \"off\");\n text.setAttribute(\"spellcheck\", false);\n\n text.style.opacity = \"0\";\n parentNode.insertBefore(text, parentNode.firstChild);\n\n var PLACEHOLDER = \"\\u2028\\u2028\";\n\n var copied = false;\n var pasted = false;\n var inComposition = false;\n var tempStyle = '';\n var isSelectionEmpty = true;\n try { var isFocused = document.activeElement === text; } catch(e) {}\n \n event.addListener(text, \"blur\", function(e) {\n host.onBlur(e);\n isFocused = false;\n });\n event.addListener(text, \"focus\", function(e) {\n isFocused = true;\n host.onFocus(e);\n resetSelection();\n });\n this.focus = function() {\n if (tempStyle) return text.focus();\n var top = text.style.top;\n text.style.position = \"fixed\";\n text.style.top = \"0px\";\n text.focus();\n setTimeout(function() {\n text.style.position = \"\";\n if (text.style.top == \"0px\")\n text.style.top = top;\n }, 0);\n };\n this.blur = function() {\n text.blur();\n };\n this.isFocused = function() {\n return isFocused;\n };\n var syncSelection = lang.delayedCall(function() {\n isFocused && resetSelection(isSelectionEmpty);\n });\n var syncValue = lang.delayedCall(function() {\n if (!inComposition) {\n text.value = PLACEHOLDER;\n isFocused && resetSelection();\n }\n });\n\n function resetSelection(isEmpty) {\n if (inComposition)\n return;\n inComposition = true;\n \n if (inputHandler) {\n var selectionStart = 0;\n var selectionEnd = isEmpty ? 0 : text.value.length - 1;\n } else {\n var selectionStart = isEmpty ? 2 : 1;\n var selectionEnd = 2;\n }\n try {\n text.setSelectionRange(selectionStart, selectionEnd);\n } catch(e){}\n \n inComposition = false;\n }\n\n function resetValue() {\n if (inComposition)\n return;\n text.value = PLACEHOLDER;\n if (useragent.isWebKit)\n syncValue.schedule();\n }\n\n useragent.isWebKit || host.addEventListener('changeSelection', function() {\n if (host.selection.isEmpty() != isSelectionEmpty) {\n isSelectionEmpty = !isSelectionEmpty;\n syncSelection.schedule();\n }\n });\n\n resetValue();\n if (isFocused)\n host.onFocus();\n\n\n var isAllSelected = function(text) {\n return text.selectionStart === 0 && text.selectionEnd === text.value.length;\n };\n\n var onSelect = function(e) {\n if (copied) {\n copied = false;\n } else if (isAllSelected(text)) {\n host.selectAll();\n resetSelection();\n } else if (inputHandler) {\n resetSelection(host.selection.isEmpty());\n }\n };\n\n var inputHandler = null;\n this.setInputHandler = function(cb) {inputHandler = cb;};\n this.getInputHandler = function() {return inputHandler;};\n var afterContextMenu = false;\n \n var sendText = function(data) {\n if (inputHandler) {\n data = inputHandler(data);\n inputHandler = null;\n }\n if (pasted) {\n resetSelection();\n if (data)\n host.onPaste(data);\n pasted = false;\n } else if (data == PLACEHOLDER.charAt(0)) {\n if (afterContextMenu)\n host.execCommand(\"del\", {source: \"ace\"});\n else // some versions of android do not fire keydown when pressing backspace\n host.execCommand(\"backspace\", {source: \"ace\"});\n } else {\n if (data.substring(0, 2) == PLACEHOLDER)\n data = data.substr(2);\n else if (data.charAt(0) == PLACEHOLDER.charAt(0))\n data = data.substr(1);\n else if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0))\n data = data.slice(0, -1);\n if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0))\n data = data.slice(0, -1);\n \n if (data)\n host.onTextInput(data);\n }\n if (afterContextMenu)\n afterContextMenu = false;\n };\n var onInput = function(e) {\n if (inComposition)\n return;\n var data = text.value;\n sendText(data);\n resetValue();\n };\n \n var handleClipboardData = function(e, data, forceIEMime) {\n var clipboardData = e.clipboardData || window.clipboardData;\n if (!clipboardData || BROKEN_SETDATA)\n return;\n var mime = USE_IE_MIME_TYPE || forceIEMime ? \"Text\" : \"text/plain\";\n try {\n if (data) {\n return clipboardData.setData(mime, data) !== false;\n } else {\n return clipboardData.getData(mime);\n }\n } catch(e) {\n if (!forceIEMime)\n return handleClipboardData(e, data, true);\n }\n };\n\n var doCopy = function(e, isCut) {\n var data = host.getCopyText();\n if (!data)\n return event.preventDefault(e);\n\n if (handleClipboardData(e, data)) {\n isCut ? host.onCut() : host.onCopy();\n event.preventDefault(e);\n } else {\n copied = true;\n text.value = data;\n text.select();\n setTimeout(function(){\n copied = false;\n resetValue();\n resetSelection();\n isCut ? host.onCut() : host.onCopy();\n });\n }\n };\n \n var onCut = function(e) {\n doCopy(e, true);\n };\n \n var onCopy = function(e) {\n doCopy(e, false);\n };\n \n var onPaste = function(e) {\n var data = handleClipboardData(e);\n if (typeof data == \"string\") {\n if (data)\n host.onPaste(data, e);\n if (useragent.isIE)\n setTimeout(resetSelection);\n event.preventDefault(e);\n }\n else {\n text.value = \"\";\n pasted = true;\n }\n };\n\n event.addCommandKeyListener(text, host.onCommandKey.bind(host));\n\n event.addListener(text, \"select\", onSelect);\n\n event.addListener(text, \"input\", onInput);\n\n event.addListener(text, \"cut\", onCut);\n event.addListener(text, \"copy\", onCopy);\n event.addListener(text, \"paste\", onPaste);\n if (!('oncut' in text) || !('oncopy' in text) || !('onpaste' in text)) {\n event.addListener(parentNode, \"keydown\", function(e) {\n if ((useragent.isMac && !e.metaKey) || !e.ctrlKey)\n return;\n\n switch (e.keyCode) {\n case 67:\n onCopy(e);\n break;\n case 86:\n onPaste(e);\n break;\n case 88:\n onCut(e);\n break;\n }\n });\n }\n var onCompositionStart = function(e) {\n if (inComposition || !host.onCompositionStart || host.$readOnly) \n return;\n inComposition = {};\n inComposition.canUndo = host.session.$undoManager;\n host.onCompositionStart();\n setTimeout(onCompositionUpdate, 0);\n host.on(\"mousedown\", onCompositionEnd);\n if (inComposition.canUndo && !host.selection.isEmpty()) {\n host.insert(\"\");\n host.session.markUndoGroup();\n host.selection.clearSelection();\n }\n host.session.markUndoGroup();\n };\n\n var onCompositionUpdate = function() {\n if (!inComposition || !host.onCompositionUpdate || host.$readOnly)\n return;\n var val = text.value.replace(/\\u2028/g, \"\");\n if (inComposition.lastValue === val) return;\n \n host.onCompositionUpdate(val);\n if (inComposition.lastValue)\n host.undo();\n if (inComposition.canUndo)\n inComposition.lastValue = val;\n if (inComposition.lastValue) {\n var r = host.selection.getRange();\n host.insert(inComposition.lastValue);\n host.session.markUndoGroup();\n inComposition.range = host.selection.getRange();\n host.selection.setRange(r);\n host.selection.clearSelection();\n }\n };\n\n var onCompositionEnd = function(e) {\n if (!host.onCompositionEnd || host.$readOnly) return;\n var c = inComposition;\n inComposition = false;\n var timer = setTimeout(function() {\n timer = null;\n var str = text.value.replace(/\\u2028/g, \"\");\n if (inComposition)\n return;\n else if (str == c.lastValue)\n resetValue();\n else if (!c.lastValue && str) {\n resetValue();\n sendText(str);\n }\n });\n inputHandler = function compositionInputHandler(str) {\n if (timer)\n clearTimeout(timer);\n str = str.replace(/\\u2028/g, \"\");\n if (str == c.lastValue)\n return \"\";\n if (c.lastValue && timer)\n host.undo();\n return str;\n };\n host.onCompositionEnd();\n host.removeListener(\"mousedown\", onCompositionEnd);\n if (e.type == \"compositionend\" && c.range) {\n host.selection.setRange(c.range);\n }\n var needsOnInput =\n (!!useragent.isChrome && useragent.isChrome >= 53) ||\n (!!useragent.isWebKit && useragent.isWebKit >= 603);\n\n if (needsOnInput) {\n onInput();\n }\n };\n \n \n\n var syncComposition = lang.delayedCall(onCompositionUpdate, 50);\n\n event.addListener(text, \"compositionstart\", onCompositionStart);\n if (useragent.isGecko) {\n event.addListener(text, \"text\", function(){syncComposition.schedule();});\n } else {\n event.addListener(text, \"keyup\", function(){syncComposition.schedule();});\n event.addListener(text, \"keydown\", function(){syncComposition.schedule();});\n }\n event.addListener(text, \"compositionend\", onCompositionEnd);\n\n this.getElement = function() {\n return text;\n };\n\n this.setReadOnly = function(readOnly) {\n text.readOnly = readOnly;\n };\n\n this.onContextMenu = function(e) {\n afterContextMenu = true;\n resetSelection(host.selection.isEmpty());\n host._emit(\"nativecontextmenu\", {target: host, domEvent: e});\n this.moveToMouse(e, true);\n };\n \n this.moveToMouse = function(e, bringToFront) {\n if (!tempStyle)\n tempStyle = text.style.cssText;\n text.style.cssText = (bringToFront ? \"z-index:100000;\" : \"\")\n + \"height:\" + text.style.height + \";\"\n + (useragent.isIE ? \"opacity:0.1;\" : \"\");\n\n var rect = host.container.getBoundingClientRect();\n var style = dom.computedStyle(host.container);\n var top = rect.top + (parseInt(style.borderTopWidth) || 0);\n var left = rect.left + (parseInt(rect.borderLeftWidth) || 0);\n var maxTop = rect.bottom - top - text.clientHeight -2;\n var move = function(e) {\n text.style.left = e.clientX - left - 2 + \"px\";\n text.style.top = Math.min(e.clientY - top - 2, maxTop) + \"px\";\n }; \n move(e);\n\n if (e.type != \"mousedown\")\n return;\n\n if (host.renderer.$keepTextAreaAtCursor)\n host.renderer.$keepTextAreaAtCursor = null;\n\n clearTimeout(closeTimeout);\n if (useragent.isWin)\n event.capture(host.container, move, onContextMenuClose);\n };\n\n this.onContextMenuClose = onContextMenuClose;\n var closeTimeout;\n function onContextMenuClose() {\n clearTimeout(closeTimeout);\n closeTimeout = setTimeout(function () {\n if (tempStyle) {\n text.style.cssText = tempStyle;\n tempStyle = '';\n }\n if (host.renderer.$keepTextAreaAtCursor == null) {\n host.renderer.$keepTextAreaAtCursor = true;\n host.renderer.$moveTextAreaToCursor();\n }\n }, 0);\n }\n\n var onContextMenu = function(e) {\n host.textInput.onContextMenu(e);\n onContextMenuClose();\n };\n event.addListener(text, \"mouseup\", onContextMenu);\n event.addListener(text, \"mousedown\", function(e) {\n e.preventDefault();\n onContextMenuClose();\n });\n event.addListener(host.renderer.scroller, \"contextmenu\", onContextMenu);\n event.addListener(text, \"contextmenu\", onContextMenu);\n};\n\nexports.TextInput = TextInput;\n});\n\nace.define(\"ace/mouse/default_handlers\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar dom = acequire(\"../lib/dom\");\nvar event = acequire(\"../lib/event\");\nvar useragent = acequire(\"../lib/useragent\");\n\nvar DRAG_OFFSET = 0; // pixels\nvar SCROLL_COOLDOWN_T = 250; // milliseconds\n\nfunction DefaultHandlers(mouseHandler) {\n mouseHandler.$clickSelection = null;\n\n var editor = mouseHandler.editor;\n editor.setDefaultHandler(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n editor.setDefaultHandler(\"dblclick\", this.onDoubleClick.bind(mouseHandler));\n editor.setDefaultHandler(\"tripleclick\", this.onTripleClick.bind(mouseHandler));\n editor.setDefaultHandler(\"quadclick\", this.onQuadClick.bind(mouseHandler));\n editor.setDefaultHandler(\"mousewheel\", this.onMouseWheel.bind(mouseHandler));\n editor.setDefaultHandler(\"touchmove\", this.onTouchMove.bind(mouseHandler));\n\n var exports = [\"select\", \"startSelect\", \"selectEnd\", \"selectAllEnd\", \"selectByWordsEnd\",\n \"selectByLinesEnd\", \"dragWait\", \"dragWaitEnd\", \"focusWait\"];\n\n exports.forEach(function(x) {\n mouseHandler[x] = this[x];\n }, this);\n\n mouseHandler.selectByLines = this.extendSelectionBy.bind(mouseHandler, \"getLineRange\");\n mouseHandler.selectByWords = this.extendSelectionBy.bind(mouseHandler, \"getWordRange\");\n}\n\n(function() {\n\n this.onMouseDown = function(ev) {\n var inSelection = ev.inSelection();\n var pos = ev.getDocumentPosition();\n this.mousedownEvent = ev;\n var editor = this.editor;\n\n var button = ev.getButton();\n if (button !== 0) {\n var selectionRange = editor.getSelectionRange();\n var selectionEmpty = selectionRange.isEmpty();\n editor.$blockScrolling++;\n if (selectionEmpty || button == 1)\n editor.selection.moveToPosition(pos);\n editor.$blockScrolling--;\n if (button == 2) {\n editor.textInput.onContextMenu(ev.domEvent);\n if (!useragent.isMozilla)\n ev.preventDefault();\n }\n return;\n }\n\n this.mousedownEvent.time = Date.now();\n if (inSelection && !editor.isFocused()) {\n editor.focus();\n if (this.$focusTimout && !this.$clickSelection && !editor.inMultiSelectMode) {\n this.setState(\"focusWait\");\n this.captureMouse(ev);\n return;\n }\n }\n\n this.captureMouse(ev);\n this.startSelect(pos, ev.domEvent._clicks > 1);\n return ev.preventDefault();\n };\n\n this.startSelect = function(pos, waitForClickSelection) {\n pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y);\n var editor = this.editor;\n editor.$blockScrolling++;\n if (this.mousedownEvent.getShiftKey())\n editor.selection.selectToPosition(pos);\n else if (!waitForClickSelection)\n editor.selection.moveToPosition(pos);\n if (!waitForClickSelection)\n this.select();\n if (editor.renderer.scroller.setCapture) {\n editor.renderer.scroller.setCapture();\n }\n editor.setStyle(\"ace_selecting\");\n this.setState(\"select\");\n editor.$blockScrolling--;\n };\n\n this.select = function() {\n var anchor, editor = this.editor;\n var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n editor.$blockScrolling++;\n if (this.$clickSelection) {\n var cmp = this.$clickSelection.comparePoint(cursor);\n\n if (cmp == -1) {\n anchor = this.$clickSelection.end;\n } else if (cmp == 1) {\n anchor = this.$clickSelection.start;\n } else {\n var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n cursor = orientedRange.cursor;\n anchor = orientedRange.anchor;\n }\n editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n }\n editor.selection.selectToPosition(cursor);\n editor.$blockScrolling--;\n editor.renderer.scrollCursorIntoView();\n };\n\n this.extendSelectionBy = function(unitName) {\n var anchor, editor = this.editor;\n var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n var range = editor.selection[unitName](cursor.row, cursor.column);\n editor.$blockScrolling++;\n if (this.$clickSelection) {\n var cmpStart = this.$clickSelection.comparePoint(range.start);\n var cmpEnd = this.$clickSelection.comparePoint(range.end);\n\n if (cmpStart == -1 && cmpEnd <= 0) {\n anchor = this.$clickSelection.end;\n if (range.end.row != cursor.row || range.end.column != cursor.column)\n cursor = range.start;\n } else if (cmpEnd == 1 && cmpStart >= 0) {\n anchor = this.$clickSelection.start;\n if (range.start.row != cursor.row || range.start.column != cursor.column)\n cursor = range.end;\n } else if (cmpStart == -1 && cmpEnd == 1) {\n cursor = range.end;\n anchor = range.start;\n } else {\n var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n cursor = orientedRange.cursor;\n anchor = orientedRange.anchor;\n }\n editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n }\n editor.selection.selectToPosition(cursor);\n editor.$blockScrolling--;\n editor.renderer.scrollCursorIntoView();\n };\n\n this.selectEnd =\n this.selectAllEnd =\n this.selectByWordsEnd =\n this.selectByLinesEnd = function() {\n this.$clickSelection = null;\n this.editor.unsetStyle(\"ace_selecting\");\n if (this.editor.renderer.scroller.releaseCapture) {\n this.editor.renderer.scroller.releaseCapture();\n }\n };\n\n this.focusWait = function() {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n var time = Date.now();\n\n if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimout)\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n };\n\n this.onDoubleClick = function(ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\n var session = editor.session;\n\n var range = session.getBracketRange(pos);\n if (range) {\n if (range.isEmpty()) {\n range.start.column--;\n range.end.column++;\n }\n this.setState(\"select\");\n } else {\n range = editor.selection.getWordRange(pos.row, pos.column);\n this.setState(\"selectByWords\");\n }\n this.$clickSelection = range;\n this.select();\n };\n\n this.onTripleClick = function(ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\n\n this.setState(\"selectByLines\");\n var range = editor.getSelectionRange();\n if (range.isMultiLine() && range.contains(pos.row, pos.column)) {\n this.$clickSelection = editor.selection.getLineRange(range.start.row);\n this.$clickSelection.end = editor.selection.getLineRange(range.end.row).end;\n } else {\n this.$clickSelection = editor.selection.getLineRange(pos.row);\n }\n this.select();\n };\n\n this.onQuadClick = function(ev) {\n var editor = this.editor;\n\n editor.selectAll();\n this.$clickSelection = editor.getSelectionRange();\n this.setState(\"selectAll\");\n };\n\n this.onMouseWheel = function(ev) {\n if (ev.getAccelKey())\n return;\n if (ev.getShiftKey() && ev.wheelY && !ev.wheelX) {\n ev.wheelX = ev.wheelY;\n ev.wheelY = 0;\n }\n \n var editor = this.editor;\n\n if (!this.$lastScroll)\n this.$lastScroll = { t: 0, vx: 0, vy: 0, allowed: 0 };\n\n var prevScroll = this.$lastScroll;\n var t = ev.domEvent.timeStamp;\n var dt = t - prevScroll.t;\n var vx = ev.wheelX / dt;\n var vy = ev.wheelY / dt;\n if (dt < SCROLL_COOLDOWN_T) {\n vx = (vx + prevScroll.vx) / 2;\n vy = (vy + prevScroll.vy) / 2;\n }\n\n var direction = Math.abs(vx / vy);\n\n var canScroll = false;\n if (direction >= 1 && editor.renderer.isScrollableBy(ev.wheelX * ev.speed, 0))\n canScroll = true;\n if (direction <= 1 && editor.renderer.isScrollableBy(0, ev.wheelY * ev.speed))\n canScroll = true;\n\n if (canScroll) {\n prevScroll.allowed = t;\n } else if (t - prevScroll.allowed < SCROLL_COOLDOWN_T) {\n var isSlower = Math.abs(vx) <= 1.1 * Math.abs(prevScroll.vx)\n && Math.abs(vy) <= 1.1 * Math.abs(prevScroll.vy);\n if (isSlower) {\n canScroll = true;\n prevScroll.allowed = t;\n }\n else {\n prevScroll.allowed = 0;\n }\n }\n\n prevScroll.t = t;\n prevScroll.vx = vx;\n prevScroll.vy = vy;\n\n if (canScroll) {\n editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\n return ev.stop();\n }\n };\n\n this.onTouchMove = function(ev) {\n this.editor._emit(\"mousewheel\", ev);\n };\n\n}).call(DefaultHandlers.prototype);\n\nexports.DefaultHandlers = DefaultHandlers;\n\nfunction calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\n\nfunction calcRangeOrientation(range, cursor) {\n if (range.start.row == range.end.row)\n var cmp = 2 * cursor.column - range.start.column - range.end.column;\n else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column)\n var cmp = cursor.column - 4;\n else\n var cmp = 2 * cursor.row - range.start.row - range.end.row;\n\n if (cmp < 0)\n return {cursor: range.start, anchor: range.end};\n else\n return {cursor: range.end, anchor: range.start};\n}\n\n});\n\nace.define(\"ace/tooltip\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar dom = acequire(\"./lib/dom\");\nfunction Tooltip (parentNode) {\n this.isOpen = false;\n this.$element = null;\n this.$parentNode = parentNode;\n}\n\n(function() {\n this.$init = function() {\n this.$element = dom.createElement(\"div\");\n this.$element.className = \"ace_tooltip\";\n this.$element.style.display = \"none\";\n this.$parentNode.appendChild(this.$element);\n return this.$element;\n };\n this.getElement = function() {\n return this.$element || this.$init();\n };\n this.setText = function(text) {\n dom.setInnerText(this.getElement(), text);\n };\n this.setHtml = function(html) {\n this.getElement().innerHTML = html;\n };\n this.setPosition = function(x, y) {\n this.getElement().style.left = x + \"px\";\n this.getElement().style.top = y + \"px\";\n };\n this.setClassName = function(className) {\n dom.addCssClass(this.getElement(), className);\n };\n this.show = function(text, x, y) {\n if (text != null)\n this.setText(text);\n if (x != null && y != null)\n this.setPosition(x, y);\n if (!this.isOpen) {\n this.getElement().style.display = \"block\";\n this.isOpen = true;\n }\n };\n\n this.hide = function() {\n if (this.isOpen) {\n this.getElement().style.display = \"none\";\n this.isOpen = false;\n }\n };\n this.getHeight = function() {\n return this.getElement().offsetHeight;\n };\n this.getWidth = function() {\n return this.getElement().offsetWidth;\n };\n\n this.destroy = function() {\n this.isOpen = false;\n if (this.$element && this.$element.parentNode) {\n this.$element.parentNode.removeChild(this.$element);\n }\n };\n\n}).call(Tooltip.prototype);\n\nexports.Tooltip = Tooltip;\n});\n\nace.define(\"ace/mouse/default_gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event\",\"ace/tooltip\"], function(acequire, exports, module) {\n\"use strict\";\nvar dom = acequire(\"../lib/dom\");\nvar oop = acequire(\"../lib/oop\");\nvar event = acequire(\"../lib/event\");\nvar Tooltip = acequire(\"../tooltip\").Tooltip;\n\nfunction GutterHandler(mouseHandler) {\n var editor = mouseHandler.editor;\n var gutter = editor.renderer.$gutterLayer;\n var tooltip = new GutterTooltip(editor.container);\n\n mouseHandler.editor.setDefaultHandler(\"guttermousedown\", function(e) {\n if (!editor.isFocused() || e.getButton() != 0)\n return;\n var gutterRegion = gutter.getRegion(e);\n\n if (gutterRegion == \"foldWidgets\")\n return;\n\n var row = e.getDocumentPosition().row;\n var selection = editor.session.selection;\n\n if (e.getShiftKey())\n selection.selectTo(row, 0);\n else {\n if (e.domEvent.detail == 2) {\n editor.selectAll();\n return e.preventDefault();\n }\n mouseHandler.$clickSelection = editor.selection.getLineRange(row);\n }\n mouseHandler.setState(\"selectByLines\");\n mouseHandler.captureMouse(e);\n return e.preventDefault();\n });\n\n\n var tooltipTimeout, mouseEvent, tooltipAnnotation;\n\n function showTooltip() {\n var row = mouseEvent.getDocumentPosition().row;\n var annotation = gutter.$annotations[row];\n if (!annotation)\n return hideTooltip();\n\n var maxRow = editor.session.getLength();\n if (row == maxRow) {\n var screenRow = editor.renderer.pixelToScreenCoordinates(0, mouseEvent.y).row;\n var pos = mouseEvent.$pos;\n if (screenRow > editor.session.documentToScreenRow(pos.row, pos.column))\n return hideTooltip();\n }\n\n if (tooltipAnnotation == annotation)\n return;\n tooltipAnnotation = annotation.text.join(\"
\");\n\n tooltip.setHtml(tooltipAnnotation);\n tooltip.show();\n editor._signal(\"showGutterTooltip\", tooltip);\n editor.on(\"mousewheel\", hideTooltip);\n\n if (mouseHandler.$tooltipFollowsMouse) {\n moveTooltip(mouseEvent);\n } else {\n var gutterElement = mouseEvent.domEvent.target;\n var rect = gutterElement.getBoundingClientRect();\n var style = tooltip.getElement().style;\n style.left = rect.right + \"px\";\n style.top = rect.bottom + \"px\";\n }\n }\n\n function hideTooltip() {\n if (tooltipTimeout)\n tooltipTimeout = clearTimeout(tooltipTimeout);\n if (tooltipAnnotation) {\n tooltip.hide();\n tooltipAnnotation = null;\n editor._signal(\"hideGutterTooltip\", tooltip);\n editor.removeEventListener(\"mousewheel\", hideTooltip);\n }\n }\n\n function moveTooltip(e) {\n tooltip.setPosition(e.x, e.y);\n }\n\n mouseHandler.editor.setDefaultHandler(\"guttermousemove\", function(e) {\n var target = e.domEvent.target || e.domEvent.srcElement;\n if (dom.hasCssClass(target, \"ace_fold-widget\"))\n return hideTooltip();\n\n if (tooltipAnnotation && mouseHandler.$tooltipFollowsMouse)\n moveTooltip(e);\n\n mouseEvent = e;\n if (tooltipTimeout)\n return;\n tooltipTimeout = setTimeout(function() {\n tooltipTimeout = null;\n if (mouseEvent && !mouseHandler.isMousePressed)\n showTooltip();\n else\n hideTooltip();\n }, 50);\n });\n\n event.addListener(editor.renderer.$gutter, \"mouseout\", function(e) {\n mouseEvent = null;\n if (!tooltipAnnotation || tooltipTimeout)\n return;\n\n tooltipTimeout = setTimeout(function() {\n tooltipTimeout = null;\n hideTooltip();\n }, 50);\n });\n \n editor.on(\"changeSession\", hideTooltip);\n}\n\nfunction GutterTooltip(parentNode) {\n Tooltip.call(this, parentNode);\n}\n\noop.inherits(GutterTooltip, Tooltip);\n\n(function(){\n this.setPosition = function(x, y) {\n var windowWidth = window.innerWidth || document.documentElement.clientWidth;\n var windowHeight = window.innerHeight || document.documentElement.clientHeight;\n var width = this.getWidth();\n var height = this.getHeight();\n x += 15;\n y += 15;\n if (x + width > windowWidth) {\n x -= (x + width) - windowWidth;\n }\n if (y + height > windowHeight) {\n y -= 20 + height;\n }\n Tooltip.prototype.setPosition.call(this, x, y);\n };\n\n}).call(GutterTooltip.prototype);\n\n\n\nexports.GutterHandler = GutterHandler;\n\n});\n\nace.define(\"ace/mouse/mouse_event\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar event = acequire(\"../lib/event\");\nvar useragent = acequire(\"../lib/useragent\");\nvar MouseEvent = exports.MouseEvent = function(domEvent, editor) {\n this.domEvent = domEvent;\n this.editor = editor;\n \n this.x = this.clientX = domEvent.clientX;\n this.y = this.clientY = domEvent.clientY;\n\n this.$pos = null;\n this.$inSelection = null;\n \n this.propagationStopped = false;\n this.defaultPrevented = false;\n};\n\n(function() { \n \n this.stopPropagation = function() {\n event.stopPropagation(this.domEvent);\n this.propagationStopped = true;\n };\n \n this.preventDefault = function() {\n event.preventDefault(this.domEvent);\n this.defaultPrevented = true;\n };\n \n this.stop = function() {\n this.stopPropagation();\n this.preventDefault();\n };\n this.getDocumentPosition = function() {\n if (this.$pos)\n return this.$pos;\n \n this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY);\n return this.$pos;\n };\n this.inSelection = function() {\n if (this.$inSelection !== null)\n return this.$inSelection;\n \n var editor = this.editor;\n \n\n var selectionRange = editor.getSelectionRange();\n if (selectionRange.isEmpty())\n this.$inSelection = false;\n else {\n var pos = this.getDocumentPosition();\n this.$inSelection = selectionRange.contains(pos.row, pos.column);\n }\n\n return this.$inSelection;\n };\n this.getButton = function() {\n return event.getButton(this.domEvent);\n };\n this.getShiftKey = function() {\n return this.domEvent.shiftKey;\n };\n \n this.getAccelKey = useragent.isMac\n ? function() { return this.domEvent.metaKey; }\n : function() { return this.domEvent.ctrlKey; };\n \n}).call(MouseEvent.prototype);\n\n});\n\nace.define(\"ace/mouse/dragdrop_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar dom = acequire(\"../lib/dom\");\nvar event = acequire(\"../lib/event\");\nvar useragent = acequire(\"../lib/useragent\");\n\nvar AUTOSCROLL_DELAY = 200;\nvar SCROLL_CURSOR_DELAY = 200;\nvar SCROLL_CURSOR_HYSTERESIS = 5;\n\nfunction DragdropHandler(mouseHandler) {\n\n var editor = mouseHandler.editor;\n\n var blankImage = dom.createElement(\"img\");\n blankImage.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n if (useragent.isOpera)\n blankImage.style.cssText = \"width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;\";\n\n var exports = [\"dragWait\", \"dragWaitEnd\", \"startDrag\", \"dragReadyEnd\", \"onMouseDrag\"];\n\n exports.forEach(function(x) {\n mouseHandler[x] = this[x];\n }, this);\n editor.addEventListener(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n\n\n var mouseTarget = editor.container;\n var dragSelectionMarker, x, y;\n var timerId, range;\n var dragCursor, counter = 0;\n var dragOperation;\n var isInternal;\n var autoScrollStartTime;\n var cursorMovedTime;\n var cursorPointOnCaretMoved;\n\n this.onDragStart = function(e) {\n if (this.cancelDrag || !mouseTarget.draggable) {\n var self = this;\n setTimeout(function(){\n self.startSelect();\n self.captureMouse(e);\n }, 0);\n return e.preventDefault();\n }\n range = editor.getSelectionRange();\n\n var dataTransfer = e.dataTransfer;\n dataTransfer.effectAllowed = editor.getReadOnly() ? \"copy\" : \"copyMove\";\n if (useragent.isOpera) {\n editor.container.appendChild(blankImage);\n blankImage.scrollTop = 0;\n }\n dataTransfer.setDragImage && dataTransfer.setDragImage(blankImage, 0, 0);\n if (useragent.isOpera) {\n editor.container.removeChild(blankImage);\n }\n dataTransfer.clearData();\n dataTransfer.setData(\"Text\", editor.session.getTextRange());\n\n isInternal = true;\n this.setState(\"drag\");\n };\n\n this.onDragEnd = function(e) {\n mouseTarget.draggable = false;\n isInternal = false;\n this.setState(null);\n if (!editor.getReadOnly()) {\n var dropEffect = e.dataTransfer.dropEffect;\n if (!dragOperation && dropEffect == \"move\")\n editor.session.remove(editor.getSelectionRange());\n editor.renderer.$cursorLayer.setBlinking(true);\n }\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n };\n\n this.onDragEnter = function(e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n return;\n x = e.clientX;\n y = e.clientY;\n if (!dragSelectionMarker)\n addDragMarker();\n counter++;\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n\n this.onDragOver = function(e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n return;\n x = e.clientX;\n y = e.clientY;\n if (!dragSelectionMarker) {\n addDragMarker();\n counter++;\n }\n if (onMouseMoveTimer !== null)\n onMouseMoveTimer = null;\n\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n\n this.onDragLeave = function(e) {\n counter--;\n if (counter <= 0 && dragSelectionMarker) {\n clearDragMarker();\n dragOperation = null;\n return event.preventDefault(e);\n }\n };\n\n this.onDrop = function(e) {\n if (!dragCursor)\n return;\n var dataTransfer = e.dataTransfer;\n if (isInternal) {\n switch (dragOperation) {\n case \"move\":\n if (range.contains(dragCursor.row, dragCursor.column)) {\n range = {\n start: dragCursor,\n end: dragCursor\n };\n } else {\n range = editor.moveText(range, dragCursor);\n }\n break;\n case \"copy\":\n range = editor.moveText(range, dragCursor, true);\n break;\n }\n } else {\n var dropData = dataTransfer.getData('Text');\n range = {\n start: dragCursor,\n end: editor.session.insert(dragCursor, dropData)\n };\n editor.focus();\n dragOperation = null;\n }\n clearDragMarker();\n return event.preventDefault(e);\n };\n\n event.addListener(mouseTarget, \"dragstart\", this.onDragStart.bind(mouseHandler));\n event.addListener(mouseTarget, \"dragend\", this.onDragEnd.bind(mouseHandler));\n event.addListener(mouseTarget, \"dragenter\", this.onDragEnter.bind(mouseHandler));\n event.addListener(mouseTarget, \"dragover\", this.onDragOver.bind(mouseHandler));\n event.addListener(mouseTarget, \"dragleave\", this.onDragLeave.bind(mouseHandler));\n event.addListener(mouseTarget, \"drop\", this.onDrop.bind(mouseHandler));\n\n function scrollCursorIntoView(cursor, prevCursor) {\n var now = Date.now();\n var vMovement = !prevCursor || cursor.row != prevCursor.row;\n var hMovement = !prevCursor || cursor.column != prevCursor.column;\n if (!cursorMovedTime || vMovement || hMovement) {\n editor.$blockScrolling += 1;\n editor.moveCursorToPosition(cursor);\n editor.$blockScrolling -= 1;\n cursorMovedTime = now;\n cursorPointOnCaretMoved = {x: x, y: y};\n } else {\n var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y);\n if (distance > SCROLL_CURSOR_HYSTERESIS) {\n cursorMovedTime = null;\n } else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) {\n editor.renderer.scrollCursorIntoView();\n cursorMovedTime = null;\n }\n }\n }\n\n function autoScroll(cursor, prevCursor) {\n var now = Date.now();\n var lineHeight = editor.renderer.layerConfig.lineHeight;\n var characterWidth = editor.renderer.layerConfig.characterWidth;\n var editorRect = editor.renderer.scroller.getBoundingClientRect();\n var offsets = {\n x: {\n left: x - editorRect.left,\n right: editorRect.right - x\n },\n y: {\n top: y - editorRect.top,\n bottom: editorRect.bottom - y\n }\n };\n var nearestXOffset = Math.min(offsets.x.left, offsets.x.right);\n var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom);\n var scrollCursor = {row: cursor.row, column: cursor.column};\n if (nearestXOffset / characterWidth <= 2) {\n scrollCursor.column += (offsets.x.left < offsets.x.right ? -3 : +2);\n }\n if (nearestYOffset / lineHeight <= 1) {\n scrollCursor.row += (offsets.y.top < offsets.y.bottom ? -1 : +1);\n }\n var vScroll = cursor.row != scrollCursor.row;\n var hScroll = cursor.column != scrollCursor.column;\n var vMovement = !prevCursor || cursor.row != prevCursor.row;\n if (vScroll || (hScroll && !vMovement)) {\n if (!autoScrollStartTime)\n autoScrollStartTime = now;\n else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY)\n editor.renderer.scrollCursorIntoView(scrollCursor);\n } else {\n autoScrollStartTime = null;\n }\n }\n\n function onDragInterval() {\n var prevCursor = dragCursor;\n dragCursor = editor.renderer.screenToTextCoordinates(x, y);\n scrollCursorIntoView(dragCursor, prevCursor);\n autoScroll(dragCursor, prevCursor);\n }\n\n function addDragMarker() {\n range = editor.selection.toOrientedRange();\n dragSelectionMarker = editor.session.addMarker(range, \"ace_selection\", editor.getSelectionStyle());\n editor.clearSelection();\n if (editor.isFocused())\n editor.renderer.$cursorLayer.setBlinking(false);\n clearInterval(timerId);\n onDragInterval();\n timerId = setInterval(onDragInterval, 20);\n counter = 0;\n event.addListener(document, \"mousemove\", onMouseMove);\n }\n\n function clearDragMarker() {\n clearInterval(timerId);\n editor.session.removeMarker(dragSelectionMarker);\n dragSelectionMarker = null;\n editor.$blockScrolling += 1;\n editor.selection.fromOrientedRange(range);\n editor.$blockScrolling -= 1;\n if (editor.isFocused() && !isInternal)\n editor.renderer.$cursorLayer.setBlinking(!editor.getReadOnly());\n range = null;\n dragCursor = null;\n counter = 0;\n autoScrollStartTime = null;\n cursorMovedTime = null;\n event.removeListener(document, \"mousemove\", onMouseMove);\n }\n var onMouseMoveTimer = null;\n function onMouseMove() {\n if (onMouseMoveTimer == null) {\n onMouseMoveTimer = setTimeout(function() {\n if (onMouseMoveTimer != null && dragSelectionMarker)\n clearDragMarker();\n }, 20);\n }\n }\n\n function canAccept(dataTransfer) {\n var types = dataTransfer.types;\n return !types || Array.prototype.some.call(types, function(type) {\n return type == 'text/plain' || type == 'Text';\n });\n }\n\n function getDropEffect(e) {\n var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized'];\n var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized'];\n\n var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey;\n var effectAllowed = \"uninitialized\";\n try {\n effectAllowed = e.dataTransfer.effectAllowed.toLowerCase();\n } catch (e) {}\n var dropEffect = \"none\";\n\n if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"copy\";\n else if (moveAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"move\";\n else if (copyAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"copy\";\n\n return dropEffect;\n }\n}\n\n(function() {\n\n this.dragWait = function() {\n var interval = Date.now() - this.mousedownEvent.time;\n if (interval > this.editor.getDragDelay())\n this.startDrag();\n };\n\n this.dragWaitEnd = function() {\n var target = this.editor.container;\n target.draggable = false;\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n this.selectEnd();\n };\n\n this.dragReadyEnd = function(e) {\n this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly());\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n this.dragWaitEnd();\n };\n\n this.startDrag = function(){\n this.cancelDrag = false;\n var editor = this.editor;\n var target = editor.container;\n target.draggable = true;\n editor.renderer.$cursorLayer.setBlinking(false);\n editor.setStyle(\"ace_dragging\");\n var cursorStyle = useragent.isWin ? \"default\" : \"move\";\n editor.renderer.setCursorStyle(cursorStyle);\n this.setState(\"dragReady\");\n };\n\n this.onMouseDrag = function(e) {\n var target = this.editor.container;\n if (useragent.isIE && this.state == \"dragReady\") {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n if (distance > 3)\n target.dragDrop();\n }\n if (this.state === \"dragWait\") {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n if (distance > 0) {\n target.draggable = false;\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n }\n }\n };\n\n this.onMouseDown = function(e) {\n if (!this.$dragEnabled)\n return;\n this.mousedownEvent = e;\n var editor = this.editor;\n\n var inSelection = e.inSelection();\n var button = e.getButton();\n var clickCount = e.domEvent.detail || 1;\n if (clickCount === 1 && button === 0 && inSelection) {\n if (e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey()))\n return;\n this.mousedownEvent.time = Date.now();\n var eventTarget = e.domEvent.target || e.domEvent.srcElement;\n if (\"unselectable\" in eventTarget)\n eventTarget.unselectable = \"on\";\n if (editor.getDragDelay()) {\n if (useragent.isWebKit) {\n this.cancelDrag = true;\n var mouseTarget = editor.container;\n mouseTarget.draggable = true;\n }\n this.setState(\"dragWait\");\n } else {\n this.startDrag();\n }\n this.captureMouse(e, this.onMouseDrag.bind(this));\n e.defaultPrevented = true;\n }\n };\n\n}).call(DragdropHandler.prototype);\n\n\nfunction calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\n\nexports.DragdropHandler = DragdropHandler;\n\n});\n\nace.define(\"ace/lib/net\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(acequire, exports, module) {\n\"use strict\";\nvar dom = acequire(\"./dom\");\n\nexports.get = function (url, callback) {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n callback(xhr.responseText);\n }\n };\n xhr.send(null);\n};\n\nexports.loadScript = function(path, callback) {\n var head = dom.getDocumentHead();\n var s = document.createElement('script');\n\n s.src = path;\n head.appendChild(s);\n\n s.onload = s.onreadystatechange = function(_, isAbort) {\n if (isAbort || !s.readyState || s.readyState == \"loaded\" || s.readyState == \"complete\") {\n s = s.onload = s.onreadystatechange = null;\n if (!isAbort)\n callback();\n }\n };\n};\nexports.qualifyURL = function(url) {\n var a = document.createElement('a');\n a.href = url;\n return a.href;\n};\n\n});\n\nace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar EventEmitter = {};\nvar stopPropagation = function() { this.propagationStopped = true; };\nvar preventDefault = function() { this.defaultPrevented = true; };\n\nEventEmitter._emit =\nEventEmitter._dispatchEvent = function(eventName, e) {\n this._eventRegistry || (this._eventRegistry = {});\n this._defaultHandlers || (this._defaultHandlers = {});\n\n var listeners = this._eventRegistry[eventName] || [];\n var defaultHandler = this._defaultHandlers[eventName];\n if (!listeners.length && !defaultHandler)\n return;\n\n if (typeof e != \"object\" || !e)\n e = {};\n\n if (!e.type)\n e.type = eventName;\n if (!e.stopPropagation)\n e.stopPropagation = stopPropagation;\n if (!e.preventDefault)\n e.preventDefault = preventDefault;\n\n listeners = listeners.slice();\n for (var i=0; i 1)\n base = parts[parts.length - 2];\n var path = options[component + \"Path\"];\n if (path == null) {\n path = options.basePath;\n } else if (sep == \"/\") {\n component = sep = \"\";\n }\n if (path && path.slice(-1) != \"/\")\n path += \"/\";\n return path + component + sep + base + this.get(\"suffix\");\n};\n\nexports.setModuleUrl = function(name, subst) {\n return options.$moduleUrls[name] = subst;\n};\n\nexports.$loading = {};\nexports.loadModule = function(moduleName, onLoad) {\n var module, moduleType;\n if (Array.isArray(moduleName)) {\n moduleType = moduleName[0];\n moduleName = moduleName[1];\n }\n\n try {\n module = acequire(moduleName);\n } catch (e) {}\n if (module && !exports.$loading[moduleName])\n return onLoad && onLoad(module);\n\n if (!exports.$loading[moduleName])\n exports.$loading[moduleName] = [];\n\n exports.$loading[moduleName].push(onLoad);\n\n if (exports.$loading[moduleName].length > 1)\n return;\n\n var afterLoad = function() {\n acequire([moduleName], function(module) {\n exports._emit(\"load.module\", {name: moduleName, module: module});\n var listeners = exports.$loading[moduleName];\n exports.$loading[moduleName] = null;\n listeners.forEach(function(onLoad) {\n onLoad && onLoad(module);\n });\n });\n };\n\n if (!exports.get(\"packaged\"))\n return afterLoad();\n net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad);\n};\ninit(true);function init(packaged) {\n\n if (!global || !global.document)\n return;\n \n options.packaged = packaged || acequire.packaged || module.packaged || (global.define && define.packaged);\n\n var scriptOptions = {};\n var scriptUrl = \"\";\n var currentScript = (document.currentScript || document._currentScript ); // native or polyfill\n var currentDocument = currentScript && currentScript.ownerDocument || document;\n \n var scripts = currentDocument.getElementsByTagName(\"script\");\n for (var i=0; i 0){\n\t\t\tif (action == 0x10){\n\t\t\t\tfor(i = condPos; i < ix; i++){\n\t\t\t\t\tlevels[i] = 1;\n\t\t\t\t}\n\t\t\t\tcondPos = -1;\n\t\t\t} else {\n\t\t\t\tcondPos = -1;\n\t\t\t}\n\t\t}\n\t\tcond = impTab[newState][6];\n\t\tif (cond){\n\t\t\tif(condPos == -1){\n\t\t\t\tcondPos = ix;\n\t\t\t}\n\t\t}else{\n\t\t\tif (condPos > -1){\n\t\t\t\tfor(i = condPos; i < ix; i++){\n\t\t\t\t\tlevels[i] = newLevel;\n\t\t\t\t}\n\t\t\t\tcondPos = -1;\n\t\t\t}\n\t\t}\n\t\tif (charTypes[ix] == B){\n\t\t\tlevels[ix] = 0;\n\t\t}\n\t\thiLevel |= newLevel;\n\t}\n\tif (hasUBAT_S){\n\t\tfor(i = 0; i < len; i++){\n\t\t\tif(charTypes[i] == S){\n\t\t\t\tlevels[i] = dir;\n\t\t\t\tfor(var j = i - 1; j >= 0; j--){\n\t\t\t\t\tif(charTypes[j] == WS){\n\t\t\t\t\t\tlevels[j] = dir;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction _invertLevel(lev, levels, _array) {\n\tif (hiLevel < lev){\n\t\treturn;\n\t}\n\tif (lev == 1 && dir == RTL && !hasUBAT_B){\n\t\t_array.reverse();\n\t\treturn;\n\t}\n\tvar len = _array.length, start = 0, end, lo, hi, tmp;\n\twhile(start < len){\n\t\tif (levels[start] >= lev){\n\t\t\tend = start + 1;\n\t\twhile(end < len && levels[end] >= lev){\n\t\t\tend++;\n\t\t}\n\t\tfor(lo = start, hi = end - 1 ; lo < hi; lo++, hi--){\n\t\t\ttmp = _array[lo];\n\t\t\t_array[lo] = _array[hi];\n\t\t\t_array[hi] = tmp;\n\t\t}\n\t\tstart = end;\n\t}\n\tstart++;\n\t}\n}\n\nfunction _getCharClass(chars, types, classes, ix) {\n\tvar cType = types[ix], wType, nType, len, i;\n\tswitch(cType){\n\t\tcase L:\n\t\tcase R:\n\t\t\tlastArabic = false;\n\t\tcase ON:\n\t\tcase AN:\n\t\t\treturn cType;\n\t\tcase EN:\n\t\t\treturn lastArabic ? AN : EN;\n\t\tcase AL:\n\t\t\tlastArabic = true;\n\t\t\thasUBAT_AL = true;\n\t\t\treturn R;\n\t\tcase WS:\n\t\t\treturn ON;\n\t\tcase CS:\n\t\t\tif (ix < 1 || (ix + 1) >= types.length ||\n\t\t\t\t((wType = classes[ix - 1]) != EN && wType != AN) ||\n\t\t\t\t((nType = types[ix + 1]) != EN && nType != AN)){\n\t\t\t\treturn ON;\n\t\t\t}\n\t\t\tif (lastArabic){nType = AN;}\n\t\t\treturn nType == wType ? nType : ON;\n\t\tcase ES:\n\t\t\twType = ix > 0 ? classes[ix - 1] : B;\n\t\t\tif (wType == EN && (ix + 1) < types.length && types[ix + 1] == EN){\n\t\t\t\treturn EN;\n\t\t\t}\n\t\t\treturn ON;\n\t\tcase ET:\n\t\t\tif (ix > 0 && classes[ix - 1] == EN){\n\t\t\t\treturn EN;\n\t\t\t}\n\t\t\tif (lastArabic){\n\t\t\t\treturn ON;\n\t\t\t}\n\t\t\ti = ix + 1;\n\t\t\tlen = types.length;\n\t\t\twhile (i < len && types[i] == ET){\n\t\t\t\ti++;\n\t\t\t}\n\t\t\tif (i < len && types[i] == EN){\n\t\t\t\treturn EN;\n\t\t\t}\n\t\t\treturn ON;\n\t\tcase NSM:\n\t\t\tlen = types.length;\n\t\t\ti = ix + 1;\n\t\t\twhile (i < len && types[i] == NSM){\n\t\t\t\ti++;\n\t\t\t}\n\t\t\tif (i < len){\n\t\t\t\tvar c = chars[ix], rtlCandidate = (c >= 0x0591 && c <= 0x08FF) || c == 0xFB1E;\n\n\t\t\t\twType = types[i];\n\t\t\t\tif (rtlCandidate && (wType == R || wType == AL)){\n\t\t\t\t\treturn R;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (ix < 1 || (wType = types[ix - 1]) == B){\n\t\t\t\treturn ON;\n\t\t\t}\n\t\t\treturn classes[ix - 1];\n\t\tcase B:\n\t\t\tlastArabic = false;\n\t\t\thasUBAT_B = true;\n\t\t\treturn dir;\n\t\tcase S:\n\t\t\thasUBAT_S = true;\n\t\t\treturn ON;\n\t\tcase LRE:\n\t\tcase RLE:\n\t\tcase LRO:\n\t\tcase RLO:\n\t\tcase PDF:\n\t\t\tlastArabic = false;\n\t\tcase BN:\n\t\t\treturn ON;\n\t}\n}\n\nfunction _getCharacterType( ch ) {\n\tvar uc = ch.charCodeAt(0), hi = uc >> 8;\n\n\tif (hi == 0) {\n\t\treturn ((uc > 0x00BF) ? L : UnicodeTBL00[uc]);\n\t} else if (hi == 5) {\n\t\treturn (/[\\u0591-\\u05f4]/.test(ch) ? R : L);\n\t} else if (hi == 6) {\n\t\tif (/[\\u0610-\\u061a\\u064b-\\u065f\\u06d6-\\u06e4\\u06e7-\\u06ed]/.test(ch))\n\t\t\treturn NSM;\n\t\telse if (/[\\u0660-\\u0669\\u066b-\\u066c]/.test(ch))\n\t\t\treturn AN;\n\t\telse if (uc == 0x066A)\n\t\t\treturn ET;\n\t\telse if (/[\\u06f0-\\u06f9]/.test(ch))\n\t\t\treturn EN;\n\t\telse\n\t\t\treturn AL;\n\t} else if (hi == 0x20 && uc <= 0x205F) {\n\t\treturn UnicodeTBL20[uc & 0xFF];\n\t} else if (hi == 0xFE) {\n\t\treturn (uc >= 0xFE70 ? AL : ON);\n\t}\n\treturn ON;\n}\n\nfunction _isArabicDiacritics( ch ) {\n\treturn (ch >= '\\u064b' && ch <= '\\u0655');\n}\nexports.L = L;\nexports.R = R;\nexports.EN = EN;\nexports.ON_R = 3;\nexports.AN = 4;\nexports.R_H = 5;\nexports.B = 6;\n\nexports.DOT = \"\\xB7\";\nexports.doBidiReorder = function(text, textCharTypes, isRtl) {\n\tif (text.length < 2)\n\t\treturn {};\n\n\tvar chars = text.split(\"\"), logicalFromVisual = new Array(chars.length),\n\t\tbidiLevels = new Array(chars.length), levels = [];\n\n\tdir = isRtl ? RTL : LTR;\n\n\t_computeLevels(chars, levels, chars.length, textCharTypes);\n\n\tfor (var i = 0; i < logicalFromVisual.length; logicalFromVisual[i] = i, i++);\n\n\t_invertLevel(2, levels, logicalFromVisual);\n\t_invertLevel(1, levels, logicalFromVisual);\n\n\tfor (var i = 0; i < logicalFromVisual.length - 1; i++) { //fix levels to reflect character width\n\t\tif (textCharTypes[i] === AN) {\n\t\t\tlevels[i] = exports.AN;\n\t\t} else if (levels[i] === R && ((textCharTypes[i] > AL && textCharTypes[i] < LRE)\n\t\t\t|| textCharTypes[i] === ON || textCharTypes[i] === BN)) {\n\t\t\tlevels[i] = exports.ON_R;\n\t\t} else if ((i > 0 && chars[i - 1] === '\\u0644') && /\\u0622|\\u0623|\\u0625|\\u0627/.test(chars[i])) {\n\t\t\tlevels[i - 1] = levels[i] = exports.R_H;\n\t\t\ti++;\n\t\t}\n\t}\n\tif (chars[chars.length - 1] === exports.DOT)\n\t\tlevels[chars.length - 1] = exports.B;\n\n\tfor (var i = 0; i < logicalFromVisual.length; i++) {\n\t\tbidiLevels[i] = levels[logicalFromVisual[i]];\n\t}\n\n\treturn {'logicalFromVisual': logicalFromVisual, 'bidiLevels': bidiLevels};\n};\nexports.hasBidiCharacters = function(text, textCharTypes){\n\tvar ret = false;\n\tfor (var i = 0; i < text.length; i++){\n\t\ttextCharTypes[i] = _getCharacterType(text.charAt(i));\n\t\tif (!ret && (textCharTypes[i] == R || textCharTypes[i] == AL))\n\t\t\tret = true;\n\t}\n\treturn ret;\n};\nexports.getVisualFromLogicalIdx = function(logIdx, rowMap) {\n\tfor (var i = 0; i < rowMap.logicalFromVisual.length; i++) {\n\t\tif (rowMap.logicalFromVisual[i] == logIdx)\n\t\t\treturn i;\n\t}\n\treturn 0;\n};\n\n});\n\nace.define(\"ace/bidihandler\",[\"require\",\"exports\",\"module\",\"ace/lib/bidiutil\",\"ace/lib/lang\",\"ace/lib/useragent\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar bidiUtil = acequire(\"./lib/bidiutil\");\nvar lang = acequire(\"./lib/lang\");\nvar useragent = acequire(\"./lib/useragent\");\nvar bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\nvar BidiHandler = function(session) {\n this.session = session;\n this.bidiMap = {};\n this.currentRow = null;\n this.bidiUtil = bidiUtil;\n this.charWidths = [];\n this.EOL = \"\\xAC\";\n this.showInvisibles = true;\n this.isRtlDir = false;\n this.line = \"\";\n this.wrapIndent = 0;\n this.isLastRow = false;\n this.EOF = \"\\xB6\";\n this.seenBidi = false;\n};\n\n(function() {\n this.isBidiRow = function(screenRow, docRow, splitIndex) {\n if (!this.seenBidi)\n return false;\n if (screenRow !== this.currentRow) {\n this.currentRow = screenRow;\n this.updateRowLine(docRow, splitIndex);\n this.updateBidiMap();\n }\n return this.bidiMap.bidiLevels;\n };\n\n this.onChange = function(delta) {\n if (!this.seenBidi) {\n if (delta.action == \"insert\" && bidiRE.test(delta.lines.join(\"\\n\"))) {\n this.seenBidi = true;\n this.currentRow = null;\n }\n }\n else {\n this.currentRow = null;\n }\n };\n\n this.getDocumentRow = function() {\n var docRow = 0;\n var rowCache = this.session.$screenRowCache;\n if (rowCache.length) {\n var index = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n if (index >= 0)\n docRow = this.session.$docRowCache[index];\n }\n\n return docRow;\n };\n\n this.getSplitIndex = function() {\n var splitIndex = 0;\n var rowCache = this.session.$screenRowCache;\n if (rowCache.length) {\n var currentIndex, prevIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n while (this.currentRow - splitIndex > 0) {\n currentIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow - splitIndex - 1);\n if (currentIndex !== prevIndex)\n break;\n\n prevIndex = currentIndex;\n splitIndex++;\n }\n }\n\n return splitIndex;\n };\n\n this.updateRowLine = function(docRow, splitIndex) {\n if (docRow === undefined)\n docRow = this.getDocumentRow();\n\n this.wrapIndent = 0;\n this.isLastRow = (docRow === this.session.getLength() - 1);\n this.line = this.session.getLine(docRow);\n if (this.session.$useWrapMode) {\n var splits = this.session.$wrapData[docRow];\n if (splits) {\n if (splitIndex === undefined)\n splitIndex = this.getSplitIndex();\n\n if(splitIndex > 0 && splits.length) {\n this.wrapIndent = splits.indent;\n this.line = (splitIndex < splits.length) ?\n this.line.substring(splits[splitIndex - 1], splits[splits.length - 1]) :\n this.line.substring(splits[splits.length - 1]);\n } else {\n this.line = this.line.substring(0, splits[splitIndex]);\n }\n }\n }\n var session = this.session, shift = 0, size;\n this.line = this.line.replace(/\\t|[\\u1100-\\u2029, \\u202F-\\uFFE6]/g, function(ch, i){\n if (ch === '\\t' || session.isFullWidth(ch.charCodeAt(0))) {\n size = (ch === '\\t') ? session.getScreenTabSize(i + shift) : 2;\n shift += size - 1;\n return lang.stringRepeat(bidiUtil.DOT, size);\n }\n return ch;\n });\n };\n\n this.updateBidiMap = function() {\n var textCharTypes = [], endOfLine = this.isLastRow ? this.EOF : this.EOL;\n var line = this.line + (this.showInvisibles ? endOfLine : bidiUtil.DOT);\n if (bidiUtil.hasBidiCharacters(line, textCharTypes)) {\n this.bidiMap = bidiUtil.doBidiReorder(line, textCharTypes, this.isRtlDir);\n } else {\n this.bidiMap = {};\n }\n };\n this.markAsDirty = function() {\n this.currentRow = null;\n };\n this.updateCharacterWidths = function(fontMetrics) {\n if (!this.seenBidi)\n return;\n if (this.characterWidth === fontMetrics.$characterSize.width)\n return;\n\n var characterWidth = this.characterWidth = fontMetrics.$characterSize.width;\n var bidiCharWidth = fontMetrics.$measureCharWidth(\"\\u05d4\");\n\n this.charWidths[bidiUtil.L] = this.charWidths[bidiUtil.EN] = this.charWidths[bidiUtil.ON_R] = characterWidth;\n this.charWidths[bidiUtil.R] = this.charWidths[bidiUtil.AN] = bidiCharWidth;\n this.charWidths[bidiUtil.R_H] = useragent.isChrome ? bidiCharWidth : bidiCharWidth * 0.45;\n this.charWidths[bidiUtil.B] = 0;\n\n this.currentRow = null;\n };\n\n this.getShowInvisibles = function() {\n return this.showInvisibles;\n };\n\n this.setShowInvisibles = function(showInvisibles) {\n this.showInvisibles = showInvisibles;\n this.currentRow = null;\n };\n\n this.setEolChar = function(eolChar) {\n this.EOL = eolChar;\n };\n\n this.setTextDir = function(isRtlDir) {\n this.isRtlDir = isRtlDir;\n };\n this.getPosLeft = function(col) {\n col -= this.wrapIndent;\n var visualIdx = bidiUtil.getVisualFromLogicalIdx(col > 0 ? col - 1 : 0, this.bidiMap),\n levels = this.bidiMap.bidiLevels, left = 0;\n\n if (col === 0 && levels[visualIdx] % 2 !== 0)\n visualIdx++;\n\n for (var i = 0; i < visualIdx; i++) {\n left += this.charWidths[levels[i]];\n }\n\n if (col !== 0 && levels[visualIdx] % 2 === 0)\n left += this.charWidths[levels[visualIdx]];\n\n if (this.wrapIndent)\n left += this.wrapIndent * this.charWidths[bidiUtil.L];\n\n return left;\n };\n this.getSelections = function(startCol, endCol) {\n var map = this.bidiMap, levels = map.bidiLevels, level, offset = this.wrapIndent * this.charWidths[bidiUtil.L], selections = [],\n selColMin = Math.min(startCol, endCol) - this.wrapIndent, selColMax = Math.max(startCol, endCol) - this.wrapIndent,\n isSelected = false, isSelectedPrev = false, selectionStart = 0;\n\n for (var logIdx, visIdx = 0; visIdx < levels.length; visIdx++) {\n logIdx = map.logicalFromVisual[visIdx];\n level = levels[visIdx];\n isSelected = (logIdx >= selColMin) && (logIdx < selColMax);\n if (isSelected && !isSelectedPrev) {\n selectionStart = offset;\n } else if (!isSelected && isSelectedPrev) {\n selections.push({left: selectionStart, width: offset - selectionStart});\n }\n offset += this.charWidths[level];\n isSelectedPrev = isSelected;\n }\n\n if (isSelected && (visIdx === levels.length)) {\n selections.push({left: selectionStart, width: offset - selectionStart});\n }\n\n return selections;\n };\n this.offsetToCol = function(posX) {\n var logicalIdx = 0, posX = Math.max(posX, 0),\n offset = 0, visualIdx = 0, levels = this.bidiMap.bidiLevels,\n charWidth = this.charWidths[levels[visualIdx]];\n\n if (this.wrapIndent) {\n posX -= this.wrapIndent * this.charWidths[bidiUtil.L];\n }\n\n while(posX > offset + charWidth/2) {\n offset += charWidth;\n if(visualIdx === levels.length - 1) {\n charWidth = 0;\n break;\n }\n charWidth = this.charWidths[levels[++visualIdx]];\n }\n\n if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && (levels[visualIdx] % 2 === 0)){\n if(posX < offset)\n visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n\n } else if (visualIdx > 0 && (levels[visualIdx - 1] % 2 === 0) && (levels[visualIdx] % 2 !== 0)){\n logicalIdx = 1 + ((posX > offset) ? this.bidiMap.logicalFromVisual[visualIdx]\n : this.bidiMap.logicalFromVisual[visualIdx - 1]);\n\n } else if ((this.isRtlDir && visualIdx === levels.length - 1 && charWidth === 0 && (levels[visualIdx - 1] % 2 === 0))\n || (!this.isRtlDir && visualIdx === 0 && (levels[visualIdx] % 2 !== 0))){\n logicalIdx = 1 + this.bidiMap.logicalFromVisual[visualIdx];\n } else {\n if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && charWidth !== 0)\n visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n }\n\n return (logicalIdx + this.wrapIndent);\n };\n\n}).call(BidiHandler.prototype);\n\nexports.BidiHandler = BidiHandler;\n});\n\nace.define(\"ace/range\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\nvar comparePoints = function(p1, p2) {\n return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function(startRow, startColumn, endRow, endColumn) {\n this.start = {\n row: startRow,\n column: startColumn\n };\n\n this.end = {\n row: endRow,\n column: endColumn\n };\n};\n\n(function() {\n this.isEqual = function(range) {\n return this.start.row === range.start.row &&\n this.end.row === range.end.row &&\n this.start.column === range.start.column &&\n this.end.column === range.end.column;\n };\n this.toString = function() {\n return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n };\n\n this.contains = function(row, column) {\n return this.compare(row, column) == 0;\n };\n this.compareRange = function(range) {\n var cmp,\n end = range.end,\n start = range.start;\n\n cmp = this.compare(end.row, end.column);\n if (cmp == 1) {\n cmp = this.compare(start.row, start.column);\n if (cmp == 1) {\n return 2;\n } else if (cmp == 0) {\n return 1;\n } else {\n return 0;\n }\n } else if (cmp == -1) {\n return -2;\n } else {\n cmp = this.compare(start.row, start.column);\n if (cmp == -1) {\n return -1;\n } else if (cmp == 1) {\n return 42;\n } else {\n return 0;\n }\n }\n };\n this.comparePoint = function(p) {\n return this.compare(p.row, p.column);\n };\n this.containsRange = function(range) {\n return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n };\n this.intersects = function(range) {\n var cmp = this.compareRange(range);\n return (cmp == -1 || cmp == 0 || cmp == 1);\n };\n this.isEnd = function(row, column) {\n return this.end.row == row && this.end.column == column;\n };\n this.isStart = function(row, column) {\n return this.start.row == row && this.start.column == column;\n };\n this.setStart = function(row, column) {\n if (typeof row == \"object\") {\n this.start.column = row.column;\n this.start.row = row.row;\n } else {\n this.start.row = row;\n this.start.column = column;\n }\n };\n this.setEnd = function(row, column) {\n if (typeof row == \"object\") {\n this.end.column = row.column;\n this.end.row = row.row;\n } else {\n this.end.row = row;\n this.end.column = column;\n }\n };\n this.inside = function(row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isEnd(row, column) || this.isStart(row, column)) {\n return false;\n } else {\n return true;\n }\n }\n return false;\n };\n this.insideStart = function(row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isEnd(row, column)) {\n return false;\n } else {\n return true;\n }\n }\n return false;\n };\n this.insideEnd = function(row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isStart(row, column)) {\n return false;\n } else {\n return true;\n }\n }\n return false;\n };\n this.compare = function(row, column) {\n if (!this.isMultiLine()) {\n if (row === this.start.row) {\n return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n }\n }\n\n if (row < this.start.row)\n return -1;\n\n if (row > this.end.row)\n return 1;\n\n if (this.start.row === row)\n return column >= this.start.column ? 0 : -1;\n\n if (this.end.row === row)\n return column <= this.end.column ? 0 : 1;\n\n return 0;\n };\n this.compareStart = function(row, column) {\n if (this.start.row == row && this.start.column == column) {\n return -1;\n } else {\n return this.compare(row, column);\n }\n };\n this.compareEnd = function(row, column) {\n if (this.end.row == row && this.end.column == column) {\n return 1;\n } else {\n return this.compare(row, column);\n }\n };\n this.compareInside = function(row, column) {\n if (this.end.row == row && this.end.column == column) {\n return 1;\n } else if (this.start.row == row && this.start.column == column) {\n return -1;\n } else {\n return this.compare(row, column);\n }\n };\n this.clipRows = function(firstRow, lastRow) {\n if (this.end.row > lastRow)\n var end = {row: lastRow + 1, column: 0};\n else if (this.end.row < firstRow)\n var end = {row: firstRow, column: 0};\n\n if (this.start.row > lastRow)\n var start = {row: lastRow + 1, column: 0};\n else if (this.start.row < firstRow)\n var start = {row: firstRow, column: 0};\n\n return Range.fromPoints(start || this.start, end || this.end);\n };\n this.extend = function(row, column) {\n var cmp = this.compare(row, column);\n\n if (cmp == 0)\n return this;\n else if (cmp == -1)\n var start = {row: row, column: column};\n else\n var end = {row: row, column: column};\n\n return Range.fromPoints(start || this.start, end || this.end);\n };\n\n this.isEmpty = function() {\n return (this.start.row === this.end.row && this.start.column === this.end.column);\n };\n this.isMultiLine = function() {\n return (this.start.row !== this.end.row);\n };\n this.clone = function() {\n return Range.fromPoints(this.start, this.end);\n };\n this.collapseRows = function() {\n if (this.end.column == 0)\n return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0);\n else\n return new Range(this.start.row, 0, this.end.row, 0);\n };\n this.toScreenRange = function(session) {\n var screenPosStart = session.documentToScreenPosition(this.start);\n var screenPosEnd = session.documentToScreenPosition(this.end);\n\n return new Range(\n screenPosStart.row, screenPosStart.column,\n screenPosEnd.row, screenPosEnd.column\n );\n };\n this.moveBy = function(row, column) {\n this.start.row += row;\n this.start.column += column;\n this.end.row += row;\n this.end.column += column;\n };\n\n}).call(Range.prototype);\nRange.fromPoints = function(start, end) {\n return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\n\nRange.comparePoints = function(p1, p2) {\n return p1.row - p2.row || p1.column - p2.column;\n};\n\n\nexports.Range = Range;\n});\n\nace.define(\"ace/selection\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar lang = acequire(\"./lib/lang\");\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\nvar Range = acequire(\"./range\").Range;\nvar Selection = function(session) {\n this.session = session;\n this.doc = session.getDocument();\n\n this.clearSelection();\n this.lead = this.selectionLead = this.doc.createAnchor(0, 0);\n this.anchor = this.selectionAnchor = this.doc.createAnchor(0, 0);\n\n var self = this;\n this.lead.on(\"change\", function(e) {\n self._emit(\"changeCursor\");\n if (!self.$isEmpty)\n self._emit(\"changeSelection\");\n if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column)\n self.$desiredColumn = null;\n });\n\n this.selectionAnchor.on(\"change\", function() {\n if (!self.$isEmpty)\n self._emit(\"changeSelection\");\n });\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.isEmpty = function() {\n return (this.$isEmpty || (\n this.anchor.row == this.lead.row &&\n this.anchor.column == this.lead.column\n ));\n };\n this.isMultiLine = function() {\n if (this.isEmpty()) {\n return false;\n }\n\n return this.getRange().isMultiLine();\n };\n this.getCursor = function() {\n return this.lead.getPosition();\n };\n this.setSelectionAnchor = function(row, column) {\n this.anchor.setPosition(row, column);\n\n if (this.$isEmpty) {\n this.$isEmpty = false;\n this._emit(\"changeSelection\");\n }\n };\n this.getSelectionAnchor = function() {\n if (this.$isEmpty)\n return this.getSelectionLead();\n else\n return this.anchor.getPosition();\n };\n this.getSelectionLead = function() {\n return this.lead.getPosition();\n };\n this.shiftSelection = function(columns) {\n if (this.$isEmpty) {\n this.moveCursorTo(this.lead.row, this.lead.column + columns);\n return;\n }\n\n var anchor = this.getSelectionAnchor();\n var lead = this.getSelectionLead();\n\n var isBackwards = this.isBackwards();\n\n if (!isBackwards || anchor.column !== 0)\n this.setSelectionAnchor(anchor.row, anchor.column + columns);\n\n if (isBackwards || lead.column !== 0) {\n this.$moveSelection(function() {\n this.moveCursorTo(lead.row, lead.column + columns);\n });\n }\n };\n this.isBackwards = function() {\n var anchor = this.anchor;\n var lead = this.lead;\n return (anchor.row > lead.row || (anchor.row == lead.row && anchor.column > lead.column));\n };\n this.getRange = function() {\n var anchor = this.anchor;\n var lead = this.lead;\n\n if (this.isEmpty())\n return Range.fromPoints(lead, lead);\n\n if (this.isBackwards()) {\n return Range.fromPoints(lead, anchor);\n }\n else {\n return Range.fromPoints(anchor, lead);\n }\n };\n this.clearSelection = function() {\n if (!this.$isEmpty) {\n this.$isEmpty = true;\n this._emit(\"changeSelection\");\n }\n };\n this.selectAll = function() {\n var lastRow = this.doc.getLength() - 1;\n this.setSelectionAnchor(0, 0);\n this.moveCursorTo(lastRow, this.doc.getLine(lastRow).length);\n };\n this.setRange =\n this.setSelectionRange = function(range, reverse) {\n if (reverse) {\n this.setSelectionAnchor(range.end.row, range.end.column);\n this.selectTo(range.start.row, range.start.column);\n } else {\n this.setSelectionAnchor(range.start.row, range.start.column);\n this.selectTo(range.end.row, range.end.column);\n }\n if (this.getRange().isEmpty())\n this.$isEmpty = true;\n this.$desiredColumn = null;\n };\n\n this.$moveSelection = function(mover) {\n var lead = this.lead;\n if (this.$isEmpty)\n this.setSelectionAnchor(lead.row, lead.column);\n\n mover.call(this);\n };\n this.selectTo = function(row, column) {\n this.$moveSelection(function() {\n this.moveCursorTo(row, column);\n });\n };\n this.selectToPosition = function(pos) {\n this.$moveSelection(function() {\n this.moveCursorToPosition(pos);\n });\n };\n this.moveTo = function(row, column) {\n this.clearSelection();\n this.moveCursorTo(row, column);\n };\n this.moveToPosition = function(pos) {\n this.clearSelection();\n this.moveCursorToPosition(pos);\n };\n this.selectUp = function() {\n this.$moveSelection(this.moveCursorUp);\n };\n this.selectDown = function() {\n this.$moveSelection(this.moveCursorDown);\n };\n this.selectRight = function() {\n this.$moveSelection(this.moveCursorRight);\n };\n this.selectLeft = function() {\n this.$moveSelection(this.moveCursorLeft);\n };\n this.selectLineStart = function() {\n this.$moveSelection(this.moveCursorLineStart);\n };\n this.selectLineEnd = function() {\n this.$moveSelection(this.moveCursorLineEnd);\n };\n this.selectFileEnd = function() {\n this.$moveSelection(this.moveCursorFileEnd);\n };\n this.selectFileStart = function() {\n this.$moveSelection(this.moveCursorFileStart);\n };\n this.selectWordRight = function() {\n this.$moveSelection(this.moveCursorWordRight);\n };\n this.selectWordLeft = function() {\n this.$moveSelection(this.moveCursorWordLeft);\n };\n this.getWordRange = function(row, column) {\n if (typeof column == \"undefined\") {\n var cursor = row || this.lead;\n row = cursor.row;\n column = cursor.column;\n }\n return this.session.getWordRange(row, column);\n };\n this.selectWord = function() {\n this.setSelectionRange(this.getWordRange());\n };\n this.selectAWord = function() {\n var cursor = this.getCursor();\n var range = this.session.getAWordRange(cursor.row, cursor.column);\n this.setSelectionRange(range);\n };\n\n this.getLineRange = function(row, excludeLastChar) {\n var rowStart = typeof row == \"number\" ? row : this.lead.row;\n var rowEnd;\n\n var foldLine = this.session.getFoldLine(rowStart);\n if (foldLine) {\n rowStart = foldLine.start.row;\n rowEnd = foldLine.end.row;\n } else {\n rowEnd = rowStart;\n }\n if (excludeLastChar === true)\n return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length);\n else\n return new Range(rowStart, 0, rowEnd + 1, 0);\n };\n this.selectLine = function() {\n this.setSelectionRange(this.getLineRange());\n };\n this.moveCursorUp = function() {\n this.moveCursorBy(-1, 0);\n };\n this.moveCursorDown = function() {\n this.moveCursorBy(1, 0);\n };\n this.wouldMoveIntoSoftTab = function(cursor, tabSize, direction) {\n var start = cursor.column;\n var end = cursor.column + tabSize;\n\n if (direction < 0) {\n start = cursor.column - tabSize;\n end = cursor.column;\n }\n return this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(start, end).split(\" \").length-1 == tabSize;\n };\n this.moveCursorLeft = function() {\n var cursor = this.lead.getPosition(),\n fold;\n\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n } else if (cursor.column === 0) {\n if (cursor.row > 0) {\n this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length);\n }\n }\n else {\n var tabSize = this.session.getTabSize();\n if (this.wouldMoveIntoSoftTab(cursor, tabSize, -1) && !this.session.getNavigateWithinSoftTabs()) {\n this.moveCursorBy(0, -tabSize);\n } else {\n this.moveCursorBy(0, -1);\n }\n }\n };\n this.moveCursorRight = function() {\n var cursor = this.lead.getPosition(),\n fold;\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) {\n this.moveCursorTo(fold.end.row, fold.end.column);\n }\n else if (this.lead.column == this.doc.getLine(this.lead.row).length) {\n if (this.lead.row < this.doc.getLength() - 1) {\n this.moveCursorTo(this.lead.row + 1, 0);\n }\n }\n else {\n var tabSize = this.session.getTabSize();\n var cursor = this.lead;\n if (this.wouldMoveIntoSoftTab(cursor, tabSize, 1) && !this.session.getNavigateWithinSoftTabs()) {\n this.moveCursorBy(0, tabSize);\n } else {\n this.moveCursorBy(0, 1);\n }\n }\n };\n this.moveCursorLineStart = function() {\n var row = this.lead.row;\n var column = this.lead.column;\n var screenRow = this.session.documentToScreenRow(row, column);\n var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0);\n var beforeCursor = this.session.getDisplayLine(\n row, null, firstColumnPosition.row,\n firstColumnPosition.column\n );\n\n var leadingSpace = beforeCursor.match(/^\\s*/);\n if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart)\n firstColumnPosition.column += leadingSpace[0].length;\n this.moveCursorToPosition(firstColumnPosition);\n };\n this.moveCursorLineEnd = function() {\n var lead = this.lead;\n var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column);\n if (this.lead.column == lineEnd.column) {\n var line = this.session.getLine(lineEnd.row);\n if (lineEnd.column == line.length) {\n var textEnd = line.search(/\\s+$/);\n if (textEnd > 0)\n lineEnd.column = textEnd;\n }\n }\n\n this.moveCursorTo(lineEnd.row, lineEnd.column);\n };\n this.moveCursorFileEnd = function() {\n var row = this.doc.getLength() - 1;\n var column = this.doc.getLine(row).length;\n this.moveCursorTo(row, column);\n };\n this.moveCursorFileStart = function() {\n this.moveCursorTo(0, 0);\n };\n this.moveCursorLongWordRight = function() {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n\n var match;\n this.session.nonTokenRe.lastIndex = 0;\n this.session.tokenRe.lastIndex = 0;\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold) {\n this.moveCursorTo(fold.end.row, fold.end.column);\n return;\n }\n if (match = this.session.nonTokenRe.exec(rightOfCursor)) {\n column += this.session.nonTokenRe.lastIndex;\n this.session.nonTokenRe.lastIndex = 0;\n rightOfCursor = line.substring(column);\n }\n if (column >= line.length) {\n this.moveCursorTo(row, line.length);\n this.moveCursorRight();\n if (row < this.doc.getLength() - 1)\n this.moveCursorWordRight();\n return;\n }\n if (match = this.session.tokenRe.exec(rightOfCursor)) {\n column += this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\n }\n\n this.moveCursorTo(row, column);\n };\n this.moveCursorLongWordLeft = function() {\n var row = this.lead.row;\n var column = this.lead.column;\n var fold;\n if (fold = this.session.getFoldAt(row, column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n return;\n }\n\n var str = this.session.getFoldStringAt(row, column, -1);\n if (str == null) {\n str = this.doc.getLine(row).substring(0, column);\n }\n\n var leftOfCursor = lang.stringReverse(str);\n var match;\n this.session.nonTokenRe.lastIndex = 0;\n this.session.tokenRe.lastIndex = 0;\n if (match = this.session.nonTokenRe.exec(leftOfCursor)) {\n column -= this.session.nonTokenRe.lastIndex;\n leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex);\n this.session.nonTokenRe.lastIndex = 0;\n }\n if (column <= 0) {\n this.moveCursorTo(row, 0);\n this.moveCursorLeft();\n if (row > 0)\n this.moveCursorWordLeft();\n return;\n }\n if (match = this.session.tokenRe.exec(leftOfCursor)) {\n column -= this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\n }\n\n this.moveCursorTo(row, column);\n };\n\n this.$shortWordEndIndex = function(rightOfCursor) {\n var match, index = 0, ch;\n var whitespaceRe = /\\s/;\n var tokenRe = this.session.tokenRe;\n\n tokenRe.lastIndex = 0;\n if (match = this.session.tokenRe.exec(rightOfCursor)) {\n index = this.session.tokenRe.lastIndex;\n } else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n index ++;\n\n if (index < 1) {\n tokenRe.lastIndex = 0;\n while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) {\n tokenRe.lastIndex = 0;\n index ++;\n if (whitespaceRe.test(ch)) {\n if (index > 2) {\n index--;\n break;\n } else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n index ++;\n if (index > 2)\n break;\n }\n }\n }\n }\n }\n tokenRe.lastIndex = 0;\n\n return index;\n };\n\n this.moveCursorShortWordRight = function() {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold)\n return this.moveCursorTo(fold.end.row, fold.end.column);\n\n if (column == line.length) {\n var l = this.doc.getLength();\n do {\n row++;\n rightOfCursor = this.doc.getLine(row);\n } while (row < l && /^\\s*$/.test(rightOfCursor));\n\n if (!/^\\s+/.test(rightOfCursor))\n rightOfCursor = \"\";\n column = 0;\n }\n\n var index = this.$shortWordEndIndex(rightOfCursor);\n\n this.moveCursorTo(row, column + index);\n };\n\n this.moveCursorShortWordLeft = function() {\n var row = this.lead.row;\n var column = this.lead.column;\n\n var fold;\n if (fold = this.session.getFoldAt(row, column, -1))\n return this.moveCursorTo(fold.start.row, fold.start.column);\n\n var line = this.session.getLine(row).substring(0, column);\n if (column === 0) {\n do {\n row--;\n line = this.doc.getLine(row);\n } while (row > 0 && /^\\s*$/.test(line));\n\n column = line.length;\n if (!/\\s+$/.test(line))\n line = \"\";\n }\n\n var leftOfCursor = lang.stringReverse(line);\n var index = this.$shortWordEndIndex(leftOfCursor);\n\n return this.moveCursorTo(row, column - index);\n };\n\n this.moveCursorWordRight = function() {\n if (this.session.$selectLongWords)\n this.moveCursorLongWordRight();\n else\n this.moveCursorShortWordRight();\n };\n\n this.moveCursorWordLeft = function() {\n if (this.session.$selectLongWords)\n this.moveCursorLongWordLeft();\n else\n this.moveCursorShortWordLeft();\n };\n this.moveCursorBy = function(rows, chars) {\n var screenPos = this.session.documentToScreenPosition(\n this.lead.row,\n this.lead.column\n );\n\n var offsetX;\n\n if (chars === 0) {\n if (rows !== 0) {\n if (this.session.$bidiHandler.isBidiRow(screenPos.row, this.lead.row)) {\n offsetX = this.session.$bidiHandler.getPosLeft(screenPos.column);\n screenPos.column = Math.round(offsetX / this.session.$bidiHandler.charWidths[0]);\n } else {\n offsetX = screenPos.column * this.session.$bidiHandler.charWidths[0];\n }\n }\n\n if (this.$desiredColumn)\n screenPos.column = this.$desiredColumn;\n else\n this.$desiredColumn = screenPos.column;\n }\n\n var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column, offsetX);\n \n if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) {\n if (this.session.lineWidgets && this.session.lineWidgets[docPos.row]) {\n if (docPos.row > 0 || rows > 0)\n docPos.row++;\n }\n }\n this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0);\n };\n this.moveCursorToPosition = function(position) {\n this.moveCursorTo(position.row, position.column);\n };\n this.moveCursorTo = function(row, column, keepDesiredColumn) {\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold) {\n row = fold.start.row;\n column = fold.start.column;\n }\n\n this.$keepDesiredColumnOnChange = true;\n var line = this.session.getLine(row);\n if (/[\\uDC00-\\uDFFF]/.test(line.charAt(column)) && line.charAt(column - 1)) {\n if (this.lead.row == row && this.lead.column == column + 1)\n column = column - 1;\n else\n column = column + 1;\n }\n this.lead.setPosition(row, column);\n this.$keepDesiredColumnOnChange = false;\n\n if (!keepDesiredColumn)\n this.$desiredColumn = null;\n };\n this.moveCursorToScreen = function(row, column, keepDesiredColumn) {\n var pos = this.session.screenToDocumentPosition(row, column);\n this.moveCursorTo(pos.row, pos.column, keepDesiredColumn);\n };\n this.detach = function() {\n this.lead.detach();\n this.anchor.detach();\n this.session = this.doc = null;\n };\n\n this.fromOrientedRange = function(range) {\n this.setSelectionRange(range, range.cursor == range.start);\n this.$desiredColumn = range.desiredColumn || this.$desiredColumn;\n };\n\n this.toOrientedRange = function(range) {\n var r = this.getRange();\n if (range) {\n range.start.column = r.start.column;\n range.start.row = r.start.row;\n range.end.column = r.end.column;\n range.end.row = r.end.row;\n } else {\n range = r;\n }\n\n range.cursor = this.isBackwards() ? range.start : range.end;\n range.desiredColumn = this.$desiredColumn;\n return range;\n };\n this.getRangeOfMovements = function(func) {\n var start = this.getCursor();\n try {\n func(this);\n var end = this.getCursor();\n return Range.fromPoints(start,end);\n } catch(e) {\n return Range.fromPoints(start,start);\n } finally {\n this.moveCursorToPosition(start);\n }\n };\n\n this.toJSON = function() {\n if (this.rangeCount) {\n var data = this.ranges.map(function(r) {\n var r1 = r.clone();\n r1.isBackwards = r.cursor == r.start;\n return r1;\n });\n } else {\n var data = this.getRange();\n data.isBackwards = this.isBackwards();\n }\n return data;\n };\n\n this.fromJSON = function(data) {\n if (data.start == undefined) {\n if (this.rangeList) {\n this.toSingleRange(data[0]);\n for (var i = data.length; i--; ) {\n var r = Range.fromPoints(data[i].start, data[i].end);\n if (data[i].isBackwards)\n r.cursor = r.start;\n this.addRange(r, true);\n }\n return;\n } else\n data = data[0];\n }\n if (this.rangeList)\n this.toSingleRange(data);\n this.setSelectionRange(data, data.isBackwards);\n };\n\n this.isEqual = function(data) {\n if ((data.length || this.rangeCount) && data.length != this.rangeCount)\n return false;\n if (!data.length || !this.ranges)\n return this.getRange().isEqual(data);\n\n for (var i = this.ranges.length; i--; ) {\n if (!this.ranges[i].isEqual(data[i]))\n return false;\n }\n return true;\n };\n\n}).call(Selection.prototype);\n\nexports.Selection = Selection;\n});\n\nace.define(\"ace/tokenizer\",[\"require\",\"exports\",\"module\",\"ace/config\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar config = acequire(\"./config\");\nvar MAX_TOKEN_COUNT = 2000;\nvar Tokenizer = function(rules) {\n this.states = rules;\n\n this.regExps = {};\n this.matchMappings = {};\n for (var key in this.states) {\n var state = this.states[key];\n var ruleRegExps = [];\n var matchTotal = 0;\n var mapping = this.matchMappings[key] = {defaultToken: \"text\"};\n var flag = \"g\";\n\n var splitterRurles = [];\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n if (rule.defaultToken)\n mapping.defaultToken = rule.defaultToken;\n if (rule.caseInsensitive)\n flag = \"gi\";\n if (rule.regex == null)\n continue;\n\n if (rule.regex instanceof RegExp)\n rule.regex = rule.regex.toString().slice(1, -1);\n var adjustedregex = rule.regex;\n var matchcount = new RegExp(\"(?:(\" + adjustedregex + \")|(.))\").exec(\"a\").length - 2;\n if (Array.isArray(rule.token)) {\n if (rule.token.length == 1 || matchcount == 1) {\n rule.token = rule.token[0];\n } else if (matchcount - 1 != rule.token.length) {\n this.reportError(\"number of classes and regexp groups doesn't match\", { \n rule: rule,\n groupCount: matchcount - 1\n });\n rule.token = rule.token[0];\n } else {\n rule.tokenArray = rule.token;\n rule.token = null;\n rule.onMatch = this.$arrayTokens;\n }\n } else if (typeof rule.token == \"function\" && !rule.onMatch) {\n if (matchcount > 1)\n rule.onMatch = this.$applyToken;\n else\n rule.onMatch = rule.token;\n }\n\n if (matchcount > 1) {\n if (/\\\\\\d/.test(rule.regex)) {\n adjustedregex = rule.regex.replace(/\\\\([0-9]+)/g, function(match, digit) {\n return \"\\\\\" + (parseInt(digit, 10) + matchTotal + 1);\n });\n } else {\n matchcount = 1;\n adjustedregex = this.removeCapturingGroups(rule.regex);\n }\n if (!rule.splitRegex && typeof rule.token != \"string\")\n splitterRurles.push(rule); // flag will be known only at the very end\n }\n\n mapping[matchTotal] = i;\n matchTotal += matchcount;\n\n ruleRegExps.push(adjustedregex);\n if (!rule.onMatch)\n rule.onMatch = null;\n }\n \n if (!ruleRegExps.length) {\n mapping[0] = 0;\n ruleRegExps.push(\"$\");\n }\n \n splitterRurles.forEach(function(rule) {\n rule.splitRegex = this.createSplitterRegexp(rule.regex, flag);\n }, this);\n\n this.regExps[key] = new RegExp(\"(\" + ruleRegExps.join(\")|(\") + \")|($)\", flag);\n }\n};\n\n(function() {\n this.$setMaxTokenCount = function(m) {\n MAX_TOKEN_COUNT = m | 0;\n };\n \n this.$applyToken = function(str) {\n var values = this.splitRegex.exec(str).slice(1);\n var types = this.token.apply(this, values);\n if (typeof types === \"string\")\n return [{type: types, value: str}];\n\n var tokens = [];\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i])\n tokens[tokens.length] = {\n type: types[i],\n value: values[i]\n };\n }\n return tokens;\n };\n\n this.$arrayTokens = function(str) {\n if (!str)\n return [];\n var values = this.splitRegex.exec(str);\n if (!values)\n return \"text\";\n var tokens = [];\n var types = this.tokenArray;\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i + 1])\n tokens[tokens.length] = {\n type: types[i],\n value: values[i + 1]\n };\n }\n return tokens;\n };\n\n this.removeCapturingGroups = function(src) {\n var r = src.replace(\n /\\[(?:\\\\.|[^\\]])*?\\]|\\\\.|\\(\\?[:=!]|(\\()/g,\n function(x, y) {return y ? \"(?:\" : x;}\n );\n return r;\n };\n\n this.createSplitterRegexp = function(src, flag) {\n if (src.indexOf(\"(?=\") != -1) {\n var stack = 0;\n var inChClass = false;\n var lastCapture = {};\n src.replace(/(\\\\.)|(\\((?:\\?[=!])?)|(\\))|([\\[\\]])/g, function(\n m, esc, parenOpen, parenClose, square, index\n ) {\n if (inChClass) {\n inChClass = square != \"]\";\n } else if (square) {\n inChClass = true;\n } else if (parenClose) {\n if (stack == lastCapture.stack) {\n lastCapture.end = index+1;\n lastCapture.stack = -1;\n }\n stack--;\n } else if (parenOpen) {\n stack++;\n if (parenOpen.length != 1) {\n lastCapture.stack = stack;\n lastCapture.start = index;\n }\n }\n return m;\n });\n\n if (lastCapture.end != null && /^\\)*$/.test(src.substr(lastCapture.end)))\n src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end);\n }\n if (src.charAt(0) != \"^\") src = \"^\" + src;\n if (src.charAt(src.length - 1) != \"$\") src += \"$\";\n \n return new RegExp(src, (flag||\"\").replace(\"g\", \"\"));\n };\n this.getLineTokens = function(line, startState) {\n if (startState && typeof startState != \"string\") {\n var stack = startState.slice(0);\n startState = stack[0];\n if (startState === \"#tmp\") {\n stack.shift();\n startState = stack.shift();\n }\n } else\n var stack = [];\n\n var currentState = startState || \"start\";\n var state = this.states[currentState];\n if (!state) {\n currentState = \"start\";\n state = this.states[currentState];\n }\n var mapping = this.matchMappings[currentState];\n var re = this.regExps[currentState];\n re.lastIndex = 0;\n\n var match, tokens = [];\n var lastIndex = 0;\n var matchAttempts = 0;\n\n var token = {type: null, value: \"\"};\n\n while (match = re.exec(line)) {\n var type = mapping.defaultToken;\n var rule = null;\n var value = match[0];\n var index = re.lastIndex;\n\n if (index - value.length > lastIndex) {\n var skipped = line.substring(lastIndex, index - value.length);\n if (token.type == type) {\n token.value += skipped;\n } else {\n if (token.type)\n tokens.push(token);\n token = {type: type, value: skipped};\n }\n }\n\n for (var i = 0; i < match.length-2; i++) {\n if (match[i + 1] === undefined)\n continue;\n\n rule = state[mapping[i]];\n\n if (rule.onMatch)\n type = rule.onMatch(value, currentState, stack, line);\n else\n type = rule.token;\n\n if (rule.next) {\n if (typeof rule.next == \"string\") {\n currentState = rule.next;\n } else {\n currentState = rule.next(currentState, stack);\n }\n \n state = this.states[currentState];\n if (!state) {\n this.reportError(\"state doesn't exist\", currentState);\n currentState = \"start\";\n state = this.states[currentState];\n }\n mapping = this.matchMappings[currentState];\n lastIndex = index;\n re = this.regExps[currentState];\n re.lastIndex = index;\n }\n if (rule.consumeLineEnd)\n lastIndex = index;\n break;\n }\n\n if (value) {\n if (typeof type === \"string\") {\n if ((!rule || rule.merge !== false) && token.type === type) {\n token.value += value;\n } else {\n if (token.type)\n tokens.push(token);\n token = {type: type, value: value};\n }\n } else if (type) {\n if (token.type)\n tokens.push(token);\n token = {type: null, value: \"\"};\n for (var i = 0; i < type.length; i++)\n tokens.push(type[i]);\n }\n }\n\n if (lastIndex == line.length)\n break;\n\n lastIndex = index;\n\n if (matchAttempts++ > MAX_TOKEN_COUNT) {\n if (matchAttempts > 2 * line.length) {\n this.reportError(\"infinite loop with in ace tokenizer\", {\n startState: startState,\n line: line\n });\n }\n while (lastIndex < line.length) {\n if (token.type)\n tokens.push(token);\n token = {\n value: line.substring(lastIndex, lastIndex += 2000),\n type: \"overflow\"\n };\n }\n currentState = \"start\";\n stack = [];\n break;\n }\n }\n\n if (token.type)\n tokens.push(token);\n \n if (stack.length > 1) {\n if (stack[0] !== currentState)\n stack.unshift(\"#tmp\", currentState);\n }\n return {\n tokens : tokens,\n state : stack.length ? stack : currentState\n };\n };\n \n this.reportError = config.reportError;\n \n}).call(Tokenizer.prototype);\n\nexports.Tokenizer = Tokenizer;\n});\n\nace.define(\"ace/mode/text_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar lang = acequire(\"../lib/lang\");\n\nvar TextHighlightRules = function() {\n\n this.$rules = {\n \"start\" : [{\n token : \"empty_line\",\n regex : '^$'\n }, {\n defaultToken : \"text\"\n }]\n };\n};\n\n(function() {\n\n this.addRules = function(rules, prefix) {\n if (!prefix) {\n for (var key in rules)\n this.$rules[key] = rules[key];\n return;\n }\n for (var key in rules) {\n var state = rules[key];\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n if (rule.next || rule.onMatch) {\n if (typeof rule.next == \"string\") {\n if (rule.next.indexOf(prefix) !== 0)\n rule.next = prefix + rule.next;\n }\n if (rule.nextState && rule.nextState.indexOf(prefix) !== 0)\n rule.nextState = prefix + rule.nextState;\n }\n }\n this.$rules[prefix + key] = state;\n }\n };\n\n this.getRules = function() {\n return this.$rules;\n };\n\n this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) {\n var embedRules = typeof HighlightRules == \"function\"\n ? new HighlightRules().getRules()\n : HighlightRules;\n if (states) {\n for (var i = 0; i < states.length; i++)\n states[i] = prefix + states[i];\n } else {\n states = [];\n for (var key in embedRules)\n states.push(prefix + key);\n }\n\n this.addRules(embedRules, prefix);\n\n if (escapeRules) {\n var addRules = Array.prototype[append ? \"push\" : \"unshift\"];\n for (var i = 0; i < states.length; i++)\n addRules.apply(this.$rules[states[i]], lang.deepCopy(escapeRules));\n }\n\n if (!this.$embeds)\n this.$embeds = [];\n this.$embeds.push(prefix);\n };\n\n this.getEmbeds = function() {\n return this.$embeds;\n };\n\n var pushState = function(currentState, stack) {\n if (currentState != \"start\" || stack.length)\n stack.unshift(this.nextState, currentState);\n return this.nextState;\n };\n var popState = function(currentState, stack) {\n stack.shift();\n return stack.shift() || \"start\";\n };\n\n this.normalizeRules = function() {\n var id = 0;\n var rules = this.$rules;\n function processState(key) {\n var state = rules[key];\n state.processed = true;\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n var toInsert = null;\n if (Array.isArray(rule)) {\n toInsert = rule;\n rule = {};\n }\n if (!rule.regex && rule.start) {\n rule.regex = rule.start;\n if (!rule.next)\n rule.next = [];\n rule.next.push({\n defaultToken: rule.token\n }, {\n token: rule.token + \".end\",\n regex: rule.end || rule.start,\n next: \"pop\"\n });\n rule.token = rule.token + \".start\";\n rule.push = true;\n }\n var next = rule.next || rule.push;\n if (next && Array.isArray(next)) {\n var stateName = rule.stateName;\n if (!stateName) {\n stateName = rule.token;\n if (typeof stateName != \"string\")\n stateName = stateName[0] || \"\";\n if (rules[stateName])\n stateName += id++;\n }\n rules[stateName] = next;\n rule.next = stateName;\n processState(stateName);\n } else if (next == \"pop\") {\n rule.next = popState;\n }\n\n if (rule.push) {\n rule.nextState = rule.next || rule.push;\n rule.next = pushState;\n delete rule.push;\n }\n\n if (rule.rules) {\n for (var r in rule.rules) {\n if (rules[r]) {\n if (rules[r].push)\n rules[r].push.apply(rules[r], rule.rules[r]);\n } else {\n rules[r] = rule.rules[r];\n }\n }\n }\n var includeName = typeof rule == \"string\" ? rule : rule.include;\n if (includeName) {\n if (Array.isArray(includeName))\n toInsert = includeName.map(function(x) { return rules[x]; });\n else\n toInsert = rules[includeName];\n }\n\n if (toInsert) {\n var args = [i, 1].concat(toInsert);\n if (rule.noEscape)\n args = args.filter(function(x) {return !x.next;});\n state.splice.apply(state, args);\n i--;\n }\n \n if (rule.keywordMap) {\n rule.token = this.createKeywordMapper(\n rule.keywordMap, rule.defaultToken || \"text\", rule.caseInsensitive\n );\n delete rule.defaultToken;\n }\n }\n }\n Object.keys(rules).forEach(processState, this);\n };\n\n this.createKeywordMapper = function(map, defaultToken, ignoreCase, splitChar) {\n var keywords = Object.create(null);\n Object.keys(map).forEach(function(className) {\n var a = map[className];\n if (ignoreCase)\n a = a.toLowerCase();\n var list = a.split(splitChar || \"|\");\n for (var i = list.length; i--; )\n keywords[list[i]] = className;\n });\n if (Object.getPrototypeOf(keywords)) {\n keywords.__proto__ = null;\n }\n this.$keywordList = Object.keys(keywords);\n map = null;\n return ignoreCase\n ? function(value) {return keywords[value.toLowerCase()] || defaultToken; }\n : function(value) {return keywords[value] || defaultToken; };\n };\n\n this.getKeywords = function() {\n return this.$keywords;\n };\n\n}).call(TextHighlightRules.prototype);\n\nexports.TextHighlightRules = TextHighlightRules;\n});\n\nace.define(\"ace/mode/behaviour\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Behaviour = function() {\n this.$behaviours = {};\n};\n\n(function () {\n\n this.add = function (name, action, callback) {\n switch (undefined) {\n case this.$behaviours:\n this.$behaviours = {};\n case this.$behaviours[name]:\n this.$behaviours[name] = {};\n }\n this.$behaviours[name][action] = callback;\n };\n \n this.addBehaviours = function (behaviours) {\n for (var key in behaviours) {\n for (var action in behaviours[key]) {\n this.add(key, action, behaviours[key][action]);\n }\n }\n };\n \n this.remove = function (name) {\n if (this.$behaviours && this.$behaviours[name]) {\n delete this.$behaviours[name];\n }\n };\n \n this.inherit = function (mode, filter) {\n if (typeof mode === \"function\") {\n var behaviours = new mode().getBehaviours(filter);\n } else {\n var behaviours = mode.getBehaviours(filter);\n }\n this.addBehaviours(behaviours);\n };\n \n this.getBehaviours = function (filter) {\n if (!filter) {\n return this.$behaviours;\n } else {\n var ret = {};\n for (var i = 0; i < filter.length; i++) {\n if (this.$behaviours[filter[i]]) {\n ret[filter[i]] = this.$behaviours[filter[i]];\n }\n }\n return ret;\n }\n };\n\n}).call(Behaviour.prototype);\n\nexports.Behaviour = Behaviour;\n});\n\nace.define(\"ace/token_iterator\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Range = acequire(\"./range\").Range;\nvar TokenIterator = function(session, initialRow, initialColumn) {\n this.$session = session;\n this.$row = initialRow;\n this.$rowTokens = session.getTokens(initialRow);\n\n var token = session.getTokenAt(initialRow, initialColumn);\n this.$tokenIndex = token ? token.index : -1;\n};\n\n(function() { \n this.stepBackward = function() {\n this.$tokenIndex -= 1;\n \n while (this.$tokenIndex < 0) {\n this.$row -= 1;\n if (this.$row < 0) {\n this.$row = 0;\n return null;\n }\n \n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = this.$rowTokens.length - 1;\n }\n \n return this.$rowTokens[this.$tokenIndex];\n }; \n this.stepForward = function() {\n this.$tokenIndex += 1;\n var rowCount;\n while (this.$tokenIndex >= this.$rowTokens.length) {\n this.$row += 1;\n if (!rowCount)\n rowCount = this.$session.getLength();\n if (this.$row >= rowCount) {\n this.$row = rowCount - 1;\n return null;\n }\n\n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = 0;\n }\n \n return this.$rowTokens[this.$tokenIndex];\n }; \n this.getCurrentToken = function () {\n return this.$rowTokens[this.$tokenIndex];\n }; \n this.getCurrentTokenRow = function () {\n return this.$row;\n }; \n this.getCurrentTokenColumn = function() {\n var rowTokens = this.$rowTokens;\n var tokenIndex = this.$tokenIndex;\n var column = rowTokens[tokenIndex].start;\n if (column !== undefined)\n return column;\n \n column = 0;\n while (tokenIndex > 0) {\n tokenIndex -= 1;\n column += rowTokens[tokenIndex].value.length;\n }\n \n return column; \n };\n this.getCurrentTokenPosition = function() {\n return {row: this.$row, column: this.getCurrentTokenColumn()};\n };\n this.getCurrentTokenRange = function() {\n var token = this.$rowTokens[this.$tokenIndex];\n var column = this.getCurrentTokenColumn();\n return new Range(this.$row, column, this.$row, column + token.value.length);\n };\n\n}).call(TokenIterator.prototype);\n\nexports.TokenIterator = TokenIterator;\n});\n\nace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../../lib/oop\");\nvar Behaviour = acequire(\"../behaviour\").Behaviour;\nvar TokenIterator = acequire(\"../../token_iterator\").TokenIterator;\nvar lang = acequire(\"../../lib/lang\");\n\nvar SAFE_INSERT_IN_TOKENS =\n [\"text\", \"paren.rparen\", \"punctuation.operator\"];\nvar SAFE_INSERT_BEFORE_TOKENS =\n [\"text\", \"paren.rparen\", \"punctuation.operator\", \"comment\"];\n\nvar context;\nvar contextCache = {};\nvar defaultQuotes = {'\"' : '\"', \"'\" : \"'\"};\n\nvar initContext = function(editor) {\n var id = -1;\n if (editor.multiSelect) {\n id = editor.selection.index;\n if (contextCache.rangeCount != editor.multiSelect.rangeCount)\n contextCache = {rangeCount: editor.multiSelect.rangeCount};\n }\n if (contextCache[id])\n return context = contextCache[id];\n context = contextCache[id] = {\n autoInsertedBrackets: 0,\n autoInsertedRow: -1,\n autoInsertedLineEnd: \"\",\n maybeInsertedBrackets: 0,\n maybeInsertedRow: -1,\n maybeInsertedLineStart: \"\",\n maybeInsertedLineEnd: \"\"\n };\n};\n\nvar getWrapped = function(selection, selected, opening, closing) {\n var rowDiff = selection.end.row - selection.start.row;\n return {\n text: opening + selected + closing,\n selection: [\n 0,\n selection.start.column + 1,\n rowDiff,\n selection.end.column + (rowDiff ? 0 : 1)\n ]\n };\n};\n\nvar CstyleBehaviour = function(options) {\n this.add(\"braces\", \"insertion\", function(state, action, editor, session, text) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (text == '{') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && selected !== \"{\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '{', '}');\n } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n if (/[\\]\\}\\)]/.test(line[cursor.column]) || editor.inMultiSelectMode || options && options.braces) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\n return {\n text: '{}',\n selection: [1, 1]\n };\n } else {\n CstyleBehaviour.recordMaybeInsert(editor, session, \"{\");\n return {\n text: '{',\n selection: [1, 1]\n };\n }\n }\n } else if (text == '}') {\n initContext(editor);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == '}') {\n var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n } else if (text == \"\\n\" || text == \"\\r\\n\") {\n initContext(editor);\n var closing = \"\";\n if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {\n closing = lang.stringRepeat(\"}\", context.maybeInsertedBrackets);\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar === '}') {\n var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}');\n if (!openBracePos)\n return null;\n var next_indent = this.$getIndent(session.getLine(openBracePos.row));\n } else if (closing) {\n var next_indent = this.$getIndent(line);\n } else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n return;\n }\n var indent = next_indent + session.getTabString();\n\n return {\n text: '\\n' + indent + '\\n' + next_indent + closing,\n selection: [1, indent.length, 1, indent.length]\n };\n } else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n });\n\n this.add(\"braces\", \"deletion\", function(state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '{') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.end.column, range.end.column + 1);\n if (rightChar == '}') {\n range.end.column++;\n return range;\n } else {\n context.maybeInsertedBrackets--;\n }\n }\n });\n\n this.add(\"parens\", \"insertion\", function(state, action, editor, session, text) {\n if (text == '(') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '(', ')');\n } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \")\");\n return {\n text: '()',\n selection: [1, 1]\n };\n }\n } else if (text == ')') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == ')') {\n var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n\n this.add(\"parens\", \"deletion\", function(state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '(') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == ')') {\n range.end.column++;\n return range;\n }\n }\n });\n\n this.add(\"brackets\", \"insertion\", function(state, action, editor, session, text) {\n if (text == '[') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '[', ']');\n } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"]\");\n return {\n text: '[]',\n selection: [1, 1]\n };\n }\n } else if (text == ']') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == ']') {\n var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row});\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n\n this.add(\"brackets\", \"deletion\", function(state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '[') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == ']') {\n range.end.column++;\n return range;\n }\n }\n });\n\n this.add(\"string_dquotes\", \"insertion\", function(state, action, editor, session, text) {\n var quotes = session.$mode.$quotes || defaultQuotes;\n if (text.length == 1 && quotes[text]) {\n if (this.lineCommentStart && this.lineCommentStart.indexOf(text) != -1)\n return;\n initContext(editor);\n var quote = text;\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && (selected.length != 1 || !quotes[selected]) && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, quote, quote);\n } else if (!selected) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var leftChar = line.substring(cursor.column-1, cursor.column);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n\n var token = session.getTokenAt(cursor.row, cursor.column);\n var rightToken = session.getTokenAt(cursor.row, cursor.column + 1);\n if (leftChar == \"\\\\\" && token && /escape/.test(token.type))\n return null;\n\n var stringBefore = token && /string|escape/.test(token.type);\n var stringAfter = !rightToken || /string|escape/.test(rightToken.type);\n\n var pair;\n if (rightChar == quote) {\n pair = stringBefore !== stringAfter;\n if (pair && /string\\.end/.test(rightToken.type))\n pair = false;\n } else {\n if (stringBefore && !stringAfter)\n return null; // wrap string with different quote\n if (stringBefore && stringAfter)\n return null; // do not pair quotes inside strings\n var wordRe = session.$mode.tokenRe;\n wordRe.lastIndex = 0;\n var isWordBefore = wordRe.test(leftChar);\n wordRe.lastIndex = 0;\n var isWordAfter = wordRe.test(leftChar);\n if (isWordBefore || isWordAfter)\n return null; // before or after alphanumeric\n if (rightChar && !/[\\s;,.})\\]\\\\]/.test(rightChar))\n return null; // there is rightChar and it isn't closing\n pair = true;\n }\n return {\n text: pair ? quote + quote : \"\",\n selection: [1,1]\n };\n }\n }\n });\n\n this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == selected) {\n range.end.column++;\n return range;\n }\n }\n });\n\n};\n\n\nCstyleBehaviour.isSaneInsertion = function(editor, session) {\n var cursor = editor.getCursorPosition();\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n if (!this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS)) {\n var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);\n if (!this.$matchTokenType(iterator2.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS))\n return false;\n }\n iterator.stepForward();\n return iterator.getCurrentTokenRow() !== cursor.row ||\n this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_BEFORE_TOKENS);\n};\n\nCstyleBehaviour.$matchTokenType = function(token, types) {\n return types.indexOf(token.type || token) > -1;\n};\n\nCstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0]))\n context.autoInsertedBrackets = 0;\n context.autoInsertedRow = cursor.row;\n context.autoInsertedLineEnd = bracket + line.substr(cursor.column);\n context.autoInsertedBrackets++;\n};\n\nCstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this.isMaybeInsertedClosing(cursor, line))\n context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = cursor.row;\n context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;\n context.maybeInsertedLineEnd = line.substr(cursor.column);\n context.maybeInsertedBrackets++;\n};\n\nCstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {\n return context.autoInsertedBrackets > 0 &&\n cursor.row === context.autoInsertedRow &&\n bracket === context.autoInsertedLineEnd[0] &&\n line.substr(cursor.column) === context.autoInsertedLineEnd;\n};\n\nCstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {\n return context.maybeInsertedBrackets > 0 &&\n cursor.row === context.maybeInsertedRow &&\n line.substr(cursor.column) === context.maybeInsertedLineEnd &&\n line.substr(0, cursor.column) == context.maybeInsertedLineStart;\n};\n\nCstyleBehaviour.popAutoInsertedClosing = function() {\n context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);\n context.autoInsertedBrackets--;\n};\n\nCstyleBehaviour.clearMaybeInsertedClosing = function() {\n if (context) {\n context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = -1;\n }\n};\n\n\n\noop.inherits(CstyleBehaviour, Behaviour);\n\nexports.CstyleBehaviour = CstyleBehaviour;\n});\n\nace.define(\"ace/unicode\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\nexports.packages = {};\n\naddUnicodePackage({\n L: \"0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05250531-055605590561-058705D0-05EA05F0-05F20621-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280904-0939093D09500958-0961097109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510D0-10FA10FC1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209421022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2D00-2D252D30-2D652D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A65FA662-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78BA78CA7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC\",\n Ll: \"0061-007A00AA00B500BA00DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02AF037103730377037B-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F0521052305250561-05871D00-1D2B1D62-1D771D79-1D9A1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF7210A210E210F2113212F21342139213C213D2146-2149214E21842C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7C2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2D00-2D25A641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76FA771-A778A77AA77CA77FA781A783A785A787A78CFB00-FB06FB13-FB17FF41-FF5A\",\n Lu: \"0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E0520052205240531-055610A0-10C51E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CEDA640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BFF21-FF3A\",\n Lt: \"01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC\",\n Lm: \"02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D611D781D9B-1DBF2071207F2090-20942C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A9CFAA70AADDFF70FF9EFF9F\",\n Lo: \"01BB01C0-01C3029405D0-05EA05F0-05F20621-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150904-0939093D09500958-096109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF12135-21382D30-2D652D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC\",\n M: \"0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DE-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0903093C093E-094E0951-0955096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F90-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135F1712-17141732-1734175217531772177317B6-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAA1C24-1C371CD0-1CD21CD4-1CE81CED1CF21DC0-1DE61DFD-1DFF20D0-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66F-A672A67CA67DA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26\",\n Mn: \"0300-036F0483-04870591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0902093C0941-0948094D0951-095509620963098109BC09C1-09C409CD09E209E30A010A020A3C0A410A420A470A480A4B-0A4D0A510A700A710A750A810A820ABC0AC1-0AC50AC70AC80ACD0AE20AE30B010B3C0B3F0B41-0B440B4D0B560B620B630B820BC00BCD0C3E-0C400C46-0C480C4A-0C4D0C550C560C620C630CBC0CBF0CC60CCC0CCD0CE20CE30D41-0D440D4D0D620D630DCA0DD2-0DD40DD60E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F71-0F7E0F80-0F840F860F870F90-0F970F99-0FBC0FC6102D-10301032-10371039103A103D103E10581059105E-10601071-1074108210851086108D109D135F1712-17141732-1734175217531772177317B7-17BD17C617C9-17D317DD180B-180D18A91920-19221927192819321939-193B1A171A181A561A58-1A5E1A601A621A65-1A6C1A73-1A7C1A7F1B00-1B031B341B36-1B3A1B3C1B421B6B-1B731B801B811BA2-1BA51BA81BA91C2C-1C331C361C371CD0-1CD21CD4-1CE01CE2-1CE81CED1DC0-1DE61DFD-1DFF20D0-20DC20E120E5-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66FA67CA67DA6F0A6F1A802A806A80BA825A826A8C4A8E0-A8F1A926-A92DA947-A951A980-A982A9B3A9B6-A9B9A9BCAA29-AA2EAA31AA32AA35AA36AA43AA4CAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE5ABE8ABEDFB1EFE00-FE0FFE20-FE26\",\n Mc: \"0903093E-09400949-094C094E0982098309BE-09C009C709C809CB09CC09D70A030A3E-0A400A830ABE-0AC00AC90ACB0ACC0B020B030B3E0B400B470B480B4B0B4C0B570BBE0BBF0BC10BC20BC6-0BC80BCA-0BCC0BD70C01-0C030C41-0C440C820C830CBE0CC0-0CC40CC70CC80CCA0CCB0CD50CD60D020D030D3E-0D400D46-0D480D4A-0D4C0D570D820D830DCF-0DD10DD8-0DDF0DF20DF30F3E0F3F0F7F102B102C10311038103B103C105610571062-10641067-106D108310841087-108C108F109A-109C17B617BE-17C517C717C81923-19261929-192B193019311933-193819B0-19C019C819C91A19-1A1B1A551A571A611A631A641A6D-1A721B041B351B3B1B3D-1B411B431B441B821BA11BA61BA71BAA1C24-1C2B1C341C351CE11CF2A823A824A827A880A881A8B4-A8C3A952A953A983A9B4A9B5A9BAA9BBA9BD-A9C0AA2FAA30AA33AA34AA4DAA7BABE3ABE4ABE6ABE7ABE9ABEAABEC\",\n Me: \"0488048906DE20DD-20E020E2-20E4A670-A672\",\n N: \"0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19\",\n Nd: \"0030-00390660-066906F0-06F907C0-07C90966-096F09E6-09EF0A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BEF0C66-0C6F0CE6-0CEF0D66-0D6F0E50-0E590ED0-0ED90F20-0F291040-10491090-109917E0-17E91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C59A620-A629A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19\",\n Nl: \"16EE-16F02160-21822185-218830073021-30293038-303AA6E6-A6EF\",\n No: \"00B200B300B900BC-00BE09F4-09F90BF0-0BF20C78-0C7E0D70-0D750F2A-0F331369-137C17F0-17F920702074-20792080-20892150-215F21892460-249B24EA-24FF2776-27932CFD3192-31953220-32293251-325F3280-328932B1-32BFA830-A835\",\n P: \"0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100AB00B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F3A-0F3D0F850FD0-0FD4104A-104F10FB1361-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2E00-2E2E2E302E313001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65\",\n Pd: \"002D058A05BE140018062010-20152E172E1A301C303030A0FE31FE32FE58FE63FF0D\",\n Ps: \"0028005B007B0F3A0F3C169B201A201E2045207D208D23292768276A276C276E27702772277427C527E627E827EA27EC27EE2983298529872989298B298D298F299129932995299729D829DA29FC2E222E242E262E283008300A300C300E3010301430163018301A301DFD3EFE17FE35FE37FE39FE3BFE3DFE3FFE41FE43FE47FE59FE5BFE5DFF08FF3BFF5BFF5FFF62\",\n Pe: \"0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63\",\n Pi: \"00AB2018201B201C201F20392E022E042E092E0C2E1C2E20\",\n Pf: \"00BB2019201D203A2E032E052E0A2E0D2E1D2E21\",\n Pc: \"005F203F20402054FE33FE34FE4D-FE4FFF3F\",\n Po: \"0021-00230025-0027002A002C002E002F003A003B003F0040005C00A100B700BF037E0387055A-055F058905C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F850FD0-0FD4104A-104F10FB1361-1368166D166E16EB-16ED1735173617D4-17D617D8-17DA1800-18051807-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD3201620172020-20272030-2038203B-203E2041-20432047-205120532055-205E2CF9-2CFC2CFE2CFF2E002E012E06-2E082E0B2E0E-2E162E182E192E1B2E1E2E1F2E2A-2E2E2E302E313001-3003303D30FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFE10-FE16FE19FE30FE45FE46FE49-FE4CFE50-FE52FE54-FE57FE5F-FE61FE68FE6AFE6BFF01-FF03FF05-FF07FF0AFF0CFF0EFF0FFF1AFF1BFF1FFF20FF3CFF61FF64FF65\",\n S: \"0024002B003C-003E005E0060007C007E00A2-00A900AC00AE-00B100B400B600B800D700F702C2-02C502D2-02DF02E5-02EB02ED02EF-02FF03750384038503F604820606-0608060B060E060F06E906FD06FE07F609F209F309FA09FB0AF10B700BF3-0BFA0C7F0CF10CF20D790E3F0F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-139917DB194019E0-19FF1B61-1B6A1B74-1B7C1FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE20442052207A-207C208A-208C20A0-20B8210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B2140-2144214A-214D214F2190-2328232B-23E82400-24262440-244A249C-24E92500-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE27C0-27C427C7-27CA27CC27D0-27E527F0-29822999-29D729DC-29FB29FE-2B4C2B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F309B309C319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A700-A716A720A721A789A78AA828-A82BA836-A839AA77-AA79FB29FDFCFDFDFE62FE64-FE66FE69FF04FF0BFF1C-FF1EFF3EFF40FF5CFF5EFFE0-FFE6FFE8-FFEEFFFCFFFD\",\n Sm: \"002B003C-003E007C007E00AC00B100D700F703F60606-060820442052207A-207C208A-208C2140-2144214B2190-2194219A219B21A021A321A621AE21CE21CF21D221D421F4-22FF2308-230B23202321237C239B-23B323DC-23E125B725C125F8-25FF266F27C0-27C427C7-27CA27CC27D0-27E527F0-27FF2900-29822999-29D729DC-29FB29FE-2AFF2B30-2B442B47-2B4CFB29FE62FE64-FE66FF0BFF1C-FF1EFF5CFF5EFFE2FFE9-FFEC\",\n Sc: \"002400A2-00A5060B09F209F309FB0AF10BF90E3F17DB20A0-20B8A838FDFCFE69FF04FFE0FFE1FFE5FFE6\",\n Sk: \"005E006000A800AF00B400B802C2-02C502D2-02DF02E5-02EB02ED02EF-02FF0375038403851FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE309B309CA700-A716A720A721A789A78AFF3EFF40FFE3\",\n So: \"00A600A700A900AE00B000B60482060E060F06E906FD06FE07F609FA0B700BF3-0BF80BFA0C7F0CF10CF20D790F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-1399194019E0-19FF1B61-1B6A1B74-1B7C210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B214A214C214D214F2195-2199219C-219F21A121A221A421A521A7-21AD21AF-21CD21D021D121D321D5-21F32300-2307230C-231F2322-2328232B-237B237D-239A23B4-23DB23E2-23E82400-24262440-244A249C-24E92500-25B625B8-25C025C2-25F72600-266E2670-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE2800-28FF2B00-2B2F2B452B462B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A828-A82BA836A837A839AA77-AA79FDFDFFE4FFE8FFEDFFEEFFFCFFFD\",\n Z: \"002000A01680180E2000-200A20282029202F205F3000\",\n Zs: \"002000A01680180E2000-200A202F205F3000\",\n Zl: \"2028\",\n Zp: \"2029\",\n C: \"0000-001F007F-009F00AD03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-0605061C061D0620065F06DD070E070F074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17B417B517DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF200B-200F202A-202E2060-206F20722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-F8FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFD-FF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFFBFFFEFFFF\",\n Cc: \"0000-001F007F-009F\",\n Cf: \"00AD0600-060306DD070F17B417B5200B-200F202A-202E2060-2064206A-206FFEFFFFF9-FFFB\",\n Co: \"E000-F8FF\",\n Cs: \"D800-DFFF\",\n Cn: \"03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-05FF06040605061C061D0620065F070E074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF2065-206920722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-D7FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFDFEFEFF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFF8FFFEFFFF\"\n});\n\nfunction addUnicodePackage (pack) {\n var codePoint = /\\w{4}/g;\n for (var name in pack)\n exports.packages[name] = pack[name].replace(codePoint, \"\\\\u$&\");\n}\n\n});\n\nace.define(\"ace/mode/text\",[\"require\",\"exports\",\"module\",\"ace/tokenizer\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/unicode\",\"ace/lib/lang\",\"ace/token_iterator\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Tokenizer = acequire(\"../tokenizer\").Tokenizer;\nvar TextHighlightRules = acequire(\"./text_highlight_rules\").TextHighlightRules;\nvar CstyleBehaviour = acequire(\"./behaviour/cstyle\").CstyleBehaviour;\nvar unicode = acequire(\"../unicode\");\nvar lang = acequire(\"../lib/lang\");\nvar TokenIterator = acequire(\"../token_iterator\").TokenIterator;\nvar Range = acequire(\"../range\").Range;\n\nvar Mode = function() {\n this.HighlightRules = TextHighlightRules;\n};\n\n(function() {\n this.$defaultBehaviour = new CstyleBehaviour();\n\n this.tokenRe = new RegExp(\"^[\"\n + unicode.packages.L\n + unicode.packages.Mn + unicode.packages.Mc\n + unicode.packages.Nd\n + unicode.packages.Pc + \"\\\\$_]+\", \"g\"\n );\n\n this.nonTokenRe = new RegExp(\"^(?:[^\"\n + unicode.packages.L\n + unicode.packages.Mn + unicode.packages.Mc\n + unicode.packages.Nd\n + unicode.packages.Pc + \"\\\\$_]|\\\\s])+\", \"g\"\n );\n\n this.getTokenizer = function() {\n if (!this.$tokenizer) {\n this.$highlightRules = this.$highlightRules || new this.HighlightRules(this.$highlightRuleConfig);\n this.$tokenizer = new Tokenizer(this.$highlightRules.getRules());\n }\n return this.$tokenizer;\n };\n\n this.lineCommentStart = \"\";\n this.blockComment = \"\";\n\n this.toggleCommentLines = function(state, session, startRow, endRow) {\n var doc = session.doc;\n\n var ignoreBlankLines = true;\n var shouldRemove = true;\n var minIndent = Infinity;\n var tabSize = session.getTabSize();\n var insertAtTabStop = false;\n\n if (!this.lineCommentStart) {\n if (!this.blockComment)\n return false;\n var lineCommentStart = this.blockComment.start;\n var lineCommentEnd = this.blockComment.end;\n var regexpStart = new RegExp(\"^(\\\\s*)(?:\" + lang.escapeRegExp(lineCommentStart) + \")\");\n var regexpEnd = new RegExp(\"(?:\" + lang.escapeRegExp(lineCommentEnd) + \")\\\\s*$\");\n\n var comment = function(line, i) {\n if (testRemove(line, i))\n return;\n if (!ignoreBlankLines || /\\S/.test(line)) {\n doc.insertInLine({row: i, column: line.length}, lineCommentEnd);\n doc.insertInLine({row: i, column: minIndent}, lineCommentStart);\n }\n };\n\n var uncomment = function(line, i) {\n var m;\n if (m = line.match(regexpEnd))\n doc.removeInLine(i, line.length - m[0].length, line.length);\n if (m = line.match(regexpStart))\n doc.removeInLine(i, m[1].length, m[0].length);\n };\n\n var testRemove = function(line, row) {\n if (regexpStart.test(line))\n return true;\n var tokens = session.getTokens(row);\n for (var i = 0; i < tokens.length; i++) {\n if (tokens[i].type === \"comment\")\n return true;\n }\n };\n } else {\n if (Array.isArray(this.lineCommentStart)) {\n var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join(\"|\");\n var lineCommentStart = this.lineCommentStart[0];\n } else {\n var regexpStart = lang.escapeRegExp(this.lineCommentStart);\n var lineCommentStart = this.lineCommentStart;\n }\n regexpStart = new RegExp(\"^(\\\\s*)(?:\" + regexpStart + \") ?\");\n \n insertAtTabStop = session.getUseSoftTabs();\n\n var uncomment = function(line, i) {\n var m = line.match(regexpStart);\n if (!m) return;\n var start = m[1].length, end = m[0].length;\n if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == \" \")\n end--;\n doc.removeInLine(i, start, end);\n };\n var commentWithSpace = lineCommentStart + \" \";\n var comment = function(line, i) {\n if (!ignoreBlankLines || /\\S/.test(line)) {\n if (shouldInsertSpace(line, minIndent, minIndent))\n doc.insertInLine({row: i, column: minIndent}, commentWithSpace);\n else\n doc.insertInLine({row: i, column: minIndent}, lineCommentStart);\n }\n };\n var testRemove = function(line, i) {\n return regexpStart.test(line);\n };\n \n var shouldInsertSpace = function(line, before, after) {\n var spaces = 0;\n while (before-- && line.charAt(before) == \" \")\n spaces++;\n if (spaces % tabSize != 0)\n return false;\n var spaces = 0;\n while (line.charAt(after++) == \" \")\n spaces++;\n if (tabSize > 2)\n return spaces % tabSize != tabSize - 1;\n else\n return spaces % tabSize == 0;\n return true;\n };\n }\n\n function iter(fun) {\n for (var i = startRow; i <= endRow; i++)\n fun(doc.getLine(i), i);\n }\n\n\n var minEmptyLength = Infinity;\n iter(function(line, i) {\n var indent = line.search(/\\S/);\n if (indent !== -1) {\n if (indent < minIndent)\n minIndent = indent;\n if (shouldRemove && !testRemove(line, i))\n shouldRemove = false;\n } else if (minEmptyLength > line.length) {\n minEmptyLength = line.length;\n }\n });\n\n if (minIndent == Infinity) {\n minIndent = minEmptyLength;\n ignoreBlankLines = false;\n shouldRemove = false;\n }\n\n if (insertAtTabStop && minIndent % tabSize != 0)\n minIndent = Math.floor(minIndent / tabSize) * tabSize;\n\n iter(shouldRemove ? uncomment : comment);\n };\n\n this.toggleBlockComment = function(state, session, range, cursor) {\n var comment = this.blockComment;\n if (!comment)\n return;\n if (!comment.start && comment[0])\n comment = comment[0];\n\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n\n var sel = session.selection;\n var initialRange = session.selection.toOrientedRange();\n var startRow, colDiff;\n\n if (token && /comment/.test(token.type)) {\n var startRange, endRange;\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.start);\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n startRange = new Range(row, column, row, column + comment.start.length);\n break;\n }\n token = iterator.stepBackward();\n }\n\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.end);\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n endRange = new Range(row, column, row, column + comment.end.length);\n break;\n }\n token = iterator.stepForward();\n }\n if (endRange)\n session.remove(endRange);\n if (startRange) {\n session.remove(startRange);\n startRow = startRange.start.row;\n colDiff = -comment.start.length;\n }\n } else {\n colDiff = comment.start.length;\n startRow = range.start.row;\n session.insert(range.end, comment.end);\n session.insert(range.start, comment.start);\n }\n if (initialRange.start.row == startRow)\n initialRange.start.column += colDiff;\n if (initialRange.end.row == startRow)\n initialRange.end.column += colDiff;\n session.selection.fromOrientedRange(initialRange);\n };\n\n this.getNextLineIndent = function(state, line, tab) {\n return this.$getIndent(line);\n };\n\n this.checkOutdent = function(state, line, input) {\n return false;\n };\n\n this.autoOutdent = function(state, doc, row) {\n };\n\n this.$getIndent = function(line) {\n return line.match(/^\\s*/)[0];\n };\n\n this.createWorker = function(session) {\n return null;\n };\n\n this.createModeDelegates = function (mapping) {\n this.$embeds = [];\n this.$modes = {};\n for (var i in mapping) {\n if (mapping[i]) {\n this.$embeds.push(i);\n this.$modes[i] = new mapping[i]();\n }\n }\n\n var delegations = [\"toggleBlockComment\", \"toggleCommentLines\", \"getNextLineIndent\", \n \"checkOutdent\", \"autoOutdent\", \"transformAction\", \"getCompletions\"];\n\n for (var i = 0; i < delegations.length; i++) {\n (function(scope) {\n var functionName = delegations[i];\n var defaultHandler = scope[functionName];\n scope[delegations[i]] = function() {\n return this.$delegator(functionName, arguments, defaultHandler);\n };\n }(this));\n }\n };\n\n this.$delegator = function(method, args, defaultHandler) {\n var state = args[0];\n if (typeof state != \"string\")\n state = state[0];\n for (var i = 0; i < this.$embeds.length; i++) {\n if (!this.$modes[this.$embeds[i]]) continue;\n\n var split = state.split(this.$embeds[i]);\n if (!split[0] && split[1]) {\n args[0] = split[1];\n var mode = this.$modes[this.$embeds[i]];\n return mode[method].apply(mode, args);\n }\n }\n var ret = defaultHandler.apply(this, args);\n return defaultHandler ? ret : undefined;\n };\n\n this.transformAction = function(state, action, editor, session, param) {\n if (this.$behaviour) {\n var behaviours = this.$behaviour.getBehaviours();\n for (var key in behaviours) {\n if (behaviours[key][action]) {\n var ret = behaviours[key][action].apply(this, arguments);\n if (ret) {\n return ret;\n }\n }\n }\n }\n };\n \n this.getKeywords = function(append) {\n if (!this.completionKeywords) {\n var rules = this.$tokenizer.rules;\n var completionKeywords = [];\n for (var rule in rules) {\n var ruleItr = rules[rule];\n for (var r = 0, l = ruleItr.length; r < l; r++) {\n if (typeof ruleItr[r].token === \"string\") {\n if (/keyword|support|storage/.test(ruleItr[r].token))\n completionKeywords.push(ruleItr[r].regex);\n }\n else if (typeof ruleItr[r].token === \"object\") {\n for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) { \n if (/keyword|support|storage/.test(ruleItr[r].token[a])) {\n var rule = ruleItr[r].regex.match(/\\(.+?\\)/g)[a];\n completionKeywords.push(rule.substr(1, rule.length - 2));\n }\n }\n }\n }\n }\n this.completionKeywords = completionKeywords;\n }\n if (!append)\n return this.$keywordList;\n return completionKeywords.concat(this.$keywordList || []);\n };\n \n this.$createKeywordList = function() {\n if (!this.$highlightRules)\n this.getTokenizer();\n return this.$keywordList = this.$highlightRules.$keywordList || [];\n };\n\n this.getCompletions = function(state, session, pos, prefix) {\n var keywords = this.$keywordList || this.$createKeywordList();\n return keywords.map(function(word) {\n return {\n name: word,\n value: word,\n score: 0,\n meta: \"keyword\"\n };\n });\n };\n\n this.$id = \"ace/mode/text\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\n\nfunction throwDeltaError(delta, errorText){\n console.log(\"Invalid Delta:\", delta);\n throw \"Invalid Delta: \" + errorText;\n}\n\nfunction positionInDocument(docLines, position) {\n return position.row >= 0 && position.row < docLines.length &&\n position.column >= 0 && position.column <= docLines[position.row].length;\n}\n\nfunction validateDelta(docLines, delta) {\n if (delta.action != \"insert\" && delta.action != \"remove\")\n throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n if (!(delta.lines instanceof Array))\n throwDeltaError(delta, \"delta.lines must be an Array\");\n if (!delta.start || !delta.end)\n throwDeltaError(delta, \"delta.start/end must be an present\");\n var start = delta.start;\n if (!positionInDocument(docLines, delta.start))\n throwDeltaError(delta, \"delta.start must be contained in document\");\n var end = delta.end;\n if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n var numRangeRows = end.row - start.row;\n var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n throwDeltaError(delta, \"delta.range must match delta lines\");\n}\n\nexports.applyDelta = function(docLines, delta, doNotValidate) {\n \n var row = delta.start.row;\n var startColumn = delta.start.column;\n var line = docLines[row] || \"\";\n switch (delta.action) {\n case \"insert\":\n var lines = delta.lines;\n if (lines.length === 1) {\n docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n } else {\n var args = [row, 1].concat(delta.lines);\n docLines.splice.apply(docLines, args);\n docLines[row] = line.substring(0, startColumn) + docLines[row];\n docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n }\n break;\n case \"remove\":\n var endColumn = delta.end.column;\n var endRow = delta.end.row;\n if (row === endRow) {\n docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n } else {\n docLines.splice(\n row, endRow - row + 1,\n line.substring(0, startColumn) + docLines[endRow].substring(endColumn)\n );\n }\n break;\n }\n};\n});\n\nace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\n\nvar Anchor = exports.Anchor = function(doc, row, column) {\n this.$onChange = this.onChange.bind(this);\n this.attach(doc);\n \n if (typeof column == \"undefined\")\n this.setPosition(row.row, row.column);\n else\n this.setPosition(row, column);\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.getPosition = function() {\n return this.$clipPositionToDocument(this.row, this.column);\n };\n this.getDocument = function() {\n return this.document;\n };\n this.$insertRight = false;\n this.onChange = function(delta) {\n if (delta.start.row == delta.end.row && delta.start.row != this.row)\n return;\n\n if (delta.start.row > this.row)\n return;\n \n var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);\n this.setPosition(point.row, point.column, true);\n };\n \n function $pointsInOrder(point1, point2, equalPointsInOrder) {\n var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n }\n \n function $getTransformedPoint(delta, point, moveIfEqual) {\n var deltaIsInsert = delta.action == \"insert\";\n var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);\n var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n var deltaStart = delta.start;\n var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n return {\n row: point.row,\n column: point.column\n };\n }\n if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n return {\n row: point.row + deltaRowShift,\n column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n };\n }\n \n return {\n row: deltaStart.row,\n column: deltaStart.column\n };\n }\n this.setPosition = function(row, column, noClip) {\n var pos;\n if (noClip) {\n pos = {\n row: row,\n column: column\n };\n } else {\n pos = this.$clipPositionToDocument(row, column);\n }\n\n if (this.row == pos.row && this.column == pos.column)\n return;\n\n var old = {\n row: this.row,\n column: this.column\n };\n\n this.row = pos.row;\n this.column = pos.column;\n this._signal(\"change\", {\n old: old,\n value: pos\n });\n };\n this.detach = function() {\n this.document.removeEventListener(\"change\", this.$onChange);\n };\n this.attach = function(doc) {\n this.document = doc || this.document;\n this.document.on(\"change\", this.$onChange);\n };\n this.$clipPositionToDocument = function(row, column) {\n var pos = {};\n\n if (row >= this.document.getLength()) {\n pos.row = Math.max(0, this.document.getLength() - 1);\n pos.column = this.document.getLine(pos.row).length;\n }\n else if (row < 0) {\n pos.row = 0;\n pos.column = 0;\n }\n else {\n pos.row = row;\n pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n }\n\n if (column < 0)\n pos.column = 0;\n\n return pos;\n };\n\n}).call(Anchor.prototype);\n\n});\n\nace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar applyDelta = acequire(\"./apply_delta\").applyDelta;\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\nvar Range = acequire(\"./range\").Range;\nvar Anchor = acequire(\"./anchor\").Anchor;\n\nvar Document = function(textOrLines) {\n this.$lines = [\"\"];\n if (textOrLines.length === 0) {\n this.$lines = [\"\"];\n } else if (Array.isArray(textOrLines)) {\n this.insertMergedLines({row: 0, column: 0}, textOrLines);\n } else {\n this.insert({row: 0, column:0}, textOrLines);\n }\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.setValue = function(text) {\n var len = this.getLength() - 1;\n this.remove(new Range(0, 0, len, this.getLine(len).length));\n this.insert({row: 0, column: 0}, text);\n };\n this.getValue = function() {\n return this.getAllLines().join(this.getNewLineCharacter());\n };\n this.createAnchor = function(row, column) {\n return new Anchor(this, row, column);\n };\n if (\"aaa\".split(/a/).length === 0) {\n this.$split = function(text) {\n return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n };\n } else {\n this.$split = function(text) {\n return text.split(/\\r\\n|\\r|\\n/);\n };\n }\n\n\n this.$detectNewLine = function(text) {\n var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n this.$autoNewLine = match ? match[1] : \"\\n\";\n this._signal(\"changeNewLineMode\");\n };\n this.getNewLineCharacter = function() {\n switch (this.$newLineMode) {\n case \"windows\":\n return \"\\r\\n\";\n case \"unix\":\n return \"\\n\";\n default:\n return this.$autoNewLine || \"\\n\";\n }\n };\n\n this.$autoNewLine = \"\";\n this.$newLineMode = \"auto\";\n this.setNewLineMode = function(newLineMode) {\n if (this.$newLineMode === newLineMode)\n return;\n\n this.$newLineMode = newLineMode;\n this._signal(\"changeNewLineMode\");\n };\n this.getNewLineMode = function() {\n return this.$newLineMode;\n };\n this.isNewLine = function(text) {\n return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n };\n this.getLine = function(row) {\n return this.$lines[row] || \"\";\n };\n this.getLines = function(firstRow, lastRow) {\n return this.$lines.slice(firstRow, lastRow + 1);\n };\n this.getAllLines = function() {\n return this.getLines(0, this.getLength());\n };\n this.getLength = function() {\n return this.$lines.length;\n };\n this.getTextRange = function(range) {\n return this.getLinesForRange(range).join(this.getNewLineCharacter());\n };\n this.getLinesForRange = function(range) {\n var lines;\n if (range.start.row === range.end.row) {\n lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n } else {\n lines = this.getLines(range.start.row, range.end.row);\n lines[0] = (lines[0] || \"\").substring(range.start.column);\n var l = lines.length - 1;\n if (range.end.row - range.start.row == l)\n lines[l] = lines[l].substring(0, range.end.column);\n }\n return lines;\n };\n this.insertLines = function(row, lines) {\n console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n return this.insertFullLines(row, lines);\n };\n this.removeLines = function(firstRow, lastRow) {\n console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n return this.removeFullLines(firstRow, lastRow);\n };\n this.insertNewLine = function(position) {\n console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n return this.insertMergedLines(position, [\"\", \"\"]);\n };\n this.insert = function(position, text) {\n if (this.getLength() <= 1)\n this.$detectNewLine(text);\n \n return this.insertMergedLines(position, this.$split(text));\n };\n this.insertInLine = function(position, text) {\n var start = this.clippedPos(position.row, position.column);\n var end = this.pos(position.row, position.column + text.length);\n \n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: [text]\n }, true);\n \n return this.clonePos(end);\n };\n \n this.clippedPos = function(row, column) {\n var length = this.getLength();\n if (row === undefined) {\n row = length;\n } else if (row < 0) {\n row = 0;\n } else if (row >= length) {\n row = length - 1;\n column = undefined;\n }\n var line = this.getLine(row);\n if (column == undefined)\n column = line.length;\n column = Math.min(Math.max(column, 0), line.length);\n return {row: row, column: column};\n };\n \n this.clonePos = function(pos) {\n return {row: pos.row, column: pos.column};\n };\n \n this.pos = function(row, column) {\n return {row: row, column: column};\n };\n \n this.$clipPosition = function(position) {\n var length = this.getLength();\n if (position.row >= length) {\n position.row = Math.max(0, length - 1);\n position.column = this.getLine(length - 1).length;\n } else {\n position.row = Math.max(0, position.row);\n position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n }\n return position;\n };\n this.insertFullLines = function(row, lines) {\n row = Math.min(Math.max(row, 0), this.getLength());\n var column = 0;\n if (row < this.getLength()) {\n lines = lines.concat([\"\"]);\n column = 0;\n } else {\n lines = [\"\"].concat(lines);\n row--;\n column = this.$lines[row].length;\n }\n this.insertMergedLines({row: row, column: column}, lines);\n }; \n this.insertMergedLines = function(position, lines) {\n var start = this.clippedPos(position.row, position.column);\n var end = {\n row: start.row + lines.length - 1,\n column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n };\n \n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: lines\n });\n \n return this.clonePos(end);\n };\n this.remove = function(range) {\n var start = this.clippedPos(range.start.row, range.start.column);\n var end = this.clippedPos(range.end.row, range.end.column);\n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({start: start, end: end})\n });\n return this.clonePos(start);\n };\n this.removeInLine = function(row, startColumn, endColumn) {\n var start = this.clippedPos(row, startColumn);\n var end = this.clippedPos(row, endColumn);\n \n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({start: start, end: end})\n }, true);\n \n return this.clonePos(start);\n };\n this.removeFullLines = function(firstRow, lastRow) {\n firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n lastRow = Math.min(Math.max(0, lastRow ), this.getLength() - 1);\n var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n var deleteLastNewLine = lastRow < this.getLength() - 1;\n var startRow = ( deleteFirstNewLine ? firstRow - 1 : firstRow );\n var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0 );\n var endRow = ( deleteLastNewLine ? lastRow + 1 : lastRow );\n var endCol = ( deleteLastNewLine ? 0 : this.getLine(endRow).length ); \n var range = new Range(startRow, startCol, endRow, endCol);\n var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n \n this.applyDelta({\n start: range.start,\n end: range.end,\n action: \"remove\",\n lines: this.getLinesForRange(range)\n });\n return deletedLines;\n };\n this.removeNewLine = function(row) {\n if (row < this.getLength() - 1 && row >= 0) {\n this.applyDelta({\n start: this.pos(row, this.getLine(row).length),\n end: this.pos(row + 1, 0),\n action: \"remove\",\n lines: [\"\", \"\"]\n });\n }\n };\n this.replace = function(range, text) {\n if (!(range instanceof Range))\n range = Range.fromPoints(range.start, range.end);\n if (text.length === 0 && range.isEmpty())\n return range.start;\n if (text == this.getTextRange(range))\n return range.end;\n\n this.remove(range);\n var end;\n if (text) {\n end = this.insert(range.start, text);\n }\n else {\n end = range.start;\n }\n \n return end;\n };\n this.applyDeltas = function(deltas) {\n for (var i=0; i=0; i--) {\n this.revertDelta(deltas[i]);\n }\n };\n this.applyDelta = function(delta, doNotValidate) {\n var isInsert = delta.action == \"insert\";\n if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n : !Range.comparePoints(delta.start, delta.end)) {\n return;\n }\n \n if (isInsert && delta.lines.length > 20000)\n this.$splitAndapplyLargeDelta(delta, 20000);\n applyDelta(this.$lines, delta, doNotValidate);\n this._signal(\"change\", delta);\n };\n \n this.$splitAndapplyLargeDelta = function(delta, MAX) {\n var lines = delta.lines;\n var l = lines.length;\n var row = delta.start.row; \n var column = delta.start.column;\n var from = 0, to = 0;\n do {\n from = to;\n to += MAX - 1;\n var chunk = lines.slice(from, to);\n if (to > l) {\n delta.lines = chunk;\n delta.start.row = row + from;\n delta.start.column = column;\n break;\n }\n chunk.push(\"\");\n this.applyDelta({\n start: this.pos(row + from, column),\n end: this.pos(row + to, column = 0),\n action: delta.action,\n lines: chunk\n }, true);\n } while(true);\n };\n this.revertDelta = function(delta) {\n this.applyDelta({\n start: this.clonePos(delta.start),\n end: this.clonePos(delta.end),\n action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n lines: delta.lines.slice()\n });\n };\n this.indexToPosition = function(index, startRow) {\n var lines = this.$lines || this.getAllLines();\n var newlineLength = this.getNewLineCharacter().length;\n for (var i = startRow || 0, l = lines.length; i < l; i++) {\n index -= lines[i].length + newlineLength;\n if (index < 0)\n return {row: i, column: index + lines[i].length + newlineLength};\n }\n return {row: l-1, column: lines[l-1].length};\n };\n this.positionToIndex = function(pos, startRow) {\n var lines = this.$lines || this.getAllLines();\n var newlineLength = this.getNewLineCharacter().length;\n var index = 0;\n var row = Math.min(pos.row, lines.length);\n for (var i = startRow || 0; i < row; ++i)\n index += lines[i].length + newlineLength;\n\n return index + pos.column;\n };\n\n}).call(Document.prototype);\n\nexports.Document = Document;\n});\n\nace.define(\"ace/background_tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\n\nvar BackgroundTokenizer = function(tokenizer, editor) {\n this.running = false;\n this.lines = [];\n this.states = [];\n this.currentLine = 0;\n this.tokenizer = tokenizer;\n\n var self = this;\n\n this.$worker = function() {\n if (!self.running) { return; }\n\n var workerStart = new Date();\n var currentLine = self.currentLine;\n var endLine = -1;\n var doc = self.doc;\n\n var startLine = currentLine;\n while (self.lines[currentLine])\n currentLine++;\n \n var len = doc.getLength();\n var processedLines = 0;\n self.running = false;\n while (currentLine < len) {\n self.$tokenizeRow(currentLine);\n endLine = currentLine;\n do {\n currentLine++;\n } while (self.lines[currentLine]);\n processedLines ++;\n if ((processedLines % 5 === 0) && (new Date() - workerStart) > 20) { \n self.running = setTimeout(self.$worker, 20);\n break;\n }\n }\n self.currentLine = currentLine;\n \n if (endLine == -1)\n endLine = currentLine;\n\n if (startLine <= endLine)\n self.fireUpdateEvent(startLine, endLine);\n };\n};\n\n(function(){\n\n oop.implement(this, EventEmitter);\n this.setTokenizer = function(tokenizer) {\n this.tokenizer = tokenizer;\n this.lines = [];\n this.states = [];\n\n this.start(0);\n };\n this.setDocument = function(doc) {\n this.doc = doc;\n this.lines = [];\n this.states = [];\n\n this.stop();\n };\n this.fireUpdateEvent = function(firstRow, lastRow) {\n var data = {\n first: firstRow,\n last: lastRow\n };\n this._signal(\"update\", {data: data});\n };\n this.start = function(startRow) {\n this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength());\n this.lines.splice(this.currentLine, this.lines.length);\n this.states.splice(this.currentLine, this.states.length);\n\n this.stop();\n this.running = setTimeout(this.$worker, 700);\n };\n \n this.scheduleStart = function() {\n if (!this.running)\n this.running = setTimeout(this.$worker, 700);\n };\n\n this.$updateOnChange = function(delta) {\n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n\n if (len === 0) {\n this.lines[startRow] = null;\n } else if (delta.action == \"remove\") {\n this.lines.splice(startRow, len + 1, null);\n this.states.splice(startRow, len + 1, null);\n } else {\n var args = Array(len + 1);\n args.unshift(startRow, 1);\n this.lines.splice.apply(this.lines, args);\n this.states.splice.apply(this.states, args);\n }\n\n this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength());\n\n this.stop();\n };\n this.stop = function() {\n if (this.running)\n clearTimeout(this.running);\n this.running = false;\n };\n this.getTokens = function(row) {\n return this.lines[row] || this.$tokenizeRow(row);\n };\n this.getState = function(row) {\n if (this.currentLine == row)\n this.$tokenizeRow(row);\n return this.states[row] || \"start\";\n };\n\n this.$tokenizeRow = function(row) {\n var line = this.doc.getLine(row);\n var state = this.states[row - 1];\n\n var data = this.tokenizer.getLineTokens(line, state, row);\n\n if (this.states[row] + \"\" !== data.state + \"\") {\n this.states[row] = data.state;\n this.lines[row + 1] = null;\n if (this.currentLine > row + 1)\n this.currentLine = row + 1;\n } else if (this.currentLine == row) {\n this.currentLine = row + 1;\n }\n\n return this.lines[row] = data.tokens;\n };\n\n}).call(BackgroundTokenizer.prototype);\n\nexports.BackgroundTokenizer = BackgroundTokenizer;\n});\n\nace.define(\"ace/search_highlight\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar lang = acequire(\"./lib/lang\");\nvar oop = acequire(\"./lib/oop\");\nvar Range = acequire(\"./range\").Range;\n\nvar SearchHighlight = function(regExp, clazz, type) {\n this.setRegexp(regExp);\n this.clazz = clazz;\n this.type = type || \"text\";\n};\n\n(function() {\n this.MAX_RANGES = 500;\n \n this.setRegexp = function(regExp) {\n if (this.regExp+\"\" == regExp+\"\")\n return;\n this.regExp = regExp;\n this.cache = [];\n };\n\n this.update = function(html, markerLayer, session, config) {\n if (!this.regExp)\n return;\n var start = config.firstRow, end = config.lastRow;\n\n for (var i = start; i <= end; i++) {\n var ranges = this.cache[i];\n if (ranges == null) {\n ranges = lang.getMatchOffsets(session.getLine(i), this.regExp);\n if (ranges.length > this.MAX_RANGES)\n ranges = ranges.slice(0, this.MAX_RANGES);\n ranges = ranges.map(function(match) {\n return new Range(i, match.offset, i, match.offset + match.length);\n });\n this.cache[i] = ranges.length ? ranges : \"\";\n }\n\n for (var j = ranges.length; j --; ) {\n markerLayer.drawSingleLineMarker(\n html, ranges[j].toScreenRange(session), this.clazz, config);\n }\n }\n };\n\n}).call(SearchHighlight.prototype);\n\nexports.SearchHighlight = SearchHighlight;\n});\n\nace.define(\"ace/edit_session/fold_line\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Range = acequire(\"../range\").Range;\nfunction FoldLine(foldData, folds) {\n this.foldData = foldData;\n if (Array.isArray(folds)) {\n this.folds = folds;\n } else {\n folds = this.folds = [ folds ];\n }\n\n var last = folds[folds.length - 1];\n this.range = new Range(folds[0].start.row, folds[0].start.column,\n last.end.row, last.end.column);\n this.start = this.range.start;\n this.end = this.range.end;\n\n this.folds.forEach(function(fold) {\n fold.setFoldLine(this);\n }, this);\n}\n\n(function() {\n this.shiftRow = function(shift) {\n this.start.row += shift;\n this.end.row += shift;\n this.folds.forEach(function(fold) {\n fold.start.row += shift;\n fold.end.row += shift;\n });\n };\n\n this.addFold = function(fold) {\n if (fold.sameRow) {\n if (fold.start.row < this.startRow || fold.endRow > this.endRow) {\n throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");\n }\n this.folds.push(fold);\n this.folds.sort(function(a, b) {\n return -a.range.compareEnd(b.start.row, b.start.column);\n });\n if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) {\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n } else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) {\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n }\n } else if (fold.start.row == this.end.row) {\n this.folds.push(fold);\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n } else if (fold.end.row == this.start.row) {\n this.folds.unshift(fold);\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n } else {\n throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");\n }\n fold.foldLine = this;\n };\n\n this.containsRow = function(row) {\n return row >= this.start.row && row <= this.end.row;\n };\n\n this.walk = function(callback, endRow, endColumn) {\n var lastEnd = 0,\n folds = this.folds,\n fold,\n cmp, stop, isNewRow = true;\n\n if (endRow == null) {\n endRow = this.end.row;\n endColumn = this.end.column;\n }\n\n for (var i = 0; i < folds.length; i++) {\n fold = folds[i];\n\n cmp = fold.range.compareStart(endRow, endColumn);\n if (cmp == -1) {\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n return;\n }\n\n stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow);\n stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd);\n if (stop || cmp === 0) {\n return;\n }\n isNewRow = !fold.sameRow;\n lastEnd = fold.end.column;\n }\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n };\n\n this.getNextFoldTo = function(row, column) {\n var fold, cmp;\n for (var i = 0; i < this.folds.length; i++) {\n fold = this.folds[i];\n cmp = fold.range.compareEnd(row, column);\n if (cmp == -1) {\n return {\n fold: fold,\n kind: \"after\"\n };\n } else if (cmp === 0) {\n return {\n fold: fold,\n kind: \"inside\"\n };\n }\n }\n return null;\n };\n\n this.addRemoveChars = function(row, column, len) {\n var ret = this.getNextFoldTo(row, column),\n fold, folds;\n if (ret) {\n fold = ret.fold;\n if (ret.kind == \"inside\"\n && fold.start.column != column\n && fold.start.row != row)\n {\n window.console && window.console.log(row, column, fold);\n } else if (fold.start.row == row) {\n folds = this.folds;\n var i = folds.indexOf(fold);\n if (i === 0) {\n this.start.column += len;\n }\n for (i; i < folds.length; i++) {\n fold = folds[i];\n fold.start.column += len;\n if (!fold.sameRow) {\n return;\n }\n fold.end.column += len;\n }\n this.end.column += len;\n }\n }\n };\n\n this.split = function(row, column) {\n var pos = this.getNextFoldTo(row, column);\n \n if (!pos || pos.kind == \"inside\")\n return null;\n \n var fold = pos.fold;\n var folds = this.folds;\n var foldData = this.foldData;\n \n var i = folds.indexOf(fold);\n var foldBefore = folds[i - 1];\n this.end.row = foldBefore.end.row;\n this.end.column = foldBefore.end.column;\n folds = folds.splice(i, folds.length - i);\n\n var newFoldLine = new FoldLine(foldData, folds);\n foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine);\n return newFoldLine;\n };\n\n this.merge = function(foldLineNext) {\n var folds = foldLineNext.folds;\n for (var i = 0; i < folds.length; i++) {\n this.addFold(folds[i]);\n }\n var foldData = this.foldData;\n foldData.splice(foldData.indexOf(foldLineNext), 1);\n };\n\n this.toString = function() {\n var ret = [this.range.toString() + \": [\" ];\n\n this.folds.forEach(function(fold) {\n ret.push(\" \" + fold.toString());\n });\n ret.push(\"]\");\n return ret.join(\"\\n\");\n };\n\n this.idxToPosition = function(idx) {\n var lastFoldEndColumn = 0;\n\n for (var i = 0; i < this.folds.length; i++) {\n var fold = this.folds[i];\n\n idx -= fold.start.column - lastFoldEndColumn;\n if (idx < 0) {\n return {\n row: fold.start.row,\n column: fold.start.column + idx\n };\n }\n\n idx -= fold.placeholder.length;\n if (idx < 0) {\n return fold.start;\n }\n\n lastFoldEndColumn = fold.end.column;\n }\n\n return {\n row: this.end.row,\n column: this.end.column + idx\n };\n };\n}).call(FoldLine.prototype);\n\nexports.FoldLine = FoldLine;\n});\n\nace.define(\"ace/range_list\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\nvar Range = acequire(\"./range\").Range;\nvar comparePoints = Range.comparePoints;\n\nvar RangeList = function() {\n this.ranges = [];\n};\n\n(function() {\n this.comparePoints = comparePoints;\n\n this.pointIndex = function(pos, excludeEdges, startIndex) {\n var list = this.ranges;\n\n for (var i = startIndex || 0; i < list.length; i++) {\n var range = list[i];\n var cmpEnd = comparePoints(pos, range.end);\n if (cmpEnd > 0)\n continue;\n var cmpStart = comparePoints(pos, range.start);\n if (cmpEnd === 0)\n return excludeEdges && cmpStart !== 0 ? -i-2 : i;\n if (cmpStart > 0 || (cmpStart === 0 && !excludeEdges))\n return i;\n\n return -i-1;\n }\n return -i - 1;\n };\n\n this.add = function(range) {\n var excludeEdges = !range.isEmpty();\n var startIndex = this.pointIndex(range.start, excludeEdges);\n if (startIndex < 0)\n startIndex = -startIndex - 1;\n\n var endIndex = this.pointIndex(range.end, excludeEdges, startIndex);\n\n if (endIndex < 0)\n endIndex = -endIndex - 1;\n else\n endIndex++;\n return this.ranges.splice(startIndex, endIndex - startIndex, range);\n };\n\n this.addList = function(list) {\n var removed = [];\n for (var i = list.length; i--; ) {\n removed.push.apply(removed, this.add(list[i]));\n }\n return removed;\n };\n\n this.substractPoint = function(pos) {\n var i = this.pointIndex(pos);\n\n if (i >= 0)\n return this.ranges.splice(i, 1);\n };\n this.merge = function() {\n var removed = [];\n var list = this.ranges;\n \n list = list.sort(function(a, b) {\n return comparePoints(a.start, b.start);\n });\n \n var next = list[0], range;\n for (var i = 1; i < list.length; i++) {\n range = next;\n next = list[i];\n var cmp = comparePoints(range.end, next.start);\n if (cmp < 0)\n continue;\n\n if (cmp == 0 && !range.isEmpty() && !next.isEmpty())\n continue;\n\n if (comparePoints(range.end, next.end) < 0) {\n range.end.row = next.end.row;\n range.end.column = next.end.column;\n }\n\n list.splice(i, 1);\n removed.push(next);\n next = range;\n i--;\n }\n \n this.ranges = list;\n\n return removed;\n };\n\n this.contains = function(row, column) {\n return this.pointIndex({row: row, column: column}) >= 0;\n };\n\n this.containsPoint = function(pos) {\n return this.pointIndex(pos) >= 0;\n };\n\n this.rangeAtPoint = function(pos) {\n var i = this.pointIndex(pos);\n if (i >= 0)\n return this.ranges[i];\n };\n\n\n this.clipRows = function(startRow, endRow) {\n var list = this.ranges;\n if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow)\n return [];\n\n var startIndex = this.pointIndex({row: startRow, column: 0});\n if (startIndex < 0)\n startIndex = -startIndex - 1;\n var endIndex = this.pointIndex({row: endRow, column: 0}, startIndex);\n if (endIndex < 0)\n endIndex = -endIndex - 1;\n\n var clipped = [];\n for (var i = startIndex; i < endIndex; i++) {\n clipped.push(list[i]);\n }\n return clipped;\n };\n\n this.removeAll = function() {\n return this.ranges.splice(0, this.ranges.length);\n };\n\n this.attach = function(session) {\n if (this.session)\n this.detach();\n\n this.session = session;\n this.onChange = this.$onChange.bind(this);\n\n this.session.on('change', this.onChange);\n };\n\n this.detach = function() {\n if (!this.session)\n return;\n this.session.removeListener('change', this.onChange);\n this.session = null;\n };\n\n this.$onChange = function(delta) {\n if (delta.action == \"insert\"){\n var start = delta.start;\n var end = delta.end;\n } else {\n var end = delta.start;\n var start = delta.end;\n }\n var startRow = start.row;\n var endRow = end.row;\n var lineDif = endRow - startRow;\n\n var colDiff = -start.column + end.column;\n var ranges = this.ranges;\n\n for (var i = 0, n = ranges.length; i < n; i++) {\n var r = ranges[i];\n if (r.end.row < startRow)\n continue;\n if (r.start.row > startRow)\n break;\n\n if (r.start.row == startRow && r.start.column >= start.column ) {\n if (r.start.column == start.column && this.$insertRight) {\n } else {\n r.start.column += colDiff;\n r.start.row += lineDif;\n }\n }\n if (r.end.row == startRow && r.end.column >= start.column) {\n if (r.end.column == start.column && this.$insertRight) {\n continue;\n }\n if (r.end.column == start.column && colDiff > 0 && i < n - 1) { \n if (r.end.column > r.start.column && r.end.column == ranges[i+1].start.column)\n r.end.column -= colDiff;\n }\n r.end.column += colDiff;\n r.end.row += lineDif;\n }\n }\n\n if (lineDif != 0 && i < n) {\n for (; i < n; i++) {\n var r = ranges[i];\n r.start.row += lineDif;\n r.end.row += lineDif;\n }\n }\n };\n\n}).call(RangeList.prototype);\n\nexports.RangeList = RangeList;\n});\n\nace.define(\"ace/edit_session/fold\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/range_list\",\"ace/lib/oop\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Range = acequire(\"../range\").Range;\nvar RangeList = acequire(\"../range_list\").RangeList;\nvar oop = acequire(\"../lib/oop\");\nvar Fold = exports.Fold = function(range, placeholder) {\n this.foldLine = null;\n this.placeholder = placeholder;\n this.range = range;\n this.start = range.start;\n this.end = range.end;\n\n this.sameRow = range.start.row == range.end.row;\n this.subFolds = this.ranges = [];\n};\n\noop.inherits(Fold, RangeList);\n\n(function() {\n\n this.toString = function() {\n return '\"' + this.placeholder + '\" ' + this.range.toString();\n };\n\n this.setFoldLine = function(foldLine) {\n this.foldLine = foldLine;\n this.subFolds.forEach(function(fold) {\n fold.setFoldLine(foldLine);\n });\n };\n\n this.clone = function() {\n var range = this.range.clone();\n var fold = new Fold(range, this.placeholder);\n this.subFolds.forEach(function(subFold) {\n fold.subFolds.push(subFold.clone());\n });\n fold.collapseChildren = this.collapseChildren;\n return fold;\n };\n\n this.addSubFold = function(fold) {\n if (this.range.isEqual(fold))\n return;\n\n if (!this.range.containsRange(fold))\n throw new Error(\"A fold can't intersect already existing fold\" + fold.range + this.range);\n consumeRange(fold, this.start);\n\n var row = fold.start.row, column = fold.start.column;\n for (var i = 0, cmp = -1; i < this.subFolds.length; i++) {\n cmp = this.subFolds[i].range.compare(row, column);\n if (cmp != 1)\n break;\n }\n var afterStart = this.subFolds[i];\n\n if (cmp == 0)\n return afterStart.addSubFold(fold);\n var row = fold.range.end.row, column = fold.range.end.column;\n for (var j = i, cmp = -1; j < this.subFolds.length; j++) {\n cmp = this.subFolds[j].range.compare(row, column);\n if (cmp != 1)\n break;\n }\n var afterEnd = this.subFolds[j];\n\n if (cmp == 0)\n throw new Error(\"A fold can't intersect already existing fold\" + fold.range + this.range);\n\n var consumedFolds = this.subFolds.splice(i, j - i, fold);\n fold.setFoldLine(this.foldLine);\n\n return fold;\n };\n \n this.restoreRange = function(range) {\n return restoreRange(range, this.start);\n };\n\n}).call(Fold.prototype);\n\nfunction consumePoint(point, anchor) {\n point.row -= anchor.row;\n if (point.row == 0)\n point.column -= anchor.column;\n}\nfunction consumeRange(range, anchor) {\n consumePoint(range.start, anchor);\n consumePoint(range.end, anchor);\n}\nfunction restorePoint(point, anchor) {\n if (point.row == 0)\n point.column += anchor.column;\n point.row += anchor.row;\n}\nfunction restoreRange(range, anchor) {\n restorePoint(range.start, anchor);\n restorePoint(range.end, anchor);\n}\n\n});\n\nace.define(\"ace/edit_session/folding\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/edit_session/fold_line\",\"ace/edit_session/fold\",\"ace/token_iterator\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Range = acequire(\"../range\").Range;\nvar FoldLine = acequire(\"./fold_line\").FoldLine;\nvar Fold = acequire(\"./fold\").Fold;\nvar TokenIterator = acequire(\"../token_iterator\").TokenIterator;\n\nfunction Folding() {\n this.getFoldAt = function(row, column, side) {\n var foldLine = this.getFoldLine(row);\n if (!foldLine)\n return null;\n\n var folds = foldLine.folds;\n for (var i = 0; i < folds.length; i++) {\n var fold = folds[i];\n if (fold.range.contains(row, column)) {\n if (side == 1 && fold.range.isEnd(row, column)) {\n continue;\n } else if (side == -1 && fold.range.isStart(row, column)) {\n continue;\n }\n return fold;\n }\n }\n };\n this.getFoldsInRange = function(range) {\n var start = range.start;\n var end = range.end;\n var foldLines = this.$foldData;\n var foundFolds = [];\n\n start.column += 1;\n end.column -= 1;\n\n for (var i = 0; i < foldLines.length; i++) {\n var cmp = foldLines[i].range.compareRange(range);\n if (cmp == 2) {\n continue;\n }\n else if (cmp == -2) {\n break;\n }\n\n var folds = foldLines[i].folds;\n for (var j = 0; j < folds.length; j++) {\n var fold = folds[j];\n cmp = fold.range.compareRange(range);\n if (cmp == -2) {\n break;\n } else if (cmp == 2) {\n continue;\n } else\n if (cmp == 42) {\n break;\n }\n foundFolds.push(fold);\n }\n }\n start.column -= 1;\n end.column += 1;\n\n return foundFolds;\n };\n\n this.getFoldsInRangeList = function(ranges) {\n if (Array.isArray(ranges)) {\n var folds = [];\n ranges.forEach(function(range) {\n folds = folds.concat(this.getFoldsInRange(range));\n }, this);\n } else {\n var folds = this.getFoldsInRange(ranges);\n }\n return folds;\n };\n this.getAllFolds = function() {\n var folds = [];\n var foldLines = this.$foldData;\n \n for (var i = 0; i < foldLines.length; i++)\n for (var j = 0; j < foldLines[i].folds.length; j++)\n folds.push(foldLines[i].folds[j]);\n\n return folds;\n };\n this.getFoldStringAt = function(row, column, trim, foldLine) {\n foldLine = foldLine || this.getFoldLine(row);\n if (!foldLine)\n return null;\n\n var lastFold = {\n end: { column: 0 }\n };\n var str, fold;\n for (var i = 0; i < foldLine.folds.length; i++) {\n fold = foldLine.folds[i];\n var cmp = fold.range.compareEnd(row, column);\n if (cmp == -1) {\n str = this\n .getLine(fold.start.row)\n .substring(lastFold.end.column, fold.start.column);\n break;\n }\n else if (cmp === 0) {\n return null;\n }\n lastFold = fold;\n }\n if (!str)\n str = this.getLine(fold.start.row).substring(lastFold.end.column);\n\n if (trim == -1)\n return str.substring(0, column - lastFold.end.column);\n else if (trim == 1)\n return str.substring(column - lastFold.end.column);\n else\n return str;\n };\n\n this.getFoldLine = function(docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine)\n i = foldData.indexOf(startFoldLine);\n if (i == -1)\n i = 0;\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) {\n return foldLine;\n } else if (foldLine.end.row > docRow) {\n return null;\n }\n }\n return null;\n };\n this.getNextFoldLine = function(docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine)\n i = foldData.indexOf(startFoldLine);\n if (i == -1)\n i = 0;\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (foldLine.end.row >= docRow) {\n return foldLine;\n }\n }\n return null;\n };\n\n this.getFoldedRowCount = function(first, last) {\n var foldData = this.$foldData, rowCount = last-first+1;\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i],\n end = foldLine.end.row,\n start = foldLine.start.row;\n if (end >= last) {\n if (start < last) {\n if (start >= first)\n rowCount -= last-start;\n else\n rowCount = 0; // in one fold\n }\n break;\n } else if (end >= first){\n if (start >= first) // fold inside range\n rowCount -= end-start;\n else\n rowCount -= end-first+1;\n }\n }\n return rowCount;\n };\n\n this.$addFoldLine = function(foldLine) {\n this.$foldData.push(foldLine);\n this.$foldData.sort(function(a, b) {\n return a.start.row - b.start.row;\n });\n return foldLine;\n };\n this.addFold = function(placeholder, range) {\n var foldData = this.$foldData;\n var added = false;\n var fold;\n \n if (placeholder instanceof Fold)\n fold = placeholder;\n else {\n fold = new Fold(range, placeholder);\n fold.collapseChildren = range.collapseChildren;\n }\n this.$clipRangeToDocument(fold.range);\n\n var startRow = fold.start.row;\n var startColumn = fold.start.column;\n var endRow = fold.end.row;\n var endColumn = fold.end.column;\n if (!(startRow < endRow || \n startRow == endRow && startColumn <= endColumn - 2))\n throw new Error(\"The range has to be at least 2 characters width\");\n\n var startFold = this.getFoldAt(startRow, startColumn, 1);\n var endFold = this.getFoldAt(endRow, endColumn, -1);\n if (startFold && endFold == startFold)\n return startFold.addSubFold(fold);\n\n if (startFold && !startFold.range.isStart(startRow, startColumn))\n this.removeFold(startFold);\n \n if (endFold && !endFold.range.isEnd(endRow, endColumn))\n this.removeFold(endFold);\n var folds = this.getFoldsInRange(fold.range);\n if (folds.length > 0) {\n this.removeFolds(folds);\n folds.forEach(function(subFold) {\n fold.addSubFold(subFold);\n });\n }\n\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (endRow == foldLine.start.row) {\n foldLine.addFold(fold);\n added = true;\n break;\n } else if (startRow == foldLine.end.row) {\n foldLine.addFold(fold);\n added = true;\n if (!fold.sameRow) {\n var foldLineNext = foldData[i + 1];\n if (foldLineNext && foldLineNext.start.row == endRow) {\n foldLine.merge(foldLineNext);\n break;\n }\n }\n break;\n } else if (endRow <= foldLine.start.row) {\n break;\n }\n }\n\n if (!added)\n foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold));\n\n if (this.$useWrapMode)\n this.$updateWrapData(foldLine.start.row, foldLine.start.row);\n else\n this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row);\n this.$modified = true;\n this._signal(\"changeFold\", { data: fold, action: \"add\" });\n\n return fold;\n };\n\n this.addFolds = function(folds) {\n folds.forEach(function(fold) {\n this.addFold(fold);\n }, this);\n };\n\n this.removeFold = function(fold) {\n var foldLine = fold.foldLine;\n var startRow = foldLine.start.row;\n var endRow = foldLine.end.row;\n\n var foldLines = this.$foldData;\n var folds = foldLine.folds;\n if (folds.length == 1) {\n foldLines.splice(foldLines.indexOf(foldLine), 1);\n } else\n if (foldLine.range.isEnd(fold.end.row, fold.end.column)) {\n folds.pop();\n foldLine.end.row = folds[folds.length - 1].end.row;\n foldLine.end.column = folds[folds.length - 1].end.column;\n } else\n if (foldLine.range.isStart(fold.start.row, fold.start.column)) {\n folds.shift();\n foldLine.start.row = folds[0].start.row;\n foldLine.start.column = folds[0].start.column;\n } else\n if (fold.sameRow) {\n folds.splice(folds.indexOf(fold), 1);\n } else\n {\n var newFoldLine = foldLine.split(fold.start.row, fold.start.column);\n folds = newFoldLine.folds;\n folds.shift();\n newFoldLine.start.row = folds[0].start.row;\n newFoldLine.start.column = folds[0].start.column;\n }\n\n if (!this.$updating) {\n if (this.$useWrapMode)\n this.$updateWrapData(startRow, endRow);\n else\n this.$updateRowLengthCache(startRow, endRow);\n }\n this.$modified = true;\n this._signal(\"changeFold\", { data: fold, action: \"remove\" });\n };\n\n this.removeFolds = function(folds) {\n var cloneFolds = [];\n for (var i = 0; i < folds.length; i++) {\n cloneFolds.push(folds[i]);\n }\n\n cloneFolds.forEach(function(fold) {\n this.removeFold(fold);\n }, this);\n this.$modified = true;\n };\n\n this.expandFold = function(fold) {\n this.removeFold(fold);\n fold.subFolds.forEach(function(subFold) {\n fold.restoreRange(subFold);\n this.addFold(subFold);\n }, this);\n if (fold.collapseChildren > 0) {\n this.foldAll(fold.start.row+1, fold.end.row, fold.collapseChildren-1);\n }\n fold.subFolds = [];\n };\n\n this.expandFolds = function(folds) {\n folds.forEach(function(fold) {\n this.expandFold(fold);\n }, this);\n };\n\n this.unfold = function(location, expandInner) {\n var range, folds;\n if (location == null) {\n range = new Range(0, 0, this.getLength(), 0);\n expandInner = true;\n } else if (typeof location == \"number\")\n range = new Range(location, 0, location, this.getLine(location).length);\n else if (\"row\" in location)\n range = Range.fromPoints(location, location);\n else\n range = location;\n \n folds = this.getFoldsInRangeList(range);\n if (expandInner) {\n this.removeFolds(folds);\n } else {\n var subFolds = folds;\n while (subFolds.length) {\n this.expandFolds(subFolds);\n subFolds = this.getFoldsInRangeList(range);\n }\n }\n if (folds.length)\n return folds;\n };\n this.isRowFolded = function(docRow, startFoldRow) {\n return !!this.getFoldLine(docRow, startFoldRow);\n };\n\n this.getRowFoldEnd = function(docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.end.row : docRow;\n };\n\n this.getRowFoldStart = function(docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.start.row : docRow;\n };\n\n this.getFoldDisplayLine = function(foldLine, endRow, endColumn, startRow, startColumn) {\n if (startRow == null)\n startRow = foldLine.start.row;\n if (startColumn == null)\n startColumn = 0;\n if (endRow == null)\n endRow = foldLine.end.row;\n if (endColumn == null)\n endColumn = this.getLine(endRow).length;\n var doc = this.doc;\n var textLine = \"\";\n\n foldLine.walk(function(placeholder, row, column, lastColumn) {\n if (row < startRow)\n return;\n if (row == startRow) {\n if (column < startColumn)\n return;\n lastColumn = Math.max(startColumn, lastColumn);\n }\n\n if (placeholder != null) {\n textLine += placeholder;\n } else {\n textLine += doc.getLine(row).substring(lastColumn, column);\n }\n }, endRow, endColumn);\n return textLine;\n };\n\n this.getDisplayLine = function(row, endColumn, startRow, startColumn) {\n var foldLine = this.getFoldLine(row);\n\n if (!foldLine) {\n var line;\n line = this.doc.getLine(row);\n return line.substring(startColumn || 0, endColumn || line.length);\n } else {\n return this.getFoldDisplayLine(\n foldLine, row, endColumn, startRow, startColumn);\n }\n };\n\n this.$cloneFoldData = function() {\n var fd = [];\n fd = this.$foldData.map(function(foldLine) {\n var folds = foldLine.folds.map(function(fold) {\n return fold.clone();\n });\n return new FoldLine(fd, folds);\n });\n\n return fd;\n };\n\n this.toggleFold = function(tryToUnfold) {\n var selection = this.selection;\n var range = selection.getRange();\n var fold;\n var bracketPos;\n\n if (range.isEmpty()) {\n var cursor = range.start;\n fold = this.getFoldAt(cursor.row, cursor.column);\n\n if (fold) {\n this.expandFold(fold);\n return;\n } else if (bracketPos = this.findMatchingBracket(cursor)) {\n if (range.comparePoint(bracketPos) == 1) {\n range.end = bracketPos;\n } else {\n range.start = bracketPos;\n range.start.column++;\n range.end.column--;\n }\n } else if (bracketPos = this.findMatchingBracket({row: cursor.row, column: cursor.column + 1})) {\n if (range.comparePoint(bracketPos) == 1)\n range.end = bracketPos;\n else\n range.start = bracketPos;\n\n range.start.column++;\n } else {\n range = this.getCommentFoldRange(cursor.row, cursor.column) || range;\n }\n } else {\n var folds = this.getFoldsInRange(range);\n if (tryToUnfold && folds.length) {\n this.expandFolds(folds);\n return;\n } else if (folds.length == 1 ) {\n fold = folds[0];\n }\n }\n\n if (!fold)\n fold = this.getFoldAt(range.start.row, range.start.column);\n\n if (fold && fold.range.toString() == range.toString()) {\n this.expandFold(fold);\n return;\n }\n\n var placeholder = \"...\";\n if (!range.isMultiLine()) {\n placeholder = this.getTextRange(range);\n if (placeholder.length < 4)\n return;\n placeholder = placeholder.trim().substring(0, 2) + \"..\";\n }\n\n this.addFold(placeholder, range);\n };\n\n this.getCommentFoldRange = function(row, column, dir) {\n var iterator = new TokenIterator(this, row, column);\n var token = iterator.getCurrentToken();\n var type = token.type;\n if (token && /^comment|string/.test(type)) {\n type = type.match(/comment|string/)[0];\n if (type == \"comment\")\n type += \"|doc-start\";\n var re = new RegExp(type);\n var range = new Range();\n if (dir != 1) {\n do {\n token = iterator.stepBackward();\n } while (token && re.test(token.type));\n iterator.stepForward();\n }\n \n range.start.row = iterator.getCurrentTokenRow();\n range.start.column = iterator.getCurrentTokenColumn() + 2;\n\n iterator = new TokenIterator(this, row, column);\n \n if (dir != -1) {\n var lastRow = -1;\n do {\n token = iterator.stepForward();\n if (lastRow == -1) {\n var state = this.getState(iterator.$row);\n if (!re.test(state))\n lastRow = iterator.$row;\n } else if (iterator.$row > lastRow) {\n break;\n }\n } while (token && re.test(token.type));\n token = iterator.stepBackward();\n } else\n token = iterator.getCurrentToken();\n\n range.end.row = iterator.getCurrentTokenRow();\n range.end.column = iterator.getCurrentTokenColumn() + token.value.length - 2;\n return range;\n }\n };\n\n this.foldAll = function(startRow, endRow, depth) {\n if (depth == undefined)\n depth = 100000; // JSON.stringify doesn't hanle Infinity\n var foldWidgets = this.foldWidgets;\n if (!foldWidgets)\n return; // mode doesn't support folding\n endRow = endRow || this.getLength();\n startRow = startRow || 0;\n for (var row = startRow; row < endRow; row++) {\n if (foldWidgets[row] == null)\n foldWidgets[row] = this.getFoldWidget(row);\n if (foldWidgets[row] != \"start\")\n continue;\n\n var range = this.getFoldWidgetRange(row);\n if (range && range.isMultiLine()\n && range.end.row <= endRow\n && range.start.row >= startRow\n ) {\n row = range.end.row;\n try {\n var fold = this.addFold(\"...\", range);\n if (fold)\n fold.collapseChildren = depth;\n } catch(e) {}\n }\n }\n };\n this.$foldStyles = {\n \"manual\": 1,\n \"markbegin\": 1,\n \"markbeginend\": 1\n };\n this.$foldStyle = \"markbegin\";\n this.setFoldStyle = function(style) {\n if (!this.$foldStyles[style])\n throw new Error(\"invalid fold style: \" + style + \"[\" + Object.keys(this.$foldStyles).join(\", \") + \"]\");\n \n if (this.$foldStyle == style)\n return;\n\n this.$foldStyle = style;\n \n if (style == \"manual\")\n this.unfold();\n var mode = this.$foldMode;\n this.$setFolding(null);\n this.$setFolding(mode);\n };\n\n this.$setFolding = function(foldMode) {\n if (this.$foldMode == foldMode)\n return;\n \n this.$foldMode = foldMode;\n \n this.off('change', this.$updateFoldWidgets);\n this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n this._signal(\"changeAnnotation\");\n \n if (!foldMode || this.$foldStyle == \"manual\") {\n this.foldWidgets = null;\n return;\n }\n \n this.foldWidgets = [];\n this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle);\n this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle);\n \n this.$updateFoldWidgets = this.updateFoldWidgets.bind(this);\n this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this);\n this.on('change', this.$updateFoldWidgets);\n this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n };\n\n this.getParentFoldRangeData = function (row, ignoreCurrent) {\n var fw = this.foldWidgets;\n if (!fw || (ignoreCurrent && fw[row]))\n return {};\n\n var i = row - 1, firstRange;\n while (i >= 0) {\n var c = fw[i];\n if (c == null)\n c = fw[i] = this.getFoldWidget(i);\n\n if (c == \"start\") {\n var range = this.getFoldWidgetRange(i);\n if (!firstRange)\n firstRange = range;\n if (range && range.end.row >= row)\n break;\n }\n i--;\n }\n\n return {\n range: i !== -1 && range,\n firstRange: firstRange\n };\n };\n\n this.onFoldWidgetClick = function(row, e) {\n e = e.domEvent;\n var options = {\n children: e.shiftKey,\n all: e.ctrlKey || e.metaKey,\n siblings: e.altKey\n };\n \n var range = this.$toggleFoldWidget(row, options);\n if (!range) {\n var el = (e.target || e.srcElement);\n if (el && /ace_fold-widget/.test(el.className))\n el.className += \" ace_invalid\";\n }\n };\n \n this.$toggleFoldWidget = function(row, options) {\n if (!this.getFoldWidget)\n return;\n var type = this.getFoldWidget(row);\n var line = this.getLine(row);\n\n var dir = type === \"end\" ? -1 : 1;\n var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir);\n\n if (fold) {\n if (options.children || options.all)\n this.removeFold(fold);\n else\n this.expandFold(fold);\n return fold;\n }\n\n var range = this.getFoldWidgetRange(row, true);\n if (range && !range.isMultiLine()) {\n fold = this.getFoldAt(range.start.row, range.start.column, 1);\n if (fold && range.isEqual(fold.range)) {\n this.removeFold(fold);\n return fold;\n }\n }\n \n if (options.siblings) {\n var data = this.getParentFoldRangeData(row);\n if (data.range) {\n var startRow = data.range.start.row + 1;\n var endRow = data.range.end.row;\n }\n this.foldAll(startRow, endRow, options.all ? 10000 : 0);\n } else if (options.children) {\n endRow = range ? range.end.row : this.getLength();\n this.foldAll(row + 1, endRow, options.all ? 10000 : 0);\n } else if (range) {\n if (options.all) \n range.collapseChildren = 10000;\n this.addFold(\"...\", range);\n }\n \n return range;\n };\n \n \n \n this.toggleFoldWidget = function(toggleParent) {\n var row = this.selection.getCursor().row;\n row = this.getRowFoldStart(row);\n var range = this.$toggleFoldWidget(row, {});\n \n if (range)\n return;\n var data = this.getParentFoldRangeData(row, true);\n range = data.range || data.firstRange;\n \n if (range) {\n row = range.start.row;\n var fold = this.getFoldAt(row, this.getLine(row).length, 1);\n\n if (fold) {\n this.removeFold(fold);\n } else {\n this.addFold(\"...\", range);\n }\n }\n };\n\n this.updateFoldWidgets = function(delta) {\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\n\n if (len === 0) {\n this.foldWidgets[firstRow] = null;\n } else if (delta.action == 'remove') {\n this.foldWidgets.splice(firstRow, len + 1, null);\n } else {\n var args = Array(len + 1);\n args.unshift(firstRow, 1);\n this.foldWidgets.splice.apply(this.foldWidgets, args);\n }\n };\n this.tokenizerUpdateFoldWidgets = function(e) {\n var rows = e.data;\n if (rows.first != rows.last) {\n if (this.foldWidgets.length > rows.first)\n this.foldWidgets.splice(rows.first, this.foldWidgets.length);\n }\n };\n}\n\nexports.Folding = Folding;\n\n});\n\nace.define(\"ace/edit_session/bracket_match\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar TokenIterator = acequire(\"../token_iterator\").TokenIterator;\nvar Range = acequire(\"../range\").Range;\n\n\nfunction BracketMatch() {\n\n this.findMatchingBracket = function(position, chr) {\n if (position.column == 0) return null;\n\n var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column-1);\n if (charBeforeCursor == \"\") return null;\n\n var match = charBeforeCursor.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match)\n return null;\n\n if (match[1])\n return this.$findClosingBracket(match[1], position);\n else\n return this.$findOpeningBracket(match[2], position);\n };\n \n this.getBracketRange = function(pos) {\n var line = this.getLine(pos.row);\n var before = true, range;\n\n var chr = line.charAt(pos.column-1);\n var match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match) {\n chr = line.charAt(pos.column);\n pos = {row: pos.row, column: pos.column + 1};\n match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n before = false;\n }\n if (!match)\n return null;\n\n if (match[1]) {\n var bracketPos = this.$findClosingBracket(match[1], pos);\n if (!bracketPos)\n return null;\n range = Range.fromPoints(pos, bracketPos);\n if (!before) {\n range.end.column++;\n range.start.column--;\n }\n range.cursor = range.end;\n } else {\n var bracketPos = this.$findOpeningBracket(match[2], pos);\n if (!bracketPos)\n return null;\n range = Range.fromPoints(bracketPos, pos);\n if (!before) {\n range.start.column++;\n range.end.column--;\n }\n range.cursor = range.start;\n }\n \n return range;\n };\n\n this.$brackets = {\n \")\": \"(\",\n \"(\": \")\",\n \"]\": \"[\",\n \"[\": \"]\",\n \"{\": \"}\",\n \"}\": \"{\"\n };\n\n this.$findOpeningBracket = function(bracket, position, typeRe) {\n var openBracket = this.$brackets[bracket];\n var depth = 1;\n\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token)\n token = iterator.stepForward();\n if (!token)\n return;\n \n if (!typeRe){\n typeRe = new RegExp(\n \"(\\\\.?\" +\n token.type.replace(\".\", \"\\\\.\").replace(\"rparen\", \".paren\")\n .replace(/\\b(?:end)\\b/, \"(?:start|begin|end)\")\n + \")+\"\n );\n }\n var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2;\n var value = token.value;\n \n while (true) {\n \n while (valueIndex >= 0) {\n var chr = value.charAt(valueIndex);\n if (chr == openBracket) {\n depth -= 1;\n if (depth == 0) {\n return {row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn()};\n }\n }\n else if (chr == bracket) {\n depth += 1;\n }\n valueIndex -= 1;\n }\n do {\n token = iterator.stepBackward();\n } while (token && !typeRe.test(token.type));\n\n if (token == null)\n break;\n \n value = token.value;\n valueIndex = value.length - 1;\n }\n \n return null;\n };\n\n this.$findClosingBracket = function(bracket, position, typeRe) {\n var closingBracket = this.$brackets[bracket];\n var depth = 1;\n\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token)\n token = iterator.stepForward();\n if (!token)\n return;\n\n if (!typeRe){\n typeRe = new RegExp(\n \"(\\\\.?\" +\n token.type.replace(\".\", \"\\\\.\").replace(\"lparen\", \".paren\")\n .replace(/\\b(?:start|begin)\\b/, \"(?:start|begin|end)\")\n + \")+\"\n );\n }\n var valueIndex = position.column - iterator.getCurrentTokenColumn();\n\n while (true) {\n\n var value = token.value;\n var valueLength = value.length;\n while (valueIndex < valueLength) {\n var chr = value.charAt(valueIndex);\n if (chr == closingBracket) {\n depth -= 1;\n if (depth == 0) {\n return {row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn()};\n }\n }\n else if (chr == bracket) {\n depth += 1;\n }\n valueIndex += 1;\n }\n do {\n token = iterator.stepForward();\n } while (token && !typeRe.test(token.type));\n\n if (token == null)\n break;\n\n valueIndex = 0;\n }\n \n return null;\n };\n}\nexports.BracketMatch = BracketMatch;\n\n});\n\nace.define(\"ace/edit_session\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/bidihandler\",\"ace/config\",\"ace/lib/event_emitter\",\"ace/selection\",\"ace/mode/text\",\"ace/range\",\"ace/document\",\"ace/background_tokenizer\",\"ace/search_highlight\",\"ace/edit_session/folding\",\"ace/edit_session/bracket_match\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar lang = acequire(\"./lib/lang\");\nvar BidiHandler = acequire(\"./bidihandler\").BidiHandler;\nvar config = acequire(\"./config\");\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\nvar Selection = acequire(\"./selection\").Selection;\nvar TextMode = acequire(\"./mode/text\").Mode;\nvar Range = acequire(\"./range\").Range;\nvar Document = acequire(\"./document\").Document;\nvar BackgroundTokenizer = acequire(\"./background_tokenizer\").BackgroundTokenizer;\nvar SearchHighlight = acequire(\"./search_highlight\").SearchHighlight;\n\nvar EditSession = function(text, mode) {\n this.$breakpoints = [];\n this.$decorations = [];\n this.$frontMarkers = {};\n this.$backMarkers = {};\n this.$markerId = 1;\n this.$undoSelect = true;\n\n this.$foldData = [];\n this.id = \"session\" + (++EditSession.$uid);\n this.$foldData.toString = function() {\n return this.join(\"\\n\");\n };\n this.on(\"changeFold\", this.onChangeFold.bind(this));\n this.$onChange = this.onChange.bind(this);\n\n if (typeof text != \"object\" || !text.getLine)\n text = new Document(text);\n\n this.$bidiHandler = new BidiHandler(this);\n this.setDocument(text);\n this.selection = new Selection(this);\n\n config.resetOptions(this);\n this.setMode(mode);\n config._signal(\"session\", this);\n};\n\n\nEditSession.$uid = 0;\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.setDocument = function(doc) {\n if (this.doc)\n this.doc.removeListener(\"change\", this.$onChange);\n\n this.doc = doc;\n doc.on(\"change\", this.$onChange);\n\n if (this.bgTokenizer)\n this.bgTokenizer.setDocument(this.getDocument());\n\n this.resetCaches();\n };\n this.getDocument = function() {\n return this.doc;\n };\n this.$resetRowCache = function(docRow) {\n if (!docRow) {\n this.$docRowCache = [];\n this.$screenRowCache = [];\n return;\n }\n var l = this.$docRowCache.length;\n var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1;\n if (l > i) {\n this.$docRowCache.splice(i, l);\n this.$screenRowCache.splice(i, l);\n }\n };\n\n this.$getRowCacheIndex = function(cacheArray, val) {\n var low = 0;\n var hi = cacheArray.length - 1;\n\n while (low <= hi) {\n var mid = (low + hi) >> 1;\n var c = cacheArray[mid];\n\n if (val > c)\n low = mid + 1;\n else if (val < c)\n hi = mid - 1;\n else\n return mid;\n }\n\n return low -1;\n };\n\n this.resetCaches = function() {\n this.$modified = true;\n this.$wrapData = [];\n this.$rowLengthCache = [];\n this.$resetRowCache(0);\n if (this.bgTokenizer)\n this.bgTokenizer.start(0);\n };\n\n this.onChangeFold = function(e) {\n var fold = e.data;\n this.$resetRowCache(fold.start.row);\n };\n\n this.onChange = function(delta) {\n this.$modified = true;\n this.$bidiHandler.onChange(delta);\n this.$resetRowCache(delta.start.row);\n\n var removedFolds = this.$updateInternalDataOnChange(delta);\n if (!this.$fromUndo && this.$undoManager && !delta.ignore) {\n this.$deltasDoc.push(delta);\n if (removedFolds && removedFolds.length != 0) {\n this.$deltasFold.push({\n action: \"removeFolds\",\n folds: removedFolds\n });\n }\n\n this.$informUndoManager.schedule();\n }\n\n this.bgTokenizer && this.bgTokenizer.$updateOnChange(delta);\n this._signal(\"change\", delta);\n };\n this.setValue = function(text) {\n this.doc.setValue(text);\n this.selection.moveTo(0, 0);\n\n this.$resetRowCache(0);\n this.$deltas = [];\n this.$deltasDoc = [];\n this.$deltasFold = [];\n this.setUndoManager(this.$undoManager);\n this.getUndoManager().reset();\n };\n this.getValue =\n this.toString = function() {\n return this.doc.getValue();\n };\n this.getSelection = function() {\n return this.selection;\n };\n this.getState = function(row) {\n return this.bgTokenizer.getState(row);\n };\n this.getTokens = function(row) {\n return this.bgTokenizer.getTokens(row);\n };\n this.getTokenAt = function(row, column) {\n var tokens = this.bgTokenizer.getTokens(row);\n var token, c = 0;\n if (column == null) {\n var i = tokens.length - 1;\n c = this.getLine(row).length;\n } else {\n for (var i = 0; i < tokens.length; i++) {\n c += tokens[i].value.length;\n if (c >= column)\n break;\n }\n }\n token = tokens[i];\n if (!token)\n return null;\n token.index = i;\n token.start = c - token.value.length;\n return token;\n };\n this.setUndoManager = function(undoManager) {\n this.$undoManager = undoManager;\n this.$deltas = [];\n this.$deltasDoc = [];\n this.$deltasFold = [];\n\n if (this.$informUndoManager)\n this.$informUndoManager.cancel();\n\n if (undoManager) {\n var self = this;\n\n this.$syncInformUndoManager = function() {\n self.$informUndoManager.cancel();\n\n if (self.$deltasFold.length) {\n self.$deltas.push({\n group: \"fold\",\n deltas: self.$deltasFold\n });\n self.$deltasFold = [];\n }\n\n if (self.$deltasDoc.length) {\n self.$deltas.push({\n group: \"doc\",\n deltas: self.$deltasDoc\n });\n self.$deltasDoc = [];\n }\n\n if (self.$deltas.length > 0) {\n undoManager.execute({\n action: \"aceupdate\",\n args: [self.$deltas, self],\n merge: self.mergeUndoDeltas\n });\n }\n self.mergeUndoDeltas = false;\n self.$deltas = [];\n };\n this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager);\n }\n };\n this.markUndoGroup = function() {\n if (this.$syncInformUndoManager)\n this.$syncInformUndoManager();\n };\n \n this.$defaultUndoManager = {\n undo: function() {},\n redo: function() {},\n reset: function() {}\n };\n this.getUndoManager = function() {\n return this.$undoManager || this.$defaultUndoManager;\n };\n this.getTabString = function() {\n if (this.getUseSoftTabs()) {\n return lang.stringRepeat(\" \", this.getTabSize());\n } else {\n return \"\\t\";\n }\n };\n this.setUseSoftTabs = function(val) {\n this.setOption(\"useSoftTabs\", val);\n };\n this.getUseSoftTabs = function() {\n return this.$useSoftTabs && !this.$mode.$indentWithTabs;\n };\n this.setTabSize = function(tabSize) {\n this.setOption(\"tabSize\", tabSize);\n };\n this.getTabSize = function() {\n return this.$tabSize;\n };\n this.isTabStop = function(position) {\n return this.$useSoftTabs && (position.column % this.$tabSize === 0);\n };\n this.setNavigateWithinSoftTabs = function (navigateWithinSoftTabs) {\n this.setOption(\"navigateWithinSoftTabs\", navigateWithinSoftTabs);\n };\n this.getNavigateWithinSoftTabs = function() {\n return this.$navigateWithinSoftTabs;\n };\n\n this.$overwrite = false;\n this.setOverwrite = function(overwrite) {\n this.setOption(\"overwrite\", overwrite);\n };\n this.getOverwrite = function() {\n return this.$overwrite;\n };\n this.toggleOverwrite = function() {\n this.setOverwrite(!this.$overwrite);\n };\n this.addGutterDecoration = function(row, className) {\n if (!this.$decorations[row])\n this.$decorations[row] = \"\";\n this.$decorations[row] += \" \" + className;\n this._signal(\"changeBreakpoint\", {});\n };\n this.removeGutterDecoration = function(row, className) {\n this.$decorations[row] = (this.$decorations[row] || \"\").replace(\" \" + className, \"\");\n this._signal(\"changeBreakpoint\", {});\n };\n this.getBreakpoints = function() {\n return this.$breakpoints;\n };\n this.setBreakpoints = function(rows) {\n this.$breakpoints = [];\n for (var i=0; i 0)\n inToken = !!line.charAt(column - 1).match(this.tokenRe);\n\n if (!inToken)\n inToken = !!line.charAt(column).match(this.tokenRe);\n\n if (inToken)\n var re = this.tokenRe;\n else if (/^\\s+$/.test(line.slice(column-1, column+1)))\n var re = /\\s/;\n else\n var re = this.nonTokenRe;\n\n var start = column;\n if (start > 0) {\n do {\n start--;\n }\n while (start >= 0 && line.charAt(start).match(re));\n start++;\n }\n\n var end = column;\n while (end < line.length && line.charAt(end).match(re)) {\n end++;\n }\n\n return new Range(row, start, row, end);\n };\n this.getAWordRange = function(row, column) {\n var wordRange = this.getWordRange(row, column);\n var line = this.getLine(wordRange.end.row);\n\n while (line.charAt(wordRange.end.column).match(/[ \\t]/)) {\n wordRange.end.column += 1;\n }\n return wordRange;\n };\n this.setNewLineMode = function(newLineMode) {\n this.doc.setNewLineMode(newLineMode);\n };\n this.getNewLineMode = function() {\n return this.doc.getNewLineMode();\n };\n this.setUseWorker = function(useWorker) { this.setOption(\"useWorker\", useWorker); };\n this.getUseWorker = function() { return this.$useWorker; };\n this.onReloadTokenizer = function(e) {\n var rows = e.data;\n this.bgTokenizer.start(rows.first);\n this._signal(\"tokenizerUpdate\", e);\n };\n\n this.$modes = {};\n this.$mode = null;\n this.$modeId = null;\n this.setMode = function(mode, cb) {\n if (mode && typeof mode === \"object\") {\n if (mode.getTokenizer)\n return this.$onChangeMode(mode);\n var options = mode;\n var path = options.path;\n } else {\n path = mode || \"ace/mode/text\";\n }\n if (!this.$modes[\"ace/mode/text\"])\n this.$modes[\"ace/mode/text\"] = new TextMode();\n\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n cb && cb();\n return;\n }\n this.$modeId = path;\n config.loadModule([\"mode\", path], function(m) {\n if (this.$modeId !== path)\n return cb && cb();\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n } else if (m && m.Mode) {\n m = new m.Mode(options);\n if (!options) {\n this.$modes[path] = m;\n m.$id = path;\n }\n this.$onChangeMode(m);\n }\n cb && cb();\n }.bind(this));\n if (!this.$mode)\n this.$onChangeMode(this.$modes[\"ace/mode/text\"], true);\n };\n\n this.$onChangeMode = function(mode, $isPlaceholder) {\n if (!$isPlaceholder)\n this.$modeId = mode.$id;\n if (this.$mode === mode) \n return;\n\n this.$mode = mode;\n\n this.$stopWorker();\n\n if (this.$useWorker)\n this.$startWorker();\n\n var tokenizer = mode.getTokenizer();\n\n if(tokenizer.addEventListener !== undefined) {\n var onReloadTokenizer = this.onReloadTokenizer.bind(this);\n tokenizer.addEventListener(\"update\", onReloadTokenizer);\n }\n\n if (!this.bgTokenizer) {\n this.bgTokenizer = new BackgroundTokenizer(tokenizer);\n var _self = this;\n this.bgTokenizer.addEventListener(\"update\", function(e) {\n _self._signal(\"tokenizerUpdate\", e);\n });\n } else {\n this.bgTokenizer.setTokenizer(tokenizer);\n }\n\n this.bgTokenizer.setDocument(this.getDocument());\n\n this.tokenRe = mode.tokenRe;\n this.nonTokenRe = mode.nonTokenRe;\n\n \n if (!$isPlaceholder) {\n if (mode.attachToSession)\n mode.attachToSession(this);\n this.$options.wrapMethod.set.call(this, this.$wrapMethod);\n this.$setFolding(mode.foldingRules);\n this.bgTokenizer.start(0);\n this._emit(\"changeMode\");\n }\n };\n\n this.$stopWorker = function() {\n if (this.$worker) {\n this.$worker.terminate();\n this.$worker = null;\n }\n };\n\n this.$startWorker = function() {\n try {\n this.$worker = this.$mode.createWorker(this);\n } catch (e) {\n config.warn(\"Could not load worker\", e);\n this.$worker = null;\n }\n };\n this.getMode = function() {\n return this.$mode;\n };\n\n this.$scrollTop = 0;\n this.setScrollTop = function(scrollTop) {\n if (this.$scrollTop === scrollTop || isNaN(scrollTop))\n return;\n\n this.$scrollTop = scrollTop;\n this._signal(\"changeScrollTop\", scrollTop);\n };\n this.getScrollTop = function() {\n return this.$scrollTop;\n };\n\n this.$scrollLeft = 0;\n this.setScrollLeft = function(scrollLeft) {\n if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft))\n return;\n\n this.$scrollLeft = scrollLeft;\n this._signal(\"changeScrollLeft\", scrollLeft);\n };\n this.getScrollLeft = function() {\n return this.$scrollLeft;\n };\n this.getScreenWidth = function() {\n this.$computeWidth();\n if (this.lineWidgets) \n return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth);\n return this.screenWidth;\n };\n \n this.getLineWidgetMaxWidth = function() {\n if (this.lineWidgetsWidth != null) return this.lineWidgetsWidth;\n var width = 0;\n this.lineWidgets.forEach(function(w) {\n if (w && w.screenWidth > width)\n width = w.screenWidth;\n });\n return this.lineWidgetWidth = width;\n };\n\n this.$computeWidth = function(force) {\n if (this.$modified || force) {\n this.$modified = false;\n\n if (this.$useWrapMode)\n return this.screenWidth = this.$wrapLimit;\n\n var lines = this.doc.getAllLines();\n var cache = this.$rowLengthCache;\n var longestScreenLine = 0;\n var foldIndex = 0;\n var foldLine = this.$foldData[foldIndex];\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n var len = lines.length;\n\n for (var i = 0; i < len; i++) {\n if (i > foldStart) {\n i = foldLine.end.row + 1;\n if (i >= len)\n break;\n foldLine = this.$foldData[foldIndex++];\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n\n if (cache[i] == null)\n cache[i] = this.$getStringScreenWidth(lines[i])[0];\n\n if (cache[i] > longestScreenLine)\n longestScreenLine = cache[i];\n }\n this.screenWidth = longestScreenLine;\n }\n };\n this.getLine = function(row) {\n return this.doc.getLine(row);\n };\n this.getLines = function(firstRow, lastRow) {\n return this.doc.getLines(firstRow, lastRow);\n };\n this.getLength = function() {\n return this.doc.getLength();\n };\n this.getTextRange = function(range) {\n return this.doc.getTextRange(range || this.selection.getRange());\n };\n this.insert = function(position, text) {\n return this.doc.insert(position, text);\n };\n this.remove = function(range) {\n return this.doc.remove(range);\n };\n this.removeFullLines = function(firstRow, lastRow){\n return this.doc.removeFullLines(firstRow, lastRow);\n };\n this.undoChanges = function(deltas, dontSelect) {\n if (!deltas.length)\n return;\n\n this.$fromUndo = true;\n var lastUndoRange = null;\n for (var i = deltas.length - 1; i != -1; i--) {\n var delta = deltas[i];\n if (delta.group == \"doc\") {\n this.doc.revertDeltas(delta.deltas);\n lastUndoRange =\n this.$getUndoSelection(delta.deltas, true, lastUndoRange);\n } else {\n delta.deltas.forEach(function(foldDelta) {\n this.addFolds(foldDelta.folds);\n }, this);\n }\n }\n this.$fromUndo = false;\n lastUndoRange &&\n this.$undoSelect &&\n !dontSelect &&\n this.selection.setSelectionRange(lastUndoRange);\n return lastUndoRange;\n };\n this.redoChanges = function(deltas, dontSelect) {\n if (!deltas.length)\n return;\n\n this.$fromUndo = true;\n var lastUndoRange = null;\n for (var i = 0; i < deltas.length; i++) {\n var delta = deltas[i];\n if (delta.group == \"doc\") {\n this.doc.applyDeltas(delta.deltas);\n lastUndoRange =\n this.$getUndoSelection(delta.deltas, false, lastUndoRange);\n }\n }\n this.$fromUndo = false;\n lastUndoRange &&\n this.$undoSelect &&\n !dontSelect &&\n this.selection.setSelectionRange(lastUndoRange);\n return lastUndoRange;\n };\n this.setUndoSelect = function(enable) {\n this.$undoSelect = enable;\n };\n\n this.$getUndoSelection = function(deltas, isUndo, lastUndoRange) {\n function isInsert(delta) {\n return isUndo ? delta.action !== \"insert\" : delta.action === \"insert\";\n }\n\n var delta = deltas[0];\n var range, point;\n var lastDeltaIsInsert = false;\n if (isInsert(delta)) {\n range = Range.fromPoints(delta.start, delta.end);\n lastDeltaIsInsert = true;\n } else {\n range = Range.fromPoints(delta.start, delta.start);\n lastDeltaIsInsert = false;\n }\n\n for (var i = 1; i < deltas.length; i++) {\n delta = deltas[i];\n if (isInsert(delta)) {\n point = delta.start;\n if (range.compare(point.row, point.column) == -1) {\n range.setStart(point);\n }\n point = delta.end;\n if (range.compare(point.row, point.column) == 1) {\n range.setEnd(point);\n }\n lastDeltaIsInsert = true;\n } else {\n point = delta.start;\n if (range.compare(point.row, point.column) == -1) {\n range = Range.fromPoints(delta.start, delta.start);\n }\n lastDeltaIsInsert = false;\n }\n }\n if (lastUndoRange != null) {\n if (Range.comparePoints(lastUndoRange.start, range.start) === 0) {\n lastUndoRange.start.column += range.end.column - range.start.column;\n lastUndoRange.end.column += range.end.column - range.start.column;\n }\n\n var cmp = lastUndoRange.compareRange(range);\n if (cmp == 1) {\n range.setStart(lastUndoRange.start);\n } else if (cmp == -1) {\n range.setEnd(lastUndoRange.end);\n }\n }\n\n return range;\n };\n this.replace = function(range, text) {\n return this.doc.replace(range, text);\n };\n this.moveText = function(fromRange, toPosition, copy) {\n var text = this.getTextRange(fromRange);\n var folds = this.getFoldsInRange(fromRange);\n\n var toRange = Range.fromPoints(toPosition, toPosition);\n if (!copy) {\n this.remove(fromRange);\n var rowDiff = fromRange.start.row - fromRange.end.row;\n var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column;\n if (collDiff) {\n if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column)\n toRange.start.column += collDiff;\n if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column)\n toRange.end.column += collDiff;\n }\n if (rowDiff && toRange.start.row >= fromRange.end.row) {\n toRange.start.row += rowDiff;\n toRange.end.row += rowDiff;\n }\n }\n\n toRange.end = this.insert(toRange.start, text);\n if (folds.length) {\n var oldStart = fromRange.start;\n var newStart = toRange.start;\n var rowDiff = newStart.row - oldStart.row;\n var collDiff = newStart.column - oldStart.column;\n this.addFolds(folds.map(function(x) {\n x = x.clone();\n if (x.start.row == oldStart.row)\n x.start.column += collDiff;\n if (x.end.row == oldStart.row)\n x.end.column += collDiff;\n x.start.row += rowDiff;\n x.end.row += rowDiff;\n return x;\n }));\n }\n\n return toRange;\n };\n this.indentRows = function(startRow, endRow, indentString) {\n indentString = indentString.replace(/\\t/g, this.getTabString());\n for (var row=startRow; row<=endRow; row++)\n this.doc.insertInLine({row: row, column: 0}, indentString);\n };\n this.outdentRows = function (range) {\n var rowRange = range.collapseRows();\n var deleteRange = new Range(0, 0, 0, 0);\n var size = this.getTabSize();\n\n for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) {\n var line = this.getLine(i);\n\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n for (var j = 0; j < size; ++j)\n if (line.charAt(j) != ' ')\n break;\n if (j < size && line.charAt(j) == '\\t') {\n deleteRange.start.column = j;\n deleteRange.end.column = j + 1;\n } else {\n deleteRange.start.column = 0;\n deleteRange.end.column = j;\n }\n this.remove(deleteRange);\n }\n };\n\n this.$moveLines = function(firstRow, lastRow, dir) {\n firstRow = this.getRowFoldStart(firstRow);\n lastRow = this.getRowFoldEnd(lastRow);\n if (dir < 0) {\n var row = this.getRowFoldStart(firstRow + dir);\n if (row < 0) return 0;\n var diff = row-firstRow;\n } else if (dir > 0) {\n var row = this.getRowFoldEnd(lastRow + dir);\n if (row > this.doc.getLength()-1) return 0;\n var diff = row-lastRow;\n } else {\n firstRow = this.$clipRowToDocument(firstRow);\n lastRow = this.$clipRowToDocument(lastRow);\n var diff = lastRow - firstRow + 1;\n }\n\n var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE);\n var folds = this.getFoldsInRange(range).map(function(x){\n x = x.clone();\n x.start.row += diff;\n x.end.row += diff;\n return x;\n });\n \n var lines = dir == 0\n ? this.doc.getLines(firstRow, lastRow)\n : this.doc.removeFullLines(firstRow, lastRow);\n this.doc.insertFullLines(firstRow+diff, lines);\n folds.length && this.addFolds(folds);\n return diff;\n };\n this.moveLinesUp = function(firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, -1);\n };\n this.moveLinesDown = function(firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 1);\n };\n this.duplicateLines = function(firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 0);\n };\n\n\n this.$clipRowToDocument = function(row) {\n return Math.max(0, Math.min(row, this.doc.getLength()-1));\n };\n\n this.$clipColumnToRow = function(row, column) {\n if (column < 0)\n return 0;\n return Math.min(this.doc.getLine(row).length, column);\n };\n\n\n this.$clipPositionToDocument = function(row, column) {\n column = Math.max(0, column);\n\n if (row < 0) {\n row = 0;\n column = 0;\n } else {\n var len = this.doc.getLength();\n if (row >= len) {\n row = len - 1;\n column = this.doc.getLine(len-1).length;\n } else {\n column = Math.min(this.doc.getLine(row).length, column);\n }\n }\n\n return {\n row: row,\n column: column\n };\n };\n\n this.$clipRangeToDocument = function(range) {\n if (range.start.row < 0) {\n range.start.row = 0;\n range.start.column = 0;\n } else {\n range.start.column = this.$clipColumnToRow(\n range.start.row,\n range.start.column\n );\n }\n\n var len = this.doc.getLength() - 1;\n if (range.end.row > len) {\n range.end.row = len;\n range.end.column = this.doc.getLine(len).length;\n } else {\n range.end.column = this.$clipColumnToRow(\n range.end.row,\n range.end.column\n );\n }\n return range;\n };\n this.$wrapLimit = 80;\n this.$useWrapMode = false;\n this.$wrapLimitRange = {\n min : null,\n max : null\n };\n this.setUseWrapMode = function(useWrapMode) {\n if (useWrapMode != this.$useWrapMode) {\n this.$useWrapMode = useWrapMode;\n this.$modified = true;\n this.$resetRowCache(0);\n if (useWrapMode) {\n var len = this.getLength();\n this.$wrapData = Array(len);\n this.$updateWrapData(0, len - 1);\n }\n\n this._signal(\"changeWrapMode\");\n }\n };\n this.getUseWrapMode = function() {\n return this.$useWrapMode;\n };\n this.setWrapLimitRange = function(min, max) {\n if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) {\n this.$wrapLimitRange = { min: min, max: max };\n this.$modified = true;\n this.$bidiHandler.markAsDirty();\n if (this.$useWrapMode)\n this._signal(\"changeWrapMode\");\n }\n };\n this.adjustWrapLimit = function(desiredLimit, $printMargin) {\n var limits = this.$wrapLimitRange;\n if (limits.max < 0)\n limits = {min: $printMargin, max: $printMargin};\n var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max);\n if (wrapLimit != this.$wrapLimit && wrapLimit > 1) {\n this.$wrapLimit = wrapLimit;\n this.$modified = true;\n if (this.$useWrapMode) {\n this.$updateWrapData(0, this.getLength() - 1);\n this.$resetRowCache(0);\n this._signal(\"changeWrapLimit\");\n }\n return true;\n }\n return false;\n };\n\n this.$constrainWrapLimit = function(wrapLimit, min, max) {\n if (min)\n wrapLimit = Math.max(min, wrapLimit);\n\n if (max)\n wrapLimit = Math.min(max, wrapLimit);\n\n return wrapLimit;\n };\n this.getWrapLimit = function() {\n return this.$wrapLimit;\n };\n this.setWrapLimit = function (limit) {\n this.setWrapLimitRange(limit, limit);\n };\n this.getWrapLimitRange = function() {\n return {\n min : this.$wrapLimitRange.min,\n max : this.$wrapLimitRange.max\n };\n };\n\n this.$updateInternalDataOnChange = function(delta) {\n var useWrapMode = this.$useWrapMode;\n var action = delta.action;\n var start = delta.start;\n var end = delta.end;\n var firstRow = start.row;\n var lastRow = end.row;\n var len = lastRow - firstRow;\n var removedFolds = null;\n \n this.$updating = true;\n if (len != 0) {\n if (action === \"remove\") {\n this[useWrapMode ? \"$wrapData\" : \"$rowLengthCache\"].splice(firstRow, len);\n\n var foldLines = this.$foldData;\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n\n var foldLine = this.getFoldLine(end.row);\n var idx = 0;\n if (foldLine) {\n foldLine.addRemoveChars(end.row, end.column, start.column - end.column);\n foldLine.shiftRow(-len);\n\n var foldLineBefore = this.getFoldLine(firstRow);\n if (foldLineBefore && foldLineBefore !== foldLine) {\n foldLineBefore.merge(foldLine);\n foldLine = foldLineBefore;\n }\n idx = foldLines.indexOf(foldLine) + 1;\n }\n\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n if (foldLine.start.row >= end.row) {\n foldLine.shiftRow(-len);\n }\n }\n\n lastRow = firstRow;\n } else {\n var args = Array(len);\n args.unshift(firstRow, 0);\n var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache;\n arr.splice.apply(arr, args);\n var foldLines = this.$foldData;\n var foldLine = this.getFoldLine(firstRow);\n var idx = 0;\n if (foldLine) {\n var cmp = foldLine.range.compareInside(start.row, start.column);\n if (cmp == 0) {\n foldLine = foldLine.split(start.row, start.column);\n if (foldLine) {\n foldLine.shiftRow(len);\n foldLine.addRemoveChars(lastRow, 0, end.column - start.column);\n }\n } else\n if (cmp == -1) {\n foldLine.addRemoveChars(firstRow, 0, end.column - start.column);\n foldLine.shiftRow(len);\n }\n idx = foldLines.indexOf(foldLine) + 1;\n }\n\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n if (foldLine.start.row >= firstRow) {\n foldLine.shiftRow(len);\n }\n }\n }\n } else {\n len = Math.abs(delta.start.column - delta.end.column);\n if (action === \"remove\") {\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n\n len = -len;\n }\n var foldLine = this.getFoldLine(firstRow);\n if (foldLine) {\n foldLine.addRemoveChars(firstRow, start.column, len);\n }\n }\n\n if (useWrapMode && this.$wrapData.length != this.doc.getLength()) {\n console.error(\"doc.getLength() and $wrapData.length have to be the same!\");\n }\n this.$updating = false;\n\n if (useWrapMode)\n this.$updateWrapData(firstRow, lastRow);\n else\n this.$updateRowLengthCache(firstRow, lastRow);\n\n return removedFolds;\n };\n\n this.$updateRowLengthCache = function(firstRow, lastRow, b) {\n this.$rowLengthCache[firstRow] = null;\n this.$rowLengthCache[lastRow] = null;\n };\n\n this.$updateWrapData = function(firstRow, lastRow) {\n var lines = this.doc.getAllLines();\n var tabSize = this.getTabSize();\n var wrapData = this.$wrapData;\n var wrapLimit = this.$wrapLimit;\n var tokens;\n var foldLine;\n\n var row = firstRow;\n lastRow = Math.min(lastRow, lines.length - 1);\n while (row <= lastRow) {\n foldLine = this.getFoldLine(row, foldLine);\n if (!foldLine) {\n tokens = this.$getDisplayTokens(lines[row]);\n wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row ++;\n } else {\n tokens = [];\n foldLine.walk(function(placeholder, row, column, lastColumn) {\n var walkTokens;\n if (placeholder != null) {\n walkTokens = this.$getDisplayTokens(\n placeholder, tokens.length);\n walkTokens[0] = PLACEHOLDER_START;\n for (var i = 1; i < walkTokens.length; i++) {\n walkTokens[i] = PLACEHOLDER_BODY;\n }\n } else {\n walkTokens = this.$getDisplayTokens(\n lines[row].substring(lastColumn, column),\n tokens.length);\n }\n tokens = tokens.concat(walkTokens);\n }.bind(this),\n foldLine.end.row,\n lines[foldLine.end.row].length + 1\n );\n\n wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row = foldLine.end.row + 1;\n }\n }\n };\n var CHAR = 1,\n CHAR_EXT = 2,\n PLACEHOLDER_START = 3,\n PLACEHOLDER_BODY = 4,\n PUNCTUATION = 9,\n SPACE = 10,\n TAB = 11,\n TAB_SPACE = 12;\n\n\n this.$computeWrapSplits = function(tokens, wrapLimit, tabSize) {\n if (tokens.length == 0) {\n return [];\n }\n\n var splits = [];\n var displayLength = tokens.length;\n var lastSplit = 0, lastDocSplit = 0;\n\n var isCode = this.$wrapAsCode;\n\n var indentedSoftWrap = this.$indentedSoftWrap;\n var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8)\n || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2);\n\n function getWrapIndent() {\n var indentation = 0;\n if (maxIndent === 0)\n return indentation;\n if (indentedSoftWrap) {\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n if (token == SPACE)\n indentation += 1;\n else if (token == TAB)\n indentation += tabSize;\n else if (token == TAB_SPACE)\n continue;\n else\n break;\n }\n }\n if (isCode && indentedSoftWrap !== false)\n indentation += tabSize;\n return Math.min(indentation, maxIndent);\n }\n function addSplit(screenPos) {\n var displayed = tokens.slice(lastSplit, screenPos);\n var len = displayed.length;\n displayed.join(\"\")\n .replace(/12/g, function() {\n len -= 1;\n })\n .replace(/2/g, function() {\n len -= 1;\n });\n\n if (!splits.length) {\n indent = getWrapIndent();\n splits.indent = indent;\n }\n lastDocSplit += len;\n splits.push(lastDocSplit);\n lastSplit = screenPos;\n }\n var indent = 0;\n while (displayLength - lastSplit > wrapLimit - indent) {\n var split = lastSplit + wrapLimit - indent;\n if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) {\n addSplit(split);\n continue;\n }\n if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) {\n for (split; split != lastSplit - 1; split--) {\n if (tokens[split] == PLACEHOLDER_START) {\n break;\n }\n }\n if (split > lastSplit) {\n addSplit(split);\n continue;\n }\n split = lastSplit + wrapLimit;\n for (split; split < tokens.length; split++) {\n if (tokens[split] != PLACEHOLDER_BODY) {\n break;\n }\n }\n if (split == tokens.length) {\n break; // Breaks the while-loop.\n }\n addSplit(split);\n continue;\n }\n var minSplit = Math.max(split - (wrapLimit -(wrapLimit>>2)), lastSplit - 1);\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split --;\n }\n if (isCode) {\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split --;\n }\n while (split > minSplit && tokens[split] == PUNCTUATION) {\n split --;\n }\n } else {\n while (split > minSplit && tokens[split] < SPACE) {\n split --;\n }\n }\n if (split > minSplit) {\n addSplit(++split);\n continue;\n }\n split = lastSplit + wrapLimit;\n if (tokens[split] == CHAR_EXT)\n split--;\n addSplit(split - indent);\n }\n return splits;\n };\n this.$getDisplayTokens = function(str, offset) {\n var arr = [];\n var tabSize;\n offset = offset || 0;\n\n for (var i = 0; i < str.length; i++) {\n var c = str.charCodeAt(i);\n if (c == 9) {\n tabSize = this.getScreenTabSize(arr.length + offset);\n arr.push(TAB);\n for (var n = 1; n < tabSize; n++) {\n arr.push(TAB_SPACE);\n }\n }\n else if (c == 32) {\n arr.push(SPACE);\n } else if((c > 39 && c < 48) || (c > 57 && c < 64)) {\n arr.push(PUNCTUATION);\n }\n else if (c >= 0x1100 && isFullWidth(c)) {\n arr.push(CHAR, CHAR_EXT);\n } else {\n arr.push(CHAR);\n }\n }\n return arr;\n };\n this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn == 0)\n return [0, 0];\n if (maxScreenColumn == null)\n maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n\n var c, column;\n for (column = 0; column < str.length; column++) {\n c = str.charCodeAt(column);\n if (c == 9) {\n screenColumn += this.getScreenTabSize(screenColumn);\n }\n else if (c >= 0x1100 && isFullWidth(c)) {\n screenColumn += 2;\n } else {\n screenColumn += 1;\n }\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n\n return [screenColumn, column];\n };\n\n this.lineWidgets = null;\n this.getRowLength = function(row) {\n if (this.lineWidgets)\n var h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n else \n h = 0;\n if (!this.$useWrapMode || !this.$wrapData[row]) {\n return 1 + h;\n } else {\n return this.$wrapData[row].length + 1 + h;\n }\n };\n this.getRowLineCount = function(row) {\n if (!this.$useWrapMode || !this.$wrapData[row]) {\n return 1;\n } else {\n return this.$wrapData[row].length + 1;\n }\n };\n\n this.getRowWrapIndent = function(screenRow) {\n if (this.$useWrapMode) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n var splits = this.$wrapData[pos.row];\n return splits.length && splits[0] < pos.column ? splits.indent : 0;\n } else {\n return 0;\n }\n };\n this.getScreenLastRowColumn = function(screenRow) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n return this.documentToScreenColumn(pos.row, pos.column);\n };\n this.getDocumentLastRowColumn = function(docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.getScreenLastRowColumn(screenRow);\n };\n this.getDocumentLastRowColumnPosition = function(docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10);\n };\n this.getRowSplitData = function(row) {\n if (!this.$useWrapMode) {\n return undefined;\n } else {\n return this.$wrapData[row];\n }\n };\n this.getScreenTabSize = function(screenColumn) {\n return this.$tabSize - screenColumn % this.$tabSize;\n };\n\n\n this.screenToDocumentRow = function(screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).row;\n };\n\n\n this.screenToDocumentColumn = function(screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).column;\n };\n this.screenToDocumentPosition = function(screenRow, screenColumn, offsetX) {\n if (screenRow < 0)\n return {row: 0, column: 0};\n\n var line;\n var docRow = 0;\n var docColumn = 0;\n var column;\n var row = 0;\n var rowLength = 0;\n\n var rowCache = this.$screenRowCache;\n var i = this.$getRowCacheIndex(rowCache, screenRow);\n var l = rowCache.length;\n if (l && i >= 0) {\n var row = rowCache[i];\n var docRow = this.$docRowCache[i];\n var doCache = screenRow > rowCache[l - 1];\n } else {\n var doCache = !l;\n }\n\n var maxRow = this.getLength() - 1;\n var foldLine = this.getNextFoldLine(docRow);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (row <= screenRow) {\n rowLength = this.getRowLength(docRow);\n if (row + rowLength > screenRow || docRow >= maxRow) {\n break;\n } else {\n row += rowLength;\n docRow++;\n if (docRow > foldStart) {\n docRow = foldLine.end.row+1;\n foldLine = this.getNextFoldLine(docRow, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n }\n\n if (doCache) {\n this.$docRowCache.push(docRow);\n this.$screenRowCache.push(row);\n }\n }\n\n if (foldLine && foldLine.start.row <= docRow) {\n line = this.getFoldDisplayLine(foldLine);\n docRow = foldLine.start.row;\n } else if (row + rowLength <= screenRow || docRow > maxRow) {\n return {\n row: maxRow,\n column: this.getLine(maxRow).length\n };\n } else {\n line = this.getLine(docRow);\n foldLine = null;\n }\n var wrapIndent = 0, splitIndex = Math.floor(screenRow - row);\n if (this.$useWrapMode) {\n var splits = this.$wrapData[docRow];\n if (splits) {\n column = splits[splitIndex];\n if(splitIndex > 0 && splits.length) {\n wrapIndent = splits.indent;\n docColumn = splits[splitIndex - 1] || splits[splits.length - 1];\n line = line.substring(docColumn);\n }\n }\n }\n\n if (offsetX !== undefined && this.$bidiHandler.isBidiRow(row + splitIndex, docRow, splitIndex))\n screenColumn = this.$bidiHandler.offsetToCol(offsetX);\n\n docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1];\n if (this.$useWrapMode && docColumn >= column)\n docColumn = column - 1;\n\n if (foldLine)\n return foldLine.idxToPosition(docColumn);\n\n return {row: docRow, column: docColumn};\n };\n this.documentToScreenPosition = function(docRow, docColumn) {\n if (typeof docColumn === \"undefined\")\n var pos = this.$clipPositionToDocument(docRow.row, docRow.column);\n else\n pos = this.$clipPositionToDocument(docRow, docColumn);\n\n docRow = pos.row;\n docColumn = pos.column;\n\n var screenRow = 0;\n var foldStartRow = null;\n var fold = null;\n fold = this.getFoldAt(docRow, docColumn, 1);\n if (fold) {\n docRow = fold.start.row;\n docColumn = fold.start.column;\n }\n\n var rowEnd, row = 0;\n\n\n var rowCache = this.$docRowCache;\n var i = this.$getRowCacheIndex(rowCache, docRow);\n var l = rowCache.length;\n if (l && i >= 0) {\n var row = rowCache[i];\n var screenRow = this.$screenRowCache[i];\n var doCache = docRow > rowCache[l - 1];\n } else {\n var doCache = !l;\n }\n\n var foldLine = this.getNextFoldLine(row);\n var foldStart = foldLine ?foldLine.start.row :Infinity;\n\n while (row < docRow) {\n if (row >= foldStart) {\n rowEnd = foldLine.end.row + 1;\n if (rowEnd > docRow)\n break;\n foldLine = this.getNextFoldLine(rowEnd, foldLine);\n foldStart = foldLine ?foldLine.start.row :Infinity;\n }\n else {\n rowEnd = row + 1;\n }\n\n screenRow += this.getRowLength(row);\n row = rowEnd;\n\n if (doCache) {\n this.$docRowCache.push(row);\n this.$screenRowCache.push(screenRow);\n }\n }\n var textLine = \"\";\n if (foldLine && row >= foldStart) {\n textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn);\n foldStartRow = foldLine.start.row;\n } else {\n textLine = this.getLine(docRow).substring(0, docColumn);\n foldStartRow = docRow;\n }\n var wrapIndent = 0;\n if (this.$useWrapMode) {\n var wrapRow = this.$wrapData[foldStartRow];\n if (wrapRow) {\n var screenRowOffset = 0;\n while (textLine.length >= wrapRow[screenRowOffset]) {\n screenRow ++;\n screenRowOffset++;\n }\n textLine = textLine.substring(\n wrapRow[screenRowOffset - 1] || 0, textLine.length\n );\n wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0;\n }\n }\n\n return {\n row: screenRow,\n column: wrapIndent + this.$getStringScreenWidth(textLine)[0]\n };\n };\n this.documentToScreenColumn = function(row, docColumn) {\n return this.documentToScreenPosition(row, docColumn).column;\n };\n this.documentToScreenRow = function(docRow, docColumn) {\n return this.documentToScreenPosition(docRow, docColumn).row;\n };\n this.getScreenLength = function() {\n var screenRows = 0;\n var fold = null;\n if (!this.$useWrapMode) {\n screenRows = this.getLength();\n var foldData = this.$foldData;\n for (var i = 0; i < foldData.length; i++) {\n fold = foldData[i];\n screenRows -= fold.end.row - fold.start.row;\n }\n } else {\n var lastRow = this.$wrapData.length;\n var row = 0, i = 0;\n var fold = this.$foldData[i++];\n var foldStart = fold ? fold.start.row :Infinity;\n\n while (row < lastRow) {\n var splits = this.$wrapData[row];\n screenRows += splits ? splits.length + 1 : 1;\n row ++;\n if (row > foldStart) {\n row = fold.end.row+1;\n fold = this.$foldData[i++];\n foldStart = fold ?fold.start.row :Infinity;\n }\n }\n }\n if (this.lineWidgets)\n screenRows += this.$getWidgetScreenLength();\n\n return screenRows;\n };\n this.$setFontMetrics = function(fm) {\n if (!this.$enableVarChar) return;\n this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn === 0)\n return [0, 0];\n if (!maxScreenColumn)\n maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n \n var c, column;\n for (column = 0; column < str.length; column++) {\n c = str.charAt(column);\n if (c === \"\\t\") {\n screenColumn += this.getScreenTabSize(screenColumn);\n } else {\n screenColumn += fm.getCharacterWidth(c);\n }\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n \n return [screenColumn, column];\n };\n };\n \n this.destroy = function() {\n if (this.bgTokenizer) {\n this.bgTokenizer.setDocument(null);\n this.bgTokenizer = null;\n }\n this.$stopWorker();\n };\n\n this.isFullWidth = isFullWidth;\n function isFullWidth(c) {\n if (c < 0x1100)\n return false;\n return c >= 0x1100 && c <= 0x115F ||\n c >= 0x11A3 && c <= 0x11A7 ||\n c >= 0x11FA && c <= 0x11FF ||\n c >= 0x2329 && c <= 0x232A ||\n c >= 0x2E80 && c <= 0x2E99 ||\n c >= 0x2E9B && c <= 0x2EF3 ||\n c >= 0x2F00 && c <= 0x2FD5 ||\n c >= 0x2FF0 && c <= 0x2FFB ||\n c >= 0x3000 && c <= 0x303E ||\n c >= 0x3041 && c <= 0x3096 ||\n c >= 0x3099 && c <= 0x30FF ||\n c >= 0x3105 && c <= 0x312D ||\n c >= 0x3131 && c <= 0x318E ||\n c >= 0x3190 && c <= 0x31BA ||\n c >= 0x31C0 && c <= 0x31E3 ||\n c >= 0x31F0 && c <= 0x321E ||\n c >= 0x3220 && c <= 0x3247 ||\n c >= 0x3250 && c <= 0x32FE ||\n c >= 0x3300 && c <= 0x4DBF ||\n c >= 0x4E00 && c <= 0xA48C ||\n c >= 0xA490 && c <= 0xA4C6 ||\n c >= 0xA960 && c <= 0xA97C ||\n c >= 0xAC00 && c <= 0xD7A3 ||\n c >= 0xD7B0 && c <= 0xD7C6 ||\n c >= 0xD7CB && c <= 0xD7FB ||\n c >= 0xF900 && c <= 0xFAFF ||\n c >= 0xFE10 && c <= 0xFE19 ||\n c >= 0xFE30 && c <= 0xFE52 ||\n c >= 0xFE54 && c <= 0xFE66 ||\n c >= 0xFE68 && c <= 0xFE6B ||\n c >= 0xFF01 && c <= 0xFF60 ||\n c >= 0xFFE0 && c <= 0xFFE6;\n }\n\n}).call(EditSession.prototype);\n\nacequire(\"./edit_session/folding\").Folding.call(EditSession.prototype);\nacequire(\"./edit_session/bracket_match\").BracketMatch.call(EditSession.prototype);\n\n\nconfig.defineOptions(EditSession.prototype, \"session\", {\n wrap: {\n set: function(value) {\n if (!value || value == \"off\")\n value = false;\n else if (value == \"free\")\n value = true;\n else if (value == \"printMargin\")\n value = -1;\n else if (typeof value == \"string\")\n value = parseInt(value, 10) || false;\n\n if (this.$wrap == value)\n return;\n this.$wrap = value;\n if (!value) {\n this.setUseWrapMode(false);\n } else {\n var col = typeof value == \"number\" ? value : null;\n this.setWrapLimitRange(col, col);\n this.setUseWrapMode(true);\n }\n },\n get: function() {\n if (this.getUseWrapMode()) {\n if (this.$wrap == -1)\n return \"printMargin\";\n if (!this.getWrapLimitRange().min)\n return \"free\";\n return this.$wrap;\n }\n return \"off\";\n },\n handlesSet: true\n }, \n wrapMethod: {\n set: function(val) {\n val = val == \"auto\"\n ? this.$mode.type != \"text\"\n : val != \"text\";\n if (val != this.$wrapAsCode) {\n this.$wrapAsCode = val;\n if (this.$useWrapMode) {\n this.$modified = true;\n this.$resetRowCache(0);\n this.$updateWrapData(0, this.getLength() - 1);\n }\n }\n },\n initialValue: \"auto\"\n },\n indentedSoftWrap: { initialValue: true },\n firstLineNumber: {\n set: function() {this._signal(\"changeBreakpoint\");},\n initialValue: 1\n },\n useWorker: {\n set: function(useWorker) {\n this.$useWorker = useWorker;\n\n this.$stopWorker();\n if (useWorker)\n this.$startWorker();\n },\n initialValue: true\n },\n useSoftTabs: {initialValue: true},\n tabSize: {\n set: function(tabSize) {\n if (isNaN(tabSize) || this.$tabSize === tabSize) return;\n\n this.$modified = true;\n this.$rowLengthCache = [];\n this.$tabSize = tabSize;\n this._signal(\"changeTabSize\");\n },\n initialValue: 4,\n handlesSet: true\n },\n navigateWithinSoftTabs: {initialValue: false},\n overwrite: {\n set: function(val) {this._signal(\"changeOverwrite\");},\n initialValue: false\n },\n newLineMode: {\n set: function(val) {this.doc.setNewLineMode(val);},\n get: function() {return this.doc.getNewLineMode();},\n handlesSet: true\n },\n mode: {\n set: function(val) { this.setMode(val); },\n get: function() { return this.$modeId; }\n }\n});\n\nexports.EditSession = EditSession;\n});\n\nace.define(\"ace/search\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar lang = acequire(\"./lib/lang\");\nvar oop = acequire(\"./lib/oop\");\nvar Range = acequire(\"./range\").Range;\n\nvar Search = function() {\n this.$options = {};\n};\n\n(function() {\n this.set = function(options) {\n oop.mixin(this.$options, options);\n return this;\n };\n this.getOptions = function() {\n return lang.copyObject(this.$options);\n };\n this.setOptions = function(options) {\n this.$options = options;\n };\n this.find = function(session) {\n var options = this.$options;\n var iterator = this.$matchIterator(session, options);\n if (!iterator)\n return false;\n\n var firstRange = null;\n iterator.forEach(function(sr, sc, er, ec) {\n firstRange = new Range(sr, sc, er, ec);\n if (sc == ec && options.start && options.start.start\n && options.skipCurrent != false && firstRange.isEqual(options.start)\n ) {\n firstRange = null;\n return false;\n }\n\n return true;\n });\n\n return firstRange;\n };\n this.findAll = function(session) {\n var options = this.$options;\n if (!options.needle)\n return [];\n this.$assembleRegExp(options);\n\n var range = options.range;\n var lines = range\n ? session.getLines(range.start.row, range.end.row)\n : session.doc.getAllLines();\n\n var ranges = [];\n var re = options.re;\n if (options.$isMultiLine) {\n var len = re.length;\n var maxRow = lines.length - len;\n var prevRange;\n outer: for (var row = re.offset || 0; row <= maxRow; row++) {\n for (var j = 0; j < len; j++)\n if (lines[row + j].search(re[j]) == -1)\n continue outer;\n \n var startLine = lines[row];\n var line = lines[row + len - 1];\n var startIndex = startLine.length - startLine.match(re[0])[0].length;\n var endIndex = line.match(re[len - 1])[0].length;\n \n if (prevRange && prevRange.end.row === row &&\n prevRange.end.column > startIndex\n ) {\n continue;\n }\n ranges.push(prevRange = new Range(\n row, startIndex, row + len - 1, endIndex\n ));\n if (len > 2)\n row = row + len - 2;\n }\n } else {\n for (var i = 0; i < lines.length; i++) {\n var matches = lang.getMatchOffsets(lines[i], re);\n for (var j = 0; j < matches.length; j++) {\n var match = matches[j];\n ranges.push(new Range(i, match.offset, i, match.offset + match.length));\n }\n }\n }\n\n if (range) {\n var startColumn = range.start.column;\n var endColumn = range.start.column;\n var i = 0, j = ranges.length - 1;\n while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == range.start.row)\n i++;\n\n while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == range.end.row)\n j--;\n \n ranges = ranges.slice(i, j + 1);\n for (i = 0, j = ranges.length; i < j; i++) {\n ranges[i].start.row += range.start.row;\n ranges[i].end.row += range.start.row;\n }\n }\n\n return ranges;\n };\n this.replace = function(input, replacement) {\n var options = this.$options;\n\n var re = this.$assembleRegExp(options);\n if (options.$isMultiLine)\n return replacement;\n\n if (!re)\n return;\n\n var match = re.exec(input);\n if (!match || match[0].length != input.length)\n return null;\n \n replacement = input.replace(re, replacement);\n if (options.preserveCase) {\n replacement = replacement.split(\"\");\n for (var i = Math.min(input.length, input.length); i--; ) {\n var ch = input[i];\n if (ch && ch.toLowerCase() != ch)\n replacement[i] = replacement[i].toUpperCase();\n else\n replacement[i] = replacement[i].toLowerCase();\n }\n replacement = replacement.join(\"\");\n }\n \n return replacement;\n };\n\n this.$assembleRegExp = function(options, $disableFakeMultiline) {\n if (options.needle instanceof RegExp)\n return options.re = options.needle;\n\n var needle = options.needle;\n\n if (!options.needle)\n return options.re = false;\n\n if (!options.regExp)\n needle = lang.escapeRegExp(needle);\n\n if (options.wholeWord)\n needle = addWordBoundary(needle, options);\n\n var modifier = options.caseSensitive ? \"gm\" : \"gmi\";\n\n options.$isMultiLine = !$disableFakeMultiline && /[\\n\\r]/.test(needle);\n if (options.$isMultiLine)\n return options.re = this.$assembleMultilineRegExp(needle, modifier);\n\n try {\n var re = new RegExp(needle, modifier);\n } catch(e) {\n re = false;\n }\n return options.re = re;\n };\n\n this.$assembleMultilineRegExp = function(needle, modifier) {\n var parts = needle.replace(/\\r\\n|\\r|\\n/g, \"$\\n^\").split(\"\\n\");\n var re = [];\n for (var i = 0; i < parts.length; i++) try {\n re.push(new RegExp(parts[i], modifier));\n } catch(e) {\n return false;\n }\n return re;\n };\n\n this.$matchIterator = function(session, options) {\n var re = this.$assembleRegExp(options);\n if (!re)\n return false;\n var backwards = options.backwards == true;\n var skipCurrent = options.skipCurrent != false;\n\n var range = options.range;\n var start = options.start;\n if (!start)\n start = range ? range[backwards ? \"end\" : \"start\"] : session.selection.getRange();\n \n if (start.start)\n start = start[skipCurrent != backwards ? \"end\" : \"start\"];\n\n var firstRow = range ? range.start.row : 0;\n var lastRow = range ? range.end.row : session.getLength() - 1;\n\n if (backwards) {\n var forEach = function(callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback))\n return;\n for (row--; row >= firstRow; row--)\n if (forEachInLine(row, Number.MAX_VALUE, callback))\n return;\n if (options.wrap == false)\n return;\n for (row = lastRow, firstRow = start.row; row >= firstRow; row--)\n if (forEachInLine(row, Number.MAX_VALUE, callback))\n return;\n };\n }\n else {\n var forEach = function(callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback))\n return;\n for (row = row + 1; row <= lastRow; row++)\n if (forEachInLine(row, 0, callback))\n return;\n if (options.wrap == false)\n return;\n for (row = firstRow, lastRow = start.row; row <= lastRow; row++)\n if (forEachInLine(row, 0, callback))\n return;\n };\n }\n \n if (options.$isMultiLine) {\n var len = re.length;\n var forEachInLine = function(row, offset, callback) {\n var startRow = backwards ? row - len + 1 : row;\n if (startRow < 0) return;\n var line = session.getLine(startRow);\n var startIndex = line.search(re[0]);\n if (!backwards && startIndex < offset || startIndex === -1) return;\n for (var i = 1; i < len; i++) {\n line = session.getLine(startRow + i);\n if (line.search(re[i]) == -1)\n return;\n }\n var endIndex = line.match(re[len - 1])[0].length;\n if (backwards && endIndex > offset) return;\n if (callback(startRow, startIndex, startRow + len - 1, endIndex))\n return true;\n };\n }\n else if (backwards) {\n var forEachInLine = function(row, endIndex, callback) {\n var line = session.getLine(row);\n var matches = [];\n var m, last = 0;\n re.lastIndex = 0;\n while((m = re.exec(line))) {\n var length = m[0].length;\n last = m.index;\n if (!length) {\n if (last >= line.length) break;\n re.lastIndex = last += 1;\n }\n if (m.index + length > endIndex)\n break;\n matches.push(m.index, length);\n }\n for (var i = matches.length - 1; i >= 0; i -= 2) {\n var column = matches[i - 1];\n var length = matches[i];\n if (callback(row, column, row, column + length))\n return true;\n }\n };\n }\n else {\n var forEachInLine = function(row, startIndex, callback) {\n var line = session.getLine(row);\n var m;\n var last = startIndex;\n re.lastIndex = startIndex;\n while((m = re.exec(line))) {\n var length = m[0].length;\n last = m.index;\n if (callback(row, last, row,last + length))\n return true;\n if (!length) {\n re.lastIndex = last += 1;\n if (last >= line.length) return false;\n }\n }\n };\n }\n return {forEach: forEach};\n };\n\n}).call(Search.prototype);\n\nfunction addWordBoundary(needle, options) {\n function wordBoundary(c) {\n if (/\\w/.test(c) || options.regExp) return \"\\\\b\";\n return \"\";\n }\n return wordBoundary(needle[0]) + needle\n + wordBoundary(needle[needle.length - 1]);\n}\n\nexports.Search = Search;\n});\n\nace.define(\"ace/keyboard/hash_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar keyUtil = acequire(\"../lib/keys\");\nvar useragent = acequire(\"../lib/useragent\");\nvar KEY_MODS = keyUtil.KEY_MODS;\n\nfunction HashHandler(config, platform) {\n this.platform = platform || (useragent.isMac ? \"mac\" : \"win\");\n this.commands = {};\n this.commandKeyBinding = {};\n this.addCommands(config);\n this.$singleCommand = true;\n}\n\nfunction MultiHashHandler(config, platform) {\n HashHandler.call(this, config, platform);\n this.$singleCommand = false;\n}\n\nMultiHashHandler.prototype = HashHandler.prototype;\n\n(function() {\n \n\n this.addCommand = function(command) {\n if (this.commands[command.name])\n this.removeCommand(command);\n\n this.commands[command.name] = command;\n\n if (command.bindKey)\n this._buildKeyHash(command);\n };\n\n this.removeCommand = function(command, keepCommand) {\n var name = command && (typeof command === 'string' ? command : command.name);\n command = this.commands[name];\n if (!keepCommand)\n delete this.commands[name];\n var ckb = this.commandKeyBinding;\n for (var keyId in ckb) {\n var cmdGroup = ckb[keyId];\n if (cmdGroup == command) {\n delete ckb[keyId];\n } else if (Array.isArray(cmdGroup)) {\n var i = cmdGroup.indexOf(command);\n if (i != -1) {\n cmdGroup.splice(i, 1);\n if (cmdGroup.length == 1)\n ckb[keyId] = cmdGroup[0];\n }\n }\n }\n };\n\n this.bindKey = function(key, command, position) {\n if (typeof key == \"object\" && key) {\n if (position == undefined)\n position = key.position;\n key = key[this.platform];\n }\n if (!key)\n return;\n if (typeof command == \"function\")\n return this.addCommand({exec: command, bindKey: key, name: command.name || key});\n \n key.split(\"|\").forEach(function(keyPart) {\n var chain = \"\";\n if (keyPart.indexOf(\" \") != -1) {\n var parts = keyPart.split(/\\s+/);\n keyPart = parts.pop();\n parts.forEach(function(keyPart) {\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n chain += (chain ? \" \" : \"\") + id;\n this._addCommandToBinding(chain, \"chainKeys\");\n }, this);\n chain += \" \";\n }\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n this._addCommandToBinding(chain + id, command, position);\n }, this);\n };\n \n function getPosition(command) {\n return typeof command == \"object\" && command.bindKey\n && command.bindKey.position\n || (command.isDefault ? -100 : 0);\n }\n this._addCommandToBinding = function(keyId, command, position) {\n var ckb = this.commandKeyBinding, i;\n if (!command) {\n delete ckb[keyId];\n } else if (!ckb[keyId] || this.$singleCommand) {\n ckb[keyId] = command;\n } else {\n if (!Array.isArray(ckb[keyId])) {\n ckb[keyId] = [ckb[keyId]];\n } else if ((i = ckb[keyId].indexOf(command)) != -1) {\n ckb[keyId].splice(i, 1);\n }\n\n if (typeof position != \"number\") {\n position = getPosition(command);\n }\n\n var commands = ckb[keyId];\n for (i = 0; i < commands.length; i++) {\n var other = commands[i];\n var otherPos = getPosition(other);\n if (otherPos > position)\n break;\n }\n commands.splice(i, 0, command);\n }\n };\n\n this.addCommands = function(commands) {\n commands && Object.keys(commands).forEach(function(name) {\n var command = commands[name];\n if (!command)\n return;\n \n if (typeof command === \"string\")\n return this.bindKey(command, name);\n\n if (typeof command === \"function\")\n command = { exec: command };\n\n if (typeof command !== \"object\")\n return;\n\n if (!command.name)\n command.name = name;\n\n this.addCommand(command);\n }, this);\n };\n\n this.removeCommands = function(commands) {\n Object.keys(commands).forEach(function(name) {\n this.removeCommand(commands[name]);\n }, this);\n };\n\n this.bindKeys = function(keyList) {\n Object.keys(keyList).forEach(function(key) {\n this.bindKey(key, keyList[key]);\n }, this);\n };\n\n this._buildKeyHash = function(command) {\n this.bindKey(command.bindKey, command);\n };\n this.parseKeys = function(keys) {\n var parts = keys.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter(function(x){return x;});\n var key = parts.pop();\n\n var keyCode = keyUtil[key];\n if (keyUtil.FUNCTION_KEYS[keyCode])\n key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase();\n else if (!parts.length)\n return {key: key, hashId: -1};\n else if (parts.length == 1 && parts[0] == \"shift\")\n return {key: key.toUpperCase(), hashId: -1};\n\n var hashId = 0;\n for (var i = parts.length; i--;) {\n var modifier = keyUtil.KEY_MODS[parts[i]];\n if (modifier == null) {\n if (typeof console != \"undefined\")\n console.error(\"invalid modifier \" + parts[i] + \" in \" + keys);\n return false;\n }\n hashId |= modifier;\n }\n return {key: key, hashId: hashId};\n };\n\n this.findKeyCommand = function findKeyCommand(hashId, keyString) {\n var key = KEY_MODS[hashId] + keyString;\n return this.commandKeyBinding[key];\n };\n\n this.handleKeyboard = function(data, hashId, keyString, keyCode) {\n if (keyCode < 0) return;\n var key = KEY_MODS[hashId] + keyString;\n var command = this.commandKeyBinding[key];\n if (data.$keyChain) {\n data.$keyChain += \" \" + key;\n command = this.commandKeyBinding[data.$keyChain] || command;\n }\n \n if (command) {\n if (command == \"chainKeys\" || command[command.length - 1] == \"chainKeys\") {\n data.$keyChain = data.$keyChain || key;\n return {command: \"null\"};\n }\n }\n \n if (data.$keyChain) {\n if ((!hashId || hashId == 4) && keyString.length == 1)\n data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input\n else if (hashId == -1 || keyCode > 0)\n data.$keyChain = \"\"; // reset keyChain\n }\n return {command: command};\n };\n \n this.getStatusText = function(editor, data) {\n return data.$keyChain || \"\";\n };\n\n}).call(HashHandler.prototype);\n\nexports.HashHandler = HashHandler;\nexports.MultiHashHandler = MultiHashHandler;\n});\n\nace.define(\"ace/commands/command_manager\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../lib/oop\");\nvar MultiHashHandler = acequire(\"../keyboard/hash_handler\").MultiHashHandler;\nvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\n\nvar CommandManager = function(platform, commands) {\n MultiHashHandler.call(this, commands, platform);\n this.byName = this.commands;\n this.setDefaultHandler(\"exec\", function(e) {\n return e.command.exec(e.editor, e.args || {});\n });\n};\n\noop.inherits(CommandManager, MultiHashHandler);\n\n(function() {\n\n oop.implement(this, EventEmitter);\n\n this.exec = function(command, editor, args) {\n if (Array.isArray(command)) {\n for (var i = command.length; i--; ) {\n if (this.exec(command[i], editor, args)) return true;\n }\n return false;\n }\n\n if (typeof command === \"string\")\n command = this.commands[command];\n\n if (!command)\n return false;\n\n if (editor && editor.$readOnly && !command.readOnly)\n return false;\n\n if (command.isAvailable && !command.isAvailable(editor))\n return false;\n\n var e = {editor: editor, command: command, args: args};\n e.returnValue = this._emit(\"exec\", e);\n this._signal(\"afterExec\", e);\n\n return e.returnValue === false ? false : true;\n };\n\n this.toggleRecording = function(editor) {\n if (this.$inReplay)\n return;\n\n editor && editor._emit(\"changeStatus\");\n if (this.recording) {\n this.macro.pop();\n this.removeEventListener(\"exec\", this.$addCommandToMacro);\n\n if (!this.macro.length)\n this.macro = this.oldMacro;\n\n return this.recording = false;\n }\n if (!this.$addCommandToMacro) {\n this.$addCommandToMacro = function(e) {\n this.macro.push([e.command, e.args]);\n }.bind(this);\n }\n\n this.oldMacro = this.macro;\n this.macro = [];\n this.on(\"exec\", this.$addCommandToMacro);\n return this.recording = true;\n };\n\n this.replay = function(editor) {\n if (this.$inReplay || !this.macro)\n return;\n\n if (this.recording)\n return this.toggleRecording(editor);\n\n try {\n this.$inReplay = true;\n this.macro.forEach(function(x) {\n if (typeof x == \"string\")\n this.exec(x, editor);\n else\n this.exec(x[0], editor, x[1]);\n }, this);\n } finally {\n this.$inReplay = false;\n }\n };\n\n this.trimMacro = function(m) {\n return m.map(function(x){\n if (typeof x[0] != \"string\")\n x[0] = x[0].name;\n if (!x[1])\n x = x[0];\n return x;\n });\n };\n\n}).call(CommandManager.prototype);\n\nexports.CommandManager = CommandManager;\n\n});\n\nace.define(\"ace/commands/default_commands\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/config\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar lang = acequire(\"../lib/lang\");\nvar config = acequire(\"../config\");\nvar Range = acequire(\"../range\").Range;\n\nfunction bindKey(win, mac) {\n return {win: win, mac: mac};\n}\nexports.commands = [{\n name: \"showSettingsMenu\",\n bindKey: bindKey(\"Ctrl-,\", \"Command-,\"),\n exec: function(editor) {\n config.loadModule(\"ace/ext/settings_menu\", function(module) {\n module.init(editor);\n editor.showSettingsMenu();\n });\n },\n readOnly: true\n}, {\n name: \"goToNextError\",\n bindKey: bindKey(\"Alt-E\", \"F4\"),\n exec: function(editor) {\n config.loadModule(\"ace/ext/error_marker\", function(module) {\n module.showErrorMarker(editor, 1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n}, {\n name: \"goToPreviousError\",\n bindKey: bindKey(\"Alt-Shift-E\", \"Shift-F4\"),\n exec: function(editor) {\n config.loadModule(\"ace/ext/error_marker\", function(module) {\n module.showErrorMarker(editor, -1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n}, {\n name: \"selectall\",\n bindKey: bindKey(\"Ctrl-A\", \"Command-A\"),\n exec: function(editor) { editor.selectAll(); },\n readOnly: true\n}, {\n name: \"centerselection\",\n bindKey: bindKey(null, \"Ctrl-L\"),\n exec: function(editor) { editor.centerSelection(); },\n readOnly: true\n}, {\n name: \"gotoline\",\n bindKey: bindKey(\"Ctrl-L\", \"Command-L\"),\n exec: function(editor) {\n var line = parseInt(prompt(\"Enter line number:\"), 10);\n if (!isNaN(line)) {\n editor.gotoLine(line);\n }\n },\n readOnly: true\n}, {\n name: \"fold\",\n bindKey: bindKey(\"Alt-L|Ctrl-F1\", \"Command-Alt-L|Command-F1\"),\n exec: function(editor) { editor.session.toggleFold(false); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"unfold\",\n bindKey: bindKey(\"Alt-Shift-L|Ctrl-Shift-F1\", \"Command-Alt-Shift-L|Command-Shift-F1\"),\n exec: function(editor) { editor.session.toggleFold(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"toggleFoldWidget\",\n bindKey: bindKey(\"F2\", \"F2\"),\n exec: function(editor) { editor.session.toggleFoldWidget(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"toggleParentFoldWidget\",\n bindKey: bindKey(\"Alt-F2\", \"Alt-F2\"),\n exec: function(editor) { editor.session.toggleFoldWidget(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"foldall\",\n bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n exec: function(editor) { editor.session.foldAll(); },\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"foldOther\",\n bindKey: bindKey(\"Alt-0\", \"Command-Option-0\"),\n exec: function(editor) { \n editor.session.foldAll();\n editor.session.unfold(editor.selection.getAllRanges());\n },\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"unfoldall\",\n bindKey: bindKey(\"Alt-Shift-0\", \"Command-Option-Shift-0\"),\n exec: function(editor) { editor.session.unfold(); },\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"findnext\",\n bindKey: bindKey(\"Ctrl-K\", \"Command-G\"),\n exec: function(editor) { editor.findNext(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"findprevious\",\n bindKey: bindKey(\"Ctrl-Shift-K\", \"Command-Shift-G\"),\n exec: function(editor) { editor.findPrevious(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"selectOrFindNext\",\n bindKey: bindKey(\"Alt-K\", \"Ctrl-G\"),\n exec: function(editor) {\n if (editor.selection.isEmpty())\n editor.selection.selectWord();\n else\n editor.findNext(); \n },\n readOnly: true\n}, {\n name: \"selectOrFindPrevious\",\n bindKey: bindKey(\"Alt-Shift-K\", \"Ctrl-Shift-G\"),\n exec: function(editor) { \n if (editor.selection.isEmpty())\n editor.selection.selectWord();\n else\n editor.findPrevious();\n },\n readOnly: true\n}, {\n name: \"find\",\n bindKey: bindKey(\"Ctrl-F\", \"Command-F\"),\n exec: function(editor) {\n config.loadModule(\"ace/ext/searchbox\", function(e) {e.Search(editor);});\n },\n readOnly: true\n}, {\n name: \"overwrite\",\n bindKey: \"Insert\",\n exec: function(editor) { editor.toggleOverwrite(); },\n readOnly: true\n}, {\n name: \"selecttostart\",\n bindKey: bindKey(\"Ctrl-Shift-Home\", \"Command-Shift-Home|Command-Shift-Up\"),\n exec: function(editor) { editor.getSelection().selectFileStart(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n}, {\n name: \"gotostart\",\n bindKey: bindKey(\"Ctrl-Home\", \"Command-Home|Command-Up\"),\n exec: function(editor) { editor.navigateFileStart(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n}, {\n name: \"selectup\",\n bindKey: bindKey(\"Shift-Up\", \"Shift-Up|Ctrl-Shift-P\"),\n exec: function(editor) { editor.getSelection().selectUp(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"golineup\",\n bindKey: bindKey(\"Up\", \"Up|Ctrl-P\"),\n exec: function(editor, args) { editor.navigateUp(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selecttoend\",\n bindKey: bindKey(\"Ctrl-Shift-End\", \"Command-Shift-End|Command-Shift-Down\"),\n exec: function(editor) { editor.getSelection().selectFileEnd(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n}, {\n name: \"gotoend\",\n bindKey: bindKey(\"Ctrl-End\", \"Command-End|Command-Down\"),\n exec: function(editor) { editor.navigateFileEnd(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n}, {\n name: \"selectdown\",\n bindKey: bindKey(\"Shift-Down\", \"Shift-Down|Ctrl-Shift-N\"),\n exec: function(editor) { editor.getSelection().selectDown(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"golinedown\",\n bindKey: bindKey(\"Down\", \"Down|Ctrl-N\"),\n exec: function(editor, args) { editor.navigateDown(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectwordleft\",\n bindKey: bindKey(\"Ctrl-Shift-Left\", \"Option-Shift-Left\"),\n exec: function(editor) { editor.getSelection().selectWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotowordleft\",\n bindKey: bindKey(\"Ctrl-Left\", \"Option-Left\"),\n exec: function(editor) { editor.navigateWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selecttolinestart\",\n bindKey: bindKey(\"Alt-Shift-Left\", \"Command-Shift-Left|Ctrl-Shift-A\"),\n exec: function(editor) { editor.getSelection().selectLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotolinestart\",\n bindKey: bindKey(\"Alt-Left|Home\", \"Command-Left|Home|Ctrl-A\"),\n exec: function(editor) { editor.navigateLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectleft\",\n bindKey: bindKey(\"Shift-Left\", \"Shift-Left|Ctrl-Shift-B\"),\n exec: function(editor) { editor.getSelection().selectLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotoleft\",\n bindKey: bindKey(\"Left\", \"Left|Ctrl-B\"),\n exec: function(editor, args) { editor.navigateLeft(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectwordright\",\n bindKey: bindKey(\"Ctrl-Shift-Right\", \"Option-Shift-Right\"),\n exec: function(editor) { editor.getSelection().selectWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotowordright\",\n bindKey: bindKey(\"Ctrl-Right\", \"Option-Right\"),\n exec: function(editor) { editor.navigateWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selecttolineend\",\n bindKey: bindKey(\"Alt-Shift-Right\", \"Command-Shift-Right|Shift-End|Ctrl-Shift-E\"),\n exec: function(editor) { editor.getSelection().selectLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotolineend\",\n bindKey: bindKey(\"Alt-Right|End\", \"Command-Right|End|Ctrl-E\"),\n exec: function(editor) { editor.navigateLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectright\",\n bindKey: bindKey(\"Shift-Right\", \"Shift-Right\"),\n exec: function(editor) { editor.getSelection().selectRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotoright\",\n bindKey: bindKey(\"Right\", \"Right|Ctrl-F\"),\n exec: function(editor, args) { editor.navigateRight(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectpagedown\",\n bindKey: \"Shift-PageDown\",\n exec: function(editor) { editor.selectPageDown(); },\n readOnly: true\n}, {\n name: \"pagedown\",\n bindKey: bindKey(null, \"Option-PageDown\"),\n exec: function(editor) { editor.scrollPageDown(); },\n readOnly: true\n}, {\n name: \"gotopagedown\",\n bindKey: bindKey(\"PageDown\", \"PageDown|Ctrl-V\"),\n exec: function(editor) { editor.gotoPageDown(); },\n readOnly: true\n}, {\n name: \"selectpageup\",\n bindKey: \"Shift-PageUp\",\n exec: function(editor) { editor.selectPageUp(); },\n readOnly: true\n}, {\n name: \"pageup\",\n bindKey: bindKey(null, \"Option-PageUp\"),\n exec: function(editor) { editor.scrollPageUp(); },\n readOnly: true\n}, {\n name: \"gotopageup\",\n bindKey: \"PageUp\",\n exec: function(editor) { editor.gotoPageUp(); },\n readOnly: true\n}, {\n name: \"scrollup\",\n bindKey: bindKey(\"Ctrl-Up\", null),\n exec: function(e) { e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight); },\n readOnly: true\n}, {\n name: \"scrolldown\",\n bindKey: bindKey(\"Ctrl-Down\", null),\n exec: function(e) { e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight); },\n readOnly: true\n}, {\n name: \"selectlinestart\",\n bindKey: \"Shift-Home\",\n exec: function(editor) { editor.getSelection().selectLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectlineend\",\n bindKey: \"Shift-End\",\n exec: function(editor) { editor.getSelection().selectLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"togglerecording\",\n bindKey: bindKey(\"Ctrl-Alt-E\", \"Command-Option-E\"),\n exec: function(editor) { editor.commands.toggleRecording(editor); },\n readOnly: true\n}, {\n name: \"replaymacro\",\n bindKey: bindKey(\"Ctrl-Shift-E\", \"Command-Shift-E\"),\n exec: function(editor) { editor.commands.replay(editor); },\n readOnly: true\n}, {\n name: \"jumptomatching\",\n bindKey: bindKey(\"Ctrl-P\", \"Ctrl-P\"),\n exec: function(editor) { editor.jumpToMatching(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n}, {\n name: \"selecttomatching\",\n bindKey: bindKey(\"Ctrl-Shift-P\", \"Ctrl-Shift-P\"),\n exec: function(editor) { editor.jumpToMatching(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n}, {\n name: \"expandToMatching\",\n bindKey: bindKey(\"Ctrl-Shift-M\", \"Ctrl-Shift-M\"),\n exec: function(editor) { editor.jumpToMatching(true, true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n}, {\n name: \"passKeysToBrowser\",\n bindKey: bindKey(null, null),\n exec: function() {},\n passEvent: true,\n readOnly: true\n}, {\n name: \"copy\",\n exec: function(editor) {\n },\n readOnly: true\n},\n{\n name: \"cut\",\n exec: function(editor) {\n var range = editor.getSelectionRange();\n editor._emit(\"cut\", range);\n\n if (!editor.selection.isEmpty()) {\n editor.session.remove(range);\n editor.clearSelection();\n }\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n}, {\n name: \"paste\",\n exec: function(editor, args) {\n editor.$handlePaste(args);\n },\n scrollIntoView: \"cursor\"\n}, {\n name: \"removeline\",\n bindKey: bindKey(\"Ctrl-D\", \"Command-D\"),\n exec: function(editor) { editor.removeLines(); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEachLine\"\n}, {\n name: \"duplicateSelection\",\n bindKey: bindKey(\"Ctrl-Shift-D\", \"Command-Shift-D\"),\n exec: function(editor) { editor.duplicateSelection(); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n}, {\n name: \"sortlines\",\n bindKey: bindKey(\"Ctrl-Alt-S\", \"Command-Alt-S\"),\n exec: function(editor) { editor.sortLines(); },\n scrollIntoView: \"selection\",\n multiSelectAction: \"forEachLine\"\n}, {\n name: \"togglecomment\",\n bindKey: bindKey(\"Ctrl-/\", \"Command-/\"),\n exec: function(editor) { editor.toggleCommentLines(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"toggleBlockComment\",\n bindKey: bindKey(\"Ctrl-Shift-/\", \"Command-Shift-/\"),\n exec: function(editor) { editor.toggleBlockComment(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"modifyNumberUp\",\n bindKey: bindKey(\"Ctrl-Shift-Up\", \"Alt-Shift-Up\"),\n exec: function(editor) { editor.modifyNumber(1); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n}, {\n name: \"modifyNumberDown\",\n bindKey: bindKey(\"Ctrl-Shift-Down\", \"Alt-Shift-Down\"),\n exec: function(editor) { editor.modifyNumber(-1); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n}, {\n name: \"replace\",\n bindKey: bindKey(\"Ctrl-H\", \"Command-Option-F\"),\n exec: function(editor) {\n config.loadModule(\"ace/ext/searchbox\", function(e) {e.Search(editor, true);});\n }\n}, {\n name: \"undo\",\n bindKey: bindKey(\"Ctrl-Z\", \"Command-Z\"),\n exec: function(editor) { editor.undo(); }\n}, {\n name: \"redo\",\n bindKey: bindKey(\"Ctrl-Shift-Z|Ctrl-Y\", \"Command-Shift-Z|Command-Y\"),\n exec: function(editor) { editor.redo(); }\n}, {\n name: \"copylinesup\",\n bindKey: bindKey(\"Alt-Shift-Up\", \"Command-Option-Up\"),\n exec: function(editor) { editor.copyLinesUp(); },\n scrollIntoView: \"cursor\"\n}, {\n name: \"movelinesup\",\n bindKey: bindKey(\"Alt-Up\", \"Option-Up\"),\n exec: function(editor) { editor.moveLinesUp(); },\n scrollIntoView: \"cursor\"\n}, {\n name: \"copylinesdown\",\n bindKey: bindKey(\"Alt-Shift-Down\", \"Command-Option-Down\"),\n exec: function(editor) { editor.copyLinesDown(); },\n scrollIntoView: \"cursor\"\n}, {\n name: \"movelinesdown\",\n bindKey: bindKey(\"Alt-Down\", \"Option-Down\"),\n exec: function(editor) { editor.moveLinesDown(); },\n scrollIntoView: \"cursor\"\n}, {\n name: \"del\",\n bindKey: bindKey(\"Delete\", \"Delete|Ctrl-D|Shift-Delete\"),\n exec: function(editor) { editor.remove(\"right\"); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"backspace\",\n bindKey: bindKey(\n \"Shift-Backspace|Backspace\",\n \"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"\n ),\n exec: function(editor) { editor.remove(\"left\"); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"cut_or_delete\",\n bindKey: bindKey(\"Shift-Delete\", null),\n exec: function(editor) { \n if (editor.selection.isEmpty()) {\n editor.remove(\"left\");\n } else {\n return false;\n }\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"removetolinestart\",\n bindKey: bindKey(\"Alt-Backspace\", \"Command-Backspace\"),\n exec: function(editor) { editor.removeToLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"removetolineend\",\n bindKey: bindKey(\"Alt-Delete\", \"Ctrl-K|Command-Delete\"),\n exec: function(editor) { editor.removeToLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"removetolinestarthard\",\n bindKey: bindKey(\"Ctrl-Shift-Backspace\", null),\n exec: function(editor) {\n var range = editor.selection.getRange();\n range.start.column = 0;\n editor.session.remove(range);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"removetolineendhard\",\n bindKey: bindKey(\"Ctrl-Shift-Delete\", null),\n exec: function(editor) {\n var range = editor.selection.getRange();\n range.end.column = Number.MAX_VALUE;\n editor.session.remove(range);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"removewordleft\",\n bindKey: bindKey(\"Ctrl-Backspace\", \"Alt-Backspace|Ctrl-Alt-Backspace\"),\n exec: function(editor) { editor.removeWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"removewordright\",\n bindKey: bindKey(\"Ctrl-Delete\", \"Alt-Delete\"),\n exec: function(editor) { editor.removeWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"outdent\",\n bindKey: bindKey(\"Shift-Tab\", \"Shift-Tab\"),\n exec: function(editor) { editor.blockOutdent(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"indent\",\n bindKey: bindKey(\"Tab\", \"Tab\"),\n exec: function(editor) { editor.indent(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"blockoutdent\",\n bindKey: bindKey(\"Ctrl-[\", \"Ctrl-[\"),\n exec: function(editor) { editor.blockOutdent(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"blockindent\",\n bindKey: bindKey(\"Ctrl-]\", \"Ctrl-]\"),\n exec: function(editor) { editor.blockIndent(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"insertstring\",\n exec: function(editor, str) { editor.insert(str); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"inserttext\",\n exec: function(editor, args) {\n editor.insert(lang.stringRepeat(args.text || \"\", args.times || 1));\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"splitline\",\n bindKey: bindKey(null, \"Ctrl-O\"),\n exec: function(editor) { editor.splitLine(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"transposeletters\",\n bindKey: bindKey(\"Alt-Shift-X\", \"Ctrl-T\"),\n exec: function(editor) { editor.transposeLetters(); },\n multiSelectAction: function(editor) {editor.transposeSelections(1); },\n scrollIntoView: \"cursor\"\n}, {\n name: \"touppercase\",\n bindKey: bindKey(\"Ctrl-U\", \"Ctrl-U\"),\n exec: function(editor) { editor.toUpperCase(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"tolowercase\",\n bindKey: bindKey(\"Ctrl-Shift-U\", \"Ctrl-Shift-U\"),\n exec: function(editor) { editor.toLowerCase(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"expandtoline\",\n bindKey: bindKey(\"Ctrl-Shift-L\", \"Command-Shift-L\"),\n exec: function(editor) {\n var range = editor.selection.getRange();\n\n range.start.column = range.end.column = 0;\n range.end.row++;\n editor.selection.setRange(range, false);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"joinlines\",\n bindKey: bindKey(null, null),\n exec: function(editor) {\n var isBackwards = editor.selection.isBackwards();\n var selectionStart = isBackwards ? editor.selection.getSelectionLead() : editor.selection.getSelectionAnchor();\n var selectionEnd = isBackwards ? editor.selection.getSelectionAnchor() : editor.selection.getSelectionLead();\n var firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length;\n var selectedText = editor.session.doc.getTextRange(editor.selection.getRange());\n var selectedCount = selectedText.replace(/\\n\\s*/, \" \").length;\n var insertLine = editor.session.doc.getLine(selectionStart.row);\n\n for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) {\n var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i)));\n if (curLine.length !== 0) {\n curLine = \" \" + curLine;\n }\n insertLine += curLine;\n }\n\n if (selectionEnd.row + 1 < (editor.session.doc.getLength() - 1)) {\n insertLine += editor.session.doc.getNewLineCharacter();\n }\n\n editor.clearSelection();\n editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine);\n\n if (selectedCount > 0) {\n editor.selection.moveCursorTo(selectionStart.row, selectionStart.column);\n editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount);\n } else {\n firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? (firstLineEndCol + 1) : firstLineEndCol;\n editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol);\n }\n },\n multiSelectAction: \"forEach\",\n readOnly: true\n}, {\n name: \"invertSelection\",\n bindKey: bindKey(null, null),\n exec: function(editor) {\n var endRow = editor.session.doc.getLength() - 1;\n var endCol = editor.session.doc.getLine(endRow).length;\n var ranges = editor.selection.rangeList.ranges;\n var newRanges = [];\n if (ranges.length < 1) {\n ranges = [editor.selection.getRange()];\n }\n\n for (var i = 0; i < ranges.length; i++) {\n if (i == (ranges.length - 1)) {\n if (!(ranges[i].end.row === endRow && ranges[i].end.column === endCol)) {\n newRanges.push(new Range(ranges[i].end.row, ranges[i].end.column, endRow, endCol));\n }\n }\n\n if (i === 0) {\n if (!(ranges[i].start.row === 0 && ranges[i].start.column === 0)) {\n newRanges.push(new Range(0, 0, ranges[i].start.row, ranges[i].start.column));\n }\n } else {\n newRanges.push(new Range(ranges[i-1].end.row, ranges[i-1].end.column, ranges[i].start.row, ranges[i].start.column));\n }\n }\n\n editor.exitMultiSelectMode();\n editor.clearSelection();\n\n for(var i = 0; i < newRanges.length; i++) {\n editor.selection.addRange(newRanges[i], false);\n }\n },\n readOnly: true,\n scrollIntoView: \"none\"\n}];\n\n});\n\nace.define(\"ace/editor\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/keyboard/textinput\",\"ace/mouse/mouse_handler\",\"ace/mouse/fold_handler\",\"ace/keyboard/keybinding\",\"ace/edit_session\",\"ace/search\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/commands/command_manager\",\"ace/commands/default_commands\",\"ace/config\",\"ace/token_iterator\"], function(acequire, exports, module) {\n\"use strict\";\n\nacequire(\"./lib/fixoldbrowsers\");\n\nvar oop = acequire(\"./lib/oop\");\nvar dom = acequire(\"./lib/dom\");\nvar lang = acequire(\"./lib/lang\");\nvar useragent = acequire(\"./lib/useragent\");\nvar TextInput = acequire(\"./keyboard/textinput\").TextInput;\nvar MouseHandler = acequire(\"./mouse/mouse_handler\").MouseHandler;\nvar FoldHandler = acequire(\"./mouse/fold_handler\").FoldHandler;\nvar KeyBinding = acequire(\"./keyboard/keybinding\").KeyBinding;\nvar EditSession = acequire(\"./edit_session\").EditSession;\nvar Search = acequire(\"./search\").Search;\nvar Range = acequire(\"./range\").Range;\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\nvar CommandManager = acequire(\"./commands/command_manager\").CommandManager;\nvar defaultCommands = acequire(\"./commands/default_commands\").commands;\nvar config = acequire(\"./config\");\nvar TokenIterator = acequire(\"./token_iterator\").TokenIterator;\nvar Editor = function(renderer, session) {\n var container = renderer.getContainerElement();\n this.container = container;\n this.renderer = renderer;\n this.id = \"editor\" + (++Editor.$uid);\n\n this.commands = new CommandManager(useragent.isMac ? \"mac\" : \"win\", defaultCommands);\n if (typeof document == \"object\") {\n this.textInput = new TextInput(renderer.getTextAreaContainer(), this);\n this.renderer.textarea = this.textInput.getElement();\n this.$mouseHandler = new MouseHandler(this);\n new FoldHandler(this);\n }\n\n this.keyBinding = new KeyBinding(this);\n\n this.$blockScrolling = 0;\n this.$search = new Search().set({\n wrap: true\n });\n\n this.$historyTracker = this.$historyTracker.bind(this);\n this.commands.on(\"exec\", this.$historyTracker);\n\n this.$initOperationListeners();\n \n this._$emitInputEvent = lang.delayedCall(function() {\n this._signal(\"input\", {});\n if (this.session && this.session.bgTokenizer)\n this.session.bgTokenizer.scheduleStart();\n }.bind(this));\n \n this.on(\"change\", function(_, _self) {\n _self._$emitInputEvent.schedule(31);\n });\n\n this.setSession(session || new EditSession(\"\"));\n config.resetOptions(this);\n config._signal(\"editor\", this);\n};\n\nEditor.$uid = 0;\n\n(function(){\n\n oop.implement(this, EventEmitter);\n\n this.$initOperationListeners = function() {\n function last(a) {return a[a.length - 1];}\n\n this.selections = [];\n this.commands.on(\"exec\", this.startOperation.bind(this), true);\n this.commands.on(\"afterExec\", this.endOperation.bind(this), true);\n\n this.$opResetTimer = lang.delayedCall(this.endOperation.bind(this));\n\n this.on(\"change\", function() {\n this.curOp || this.startOperation();\n this.curOp.docChanged = true;\n }.bind(this), true);\n\n this.on(\"changeSelection\", function() {\n this.curOp || this.startOperation();\n this.curOp.selectionChanged = true;\n }.bind(this), true);\n };\n\n this.curOp = null;\n this.prevOp = {};\n this.startOperation = function(commadEvent) {\n if (this.curOp) {\n if (!commadEvent || this.curOp.command)\n return;\n this.prevOp = this.curOp;\n }\n if (!commadEvent) {\n this.previousCommand = null;\n commadEvent = {};\n }\n\n this.$opResetTimer.schedule();\n this.curOp = {\n command: commadEvent.command || {},\n args: commadEvent.args,\n scrollTop: this.renderer.scrollTop\n };\n if (this.curOp.command.name && this.curOp.command.scrollIntoView !== undefined)\n this.$blockScrolling++;\n };\n\n this.endOperation = function(e) {\n if (this.curOp) {\n if (e && e.returnValue === false)\n return this.curOp = null;\n this._signal(\"beforeEndOperation\");\n var command = this.curOp.command;\n if (command.name && this.$blockScrolling > 0)\n this.$blockScrolling--;\n var scrollIntoView = command && command.scrollIntoView;\n if (scrollIntoView) {\n switch (scrollIntoView) {\n case \"center-animate\":\n scrollIntoView = \"animate\";\n case \"center\":\n this.renderer.scrollCursorIntoView(null, 0.5);\n break;\n case \"animate\":\n case \"cursor\":\n this.renderer.scrollCursorIntoView();\n break;\n case \"selectionPart\":\n var range = this.selection.getRange();\n var config = this.renderer.layerConfig;\n if (range.start.row >= config.lastRow || range.end.row <= config.firstRow) {\n this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead);\n }\n break;\n default:\n break;\n }\n if (scrollIntoView == \"animate\")\n this.renderer.animateScrolling(this.curOp.scrollTop);\n }\n \n this.prevOp = this.curOp;\n this.curOp = null;\n }\n };\n this.$mergeableCommands = [\"backspace\", \"del\", \"insertstring\"];\n this.$historyTracker = function(e) {\n if (!this.$mergeUndoDeltas)\n return;\n\n var prev = this.prevOp;\n var mergeableCommands = this.$mergeableCommands;\n var shouldMerge = prev.command && (e.command.name == prev.command.name);\n if (e.command.name == \"insertstring\") {\n var text = e.args;\n if (this.mergeNextCommand === undefined)\n this.mergeNextCommand = true;\n\n shouldMerge = shouldMerge\n && this.mergeNextCommand // previous command allows to coalesce with\n && (!/\\s/.test(text) || /\\s/.test(prev.args)); // previous insertion was of same type\n\n this.mergeNextCommand = true;\n } else {\n shouldMerge = shouldMerge\n && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable\n }\n\n if (\n this.$mergeUndoDeltas != \"always\"\n && Date.now() - this.sequenceStartTime > 2000\n ) {\n shouldMerge = false; // the sequence is too long\n }\n\n if (shouldMerge)\n this.session.mergeUndoDeltas = true;\n else if (mergeableCommands.indexOf(e.command.name) !== -1)\n this.sequenceStartTime = Date.now();\n };\n this.setKeyboardHandler = function(keyboardHandler, cb) {\n if (keyboardHandler && typeof keyboardHandler === \"string\") {\n this.$keybindingId = keyboardHandler;\n var _self = this;\n config.loadModule([\"keybinding\", keyboardHandler], function(module) {\n if (_self.$keybindingId == keyboardHandler)\n _self.keyBinding.setKeyboardHandler(module && module.handler);\n cb && cb();\n });\n } else {\n this.$keybindingId = null;\n this.keyBinding.setKeyboardHandler(keyboardHandler);\n cb && cb();\n }\n };\n this.getKeyboardHandler = function() {\n return this.keyBinding.getKeyboardHandler();\n };\n this.setSession = function(session) {\n if (this.session == session)\n return;\n if (this.curOp) this.endOperation();\n this.curOp = {};\n\n var oldSession = this.session;\n if (oldSession) {\n this.session.off(\"change\", this.$onDocumentChange);\n this.session.off(\"changeMode\", this.$onChangeMode);\n this.session.off(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n this.session.off(\"changeTabSize\", this.$onChangeTabSize);\n this.session.off(\"changeWrapLimit\", this.$onChangeWrapLimit);\n this.session.off(\"changeWrapMode\", this.$onChangeWrapMode);\n this.session.off(\"changeFold\", this.$onChangeFold);\n this.session.off(\"changeFrontMarker\", this.$onChangeFrontMarker);\n this.session.off(\"changeBackMarker\", this.$onChangeBackMarker);\n this.session.off(\"changeBreakpoint\", this.$onChangeBreakpoint);\n this.session.off(\"changeAnnotation\", this.$onChangeAnnotation);\n this.session.off(\"changeOverwrite\", this.$onCursorChange);\n this.session.off(\"changeScrollTop\", this.$onScrollTopChange);\n this.session.off(\"changeScrollLeft\", this.$onScrollLeftChange);\n\n var selection = this.session.getSelection();\n selection.off(\"changeCursor\", this.$onCursorChange);\n selection.off(\"changeSelection\", this.$onSelectionChange);\n }\n\n this.session = session;\n if (session) {\n this.$onDocumentChange = this.onDocumentChange.bind(this);\n session.on(\"change\", this.$onDocumentChange);\n this.renderer.setSession(session);\n \n this.$onChangeMode = this.onChangeMode.bind(this);\n session.on(\"changeMode\", this.$onChangeMode);\n \n this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this);\n session.on(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n \n this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer);\n session.on(\"changeTabSize\", this.$onChangeTabSize);\n \n this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this);\n session.on(\"changeWrapLimit\", this.$onChangeWrapLimit);\n \n this.$onChangeWrapMode = this.onChangeWrapMode.bind(this);\n session.on(\"changeWrapMode\", this.$onChangeWrapMode);\n \n this.$onChangeFold = this.onChangeFold.bind(this);\n session.on(\"changeFold\", this.$onChangeFold);\n \n this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this);\n this.session.on(\"changeFrontMarker\", this.$onChangeFrontMarker);\n \n this.$onChangeBackMarker = this.onChangeBackMarker.bind(this);\n this.session.on(\"changeBackMarker\", this.$onChangeBackMarker);\n \n this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this);\n this.session.on(\"changeBreakpoint\", this.$onChangeBreakpoint);\n \n this.$onChangeAnnotation = this.onChangeAnnotation.bind(this);\n this.session.on(\"changeAnnotation\", this.$onChangeAnnotation);\n \n this.$onCursorChange = this.onCursorChange.bind(this);\n this.session.on(\"changeOverwrite\", this.$onCursorChange);\n \n this.$onScrollTopChange = this.onScrollTopChange.bind(this);\n this.session.on(\"changeScrollTop\", this.$onScrollTopChange);\n \n this.$onScrollLeftChange = this.onScrollLeftChange.bind(this);\n this.session.on(\"changeScrollLeft\", this.$onScrollLeftChange);\n \n this.selection = session.getSelection();\n this.selection.on(\"changeCursor\", this.$onCursorChange);\n \n this.$onSelectionChange = this.onSelectionChange.bind(this);\n this.selection.on(\"changeSelection\", this.$onSelectionChange);\n \n this.onChangeMode();\n \n this.$blockScrolling += 1;\n this.onCursorChange();\n this.$blockScrolling -= 1;\n \n this.onScrollTopChange();\n this.onScrollLeftChange();\n this.onSelectionChange();\n this.onChangeFrontMarker();\n this.onChangeBackMarker();\n this.onChangeBreakpoint();\n this.onChangeAnnotation();\n this.session.getUseWrapMode() && this.renderer.adjustWrapLimit();\n this.renderer.updateFull();\n } else {\n this.selection = null;\n this.renderer.setSession(session);\n }\n\n this._signal(\"changeSession\", {\n session: session,\n oldSession: oldSession\n });\n \n this.curOp = null;\n \n oldSession && oldSession._signal(\"changeEditor\", {oldEditor: this});\n session && session._signal(\"changeEditor\", {editor: this});\n\n if (session && session.bgTokenizer)\n session.bgTokenizer.scheduleStart();\n };\n this.getSession = function() {\n return this.session;\n };\n this.setValue = function(val, cursorPos) {\n this.session.doc.setValue(val);\n\n if (!cursorPos)\n this.selectAll();\n else if (cursorPos == 1)\n this.navigateFileEnd();\n else if (cursorPos == -1)\n this.navigateFileStart();\n\n return val;\n };\n this.getValue = function() {\n return this.session.getValue();\n };\n this.getSelection = function() {\n return this.selection;\n };\n this.resize = function(force) {\n this.renderer.onResize(force);\n };\n this.setTheme = function(theme, cb) {\n this.renderer.setTheme(theme, cb);\n };\n this.getTheme = function() {\n return this.renderer.getTheme();\n };\n this.setStyle = function(style) {\n this.renderer.setStyle(style);\n };\n this.unsetStyle = function(style) {\n this.renderer.unsetStyle(style);\n };\n this.getFontSize = function () {\n return this.getOption(\"fontSize\") ||\n dom.computedStyle(this.container, \"fontSize\");\n };\n this.setFontSize = function(size) {\n this.setOption(\"fontSize\", size);\n };\n\n this.$highlightBrackets = function() {\n if (this.session.$bracketHighlight) {\n this.session.removeMarker(this.session.$bracketHighlight);\n this.session.$bracketHighlight = null;\n }\n\n if (this.$highlightPending) {\n return;\n }\n var self = this;\n this.$highlightPending = true;\n setTimeout(function() {\n self.$highlightPending = false;\n var session = self.session;\n if (!session || !session.bgTokenizer) return;\n var pos = session.findMatchingBracket(self.getCursorPosition());\n if (pos) {\n var range = new Range(pos.row, pos.column, pos.row, pos.column + 1);\n } else if (session.$mode.getMatching) {\n var range = session.$mode.getMatching(self.session);\n }\n if (range)\n session.$bracketHighlight = session.addMarker(range, \"ace_bracket\", \"text\");\n }, 50);\n };\n this.$highlightTags = function() {\n if (this.$highlightTagPending)\n return;\n var self = this;\n this.$highlightTagPending = true;\n setTimeout(function() {\n self.$highlightTagPending = false;\n \n var session = self.session;\n if (!session || !session.bgTokenizer) return;\n \n var pos = self.getCursorPosition();\n var iterator = new TokenIterator(self.session, pos.row, pos.column);\n var token = iterator.getCurrentToken();\n \n if (!token || !/\\b(?:tag-open|tag-name)/.test(token.type)) {\n session.removeMarker(session.$tagHighlight);\n session.$tagHighlight = null;\n return;\n }\n \n if (token.type.indexOf(\"tag-open\") != -1) {\n token = iterator.stepForward();\n if (!token)\n return;\n }\n \n var tag = token.value;\n var depth = 0;\n var prevToken = iterator.stepBackward();\n \n if (prevToken.value == '<'){\n do {\n prevToken = token;\n token = iterator.stepForward();\n \n if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) {\n if (prevToken.value === '<'){\n depth++;\n } else if (prevToken.value === '= 0);\n } else {\n do {\n token = prevToken;\n prevToken = iterator.stepBackward();\n \n if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) {\n if (prevToken.value === '<') {\n depth++;\n } else if (prevToken.value === ' 1))\n highlight = false;\n }\n\n if (session.$highlightLineMarker && !highlight) {\n session.removeMarker(session.$highlightLineMarker.id);\n session.$highlightLineMarker = null;\n } else if (!session.$highlightLineMarker && highlight) {\n var range = new Range(highlight.row, highlight.column, highlight.row, Infinity);\n range.id = session.addMarker(range, \"ace_active-line\", \"screenLine\");\n session.$highlightLineMarker = range;\n } else if (highlight) {\n session.$highlightLineMarker.start.row = highlight.row;\n session.$highlightLineMarker.end.row = highlight.row;\n session.$highlightLineMarker.start.column = highlight.column;\n session._signal(\"changeBackMarker\");\n }\n };\n\n this.onSelectionChange = function(e) {\n var session = this.session;\n\n if (session.$selectionMarker) {\n session.removeMarker(session.$selectionMarker);\n }\n session.$selectionMarker = null;\n\n if (!this.selection.isEmpty()) {\n var range = this.selection.getRange();\n var style = this.getSelectionStyle();\n session.$selectionMarker = session.addMarker(range, \"ace_selection\", style);\n } else {\n this.$updateHighlightActiveLine();\n }\n\n var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp();\n this.session.highlight(re);\n\n this._signal(\"changeSelection\");\n };\n\n this.$getSelectionHighLightRegexp = function() {\n var session = this.session;\n\n var selection = this.getSelectionRange();\n if (selection.isEmpty() || selection.isMultiLine())\n return;\n\n var startOuter = selection.start.column - 1;\n var endOuter = selection.end.column + 1;\n var line = session.getLine(selection.start.row);\n var lineCols = line.length;\n var needle = line.substring(Math.max(startOuter, 0),\n Math.min(endOuter, lineCols));\n if ((startOuter >= 0 && /^[\\w\\d]/.test(needle)) ||\n (endOuter <= lineCols && /[\\w\\d]$/.test(needle)))\n return;\n\n needle = line.substring(selection.start.column, selection.end.column);\n if (!/^[\\w\\d]+$/.test(needle))\n return;\n\n var re = this.$search.$assembleRegExp({\n wholeWord: true,\n caseSensitive: true,\n needle: needle\n });\n\n return re;\n };\n\n\n this.onChangeFrontMarker = function() {\n this.renderer.updateFrontMarkers();\n };\n\n this.onChangeBackMarker = function() {\n this.renderer.updateBackMarkers();\n };\n\n\n this.onChangeBreakpoint = function() {\n this.renderer.updateBreakpoints();\n };\n\n this.onChangeAnnotation = function() {\n this.renderer.setAnnotations(this.session.getAnnotations());\n };\n\n\n this.onChangeMode = function(e) {\n this.renderer.updateText();\n this._emit(\"changeMode\", e);\n };\n\n\n this.onChangeWrapLimit = function() {\n this.renderer.updateFull();\n };\n\n this.onChangeWrapMode = function() {\n this.renderer.onResize(true);\n };\n\n\n this.onChangeFold = function() {\n this.$updateHighlightActiveLine();\n this.renderer.updateFull();\n };\n this.getSelectedText = function() {\n return this.session.getTextRange(this.getSelectionRange());\n };\n this.getCopyText = function() {\n var text = this.getSelectedText();\n this._signal(\"copy\", text);\n return text;\n };\n this.onCopy = function() {\n this.commands.exec(\"copy\", this);\n };\n this.onCut = function() {\n this.commands.exec(\"cut\", this);\n };\n this.onPaste = function(text, event) {\n var e = {text: text, event: event};\n this.commands.exec(\"paste\", this, e);\n };\n \n this.$handlePaste = function(e) {\n if (typeof e == \"string\") \n e = {text: e};\n this._signal(\"paste\", e);\n var text = e.text;\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode) {\n this.insert(text);\n } else {\n var lines = text.split(/\\r\\n|\\r|\\n/);\n var ranges = this.selection.rangeList.ranges;\n \n if (lines.length > ranges.length || lines.length < 2 || !lines[1])\n return this.commands.exec(\"insertstring\", this, text);\n \n for (var i = ranges.length; i--;) {\n var range = ranges[i];\n if (!range.isEmpty())\n this.session.remove(range);\n \n this.session.insert(range.start, lines[i]);\n }\n }\n };\n\n this.execCommand = function(command, args) {\n return this.commands.exec(command, this, args);\n };\n this.insert = function(text, pasted) {\n var session = this.session;\n var mode = session.getMode();\n var cursor = this.getCursorPosition();\n\n if (this.getBehavioursEnabled() && !pasted) {\n var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text);\n if (transform) {\n if (text !== transform.text) {\n this.session.mergeUndoDeltas = false;\n this.$mergeNextCommand = false;\n }\n text = transform.text;\n\n }\n }\n \n if (text == \"\\t\")\n text = this.session.getTabString();\n if (!this.selection.isEmpty()) {\n var range = this.getSelectionRange();\n cursor = this.session.remove(range);\n this.clearSelection();\n }\n else if (this.session.getOverwrite() && text.indexOf(\"\\n\") == -1) {\n var range = new Range.fromPoints(cursor, cursor);\n range.end.column += text.length;\n this.session.remove(range);\n }\n\n if (text == \"\\n\" || text == \"\\r\\n\") {\n var line = session.getLine(cursor.row);\n if (cursor.column > line.search(/\\S|$/)) {\n var d = line.substr(cursor.column).search(/\\S|$/);\n session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d);\n }\n }\n this.clearSelection();\n\n var start = cursor.column;\n var lineState = session.getState(cursor.row);\n var line = session.getLine(cursor.row);\n var shouldOutdent = mode.checkOutdent(lineState, line, text);\n var end = session.insert(cursor, text);\n\n if (transform && transform.selection) {\n if (transform.selection.length == 2) { // Transform relative to the current column\n this.selection.setSelectionRange(\n new Range(cursor.row, start + transform.selection[0],\n cursor.row, start + transform.selection[1]));\n } else { // Transform relative to the current row.\n this.selection.setSelectionRange(\n new Range(cursor.row + transform.selection[0],\n transform.selection[1],\n cursor.row + transform.selection[2],\n transform.selection[3]));\n }\n }\n\n if (session.getDocument().isNewLine(text)) {\n var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString());\n\n session.insert({row: cursor.row+1, column: 0}, lineIndent);\n }\n if (shouldOutdent)\n mode.autoOutdent(lineState, session, cursor.row);\n };\n\n this.onTextInput = function(text) {\n this.keyBinding.onTextInput(text);\n };\n\n this.onCommandKey = function(e, hashId, keyCode) {\n this.keyBinding.onCommandKey(e, hashId, keyCode);\n };\n this.setOverwrite = function(overwrite) {\n this.session.setOverwrite(overwrite);\n };\n this.getOverwrite = function() {\n return this.session.getOverwrite();\n };\n this.toggleOverwrite = function() {\n this.session.toggleOverwrite();\n };\n this.setScrollSpeed = function(speed) {\n this.setOption(\"scrollSpeed\", speed);\n };\n this.getScrollSpeed = function() {\n return this.getOption(\"scrollSpeed\");\n };\n this.setDragDelay = function(dragDelay) {\n this.setOption(\"dragDelay\", dragDelay);\n };\n this.getDragDelay = function() {\n return this.getOption(\"dragDelay\");\n };\n this.setSelectionStyle = function(val) {\n this.setOption(\"selectionStyle\", val);\n };\n this.getSelectionStyle = function() {\n return this.getOption(\"selectionStyle\");\n };\n this.setHighlightActiveLine = function(shouldHighlight) {\n this.setOption(\"highlightActiveLine\", shouldHighlight);\n };\n this.getHighlightActiveLine = function() {\n return this.getOption(\"highlightActiveLine\");\n };\n this.setHighlightGutterLine = function(shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n\n this.getHighlightGutterLine = function() {\n return this.getOption(\"highlightGutterLine\");\n };\n this.setHighlightSelectedWord = function(shouldHighlight) {\n this.setOption(\"highlightSelectedWord\", shouldHighlight);\n };\n this.getHighlightSelectedWord = function() {\n return this.$highlightSelectedWord;\n };\n\n this.setAnimatedScroll = function(shouldAnimate){\n this.renderer.setAnimatedScroll(shouldAnimate);\n };\n\n this.getAnimatedScroll = function(){\n return this.renderer.getAnimatedScroll();\n };\n this.setShowInvisibles = function(showInvisibles) {\n this.renderer.setShowInvisibles(showInvisibles);\n };\n this.getShowInvisibles = function() {\n return this.renderer.getShowInvisibles();\n };\n\n this.setDisplayIndentGuides = function(display) {\n this.renderer.setDisplayIndentGuides(display);\n };\n\n this.getDisplayIndentGuides = function() {\n return this.renderer.getDisplayIndentGuides();\n };\n this.setShowPrintMargin = function(showPrintMargin) {\n this.renderer.setShowPrintMargin(showPrintMargin);\n };\n this.getShowPrintMargin = function() {\n return this.renderer.getShowPrintMargin();\n };\n this.setPrintMarginColumn = function(showPrintMargin) {\n this.renderer.setPrintMarginColumn(showPrintMargin);\n };\n this.getPrintMarginColumn = function() {\n return this.renderer.getPrintMarginColumn();\n };\n this.setReadOnly = function(readOnly) {\n this.setOption(\"readOnly\", readOnly);\n };\n this.getReadOnly = function() {\n return this.getOption(\"readOnly\");\n };\n this.setBehavioursEnabled = function (enabled) {\n this.setOption(\"behavioursEnabled\", enabled);\n };\n this.getBehavioursEnabled = function () {\n return this.getOption(\"behavioursEnabled\");\n };\n this.setWrapBehavioursEnabled = function (enabled) {\n this.setOption(\"wrapBehavioursEnabled\", enabled);\n };\n this.getWrapBehavioursEnabled = function () {\n return this.getOption(\"wrapBehavioursEnabled\");\n };\n this.setShowFoldWidgets = function(show) {\n this.setOption(\"showFoldWidgets\", show);\n\n };\n this.getShowFoldWidgets = function() {\n return this.getOption(\"showFoldWidgets\");\n };\n\n this.setFadeFoldWidgets = function(fade) {\n this.setOption(\"fadeFoldWidgets\", fade);\n };\n\n this.getFadeFoldWidgets = function() {\n return this.getOption(\"fadeFoldWidgets\");\n };\n this.remove = function(dir) {\n if (this.selection.isEmpty()){\n if (dir == \"left\")\n this.selection.selectLeft();\n else\n this.selection.selectRight();\n }\n\n var range = this.getSelectionRange();\n if (this.getBehavioursEnabled()) {\n var session = this.session;\n var state = session.getState(range.start.row);\n var new_range = session.getMode().transformAction(state, 'deletion', this, session, range);\n\n if (range.end.column === 0) {\n var text = session.getTextRange(range);\n if (text[text.length - 1] == \"\\n\") {\n var line = session.getLine(range.end.row);\n if (/^\\s+$/.test(line)) {\n range.end.column = line.length;\n }\n }\n }\n if (new_range)\n range = new_range;\n }\n\n this.session.remove(range);\n this.clearSelection();\n };\n this.removeWordRight = function() {\n if (this.selection.isEmpty())\n this.selection.selectWordRight();\n\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n this.removeWordLeft = function() {\n if (this.selection.isEmpty())\n this.selection.selectWordLeft();\n\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n this.removeToLineStart = function() {\n if (this.selection.isEmpty())\n this.selection.selectLineStart();\n\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n this.removeToLineEnd = function() {\n if (this.selection.isEmpty())\n this.selection.selectLineEnd();\n\n var range = this.getSelectionRange();\n if (range.start.column == range.end.column && range.start.row == range.end.row) {\n range.end.column = 0;\n range.end.row++;\n }\n\n this.session.remove(range);\n this.clearSelection();\n };\n this.splitLine = function() {\n if (!this.selection.isEmpty()) {\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n }\n\n var cursor = this.getCursorPosition();\n this.insert(\"\\n\");\n this.moveCursorToPosition(cursor);\n };\n this.transposeLetters = function() {\n if (!this.selection.isEmpty()) {\n return;\n }\n\n var cursor = this.getCursorPosition();\n var column = cursor.column;\n if (column === 0)\n return;\n\n var line = this.session.getLine(cursor.row);\n var swap, range;\n if (column < line.length) {\n swap = line.charAt(column) + line.charAt(column-1);\n range = new Range(cursor.row, column-1, cursor.row, column+1);\n }\n else {\n swap = line.charAt(column-1) + line.charAt(column-2);\n range = new Range(cursor.row, column-2, cursor.row, column);\n }\n this.session.replace(range, swap);\n this.session.selection.moveToPosition(range.end);\n };\n this.toLowerCase = function() {\n var originalRange = this.getSelectionRange();\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toLowerCase());\n this.selection.setSelectionRange(originalRange);\n };\n this.toUpperCase = function() {\n var originalRange = this.getSelectionRange();\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toUpperCase());\n this.selection.setSelectionRange(originalRange);\n };\n this.indent = function() {\n var session = this.session;\n var range = this.getSelectionRange();\n\n if (range.start.row < range.end.row) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n } else if (range.start.column < range.end.column) {\n var text = session.getTextRange(range);\n if (!/^\\s+$/.test(text)) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n }\n }\n \n var line = session.getLine(range.start.row);\n var position = range.start;\n var size = session.getTabSize();\n var column = session.documentToScreenColumn(position.row, position.column);\n\n if (this.session.getUseSoftTabs()) {\n var count = (size - column % size);\n var indentString = lang.stringRepeat(\" \", count);\n } else {\n var count = column % size;\n while (line[range.start.column - 1] == \" \" && count) {\n range.start.column--;\n count--;\n }\n this.selection.setSelectionRange(range);\n indentString = \"\\t\";\n }\n return this.insert(indentString);\n };\n this.blockIndent = function() {\n var rows = this.$getSelectedRows();\n this.session.indentRows(rows.first, rows.last, \"\\t\");\n };\n this.blockOutdent = function() {\n var selection = this.session.getSelection();\n this.session.outdentRows(selection.getRange());\n };\n this.sortLines = function() {\n var rows = this.$getSelectedRows();\n var session = this.session;\n\n var lines = [];\n for (var i = rows.first; i <= rows.last; i++)\n lines.push(session.getLine(i));\n\n lines.sort(function(a, b) {\n if (a.toLowerCase() < b.toLowerCase()) return -1;\n if (a.toLowerCase() > b.toLowerCase()) return 1;\n return 0;\n });\n\n var deleteRange = new Range(0, 0, 0, 0);\n for (var i = rows.first; i <= rows.last; i++) {\n var line = session.getLine(i);\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n deleteRange.end.column = line.length;\n session.replace(deleteRange, lines[i-rows.first]);\n }\n };\n this.toggleCommentLines = function() {\n var state = this.session.getState(this.getCursorPosition().row);\n var rows = this.$getSelectedRows();\n this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last);\n };\n\n this.toggleBlockComment = function() {\n var cursor = this.getCursorPosition();\n var state = this.session.getState(cursor.row);\n var range = this.getSelectionRange();\n this.session.getMode().toggleBlockComment(state, this.session, range, cursor);\n };\n this.getNumberAt = function(row, column) {\n var _numberRx = /[\\-]?[0-9]+(?:\\.[0-9]+)?/g;\n _numberRx.lastIndex = 0;\n\n var s = this.session.getLine(row);\n while (_numberRx.lastIndex < column) {\n var m = _numberRx.exec(s);\n if(m.index <= column && m.index+m[0].length >= column){\n var number = {\n value: m[0],\n start: m.index,\n end: m.index+m[0].length\n };\n return number;\n }\n }\n return null;\n };\n this.modifyNumber = function(amount) {\n var row = this.selection.getCursor().row;\n var column = this.selection.getCursor().column;\n var charRange = new Range(row, column-1, row, column);\n\n var c = this.session.getTextRange(charRange);\n if (!isNaN(parseFloat(c)) && isFinite(c)) {\n var nr = this.getNumberAt(row, column);\n if (nr) {\n var fp = nr.value.indexOf(\".\") >= 0 ? nr.start + nr.value.indexOf(\".\") + 1 : nr.end;\n var decimals = nr.start + nr.value.length - fp;\n\n var t = parseFloat(nr.value);\n t *= Math.pow(10, decimals);\n\n\n if(fp !== nr.end && column < fp){\n amount *= Math.pow(10, nr.end - column - 1);\n } else {\n amount *= Math.pow(10, nr.end - column);\n }\n\n t += amount;\n t /= Math.pow(10, decimals);\n var nnr = t.toFixed(decimals);\n var replaceRange = new Range(row, nr.start, row, nr.end);\n this.session.replace(replaceRange, nnr);\n this.moveCursorTo(row, Math.max(nr.start +1, column + nnr.length - nr.value.length));\n\n }\n }\n };\n this.removeLines = function() {\n var rows = this.$getSelectedRows();\n this.session.removeFullLines(rows.first, rows.last);\n this.clearSelection();\n };\n\n this.duplicateSelection = function() {\n var sel = this.selection;\n var doc = this.session;\n var range = sel.getRange();\n var reverse = sel.isBackwards();\n if (range.isEmpty()) {\n var row = range.start.row;\n doc.duplicateLines(row, row);\n } else {\n var point = reverse ? range.start : range.end;\n var endPoint = doc.insert(point, doc.getTextRange(range), false);\n range.start = point;\n range.end = endPoint;\n\n sel.setSelectionRange(range, reverse);\n }\n };\n this.moveLinesDown = function() {\n this.$moveLines(1, false);\n };\n this.moveLinesUp = function() {\n this.$moveLines(-1, false);\n };\n this.moveText = function(range, toPosition, copy) {\n return this.session.moveText(range, toPosition, copy);\n };\n this.copyLinesUp = function() {\n this.$moveLines(-1, true);\n };\n this.copyLinesDown = function() {\n this.$moveLines(1, true);\n };\n this.$moveLines = function(dir, copy) {\n var rows, moved;\n var selection = this.selection;\n if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) {\n var range = selection.toOrientedRange();\n rows = this.$getSelectedRows(range);\n moved = this.session.$moveLines(rows.first, rows.last, copy ? 0 : dir);\n if (copy && dir == -1) moved = 0;\n range.moveBy(moved, 0);\n selection.fromOrientedRange(range);\n } else {\n var ranges = selection.rangeList.ranges;\n selection.rangeList.detach(this.session);\n this.inVirtualSelectionMode = true;\n \n var diff = 0;\n var totalDiff = 0;\n var l = ranges.length;\n for (var i = 0; i < l; i++) {\n var rangeIndex = i;\n ranges[i].moveBy(diff, 0);\n rows = this.$getSelectedRows(ranges[i]);\n var first = rows.first;\n var last = rows.last;\n while (++i < l) {\n if (totalDiff) ranges[i].moveBy(totalDiff, 0);\n var subRows = this.$getSelectedRows(ranges[i]);\n if (copy && subRows.first != last)\n break;\n else if (!copy && subRows.first > last + 1)\n break;\n last = subRows.last;\n }\n i--;\n diff = this.session.$moveLines(first, last, copy ? 0 : dir);\n if (copy && dir == -1) rangeIndex = i + 1;\n while (rangeIndex <= i) {\n ranges[rangeIndex].moveBy(diff, 0);\n rangeIndex++;\n }\n if (!copy) diff = 0;\n totalDiff += diff;\n }\n \n selection.fromOrientedRange(selection.ranges[0]);\n selection.rangeList.attach(this.session);\n this.inVirtualSelectionMode = false;\n }\n };\n this.$getSelectedRows = function(range) {\n range = (range || this.getSelectionRange()).collapseRows();\n\n return {\n first: this.session.getRowFoldStart(range.start.row),\n last: this.session.getRowFoldEnd(range.end.row)\n };\n };\n\n this.onCompositionStart = function(text) {\n this.renderer.showComposition(this.getCursorPosition());\n };\n\n this.onCompositionUpdate = function(text) {\n this.renderer.setCompositionText(text);\n };\n\n this.onCompositionEnd = function() {\n this.renderer.hideComposition();\n };\n this.getFirstVisibleRow = function() {\n return this.renderer.getFirstVisibleRow();\n };\n this.getLastVisibleRow = function() {\n return this.renderer.getLastVisibleRow();\n };\n this.isRowVisible = function(row) {\n return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow());\n };\n this.isRowFullyVisible = function(row) {\n return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow());\n };\n this.$getVisibleRowCount = function() {\n return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1;\n };\n\n this.$moveByPage = function(dir, select) {\n var renderer = this.renderer;\n var config = this.renderer.layerConfig;\n var rows = dir * Math.floor(config.height / config.lineHeight);\n\n this.$blockScrolling++;\n if (select === true) {\n this.selection.$moveSelection(function(){\n this.moveCursorBy(rows, 0);\n });\n } else if (select === false) {\n this.selection.moveCursorBy(rows, 0);\n this.selection.clearSelection();\n }\n this.$blockScrolling--;\n\n var scrollTop = renderer.scrollTop;\n\n renderer.scrollBy(0, rows * config.lineHeight);\n if (select != null)\n renderer.scrollCursorIntoView(null, 0.5);\n\n renderer.animateScrolling(scrollTop);\n };\n this.selectPageDown = function() {\n this.$moveByPage(1, true);\n };\n this.selectPageUp = function() {\n this.$moveByPage(-1, true);\n };\n this.gotoPageDown = function() {\n this.$moveByPage(1, false);\n };\n this.gotoPageUp = function() {\n this.$moveByPage(-1, false);\n };\n this.scrollPageDown = function() {\n this.$moveByPage(1);\n };\n this.scrollPageUp = function() {\n this.$moveByPage(-1);\n };\n this.scrollToRow = function(row) {\n this.renderer.scrollToRow(row);\n };\n this.scrollToLine = function(line, center, animate, callback) {\n this.renderer.scrollToLine(line, center, animate, callback);\n };\n this.centerSelection = function() {\n var range = this.getSelectionRange();\n var pos = {\n row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2),\n column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2)\n };\n this.renderer.alignCursor(pos, 0.5);\n };\n this.getCursorPosition = function() {\n return this.selection.getCursor();\n };\n this.getCursorPositionScreen = function() {\n return this.session.documentToScreenPosition(this.getCursorPosition());\n };\n this.getSelectionRange = function() {\n return this.selection.getRange();\n };\n this.selectAll = function() {\n this.$blockScrolling += 1;\n this.selection.selectAll();\n this.$blockScrolling -= 1;\n };\n this.clearSelection = function() {\n this.selection.clearSelection();\n };\n this.moveCursorTo = function(row, column) {\n this.selection.moveCursorTo(row, column);\n };\n this.moveCursorToPosition = function(pos) {\n this.selection.moveCursorToPosition(pos);\n };\n this.jumpToMatching = function(select, expand) {\n var cursor = this.getCursorPosition();\n var iterator = new TokenIterator(this.session, cursor.row, cursor.column);\n var prevToken = iterator.getCurrentToken();\n var token = prevToken || iterator.stepForward();\n\n if (!token) return;\n var matchType;\n var found = false;\n var depth = {};\n var i = cursor.column - token.start;\n var bracketType;\n var brackets = {\n \")\": \"(\",\n \"(\": \"(\",\n \"]\": \"[\",\n \"[\": \"[\",\n \"{\": \"{\",\n \"}\": \"{\"\n };\n \n do {\n if (token.value.match(/[{}()\\[\\]]/g)) {\n for (; i < token.value.length && !found; i++) {\n if (!brackets[token.value[i]]) {\n continue;\n }\n\n bracketType = brackets[token.value[i]] + '.' + token.type.replace(\"rparen\", \"lparen\");\n\n if (isNaN(depth[bracketType])) {\n depth[bracketType] = 0;\n }\n\n switch (token.value[i]) {\n case '(':\n case '[':\n case '{':\n depth[bracketType]++;\n break;\n case ')':\n case ']':\n case '}':\n depth[bracketType]--;\n\n if (depth[bracketType] === -1) {\n matchType = 'bracket';\n found = true;\n }\n break;\n }\n }\n }\n else if (token && token.type.indexOf('tag-name') !== -1) {\n if (isNaN(depth[token.value])) {\n depth[token.value] = 0;\n }\n \n if (prevToken.value === '<') {\n depth[token.value]++;\n }\n else if (prevToken.value === '= 0; --i) {\n if(this.$tryReplace(ranges[i], replacement)) {\n replaced++;\n }\n }\n\n this.selection.setSelectionRange(selection);\n this.$blockScrolling -= 1;\n\n return replaced;\n };\n\n this.$tryReplace = function(range, replacement) {\n var input = this.session.getTextRange(range);\n replacement = this.$search.replace(input, replacement);\n if (replacement !== null) {\n range.end = this.session.replace(range, replacement);\n return range;\n } else {\n return null;\n }\n };\n this.getLastSearchOptions = function() {\n return this.$search.getOptions();\n };\n this.find = function(needle, options, animate) {\n if (!options)\n options = {};\n\n if (typeof needle == \"string\" || needle instanceof RegExp)\n options.needle = needle;\n else if (typeof needle == \"object\")\n oop.mixin(options, needle);\n\n var range = this.selection.getRange();\n if (options.needle == null) {\n needle = this.session.getTextRange(range)\n || this.$search.$options.needle;\n if (!needle) {\n range = this.session.getWordRange(range.start.row, range.start.column);\n needle = this.session.getTextRange(range);\n }\n this.$search.set({needle: needle});\n }\n\n this.$search.set(options);\n if (!options.start)\n this.$search.set({start: range});\n\n var newRange = this.$search.find(this.session);\n if (options.preventScroll)\n return newRange;\n if (newRange) {\n this.revealRange(newRange, animate);\n return newRange;\n }\n if (options.backwards)\n range.start = range.end;\n else\n range.end = range.start;\n this.selection.setRange(range);\n };\n this.findNext = function(options, animate) {\n this.find({skipCurrent: true, backwards: false}, options, animate);\n };\n this.findPrevious = function(options, animate) {\n this.find(options, {skipCurrent: true, backwards: true}, animate);\n };\n\n this.revealRange = function(range, animate) {\n this.$blockScrolling += 1;\n this.session.unfold(range);\n this.selection.setSelectionRange(range);\n this.$blockScrolling -= 1;\n\n var scrollTop = this.renderer.scrollTop;\n this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5);\n if (animate !== false)\n this.renderer.animateScrolling(scrollTop);\n };\n this.undo = function() {\n this.$blockScrolling++;\n this.session.getUndoManager().undo();\n this.$blockScrolling--;\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n this.redo = function() {\n this.$blockScrolling++;\n this.session.getUndoManager().redo();\n this.$blockScrolling--;\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n this.destroy = function() {\n this.renderer.destroy();\n this._signal(\"destroy\", this);\n if (this.session) {\n this.session.destroy();\n }\n };\n this.setAutoScrollEditorIntoView = function(enable) {\n if (!enable)\n return;\n var rect;\n var self = this;\n var shouldScroll = false;\n if (!this.$scrollAnchor)\n this.$scrollAnchor = document.createElement(\"div\");\n var scrollAnchor = this.$scrollAnchor;\n scrollAnchor.style.cssText = \"position:absolute\";\n this.container.insertBefore(scrollAnchor, this.container.firstChild);\n var onChangeSelection = this.on(\"changeSelection\", function() {\n shouldScroll = true;\n });\n var onBeforeRender = this.renderer.on(\"beforeRender\", function() {\n if (shouldScroll)\n rect = self.renderer.container.getBoundingClientRect();\n });\n var onAfterRender = this.renderer.on(\"afterRender\", function() {\n if (shouldScroll && rect && (self.isFocused()\n || self.searchBox && self.searchBox.isFocused())\n ) {\n var renderer = self.renderer;\n var pos = renderer.$cursorLayer.$pixelPos;\n var config = renderer.layerConfig;\n var top = pos.top - config.offset;\n if (pos.top >= 0 && top + rect.top < 0) {\n shouldScroll = true;\n } else if (pos.top < config.height &&\n pos.top + rect.top + config.lineHeight > window.innerHeight) {\n shouldScroll = false;\n } else {\n shouldScroll = null;\n }\n if (shouldScroll != null) {\n scrollAnchor.style.top = top + \"px\";\n scrollAnchor.style.left = pos.left + \"px\";\n scrollAnchor.style.height = config.lineHeight + \"px\";\n scrollAnchor.scrollIntoView(shouldScroll);\n }\n shouldScroll = rect = null;\n }\n });\n this.setAutoScrollEditorIntoView = function(enable) {\n if (enable)\n return;\n delete this.setAutoScrollEditorIntoView;\n this.off(\"changeSelection\", onChangeSelection);\n this.renderer.off(\"afterRender\", onAfterRender);\n this.renderer.off(\"beforeRender\", onBeforeRender);\n };\n };\n\n\n this.$resetCursorStyle = function() {\n var style = this.$cursorStyle || \"ace\";\n var cursorLayer = this.renderer.$cursorLayer;\n if (!cursorLayer)\n return;\n cursorLayer.setSmoothBlinking(/smooth/.test(style));\n cursorLayer.isBlinking = !this.$readOnly && style != \"wide\";\n dom.setCssClass(cursorLayer.element, \"ace_slim-cursors\", /slim/.test(style));\n };\n\n}).call(Editor.prototype);\n\n\n\nconfig.defineOptions(Editor.prototype, \"editor\", {\n selectionStyle: {\n set: function(style) {\n this.onSelectionChange();\n this._signal(\"changeSelectionStyle\", {data: style});\n },\n initialValue: \"line\"\n },\n highlightActiveLine: {\n set: function() {this.$updateHighlightActiveLine();},\n initialValue: true\n },\n highlightSelectedWord: {\n set: function(shouldHighlight) {this.$onSelectionChange();},\n initialValue: true\n },\n readOnly: {\n set: function(readOnly) {\n this.$resetCursorStyle(); \n },\n initialValue: false\n },\n cursorStyle: {\n set: function(val) { this.$resetCursorStyle(); },\n values: [\"ace\", \"slim\", \"smooth\", \"wide\"],\n initialValue: \"ace\"\n },\n mergeUndoDeltas: {\n values: [false, true, \"always\"],\n initialValue: true\n },\n behavioursEnabled: {initialValue: true},\n wrapBehavioursEnabled: {initialValue: true},\n autoScrollEditorIntoView: {\n set: function(val) {this.setAutoScrollEditorIntoView(val);}\n },\n keyboardHandler: {\n set: function(val) { this.setKeyboardHandler(val); },\n get: function() { return this.keybindingId; },\n handlesSet: true\n },\n\n hScrollBarAlwaysVisible: \"renderer\",\n vScrollBarAlwaysVisible: \"renderer\",\n highlightGutterLine: \"renderer\",\n animatedScroll: \"renderer\",\n showInvisibles: \"renderer\",\n showPrintMargin: \"renderer\",\n printMarginColumn: \"renderer\",\n printMargin: \"renderer\",\n fadeFoldWidgets: \"renderer\",\n showFoldWidgets: \"renderer\",\n showLineNumbers: \"renderer\",\n showGutter: \"renderer\",\n displayIndentGuides: \"renderer\",\n fontSize: \"renderer\",\n fontFamily: \"renderer\",\n maxLines: \"renderer\",\n minLines: \"renderer\",\n scrollPastEnd: \"renderer\",\n fixedWidthGutter: \"renderer\",\n theme: \"renderer\",\n\n scrollSpeed: \"$mouseHandler\",\n dragDelay: \"$mouseHandler\",\n dragEnabled: \"$mouseHandler\",\n focusTimout: \"$mouseHandler\",\n tooltipFollowsMouse: \"$mouseHandler\",\n\n firstLineNumber: \"session\",\n overwrite: \"session\",\n newLineMode: \"session\",\n useWorker: \"session\",\n useSoftTabs: \"session\",\n tabSize: \"session\",\n wrap: \"session\",\n indentedSoftWrap: \"session\",\n foldStyle: \"session\",\n mode: \"session\"\n});\n\nexports.Editor = Editor;\n});\n\nace.define(\"ace/undomanager\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\nvar UndoManager = function() {\n this.reset();\n};\n\n(function() {\n this.execute = function(options) {\n var deltaSets = options.args[0];\n this.$doc = options.args[1];\n if (options.merge && this.hasUndo()){\n this.dirtyCounter--;\n deltaSets = this.$undoStack.pop().concat(deltaSets);\n }\n this.$undoStack.push(deltaSets);\n this.$redoStack = [];\n if (this.dirtyCounter < 0) {\n this.dirtyCounter = NaN;\n }\n this.dirtyCounter++;\n };\n this.undo = function(dontSelect) {\n var deltaSets = this.$undoStack.pop();\n var undoSelectionRange = null;\n if (deltaSets) {\n undoSelectionRange = this.$doc.undoChanges(deltaSets, dontSelect);\n this.$redoStack.push(deltaSets);\n this.dirtyCounter--;\n }\n\n return undoSelectionRange;\n };\n this.redo = function(dontSelect) {\n var deltaSets = this.$redoStack.pop();\n var redoSelectionRange = null;\n if (deltaSets) {\n redoSelectionRange =\n this.$doc.redoChanges(this.$deserializeDeltas(deltaSets), dontSelect);\n this.$undoStack.push(deltaSets);\n this.dirtyCounter++;\n }\n return redoSelectionRange;\n };\n this.reset = function() {\n this.$undoStack = [];\n this.$redoStack = [];\n this.dirtyCounter = 0;\n };\n this.hasUndo = function() {\n return this.$undoStack.length > 0;\n };\n this.hasRedo = function() {\n return this.$redoStack.length > 0;\n };\n this.markClean = function() {\n this.dirtyCounter = 0;\n };\n this.isClean = function() {\n return this.dirtyCounter === 0;\n };\n this.$serializeDeltas = function(deltaSets) {\n return cloneDeltaSetsObj(deltaSets, $serializeDelta);\n };\n this.$deserializeDeltas = function(deltaSets) {\n return cloneDeltaSetsObj(deltaSets, $deserializeDelta);\n };\n \n function $serializeDelta(delta){\n return {\n action: delta.action,\n start: delta.start,\n end: delta.end,\n lines: delta.lines.length == 1 ? null : delta.lines,\n text: delta.lines.length == 1 ? delta.lines[0] : null\n };\n }\n \n function $deserializeDelta(delta) {\n return {\n action: delta.action,\n start: delta.start,\n end: delta.end,\n lines: delta.lines || [delta.text]\n };\n }\n \n function cloneDeltaSetsObj(deltaSets_old, fnGetModifiedDelta) {\n var deltaSets_new = new Array(deltaSets_old.length);\n for (var i = 0; i < deltaSets_old.length; i++) {\n var deltaSet_old = deltaSets_old[i];\n var deltaSet_new = { group: deltaSet_old.group, deltas: new Array(deltaSet_old.length)};\n \n for (var j = 0; j < deltaSet_old.deltas.length; j++) {\n var delta_old = deltaSet_old.deltas[j];\n deltaSet_new.deltas[j] = fnGetModifiedDelta(delta_old);\n }\n \n deltaSets_new[i] = deltaSet_new;\n }\n return deltaSets_new;\n }\n \n}).call(UndoManager.prototype);\n\nexports.UndoManager = UndoManager;\n});\n\nace.define(\"ace/layer/gutter\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar dom = acequire(\"../lib/dom\");\nvar oop = acequire(\"../lib/oop\");\nvar lang = acequire(\"../lib/lang\");\nvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\n\nvar Gutter = function(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_gutter-layer\";\n parentEl.appendChild(this.element);\n this.setShowFoldWidgets(this.$showFoldWidgets);\n \n this.gutterWidth = 0;\n\n this.$annotations = [];\n this.$updateAnnotations = this.$updateAnnotations.bind(this);\n\n this.$cells = [];\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n\n this.setSession = function(session) {\n if (this.session)\n this.session.removeEventListener(\"change\", this.$updateAnnotations);\n this.session = session;\n if (session)\n session.on(\"change\", this.$updateAnnotations);\n };\n\n this.addGutterDecoration = function(row, className){\n if (window.console)\n console.warn && console.warn(\"deprecated use session.addGutterDecoration\");\n this.session.addGutterDecoration(row, className);\n };\n\n this.removeGutterDecoration = function(row, className){\n if (window.console)\n console.warn && console.warn(\"deprecated use session.removeGutterDecoration\");\n this.session.removeGutterDecoration(row, className);\n };\n\n this.setAnnotations = function(annotations) {\n this.$annotations = [];\n for (var i = 0; i < annotations.length; i++) {\n var annotation = annotations[i];\n var row = annotation.row;\n var rowInfo = this.$annotations[row];\n if (!rowInfo)\n rowInfo = this.$annotations[row] = {text: []};\n \n var annoText = annotation.text;\n annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || \"\";\n\n if (rowInfo.text.indexOf(annoText) === -1)\n rowInfo.text.push(annoText);\n\n var type = annotation.type;\n if (type == \"error\")\n rowInfo.className = \" ace_error\";\n else if (type == \"warning\" && rowInfo.className != \" ace_error\")\n rowInfo.className = \" ace_warning\";\n else if (type == \"info\" && (!rowInfo.className))\n rowInfo.className = \" ace_info\";\n }\n };\n\n this.$updateAnnotations = function (delta) {\n if (!this.$annotations.length)\n return;\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\n if (len === 0) {\n } else if (delta.action == 'remove') {\n this.$annotations.splice(firstRow, len + 1, null);\n } else {\n var args = new Array(len + 1);\n args.unshift(firstRow, 1);\n this.$annotations.splice.apply(this.$annotations, args);\n }\n };\n\n this.update = function(config) {\n var session = this.session;\n var firstRow = config.firstRow;\n var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar\n session.getLength() - 1);\n var fold = session.getNextFoldLine(firstRow);\n var foldStart = fold ? fold.start.row : Infinity;\n var foldWidgets = this.$showFoldWidgets && session.foldWidgets;\n var breakpoints = session.$breakpoints;\n var decorations = session.$decorations;\n var firstLineNumber = session.$firstLineNumber;\n var lastLineNumber = 0;\n \n var gutterRenderer = session.gutterRenderer || this.$renderer;\n\n var cell = null;\n var index = -1;\n var row = firstRow;\n while (true) {\n if (row > foldStart) {\n row = fold.end.row + 1;\n fold = session.getNextFoldLine(row, fold);\n foldStart = fold ? fold.start.row : Infinity;\n }\n if (row > lastRow) {\n while (this.$cells.length > index + 1) {\n cell = this.$cells.pop();\n this.element.removeChild(cell.element);\n }\n break;\n }\n\n cell = this.$cells[++index];\n if (!cell) {\n cell = {element: null, textNode: null, foldWidget: null};\n cell.element = dom.createElement(\"div\");\n cell.textNode = document.createTextNode('');\n cell.element.appendChild(cell.textNode);\n this.element.appendChild(cell.element);\n this.$cells[index] = cell;\n }\n\n var className = \"ace_gutter-cell \";\n if (breakpoints[row])\n className += breakpoints[row];\n if (decorations[row])\n className += decorations[row];\n if (this.$annotations[row])\n className += this.$annotations[row].className;\n if (cell.element.className != className)\n cell.element.className = className;\n\n var height = session.getRowLength(row) * config.lineHeight + \"px\";\n if (height != cell.element.style.height)\n cell.element.style.height = height;\n\n if (foldWidgets) {\n var c = foldWidgets[row];\n if (c == null)\n c = foldWidgets[row] = session.getFoldWidget(row);\n }\n\n if (c) {\n if (!cell.foldWidget) {\n cell.foldWidget = dom.createElement(\"span\");\n cell.element.appendChild(cell.foldWidget);\n }\n var className = \"ace_fold-widget ace_\" + c;\n if (c == \"start\" && row == foldStart && row < fold.end.row)\n className += \" ace_closed\";\n else\n className += \" ace_open\";\n if (cell.foldWidget.className != className)\n cell.foldWidget.className = className;\n\n var height = config.lineHeight + \"px\";\n if (cell.foldWidget.style.height != height)\n cell.foldWidget.style.height = height;\n } else {\n if (cell.foldWidget) {\n cell.element.removeChild(cell.foldWidget);\n cell.foldWidget = null;\n }\n }\n \n var text = lastLineNumber = gutterRenderer\n ? gutterRenderer.getText(session, row)\n : row + firstLineNumber;\n if (text !== cell.textNode.data)\n cell.textNode.data = text;\n\n row++;\n }\n\n this.element.style.height = config.minHeight + \"px\";\n\n if (this.$fixedWidth || session.$useWrapMode)\n lastLineNumber = session.getLength() + firstLineNumber;\n\n var gutterWidth = gutterRenderer \n ? gutterRenderer.getWidth(session, lastLineNumber, config)\n : lastLineNumber.toString().length * config.characterWidth;\n \n var padding = this.$padding || this.$computePadding();\n gutterWidth += padding.left + padding.right;\n if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) {\n this.gutterWidth = gutterWidth;\n this.element.style.width = Math.ceil(this.gutterWidth) + \"px\";\n this._emit(\"changeGutterWidth\", gutterWidth);\n }\n };\n\n this.$fixedWidth = false;\n \n this.$showLineNumbers = true;\n this.$renderer = \"\";\n this.setShowLineNumbers = function(show) {\n this.$renderer = !show && {\n getWidth: function() {return \"\";},\n getText: function() {return \"\";}\n };\n };\n \n this.getShowLineNumbers = function() {\n return this.$showLineNumbers;\n };\n \n this.$showFoldWidgets = true;\n this.setShowFoldWidgets = function(show) {\n if (show)\n dom.addCssClass(this.element, \"ace_folding-enabled\");\n else\n dom.removeCssClass(this.element, \"ace_folding-enabled\");\n\n this.$showFoldWidgets = show;\n this.$padding = null;\n };\n \n this.getShowFoldWidgets = function() {\n return this.$showFoldWidgets;\n };\n\n this.$computePadding = function() {\n if (!this.element.firstChild)\n return {left: 0, right: 0};\n var style = dom.computedStyle(this.element.firstChild);\n this.$padding = {};\n this.$padding.left = parseInt(style.paddingLeft) + 1 || 0;\n this.$padding.right = parseInt(style.paddingRight) || 0;\n return this.$padding;\n };\n\n this.getRegion = function(point) {\n var padding = this.$padding || this.$computePadding();\n var rect = this.element.getBoundingClientRect();\n if (point.x < padding.left + rect.left)\n return \"markers\";\n if (this.$showFoldWidgets && point.x > rect.right - padding.right)\n return \"foldWidgets\";\n };\n\n}).call(Gutter.prototype);\n\nexports.Gutter = Gutter;\n\n});\n\nace.define(\"ace/layer/marker\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/dom\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Range = acequire(\"../range\").Range;\nvar dom = acequire(\"../lib/dom\");\n\nvar Marker = function(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_marker-layer\";\n parentEl.appendChild(this.element);\n};\n\n(function() {\n\n this.$padding = 0;\n\n this.setPadding = function(padding) {\n this.$padding = padding;\n };\n this.setSession = function(session) {\n this.session = session;\n };\n \n this.setMarkers = function(markers) {\n this.markers = markers;\n };\n\n this.update = function(config) {\n if (!config) return;\n\n this.config = config;\n\n\n var html = [];\n for (var key in this.markers) {\n var marker = this.markers[key];\n\n if (!marker.range) {\n marker.update(html, this, this.session, config);\n continue;\n }\n\n var range = marker.range.clipRows(config.firstRow, config.lastRow);\n if (range.isEmpty()) continue;\n\n range = range.toScreenRange(this.session);\n if (marker.renderer) {\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + (this.session.$bidiHandler.isBidiRow(range.start.row)\n ? this.session.$bidiHandler.getPosLeft(range.start.column)\n : range.start.column * config.characterWidth);\n marker.renderer(html, range, left, top, config);\n } else if (marker.type == \"fullLine\") {\n this.drawFullLineMarker(html, range, marker.clazz, config);\n } else if (marker.type == \"screenLine\") {\n this.drawScreenLineMarker(html, range, marker.clazz, config);\n } else if (range.isMultiLine()) {\n if (marker.type == \"text\")\n this.drawTextMarker(html, range, marker.clazz, config);\n else\n this.drawMultiLineMarker(html, range, marker.clazz, config);\n } else {\n if (this.session.$bidiHandler.isBidiRow(range.start.row)) {\n this.drawBidiSingleLineMarker(html, range, marker.clazz + \" ace_start\" + \" ace_br15\", config);\n } else {\n this.drawSingleLineMarker(html, range, marker.clazz + \" ace_start\" + \" ace_br15\", config);\n }\n }\n }\n this.element.innerHTML = html.join(\"\");\n };\n\n this.$getTop = function(row, layerConfig) {\n return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight;\n };\n\n function getBorderClass(tl, tr, br, bl) {\n return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0);\n }\n this.drawTextMarker = function(stringBuilder, range, clazz, layerConfig, extraStyle) {\n var session = this.session;\n var start = range.start.row;\n var end = range.end.row;\n var row = start;\n var prev = 0; \n var curr = 0;\n var next = session.getScreenLastRowColumn(row);\n var clazzModified = null;\n var lineRange = new Range(row, range.start.column, row, curr);\n for (; row <= end; row++) {\n lineRange.start.row = lineRange.end.row = row;\n lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row);\n lineRange.end.column = next;\n prev = curr;\n curr = next;\n next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column;\n clazzModified = clazz + (row == start ? \" ace_start\" : \"\") + \" ace_br\"\n + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end);\n\n if (this.session.$bidiHandler.isBidiRow(row)) {\n this.drawBidiSingleLineMarker(stringBuilder, lineRange, clazzModified,\n layerConfig, row == end ? 0 : 1, extraStyle);\n } else {\n this.drawSingleLineMarker(stringBuilder, lineRange, clazzModified,\n layerConfig, row == end ? 0 : 1, extraStyle);\n }\n }\n };\n this.drawMultiLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\n var padding = this.$padding;\n var height, top, left;\n extraStyle = extraStyle || \"\";\n if (this.session.$bidiHandler.isBidiRow(range.start.row)) {\n var range1 = range.clone();\n range1.end.row = range1.start.row;\n range1.end.column = this.session.getLine(range1.start.row).length;\n this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br1 ace_start\", config, null, extraStyle);\n } else {\n height = config.lineHeight;\n top = this.$getTop(range.start.row, config);\n left = padding + range.start.column * config.characterWidth;\n stringBuilder.push(\n \"
\"\n );\n }\n if (this.session.$bidiHandler.isBidiRow(range.end.row)) {\n var range1 = range.clone();\n range1.start.row = range1.end.row;\n range1.start.column = 0;\n this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br12\", config, null, extraStyle);\n } else {\n var width = range.end.column * config.characterWidth;\n height = config.lineHeight;\n top = this.$getTop(range.end.row, config);\n stringBuilder.push(\n \"
\"\n );\n }\n height = (range.end.row - range.start.row - 1) * config.lineHeight;\n if (height <= 0)\n return;\n top = this.$getTop(range.start.row + 1, config);\n \n var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8);\n\n stringBuilder.push(\n \"
\"\n );\n };\n this.drawSingleLineMarker = function(stringBuilder, range, clazz, config, extraLength, extraStyle) {\n var height = config.lineHeight;\n var width = (range.end.column + (extraLength || 0) - range.start.column) * config.characterWidth;\n\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + range.start.column * config.characterWidth;\n\n stringBuilder.push(\n \"
\"\n );\n };\n this.drawBidiSingleLineMarker = function(stringBuilder, range, clazz, config, extraLength, extraStyle) {\n var height = config.lineHeight, top = this.$getTop(range.start.row, config), padding = this.$padding;\n var selections = this.session.$bidiHandler.getSelections(range.start.column, range.end.column);\n\n selections.forEach(function(selection) {\n stringBuilder.push(\n \"
\"\n );\n });\n };\n\n this.drawFullLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\n var top = this.$getTop(range.start.row, config);\n var height = config.lineHeight;\n if (range.start.row != range.end.row)\n height += this.$getTop(range.end.row, config) - top;\n\n stringBuilder.push(\n \"
\"\n );\n };\n \n this.drawScreenLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\n var top = this.$getTop(range.start.row, config);\n var height = config.lineHeight;\n\n stringBuilder.push(\n \"
\"\n );\n };\n\n}).call(Marker.prototype);\n\nexports.Marker = Marker;\n\n});\n\nace.define(\"ace/layer/text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../lib/oop\");\nvar dom = acequire(\"../lib/dom\");\nvar lang = acequire(\"../lib/lang\");\nvar useragent = acequire(\"../lib/useragent\");\nvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\n\nvar Text = function(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_text-layer\";\n parentEl.appendChild(this.element);\n this.$updateEolChar = this.$updateEolChar.bind(this);\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n\n this.EOF_CHAR = \"\\xB6\";\n this.EOL_CHAR_LF = \"\\xAC\";\n this.EOL_CHAR_CRLF = \"\\xa4\";\n this.EOL_CHAR = this.EOL_CHAR_LF;\n this.TAB_CHAR = \"\\u2014\"; //\"\\u21E5\";\n this.SPACE_CHAR = \"\\xB7\";\n this.$padding = 0;\n\n this.$updateEolChar = function() {\n var EOL_CHAR = this.session.doc.getNewLineCharacter() == \"\\n\"\n ? this.EOL_CHAR_LF\n : this.EOL_CHAR_CRLF;\n if (this.EOL_CHAR != EOL_CHAR) {\n this.EOL_CHAR = EOL_CHAR;\n return true;\n }\n };\n\n this.setPadding = function(padding) {\n this.$padding = padding;\n this.element.style.padding = \"0 \" + padding + \"px\";\n };\n\n this.getLineHeight = function() {\n return this.$fontMetrics.$characterSize.height || 0;\n };\n\n this.getCharacterWidth = function() {\n return this.$fontMetrics.$characterSize.width || 0;\n };\n \n this.$setFontMetrics = function(measure) {\n this.$fontMetrics = measure;\n this.$fontMetrics.on(\"changeCharacterSize\", function(e) {\n this._signal(\"changeCharacterSize\", e);\n }.bind(this));\n this.$pollSizeChanges();\n };\n\n this.checkForSizeChanges = function() {\n this.$fontMetrics.checkForSizeChanges();\n };\n this.$pollSizeChanges = function() {\n return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges();\n };\n this.setSession = function(session) {\n this.session = session;\n if (session)\n this.$computeTabString();\n };\n\n this.showInvisibles = false;\n this.setShowInvisibles = function(showInvisibles) {\n if (this.showInvisibles == showInvisibles)\n return false;\n\n this.showInvisibles = showInvisibles;\n this.$computeTabString();\n return true;\n };\n\n this.displayIndentGuides = true;\n this.setDisplayIndentGuides = function(display) {\n if (this.displayIndentGuides == display)\n return false;\n\n this.displayIndentGuides = display;\n this.$computeTabString();\n return true;\n };\n\n this.$tabStrings = [];\n this.onChangeTabSize =\n this.$computeTabString = function() {\n var tabSize = this.session.getTabSize();\n this.tabSize = tabSize;\n var tabStr = this.$tabStrings = [0];\n for (var i = 1; i < tabSize + 1; i++) {\n if (this.showInvisibles) {\n tabStr.push(\"\"\n + lang.stringRepeat(this.TAB_CHAR, i)\n + \"\");\n } else {\n tabStr.push(lang.stringRepeat(\" \", i));\n }\n }\n if (this.displayIndentGuides) {\n this.$indentGuideRe = /\\s\\S| \\t|\\t |\\s$/;\n var className = \"ace_indent-guide\";\n var spaceClass = \"\";\n var tabClass = \"\";\n if (this.showInvisibles) {\n className += \" ace_invisible\";\n spaceClass = \" ace_invisible_space\";\n tabClass = \" ace_invisible_tab\";\n var spaceContent = lang.stringRepeat(this.SPACE_CHAR, this.tabSize);\n var tabContent = lang.stringRepeat(this.TAB_CHAR, this.tabSize);\n } else{\n var spaceContent = lang.stringRepeat(\" \", this.tabSize);\n var tabContent = spaceContent;\n }\n\n this.$tabStrings[\" \"] = \"\" + spaceContent + \"\";\n this.$tabStrings[\"\\t\"] = \"\" + tabContent + \"\";\n }\n };\n\n this.updateLines = function(config, firstRow, lastRow) {\n if (this.config.lastRow != config.lastRow ||\n this.config.firstRow != config.firstRow) {\n this.scrollLines(config);\n }\n this.config = config;\n\n var first = Math.max(firstRow, config.firstRow);\n var last = Math.min(lastRow, config.lastRow);\n\n var lineElements = this.element.childNodes;\n var lineElementsIdx = 0;\n\n for (var row = config.firstRow; row < first; row++) {\n var foldLine = this.session.getFoldLine(row);\n if (foldLine) {\n if (foldLine.containsRow(first)) {\n first = foldLine.start.row;\n break;\n } else {\n row = foldLine.end.row;\n }\n }\n lineElementsIdx ++;\n }\n\n var row = first;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row+1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row :Infinity;\n }\n if (row > last)\n break;\n\n var lineElement = lineElements[lineElementsIdx++];\n if (lineElement) {\n var html = [];\n this.$renderLine(\n html, row, !this.$useLineGroups(), row == foldStart ? foldLine : false\n );\n lineElement.style.height = config.lineHeight * this.session.getRowLength(row) + \"px\";\n lineElement.innerHTML = html.join(\"\");\n }\n row++;\n }\n };\n\n this.scrollLines = function(config) {\n var oldConfig = this.config;\n this.config = config;\n\n if (!oldConfig || oldConfig.lastRow < config.firstRow)\n return this.update(config);\n\n if (config.lastRow < oldConfig.firstRow)\n return this.update(config);\n\n var el = this.element;\n if (oldConfig.firstRow < config.firstRow)\n for (var row=this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row>0; row--)\n el.removeChild(el.firstChild);\n\n if (oldConfig.lastRow > config.lastRow)\n for (var row=this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row>0; row--)\n el.removeChild(el.lastChild);\n\n if (config.firstRow < oldConfig.firstRow) {\n var fragment = this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1);\n if (el.firstChild)\n el.insertBefore(fragment, el.firstChild);\n else\n el.appendChild(fragment);\n }\n\n if (config.lastRow > oldConfig.lastRow) {\n var fragment = this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow);\n el.appendChild(fragment);\n }\n };\n\n this.$renderLinesFragment = function(config, firstRow, lastRow) {\n var fragment = this.element.ownerDocument.createDocumentFragment();\n var row = firstRow;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row+1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (row > lastRow)\n break;\n\n var container = dom.createElement(\"div\");\n\n var html = [];\n this.$renderLine(html, row, false, row == foldStart ? foldLine : false);\n container.innerHTML = html.join(\"\");\n if (this.$useLineGroups()) {\n container.className = 'ace_line_group';\n fragment.appendChild(container);\n container.style.height = config.lineHeight * this.session.getRowLength(row) + \"px\";\n\n } else {\n while(container.firstChild)\n fragment.appendChild(container.firstChild);\n }\n\n row++;\n }\n return fragment;\n };\n\n this.update = function(config) {\n this.config = config;\n\n var html = [];\n var firstRow = config.firstRow, lastRow = config.lastRow;\n\n var row = firstRow;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row+1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row :Infinity;\n }\n if (row > lastRow)\n break;\n\n if (this.$useLineGroups())\n html.push(\"
\");\n\n this.$renderLine(html, row, false, row == foldStart ? foldLine : false);\n\n if (this.$useLineGroups())\n html.push(\"
\"); // end the line group\n\n row++;\n }\n this.element.innerHTML = html.join(\"\");\n };\n\n this.$textToken = {\n \"text\": true,\n \"rparen\": true,\n \"lparen\": true\n };\n\n this.$renderToken = function(stringBuilder, screenColumn, token, value) {\n var self = this;\n var replaceReg = /\\t|&|<|>|( +)|([\\x00-\\x1f\\x80-\\xa0\\xad\\u1680\\u180E\\u2000-\\u200f\\u2028\\u2029\\u202F\\u205F\\u3000\\uFEFF\\uFFF9-\\uFFFC])|[\\u1100-\\u115F\\u11A3-\\u11A7\\u11FA-\\u11FF\\u2329-\\u232A\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3000-\\u303E\\u3041-\\u3096\\u3099-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u3190-\\u31BA\\u31C0-\\u31E3\\u31F0-\\u321E\\u3220-\\u3247\\u3250-\\u32FE\\u3300-\\u4DBF\\u4E00-\\uA48C\\uA490-\\uA4C6\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFAFF\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFF01-\\uFF60\\uFFE0-\\uFFE6]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n var replaceFunc = function(c, a, b, tabIdx, idx4) {\n if (a) {\n return self.showInvisibles\n ? \"\" + lang.stringRepeat(self.SPACE_CHAR, c.length) + \"\"\n : c;\n } else if (c == \"&\") {\n return \"&\";\n } else if (c == \"<\") {\n return \"<\";\n } else if (c == \">\") {\n return \">\";\n } else if (c == \"\\t\") {\n var tabSize = self.session.getScreenTabSize(screenColumn + tabIdx);\n screenColumn += tabSize - 1;\n return self.$tabStrings[tabSize];\n } else if (c == \"\\u3000\") {\n var classToUse = self.showInvisibles ? \"ace_cjk ace_invisible ace_invisible_space\" : \"ace_cjk\";\n var space = self.showInvisibles ? self.SPACE_CHAR : \"\";\n screenColumn += 1;\n return \"\" + space + \"\";\n } else if (b) {\n return \"\" + self.SPACE_CHAR + \"\";\n } else {\n screenColumn += 1;\n return \"\" + c + \"\";\n }\n };\n\n var output = value.replace(replaceReg, replaceFunc);\n\n if (!this.$textToken[token.type]) {\n var classes = \"ace_\" + token.type.replace(/\\./g, \" ace_\");\n var style = \"\";\n if (token.type == \"fold\")\n style = \" style='width:\" + (token.value.length * this.config.characterWidth) + \"px;' \";\n stringBuilder.push(\"\", output, \"\");\n }\n else {\n stringBuilder.push(output);\n }\n return screenColumn + value.length;\n };\n\n this.renderIndentGuide = function(stringBuilder, value, max) {\n var cols = value.search(this.$indentGuideRe);\n if (cols <= 0 || cols >= max)\n return value;\n if (value[0] == \" \") {\n cols -= cols % this.tabSize;\n stringBuilder.push(lang.stringRepeat(this.$tabStrings[\" \"], cols/this.tabSize));\n return value.substr(cols);\n } else if (value[0] == \"\\t\") {\n stringBuilder.push(lang.stringRepeat(this.$tabStrings[\"\\t\"], cols));\n return value.substr(cols);\n }\n return value;\n };\n\n this.$renderWrappedLine = function(stringBuilder, tokens, splits, onlyContents) {\n var chars = 0;\n var split = 0;\n var splitChars = splits[0];\n var screenColumn = 0;\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n var value = token.value;\n if (i == 0 && this.displayIndentGuides) {\n chars = value.length;\n value = this.renderIndentGuide(stringBuilder, value, splitChars);\n if (!value)\n continue;\n chars -= value.length;\n }\n\n if (chars + value.length < splitChars) {\n screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value);\n chars += value.length;\n } else {\n while (chars + value.length >= splitChars) {\n screenColumn = this.$renderToken(\n stringBuilder, screenColumn,\n token, value.substring(0, splitChars - chars)\n );\n value = value.substring(splitChars - chars);\n chars = splitChars;\n\n if (!onlyContents) {\n stringBuilder.push(\"
\",\n \"
\"\n );\n }\n\n stringBuilder.push(lang.stringRepeat(\"\\xa0\", splits.indent));\n\n split ++;\n screenColumn = 0;\n splitChars = splits[split] || Number.MAX_VALUE;\n }\n if (value.length != 0) {\n chars += value.length;\n screenColumn = this.$renderToken(\n stringBuilder, screenColumn, token, value\n );\n }\n }\n }\n };\n\n this.$renderSimpleLine = function(stringBuilder, tokens) {\n var screenColumn = 0;\n var token = tokens[0];\n var value = token.value;\n if (this.displayIndentGuides)\n value = this.renderIndentGuide(stringBuilder, value);\n if (value)\n screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value);\n for (var i = 1; i < tokens.length; i++) {\n token = tokens[i];\n value = token.value;\n screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value);\n }\n };\n this.$renderLine = function(stringBuilder, row, onlyContents, foldLine) {\n if (!foldLine && foldLine != false)\n foldLine = this.session.getFoldLine(row);\n\n if (foldLine)\n var tokens = this.$getFoldLineTokens(row, foldLine);\n else\n var tokens = this.session.getTokens(row);\n\n\n if (!onlyContents) {\n stringBuilder.push(\n \"
\"\n );\n }\n\n if (tokens.length) {\n var splits = this.session.getRowSplitData(row);\n if (splits && splits.length)\n this.$renderWrappedLine(stringBuilder, tokens, splits, onlyContents);\n else\n this.$renderSimpleLine(stringBuilder, tokens);\n }\n\n if (this.showInvisibles) {\n if (foldLine)\n row = foldLine.end.row;\n\n stringBuilder.push(\n \"\",\n row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR,\n \"\"\n );\n }\n if (!onlyContents)\n stringBuilder.push(\"
\");\n };\n\n this.$getFoldLineTokens = function(row, foldLine) {\n var session = this.session;\n var renderTokens = [];\n\n function addTokens(tokens, from, to) {\n var idx = 0, col = 0;\n while ((col + tokens[idx].value.length) < from) {\n col += tokens[idx].value.length;\n idx++;\n\n if (idx == tokens.length)\n return;\n }\n if (col != from) {\n var value = tokens[idx].value.substring(from - col);\n if (value.length > (to - from))\n value = value.substring(0, to - from);\n\n renderTokens.push({\n type: tokens[idx].type,\n value: value\n });\n\n col = from + value.length;\n idx += 1;\n }\n\n while (col < to && idx < tokens.length) {\n var value = tokens[idx].value;\n if (value.length + col > to) {\n renderTokens.push({\n type: tokens[idx].type,\n value: value.substring(0, to - col)\n });\n } else\n renderTokens.push(tokens[idx]);\n col += value.length;\n idx += 1;\n }\n }\n\n var tokens = session.getTokens(row);\n foldLine.walk(function(placeholder, row, column, lastColumn, isNewRow) {\n if (placeholder != null) {\n renderTokens.push({\n type: \"fold\",\n value: placeholder\n });\n } else {\n if (isNewRow)\n tokens = session.getTokens(row);\n\n if (tokens.length)\n addTokens(tokens, lastColumn, column);\n }\n }, foldLine.end.row, this.session.getLine(foldLine.end.row).length);\n\n return renderTokens;\n };\n\n this.$useLineGroups = function() {\n return this.session.getUseWrapMode();\n };\n\n this.destroy = function() {\n clearInterval(this.$pollSizeChangesTimer);\n if (this.$measureNode)\n this.$measureNode.parentNode.removeChild(this.$measureNode);\n delete this.$measureNode;\n };\n\n}).call(Text.prototype);\n\nexports.Text = Text;\n\n});\n\nace.define(\"ace/layer/cursor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar dom = acequire(\"../lib/dom\");\nvar isIE8;\n\nvar Cursor = function(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_cursor-layer\";\n parentEl.appendChild(this.element);\n \n if (isIE8 === undefined)\n isIE8 = !(\"opacity\" in this.element.style);\n\n this.isVisible = false;\n this.isBlinking = true;\n this.blinkInterval = 1000;\n this.smoothBlinking = false;\n\n this.cursors = [];\n this.cursor = this.addCursor();\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.$updateCursors = (isIE8\n ? this.$updateVisibility\n : this.$updateOpacity).bind(this);\n};\n\n(function() {\n \n this.$updateVisibility = function(val) {\n var cursors = this.cursors;\n for (var i = cursors.length; i--; )\n cursors[i].style.visibility = val ? \"\" : \"hidden\";\n };\n this.$updateOpacity = function(val) {\n var cursors = this.cursors;\n for (var i = cursors.length; i--; )\n cursors[i].style.opacity = val ? \"\" : \"0\";\n };\n \n\n this.$padding = 0;\n this.setPadding = function(padding) {\n this.$padding = padding;\n };\n\n this.setSession = function(session) {\n this.session = session;\n };\n\n this.setBlinking = function(blinking) {\n if (blinking != this.isBlinking){\n this.isBlinking = blinking;\n this.restartTimer();\n }\n };\n\n this.setBlinkInterval = function(blinkInterval) {\n if (blinkInterval != this.blinkInterval){\n this.blinkInterval = blinkInterval;\n this.restartTimer();\n }\n };\n\n this.setSmoothBlinking = function(smoothBlinking) {\n if (smoothBlinking != this.smoothBlinking && !isIE8) {\n this.smoothBlinking = smoothBlinking;\n dom.setCssClass(this.element, \"ace_smooth-blinking\", smoothBlinking);\n this.$updateCursors(true);\n this.$updateCursors = (this.$updateOpacity).bind(this);\n this.restartTimer();\n }\n };\n\n this.addCursor = function() {\n var el = dom.createElement(\"div\");\n el.className = \"ace_cursor\";\n this.element.appendChild(el);\n this.cursors.push(el);\n return el;\n };\n\n this.removeCursor = function() {\n if (this.cursors.length > 1) {\n var el = this.cursors.pop();\n el.parentNode.removeChild(el);\n return el;\n }\n };\n\n this.hideCursor = function() {\n this.isVisible = false;\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n\n this.showCursor = function() {\n this.isVisible = true;\n dom.removeCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n\n this.restartTimer = function() {\n var update = this.$updateCursors;\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n if (this.smoothBlinking) {\n dom.removeCssClass(this.element, \"ace_smooth-blinking\");\n }\n \n update(true);\n\n if (!this.isBlinking || !this.blinkInterval || !this.isVisible)\n return;\n\n if (this.smoothBlinking) {\n setTimeout(function(){\n dom.addCssClass(this.element, \"ace_smooth-blinking\");\n }.bind(this));\n }\n \n var blink = function(){\n this.timeoutId = setTimeout(function() {\n update(false);\n }, 0.6 * this.blinkInterval);\n }.bind(this);\n\n this.intervalId = setInterval(function() {\n update(true);\n blink();\n }, this.blinkInterval);\n\n blink();\n };\n\n this.getPixelPosition = function(position, onScreen) {\n if (!this.config || !this.session)\n return {left : 0, top : 0};\n\n if (!position)\n position = this.session.selection.getCursor();\n var pos = this.session.documentToScreenPosition(position);\n var cursorLeft = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, position.row)\n ? this.session.$bidiHandler.getPosLeft(pos.column)\n : pos.column * this.config.characterWidth);\n\n var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) *\n this.config.lineHeight;\n\n return {left : cursorLeft, top : cursorTop};\n };\n\n this.update = function(config) {\n this.config = config;\n\n var selections = this.session.$selectionMarkers;\n var i = 0, cursorIndex = 0;\n\n if (selections === undefined || selections.length === 0){\n selections = [{cursor: null}];\n }\n\n for (var i = 0, n = selections.length; i < n; i++) {\n var pixelPos = this.getPixelPosition(selections[i].cursor, true);\n if ((pixelPos.top > config.height + config.offset ||\n pixelPos.top < 0) && i > 1) {\n continue;\n }\n\n var style = (this.cursors[cursorIndex++] || this.addCursor()).style;\n \n if (!this.drawCursor) {\n style.left = pixelPos.left + \"px\";\n style.top = pixelPos.top + \"px\";\n style.width = config.characterWidth + \"px\";\n style.height = config.lineHeight + \"px\";\n } else {\n this.drawCursor(style, pixelPos, config, selections[i], this.session);\n }\n }\n while (this.cursors.length > cursorIndex)\n this.removeCursor();\n\n var overwrite = this.session.getOverwrite();\n this.$setOverwrite(overwrite);\n this.$pixelPos = pixelPos;\n this.restartTimer();\n };\n \n this.drawCursor = null;\n\n this.$setOverwrite = function(overwrite) {\n if (overwrite != this.overwrite) {\n this.overwrite = overwrite;\n if (overwrite)\n dom.addCssClass(this.element, \"ace_overwrite-cursors\");\n else\n dom.removeCssClass(this.element, \"ace_overwrite-cursors\");\n }\n };\n\n this.destroy = function() {\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n };\n\n}).call(Cursor.prototype);\n\nexports.Cursor = Cursor;\n\n});\n\nace.define(\"ace/scrollbar\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar dom = acequire(\"./lib/dom\");\nvar event = acequire(\"./lib/event\");\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\nvar MAX_SCROLL_H = 0x8000;\nvar ScrollBar = function(parent) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_scrollbar ace_scrollbar\" + this.classSuffix;\n\n this.inner = dom.createElement(\"div\");\n this.inner.className = \"ace_scrollbar-inner\";\n this.element.appendChild(this.inner);\n\n parent.appendChild(this.element);\n\n this.setVisible(false);\n this.skipEvent = false;\n\n event.addListener(this.element, \"scroll\", this.onScroll.bind(this));\n event.addListener(this.element, \"mousedown\", event.preventDefault);\n};\n\n(function() {\n oop.implement(this, EventEmitter);\n\n this.setVisible = function(isVisible) {\n this.element.style.display = isVisible ? \"\" : \"none\";\n this.isVisible = isVisible;\n this.coeff = 1;\n };\n}).call(ScrollBar.prototype);\nvar VScrollBar = function(parent, renderer) {\n ScrollBar.call(this, parent);\n this.scrollTop = 0;\n this.scrollHeight = 0;\n renderer.$scrollbarWidth = \n this.width = dom.scrollbarWidth(parent.ownerDocument);\n this.inner.style.width =\n this.element.style.width = (this.width || 15) + 5 + \"px\";\n this.$minWidth = 0;\n};\n\noop.inherits(VScrollBar, ScrollBar);\n\n(function() {\n\n this.classSuffix = '-v';\n this.onScroll = function() {\n if (!this.skipEvent) {\n this.scrollTop = this.element.scrollTop;\n if (this.coeff != 1) {\n var h = this.element.clientHeight / this.scrollHeight;\n this.scrollTop = this.scrollTop * (1 - h) / (this.coeff - h);\n }\n this._emit(\"scroll\", {data: this.scrollTop});\n }\n this.skipEvent = false;\n };\n this.getWidth = function() {\n return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0);\n };\n this.setHeight = function(height) {\n this.element.style.height = height + \"px\";\n };\n this.setInnerHeight =\n this.setScrollHeight = function(height) {\n this.scrollHeight = height;\n if (height > MAX_SCROLL_H) {\n this.coeff = MAX_SCROLL_H / height;\n height = MAX_SCROLL_H;\n } else if (this.coeff != 1) {\n this.coeff = 1;\n }\n this.inner.style.height = height + \"px\";\n };\n this.setScrollTop = function(scrollTop) {\n if (this.scrollTop != scrollTop) {\n this.skipEvent = true;\n this.scrollTop = scrollTop;\n this.element.scrollTop = scrollTop * this.coeff;\n }\n };\n\n}).call(VScrollBar.prototype);\nvar HScrollBar = function(parent, renderer) {\n ScrollBar.call(this, parent);\n this.scrollLeft = 0;\n this.height = renderer.$scrollbarWidth;\n this.inner.style.height =\n this.element.style.height = (this.height || 15) + 5 + \"px\";\n};\n\noop.inherits(HScrollBar, ScrollBar);\n\n(function() {\n\n this.classSuffix = '-h';\n this.onScroll = function() {\n if (!this.skipEvent) {\n this.scrollLeft = this.element.scrollLeft;\n this._emit(\"scroll\", {data: this.scrollLeft});\n }\n this.skipEvent = false;\n };\n this.getHeight = function() {\n return this.isVisible ? this.height : 0;\n };\n this.setWidth = function(width) {\n this.element.style.width = width + \"px\";\n };\n this.setInnerWidth = function(width) {\n this.inner.style.width = width + \"px\";\n };\n this.setScrollWidth = function(width) {\n this.inner.style.width = width + \"px\";\n };\n this.setScrollLeft = function(scrollLeft) {\n if (this.scrollLeft != scrollLeft) {\n this.skipEvent = true;\n this.scrollLeft = this.element.scrollLeft = scrollLeft;\n }\n };\n\n}).call(HScrollBar.prototype);\n\n\nexports.ScrollBar = VScrollBar; // backward compatibility\nexports.ScrollBarV = VScrollBar; // backward compatibility\nexports.ScrollBarH = HScrollBar; // backward compatibility\n\nexports.VScrollBar = VScrollBar;\nexports.HScrollBar = HScrollBar;\n});\n\nace.define(\"ace/renderloop\",[\"require\",\"exports\",\"module\",\"ace/lib/event\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar event = acequire(\"./lib/event\");\n\n\nvar RenderLoop = function(onRender, win) {\n this.onRender = onRender;\n this.pending = false;\n this.changes = 0;\n this.window = win || window;\n};\n\n(function() {\n\n\n this.schedule = function(change) {\n this.changes = this.changes | change;\n if (!this.pending && this.changes) {\n this.pending = true;\n var _self = this;\n event.nextFrame(function() {\n _self.pending = false;\n var changes;\n while (changes = _self.changes) {\n _self.changes = 0;\n _self.onRender(changes);\n }\n }, this.window);\n }\n };\n\n}).call(RenderLoop.prototype);\n\nexports.RenderLoop = RenderLoop;\n});\n\nace.define(\"ace/layer/font_metrics\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\n\nvar oop = acequire(\"../lib/oop\");\nvar dom = acequire(\"../lib/dom\");\nvar lang = acequire(\"../lib/lang\");\nvar useragent = acequire(\"../lib/useragent\");\nvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\n\nvar CHAR_COUNT = 0;\n\nvar FontMetrics = exports.FontMetrics = function(parentEl) {\n this.el = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.el.style, true);\n \n this.$main = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$main.style);\n \n this.$measureNode = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$measureNode.style);\n \n \n this.el.appendChild(this.$main);\n this.el.appendChild(this.$measureNode);\n parentEl.appendChild(this.el);\n \n if (!CHAR_COUNT)\n this.$testFractionalRect();\n this.$measureNode.innerHTML = lang.stringRepeat(\"X\", CHAR_COUNT);\n \n this.$characterSize = {width: 0, height: 0};\n this.checkForSizeChanges();\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n \n this.$characterSize = {width: 0, height: 0};\n \n this.$testFractionalRect = function() {\n var el = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(el.style);\n el.style.width = \"0.2px\";\n document.documentElement.appendChild(el);\n var w = el.getBoundingClientRect().width;\n if (w > 0 && w < 1)\n CHAR_COUNT = 50;\n else\n CHAR_COUNT = 100;\n el.parentNode.removeChild(el);\n };\n \n this.$setMeasureNodeStyles = function(style, isRoot) {\n style.width = style.height = \"auto\";\n style.left = style.top = \"0px\";\n style.visibility = \"hidden\";\n style.position = \"absolute\";\n style.whiteSpace = \"pre\";\n\n if (useragent.isIE < 8) {\n style[\"font-family\"] = \"inherit\";\n } else {\n style.font = \"inherit\";\n }\n style.overflow = isRoot ? \"hidden\" : \"visible\";\n };\n\n this.checkForSizeChanges = function() {\n var size = this.$measureSizes();\n if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) {\n this.$measureNode.style.fontWeight = \"bold\";\n var boldSize = this.$measureSizes();\n this.$measureNode.style.fontWeight = \"\";\n this.$characterSize = size;\n this.charSizes = Object.create(null);\n this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height;\n this._emit(\"changeCharacterSize\", {data: size});\n }\n };\n\n this.$pollSizeChanges = function() {\n if (this.$pollSizeChangesTimer)\n return this.$pollSizeChangesTimer;\n var self = this;\n return this.$pollSizeChangesTimer = setInterval(function() {\n self.checkForSizeChanges();\n }, 500);\n };\n \n this.setPolling = function(val) {\n if (val) {\n this.$pollSizeChanges();\n } else if (this.$pollSizeChangesTimer) {\n clearInterval(this.$pollSizeChangesTimer);\n this.$pollSizeChangesTimer = 0;\n }\n };\n\n this.$measureSizes = function() {\n if (CHAR_COUNT === 50) {\n var rect = null;\n try { \n rect = this.$measureNode.getBoundingClientRect();\n } catch(e) {\n rect = {width: 0, height:0 };\n }\n var size = {\n height: rect.height,\n width: rect.width / CHAR_COUNT\n };\n } else {\n var size = {\n height: this.$measureNode.clientHeight,\n width: this.$measureNode.clientWidth / CHAR_COUNT\n };\n }\n if (size.width === 0 || size.height === 0)\n return null;\n return size;\n };\n\n this.$measureCharWidth = function(ch) {\n this.$main.innerHTML = lang.stringRepeat(ch, CHAR_COUNT);\n var rect = this.$main.getBoundingClientRect();\n return rect.width / CHAR_COUNT;\n };\n \n this.getCharacterWidth = function(ch) {\n var w = this.charSizes[ch];\n if (w === undefined) {\n w = this.charSizes[ch] = this.$measureCharWidth(ch) / this.$characterSize.width;\n }\n return w;\n };\n\n this.destroy = function() {\n clearInterval(this.$pollSizeChangesTimer);\n if (this.el && this.el.parentNode)\n this.el.parentNode.removeChild(this.el);\n };\n\n}).call(FontMetrics.prototype);\n\n});\n\nace.define(\"ace/virtual_renderer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/config\",\"ace/lib/useragent\",\"ace/layer/gutter\",\"ace/layer/marker\",\"ace/layer/text\",\"ace/layer/cursor\",\"ace/scrollbar\",\"ace/scrollbar\",\"ace/renderloop\",\"ace/layer/font_metrics\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar dom = acequire(\"./lib/dom\");\nvar config = acequire(\"./config\");\nvar useragent = acequire(\"./lib/useragent\");\nvar GutterLayer = acequire(\"./layer/gutter\").Gutter;\nvar MarkerLayer = acequire(\"./layer/marker\").Marker;\nvar TextLayer = acequire(\"./layer/text\").Text;\nvar CursorLayer = acequire(\"./layer/cursor\").Cursor;\nvar HScrollBar = acequire(\"./scrollbar\").HScrollBar;\nvar VScrollBar = acequire(\"./scrollbar\").VScrollBar;\nvar RenderLoop = acequire(\"./renderloop\").RenderLoop;\nvar FontMetrics = acequire(\"./layer/font_metrics\").FontMetrics;\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\nvar editorCss = \".ace_editor {\\\nposition: relative;\\\noverflow: hidden;\\\nfont: 12px/normal 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace;\\\ndirection: ltr;\\\ntext-align: left;\\\n-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\\\n}\\\n.ace_scroller {\\\nposition: absolute;\\\noverflow: hidden;\\\ntop: 0;\\\nbottom: 0;\\\nbackground-color: inherit;\\\n-ms-user-select: none;\\\n-moz-user-select: none;\\\n-webkit-user-select: none;\\\nuser-select: none;\\\ncursor: text;\\\n}\\\n.ace_content {\\\nposition: absolute;\\\n-moz-box-sizing: border-box;\\\n-webkit-box-sizing: border-box;\\\nbox-sizing: border-box;\\\nmin-width: 100%;\\\n}\\\n.ace_dragging .ace_scroller:before{\\\nposition: absolute;\\\ntop: 0;\\\nleft: 0;\\\nright: 0;\\\nbottom: 0;\\\ncontent: '';\\\nbackground: rgba(250, 250, 250, 0.01);\\\nz-index: 1000;\\\n}\\\n.ace_dragging.ace_dark .ace_scroller:before{\\\nbackground: rgba(0, 0, 0, 0.01);\\\n}\\\n.ace_selecting, .ace_selecting * {\\\ncursor: text !important;\\\n}\\\n.ace_gutter {\\\nposition: absolute;\\\noverflow : hidden;\\\nwidth: auto;\\\ntop: 0;\\\nbottom: 0;\\\nleft: 0;\\\ncursor: default;\\\nz-index: 4;\\\n-ms-user-select: none;\\\n-moz-user-select: none;\\\n-webkit-user-select: none;\\\nuser-select: none;\\\n}\\\n.ace_gutter-active-line {\\\nposition: absolute;\\\nleft: 0;\\\nright: 0;\\\n}\\\n.ace_scroller.ace_scroll-left {\\\nbox-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;\\\n}\\\n.ace_gutter-cell {\\\npadding-left: 19px;\\\npadding-right: 6px;\\\nbackground-repeat: no-repeat;\\\n}\\\n.ace_gutter-cell.ace_error {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==\\\");\\\nbackground-repeat: no-repeat;\\\nbackground-position: 2px center;\\\n}\\\n.ace_gutter-cell.ace_warning {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==\\\");\\\nbackground-position: 2px center;\\\n}\\\n.ace_gutter-cell.ace_info {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\\\");\\\nbackground-position: 2px center;\\\n}\\\n.ace_dark .ace_gutter-cell.ace_info {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC\\\");\\\n}\\\n.ace_scrollbar {\\\nposition: absolute;\\\nright: 0;\\\nbottom: 0;\\\nz-index: 6;\\\n}\\\n.ace_scrollbar-inner {\\\nposition: absolute;\\\ncursor: text;\\\nleft: 0;\\\ntop: 0;\\\n}\\\n.ace_scrollbar-v{\\\noverflow-x: hidden;\\\noverflow-y: scroll;\\\ntop: 0;\\\n}\\\n.ace_scrollbar-h {\\\noverflow-x: scroll;\\\noverflow-y: hidden;\\\nleft: 0;\\\n}\\\n.ace_print-margin {\\\nposition: absolute;\\\nheight: 100%;\\\n}\\\n.ace_text-input {\\\nposition: absolute;\\\nz-index: 0;\\\nwidth: 0.5em;\\\nheight: 1em;\\\nopacity: 0;\\\nbackground: transparent;\\\n-moz-appearance: none;\\\nappearance: none;\\\nborder: none;\\\nresize: none;\\\noutline: none;\\\noverflow: hidden;\\\nfont: inherit;\\\npadding: 0 1px;\\\nmargin: 0 -1px;\\\ntext-indent: -1em;\\\n-ms-user-select: text;\\\n-moz-user-select: text;\\\n-webkit-user-select: text;\\\nuser-select: text;\\\nwhite-space: pre!important;\\\n}\\\n.ace_text-input.ace_composition {\\\nbackground: inherit;\\\ncolor: inherit;\\\nz-index: 1000;\\\nopacity: 1;\\\ntext-indent: 0;\\\n}\\\n.ace_layer {\\\nz-index: 1;\\\nposition: absolute;\\\noverflow: hidden;\\\nword-wrap: normal;\\\nwhite-space: pre;\\\nheight: 100%;\\\nwidth: 100%;\\\n-moz-box-sizing: border-box;\\\n-webkit-box-sizing: border-box;\\\nbox-sizing: border-box;\\\npointer-events: none;\\\n}\\\n.ace_gutter-layer {\\\nposition: relative;\\\nwidth: auto;\\\ntext-align: right;\\\npointer-events: auto;\\\n}\\\n.ace_text-layer {\\\nfont: inherit !important;\\\n}\\\n.ace_cjk {\\\ndisplay: inline-block;\\\ntext-align: center;\\\n}\\\n.ace_cursor-layer {\\\nz-index: 4;\\\n}\\\n.ace_cursor {\\\nz-index: 4;\\\nposition: absolute;\\\n-moz-box-sizing: border-box;\\\n-webkit-box-sizing: border-box;\\\nbox-sizing: border-box;\\\nborder-left: 2px solid;\\\ntransform: translatez(0);\\\n}\\\n.ace_multiselect .ace_cursor {\\\nborder-left-width: 1px;\\\n}\\\n.ace_slim-cursors .ace_cursor {\\\nborder-left-width: 1px;\\\n}\\\n.ace_overwrite-cursors .ace_cursor {\\\nborder-left-width: 0;\\\nborder-bottom: 1px solid;\\\n}\\\n.ace_hidden-cursors .ace_cursor {\\\nopacity: 0.2;\\\n}\\\n.ace_smooth-blinking .ace_cursor {\\\n-webkit-transition: opacity 0.18s;\\\ntransition: opacity 0.18s;\\\n}\\\n.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\\\nposition: absolute;\\\nz-index: 3;\\\n}\\\n.ace_marker-layer .ace_selection {\\\nposition: absolute;\\\nz-index: 5;\\\n}\\\n.ace_marker-layer .ace_bracket {\\\nposition: absolute;\\\nz-index: 6;\\\n}\\\n.ace_marker-layer .ace_active-line {\\\nposition: absolute;\\\nz-index: 2;\\\n}\\\n.ace_marker-layer .ace_selected-word {\\\nposition: absolute;\\\nz-index: 4;\\\n-moz-box-sizing: border-box;\\\n-webkit-box-sizing: border-box;\\\nbox-sizing: border-box;\\\n}\\\n.ace_line .ace_fold {\\\n-moz-box-sizing: border-box;\\\n-webkit-box-sizing: border-box;\\\nbox-sizing: border-box;\\\ndisplay: inline-block;\\\nheight: 11px;\\\nmargin-top: -2px;\\\nvertical-align: middle;\\\nbackground-image:\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\\\");\\\nbackground-repeat: no-repeat, repeat-x;\\\nbackground-position: center center, top left;\\\ncolor: transparent;\\\nborder: 1px solid black;\\\nborder-radius: 2px;\\\ncursor: pointer;\\\npointer-events: auto;\\\n}\\\n.ace_dark .ace_fold {\\\n}\\\n.ace_fold:hover{\\\nbackground-image:\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\\\");\\\n}\\\n.ace_tooltip {\\\nbackground-color: #FFF;\\\nbackground-image: -webkit-linear-gradient(top, transparent, rgba(0, 0, 0, 0.1));\\\nbackground-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));\\\nborder: 1px solid gray;\\\nborder-radius: 1px;\\\nbox-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\\\ncolor: black;\\\nmax-width: 100%;\\\npadding: 3px 4px;\\\nposition: fixed;\\\nz-index: 999999;\\\n-moz-box-sizing: border-box;\\\n-webkit-box-sizing: border-box;\\\nbox-sizing: border-box;\\\ncursor: default;\\\nwhite-space: pre;\\\nword-wrap: break-word;\\\nline-height: normal;\\\nfont-style: normal;\\\nfont-weight: normal;\\\nletter-spacing: normal;\\\npointer-events: none;\\\n}\\\n.ace_folding-enabled > .ace_gutter-cell {\\\npadding-right: 13px;\\\n}\\\n.ace_fold-widget {\\\n-moz-box-sizing: border-box;\\\n-webkit-box-sizing: border-box;\\\nbox-sizing: border-box;\\\nmargin: 0 -12px 0 1px;\\\ndisplay: none;\\\nwidth: 11px;\\\nvertical-align: top;\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\\\");\\\nbackground-repeat: no-repeat;\\\nbackground-position: center;\\\nborder-radius: 3px;\\\nborder: 1px solid transparent;\\\ncursor: pointer;\\\n}\\\n.ace_folding-enabled .ace_fold-widget {\\\ndisplay: inline-block; \\\n}\\\n.ace_fold-widget.ace_end {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\\\");\\\n}\\\n.ace_fold-widget.ace_closed {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\\\");\\\n}\\\n.ace_fold-widget:hover {\\\nborder: 1px solid rgba(0, 0, 0, 0.3);\\\nbackground-color: rgba(255, 255, 255, 0.2);\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\\\n}\\\n.ace_fold-widget:active {\\\nborder: 1px solid rgba(0, 0, 0, 0.4);\\\nbackground-color: rgba(0, 0, 0, 0.05);\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\\\n}\\\n.ace_dark .ace_fold-widget {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\\\");\\\n}\\\n.ace_dark .ace_fold-widget.ace_end {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\\\");\\\n}\\\n.ace_dark .ace_fold-widget.ace_closed {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\\\");\\\n}\\\n.ace_dark .ace_fold-widget:hover {\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\\nbackground-color: rgba(255, 255, 255, 0.1);\\\n}\\\n.ace_dark .ace_fold-widget:active {\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\\n}\\\n.ace_fold-widget.ace_invalid {\\\nbackground-color: #FFB4B4;\\\nborder-color: #DE5555;\\\n}\\\n.ace_fade-fold-widgets .ace_fold-widget {\\\n-webkit-transition: opacity 0.4s ease 0.05s;\\\ntransition: opacity 0.4s ease 0.05s;\\\nopacity: 0;\\\n}\\\n.ace_fade-fold-widgets:hover .ace_fold-widget {\\\n-webkit-transition: opacity 0.05s ease 0.05s;\\\ntransition: opacity 0.05s ease 0.05s;\\\nopacity:1;\\\n}\\\n.ace_underline {\\\ntext-decoration: underline;\\\n}\\\n.ace_bold {\\\nfont-weight: bold;\\\n}\\\n.ace_nobold .ace_bold {\\\nfont-weight: normal;\\\n}\\\n.ace_italic {\\\nfont-style: italic;\\\n}\\\n.ace_error-marker {\\\nbackground-color: rgba(255, 0, 0,0.2);\\\nposition: absolute;\\\nz-index: 9;\\\n}\\\n.ace_highlight-marker {\\\nbackground-color: rgba(255, 255, 0,0.2);\\\nposition: absolute;\\\nz-index: 8;\\\n}\\\n.ace_br1 {border-top-left-radius : 3px;}\\\n.ace_br2 {border-top-right-radius : 3px;}\\\n.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}\\\n.ace_br4 {border-bottom-right-radius: 3px;}\\\n.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}\\\n.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}\\\n.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}\\\n.ace_br8 {border-bottom-left-radius : 3px;}\\\n.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}\\\n.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}\\\n.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_text-input-ios {\\\nposition: absolute !important;\\\ntop: -100000px !important;\\\nleft: -100000px !important;\\\n}\\\n\";\n\ndom.importCssString(editorCss, \"ace_editor.css\");\n\nvar VirtualRenderer = function(container, theme) {\n var _self = this;\n\n this.container = container || dom.createElement(\"div\");\n this.$keepTextAreaAtCursor = !useragent.isOldIE;\n\n dom.addCssClass(this.container, \"ace_editor\");\n\n this.setTheme(theme);\n\n this.$gutter = dom.createElement(\"div\");\n this.$gutter.className = \"ace_gutter\";\n this.container.appendChild(this.$gutter);\n this.$gutter.setAttribute(\"aria-hidden\", true);\n\n this.scroller = dom.createElement(\"div\");\n this.scroller.className = \"ace_scroller\";\n this.container.appendChild(this.scroller);\n\n this.content = dom.createElement(\"div\");\n this.content.className = \"ace_content\";\n this.scroller.appendChild(this.content);\n\n this.$gutterLayer = new GutterLayer(this.$gutter);\n this.$gutterLayer.on(\"changeGutterWidth\", this.onGutterResize.bind(this));\n\n this.$markerBack = new MarkerLayer(this.content);\n\n var textLayer = this.$textLayer = new TextLayer(this.content);\n this.canvas = textLayer.element;\n\n this.$markerFront = new MarkerLayer(this.content);\n\n this.$cursorLayer = new CursorLayer(this.content);\n this.$horizScroll = false;\n this.$vScroll = false;\n\n this.scrollBar = \n this.scrollBarV = new VScrollBar(this.container, this);\n this.scrollBarH = new HScrollBar(this.container, this);\n this.scrollBarV.addEventListener(\"scroll\", function(e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n });\n this.scrollBarH.addEventListener(\"scroll\", function(e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n });\n\n this.scrollTop = 0;\n this.scrollLeft = 0;\n\n this.cursorPos = {\n row : 0,\n column : 0\n };\n\n this.$fontMetrics = new FontMetrics(this.container);\n this.$textLayer.$setFontMetrics(this.$fontMetrics);\n this.$textLayer.addEventListener(\"changeCharacterSize\", function(e) {\n _self.updateCharacterSize();\n _self.onResize(true, _self.gutterWidth, _self.$size.width, _self.$size.height);\n _self._signal(\"changeCharacterSize\", e);\n });\n\n this.$size = {\n width: 0,\n height: 0,\n scrollerHeight: 0,\n scrollerWidth: 0,\n $dirty: true\n };\n\n this.layerConfig = {\n width : 1,\n padding : 0,\n firstRow : 0,\n firstRowScreen: 0,\n lastRow : 0,\n lineHeight : 0,\n characterWidth : 0,\n minHeight : 1,\n maxHeight : 1,\n offset : 0,\n height : 1,\n gutterOffset: 1\n };\n \n this.scrollMargin = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n v: 0,\n h: 0\n };\n\n this.$loop = new RenderLoop(\n this.$renderChanges.bind(this),\n this.container.ownerDocument.defaultView\n );\n this.$loop.schedule(this.CHANGE_FULL);\n\n this.updateCharacterSize();\n this.setPadding(4);\n config.resetOptions(this);\n config._emit(\"renderer\", this);\n};\n\n(function() {\n\n this.CHANGE_CURSOR = 1;\n this.CHANGE_MARKER = 2;\n this.CHANGE_GUTTER = 4;\n this.CHANGE_SCROLL = 8;\n this.CHANGE_LINES = 16;\n this.CHANGE_TEXT = 32;\n this.CHANGE_SIZE = 64;\n this.CHANGE_MARKER_BACK = 128;\n this.CHANGE_MARKER_FRONT = 256;\n this.CHANGE_FULL = 512;\n this.CHANGE_H_SCROLL = 1024;\n\n oop.implement(this, EventEmitter);\n\n this.updateCharacterSize = function() {\n if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) {\n this.$allowBoldFonts = this.$textLayer.allowBoldFonts;\n this.setStyle(\"ace_nobold\", !this.$allowBoldFonts);\n }\n\n this.layerConfig.characterWidth =\n this.characterWidth = this.$textLayer.getCharacterWidth();\n this.layerConfig.lineHeight =\n this.lineHeight = this.$textLayer.getLineHeight();\n this.$updatePrintMargin();\n };\n this.setSession = function(session) {\n if (this.session)\n this.session.doc.off(\"changeNewLineMode\", this.onChangeNewLineMode);\n \n this.session = session;\n if (session && this.scrollMargin.top && session.getScrollTop() <= 0)\n session.setScrollTop(-this.scrollMargin.top);\n\n this.$cursorLayer.setSession(session);\n this.$markerBack.setSession(session);\n this.$markerFront.setSession(session);\n this.$gutterLayer.setSession(session);\n this.$textLayer.setSession(session);\n if (!session)\n return;\n \n this.$loop.schedule(this.CHANGE_FULL);\n this.session.$setFontMetrics(this.$fontMetrics);\n this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\n \n this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this);\n this.onChangeNewLineMode();\n this.session.doc.on(\"changeNewLineMode\", this.onChangeNewLineMode);\n };\n this.updateLines = function(firstRow, lastRow, force) {\n if (lastRow === undefined)\n lastRow = Infinity;\n\n if (!this.$changedLines) {\n this.$changedLines = {\n firstRow: firstRow,\n lastRow: lastRow\n };\n }\n else {\n if (this.$changedLines.firstRow > firstRow)\n this.$changedLines.firstRow = firstRow;\n\n if (this.$changedLines.lastRow < lastRow)\n this.$changedLines.lastRow = lastRow;\n }\n if (this.$changedLines.lastRow < this.layerConfig.firstRow) {\n if (force)\n this.$changedLines.lastRow = this.layerConfig.lastRow;\n else\n return;\n }\n if (this.$changedLines.firstRow > this.layerConfig.lastRow)\n return;\n this.$loop.schedule(this.CHANGE_LINES);\n };\n\n this.onChangeNewLineMode = function() {\n this.$loop.schedule(this.CHANGE_TEXT);\n this.$textLayer.$updateEolChar();\n this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR);\n };\n \n this.onChangeTabSize = function() {\n this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER);\n this.$textLayer.onChangeTabSize();\n };\n this.updateText = function() {\n this.$loop.schedule(this.CHANGE_TEXT);\n };\n this.updateFull = function(force) {\n if (force)\n this.$renderChanges(this.CHANGE_FULL, true);\n else\n this.$loop.schedule(this.CHANGE_FULL);\n };\n this.updateFontSize = function() {\n this.$textLayer.checkForSizeChanges();\n };\n\n this.$changes = 0;\n this.$updateSizeAsync = function() {\n if (this.$loop.pending)\n this.$size.$dirty = true;\n else\n this.onResize();\n };\n this.onResize = function(force, gutterWidth, width, height) {\n if (this.resizing > 2)\n return;\n else if (this.resizing > 0)\n this.resizing++;\n else\n this.resizing = force ? 1 : 0;\n var el = this.container;\n if (!height)\n height = el.clientHeight || el.scrollHeight;\n if (!width)\n width = el.clientWidth || el.scrollWidth;\n var changes = this.$updateCachedSize(force, gutterWidth, width, height);\n\n \n if (!this.$size.scrollerHeight || (!width && !height))\n return this.resizing = 0;\n\n if (force)\n this.$gutterLayer.$padding = null;\n\n if (force)\n this.$renderChanges(changes | this.$changes, true);\n else\n this.$loop.schedule(changes | this.$changes);\n\n if (this.resizing)\n this.resizing = 0;\n this.scrollBarV.scrollLeft = this.scrollBarV.scrollTop = null;\n };\n \n this.$updateCachedSize = function(force, gutterWidth, width, height) {\n height -= (this.$extraHeight || 0);\n var changes = 0;\n var size = this.$size;\n var oldSize = {\n width: size.width,\n height: size.height,\n scrollerHeight: size.scrollerHeight,\n scrollerWidth: size.scrollerWidth\n };\n if (height && (force || size.height != height)) {\n size.height = height;\n changes |= this.CHANGE_SIZE;\n\n size.scrollerHeight = size.height;\n if (this.$horizScroll)\n size.scrollerHeight -= this.scrollBarH.getHeight();\n this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + \"px\";\n\n changes = changes | this.CHANGE_SCROLL;\n }\n\n if (width && (force || size.width != width)) {\n changes |= this.CHANGE_SIZE;\n size.width = width;\n \n if (gutterWidth == null)\n gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\n \n this.gutterWidth = gutterWidth;\n \n this.scrollBarH.element.style.left = \n this.scroller.style.left = gutterWidth + \"px\";\n size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth()); \n \n this.scrollBarH.element.style.right = \n this.scroller.style.right = this.scrollBarV.getWidth() + \"px\";\n this.scroller.style.bottom = this.scrollBarH.getHeight() + \"px\";\n\n if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force)\n changes |= this.CHANGE_FULL;\n }\n \n size.$dirty = !width || !height;\n\n if (changes)\n this._signal(\"resize\", oldSize);\n\n return changes;\n };\n\n this.onGutterResize = function() {\n var gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\n if (gutterWidth != this.gutterWidth)\n this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height);\n\n if (this.session.getUseWrapMode() && this.adjustWrapLimit()) {\n this.$loop.schedule(this.CHANGE_FULL);\n } else if (this.$size.$dirty) {\n this.$loop.schedule(this.CHANGE_FULL);\n } else {\n this.$computeLayerConfig();\n this.$loop.schedule(this.CHANGE_MARKER);\n }\n };\n this.adjustWrapLimit = function() {\n var availableWidth = this.$size.scrollerWidth - this.$padding * 2;\n var limit = Math.floor(availableWidth / this.characterWidth);\n return this.session.adjustWrapLimit(limit, this.$showPrintMargin && this.$printMarginColumn);\n };\n this.setAnimatedScroll = function(shouldAnimate){\n this.setOption(\"animatedScroll\", shouldAnimate);\n };\n this.getAnimatedScroll = function() {\n return this.$animatedScroll;\n };\n this.setShowInvisibles = function(showInvisibles) {\n this.setOption(\"showInvisibles\", showInvisibles);\n this.session.$bidiHandler.setShowInvisibles(showInvisibles);\n };\n this.getShowInvisibles = function() {\n return this.getOption(\"showInvisibles\");\n };\n this.getDisplayIndentGuides = function() {\n return this.getOption(\"displayIndentGuides\");\n };\n\n this.setDisplayIndentGuides = function(display) {\n this.setOption(\"displayIndentGuides\", display);\n };\n this.setShowPrintMargin = function(showPrintMargin) {\n this.setOption(\"showPrintMargin\", showPrintMargin);\n };\n this.getShowPrintMargin = function() {\n return this.getOption(\"showPrintMargin\");\n };\n this.setPrintMarginColumn = function(showPrintMargin) {\n this.setOption(\"printMarginColumn\", showPrintMargin);\n };\n this.getPrintMarginColumn = function() {\n return this.getOption(\"printMarginColumn\");\n };\n this.getShowGutter = function(){\n return this.getOption(\"showGutter\");\n };\n this.setShowGutter = function(show){\n return this.setOption(\"showGutter\", show);\n };\n\n this.getFadeFoldWidgets = function(){\n return this.getOption(\"fadeFoldWidgets\");\n };\n\n this.setFadeFoldWidgets = function(show) {\n this.setOption(\"fadeFoldWidgets\", show);\n };\n\n this.setHighlightGutterLine = function(shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n\n this.getHighlightGutterLine = function() {\n return this.getOption(\"highlightGutterLine\");\n };\n\n this.$updateGutterLineHighlight = function() {\n var pos = this.$cursorLayer.$pixelPos;\n var height = this.layerConfig.lineHeight;\n if (this.session.getUseWrapMode()) {\n var cursor = this.session.selection.getCursor();\n cursor.column = 0;\n pos = this.$cursorLayer.getPixelPosition(cursor, true);\n height *= this.session.getRowLength(cursor.row);\n }\n this.$gutterLineHighlight.style.top = pos.top - this.layerConfig.offset + \"px\";\n this.$gutterLineHighlight.style.height = height + \"px\";\n };\n\n this.$updatePrintMargin = function() {\n if (!this.$showPrintMargin && !this.$printMarginEl)\n return;\n\n if (!this.$printMarginEl) {\n var containerEl = dom.createElement(\"div\");\n containerEl.className = \"ace_layer ace_print-margin-layer\";\n this.$printMarginEl = dom.createElement(\"div\");\n this.$printMarginEl.className = \"ace_print-margin\";\n containerEl.appendChild(this.$printMarginEl);\n this.content.insertBefore(containerEl, this.content.firstChild);\n }\n\n var style = this.$printMarginEl.style;\n style.left = ((this.characterWidth * this.$printMarginColumn) + this.$padding) + \"px\";\n style.visibility = this.$showPrintMargin ? \"visible\" : \"hidden\";\n \n if (this.session && this.session.$wrap == -1)\n this.adjustWrapLimit();\n };\n this.getContainerElement = function() {\n return this.container;\n };\n this.getMouseEventTarget = function() {\n return this.scroller;\n };\n this.getTextAreaContainer = function() {\n return this.container;\n };\n this.$moveTextAreaToCursor = function() {\n if (!this.$keepTextAreaAtCursor)\n return;\n var config = this.layerConfig;\n var posTop = this.$cursorLayer.$pixelPos.top;\n var posLeft = this.$cursorLayer.$pixelPos.left;\n posTop -= config.offset;\n\n var style = this.textarea.style;\n var h = this.lineHeight;\n if (posTop < 0 || posTop > config.height - h) {\n style.top = style.left = \"0\";\n return;\n }\n\n var w = this.characterWidth;\n if (this.$composition) {\n var val = this.textarea.value.replace(/^\\x01+/, \"\");\n w *= (this.session.$getStringScreenWidth(val)[0]+2);\n h += 2;\n }\n posLeft -= this.scrollLeft;\n if (posLeft > this.$size.scrollerWidth - w)\n posLeft = this.$size.scrollerWidth - w;\n\n posLeft += this.gutterWidth;\n style.height = h + \"px\";\n style.width = w + \"px\";\n style.left = Math.min(posLeft, this.$size.scrollerWidth - w) + \"px\";\n style.top = Math.min(posTop, this.$size.height - h) + \"px\";\n };\n this.getFirstVisibleRow = function() {\n return this.layerConfig.firstRow;\n };\n this.getFirstFullyVisibleRow = function() {\n return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1);\n };\n this.getLastFullyVisibleRow = function() {\n var config = this.layerConfig;\n var lastRow = config.lastRow;\n var top = this.session.documentToScreenRow(lastRow, 0) * config.lineHeight;\n if (top - this.session.getScrollTop() > config.height - config.lineHeight)\n return lastRow - 1;\n return lastRow;\n };\n this.getLastVisibleRow = function() {\n return this.layerConfig.lastRow;\n };\n\n this.$padding = null;\n this.setPadding = function(padding) {\n this.$padding = padding;\n this.$textLayer.setPadding(padding);\n this.$cursorLayer.setPadding(padding);\n this.$markerFront.setPadding(padding);\n this.$markerBack.setPadding(padding);\n this.$loop.schedule(this.CHANGE_FULL);\n this.$updatePrintMargin();\n };\n \n this.setScrollMargin = function(top, bottom, left, right) {\n var sm = this.scrollMargin;\n sm.top = top|0;\n sm.bottom = bottom|0;\n sm.right = right|0;\n sm.left = left|0;\n sm.v = sm.top + sm.bottom;\n sm.h = sm.left + sm.right;\n if (sm.top && this.scrollTop <= 0 && this.session)\n this.session.setScrollTop(-sm.top);\n this.updateFull();\n };\n this.getHScrollBarAlwaysVisible = function() {\n return this.$hScrollBarAlwaysVisible;\n };\n this.setHScrollBarAlwaysVisible = function(alwaysVisible) {\n this.setOption(\"hScrollBarAlwaysVisible\", alwaysVisible);\n };\n this.getVScrollBarAlwaysVisible = function() {\n return this.$vScrollBarAlwaysVisible;\n };\n this.setVScrollBarAlwaysVisible = function(alwaysVisible) {\n this.setOption(\"vScrollBarAlwaysVisible\", alwaysVisible);\n };\n\n this.$updateScrollBarV = function() {\n var scrollHeight = this.layerConfig.maxHeight;\n var scrollerHeight = this.$size.scrollerHeight;\n if (!this.$maxLines && this.$scrollPastEnd) {\n scrollHeight -= (scrollerHeight - this.lineHeight) * this.$scrollPastEnd;\n if (this.scrollTop > scrollHeight - scrollerHeight) {\n scrollHeight = this.scrollTop + scrollerHeight;\n this.scrollBarV.scrollTop = null;\n }\n }\n this.scrollBarV.setScrollHeight(scrollHeight + this.scrollMargin.v);\n this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top);\n };\n this.$updateScrollBarH = function() {\n this.scrollBarH.setScrollWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h);\n this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left);\n };\n \n this.$frozen = false;\n this.freeze = function() {\n this.$frozen = true;\n };\n \n this.unfreeze = function() {\n this.$frozen = false;\n };\n\n this.$renderChanges = function(changes, force) {\n if (this.$changes) {\n changes |= this.$changes;\n this.$changes = 0;\n }\n if ((!this.session || !this.container.offsetWidth || this.$frozen) || (!changes && !force)) {\n this.$changes |= changes;\n return; \n } \n if (this.$size.$dirty) {\n this.$changes |= changes;\n return this.onResize(true);\n }\n if (!this.lineHeight) {\n this.$textLayer.checkForSizeChanges();\n }\n \n this._signal(\"beforeRender\");\n\n if (this.session && this.session.$bidiHandler)\n this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);\n\n var config = this.layerConfig;\n if (changes & this.CHANGE_FULL ||\n changes & this.CHANGE_SIZE ||\n changes & this.CHANGE_TEXT ||\n changes & this.CHANGE_LINES ||\n changes & this.CHANGE_SCROLL ||\n changes & this.CHANGE_H_SCROLL\n ) {\n changes |= this.$computeLayerConfig();\n if (config.firstRow != this.layerConfig.firstRow && config.firstRowScreen == this.layerConfig.firstRowScreen) {\n var st = this.scrollTop + (config.firstRow - this.layerConfig.firstRow) * this.lineHeight;\n if (st > 0) {\n this.scrollTop = st;\n changes = changes | this.CHANGE_SCROLL;\n changes |= this.$computeLayerConfig();\n }\n }\n config = this.layerConfig;\n this.$updateScrollBarV();\n if (changes & this.CHANGE_H_SCROLL)\n this.$updateScrollBarH();\n this.$gutterLayer.element.style.marginTop = (-config.offset) + \"px\";\n this.content.style.marginTop = (-config.offset) + \"px\";\n this.content.style.width = config.width + 2 * this.$padding + \"px\";\n this.content.style.height = config.minHeight + \"px\";\n }\n if (changes & this.CHANGE_H_SCROLL) {\n this.content.style.marginLeft = -this.scrollLeft + \"px\";\n this.scroller.className = this.scrollLeft <= 0 ? \"ace_scroller\" : \"ace_scroller ace_scroll-left\";\n }\n if (changes & this.CHANGE_FULL) {\n this.$textLayer.update(config);\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n this.$markerBack.update(config);\n this.$markerFront.update(config);\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n this.$highlightGutterLine && this.$updateGutterLineHighlight();\n this._signal(\"afterRender\");\n return;\n }\n if (changes & this.CHANGE_SCROLL) {\n if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES)\n this.$textLayer.update(config);\n else\n this.$textLayer.scrollLines(config);\n\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n this.$markerBack.update(config);\n this.$markerFront.update(config);\n this.$cursorLayer.update(config);\n this.$highlightGutterLine && this.$updateGutterLineHighlight();\n this.$moveTextAreaToCursor();\n this._signal(\"afterRender\");\n return;\n }\n\n if (changes & this.CHANGE_TEXT) {\n this.$textLayer.update(config);\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n }\n else if (changes & this.CHANGE_LINES) {\n if (this.$updateLines() || (changes & this.CHANGE_GUTTER) && this.$showGutter)\n this.$gutterLayer.update(config);\n }\n else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) {\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n }\n\n if (changes & this.CHANGE_CURSOR) {\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n this.$highlightGutterLine && this.$updateGutterLineHighlight();\n }\n\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) {\n this.$markerFront.update(config);\n }\n\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) {\n this.$markerBack.update(config);\n }\n\n this._signal(\"afterRender\");\n };\n\n \n this.$autosize = function() {\n var height = this.session.getScreenLength() * this.lineHeight;\n var maxHeight = this.$maxLines * this.lineHeight;\n var desiredHeight = Math.min(maxHeight,\n Math.max((this.$minLines || 1) * this.lineHeight, height)\n ) + this.scrollMargin.v + (this.$extraHeight || 0);\n if (this.$horizScroll)\n desiredHeight += this.scrollBarH.getHeight();\n if (this.$maxPixelHeight && desiredHeight > this.$maxPixelHeight)\n desiredHeight = this.$maxPixelHeight;\n var vScroll = height > maxHeight;\n \n if (desiredHeight != this.desiredHeight ||\n this.$size.height != this.desiredHeight || vScroll != this.$vScroll) {\n if (vScroll != this.$vScroll) {\n this.$vScroll = vScroll;\n this.scrollBarV.setVisible(vScroll);\n }\n \n var w = this.container.clientWidth;\n this.container.style.height = desiredHeight + \"px\";\n this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight);\n this.desiredHeight = desiredHeight;\n \n this._signal(\"autosize\");\n }\n };\n \n this.$computeLayerConfig = function() {\n var session = this.session;\n var size = this.$size;\n \n var hideScrollbars = size.height <= 2 * this.lineHeight;\n var screenLines = this.session.getScreenLength();\n var maxHeight = screenLines * this.lineHeight;\n\n var longestLine = this.$getLongestLine();\n \n var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible ||\n size.scrollerWidth - longestLine - 2 * this.$padding < 0);\n\n var hScrollChanged = this.$horizScroll !== horizScroll;\n if (hScrollChanged) {\n this.$horizScroll = horizScroll;\n this.scrollBarH.setVisible(horizScroll);\n }\n var vScrollBefore = this.$vScroll; // autosize can change vscroll value in which case we need to update longestLine\n if (this.$maxLines && this.lineHeight > 1)\n this.$autosize();\n\n var offset = this.scrollTop % this.lineHeight;\n var minHeight = size.scrollerHeight + this.lineHeight;\n \n var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd\n ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd\n : 0;\n maxHeight += scrollPastEnd;\n \n var sm = this.scrollMargin;\n this.session.setScrollTop(Math.max(-sm.top,\n Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom)));\n\n this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft, \n longestLine + 2 * this.$padding - size.scrollerWidth + sm.right)));\n \n var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible ||\n size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop > sm.top);\n var vScrollChanged = vScrollBefore !== vScroll;\n if (vScrollChanged) {\n this.$vScroll = vScroll;\n this.scrollBarV.setVisible(vScroll);\n }\n\n var lineCount = Math.ceil(minHeight / this.lineHeight) - 1;\n var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight));\n var lastRow = firstRow + lineCount;\n var firstRowScreen, firstRowHeight;\n var lineHeight = this.lineHeight;\n firstRow = session.screenToDocumentRow(firstRow, 0);\n var foldLine = session.getFoldLine(firstRow);\n if (foldLine) {\n firstRow = foldLine.start.row;\n }\n\n firstRowScreen = session.documentToScreenRow(firstRow, 0);\n firstRowHeight = session.getRowLength(firstRow) * lineHeight;\n\n lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1);\n minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight +\n firstRowHeight;\n\n offset = this.scrollTop - firstRowScreen * lineHeight;\n\n var changes = 0;\n if (this.layerConfig.width != longestLine) \n changes = this.CHANGE_H_SCROLL;\n if (hScrollChanged || vScrollChanged) {\n changes = this.$updateCachedSize(true, this.gutterWidth, size.width, size.height);\n this._signal(\"scrollbarVisibilityChanged\");\n if (vScrollChanged)\n longestLine = this.$getLongestLine();\n }\n \n this.layerConfig = {\n width : longestLine,\n padding : this.$padding,\n firstRow : firstRow,\n firstRowScreen: firstRowScreen,\n lastRow : lastRow,\n lineHeight : lineHeight,\n characterWidth : this.characterWidth,\n minHeight : minHeight,\n maxHeight : maxHeight,\n offset : offset,\n gutterOffset : lineHeight ? Math.max(0, Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight)) : 0,\n height : this.$size.scrollerHeight\n };\n\n return changes;\n };\n\n this.$updateLines = function() {\n if (!this.$changedLines) return;\n var firstRow = this.$changedLines.firstRow;\n var lastRow = this.$changedLines.lastRow;\n this.$changedLines = null;\n\n var layerConfig = this.layerConfig;\n\n if (firstRow > layerConfig.lastRow + 1) { return; }\n if (lastRow < layerConfig.firstRow) { return; }\n if (lastRow === Infinity) {\n if (this.$showGutter)\n this.$gutterLayer.update(layerConfig);\n this.$textLayer.update(layerConfig);\n return;\n }\n this.$textLayer.updateLines(layerConfig, firstRow, lastRow);\n return true;\n };\n\n this.$getLongestLine = function() {\n var charCount = this.session.getScreenWidth();\n if (this.showInvisibles && !this.session.$useWrapMode)\n charCount += 1;\n\n return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth));\n };\n this.updateFrontMarkers = function() {\n this.$markerFront.setMarkers(this.session.getMarkers(true));\n this.$loop.schedule(this.CHANGE_MARKER_FRONT);\n };\n this.updateBackMarkers = function() {\n this.$markerBack.setMarkers(this.session.getMarkers());\n this.$loop.schedule(this.CHANGE_MARKER_BACK);\n };\n this.addGutterDecoration = function(row, className){\n this.$gutterLayer.addGutterDecoration(row, className);\n };\n this.removeGutterDecoration = function(row, className){\n this.$gutterLayer.removeGutterDecoration(row, className);\n };\n this.updateBreakpoints = function(rows) {\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n this.setAnnotations = function(annotations) {\n this.$gutterLayer.setAnnotations(annotations);\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n this.updateCursor = function() {\n this.$loop.schedule(this.CHANGE_CURSOR);\n };\n this.hideCursor = function() {\n this.$cursorLayer.hideCursor();\n };\n this.showCursor = function() {\n this.$cursorLayer.showCursor();\n };\n\n this.scrollSelectionIntoView = function(anchor, lead, offset) {\n this.scrollCursorIntoView(anchor, offset);\n this.scrollCursorIntoView(lead, offset);\n };\n this.scrollCursorIntoView = function(cursor, offset, $viewMargin) {\n if (this.$size.scrollerHeight === 0)\n return;\n\n var pos = this.$cursorLayer.getPixelPosition(cursor);\n\n var left = pos.left;\n var top = pos.top;\n \n var topMargin = $viewMargin && $viewMargin.top || 0;\n var bottomMargin = $viewMargin && $viewMargin.bottom || 0;\n \n var scrollTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop;\n \n if (scrollTop + topMargin > top) {\n if (offset && scrollTop + topMargin > top + this.lineHeight)\n top -= offset * this.$size.scrollerHeight;\n if (top === 0)\n top = -this.scrollMargin.top;\n this.session.setScrollTop(top);\n } else if (scrollTop + this.$size.scrollerHeight - bottomMargin < top + this.lineHeight) {\n if (offset && scrollTop + this.$size.scrollerHeight - bottomMargin < top - this.lineHeight)\n top += offset * this.$size.scrollerHeight;\n this.session.setScrollTop(top + this.lineHeight - this.$size.scrollerHeight);\n }\n\n var scrollLeft = this.scrollLeft;\n\n if (scrollLeft > left) {\n if (left < this.$padding + 2 * this.layerConfig.characterWidth)\n left = -this.scrollMargin.left;\n this.session.setScrollLeft(left);\n } else if (scrollLeft + this.$size.scrollerWidth < left + this.characterWidth) {\n this.session.setScrollLeft(Math.round(left + this.characterWidth - this.$size.scrollerWidth));\n } else if (scrollLeft <= this.$padding && left - scrollLeft < this.characterWidth) {\n this.session.setScrollLeft(0);\n }\n };\n this.getScrollTop = function() {\n return this.session.getScrollTop();\n };\n this.getScrollLeft = function() {\n return this.session.getScrollLeft();\n };\n this.getScrollTopRow = function() {\n return this.scrollTop / this.lineHeight;\n };\n this.getScrollBottomRow = function() {\n return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1);\n };\n this.scrollToRow = function(row) {\n this.session.setScrollTop(row * this.lineHeight);\n };\n\n this.alignCursor = function(cursor, alignment) {\n if (typeof cursor == \"number\")\n cursor = {row: cursor, column: 0};\n\n var pos = this.$cursorLayer.getPixelPosition(cursor);\n var h = this.$size.scrollerHeight - this.lineHeight;\n var offset = pos.top - h * (alignment || 0);\n\n this.session.setScrollTop(offset);\n return offset;\n };\n\n this.STEPS = 8;\n this.$calcSteps = function(fromValue, toValue){\n var i = 0;\n var l = this.STEPS;\n var steps = [];\n\n var func = function(t, x_min, dx) {\n return dx * (Math.pow(t - 1, 3) + 1) + x_min;\n };\n\n for (i = 0; i < l; ++i)\n steps.push(func(i / this.STEPS, fromValue, toValue - fromValue));\n\n return steps;\n };\n this.scrollToLine = function(line, center, animate, callback) {\n var pos = this.$cursorLayer.getPixelPosition({row: line, column: 0});\n var offset = pos.top;\n if (center)\n offset -= this.$size.scrollerHeight / 2;\n\n var initialScroll = this.scrollTop;\n this.session.setScrollTop(offset);\n if (animate !== false)\n this.animateScrolling(initialScroll, callback);\n };\n\n this.animateScrolling = function(fromValue, callback) {\n var toValue = this.scrollTop;\n if (!this.$animatedScroll)\n return;\n var _self = this;\n \n if (fromValue == toValue)\n return;\n \n if (this.$scrollAnimation) {\n var oldSteps = this.$scrollAnimation.steps;\n if (oldSteps.length) {\n fromValue = oldSteps[0];\n if (fromValue == toValue)\n return;\n }\n }\n \n var steps = _self.$calcSteps(fromValue, toValue);\n this.$scrollAnimation = {from: fromValue, to: toValue, steps: steps};\n\n clearInterval(this.$timer);\n\n _self.session.setScrollTop(steps.shift());\n _self.session.$scrollTop = toValue;\n this.$timer = setInterval(function() {\n if (steps.length) {\n _self.session.setScrollTop(steps.shift());\n _self.session.$scrollTop = toValue;\n } else if (toValue != null) {\n _self.session.$scrollTop = -1;\n _self.session.setScrollTop(toValue);\n toValue = null;\n } else {\n _self.$timer = clearInterval(_self.$timer);\n _self.$scrollAnimation = null;\n callback && callback();\n }\n }, 10);\n };\n this.scrollToY = function(scrollTop) {\n if (this.scrollTop !== scrollTop) {\n this.$loop.schedule(this.CHANGE_SCROLL);\n this.scrollTop = scrollTop;\n }\n };\n this.scrollToX = function(scrollLeft) {\n if (this.scrollLeft !== scrollLeft)\n this.scrollLeft = scrollLeft;\n this.$loop.schedule(this.CHANGE_H_SCROLL);\n };\n this.scrollTo = function(x, y) {\n this.session.setScrollTop(y);\n this.session.setScrollLeft(y);\n };\n this.scrollBy = function(deltaX, deltaY) {\n deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY);\n deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX);\n };\n this.isScrollableBy = function(deltaX, deltaY) {\n if (deltaY < 0 && this.session.getScrollTop() >= 1 - this.scrollMargin.top)\n return true;\n if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight\n - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom)\n return true;\n if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left)\n return true;\n if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth\n - this.layerConfig.width < -1 + this.scrollMargin.right)\n return true;\n };\n\n this.pixelToScreenCoordinates = function(x, y) {\n var canvasPos = this.scroller.getBoundingClientRect();\n\n var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n var offset = offsetX / this.characterWidth;\n var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n var col = Math.round(offset);\n\n return {row: row, column: col, side: offset - col > 0 ? 1 : -1, offsetX: offsetX};\n };\n\n this.screenToTextCoordinates = function(x, y) {\n var canvasPos = this.scroller.getBoundingClientRect();\n var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n\n var col = Math.round(offsetX / this.characterWidth);\n\n var row = (y + this.scrollTop - canvasPos.top) / this.lineHeight;\n\n return this.session.screenToDocumentPosition(row, Math.max(col, 0), offsetX);\n };\n this.textToScreenCoordinates = function(row, column) {\n var canvasPos = this.scroller.getBoundingClientRect();\n var pos = this.session.documentToScreenPosition(row, column);\n\n var x = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, row)\n ? this.session.$bidiHandler.getPosLeft(pos.column)\n : Math.round(pos.column * this.characterWidth));\n\n var y = pos.row * this.lineHeight;\n\n return {\n pageX: canvasPos.left + x - this.scrollLeft,\n pageY: canvasPos.top + y - this.scrollTop\n };\n };\n this.visualizeFocus = function() {\n dom.addCssClass(this.container, \"ace_focus\");\n };\n this.visualizeBlur = function() {\n dom.removeCssClass(this.container, \"ace_focus\");\n };\n this.showComposition = function(position) {\n if (!this.$composition)\n this.$composition = {\n keepTextAreaAtCursor: this.$keepTextAreaAtCursor,\n cssText: this.textarea.style.cssText\n };\n\n this.$keepTextAreaAtCursor = true;\n dom.addCssClass(this.textarea, \"ace_composition\");\n this.textarea.style.cssText = \"\";\n this.$moveTextAreaToCursor();\n };\n this.setCompositionText = function(text) {\n this.$moveTextAreaToCursor();\n };\n this.hideComposition = function() {\n if (!this.$composition)\n return;\n\n dom.removeCssClass(this.textarea, \"ace_composition\");\n this.$keepTextAreaAtCursor = this.$composition.keepTextAreaAtCursor;\n this.textarea.style.cssText = this.$composition.cssText;\n this.$composition = null;\n };\n this.setTheme = function(theme, cb) {\n var _self = this;\n this.$themeId = theme;\n _self._dispatchEvent('themeChange',{theme:theme});\n\n if (!theme || typeof theme == \"string\") {\n var moduleName = theme || this.$options.theme.initialValue;\n config.loadModule([\"theme\", moduleName], afterLoad);\n } else {\n afterLoad(theme);\n }\n\n function afterLoad(module) {\n if (_self.$themeId != theme)\n return cb && cb();\n if (!module || !module.cssClass)\n throw new Error(\"couldn't load module \" + theme + \" or it didn't call define\");\n dom.importCssString(\n module.cssText,\n module.cssClass,\n _self.container.ownerDocument\n );\n\n if (_self.theme)\n dom.removeCssClass(_self.container, _self.theme.cssClass);\n\n var padding = \"padding\" in module ? module.padding \n : \"padding\" in (_self.theme || {}) ? 4 : _self.$padding;\n if (_self.$padding && padding != _self.$padding)\n _self.setPadding(padding);\n _self.$theme = module.cssClass;\n\n _self.theme = module;\n dom.addCssClass(_self.container, module.cssClass);\n dom.setCssClass(_self.container, \"ace_dark\", module.isDark);\n if (_self.$size) {\n _self.$size.width = 0;\n _self.$updateSizeAsync();\n }\n\n _self._dispatchEvent('themeLoaded', {theme:module});\n cb && cb();\n }\n };\n this.getTheme = function() {\n return this.$themeId;\n };\n this.setStyle = function(style, include) {\n dom.setCssClass(this.container, style, include !== false);\n };\n this.unsetStyle = function(style) {\n dom.removeCssClass(this.container, style);\n };\n \n this.setCursorStyle = function(style) {\n if (this.scroller.style.cursor != style)\n this.scroller.style.cursor = style;\n };\n this.setMouseCursor = function(cursorStyle) {\n this.scroller.style.cursor = cursorStyle;\n };\n this.destroy = function() {\n this.$textLayer.destroy();\n this.$cursorLayer.destroy();\n };\n\n}).call(VirtualRenderer.prototype);\n\n\nconfig.defineOptions(VirtualRenderer.prototype, \"renderer\", {\n animatedScroll: {initialValue: false},\n showInvisibles: {\n set: function(value) {\n if (this.$textLayer.setShowInvisibles(value))\n this.$loop.schedule(this.CHANGE_TEXT);\n },\n initialValue: false\n },\n showPrintMargin: {\n set: function() { this.$updatePrintMargin(); },\n initialValue: true\n },\n printMarginColumn: {\n set: function() { this.$updatePrintMargin(); },\n initialValue: 80\n },\n printMargin: {\n set: function(val) {\n if (typeof val == \"number\")\n this.$printMarginColumn = val;\n this.$showPrintMargin = !!val;\n this.$updatePrintMargin();\n },\n get: function() {\n return this.$showPrintMargin && this.$printMarginColumn; \n }\n },\n showGutter: {\n set: function(show){\n this.$gutter.style.display = show ? \"block\" : \"none\";\n this.$loop.schedule(this.CHANGE_FULL);\n this.onGutterResize();\n },\n initialValue: true\n },\n fadeFoldWidgets: {\n set: function(show) {\n dom.setCssClass(this.$gutter, \"ace_fade-fold-widgets\", show);\n },\n initialValue: false\n },\n showFoldWidgets: {\n set: function(show) {this.$gutterLayer.setShowFoldWidgets(show);},\n initialValue: true\n },\n showLineNumbers: {\n set: function(show) {\n this.$gutterLayer.setShowLineNumbers(show);\n this.$loop.schedule(this.CHANGE_GUTTER);\n },\n initialValue: true\n },\n displayIndentGuides: {\n set: function(show) {\n if (this.$textLayer.setDisplayIndentGuides(show))\n this.$loop.schedule(this.CHANGE_TEXT);\n },\n initialValue: true\n },\n highlightGutterLine: {\n set: function(shouldHighlight) {\n if (!this.$gutterLineHighlight) {\n this.$gutterLineHighlight = dom.createElement(\"div\");\n this.$gutterLineHighlight.className = \"ace_gutter-active-line\";\n this.$gutter.appendChild(this.$gutterLineHighlight);\n return;\n }\n\n this.$gutterLineHighlight.style.display = shouldHighlight ? \"\" : \"none\";\n if (this.$cursorLayer.$pixelPos)\n this.$updateGutterLineHighlight();\n },\n initialValue: false,\n value: true\n },\n hScrollBarAlwaysVisible: {\n set: function(val) {\n if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll)\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: false\n },\n vScrollBarAlwaysVisible: {\n set: function(val) {\n if (!this.$vScrollBarAlwaysVisible || !this.$vScroll)\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: false\n },\n fontSize: {\n set: function(size) {\n if (typeof size == \"number\")\n size = size + \"px\";\n this.container.style.fontSize = size;\n this.updateFontSize();\n },\n initialValue: 12\n },\n fontFamily: {\n set: function(name) {\n this.container.style.fontFamily = name;\n this.updateFontSize();\n }\n },\n maxLines: {\n set: function(val) {\n this.updateFull();\n }\n },\n minLines: {\n set: function(val) {\n this.updateFull();\n }\n },\n maxPixelHeight: {\n set: function(val) {\n this.updateFull();\n },\n initialValue: 0\n },\n scrollPastEnd: {\n set: function(val) {\n val = +val || 0;\n if (this.$scrollPastEnd == val)\n return;\n this.$scrollPastEnd = val;\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: 0,\n handlesSet: true\n },\n fixedWidthGutter: {\n set: function(val) {\n this.$gutterLayer.$fixedWidth = !!val;\n this.$loop.schedule(this.CHANGE_GUTTER);\n }\n },\n theme: {\n set: function(val) { this.setTheme(val); },\n get: function() { return this.$themeId || this.theme; },\n initialValue: \"./theme/textmate\",\n handlesSet: true\n }\n});\n\nexports.VirtualRenderer = VirtualRenderer;\n});\n\nace.define(\"ace/worker/worker_client\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/event_emitter\",\"ace/config\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../lib/oop\");\nvar net = acequire(\"../lib/net\");\nvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\nvar config = acequire(\"../config\");\n\nfunction $workerBlob(workerUrl, mod) {\n var script = mod.src;\"importScripts('\" + net.qualifyURL(workerUrl) + \"');\";\n try {\n return new Blob([script], {\"type\": \"application/javascript\"});\n } catch (e) { // Backwards-compatibility\n var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;\n var blobBuilder = new BlobBuilder();\n blobBuilder.append(script);\n return blobBuilder.getBlob(\"application/javascript\");\n }\n}\n\nfunction createWorker(workerUrl, mod) {\n var blob = $workerBlob(workerUrl, mod);\n var URL = window.URL || window.webkitURL;\n var blobURL = URL.createObjectURL(blob);\n return new Worker(blobURL);\n}\n\nvar WorkerClient = function(topLevelNamespaces, mod, classname, workerUrl, importScripts) {\n this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);\n this.changeListener = this.changeListener.bind(this);\n this.onMessage = this.onMessage.bind(this);\n if (acequire.nameToUrl && !acequire.toUrl)\n acequire.toUrl = acequire.nameToUrl;\n \n if (config.get(\"packaged\") || !acequire.toUrl) {\n workerUrl = workerUrl || config.moduleUrl(mod.id, \"worker\");\n } else {\n var normalizePath = this.$normalizePath;\n workerUrl = workerUrl || normalizePath(acequire.toUrl(\"ace/worker/worker.js\", null, \"_\"));\n\n var tlns = {};\n topLevelNamespaces.forEach(function(ns) {\n tlns[ns] = normalizePath(acequire.toUrl(ns, null, \"_\").replace(/(\\.js)?(\\?.*)?$/, \"\"));\n });\n }\n\n this.$worker = createWorker(workerUrl, mod);\n if (importScripts) {\n this.send(\"importScripts\", importScripts);\n }\n this.$worker.postMessage({\n init : true,\n tlns : tlns,\n module : mod.id,\n classname : classname\n });\n\n this.callbackId = 1;\n this.callbacks = {};\n\n this.$worker.onmessage = this.onMessage;\n};\n\n(function(){\n\n oop.implement(this, EventEmitter);\n\n this.onMessage = function(e) {\n var msg = e.data;\n switch (msg.type) {\n case \"event\":\n this._signal(msg.name, {data: msg.data});\n break;\n case \"call\":\n var callback = this.callbacks[msg.id];\n if (callback) {\n callback(msg.data);\n delete this.callbacks[msg.id];\n }\n break;\n case \"error\":\n this.reportError(msg.data);\n break;\n case \"log\":\n window.console && console.log && console.log.apply(console, msg.data);\n break;\n }\n };\n \n this.reportError = function(err) {\n window.console && console.error && console.error(err);\n };\n\n this.$normalizePath = function(path) {\n return net.qualifyURL(path);\n };\n\n this.terminate = function() {\n this._signal(\"terminate\", {});\n this.deltaQueue = null;\n this.$worker.terminate();\n this.$worker = null;\n if (this.$doc)\n this.$doc.off(\"change\", this.changeListener);\n this.$doc = null;\n };\n\n this.send = function(cmd, args) {\n this.$worker.postMessage({command: cmd, args: args});\n };\n\n this.call = function(cmd, args, callback) {\n if (callback) {\n var id = this.callbackId++;\n this.callbacks[id] = callback;\n args.push(id);\n }\n this.send(cmd, args);\n };\n\n this.emit = function(event, data) {\n try {\n this.$worker.postMessage({event: event, data: {data: data.data}});\n }\n catch(ex) {\n console.error(ex.stack);\n }\n };\n\n this.attachToDocument = function(doc) {\n if (this.$doc)\n this.terminate();\n\n this.$doc = doc;\n this.call(\"setValue\", [doc.getValue()]);\n doc.on(\"change\", this.changeListener);\n };\n\n this.changeListener = function(delta) {\n if (!this.deltaQueue) {\n this.deltaQueue = [];\n setTimeout(this.$sendDeltaQueue, 0);\n }\n if (delta.action == \"insert\")\n this.deltaQueue.push(delta.start, delta.lines);\n else\n this.deltaQueue.push(delta.start, delta.end);\n };\n\n this.$sendDeltaQueue = function() {\n var q = this.deltaQueue;\n if (!q) return;\n this.deltaQueue = null;\n if (q.length > 50 && q.length > this.$doc.getLength() >> 1) {\n this.call(\"setValue\", [this.$doc.getValue()]);\n } else\n this.emit(\"change\", {data: q});\n };\n\n}).call(WorkerClient.prototype);\n\n\nvar UIWorkerClient = function(topLevelNamespaces, mod, classname) {\n this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);\n this.changeListener = this.changeListener.bind(this);\n this.callbackId = 1;\n this.callbacks = {};\n this.messageBuffer = [];\n\n var main = null;\n var emitSync = false;\n var sender = Object.create(EventEmitter);\n var _self = this;\n\n this.$worker = {};\n this.$worker.terminate = function() {};\n this.$worker.postMessage = function(e) {\n _self.messageBuffer.push(e);\n if (main) {\n if (emitSync)\n setTimeout(processNext);\n else\n processNext();\n }\n };\n this.setEmitSync = function(val) { emitSync = val; };\n\n var processNext = function() {\n var msg = _self.messageBuffer.shift();\n if (msg.command)\n main[msg.command].apply(main, msg.args);\n else if (msg.event)\n sender._signal(msg.event, msg.data);\n };\n\n sender.postMessage = function(msg) {\n _self.onMessage({data: msg});\n };\n sender.callback = function(data, callbackId) {\n this.postMessage({type: \"call\", id: callbackId, data: data});\n };\n sender.emit = function(name, data) {\n this.postMessage({type: \"event\", name: name, data: data});\n };\n\n config.loadModule([\"worker\", mod], function(Main) {\n main = new Main[classname](sender);\n while (_self.messageBuffer.length)\n processNext();\n });\n};\n\nUIWorkerClient.prototype = WorkerClient.prototype;\n\nexports.UIWorkerClient = UIWorkerClient;\nexports.WorkerClient = WorkerClient;\nexports.createWorker = createWorker;\n\n\n});\n\nace.define(\"ace/placeholder\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/oop\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Range = acequire(\"./range\").Range;\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\nvar oop = acequire(\"./lib/oop\");\n\nvar PlaceHolder = function(session, length, pos, others, mainClass, othersClass) {\n var _self = this;\n this.length = length;\n this.session = session;\n this.doc = session.getDocument();\n this.mainClass = mainClass;\n this.othersClass = othersClass;\n this.$onUpdate = this.onUpdate.bind(this);\n this.doc.on(\"change\", this.$onUpdate);\n this.$others = others;\n \n this.$onCursorChange = function() {\n setTimeout(function() {\n _self.onCursorChange();\n });\n };\n \n this.$pos = pos;\n var undoStack = session.getUndoManager().$undoStack || session.getUndoManager().$undostack || {length: -1};\n this.$undoStackDepth = undoStack.length;\n this.setup();\n\n session.selection.on(\"changeCursor\", this.$onCursorChange);\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.setup = function() {\n var _self = this;\n var doc = this.doc;\n var session = this.session;\n \n this.selectionBefore = session.selection.toJSON();\n if (session.selection.inMultiSelectMode)\n session.selection.toSingleRange();\n\n this.pos = doc.createAnchor(this.$pos.row, this.$pos.column);\n var pos = this.pos;\n pos.$insertRight = true;\n pos.detach();\n pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false);\n this.others = [];\n this.$others.forEach(function(other) {\n var anchor = doc.createAnchor(other.row, other.column);\n anchor.$insertRight = true;\n anchor.detach();\n _self.others.push(anchor);\n });\n session.setUndoSelect(false);\n };\n this.showOtherMarkers = function() {\n if (this.othersActive) return;\n var session = this.session;\n var _self = this;\n this.othersActive = true;\n this.others.forEach(function(anchor) {\n anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column+_self.length), _self.othersClass, null, false);\n });\n };\n this.hideOtherMarkers = function() {\n if (!this.othersActive) return;\n this.othersActive = false;\n for (var i = 0; i < this.others.length; i++) {\n this.session.removeMarker(this.others[i].markerId);\n }\n };\n this.onUpdate = function(delta) {\n if (this.$updating)\n return this.updateAnchors(delta);\n \n var range = delta;\n if (range.start.row !== range.end.row) return;\n if (range.start.row !== this.pos.row) return;\n this.$updating = true;\n var lengthDiff = delta.action === \"insert\" ? range.end.column - range.start.column : range.start.column - range.end.column;\n var inMainRange = range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1;\n var distanceFromStart = range.start.column - this.pos.column;\n \n this.updateAnchors(delta);\n \n if (inMainRange)\n this.length += lengthDiff;\n\n if (inMainRange && !this.session.$fromUndo) {\n if (delta.action === 'insert') {\n for (var i = this.others.length - 1; i >= 0; i--) {\n var otherPos = this.others[i];\n var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart};\n this.doc.insertMergedLines(newPos, delta.lines);\n }\n } else if (delta.action === 'remove') {\n for (var i = this.others.length - 1; i >= 0; i--) {\n var otherPos = this.others[i];\n var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart};\n this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff));\n }\n }\n }\n \n this.$updating = false;\n this.updateMarkers();\n };\n \n this.updateAnchors = function(delta) {\n this.pos.onChange(delta);\n for (var i = this.others.length; i--;)\n this.others[i].onChange(delta);\n this.updateMarkers();\n };\n \n this.updateMarkers = function() {\n if (this.$updating)\n return;\n var _self = this;\n var session = this.session;\n var updateMarker = function(pos, className) {\n session.removeMarker(pos.markerId);\n pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column+_self.length), className, null, false);\n };\n updateMarker(this.pos, this.mainClass);\n for (var i = this.others.length; i--;)\n updateMarker(this.others[i], this.othersClass);\n };\n\n this.onCursorChange = function(event) {\n if (this.$updating || !this.session) return;\n var pos = this.session.selection.getCursor();\n if (pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) {\n this.showOtherMarkers();\n this._emit(\"cursorEnter\", event);\n } else {\n this.hideOtherMarkers();\n this._emit(\"cursorLeave\", event);\n }\n }; \n this.detach = function() {\n this.session.removeMarker(this.pos && this.pos.markerId);\n this.hideOtherMarkers();\n this.doc.removeEventListener(\"change\", this.$onUpdate);\n this.session.selection.removeEventListener(\"changeCursor\", this.$onCursorChange);\n this.session.setUndoSelect(true);\n this.session = null;\n };\n this.cancel = function() {\n if (this.$undoStackDepth === -1)\n return;\n var undoManager = this.session.getUndoManager();\n var undosRequired = (undoManager.$undoStack || undoManager.$undostack).length - this.$undoStackDepth;\n for (var i = 0; i < undosRequired; i++) {\n undoManager.undo(true);\n }\n if (this.selectionBefore)\n this.session.selection.fromJSON(this.selectionBefore);\n };\n}).call(PlaceHolder.prototype);\n\n\nexports.PlaceHolder = PlaceHolder;\n});\n\nace.define(\"ace/mouse/multi_select_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(acequire, exports, module) {\n\nvar event = acequire(\"../lib/event\");\nvar useragent = acequire(\"../lib/useragent\");\nfunction isSamePoint(p1, p2) {\n return p1.row == p2.row && p1.column == p2.column;\n}\n\nfunction onMouseDown(e) {\n var ev = e.domEvent;\n var alt = ev.altKey;\n var shift = ev.shiftKey;\n var ctrl = ev.ctrlKey;\n var accel = e.getAccelKey();\n var button = e.getButton();\n \n if (ctrl && useragent.isMac)\n button = ev.button;\n\n if (e.editor.inMultiSelectMode && button == 2) {\n e.editor.textInput.onContextMenu(e.domEvent);\n return;\n }\n \n if (!ctrl && !alt && !accel) {\n if (button === 0 && e.editor.inMultiSelectMode)\n e.editor.exitMultiSelectMode();\n return;\n }\n \n if (button !== 0)\n return;\n\n var editor = e.editor;\n var selection = editor.selection;\n var isMultiSelect = editor.inMultiSelectMode;\n var pos = e.getDocumentPosition();\n var cursor = selection.getCursor();\n var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor));\n\n var mouseX = e.x, mouseY = e.y;\n var onMouseSelection = function(e) {\n mouseX = e.clientX;\n mouseY = e.clientY;\n };\n \n var session = editor.session;\n var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n var screenCursor = screenAnchor;\n \n var selectionMode;\n if (editor.$mouseHandler.$enableJumpToDef) {\n if (ctrl && alt || accel && alt)\n selectionMode = shift ? \"block\" : \"add\";\n else if (alt && editor.$blockSelectEnabled)\n selectionMode = \"block\";\n } else {\n if (accel && !alt) {\n selectionMode = \"add\";\n if (!isMultiSelect && shift)\n return;\n } else if (alt && editor.$blockSelectEnabled) {\n selectionMode = \"block\";\n }\n }\n \n if (selectionMode && useragent.isMac && ev.ctrlKey) {\n editor.$mouseHandler.cancelContextMenu();\n }\n\n if (selectionMode == \"add\") {\n if (!isMultiSelect && inSelection)\n return; // dragging\n\n if (!isMultiSelect) {\n var range = selection.toOrientedRange();\n editor.addSelectionMarker(range);\n }\n\n var oldRange = selection.rangeList.rangeAtPoint(pos);\n \n \n editor.$blockScrolling++;\n editor.inVirtualSelectionMode = true;\n \n if (shift) {\n oldRange = null;\n range = selection.ranges[0] || range;\n editor.removeSelectionMarker(range);\n }\n editor.once(\"mouseup\", function() {\n var tmpSel = selection.toOrientedRange();\n\n if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor))\n selection.substractPoint(tmpSel.cursor);\n else {\n if (shift) {\n selection.substractPoint(range.cursor);\n } else if (range) {\n editor.removeSelectionMarker(range);\n selection.addRange(range);\n }\n selection.addRange(tmpSel);\n }\n editor.$blockScrolling--;\n editor.inVirtualSelectionMode = false;\n });\n\n } else if (selectionMode == \"block\") {\n e.stop();\n editor.inVirtualSelectionMode = true; \n var initialRange;\n var rectSel = [];\n var blockSelect = function() {\n var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column, newCursor.offsetX);\n\n if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead))\n return;\n screenCursor = newCursor;\n \n editor.$blockScrolling++;\n editor.selection.moveToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n\n editor.removeSelectionMarkers(rectSel);\n rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor);\n if (editor.$mouseHandler.$clickSelection && rectSel.length == 1 && rectSel[0].isEmpty())\n rectSel[0] = editor.$mouseHandler.$clickSelection.clone();\n rectSel.forEach(editor.addSelectionMarker, editor);\n editor.updateSelectionMarkers();\n editor.$blockScrolling--;\n };\n editor.$blockScrolling++;\n if (isMultiSelect && !accel) {\n selection.toSingleRange();\n } else if (!isMultiSelect && accel) {\n initialRange = selection.toOrientedRange();\n editor.addSelectionMarker(initialRange);\n }\n \n if (shift)\n screenAnchor = session.documentToScreenPosition(selection.lead); \n else\n selection.moveToPosition(pos);\n editor.$blockScrolling--;\n \n screenCursor = {row: -1, column: -1};\n\n var onMouseSelectionEnd = function(e) {\n clearInterval(timerId);\n editor.removeSelectionMarkers(rectSel);\n if (!rectSel.length)\n rectSel = [selection.toOrientedRange()];\n editor.$blockScrolling++;\n if (initialRange) {\n editor.removeSelectionMarker(initialRange);\n selection.toSingleRange(initialRange);\n }\n for (var i = 0; i < rectSel.length; i++)\n selection.addRange(rectSel[i]);\n editor.inVirtualSelectionMode = false;\n editor.$mouseHandler.$clickSelection = null;\n editor.$blockScrolling--;\n };\n\n var onSelectionInterval = blockSelect;\n\n event.capture(editor.container, onMouseSelection, onMouseSelectionEnd);\n var timerId = setInterval(function() {onSelectionInterval();}, 20);\n\n return e.preventDefault();\n }\n}\n\n\nexports.onMouseDown = onMouseDown;\n\n});\n\nace.define(\"ace/commands/multi_select_commands\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\"], function(acequire, exports, module) {\nexports.defaultCommands = [{\n name: \"addCursorAbove\",\n exec: function(editor) { editor.selectMoreLines(-1); },\n bindKey: {win: \"Ctrl-Alt-Up\", mac: \"Ctrl-Alt-Up\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"addCursorBelow\",\n exec: function(editor) { editor.selectMoreLines(1); },\n bindKey: {win: \"Ctrl-Alt-Down\", mac: \"Ctrl-Alt-Down\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"addCursorAboveSkipCurrent\",\n exec: function(editor) { editor.selectMoreLines(-1, true); },\n bindKey: {win: \"Ctrl-Alt-Shift-Up\", mac: \"Ctrl-Alt-Shift-Up\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"addCursorBelowSkipCurrent\",\n exec: function(editor) { editor.selectMoreLines(1, true); },\n bindKey: {win: \"Ctrl-Alt-Shift-Down\", mac: \"Ctrl-Alt-Shift-Down\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectMoreBefore\",\n exec: function(editor) { editor.selectMore(-1); },\n bindKey: {win: \"Ctrl-Alt-Left\", mac: \"Ctrl-Alt-Left\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectMoreAfter\",\n exec: function(editor) { editor.selectMore(1); },\n bindKey: {win: \"Ctrl-Alt-Right\", mac: \"Ctrl-Alt-Right\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectNextBefore\",\n exec: function(editor) { editor.selectMore(-1, true); },\n bindKey: {win: \"Ctrl-Alt-Shift-Left\", mac: \"Ctrl-Alt-Shift-Left\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectNextAfter\",\n exec: function(editor) { editor.selectMore(1, true); },\n bindKey: {win: \"Ctrl-Alt-Shift-Right\", mac: \"Ctrl-Alt-Shift-Right\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"splitIntoLines\",\n exec: function(editor) { editor.multiSelect.splitIntoLines(); },\n bindKey: {win: \"Ctrl-Alt-L\", mac: \"Ctrl-Alt-L\"},\n readOnly: true\n}, {\n name: \"alignCursors\",\n exec: function(editor) { editor.alignCursors(); },\n bindKey: {win: \"Ctrl-Alt-A\", mac: \"Ctrl-Alt-A\"},\n scrollIntoView: \"cursor\"\n}, {\n name: \"findAll\",\n exec: function(editor) { editor.findAll(); },\n bindKey: {win: \"Ctrl-Alt-K\", mac: \"Ctrl-Alt-G\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}];\nexports.multiSelectCommands = [{\n name: \"singleSelection\",\n bindKey: \"esc\",\n exec: function(editor) { editor.exitMultiSelectMode(); },\n scrollIntoView: \"cursor\",\n readOnly: true,\n isAvailable: function(editor) {return editor && editor.inMultiSelectMode;}\n}];\n\nvar HashHandler = acequire(\"../keyboard/hash_handler\").HashHandler;\nexports.keyboardHandler = new HashHandler(exports.multiSelectCommands);\n\n});\n\nace.define(\"ace/multi_select\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/range\",\"ace/selection\",\"ace/mouse/multi_select_handler\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/commands/multi_select_commands\",\"ace/search\",\"ace/edit_session\",\"ace/editor\",\"ace/config\"], function(acequire, exports, module) {\n\nvar RangeList = acequire(\"./range_list\").RangeList;\nvar Range = acequire(\"./range\").Range;\nvar Selection = acequire(\"./selection\").Selection;\nvar onMouseDown = acequire(\"./mouse/multi_select_handler\").onMouseDown;\nvar event = acequire(\"./lib/event\");\nvar lang = acequire(\"./lib/lang\");\nvar commands = acequire(\"./commands/multi_select_commands\");\nexports.commands = commands.defaultCommands.concat(commands.multiSelectCommands);\nvar Search = acequire(\"./search\").Search;\nvar search = new Search();\n\nfunction find(session, needle, dir) {\n search.$options.wrap = true;\n search.$options.needle = needle;\n search.$options.backwards = dir == -1;\n return search.find(session);\n}\nvar EditSession = acequire(\"./edit_session\").EditSession;\n(function() {\n this.getSelectionMarkers = function() {\n return this.$selectionMarkers;\n };\n}).call(EditSession.prototype);\n(function() {\n this.ranges = null;\n this.rangeList = null;\n this.addRange = function(range, $blockChangeEvents) {\n if (!range)\n return;\n\n if (!this.inMultiSelectMode && this.rangeCount === 0) {\n var oldRange = this.toOrientedRange();\n this.rangeList.add(oldRange);\n this.rangeList.add(range);\n if (this.rangeList.ranges.length != 2) {\n this.rangeList.removeAll();\n return $blockChangeEvents || this.fromOrientedRange(range);\n }\n this.rangeList.removeAll();\n this.rangeList.add(oldRange);\n this.$onAddRange(oldRange);\n }\n\n if (!range.cursor)\n range.cursor = range.end;\n\n var removed = this.rangeList.add(range);\n\n this.$onAddRange(range);\n\n if (removed.length)\n this.$onRemoveRange(removed);\n\n if (this.rangeCount > 1 && !this.inMultiSelectMode) {\n this._signal(\"multiSelect\");\n this.inMultiSelectMode = true;\n this.session.$undoSelect = false;\n this.rangeList.attach(this.session);\n }\n\n return $blockChangeEvents || this.fromOrientedRange(range);\n };\n\n this.toSingleRange = function(range) {\n range = range || this.ranges[0];\n var removed = this.rangeList.removeAll();\n if (removed.length)\n this.$onRemoveRange(removed);\n\n range && this.fromOrientedRange(range);\n };\n this.substractPoint = function(pos) {\n var removed = this.rangeList.substractPoint(pos);\n if (removed) {\n this.$onRemoveRange(removed);\n return removed[0];\n }\n };\n this.mergeOverlappingRanges = function() {\n var removed = this.rangeList.merge();\n if (removed.length)\n this.$onRemoveRange(removed);\n else if(this.ranges[0])\n this.fromOrientedRange(this.ranges[0]);\n };\n\n this.$onAddRange = function(range) {\n this.rangeCount = this.rangeList.ranges.length;\n this.ranges.unshift(range);\n this._signal(\"addRange\", {range: range});\n };\n\n this.$onRemoveRange = function(removed) {\n this.rangeCount = this.rangeList.ranges.length;\n if (this.rangeCount == 1 && this.inMultiSelectMode) {\n var lastRange = this.rangeList.ranges.pop();\n removed.push(lastRange);\n this.rangeCount = 0;\n }\n\n for (var i = removed.length; i--; ) {\n var index = this.ranges.indexOf(removed[i]);\n this.ranges.splice(index, 1);\n }\n\n this._signal(\"removeRange\", {ranges: removed});\n\n if (this.rangeCount === 0 && this.inMultiSelectMode) {\n this.inMultiSelectMode = false;\n this._signal(\"singleSelect\");\n this.session.$undoSelect = true;\n this.rangeList.detach(this.session);\n }\n\n lastRange = lastRange || this.ranges[0];\n if (lastRange && !lastRange.isEqual(this.getRange()))\n this.fromOrientedRange(lastRange);\n };\n this.$initRangeList = function() {\n if (this.rangeList)\n return;\n\n this.rangeList = new RangeList();\n this.ranges = [];\n this.rangeCount = 0;\n };\n this.getAllRanges = function() {\n return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()];\n };\n\n this.splitIntoLines = function () {\n if (this.rangeCount > 1) {\n var ranges = this.rangeList.ranges;\n var lastRange = ranges[ranges.length - 1];\n var range = Range.fromPoints(ranges[0].start, lastRange.end);\n\n this.toSingleRange();\n this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n } else {\n var range = this.getRange();\n var isBackwards = this.isBackwards();\n var startRow = range.start.row;\n var endRow = range.end.row;\n if (startRow == endRow) {\n if (isBackwards)\n var start = range.end, end = range.start;\n else\n var start = range.start, end = range.end;\n \n this.addRange(Range.fromPoints(end, end));\n this.addRange(Range.fromPoints(start, start));\n return;\n }\n\n var rectSel = [];\n var r = this.getLineRange(startRow, true);\n r.start.column = range.start.column;\n rectSel.push(r);\n\n for (var i = startRow + 1; i < endRow; i++)\n rectSel.push(this.getLineRange(i, true));\n\n r = this.getLineRange(endRow, true);\n r.end.column = range.end.column;\n rectSel.push(r);\n\n rectSel.forEach(this.addRange, this);\n }\n };\n this.toggleBlockSelection = function () {\n if (this.rangeCount > 1) {\n var ranges = this.rangeList.ranges;\n var lastRange = ranges[ranges.length - 1];\n var range = Range.fromPoints(ranges[0].start, lastRange.end);\n\n this.toSingleRange();\n this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n } else {\n var cursor = this.session.documentToScreenPosition(this.selectionLead);\n var anchor = this.session.documentToScreenPosition(this.selectionAnchor);\n\n var rectSel = this.rectangularRangeBlock(cursor, anchor);\n rectSel.forEach(this.addRange, this);\n }\n };\n this.rectangularRangeBlock = function(screenCursor, screenAnchor, includeEmptyLines) {\n var rectSel = [];\n\n var xBackwards = screenCursor.column < screenAnchor.column;\n if (xBackwards) {\n var startColumn = screenCursor.column;\n var endColumn = screenAnchor.column;\n var startOffsetX = screenCursor.offsetX;\n var endOffsetX = screenAnchor.offsetX;\n } else {\n var startColumn = screenAnchor.column;\n var endColumn = screenCursor.column;\n var startOffsetX = screenAnchor.offsetX;\n var endOffsetX = screenCursor.offsetX;\n }\n\n var yBackwards = screenCursor.row < screenAnchor.row;\n if (yBackwards) {\n var startRow = screenCursor.row;\n var endRow = screenAnchor.row;\n } else {\n var startRow = screenAnchor.row;\n var endRow = screenCursor.row;\n }\n\n if (startColumn < 0)\n startColumn = 0;\n if (startRow < 0)\n startRow = 0;\n\n if (startRow == endRow)\n includeEmptyLines = true;\n\n for (var row = startRow; row <= endRow; row++) {\n var range = Range.fromPoints(\n this.session.screenToDocumentPosition(row, startColumn, startOffsetX),\n this.session.screenToDocumentPosition(row, endColumn, endOffsetX)\n );\n if (range.isEmpty()) {\n if (docEnd && isSamePoint(range.end, docEnd))\n break;\n var docEnd = range.end;\n }\n range.cursor = xBackwards ? range.start : range.end;\n rectSel.push(range);\n }\n\n if (yBackwards)\n rectSel.reverse();\n\n if (!includeEmptyLines) {\n var end = rectSel.length - 1;\n while (rectSel[end].isEmpty() && end > 0)\n end--;\n if (end > 0) {\n var start = 0;\n while (rectSel[start].isEmpty())\n start++;\n }\n for (var i = end; i >= start; i--) {\n if (rectSel[i].isEmpty())\n rectSel.splice(i, 1);\n }\n }\n\n return rectSel;\n };\n}).call(Selection.prototype);\nvar Editor = acequire(\"./editor\").Editor;\n(function() {\n this.updateSelectionMarkers = function() {\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.addSelectionMarker = function(orientedRange) {\n if (!orientedRange.cursor)\n orientedRange.cursor = orientedRange.end;\n\n var style = this.getSelectionStyle();\n orientedRange.marker = this.session.addMarker(orientedRange, \"ace_selection\", style);\n\n this.session.$selectionMarkers.push(orientedRange);\n this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n return orientedRange;\n };\n this.removeSelectionMarker = function(range) {\n if (!range.marker)\n return;\n this.session.removeMarker(range.marker);\n var index = this.session.$selectionMarkers.indexOf(range);\n if (index != -1)\n this.session.$selectionMarkers.splice(index, 1);\n this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n };\n\n this.removeSelectionMarkers = function(ranges) {\n var markerList = this.session.$selectionMarkers;\n for (var i = ranges.length; i--; ) {\n var range = ranges[i];\n if (!range.marker)\n continue;\n this.session.removeMarker(range.marker);\n var index = markerList.indexOf(range);\n if (index != -1)\n markerList.splice(index, 1);\n }\n this.session.selectionMarkerCount = markerList.length;\n };\n\n this.$onAddRange = function(e) {\n this.addSelectionMarker(e.range);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n\n this.$onRemoveRange = function(e) {\n this.removeSelectionMarkers(e.ranges);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n\n this.$onMultiSelect = function(e) {\n if (this.inMultiSelectMode)\n return;\n this.inMultiSelectMode = true;\n\n this.setStyle(\"ace_multiselect\");\n this.keyBinding.addKeyboardHandler(commands.keyboardHandler);\n this.commands.setDefaultHandler(\"exec\", this.$onMultiSelectExec);\n\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n\n this.$onSingleSelect = function(e) {\n if (this.session.multiSelect.inVirtualMode)\n return;\n this.inMultiSelectMode = false;\n\n this.unsetStyle(\"ace_multiselect\");\n this.keyBinding.removeKeyboardHandler(commands.keyboardHandler);\n\n this.commands.removeDefaultHandler(\"exec\", this.$onMultiSelectExec);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n this._emit(\"changeSelection\");\n };\n\n this.$onMultiSelectExec = function(e) {\n var command = e.command;\n var editor = e.editor;\n if (!editor.multiSelect)\n return;\n if (!command.multiSelectAction) {\n var result = command.exec(editor, e.args || {});\n editor.multiSelect.addRange(editor.multiSelect.toOrientedRange());\n editor.multiSelect.mergeOverlappingRanges();\n } else if (command.multiSelectAction == \"forEach\") {\n result = editor.forEachSelection(command, e.args);\n } else if (command.multiSelectAction == \"forEachLine\") {\n result = editor.forEachSelection(command, e.args, true);\n } else if (command.multiSelectAction == \"single\") {\n editor.exitMultiSelectMode();\n result = command.exec(editor, e.args || {});\n } else {\n result = command.multiSelectAction(editor, e.args || {});\n }\n return result;\n }; \n this.forEachSelection = function(cmd, args, options) {\n if (this.inVirtualSelectionMode)\n return;\n var keepOrder = options && options.keepOrder;\n var $byLines = options == true || options && options.$byLines;\n var session = this.session;\n var selection = this.selection;\n var rangeList = selection.rangeList;\n var ranges = (keepOrder ? selection : rangeList).ranges;\n var result;\n \n if (!ranges.length)\n return cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n \n var reg = selection._eventRegistry;\n selection._eventRegistry = {};\n\n var tmpSel = new Selection(session);\n this.inVirtualSelectionMode = true;\n for (var i = ranges.length; i--;) {\n if ($byLines) {\n while (i > 0 && ranges[i].start.row == ranges[i - 1].end.row)\n i--;\n }\n tmpSel.fromOrientedRange(ranges[i]);\n tmpSel.index = i;\n this.selection = session.selection = tmpSel;\n var cmdResult = cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n if (!result && cmdResult !== undefined)\n result = cmdResult;\n tmpSel.toOrientedRange(ranges[i]);\n }\n tmpSel.detach();\n\n this.selection = session.selection = selection;\n this.inVirtualSelectionMode = false;\n selection._eventRegistry = reg;\n selection.mergeOverlappingRanges();\n \n var anim = this.renderer.$scrollAnimation;\n this.onCursorChange();\n this.onSelectionChange();\n if (anim && anim.from == anim.to)\n this.renderer.animateScrolling(anim.from);\n \n return result;\n };\n this.exitMultiSelectMode = function() {\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode)\n return;\n this.multiSelect.toSingleRange();\n };\n\n this.getSelectedText = function() {\n var text = \"\";\n if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n var ranges = this.multiSelect.rangeList.ranges;\n var buf = [];\n for (var i = 0; i < ranges.length; i++) {\n buf.push(this.session.getTextRange(ranges[i]));\n }\n var nl = this.session.getDocument().getNewLineCharacter();\n text = buf.join(nl);\n if (text.length == (buf.length - 1) * nl.length)\n text = \"\";\n } else if (!this.selection.isEmpty()) {\n text = this.session.getTextRange(this.getSelectionRange());\n }\n return text;\n };\n \n this.$checkMultiselectChange = function(e, anchor) {\n if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n var range = this.multiSelect.ranges[0];\n if (this.multiSelect.isEmpty() && anchor == this.multiSelect.anchor)\n return;\n var pos = anchor == this.multiSelect.anchor\n ? range.cursor == range.start ? range.end : range.start\n : range.cursor;\n if (pos.row != anchor.row \n || this.session.$clipPositionToDocument(pos.row, pos.column).column != anchor.column)\n this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange());\n }\n };\n this.findAll = function(needle, options, additive) {\n options = options || {};\n options.needle = needle || options.needle;\n if (options.needle == undefined) {\n var range = this.selection.isEmpty()\n ? this.selection.getWordRange()\n : this.selection.getRange();\n options.needle = this.session.getTextRange(range);\n } \n this.$search.set(options);\n \n var ranges = this.$search.findAll(this.session);\n if (!ranges.length)\n return 0;\n\n this.$blockScrolling += 1;\n var selection = this.multiSelect;\n\n if (!additive)\n selection.toSingleRange(ranges[0]);\n\n for (var i = ranges.length; i--; )\n selection.addRange(ranges[i], true);\n if (range && selection.rangeList.rangeAtPoint(range.start))\n selection.addRange(range, true);\n \n this.$blockScrolling -= 1;\n\n return ranges.length;\n };\n this.selectMoreLines = function(dir, skip) {\n var range = this.selection.toOrientedRange();\n var isBackwards = range.cursor == range.end;\n\n var screenLead = this.session.documentToScreenPosition(range.cursor);\n if (this.selection.$desiredColumn)\n screenLead.column = this.selection.$desiredColumn;\n\n var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column);\n\n if (!range.isEmpty()) {\n var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start);\n var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column);\n } else {\n var anchor = lead;\n }\n\n if (isBackwards) {\n var newRange = Range.fromPoints(lead, anchor);\n newRange.cursor = newRange.start;\n } else {\n var newRange = Range.fromPoints(anchor, lead);\n newRange.cursor = newRange.end;\n }\n\n newRange.desiredColumn = screenLead.column;\n if (!this.selection.inMultiSelectMode) {\n this.selection.addRange(range);\n } else {\n if (skip)\n var toRemove = range.cursor;\n }\n\n this.selection.addRange(newRange);\n if (toRemove)\n this.selection.substractPoint(toRemove);\n };\n this.transposeSelections = function(dir) {\n var session = this.session;\n var sel = session.multiSelect;\n var all = sel.ranges;\n\n for (var i = all.length; i--; ) {\n var range = all[i];\n if (range.isEmpty()) {\n var tmp = session.getWordRange(range.start.row, range.start.column);\n range.start.row = tmp.start.row;\n range.start.column = tmp.start.column;\n range.end.row = tmp.end.row;\n range.end.column = tmp.end.column;\n }\n }\n sel.mergeOverlappingRanges();\n\n var words = [];\n for (var i = all.length; i--; ) {\n var range = all[i];\n words.unshift(session.getTextRange(range));\n }\n\n if (dir < 0)\n words.unshift(words.pop());\n else\n words.push(words.shift());\n\n for (var i = all.length; i--; ) {\n var range = all[i];\n var tmp = range.clone();\n session.replace(range, words[i]);\n range.start.row = tmp.start.row;\n range.start.column = tmp.start.column;\n }\n };\n this.selectMore = function(dir, skip, stopAtFirst) {\n var session = this.session;\n var sel = session.multiSelect;\n\n var range = sel.toOrientedRange();\n if (range.isEmpty()) {\n range = session.getWordRange(range.start.row, range.start.column);\n range.cursor = dir == -1 ? range.start : range.end;\n this.multiSelect.addRange(range);\n if (stopAtFirst)\n return;\n }\n var needle = session.getTextRange(range);\n\n var newRange = find(session, needle, dir);\n if (newRange) {\n newRange.cursor = dir == -1 ? newRange.start : newRange.end;\n this.$blockScrolling += 1;\n this.session.unfold(newRange);\n this.multiSelect.addRange(newRange);\n this.$blockScrolling -= 1;\n this.renderer.scrollCursorIntoView(null, 0.5);\n }\n if (skip)\n this.multiSelect.substractPoint(range.cursor);\n };\n this.alignCursors = function() {\n var session = this.session;\n var sel = session.multiSelect;\n var ranges = sel.ranges;\n var row = -1;\n var sameRowRanges = ranges.filter(function(r) {\n if (r.cursor.row == row)\n return true;\n row = r.cursor.row;\n });\n \n if (!ranges.length || sameRowRanges.length == ranges.length - 1) {\n var range = this.selection.getRange();\n var fr = range.start.row, lr = range.end.row;\n var guessRange = fr == lr;\n if (guessRange) {\n var max = this.session.getLength();\n var line;\n do {\n line = this.session.getLine(lr);\n } while (/[=:]/.test(line) && ++lr < max);\n do {\n line = this.session.getLine(fr);\n } while (/[=:]/.test(line) && --fr > 0);\n \n if (fr < 0) fr = 0;\n if (lr >= max) lr = max - 1;\n }\n var lines = this.session.removeFullLines(fr, lr);\n lines = this.$reAlignText(lines, guessRange);\n this.session.insert({row: fr, column: 0}, lines.join(\"\\n\") + \"\\n\");\n if (!guessRange) {\n range.start.column = 0;\n range.end.column = lines[lines.length - 1].length;\n }\n this.selection.setRange(range);\n } else {\n sameRowRanges.forEach(function(r) {\n sel.substractPoint(r.cursor);\n });\n\n var maxCol = 0;\n var minSpace = Infinity;\n var spaceOffsets = ranges.map(function(r) {\n var p = r.cursor;\n var line = session.getLine(p.row);\n var spaceOffset = line.substr(p.column).search(/\\S/g);\n if (spaceOffset == -1)\n spaceOffset = 0;\n\n if (p.column > maxCol)\n maxCol = p.column;\n if (spaceOffset < minSpace)\n minSpace = spaceOffset;\n return spaceOffset;\n });\n ranges.forEach(function(r, i) {\n var p = r.cursor;\n var l = maxCol - p.column;\n var d = spaceOffsets[i] - minSpace;\n if (l > d)\n session.insert(p, lang.stringRepeat(\" \", l - d));\n else\n session.remove(new Range(p.row, p.column, p.row, p.column - l + d));\n\n r.start.column = r.end.column = maxCol;\n r.start.row = r.end.row = p.row;\n r.cursor = r.end;\n });\n sel.fromOrientedRange(ranges[0]);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n }\n };\n\n this.$reAlignText = function(lines, forceLeft) {\n var isLeftAligned = true, isRightAligned = true;\n var startW, textW, endW;\n\n return lines.map(function(line) {\n var m = line.match(/(\\s*)(.*?)(\\s*)([=:].*)/);\n if (!m)\n return [line];\n\n if (startW == null) {\n startW = m[1].length;\n textW = m[2].length;\n endW = m[3].length;\n return m;\n }\n\n if (startW + textW + endW != m[1].length + m[2].length + m[3].length)\n isRightAligned = false;\n if (startW != m[1].length)\n isLeftAligned = false;\n\n if (startW > m[1].length)\n startW = m[1].length;\n if (textW < m[2].length)\n textW = m[2].length;\n if (endW > m[3].length)\n endW = m[3].length;\n\n return m;\n }).map(forceLeft ? alignLeft :\n isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign);\n\n function spaces(n) {\n return lang.stringRepeat(\" \", n);\n }\n\n function alignLeft(m) {\n return !m[2] ? m[0] : spaces(startW) + m[2]\n + spaces(textW - m[2].length + endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n function alignRight(m) {\n return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2]\n + spaces(endW, \" \")\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n function unAlign(m) {\n return !m[2] ? m[0] : spaces(startW) + m[2]\n + spaces(endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n };\n}).call(Editor.prototype);\n\n\nfunction isSamePoint(p1, p2) {\n return p1.row == p2.row && p1.column == p2.column;\n}\nexports.onSessionChange = function(e) {\n var session = e.session;\n if (session && !session.multiSelect) {\n session.$selectionMarkers = [];\n session.selection.$initRangeList();\n session.multiSelect = session.selection;\n }\n this.multiSelect = session && session.multiSelect;\n\n var oldSession = e.oldSession;\n if (oldSession) {\n oldSession.multiSelect.off(\"addRange\", this.$onAddRange);\n oldSession.multiSelect.off(\"removeRange\", this.$onRemoveRange);\n oldSession.multiSelect.off(\"multiSelect\", this.$onMultiSelect);\n oldSession.multiSelect.off(\"singleSelect\", this.$onSingleSelect);\n oldSession.multiSelect.lead.off(\"change\", this.$checkMultiselectChange);\n oldSession.multiSelect.anchor.off(\"change\", this.$checkMultiselectChange);\n }\n\n if (session) {\n session.multiSelect.on(\"addRange\", this.$onAddRange);\n session.multiSelect.on(\"removeRange\", this.$onRemoveRange);\n session.multiSelect.on(\"multiSelect\", this.$onMultiSelect);\n session.multiSelect.on(\"singleSelect\", this.$onSingleSelect);\n session.multiSelect.lead.on(\"change\", this.$checkMultiselectChange);\n session.multiSelect.anchor.on(\"change\", this.$checkMultiselectChange);\n }\n\n if (session && this.inMultiSelectMode != session.selection.inMultiSelectMode) {\n if (session.selection.inMultiSelectMode)\n this.$onMultiSelect();\n else\n this.$onSingleSelect();\n }\n};\nfunction MultiSelect(editor) {\n if (editor.$multiselectOnSessionChange)\n return;\n editor.$onAddRange = editor.$onAddRange.bind(editor);\n editor.$onRemoveRange = editor.$onRemoveRange.bind(editor);\n editor.$onMultiSelect = editor.$onMultiSelect.bind(editor);\n editor.$onSingleSelect = editor.$onSingleSelect.bind(editor);\n editor.$multiselectOnSessionChange = exports.onSessionChange.bind(editor);\n editor.$checkMultiselectChange = editor.$checkMultiselectChange.bind(editor);\n\n editor.$multiselectOnSessionChange(editor);\n editor.on(\"changeSession\", editor.$multiselectOnSessionChange);\n\n editor.on(\"mousedown\", onMouseDown);\n editor.commands.addCommands(commands.defaultCommands);\n\n addAltCursorListeners(editor);\n}\n\nfunction addAltCursorListeners(editor){\n var el = editor.textInput.getElement();\n var altCursor = false;\n event.addListener(el, \"keydown\", function(e) {\n var altDown = e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey);\n if (editor.$blockSelectEnabled && altDown) {\n if (!altCursor) {\n editor.renderer.setMouseCursor(\"crosshair\");\n altCursor = true;\n }\n } else if (altCursor) {\n reset();\n }\n });\n\n event.addListener(el, \"keyup\", reset);\n event.addListener(el, \"blur\", reset);\n function reset(e) {\n if (altCursor) {\n editor.renderer.setMouseCursor(\"\");\n altCursor = false;\n }\n }\n}\n\nexports.MultiSelect = MultiSelect;\n\n\nacequire(\"./config\").defineOptions(Editor.prototype, \"editor\", {\n enableMultiselect: {\n set: function(val) {\n MultiSelect(this);\n if (val) {\n this.on(\"changeSession\", this.$multiselectOnSessionChange);\n this.on(\"mousedown\", onMouseDown);\n } else {\n this.off(\"changeSession\", this.$multiselectOnSessionChange);\n this.off(\"mousedown\", onMouseDown);\n }\n },\n value: true\n },\n enableBlockSelect: {\n set: function(val) {\n this.$blockSelectEnabled = val;\n },\n value: true\n }\n});\n\n\n\n});\n\nace.define(\"ace/mode/folding/fold_mode\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Range = acequire(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\n\n(function() {\n\n this.foldingStartMarker = null;\n this.foldingStopMarker = null;\n this.getFoldWidget = function(session, foldStyle, row) {\n var line = session.getLine(row);\n if (this.foldingStartMarker.test(line))\n return \"start\";\n if (foldStyle == \"markbeginend\"\n && this.foldingStopMarker\n && this.foldingStopMarker.test(line))\n return \"end\";\n return \"\";\n };\n\n this.getFoldWidgetRange = function(session, foldStyle, row) {\n return null;\n };\n\n this.indentationBlock = function(session, row, column) {\n var re = /\\S/;\n var line = session.getLine(row);\n var startLevel = line.search(re);\n if (startLevel == -1)\n return;\n\n var startColumn = column || line.length;\n var maxRow = session.getLength();\n var startRow = row;\n var endRow = row;\n\n while (++row < maxRow) {\n var level = session.getLine(row).search(re);\n\n if (level == -1)\n continue;\n\n if (level <= startLevel)\n break;\n\n endRow = row;\n }\n\n if (endRow > startRow) {\n var endColumn = session.getLine(endRow).length;\n return new Range(startRow, startColumn, endRow, endColumn);\n }\n };\n\n this.openingBracketBlock = function(session, bracket, row, column, typeRe) {\n var start = {row: row, column: column + 1};\n var end = session.$findClosingBracket(bracket, start, typeRe);\n if (!end)\n return;\n\n var fw = session.foldWidgets[end.row];\n if (fw == null)\n fw = session.getFoldWidget(end.row);\n\n if (fw == \"start\" && end.row > start.row) {\n end.row --;\n end.column = session.getLine(end.row).length;\n }\n return Range.fromPoints(start, end);\n };\n\n this.closingBracketBlock = function(session, bracket, row, column, typeRe) {\n var end = {row: row, column: column};\n var start = session.$findOpeningBracket(bracket, end);\n\n if (!start)\n return;\n\n start.column++;\n end.column--;\n\n return Range.fromPoints(start, end);\n };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(acequire, exports, module) {\n\"use strict\";\n\nexports.isDark = false;\nexports.cssClass = \"ace-tm\";\nexports.cssText = \".ace-tm .ace_gutter {\\\nbackground: #f0f0f0;\\\ncolor: #333;\\\n}\\\n.ace-tm .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8;\\\n}\\\n.ace-tm .ace_fold {\\\nbackground-color: #6B72E6;\\\n}\\\n.ace-tm {\\\nbackground-color: #FFFFFF;\\\ncolor: black;\\\n}\\\n.ace-tm .ace_cursor {\\\ncolor: black;\\\n}\\\n.ace-tm .ace_invisible {\\\ncolor: rgb(191, 191, 191);\\\n}\\\n.ace-tm .ace_storage,\\\n.ace-tm .ace_keyword {\\\ncolor: blue;\\\n}\\\n.ace-tm .ace_constant {\\\ncolor: rgb(197, 6, 11);\\\n}\\\n.ace-tm .ace_constant.ace_buildin {\\\ncolor: rgb(88, 72, 246);\\\n}\\\n.ace-tm .ace_constant.ace_language {\\\ncolor: rgb(88, 92, 246);\\\n}\\\n.ace-tm .ace_constant.ace_library {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-tm .ace_invalid {\\\nbackground-color: rgba(255, 0, 0, 0.1);\\\ncolor: red;\\\n}\\\n.ace-tm .ace_support.ace_function {\\\ncolor: rgb(60, 76, 114);\\\n}\\\n.ace-tm .ace_support.ace_constant {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-tm .ace_support.ace_type,\\\n.ace-tm .ace_support.ace_class {\\\ncolor: rgb(109, 121, 222);\\\n}\\\n.ace-tm .ace_keyword.ace_operator {\\\ncolor: rgb(104, 118, 135);\\\n}\\\n.ace-tm .ace_string {\\\ncolor: rgb(3, 106, 7);\\\n}\\\n.ace-tm .ace_comment {\\\ncolor: rgb(76, 136, 107);\\\n}\\\n.ace-tm .ace_comment.ace_doc {\\\ncolor: rgb(0, 102, 255);\\\n}\\\n.ace-tm .ace_comment.ace_doc.ace_tag {\\\ncolor: rgb(128, 159, 191);\\\n}\\\n.ace-tm .ace_constant.ace_numeric {\\\ncolor: rgb(0, 0, 205);\\\n}\\\n.ace-tm .ace_variable {\\\ncolor: rgb(49, 132, 149);\\\n}\\\n.ace-tm .ace_xml-pe {\\\ncolor: rgb(104, 104, 91);\\\n}\\\n.ace-tm .ace_entity.ace_name.ace_function {\\\ncolor: #0000A2;\\\n}\\\n.ace-tm .ace_heading {\\\ncolor: rgb(12, 7, 255);\\\n}\\\n.ace-tm .ace_list {\\\ncolor:rgb(185, 6, 144);\\\n}\\\n.ace-tm .ace_meta.ace_tag {\\\ncolor:rgb(0, 22, 142);\\\n}\\\n.ace-tm .ace_string.ace_regex {\\\ncolor: rgb(255, 0, 0)\\\n}\\\n.ace-tm .ace_marker-layer .ace_selection {\\\nbackground: rgb(181, 213, 255);\\\n}\\\n.ace-tm.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px white;\\\n}\\\n.ace-tm .ace_marker-layer .ace_step {\\\nbackground: rgb(252, 255, 0);\\\n}\\\n.ace-tm .ace_marker-layer .ace_stack {\\\nbackground: rgb(164, 229, 101);\\\n}\\\n.ace-tm .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgb(192, 192, 192);\\\n}\\\n.ace-tm .ace_marker-layer .ace_active-line {\\\nbackground: rgba(0, 0, 0, 0.07);\\\n}\\\n.ace-tm .ace_gutter-active-line {\\\nbackground-color : #dcdcdc;\\\n}\\\n.ace-tm .ace_marker-layer .ace_selected-word {\\\nbackground: rgb(250, 250, 255);\\\nborder: 1px solid rgb(200, 200, 250);\\\n}\\\n.ace-tm .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\\n}\\\n\";\n\nvar dom = acequire(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n\nace.define(\"ace/line_widgets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar dom = acequire(\"./lib/dom\");\nvar Range = acequire(\"./range\").Range;\n\n\nfunction LineWidgets(session) {\n this.session = session;\n this.session.widgetManager = this;\n this.session.getRowLength = this.getRowLength;\n this.session.$getWidgetScreenLength = this.$getWidgetScreenLength;\n this.updateOnChange = this.updateOnChange.bind(this);\n this.renderWidgets = this.renderWidgets.bind(this);\n this.measureWidgets = this.measureWidgets.bind(this);\n this.session._changedWidgets = [];\n this.$onChangeEditor = this.$onChangeEditor.bind(this);\n \n this.session.on(\"change\", this.updateOnChange);\n this.session.on(\"changeFold\", this.updateOnFold);\n this.session.on(\"changeEditor\", this.$onChangeEditor);\n}\n\n(function() {\n this.getRowLength = function(row) {\n var h;\n if (this.lineWidgets)\n h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n else \n h = 0;\n if (!this.$useWrapMode || !this.$wrapData[row]) {\n return 1 + h;\n } else {\n return this.$wrapData[row].length + 1 + h;\n }\n };\n\n this.$getWidgetScreenLength = function() {\n var screenRows = 0;\n this.lineWidgets.forEach(function(w){\n if (w && w.rowCount && !w.hidden)\n screenRows += w.rowCount;\n });\n return screenRows;\n }; \n \n this.$onChangeEditor = function(e) {\n this.attach(e.editor);\n };\n \n this.attach = function(editor) {\n if (editor && editor.widgetManager && editor.widgetManager != this)\n editor.widgetManager.detach();\n\n if (this.editor == editor)\n return;\n\n this.detach();\n this.editor = editor;\n \n if (editor) {\n editor.widgetManager = this;\n editor.renderer.on(\"beforeRender\", this.measureWidgets);\n editor.renderer.on(\"afterRender\", this.renderWidgets);\n }\n };\n this.detach = function(e) {\n var editor = this.editor;\n if (!editor)\n return;\n \n this.editor = null;\n editor.widgetManager = null;\n \n editor.renderer.off(\"beforeRender\", this.measureWidgets);\n editor.renderer.off(\"afterRender\", this.renderWidgets);\n var lineWidgets = this.session.lineWidgets;\n lineWidgets && lineWidgets.forEach(function(w) {\n if (w && w.el && w.el.parentNode) {\n w._inDocument = false;\n w.el.parentNode.removeChild(w.el);\n }\n });\n };\n\n this.updateOnFold = function(e, session) {\n var lineWidgets = session.lineWidgets;\n if (!lineWidgets || !e.action)\n return;\n var fold = e.data;\n var start = fold.start.row;\n var end = fold.end.row;\n var hide = e.action == \"add\";\n for (var i = start + 1; i < end; i++) {\n if (lineWidgets[i])\n lineWidgets[i].hidden = hide;\n }\n if (lineWidgets[end]) {\n if (hide) {\n if (!lineWidgets[start])\n lineWidgets[start] = lineWidgets[end];\n else\n lineWidgets[end].hidden = hide;\n } else {\n if (lineWidgets[start] == lineWidgets[end])\n lineWidgets[start] = undefined;\n lineWidgets[end].hidden = hide;\n }\n }\n };\n \n this.updateOnChange = function(delta) {\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets) return;\n \n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n\n if (len === 0) {\n } else if (delta.action == 'remove') {\n var removed = lineWidgets.splice(startRow + 1, len);\n removed.forEach(function(w) {\n w && this.removeLineWidget(w);\n }, this);\n this.$updateRows();\n } else {\n var args = new Array(len);\n args.unshift(startRow, 0);\n lineWidgets.splice.apply(lineWidgets, args);\n this.$updateRows();\n }\n };\n \n this.$updateRows = function() {\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets) return;\n var noWidgets = true;\n lineWidgets.forEach(function(w, i) {\n if (w) {\n noWidgets = false;\n w.row = i;\n while (w.$oldWidget) {\n w.$oldWidget.row = i;\n w = w.$oldWidget;\n }\n }\n });\n if (noWidgets)\n this.session.lineWidgets = null;\n };\n\n this.addLineWidget = function(w) {\n if (!this.session.lineWidgets)\n this.session.lineWidgets = new Array(this.session.getLength());\n \n var old = this.session.lineWidgets[w.row];\n if (old) {\n w.$oldWidget = old;\n if (old.el && old.el.parentNode) {\n old.el.parentNode.removeChild(old.el);\n old._inDocument = false;\n }\n }\n \n this.session.lineWidgets[w.row] = w;\n \n w.session = this.session;\n \n var renderer = this.editor.renderer;\n if (w.html && !w.el) {\n w.el = dom.createElement(\"div\");\n w.el.innerHTML = w.html;\n }\n if (w.el) {\n dom.addCssClass(w.el, \"ace_lineWidgetContainer\");\n w.el.style.position = \"absolute\";\n w.el.style.zIndex = 5;\n renderer.container.appendChild(w.el);\n w._inDocument = true;\n }\n \n if (!w.coverGutter) {\n w.el.style.zIndex = 3;\n }\n if (w.pixelHeight == null) {\n w.pixelHeight = w.el.offsetHeight;\n }\n if (w.rowCount == null) {\n w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight;\n }\n \n var fold = this.session.getFoldAt(w.row, 0);\n w.$fold = fold;\n if (fold) {\n var lineWidgets = this.session.lineWidgets;\n if (w.row == fold.end.row && !lineWidgets[fold.start.row])\n lineWidgets[fold.start.row] = w;\n else\n w.hidden = true;\n }\n \n this.session._emit(\"changeFold\", {data:{start:{row: w.row}}});\n \n this.$updateRows();\n this.renderWidgets(null, renderer);\n this.onWidgetChanged(w);\n return w;\n };\n \n this.removeLineWidget = function(w) {\n w._inDocument = false;\n w.session = null;\n if (w.el && w.el.parentNode)\n w.el.parentNode.removeChild(w.el);\n if (w.editor && w.editor.destroy) try {\n w.editor.destroy();\n } catch(e){}\n if (this.session.lineWidgets) {\n var w1 = this.session.lineWidgets[w.row];\n if (w1 == w) {\n this.session.lineWidgets[w.row] = w.$oldWidget;\n if (w.$oldWidget)\n this.onWidgetChanged(w.$oldWidget);\n } else {\n while (w1) {\n if (w1.$oldWidget == w) {\n w1.$oldWidget = w.$oldWidget;\n break;\n }\n w1 = w1.$oldWidget;\n }\n }\n }\n this.session._emit(\"changeFold\", {data:{start:{row: w.row}}});\n this.$updateRows();\n };\n \n this.getWidgetsAtRow = function(row) {\n var lineWidgets = this.session.lineWidgets;\n var w = lineWidgets && lineWidgets[row];\n var list = [];\n while (w) {\n list.push(w);\n w = w.$oldWidget;\n }\n return list;\n };\n \n this.onWidgetChanged = function(w) {\n this.session._changedWidgets.push(w);\n this.editor && this.editor.renderer.updateFull();\n };\n \n this.measureWidgets = function(e, renderer) {\n var changedWidgets = this.session._changedWidgets;\n var config = renderer.layerConfig;\n \n if (!changedWidgets || !changedWidgets.length) return;\n var min = Infinity;\n for (var i = 0; i < changedWidgets.length; i++) {\n var w = changedWidgets[i];\n if (!w || !w.el) continue;\n if (w.session != this.session) continue;\n if (!w._inDocument) {\n if (this.session.lineWidgets[w.row] != w)\n continue;\n w._inDocument = true;\n renderer.container.appendChild(w.el);\n }\n \n w.h = w.el.offsetHeight;\n \n if (!w.fixedWidth) {\n w.w = w.el.offsetWidth;\n w.screenWidth = Math.ceil(w.w / config.characterWidth);\n }\n \n var rowCount = w.h / config.lineHeight;\n if (w.coverLine) {\n rowCount -= this.session.getRowLineCount(w.row);\n if (rowCount < 0)\n rowCount = 0;\n }\n if (w.rowCount != rowCount) {\n w.rowCount = rowCount;\n if (w.row < min)\n min = w.row;\n }\n }\n if (min != Infinity) {\n this.session._emit(\"changeFold\", {data:{start:{row: min}}});\n this.session.lineWidgetWidth = null;\n }\n this.session._changedWidgets = [];\n };\n \n this.renderWidgets = function(e, renderer) {\n var config = renderer.layerConfig;\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets)\n return;\n var first = Math.min(this.firstRow, config.firstRow);\n var last = Math.max(this.lastRow, config.lastRow, lineWidgets.length);\n \n while (first > 0 && !lineWidgets[first])\n first--;\n \n this.firstRow = config.firstRow;\n this.lastRow = config.lastRow;\n\n renderer.$cursorLayer.config = config;\n for (var i = first; i <= last; i++) {\n var w = lineWidgets[i];\n if (!w || !w.el) continue;\n if (w.hidden) {\n w.el.style.top = -100 - (w.pixelHeight || 0) + \"px\";\n continue;\n }\n if (!w._inDocument) {\n w._inDocument = true;\n renderer.container.appendChild(w.el);\n }\n var top = renderer.$cursorLayer.getPixelPosition({row: i, column:0}, true).top;\n if (!w.coverLine)\n top += config.lineHeight * this.session.getRowLineCount(w.row);\n w.el.style.top = top - config.offset + \"px\";\n \n var left = w.coverGutter ? 0 : renderer.gutterWidth;\n if (!w.fixedWidth)\n left -= renderer.scrollLeft;\n w.el.style.left = left + \"px\";\n \n if (w.fullWidth && w.screenWidth) {\n w.el.style.minWidth = config.width + 2 * config.padding + \"px\";\n }\n \n if (w.fixedWidth) {\n w.el.style.right = renderer.scrollBar.getWidth() + \"px\";\n } else {\n w.el.style.right = \"\";\n }\n }\n };\n \n}).call(LineWidgets.prototype);\n\n\nexports.LineWidgets = LineWidgets;\n\n});\n\nace.define(\"ace/ext/error_marker\",[\"require\",\"exports\",\"module\",\"ace/line_widgets\",\"ace/lib/dom\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\nvar LineWidgets = acequire(\"../line_widgets\").LineWidgets;\nvar dom = acequire(\"../lib/dom\");\nvar Range = acequire(\"../range\").Range;\n\nfunction binarySearch(array, needle, comparator) {\n var first = 0;\n var last = array.length - 1;\n\n while (first <= last) {\n var mid = (first + last) >> 1;\n var c = comparator(needle, array[mid]);\n if (c > 0)\n first = mid + 1;\n else if (c < 0)\n last = mid - 1;\n else\n return mid;\n }\n return -(first + 1);\n}\n\nfunction findAnnotations(session, row, dir) {\n var annotations = session.getAnnotations().sort(Range.comparePoints);\n if (!annotations.length)\n return;\n \n var i = binarySearch(annotations, {row: row, column: -1}, Range.comparePoints);\n if (i < 0)\n i = -i - 1;\n \n if (i >= annotations.length)\n i = dir > 0 ? 0 : annotations.length - 1;\n else if (i === 0 && dir < 0)\n i = annotations.length - 1;\n \n var annotation = annotations[i];\n if (!annotation || !dir)\n return;\n\n if (annotation.row === row) {\n do {\n annotation = annotations[i += dir];\n } while (annotation && annotation.row === row);\n if (!annotation)\n return annotations.slice();\n }\n \n \n var matched = [];\n row = annotation.row;\n do {\n matched[dir < 0 ? \"unshift\" : \"push\"](annotation);\n annotation = annotations[i += dir];\n } while (annotation && annotation.row == row);\n return matched.length && matched;\n}\n\nexports.showErrorMarker = function(editor, dir) {\n var session = editor.session;\n if (!session.widgetManager) {\n session.widgetManager = new LineWidgets(session);\n session.widgetManager.attach(editor);\n }\n \n var pos = editor.getCursorPosition();\n var row = pos.row;\n var oldWidget = session.widgetManager.getWidgetsAtRow(row).filter(function(w) {\n return w.type == \"errorMarker\";\n })[0];\n if (oldWidget) {\n oldWidget.destroy();\n } else {\n row -= dir;\n }\n var annotations = findAnnotations(session, row, dir);\n var gutterAnno;\n if (annotations) {\n var annotation = annotations[0];\n pos.column = (annotation.pos && typeof annotation.column != \"number\"\n ? annotation.pos.sc\n : annotation.column) || 0;\n pos.row = annotation.row;\n gutterAnno = editor.renderer.$gutterLayer.$annotations[pos.row];\n } else if (oldWidget) {\n return;\n } else {\n gutterAnno = {\n text: [\"Looks good!\"],\n className: \"ace_ok\"\n };\n }\n editor.session.unfold(pos.row);\n editor.selection.moveToPosition(pos);\n \n var w = {\n row: pos.row, \n fixedWidth: true,\n coverGutter: true,\n el: dom.createElement(\"div\"),\n type: \"errorMarker\"\n };\n var el = w.el.appendChild(dom.createElement(\"div\"));\n var arrow = w.el.appendChild(dom.createElement(\"div\"));\n arrow.className = \"error_widget_arrow \" + gutterAnno.className;\n \n var left = editor.renderer.$cursorLayer\n .getPixelPosition(pos).left;\n arrow.style.left = left + editor.renderer.gutterWidth - 5 + \"px\";\n \n w.el.className = \"error_widget_wrapper\";\n el.className = \"error_widget \" + gutterAnno.className;\n el.innerHTML = gutterAnno.text.join(\"
\");\n \n el.appendChild(dom.createElement(\"div\"));\n \n var kb = function(_, hashId, keyString) {\n if (hashId === 0 && (keyString === \"esc\" || keyString === \"return\")) {\n w.destroy();\n return {command: \"null\"};\n }\n };\n \n w.destroy = function() {\n if (editor.$mouseHandler.isMousePressed)\n return;\n editor.keyBinding.removeKeyboardHandler(kb);\n session.widgetManager.removeLineWidget(w);\n editor.off(\"changeSelection\", w.destroy);\n editor.off(\"changeSession\", w.destroy);\n editor.off(\"mouseup\", w.destroy);\n editor.off(\"change\", w.destroy);\n };\n \n editor.keyBinding.addKeyboardHandler(kb);\n editor.on(\"changeSelection\", w.destroy);\n editor.on(\"changeSession\", w.destroy);\n editor.on(\"mouseup\", w.destroy);\n editor.on(\"change\", w.destroy);\n \n editor.session.widgetManager.addLineWidget(w);\n \n w.el.onmousedown = editor.focus.bind(editor);\n \n editor.renderer.scrollCursorIntoView(null, 0.5, {bottom: w.el.offsetHeight});\n};\n\n\ndom.importCssString(\"\\\n .error_widget_wrapper {\\\n background: inherit;\\\n color: inherit;\\\n border:none\\\n }\\\n .error_widget {\\\n border-top: solid 2px;\\\n border-bottom: solid 2px;\\\n margin: 5px 0;\\\n padding: 10px 40px;\\\n white-space: pre-wrap;\\\n }\\\n .error_widget.ace_error, .error_widget_arrow.ace_error{\\\n border-color: #ff5a5a\\\n }\\\n .error_widget.ace_warning, .error_widget_arrow.ace_warning{\\\n border-color: #F1D817\\\n }\\\n .error_widget.ace_info, .error_widget_arrow.ace_info{\\\n border-color: #5a5a5a\\\n }\\\n .error_widget.ace_ok, .error_widget_arrow.ace_ok{\\\n border-color: #5aaa5a\\\n }\\\n .error_widget_arrow {\\\n position: absolute;\\\n border: solid 5px;\\\n border-top-color: transparent!important;\\\n border-right-color: transparent!important;\\\n border-left-color: transparent!important;\\\n top: -5px;\\\n }\\\n\", \"\");\n\n});\n\nace.define(\"ace/ace\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/editor\",\"ace/edit_session\",\"ace/undomanager\",\"ace/virtual_renderer\",\"ace/worker/worker_client\",\"ace/keyboard/hash_handler\",\"ace/placeholder\",\"ace/multi_select\",\"ace/mode/folding/fold_mode\",\"ace/theme/textmate\",\"ace/ext/error_marker\",\"ace/config\"], function(acequire, exports, module) {\n\"use strict\";\n\nacequire(\"./lib/fixoldbrowsers\");\n\nvar dom = acequire(\"./lib/dom\");\nvar event = acequire(\"./lib/event\");\n\nvar Editor = acequire(\"./editor\").Editor;\nvar EditSession = acequire(\"./edit_session\").EditSession;\nvar UndoManager = acequire(\"./undomanager\").UndoManager;\nvar Renderer = acequire(\"./virtual_renderer\").VirtualRenderer;\nacequire(\"./worker/worker_client\");\nacequire(\"./keyboard/hash_handler\");\nacequire(\"./placeholder\");\nacequire(\"./multi_select\");\nacequire(\"./mode/folding/fold_mode\");\nacequire(\"./theme/textmate\");\nacequire(\"./ext/error_marker\");\n\nexports.config = acequire(\"./config\");\nexports.acequire = acequire;\n\nif (typeof define === \"function\")\n exports.define = define;\nexports.edit = function(el) {\n if (typeof el == \"string\") {\n var _id = el;\n el = document.getElementById(_id);\n if (!el)\n throw new Error(\"ace.edit can't find div #\" + _id);\n }\n\n if (el && el.env && el.env.editor instanceof Editor)\n return el.env.editor;\n\n var value = \"\";\n if (el && /input|textarea/i.test(el.tagName)) {\n var oldNode = el;\n value = oldNode.value;\n el = dom.createElement(\"pre\");\n oldNode.parentNode.replaceChild(el, oldNode);\n } else if (el) {\n value = dom.getInnerText(el);\n el.innerHTML = \"\";\n }\n\n var doc = exports.createEditSession(value);\n\n var editor = new Editor(new Renderer(el));\n editor.setSession(doc);\n\n var env = {\n document: doc,\n editor: editor,\n onResize: editor.resize.bind(editor, null)\n };\n if (oldNode) env.textarea = oldNode;\n event.addListener(window, \"resize\", env.onResize);\n editor.on(\"destroy\", function() {\n event.removeListener(window, \"resize\", env.onResize);\n env.editor.container.env = null; // prevent memory leak on old ie\n });\n editor.container.env = editor.env = env;\n return editor;\n};\nexports.createEditSession = function(text, mode) {\n var doc = new EditSession(text, mode);\n doc.setUndoManager(new UndoManager());\n return doc;\n};\nexports.EditSession = EditSession;\nexports.UndoManager = UndoManager;\nexports.version = \"1.2.9\";\n});\n (function() {\n ace.acequire([\"ace/ace\"], function(a) {\n if (a) {\n a.config.init(true);\n a.define = ace.define;\n }\n if (!window.ace)\n window.ace = a;\n for (var key in a) if (a.hasOwnProperty(key))\n window.ace[key] = a[key];\n });\n })();\n \nmodule.exports = window.ace.acequire(\"ace/ace\");","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"ores\"},[_c('h3',[_vm._v(\"Selected Ores:\")]),_vm._l((_vm.ore_names),function(ore){return _c('div',{key:ore},[_c('vui-button',{class:{'selected': _vm.selected_ores.includes(ore)},attrs:{\"params\":{'chosen_ore': ore}}},[_vm._v(_vm._s(ore))])],1)})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./oredetector.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./oredetector.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./oredetector.vue?vue&type=template&id=5716889f&scoped=true&\"\nimport script from \"./oredetector.vue?vue&type=script&lang=js&\"\nexport * from \"./oredetector.vue?vue&type=script&lang=js&\"\nimport style0 from \"./oredetector.vue?vue&type=style&index=0&id=5716889f&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5716889f\",\n null\n \n)\n\nexport default component.exports","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ghostspawner.vue?vue&type=style&index=0&id=70766bea&lang=scss&scoped=true&\"","var DESCRIPTORS = require('../internals/descriptors');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPrimitive = require('../internals/to-primitive');\nvar has = require('../internals/has');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\nvar nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return nativeGetOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);\n};\n","var $ = require('../internals/export');\nvar $values = require('../internals/object-to-array').values;\n\n// `Object.values` method\n// https://tc39.github.io/ecma262/#sec-object.values\n$({ target: 'Object', stat: true }, {\n values: function values(O) {\n return $values(O);\n }\n});\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('i',[_vm._v(\"Welcome to the NanoTrasen™ computer configuration utility. Please consult your system administrator if you have any questions about your device.\")]),_c('hr'),_c('h2',[_vm._v(\"Power Supply\")]),_c('vui-item',{attrs:{\"label\":\"Battery Status:\"}},[(_vm.battery)?_c('span',[_vm._v(\"Active\")]):_c('span',[_vm._v(\"Not Available\")])]),(_vm.battery)?_c('vui-item',{attrs:{\"label\":\"Battery Rating:\"}},[_vm._v(_vm._s(_vm.battery.rating)+\" Wh\")]):_vm._e(),(_vm.battery)?_c('vui-item',{attrs:{\"label\":\"Battery Charge:\"}},[_c('vui-progress',{attrs:{\"value\":_vm.battery.percent}},[_vm._v(_vm._s(_vm.battery.percent)+\"%\")])],1):_vm._e(),_c('vui-item',{attrs:{\"label\":\"Power Usage:\"}},[_vm._v(_vm._s(_vm.power_usage)+\" W\")]),_c('h2',[_vm._v(\"File System\")]),(_vm.battery)?_c('vui-item',{attrs:{\"label\":\"Used Capacity:\"}},[_c('vui-progress',{attrs:{\"value\":_vm.disk_used,\"min\":\"0\",\"max\":_vm.disk_size}},[_vm._v(_vm._s(_vm.disk_used)+\" GQ / \"+_vm._s(_vm.disk_size)+\" GQ\")])],1):_vm._e(),_c('h2',[_vm._v(\"Misc. Settings\")]),_c('vui-item',{attrs:{\"label\":\"Registered ID:\"}},[_c('vui-button',{attrs:{\"params\":{ PC_register: 1},\"disabled\":!_vm.card_slot}},[_vm._v(_vm._s(_vm.registered ? _vm.registered : \"Unregistered\"))])],1),(_vm.brightness !== null)?_c('vui-item',{attrs:{\"label\":\"Brightness:\"}},[_c('vui-input-slider',{attrs:{\"min\":0,\"max\":10},model:{value:(_vm.brightness),callback:function ($$v) {_vm.brightness=$$v},expression:\"brightness\"}})],1):_vm._e(),_c('h2',[_vm._v(\"Computer Components\")]),_vm._l((_vm.hardware),function(h,name){return _c('div',{key:name},[_c('h3',[_vm._v(_vm._s(name))]),_c('vui-item',{attrs:{\"label\":\"State:\"}},[(h.enabled)?_c('span',[_vm._v(\"Enabled\")]):_c('span',[_vm._v(\"Disabled\")])]),(h.power_usage > 0)?_c('vui-item',{attrs:{\"label\":\"Power Usage:\"}},[_vm._v(_vm._s(h.power_usage)+\" W\")]):_vm._e(),(!h.critical)?_c('vui-item',{attrs:{\"label\":\"Toggle Component:\"}},[_c('vui-button',{attrs:{\"params\":{ PC_enable_component: name},\"disabled\":!!h.enabled}},[_vm._v(\"ON\")]),_c('vui-button',{attrs:{\"params\":{ PC_disable_component: name},\"disabled\":!h.enabled}},[_vm._v(\"OFF\")])],1):_vm._e()],1)}),_c('i',[_vm._v(\"ntOS v2.1.0 -- © NanoTrasen 2457 - 2462\")])],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n","import mod from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./config.vue?vue&type=template&id=6036d02c&\"\nimport script from \"./config.vue?vue&type=script&lang=js&\"\nexport * from \"./config.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","module.exports = function() {\n\tthrow new Error(\"define cannot be used indirect\");\n};\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('h2',[_vm._v(\"Engine Status:\")]),(_vm.is_on)?_c('div',[_vm._v(\" The engine is currently running. \"),_c('vui-button',{attrs:{\"params\":{ toggle_engine: 1}}},[_vm._v(\"Stop\")])],1):_c('div',[_vm._v(\" The engine is off. \"),_c('vui-button',{attrs:{\"disabled\":!_vm.has_key || !_vm.has_cell,\"params\":{ toggle_engine: 1}}},[_vm._v(\"Start\")])],1),(_vm.has_key)?_c('div',[_vm._v(\" There is a key inserted into the ignition. \"),_c('vui-button',{attrs:{\"params\":{ key: 1}}},[_vm._v(\"Remove Key\")])],1):_c('div',[_vm._v(\" There is no key in the ignition. \")]),(_vm.has_cell)?_c('div',[_vm._v(\" Cell Charge: \"),_c('vui-progress',{attrs:{\"value\":_vm.cell_charge,\"max\":_vm.cell_max_charge,\"min\":0}},[_vm._v(_vm._s(_vm.cell_charge)+\"J\")]),_vm._v(\" \"),_c('vui-tooltip',{attrs:{\"label\":\"?\"}},[_vm._v(\"The cell can be removed by using a screwdriver to open the maintenance panel, then using a crowbar to shimmy it out.\")])],1):_c('div',[_vm._v(\" There is no cell installed. \"),_c('vui-tooltip',{attrs:{\"label\":\"?\"}},[_vm._v(\"The cell can be installed by using a screwdriver to open the maintenance panel, then clicking on the engine with a compatible power cell.\")])],1),(_vm.is_towing)?_c('div',[_vm._v(\" This engine is currently towing the \"+_vm._s(_vm.tow)+\". \"),_c('vui-button',{attrs:{\"params\":{ unlatch: 1}}},[_vm._v(\"Unlatch\")])],1):_c('div',[_vm._v(\" This engine isn't towing anything currently. \"),_c('vui-tooltip',{attrs:{\"label\":\"?\"}},[_vm._v(\"You can latch vehicles together by dragging from the vehicle you want to be the anchor point, to the trolley you wish to latch.\")])],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./trainengine.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./trainengine.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./trainengine.vue?vue&type=template&id=5fd44853&\"\nimport script from \"./trainengine.vue?vue&type=script&lang=js&\"\nexport * from \"./trainengine.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tooltip.vue?vue&type=style&index=0&id=4ea2a2b3&lang=scss&scoped=true&\"","var $ = require('../internals/export');\nvar expm1 = require('../internals/math-expm1');\n\n// `Math.expm1` method\n// https://tc39.github.io/ecma262/#sec-math.expm1\n$({ target: 'Math', stat: true, forced: expm1 != Math.expm1 }, { expm1: expm1 });\n","var toInteger = require('../internals/to-integer');\nvar toLength = require('../internals/to-length');\n\n// `ToIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-toindex\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length or index');\n return length;\n};\n","var global = require('../internals/global');\nvar setToStringTag = require('../internals/set-to-string-tag');\n\n// JSON[@@toStringTag] property\n// https://tc39.github.io/ecma262/#sec-json-@@tostringtag\nsetToStringTag(global.JSON, 'JSON', true);\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('../internals/to-length');\nvar repeat = require('../internals/string-repeat');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar ceil = Math.ceil;\n\n// `String.prototype.{ padStart, padEnd }` methods implementation\nvar createMethod = function (IS_END) {\n return function ($this, maxLength, fillString) {\n var S = String(requireObjectCoercible($this));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n var fillLen, stringFiller;\n if (intMaxLength <= stringLength || fillStr == '') return S;\n fillLen = intMaxLength - stringLength;\n stringFiller = repeat.call(fillStr, ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return IS_END ? S + stringFiller : stringFiller + S;\n };\n};\n\nmodule.exports = {\n // `String.prototype.padStart` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.padstart\n start: createMethod(false),\n // `String.prototype.padEnd` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.padend\n end: createMethod(true)\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n","var redefine = require('../internals/redefine');\n\nvar DatePrototype = Date.prototype;\nvar INVALID_DATE = 'Invalid Date';\nvar TO_STRING = 'toString';\nvar nativeDateToString = DatePrototype[TO_STRING];\nvar getTime = DatePrototype.getTime;\n\n// `Date.prototype.toString` method\n// https://tc39.github.io/ecma262/#sec-date.prototype.tostring\nif (new Date(NaN) + '' != INVALID_DATE) {\n redefine(DatePrototype, TO_STRING, function toString() {\n var value = getTime.call(this);\n // eslint-disable-next-line no-self-compare\n return value === value ? nativeDateToString.call(this) : INVALID_DATE;\n });\n}\n","var fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = !fails(function () {\n var url = new URL('b?a=1&b=2&c=3', 'http://a');\n var searchParams = url.searchParams;\n var result = '';\n url.pathname = 'c%20d';\n searchParams.forEach(function (value, key) {\n searchParams['delete']('b');\n result += key + value;\n });\n return (IS_PURE && !url.toJSON)\n || !searchParams.sort\n || url.href !== 'http://a/c%20d?a=1&c=3'\n || searchParams.get('c') !== '3'\n || String(new URLSearchParams('?a=1')) !== 'a=1'\n || !searchParams[ITERATOR]\n // throws in Edge\n || new URL('https://a@b').username !== 'a'\n || new URLSearchParams(new URLSearchParams('a=b')).get('a') !== 'b'\n // not punycoded in Edge\n || new URL('http://тест').host !== 'xn--e1aybc'\n // not escaped in Chrome 62-\n || new URL('http://a#б').hash !== '#%D0%B1'\n // fails in Chrome 66-\n || result !== 'a1c3'\n // throws in Safari\n || new URL('http://x', undefined).host !== 'x';\n});\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.passcode),expression:\"passcode\"}],attrs:{\"placeholder\":\"Enter passcode...\",\"autofocus\":\"\"},domProps:{\"value\":(_vm.passcode)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.passcode=$event.target.value}}}),_c('vui-button',{attrs:{\"params\":{ set_passcode: _vm.passcode }}},[_vm._v(\"Set\")]),_c('vui-button',{attrs:{\"params\":{ lock: 1 }}},[_vm._v(\"Lock\")])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./maglock-config.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./maglock-config.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./maglock-config.vue?vue&type=template&id=081a5cf1&\"\nimport script from \"./maglock-config.vue?vue&type=script&lang=js&\"\nexport * from \"./maglock-config.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{staticClass:\"tooltip label\"},[_vm._t(\"label\",[_vm._v(_vm._s(_vm.label))]),_c('div',{staticClass:\"tooltip content\"},[_vm._t(\"default\")],2)],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tooltip.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tooltip.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./tooltip.vue?vue&type=template&id=4ea2a2b3&scoped=true&\"\nimport script from \"./tooltip.vue?vue&type=script&lang=js&\"\nexport * from \"./tooltip.vue?vue&type=script&lang=js&\"\nimport style0 from \"./tooltip.vue?vue&type=style&index=0&id=4ea2a2b3&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4ea2a2b3\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('input',{ref:\"input\",style:({width: _vm.width}),attrs:{\"type\":\"range\",\"min\":_vm.min,\"max\":_vm.max},domProps:{\"value\":_vm.val},on:{\"change\":function($event){return _vm.onFieldUpdate($event.target)}}})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./slider.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./slider.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./slider.vue?vue&type=template&id=1c07adff&scoped=true&\"\nimport script from \"./slider.vue?vue&type=script&lang=js&\"\nexport * from \"./slider.vue?vue&type=script&lang=js&\"\nimport style0 from \"./slider.vue?vue&type=style&index=0&id=1c07adff&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1c07adff\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.invalid)?_c('div',{staticClass:\"center\"},[(_vm.nocons)?_c('span',{staticClass:\"red\"},[_vm._v(\"Error: No scanner bed detected!\")]):(!_vm.occupied)?_c('span',{staticClass:\"red\"},[_vm._v(\"No occupant detected.\")]):(_vm.ipc)?_c('span',{staticClass:\"red\"},[_vm._v(\"Error: Object in scanner bed interfering with sensor array.\")]):(_vm.noscan)?_c('span',{staticClass:\"red\"},[_vm._v(\"Error: No diagnostics profile installed for this species.\")]):_c('span',{staticClass:\"red\"},[_vm._v(\"Error: Unknown error.\")])]):_c('table',{staticClass:\"bodyscanner\"},[_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"column\"},[_c('h3',[_vm._v(\"Patient Status\")]),_c('hr'),_c('vui-group',[_c('vui-group-item',{attrs:{\"label\":\"Name:\"}},[_vm._v(_vm._s(_vm.name))]),_c('vui-group-item',{attrs:{\"label\":\"Status:\"}},[_c('span',{style:({color:_vm.consciousnessLabel(_vm.stat)})},[_vm._v(_vm._s(_vm.consciousnessText(_vm.stat)))])]),_c('vui-group-item',{attrs:{\"label\":\"Species:\"}},[_vm._v(_vm._s(_vm.species))]),_c('vui-group-item',{attrs:{\"label\":\"Brain Activity:\"}},[_c('vui-progress',{class:_vm.progressClass(_vm.brain_activity),attrs:{\"value\":_vm.brain_activity}},[_vm._v(_vm._s(_vm.brain_activity)+\"%\")])],1),(_vm.stat < 2)?[_c('vui-group-item',{attrs:{\"label\":\"Physical Trauma:\"}},[_c('span',{style:({color:_vm.damageLabel(_vm.bruteLoss)})},[_vm._v(_vm._s(_vm.bruteLoss))])]),_c('vui-group-item',{attrs:{\"label\":\"Oxygen Deprivation:\"}},[_c('span',{style:({color:_vm.damageLabel(_vm.oxyLoss)})},[_vm._v(_vm._s(_vm.oxyLoss))])]),_c('vui-group-item',{attrs:{\"label\":\"Organ Failure:\"}},[_c('span',{style:({color:_vm.damageLabel(_vm.toxLoss)})},[_vm._v(_vm._s(_vm.toxLoss))])]),_c('vui-group-item',{attrs:{\"label\":\"Burn Severity:\"}},[_c('span',{style:({color:_vm.damageLabel(_vm.fireLoss)})},[_vm._v(_vm._s(_vm.fireLoss))])])]:_vm._e()],2),_c('hr'),_c('vui-group',[_c('vui-group-item',{attrs:{\"label\":\"Radiation Level:\"}},[_vm._v(_vm._s(Math.round(_vm.rads)))]),_c('vui-group-item',{attrs:{\"label\":\"Genetic Damage:\"}},[_vm._v(_vm._s(_vm.cloneLoss))]),_c('vui-group-item',{attrs:{\"label\":\"Est. Paralysis Level:\"}},[_vm._v(_vm._s(_vm.paralysis)),(_vm.paralysis)?_c('span',[_vm._v(\" (~\"+_vm._s(Math.round(_vm.paralysis/4))+\" Seconds Left)\")]):_vm._e()]),_c('vui-group-item',{attrs:{\"label\":\"Body Temperature:\"}},[_vm._v(_vm._s(_vm.bodytemp)+\" K (~ \"+_vm._s(Math.round(_vm.bodytemp - 273.15))+\" C)\")])],1),_c('hr'),_c('h3',[_vm._v(\"Blood Status\")]),_c('hr'),_c('vui-group',[_c('vui-group-item',{style:({color:_vm.getPressureClass(_vm.blood_pressure_level)}),attrs:{\"label\":\"BP:\"}},[_vm._v(\" \"+_vm._s(_vm.blood_pressure)+\" \")]),_c('vui-group-item',{attrs:{\"label\":\"Blood Oxygenation:\"}},[_c('vui-progress',{class:_vm.progressClass(_vm.brain_activity),attrs:{\"value\":Math.round(_vm.blood_o2)}},[_vm._v(_vm._s(Math.round(_vm.blood_o2))+\"%\")])],1),(Math.round(_vm.norepiAmt))?_c('vui-group-item',{attrs:{\"label\":\"Inaprovaline:\"}},[_vm._v(\" \"+_vm._s(Math.round(_vm.norepiAmt))+\" unit(s)\")]):_vm._e(),(Math.round(_vm.soporAmt))?_c('vui-group-item',{attrs:{\"label\":\"Soporific:\"}},[_vm._v(\" \"+_vm._s(Math.round(_vm.soporAmt))+\" unit(s)\")]):_vm._e(),(Math.round(_vm.bicardAmt))?_c('vui-group-item',{attrs:{\"label\":\"Bicaridine:\"}},[_vm._v(\" \"+_vm._s(Math.round(_vm.bicardAmt))+\" unit(s)\")]):_vm._e(),(Math.round(_vm.dermAmt))?_c('vui-group-item',{attrs:{\"label\":\"Dermaline:\"}},[_vm._v(\" \"+_vm._s(Math.round(_vm.dermAmt))+\" unit(s)\")]):_vm._e(),(Math.round(_vm.dexAmt))?_c('vui-group-item',{attrs:{\"label\":\"Dexalin:\"}},[_vm._v(\" \"+_vm._s(Math.round(_vm.dexAmt))+\" unit(s)\")]):_vm._e(),(Math.round(_vm.thetaAmt))?_c('vui-group-item',{attrs:{\"label\":\"Thetamycin:\"}},[_vm._v(\" \"+_vm._s(Math.round(_vm.thetaAmt))+\" unit(s)\")]):_vm._e(),(Math.round(_vm.otherAmt))?_c('vui-group-item',{attrs:{\"label\":\"Other:\"}},[_vm._v(\" \"+_vm._s(Math.round(_vm.otherAmt))+\" unit(s)\")]):_vm._e()],1)],1),_c('div',{staticClass:\"column\"},[(_vm.hasmissing)?_vm._l((_vm.missingparts),function(organ){return _c('div',{key:organ.name},[_c('vui-group-item',[_vm._v(\" \"+_vm._s(organ)+\" \")])],1)}):_vm._e(),_c('h3',[_vm._v(\"Internal Organ Status\")]),_c('hr'),_c('table',{staticClass:\"injury\"},[(_vm.hasinternalinjury)?[_vm._m(0)]:[_vm._m(1)],_vm._l((_vm.organs),function(organ){return _c('tr',{key:organ.name},[(organ.damage != 'None' || organ.hasWounds)?[_c('td',[_vm._v(\" \"+_vm._s(organ.name)+\" \")]),_c('td',[_c('span',{style:({color:_vm.damageLabel(organ.damage)})},[_vm._v(\" \"+_vm._s(organ.damage))])]),_c('td',_vm._l((organ.wounds),function(wound){return _c('div',{key:wound.name,staticStyle:{\"color\":\"Tomato\"}},[_vm._v(\" \"+_vm._s(wound)+\" \")])}),0),_c('td',[_vm._v(\" \"+_vm._s(organ.location)+\" \")])]:_vm._e()],2)})],2),_c('hr'),_c('h3',[_vm._v(\"External Bodypart Status\")]),_c('hr'),_c('table',{staticClass:\"injury\"},[(_vm.hasexternalinjury)?[_vm._m(2)]:[_vm._m(3)],_vm._l((_vm.bodyparts),function(organ){return _c('tr',{key:organ.name},[(organ.bruteDmg != 'None' || organ.burnDmg != 'None' || organ.hasWounds)?[_c('td',[_vm._v(\" \"+_vm._s(organ.name)+\" \")]),_c('td',[_c('span',{style:({color:_vm.damageLabel(organ.bruteDmg)})},[_vm._v(\" \"+_vm._s(organ.bruteDmg)+\" \")]),_vm._v(\" / \"),_c('span',{style:({color:_vm.damageLabel(organ.burnDmg)})},[_vm._v(\" \"+_vm._s(organ.burnDmg)+\" \")])]),_c('td',_vm._l((organ.wounds),function(wound){return _c('div',{key:wound.name,staticStyle:{\"color\":\"Tomato\"}},[_vm._v(\" \"+_vm._s(wound)+\" \")])}),0)]:_vm._e()],2)})],2)],2),_c('h3',[_vm._v(\"Actions\")]),_c('vui-button',{staticClass:\"center\",attrs:{\"params\":{print: 1}}},[_vm._v(\"Print Report\")]),_c('vui-button',{staticClass:\"center\",attrs:{\"params\":{eject: 1}}},[_vm._v(\"Eject Occupant\")])],1)])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('tr',[_c('th',[_vm._v(\"Organ\")]),_c('th',[_vm._v(\"Trauma\")]),_c('th',[_vm._v(\"Wounds\")]),_c('th',[_vm._v(\"Location\")])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('tr',[_c('th',[_c('span',{staticStyle:{\"color\":\"LimeGreen\"}},[_vm._v(\"The occupant has no internal injuries.\")])])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('tr',[_c('th',[_vm._v(\"Organ\")]),_c('th',[_vm._v(\"Physical / Burn Trauma\")]),_c('th',[_vm._v(\"Wounds\")])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('tr',[_c('th',[_c('span',{staticStyle:{\"color\":\"LimeGreen\"}},[_vm._v(\"The occupant has no external injuries.\")])])])}]\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./bodyscanner.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./bodyscanner.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./bodyscanner.vue?vue&type=template&id=130b946b&scoped=true&\"\nimport script from \"./bodyscanner.vue?vue&type=script&lang=js&\"\nexport * from \"./bodyscanner.vue?vue&type=script&lang=js&\"\nimport style0 from \"./bodyscanner.vue?vue&type=style&index=0&id=130b946b&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"130b946b\",\n null\n \n)\n\nexport default component.exports","'use strict';\nvar global = require('../internals/global');\nvar redefineAll = require('../internals/redefine-all');\nvar InternalMetadataModule = require('../internals/internal-metadata');\nvar collection = require('../internals/collection');\nvar collectionWeak = require('../internals/collection-weak');\nvar isObject = require('../internals/is-object');\nvar enforceIternalState = require('../internals/internal-state').enforce;\nvar NATIVE_WEAK_MAP = require('../internals/native-weak-map');\n\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar isExtensible = Object.isExtensible;\nvar InternalWeakMap;\n\nvar wrapper = function (init) {\n return function WeakMap() {\n return init(this, arguments.length ? arguments[0] : undefined);\n };\n};\n\n// `WeakMap` constructor\n// https://tc39.github.io/ecma262/#sec-weakmap-constructor\nvar $WeakMap = module.exports = collection('WeakMap', wrapper, collectionWeak);\n\n// IE11 WeakMap frozen keys fix\n// We can't use feature detection because it crash some old IE builds\n// https://github.com/zloirock/core-js/issues/485\nif (NATIVE_WEAK_MAP && IS_IE11) {\n InternalWeakMap = collectionWeak.getConstructor(wrapper, 'WeakMap', true);\n InternalMetadataModule.REQUIRED = true;\n var WeakMapPrototype = $WeakMap.prototype;\n var nativeDelete = WeakMapPrototype['delete'];\n var nativeHas = WeakMapPrototype.has;\n var nativeGet = WeakMapPrototype.get;\n var nativeSet = WeakMapPrototype.set;\n redefineAll(WeakMapPrototype, {\n 'delete': function (key) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceIternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n return nativeDelete.call(this, key) || state.frozen['delete'](key);\n } return nativeDelete.call(this, key);\n },\n has: function has(key) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceIternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n return nativeHas.call(this, key) || state.frozen.has(key);\n } return nativeHas.call(this, key);\n },\n get: function get(key) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceIternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n return nativeHas.call(this, key) ? nativeGet.call(this, key) : state.frozen.get(key);\n } return nativeGet.call(this, key);\n },\n set: function set(key, value) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceIternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n nativeHas.call(this, key) ? nativeSet.call(this, key, value) : state.frozen.set(key, value);\n } else nativeSet.call(this, key, value);\n return this;\n }\n });\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('vui-item',{attrs:{\"label\":\"Turret Status:\",\"balance\":0.4}},[_c('vui-button',{class:{'red': _vm.settings.enabled},attrs:{\"params\":{'command' : 'enable', 'value' : 1, 'turret_ref': _vm.tref}}},[_vm._v(\"Enabled\")]),_c('vui-button',{class:{'selected': !_vm.settings.enabled},attrs:{\"params\":{'command' : 'enable', 'value' : 0, 'turret_ref': _vm.tref}}},[_vm._v(\"Disabled\")])],1),(_vm.settings.is_lethal)?_c('vui-item',{attrs:{\"label\":\"Lethal Mode:\",\"balance\":0.4}},[_c('vui-button',{class:{'red': _vm.settings.lethal && _vm.settings.can_switch},attrs:{\"disabled\":!_vm.settings.can_switch,\"params\":{'command' : 'lethal', 'value' : 1, 'turret_ref': _vm.tref}}},[_vm._v(\"On\")]),_c('vui-button',{class:{'selected': !_vm.settings.lethal && _vm.settings.can_switch},attrs:{\"disabled\":!_vm.settings.can_switch,\"params\":{'command' : 'lethal', 'value' : 0, 'turret_ref': _vm.tref}}},[_vm._v(\"Off\")])],1):_vm._e(),_vm._l((_vm.settings.settings),function(setting,id){return _c('vui-item',{key:setting.id,attrs:{\"label\":setting.category,\"balance\":0.4}},[_c('vui-button',{class:{'selected': setting.value},attrs:{\"params\":{'command' : id, 'value' : 1, 'turret_ref': _vm.tref}}},[_vm._v(\"On\")]),_c('vui-button',{class:{'selected': !setting.value},attrs:{\"params\":{'command' : id, 'value' : 0, 'turret_ref': _vm.tref}}},[_vm._v(\"Off\")])],1)})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./control-part.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./control-part.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./control-part.vue?vue&type=template&id=47762730&\"\nimport script from \"./control-part.vue?vue&type=script&lang=js&\"\nexport * from \"./control-part.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","'use strict';\nvar toInteger = require('../internals/to-integer');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `String.prototype.repeat` method implementation\n// https://tc39.github.io/ecma262/#sec-string.prototype.repeat\nmodule.exports = ''.repeat || function repeat(count) {\n var str = String(requireObjectCoercible(this));\n var result = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError('Wrong number of repetitions');\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str;\n return result;\n};\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./late-choices.vue?vue&type=style&index=0&id=36f58934&lang=scss&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"displayBar\"},[_c('div',{staticClass:\"displayBarFill\",style:({ width: _vm.percentage + '%'})},[_c('span',[_vm._t(\"default\")],2)])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./progress.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./progress.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./progress.vue?vue&type=template&id=2a4ee906&scoped=true&\"\nimport script from \"./progress.vue?vue&type=script&lang=js&\"\nexport * from \"./progress.vue?vue&type=script&lang=js&\"\nimport style0 from \"./progress.vue?vue&type=style&index=0&id=2a4ee906&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2a4ee906\",\n null\n \n)\n\nexport default component.exports","var asciiToArray = require('./_asciiToArray'),\n hasUnicode = require('./_hasUnicode'),\n unicodeToArray = require('./_unicodeToArray');\n\n/**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n}\n\nmodule.exports = stringToArray;\n","'use strict';\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar isRegExp = require('../internals/is-regexp');\nvar anObject = require('../internals/an-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar speciesConstructor = require('../internals/species-constructor');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar toLength = require('../internals/to-length');\nvar callRegExpExec = require('../internals/regexp-exec-abstract');\nvar regexpExec = require('../internals/regexp-exec');\nvar fails = require('../internals/fails');\n\nvar arrayPush = [].push;\nvar min = Math.min;\nvar MAX_UINT32 = 0xFFFFFFFF;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { return !RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\nfixRegExpWellKnownSymbolLogic('split', 2, function (SPLIT, nativeSplit, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'.split(/(b)*/)[1] == 'c' ||\n 'test'.split(/(?:)/, -1).length != 4 ||\n 'ab'.split(/(?:ab)*/).length != 2 ||\n '.'.split(/(.?)(.?)/).length != 4 ||\n '.'.split(/()()/).length > 1 ||\n ''.split(/.?/).length\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = String(requireObjectCoercible(this));\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (separator === undefined) return [string];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) {\n return nativeSplit.call(string, separator, lim);\n }\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy.lastIndex;\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match.length > 1 && match.index < string.length) arrayPush.apply(output, match.slice(1));\n lastLength = match[0].length;\n lastLastIndex = lastIndex;\n if (output.length >= lim) break;\n }\n if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop\n }\n if (lastLastIndex === string.length) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output.length > lim ? output.slice(0, lim) : output;\n };\n // Chakra, V8\n } else if ('0'.split(undefined, 0).length) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : nativeSplit.call(this, separator, limit);\n };\n } else internalSplit = nativeSplit;\n\n return [\n // `String.prototype.split` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = requireObjectCoercible(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(String(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (regexp, limit) {\n var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== nativeSplit);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (SUPPORTS_Y ? 'y' : 'g');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = SUPPORTS_Y ? q : 0;\n var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n var e;\n if (\n z === null ||\n (e = min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n}, !SUPPORTS_Y);\n","// `SameValue` abstract operation\n// https://tc39.github.io/ecma262/#sec-samevalue\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar FORCED = require('../internals/object-prototype-accessors-forced');\nvar toObject = require('../internals/to-object');\nvar aFunction = require('../internals/a-function');\nvar definePropertyModule = require('../internals/object-define-property');\n\n// `Object.prototype.__defineGetter__` method\n// https://tc39.github.io/ecma262/#sec-object.prototype.__defineGetter__\nif (DESCRIPTORS) {\n $({ target: 'Object', proto: true, forced: FORCED }, {\n __defineGetter__: function __defineGetter__(P, getter) {\n definePropertyModule.f(toObject(this), P, { get: aFunction(getter), enumerable: true, configurable: true });\n }\n });\n}\n","var $ = require('../internals/export');\nvar global = require('../internals/global');\nvar task = require('../internals/task');\n\nvar FORCED = !global.setImmediate || !global.clearImmediate;\n\n// http://w3c.github.io/setImmediate/\n$({ global: true, bind: true, enumerable: true, forced: FORCED }, {\n // `setImmediate` method\n // http://w3c.github.io/setImmediate/#si-setImmediate\n setImmediate: task.set,\n // `clearImmediate` method\n // http://w3c.github.io/setImmediate/#si-clearImmediate\n clearImmediate: task.clear\n});\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var $ = require('../internals/export');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// `Object.setPrototypeOf` method\n// https://tc39.github.io/ecma262/#sec-object.setprototypeof\n$({ target: 'Object', stat: true }, {\n setPrototypeOf: setPrototypeOf\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.big` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.big\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('big') }, {\n big: function big() {\n return createHTML(this, 'big', '', '');\n }\n});\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.services.length)?_c('h2',[_vm._v(\"Programs\")]):_vm._e(),_c('i',[_vm._v(\"No program loaded. Please select program from list below.\")]),_vm._l((_vm.displayed_programs),function(p){return _c('div',{key:p.filename},[_c('vui-button',{attrs:{\"params\":{ PC_runprogram: p.filename}}},[_vm._v(_vm._s(p.desc))]),(p.running)?_c('vui-button',{staticClass:\"danger\",attrs:{\"icon\":\"window-close\",\"icon-only\":\"\",\"params\":{ PC_killprogram: p.filename}}}):_vm._e()],1)}),(_vm.services.length)?_c('h2',[_vm._v(\"Services\")]):_vm._e(),_vm._l((_vm.services),function(p){return _c('div',{key:p.filename},[_c('vui-button',{class:{ on: p.service.enabled },attrs:{\"params\":{ PC_toggleservice: p.filename}}},[_vm._v(_vm._s(p.desc))]),(p.service.enabled)?_c('vui-button',{staticClass:\"danger\",attrs:{\"icon\":\"window-close\",\"icon-only\":\"\",\"params\":{ PC_toggleservice: p.filename}}}):_vm._e()],1)})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./main.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./main.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./main.vue?vue&type=template&id=285da89e&\"\nimport script from \"./main.vue?vue&type=script&lang=js&\"\nexport * from \"./main.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","'use strict';\nvar $ = require('../internals/export');\nvar $reduce = require('../internals/array-reduce').left;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\nvar CHROME_VERSION = require('../internals/engine-v8-version');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar STRICT_METHOD = arrayMethodIsStrict('reduce');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('reduce', { 1: 0 });\n// Chrome 80-82 has a critical bug\n// https://bugs.chromium.org/p/chromium/issues/detail?id=1049982\nvar CHROME_BUG = !IS_NODE && CHROME_VERSION > 79 && CHROME_VERSION < 83;\n\n// `Array.prototype.reduce` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.reduce\n$({ target: 'Array', proto: true, forced: !STRICT_METHOD || !USES_TO_LENGTH || CHROME_BUG }, {\n reduce: function reduce(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","var createTypedArrayConstructor = require('../internals/typed-array-constructor');\n\n// `Int32Array` constructor\n// https://tc39.github.io/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Int32', function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","'use strict';\nvar toObject = require('../internals/to-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toLength = require('../internals/to-length');\n\nvar min = Math.min;\n\n// `Array.prototype.copyWithin` method implementation\n// https://tc39.github.io/ecma262/#sec-array.prototype.copywithin\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","var classof = require('./classof-raw');\nvar regexpExec = require('./regexp-exec');\n\n// `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n\n if (classof(R) !== 'RegExp') {\n throw TypeError('RegExp#exec called on incompatible receiver');\n }\n\n return regexpExec.call(R, S);\n};\n\n","ace.define(\"ace/theme/monokai\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(acequire, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-monokai\";\nexports.cssText = \".ace-monokai .ace_gutter {\\\nbackground: #2F3129;\\\ncolor: #8F908A\\\n}\\\n.ace-monokai .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #555651\\\n}\\\n.ace-monokai {\\\nbackground-color: #272822;\\\ncolor: #F8F8F2\\\n}\\\n.ace-monokai .ace_cursor {\\\ncolor: #F8F8F0\\\n}\\\n.ace-monokai .ace_marker-layer .ace_selection {\\\nbackground: #49483E\\\n}\\\n.ace-monokai.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #272822;\\\n}\\\n.ace-monokai .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-monokai .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #49483E\\\n}\\\n.ace-monokai .ace_marker-layer .ace_active-line {\\\nbackground: #202020\\\n}\\\n.ace-monokai .ace_gutter-active-line {\\\nbackground-color: #272727\\\n}\\\n.ace-monokai .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #49483E\\\n}\\\n.ace-monokai .ace_invisible {\\\ncolor: #52524d\\\n}\\\n.ace-monokai .ace_entity.ace_name.ace_tag,\\\n.ace-monokai .ace_keyword,\\\n.ace-monokai .ace_meta.ace_tag,\\\n.ace-monokai .ace_storage {\\\ncolor: #F92672\\\n}\\\n.ace-monokai .ace_punctuation,\\\n.ace-monokai .ace_punctuation.ace_tag {\\\ncolor: #fff\\\n}\\\n.ace-monokai .ace_constant.ace_character,\\\n.ace-monokai .ace_constant.ace_language,\\\n.ace-monokai .ace_constant.ace_numeric,\\\n.ace-monokai .ace_constant.ace_other {\\\ncolor: #AE81FF\\\n}\\\n.ace-monokai .ace_invalid {\\\ncolor: #F8F8F0;\\\nbackground-color: #F92672\\\n}\\\n.ace-monokai .ace_invalid.ace_deprecated {\\\ncolor: #F8F8F0;\\\nbackground-color: #AE81FF\\\n}\\\n.ace-monokai .ace_support.ace_constant,\\\n.ace-monokai .ace_support.ace_function {\\\ncolor: #66D9EF\\\n}\\\n.ace-monokai .ace_fold {\\\nbackground-color: #A6E22E;\\\nborder-color: #F8F8F2\\\n}\\\n.ace-monokai .ace_storage.ace_type,\\\n.ace-monokai .ace_support.ace_class,\\\n.ace-monokai .ace_support.ace_type {\\\nfont-style: italic;\\\ncolor: #66D9EF\\\n}\\\n.ace-monokai .ace_entity.ace_name.ace_function,\\\n.ace-monokai .ace_entity.ace_other,\\\n.ace-monokai .ace_entity.ace_other.ace_attribute-name,\\\n.ace-monokai .ace_variable {\\\ncolor: #A6E22E\\\n}\\\n.ace-monokai .ace_variable.ace_parameter {\\\nfont-style: italic;\\\ncolor: #FD971F\\\n}\\\n.ace-monokai .ace_string {\\\ncolor: #E6DB74\\\n}\\\n.ace-monokai .ace_comment {\\\ncolor: #75715E\\\n}\\\n.ace-monokai .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ0FD0ZXBzd/wPAAjVAoxeSgNeAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = acequire(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.spawnpoint),expression:\"!spawnpoint\"}],staticClass:\"tagselector\"},_vm._l((_vm.tags),function(amount,tag){return _c('vui-button',{key:tag,class:{ selected: _vm.current_tag == tag},on:{\"click\":function($event){_vm.current_tag = tag}}},[_vm._v(_vm._s(tag)+\" (\"+_vm._s(amount)+\")\")])}),1),_c('hr',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.spawnpoint),expression:\"!spawnpoint\"}]}),_c('table',[_vm._m(0),_vm._l((_vm.spawners),function(data,index){return _c('tr',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showEntry(data)),expression:\"showEntry(data)\"}],key:index},[_c('td',[_vm._v(_vm._s(data.name))]),_c('td',[_vm._v(_vm._s(data.desc))]),(data.max_count > 0)?_c('td',[_vm._v(_vm._s(data.max_count - data.count)+\" / \"+_vm._s(data.max_count))]):(data.spawnatoms > 0)?_c('td',[_vm._v(_vm._s(data.spawnatoms))]):_c('td',[_vm._v(\"∞\")]),_c('td',{staticClass:\"action\"},[_c('vui-button',{attrs:{\"disabled\":(data.cant_spawn !== 0),\"params\":{spawn: index, spawnpoint: _vm.spawnpoint},\"icon\":\"star\"}},[_vm._v(\"Spawn\")]),(data.can_edit == 1)?_c('vui-button',{attrs:{\"disabled\":(data.enabled == 1),\"params\":{enable: index}}},[_vm._v(\"Enable\")]):_vm._e(),(data.can_edit == 1)?_c('vui-button',{attrs:{\"disabled\":(data.enabled == 0),\"params\":{disable: index}}},[_vm._v(\"Disable\")]):_vm._e()],1)])})],2)])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('tr',[_c('th',[_vm._v(\"Name\")]),_c('th',[_vm._v(\"Description\")]),_c('th',[_vm._v(\"Available Slots\")]),_c('th',{staticClass:\"action\"},[_vm._v(\"Actions\")])])}]\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ghostspawner.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ghostspawner.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ghostspawner.vue?vue&type=template&id=70766bea&scoped=true&\"\nimport script from \"./ghostspawner.vue?vue&type=script&lang=js&\"\nexport * from \"./ghostspawner.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ghostspawner.vue?vue&type=style&index=0&id=70766bea&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"70766bea\",\n null\n \n)\n\nexport default component.exports","var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar forEach = require('../internals/array-for-each');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nfor (var COLLECTION_NAME in DOMIterables) {\n var Collection = global[COLLECTION_NAME];\n var CollectionPrototype = Collection && Collection.prototype;\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype && CollectionPrototype.forEach !== forEach) try {\n createNonEnumerableProperty(CollectionPrototype, 'forEach', forEach);\n } catch (error) {\n CollectionPrototype.forEach = forEach;\n }\n}\n","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./chemdisp.vue?vue&type=style&index=0&id=60faaeb6&lang=scss&scoped=true&\"","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar toLength = require('../internals/to-length');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar speciesConstructor = require('../internals/species-constructor');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.subarray` method\n// https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.subarray\nexportTypedArrayMethod('subarray', function subarray(begin, end) {\n var O = aTypedArray(this);\n var length = O.length;\n var beginIndex = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O.constructor))(\n O.buffer,\n O.byteOffset + beginIndex * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - beginIndex)\n );\n});\n","require('../modules/web.dom-collections.for-each');\nrequire('../modules/web.dom-collections.iterator');\nrequire('../modules/web.immediate');\nrequire('../modules/web.queue-microtask');\nrequire('../modules/web.timers');\nrequire('../modules/web.url');\nrequire('../modules/web.url.to-json');\nrequire('../modules/web.url-search-params');\nvar path = require('../internals/path');\n\nmodule.exports = path;\n","'use strict';\nvar $forEach = require('../internals/array-iteration').forEach;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar STRICT_METHOD = arrayMethodIsStrict('forEach');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('forEach');\n\n// `Array.prototype.forEach` method implementation\n// https://tc39.github.io/ecma262/#sec-array.prototype.foreach\nmodule.exports = (!STRICT_METHOD || !USES_TO_LENGTH) ? function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n} : [].forEach;\n","var toPositiveInteger = require('../internals/to-positive-integer');\n\nmodule.exports = function (it, BYTES) {\n var offset = toPositiveInteger(it);\n if (offset % BYTES) throw RangeError('Wrong offset');\n return offset;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.anchor` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.anchor\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('anchor') }, {\n anchor: function anchor(name) {\n return createHTML(this, 'a', 'name', name);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.fontsize` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.fontsize\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('fontsize') }, {\n fontsize: function fontsize(size) {\n return createHTML(this, 'font', 'size', size);\n }\n});\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.species` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.species\ndefineWellKnownSymbol('species');\n","module.exports = function (it, Constructor, name) {\n if (!(it instanceof Constructor)) {\n throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation');\n } return it;\n};\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',[_c('vui-button',{staticClass:\"fixedLeft\",attrs:{\"icon\":\"cog\",\"params\":{ close: 1 }}},[_vm._v(\"Close\")])],1),_c('div',[_c('h2',[_vm._v(\"Storage\")]),(_vm.secure)?_c('span',{staticClass:\"notice\"},[_vm._v(\" \"+_vm._s(_vm.locked == -1 ? \"Sec.re ACC_** //):securi_nt.diag=>##'or 1=1'%($...\" : \"Secure Access: Please have your identification ready.\")+\" \")]):_vm._e()]),(_vm.contents)?_vm._l((_vm.contents),function(vend_item){return _c('div',{key:vend_item.vend},[_c('div',[_c('span',{staticClass:\"highlight\"},[_vm._v(_vm._s(vend_item.display_name)+\" (\"+_vm._s(vend_item.quantity)+\" available)\")])]),_c('div',{staticStyle:{\"float\":\"left\"}},[_vm._v(\"Vend: \")]),_c('vui-button',{staticClass:\"statusValue\",attrs:{\"params\":{ vendItem: vend_item.vend, amount: 1 },\"icon\":\"arrow-alt-circle-down\"}},[_vm._v(\"x1\")]),(vend_item.quantity >= 5)?_c('vui-button',{staticClass:\"statusValue\",attrs:{\"params\":{ vendItem: vend_item.vend, amount: 5 },\"icon\":\"arrow-alt-circle-down\"}},[_vm._v(\"x5\")]):_vm._e(),(vend_item.quantity >= 10)?_c('vui-button',{staticClass:\"statusValue\",attrs:{\"params\":{ vendItem: vend_item.vend, amount: 10 },\"icon\":\"arrow-alt-circle-down\"}},[_vm._v(\"x10\")]):_vm._e(),(vend_item.quantity >= 25)?_c('vui-button',{staticClass:\"statusValue\",attrs:{\"params\":{ vendItem: vend_item.vend, amount: 25 },\"icon\":\"arrow-alt-circle-down\"}},[_vm._v(\"x25\")]):_vm._e(),(vend_item.quantity > 1)?_c('vui-button',{staticClass:\"statusValue\",attrs:{\"params\":{ vendItem: vend_item.vend, amount: vend_item.quantity },\"icon\":\"arrow-alt-circle-down\"}},[_vm._v(\"All\")]):_vm._e()],1)}):_c('div',{staticClass:\"average\"},[_vm._v(\" No products loaded. \")])],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./smartfridge.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./smartfridge.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./smartfridge.vue?vue&type=template&id=0bfa4fc7&\"\nimport script from \"./smartfridge.vue?vue&type=script&lang=js&\"\nexport * from \"./smartfridge.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","var $ = require('../internals/export');\nvar ownKeys = require('../internals/own-keys');\n\n// `Reflect.ownKeys` method\n// https://tc39.github.io/ecma262/#sec-reflect.ownkeys\n$({ target: 'Reflect', stat: true }, {\n ownKeys: ownKeys\n});\n","module.exports = function (it) {\n if (typeof it != 'function') {\n throw TypeError(String(it) + ' is not a function');\n } return it;\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var called = 0;\n var iteratorWithReturn = {\n next: function () {\n return { done: !!called++ };\n },\n 'return': function () {\n SAFE_CLOSING = true;\n }\n };\n iteratorWithReturn[ITERATOR] = function () {\n return this;\n };\n // eslint-disable-next-line no-throw-literal\n Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n var ITERATION_SUPPORT = false;\n try {\n var object = {};\n object[ITERATOR] = function () {\n return {\n next: function () {\n return { done: ITERATION_SUPPORT = true };\n }\n };\n };\n exec(object);\n } catch (error) { /* empty */ }\n return ITERATION_SUPPORT;\n};\n","var userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /(iphone|ipod|ipad).*applewebkit/i.test(userAgent);\n","var $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar defineProperties = require('../internals/object-define-properties');\n\n// `Object.defineProperties` method\n// https://tc39.github.io/ecma262/#sec-object.defineproperties\n$({ target: 'Object', stat: true, forced: !DESCRIPTORS, sham: !DESCRIPTORS }, {\n defineProperties: defineProperties\n});\n","// `RequireObjectCoercible` abstract operation\n// https://tc39.github.io/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.password == null)?_c('vui-button',{on:{\"click\":_vm.join}},[_vm._v(_vm._s(_vm.ch.title))]):[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.password),expression:\"password\"}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.password)},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.join_with($event)},\"input\":function($event){if($event.target.composing){ return; }_vm.password=$event.target.value}}}),_c('vui-button',{attrs:{\"params\":{join: {target: _vm.re, password: _vm.password}}}},[_vm._v(\"Join \"+_vm._s(_vm.ch.title))])]],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./channel-btn.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./channel-btn.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./channel-btn.vue?vue&type=template&id=66c67282&\"\nimport script from \"./channel-btn.vue?vue&type=script&lang=js&\"\nexport * from \"./channel-btn.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (METHOD_NAME) {\n // We can't use this feature detection in V8 since it causes\n // deoptimization and serious performance degradation\n // https://github.com/zloirock/core-js/issues/677\n return V8_VERSION >= 51 || !fails(function () {\n var array = [];\n var constructor = array.constructor = {};\n constructor[SPECIES] = function () {\n return { foo: 1 };\n };\n return array[METHOD_NAME](Boolean).foo !== 1;\n });\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $trimEnd = require('../internals/string-trim').end;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\nvar FORCED = forcedStringTrimMethod('trimEnd');\n\nvar trimEnd = FORCED ? function trimEnd() {\n return $trimEnd(this);\n} : ''.trimEnd;\n\n// `String.prototype.{ trimEnd, trimRight }` methods\n// https://github.com/tc39/ecmascript-string-left-right-trim\n$({ target: 'String', proto: true, forced: FORCED }, {\n trimEnd: trimEnd,\n trimRight: trimEnd\n});\n","var log = Math.log;\n\n// `Math.log1p` method implementation\n// https://tc39.github.io/ecma262/#sec-math.log1p\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : log(1 + x);\n};\n","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./teleporter.vue?vue&type=style&index=0&id=c971b6ac&lang=scss&scoped=true&\"","'use strict';\nvar collection = require('../internals/collection');\nvar collectionWeak = require('../internals/collection-weak');\n\n// `WeakSet` constructor\n// https://tc39.github.io/ecma262/#sec-weakset-constructor\ncollection('WeakSet', function (init) {\n return function WeakSet() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionWeak);\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.active)?_c('div',[_c('view-records-general',{attrs:{\"hide-advanced\":\"\"}},[_c('vui-group-item',{attrs:{\"label\":\"Blood type:\"}},[_c('view-records-field',{attrs:{\"editable\":(_vm.editable & 2) > 0,\"path\":\"active.medical.blood_type\"}},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.$root.$data.state.editingvalue),expression:\"$root.$data.state.editingvalue\"}],on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.$set(_vm.$root.$data.state, \"editingvalue\", $event.target.multiple ? $$selectedVal : $$selectedVal[0])}}},_vm._l((_vm.choices.medical.blood_type),function(i){return _c('option',{key:i,domProps:{\"value\":i}},[_vm._v(_vm._s(i))])}),0)])],1),_c('vui-group-item',{attrs:{\"label\":\"DNA:\"}},[_c('view-records-field',{attrs:{\"editable\":(_vm.editable & 2) > 0,\"path\":\"active.medical.blood_dna\"}})],1),_c('vui-group-item',{attrs:{\"label\":\"Disabilities:\"}},[_c('view-records-field',{attrs:{\"editable\":(_vm.editable & 2) > 0,\"path\":\"active.medical.disabilities\"}},[_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.$root.$data.state.editingvalue),expression:\"$root.$data.state.editingvalue\"}],domProps:{\"value\":(_vm.$root.$data.state.editingvalue)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.$root.$data.state, \"editingvalue\", $event.target.value)}}})])],1),_c('vui-group-item',{attrs:{\"label\":\"Allergies:\"}},[_c('view-records-field',{attrs:{\"editable\":(_vm.editable & 2) > 0,\"path\":\"active.medical.allergies\"}},[_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.$root.$data.state.editingvalue),expression:\"$root.$data.state.editingvalue\"}],domProps:{\"value\":(_vm.$root.$data.state.editingvalue)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.$root.$data.state, \"editingvalue\", $event.target.value)}}})])],1),_c('vui-group-item',{attrs:{\"label\":\"Diseases:\"}},[_c('view-records-field',{attrs:{\"editable\":(_vm.editable & 2) > 0,\"path\":\"active.medical.diseases\"}},[_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.$root.$data.state.editingvalue),expression:\"$root.$data.state.editingvalue\"}],domProps:{\"value\":(_vm.$root.$data.state.editingvalue)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.$root.$data.state, \"editingvalue\", $event.target.value)}}})])],1),_c('vui-group-item',{attrs:{\"label\":\"Comments:\"}},[_vm._l((_vm.active.medical.comments),function(comment){return _c('div',{key:comment},[_vm._v(_vm._s(comment)+\" \"),((_vm.editable & 2) > 0)?_c('vui-button',{staticClass:\"danger\",attrs:{\"params\":{ removefromrecord: { value: comment, key: ['active', 'medical', 'comments'] }},\"icon\":\"trash-alt\"}}):_vm._e()],1)}),(_vm.active.medical.comments.length == 0)?_c('div',[_vm._v(\"There are no comments.\")]):_vm._e(),((_vm.editable & 2) > 0)?_c('view-records-field',{attrs:{\"edit-button\":\"Add\"},on:{\"save\":function($event){return _vm.add('active.medical.comments', $event)}}}):_vm._e()],2),_c('vui-group-item',{attrs:{\"label\":\"Notes:\"}},[_c('view-records-field',{attrs:{\"editable\":(_vm.editable & 2) > 0,\"path\":\"active.medical.notes\"}},[_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.$root.$data.state.editingvalue),expression:\"$root.$data.state.editingvalue\"}],domProps:{\"value\":(_vm.$root.$data.state.editingvalue)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.$root.$data.state, \"editingvalue\", $event.target.value)}}})])],1)],1)],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","