diff --git a/.gitmodules b/.gitmodules
index bccb30d37daa129e3d01aa8d002019948b33c443..5f132b30f3cd396d3bd6dae88dc12fb74263f805 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,12 +1,15 @@
 [submodule "lib/pybind11"]
 	path = lib/pybind11
 	url = https://github.com/pybind/pybind11
-[submodule "lib/s2client-api"]
-	path = lib/s2client-api
-	url = https://github.com/Blizzard/s2client-api.git
+[submodule "lib/cpp-sc2"]
+	path = lib/cpp-sc2
+	url = https://github.com/cpp-sc2/cpp-sc2.git
 [submodule "lib/sc2-gamedata"]
 	path = lib/sc2-gamedata
 	url = https://github.com/noorus/sc2-gamedata.git
 [submodule "lib/json"]
 	path = lib/json
 	url = https://github.com/nlohmann/json.git
+[submodule "lib/sc2-techtree"]
+	path = lib/sc2-techtree
+	url = https://github.com/BurnySc2/sc2-techtree.git
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f92edcefc95300fa7136682acc7fea669f1044cd..6a79da24e0e71bc955c0d424ecbfa47ca4db98a0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -14,7 +14,7 @@ set(BUILD_API_EXAMPLES OFF CACHE INTERNAL "" FORCE)
 set(BUILD_API_TESTS OFF CACHE INTERNAL "" FORCE)
 
 add_subdirectory(lib/pybind11)
-add_subdirectory(lib/s2client-api)
+add_subdirectory(lib/cpp-sc2)
 add_subdirectory(src)
 add_subdirectory(python-api-src)
 
diff --git a/ExtendAPI.md b/ExtendAPI.md
new file mode 100644
index 0000000000000000000000000000000000000000..005e30f838b029c9b077a691b68c17f562cb55a9
--- /dev/null
+++ b/ExtendAPI.md
@@ -0,0 +1,28 @@
+# Extending the API
+This is a guide for extending the API and adding more functionality to the courses TDDE25 and TDDD92.
+
+If a function already exist but you can't use it in python, check and see if it's exist in the library files (pybind).
+
+1. Create a declaration of your function in the header file.
+2. Create a definition of your function in the source file.
+3. Depending on which object you decided to extend, you should also add this function to the library file. The library is the pybind, making it possible to use your function in python.
+4. Update the documentation. There are instructions on how you build and test the documentation.
+
+
+Example:
+We want to add function to unit, returning a bool depending on if it's holding a mineral. We have discovered a function in the SC2 API containing this information (sc2_client.ccp). This is a helper function, it doesn't belong to any object.
+
+1. In unit.h: ```bool isCarryingMinerals() const;```
+2. In unit.cpp: ```bool Unit::isCarryingMinerals() const
+{
+	return sc2::IsCarryingMinerals(*m_unit);
+}```
+We can access m_unit in the unit file and with sc2::Function() we can access any function in the blizzard API that doesn't belong to any object. The same goes for any object, for example sc2::Point3D makes us able to access the Point3D object.
+3. In lib_unit.cpp: ```.def_property_readonly("is_carrying_minerals", &Unit::isCarryingMinerals)```
+4. In the folder named docs we update the documentation. In this case, we update the file unit.rst.
+
+Common problems:
+1. The return in python is a memory address:
+    Make sure that it returns a correct type.
+2. The compiler complains about files I have not even touched:
+   Make sure that the startUp is library and you have release x64. If you just added a new function in pybind, check it.
diff --git a/docs/conf.py b/docs/conf.py
index 8b78124b473ebe0cd9134855b361fce16d7050c4..8607f50a47d56ddd778917738e9cb0d6d3865818 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -12,7 +12,9 @@
 # add these directories to sys.path here. If the directory is relative to the
 # documentation root, use os.path.abspath to make it absolute, like shown here.
 
+# Two paths here to work on both Windows and Linux
 import sys,os
+sys.path.append(os.path.join(os.getcwd(), "..", "build", "python-api-src", "Release"))
 sys.path.append(os.path.join(os.getcwd(), "..", "build", "python-api-src"))
 
 # -- Project information -----------------------------------------------------
diff --git a/docs/constants.rst b/docs/constants.rst
index fd97774e4cc502c0b5c2733e2e587c19d8911069..f75b8535ddfbc859aa49b75c7110fb012100ea6d 100644
--- a/docs/constants.rst
+++ b/docs/constants.rst
@@ -25,6 +25,13 @@ Difficulty
    :members:
    :undoc-members:
 
+AIBuild
+-------
+
+.. autoclass:: library.AIBuild
+   :members:
+   :undoc-members:
+
 Race
 ----
 
diff --git a/docs/gettingstarted.rst b/docs/gettingstarted.rst
index 4d8997451b8d86f1eff424f2f96741d21f56d756..037793e338f9110230000d487491afb6ac174866 100644
--- a/docs/gettingstarted.rst
+++ b/docs/gettingstarted.rst
@@ -127,6 +127,14 @@ However, your bot might will probably be able to play the game faster. If you
 remove or comment out this line the game will run as fast as possible, only 
 waiting for your bot to return from `on_step`.
 
+If you want to train your agent on certain type of bots. For example, If we
+want the opponent to focus on air strategy. You can add the
+following line to the bot.
+
+.. code-block:: python
+
+   participant_2 = create_computer(Race.Random, Difficulty.Easy, AIBuild.Air)
+
 We can also play two bots against each other by changing the row:
 
 .. code-block:: python
diff --git a/docs/helpers.rst b/docs/helpers.rst
index 61065d3a8400b15f8bb235ab6a0de0de48f5b24b..15cc665061d3ba8606024b55399998a459dd264b 100644
--- a/docs/helpers.rst
+++ b/docs/helpers.rst
@@ -62,6 +62,9 @@ BaseLocation
    .. autoattribute:: geysers
 
    .. automethod:: get_ground_distance
+      
+      This function uses BFS and moves in a vertical and horizontal position. Because of this,
+      the distance might overshoot compared to calculating it with Pythagoras' theorem.
 
    .. automethod:: is_occupied_by_player
 
@@ -81,8 +84,13 @@ TechTree
 
    This class has some invalid information by default, this can be corrected by
    placing the file `techtree.json` in the working directory. The
-   `techtree.json` files are available here_, select the lastest version. A
-   recent file is included in the `template repository`_.
+   `techtree.json` files are available here_, select the lastest version.
+   A techtree for SC2 version >=4.10 is now available (not fully tested yet),
+   this can be found under the folder data in this link_.
+   A recent file is included in the `template repository`_.
+
+   Instead of using TechTree, it's possible to use the functions in UnitType for
+   structure, etc. In IDABot there is functions for getting data about upgrades.	
 
    .. method:: get_data(argument) -> library.TypeData
 
@@ -90,6 +98,7 @@ TechTree
       an instance of the class :class:`library.CCUpgrade`, depending on what
       information is wanted.
 
+.. _link: https://github.com/BurnySc2/sc2-techtree
 .. _here: https://github.com/noorus/sc2-gamedata
 .. _`template repository`: https://gitlab.liu.se/starcraft-ai-course/sc2-python-bot
 
@@ -100,6 +109,7 @@ TypeData
    :members:
    :undoc-members:
 
+
 .. TODO: Types for all fields would be nice, is required_units List[UnitType] or List[UNIT_TYPEID]?
 
 MapTools
@@ -120,8 +130,12 @@ MapTools
    this suffix uses the same coordinate system as the game, i.e. world 
    coordinates.
 
+   The top three methods below takes in a Point2D, but it's possible to
+   send in x and y as floats instead of Point2D.
+
    .. automethod:: draw_box
    .. automethod:: draw_circle
+   .. automethod:: draw_resource_sphere
    .. automethod:: draw_line
    .. automethod:: draw_text
    .. automethod:: draw_text_screen
diff --git a/docs/idabot.rst b/docs/idabot.rst
index 2a3b0c0d2f9c1339bb38c7ea32f358afc5f71ae9..ad95df7bd7b4bcf3b5a9208f911bda67ebddf81f 100644
--- a/docs/idabot.rst
+++ b/docs/idabot.rst
@@ -59,6 +59,39 @@ IDABot
 
       Sends the string 'message' to the game chat
 
+   .. method:: IDABot.has_creep(self, Point2D) -> Boolean
+
+      Returns if the position has a creep
+
+   .. method:: IDABot.move_camera(self, Point2DI)
+
+      Move the camera to the position
+
+   .. method:: IDABot.ability_for_upgrade(self, UpgradeID)
+
+      Ability that researches this upgrade
+
+      Example: If we send in UPGRADE_ID.BANSHEECLOAK, it will return
+      ABILITY_ID.RESEARCH_BANSHEECLOAKINGFIELD. In this case,
+      the unit of scv has the ability for this. You can then use the
+      unit.ability(AbilityID) on the scv for creating the upgrade.
+
+   .. method:: IDABot.upgrade_mineral_cost(self, UpgradeID)
+
+      Mineral cost of researching the upgrade
+
+   .. method:: IDABot.upgrade_gas_cost(self, UpgradeID)
+
+      Vespene/gas cost of researching the upgrade
+
+   .. method:: IDABot.upgrade_research_time(self, UpgradeID)
+
+      Time in GameLoops to research this upgrade
+
+   .. method:: IDABot.effect_radius(self, EffectID)
+
+      Size of the circle the effect impacts
+
    Attributes:
 
    .. autoattribute:: minerals
@@ -70,3 +103,91 @@ IDABot
    .. autoattribute:: max_supply
 
    .. autoattribute:: current_frame
+
+Debug
+-----
+
+When developing AI-methods or when simply having a problem.
+The debug-methods are a great tool for speeding up the process.
+
+   .. method:: IDABot.debug_create_unit(self, UnitTypeID, Point2D, Player Constant, Int)
+
+      This method creates the nr (INT) of units on the position :class:`library.Point2D`, the unit 
+      belongs to the Player Constant
+
+   .. method:: IDABot.debug_kill_unit(self, Unit)
+
+      Kills the :class:`library.Unit`
+
+   .. method:: IDABot.debug_show_map(self)
+
+      Make the entire map visible
+
+   .. method:: IDABot.debug_fast_build(self)
+
+      Set the build time in game to 1
+  
+   .. method:: IDABot.debug_enemy_control(self)
+
+      Gives the player full control over the enemy
+
+   .. method:: IDABot.debug_fast_build(self)
+
+      Set the build time in game to 1
+
+   .. method:: IDABot.debug_ignore_food(self)
+
+      Ignore food in game
+
+   .. method:: IDABot.debug_ignore_resource_cost(self)
+
+      Ignore the resource cost in game. Everything cost 0 resources
+
+   .. method:: IDABot.debug_give_all_resources(self)
+
+      Set the mineral and vespene gas to 5000
+   
+   .. method:: IDABot.debug_god_mode(self)
+
+      Give yourself god mode in the game
+
+   .. method:: IDABot.debug_ignore_mineral(self)
+
+      Ignore the mineral cost in the game
+
+   .. method:: IDABot.debug_no_cooldowns(self)
+
+      Deactivate cooldowns (Basically setting them to 0)
+
+   .. method:: IDABot.debug_give_all_tech(self)
+
+      Give yourself all tech
+
+   .. method:: IDABot.debug_give_all_upgrades(self)
+
+      Give yourself all upgrades
+
+   .. method:: IDABot.debug_set_score(self, Float)
+
+      Set the player score in game
+
+   .. method:: IDABot.debug_end_game(self, Boolean)
+
+      End the game, if the Boolean is True then victory.
+      If False, defeat.
+
+   .. method:: IDABot.debug_set_energy(self, Float, Unit)
+
+      Set the amount (Float) of energy to the :class:`library.Unit`
+      The maximum depends on the unit maxenergy.
+      Note: This is not in percent of the unit energy.
+      Same goes for life and shields.
+
+   .. method:: IDABot.debug_set_life(self, Float, Unit)
+
+      Set the amount (Float) of life to the unit
+
+   .. method:: IDABot.debug_set_shields(self, Float, Unit)
+
+      Set the amount (Float) of shield to the unit
+
diff --git a/docs/types.rst b/docs/types.rst
index a53e024d9c8e71f2701e594aaa37bbff852ab481..dd9986f59ffb4543fb5b1165a395d28ff6b5a251 100644
--- a/docs/types.rst
+++ b/docs/types.rst
@@ -6,9 +6,13 @@ For more information about a certain unit type, the wrapper class
 :class:`library.UnitType` can be used.
 
 For a full list of all abilities and upgrades, see :class:`library.ABILITY_ID`
-and :class:`library.UPGRADE_ID` respectively. Note that these does not have any
+, :class:`library.UPGRADE_ID` and :class:`library.EFFECT_ID` respectively. Note that these does not have any
 wrapper classes for them.
 
+If any of the ID's doesn't respond with the game. Before contacting the labassistent, check the game version
+and the compatibility through Liquipedia. Some ID's might be left after a patch and is not available in
+the game anymore.
+
 UnitType
 --------
 
@@ -40,3 +44,12 @@ UPGRADE_ID
 .. autoclass:: library.UPGRADE_ID 	
    :members:
    :undoc-members:
+
+EFFECT_ID
+----------
+EffectID is for things like ravager bile, or fungal or even a scan.
+
+.. autoclass:: library.EFFECT_ID 	
+   :members:
+   :undoc-members:
+
diff --git a/docs/unit.rst b/docs/unit.rst
index d298b02253208bd1905dfdd18e0aabf3010d812f..16aa1d46c7c8d7ef33073845d400bb05cf11f9ee 100644
--- a/docs/unit.rst
+++ b/docs/unit.rst
@@ -32,11 +32,14 @@ Unit
 
    .. autoattribute:: hit_points 
    .. autoattribute:: max_hit_points
+      Returns the max health	
+   .. autoattribute:: max_shields
+   .. autoattribute:: max_energy
    .. autoattribute:: id 
    .. autoattribute:: is_alive 
    .. autoattribute:: is_blip
 
-      Returns true if unit is a "blip" - a ping on the map.
+      Returns true if unit is a "blip" - a ping on the map
 
    .. autoattribute:: is_being_constructed 
       
@@ -56,7 +59,7 @@ Unit
    .. attribute:: Unit.player 
 
       Returns the constant corresponding to player which this unit belongs to.
-      See :ref:`playerconstants` for more information.
+      See :ref:`playerconstants` for more information
 
    .. autoattribute:: position 
    .. autoattribute:: current_ability_id
@@ -77,19 +80,36 @@ Unit
    
       Returns if this unit is currently holding minerals
 
+   .. autoattribute:: is_carrying_gas
+
+      Returns if this unit is currently holding gas
+
    .. attribute:: Unit.target
 
-      Returns target if unit has one, otherwise will fail the assertion (make sure not to call this unless certain that the unit has a target!).
+      Returns target if unit has one, otherwise will fail the assertion (make sure not to call this unless certain that the unit has a target!)
+
+   .. autoattribute:: gas_left_in_refinery
+
+      This is used on the geyser.	
+      Returns the amount of gas left in refinery
+
+   .. autoattribute:: minerals_left_in_mineralfield
+
+      Returns the amount of minerals left in mineralfield
+
+   .. autoattribute:: owner
+
+      Returns the Player ID, the owner of the unit
 
    Methods:
 
    .. automethod:: ability
 
-      Call an ability directly, different abilities has different targets. Some target the unit itself (no argument), target a point (Point2D as argument) and some target a Unit (instance of Unit as argument).
+      Call an ability directly, different abilities has different targets. Some target the unit itself (no argument), target a point (Point2D as argument) and some target a Unit (instance of Unit as argument)
 
    .. method:: Unit.is_constructing(self, unit_type: library.UnitType)
 
-      Returns true if the unit is currently constructing another unit of type `unit_type`. Note that `unit_type` needs to be an instance of :class:`library.UnitType`.
+      Returns true if the unit is currently constructing another unit of type `unit_type`. Note that `unit_type` needs to be an instance of :class:`library.UnitType`
 
    .. automethod:: stop
    .. automethod:: attack_unit
@@ -107,7 +127,7 @@ Unit
    .. automethod:: morph
    .. method:: Unit.has_target
 
-      Returns True if the target has a valid target and False otherwise.
+      Returns True if the target has a valid target and False otherwise
 
    .. automethod:: hold_position
    .. automethod:: stop_dance
diff --git a/lib/cpp-sc2 b/lib/cpp-sc2
new file mode 160000
index 0000000000000000000000000000000000000000..f8bbf67bb3284bdf8f82544b464f4692f4f451ce
--- /dev/null
+++ b/lib/cpp-sc2
@@ -0,0 +1 @@
+Subproject commit f8bbf67bb3284bdf8f82544b464f4692f4f451ce
diff --git a/lib/s2client-api b/lib/s2client-api
deleted file mode 160000
index d9ba0a33d6ce9d233c2a4ee988360c188fbe9dbf..0000000000000000000000000000000000000000
--- a/lib/s2client-api
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit d9ba0a33d6ce9d233c2a4ee988360c188fbe9dbf
diff --git a/lib/sc2-techtree b/lib/sc2-techtree
new file mode 160000
index 0000000000000000000000000000000000000000..c92eaf8d8cee8bda4a19f95d81b43d65f23174a9
--- /dev/null
+++ b/lib/sc2-techtree
@@ -0,0 +1 @@
+Subproject commit c92eaf8d8cee8bda4a19f95d81b43d65f23174a9
diff --git a/python-api-src/CMakeLists.txt b/python-api-src/CMakeLists.txt
index d2d99321846b3d88be23729a773e9f254cf4b06d..16bb62042b6a08f6a5c4da7d377e818d045415f6 100644
--- a/python-api-src/CMakeLists.txt
+++ b/python-api-src/CMakeLists.txt
@@ -1,7 +1,7 @@
 include_directories(SYSTEM
-    ${PROJECT_SOURCE_DIR}/lib/s2client-api/include
-    ${PROJECT_SOURCE_DIR}/lib/s2client-api/contrib/protobuf/src
-    ${PROJECT_BINARY_DIR}/lib/s2client-api/generated
+    ${PROJECT_SOURCE_DIR}/lib/cpp-sc2/include
+    ${PROJECT_SOURCE_DIR}/lib/cpp-sc2/contrib/protobuf/src
+    ${PROJECT_BINARY_DIR}/lib/cpp-sc2/generated
     ${PROJECT_SOURCE_DIR}/lib/json/include
 )
 
@@ -10,7 +10,7 @@ file(GLOB BOT_SOURCES "../src/*.cpp" "../src/*.h" "../src/*.hpp")
 
 file(GLOB LIBRARY_SOURCES "*.cpp" "*.h")
 
-link_directories(${PROJECT_BINARY_DIR}/s2client-api/bin)
+link_directories(${PROJECT_BINARY_DIR}/cpp-sc2/bin)
 
 # Enable compilation of the SC2 version of the bot code
 # TODO: Remove all remaining BW code
diff --git a/python-api-src/lib_building_placer.cpp b/python-api-src/lib_building_placer.cpp
index b925c749ab99620325d6f9fd6195b60d37ee1024..f2aed9730fc09bea3c798a35ddc9dfcf06e7dc7e 100644
--- a/python-api-src/lib_building_placer.cpp
+++ b/python-api-src/lib_building_placer.cpp
@@ -6,8 +6,8 @@ void define_building_placer(py::module & m)
 {
     py::class_<BuildingPlacer>(m, "BuildingPlacer")
         .def("can_build_here", &BuildingPlacer::canBuildHere, "x"_a, "y"_a, "unit_type"_a)
-        .def("can_build_here_with_spaces", &BuildingPlacer::canBuildHereWithSpace, "x"_a, "y"_a, "unit_type"_a, "build_distance"_a)
-        .def("get_build_location_near", &BuildingPlacer::getBuildLocationNear, "point2di"_a, "unit_type"_a, "build_distance"_a = 2, "search_count"_a = 1000)
-        .def("reserve_tiles", &BuildingPlacer::reserveTiles, "x"_a, "y"_a, "width"_a, "height"_a)
-        .def("free_tiles", &BuildingPlacer::freeTiles, "x"_a, "y"_a, "width"_a, "height"_a);
+        .def("can_build_here_with_spaces", &BuildingPlacer::canBuildHereWithSpace, "Creates a square with the help of x, y, distance_to_building and the size of the unit_type. Good approach if we later gonna make a addon to the building.", "x"_a, "y"_a, "unit_type"_a, "distance_to_building"_a)
+        .def("get_build_location_near", &BuildingPlacer::getBuildLocationNear, "The search_count is how many building we should check (nearby buildings, instead of i < size, we can switch size to search_count). distance_to_building is the distance to the closest building.", "point2di"_a, "unit_type"_a, "distance_to_building"_a = 2, "search_count"_a = 1000)
+        .def("reserve_tiles", &BuildingPlacer::reserveTiles, "It's possible to reserve tiles, which makes it impossible to build at the position given by x and y.", "x"_a, "y"_a, "width"_a, "height"_a)
+        .def("free_tiles", &BuildingPlacer::freeTiles,"Free the tile (x, y) from reservation", "x"_a, "y"_a, "width"_a, "height"_a);
 }
\ No newline at end of file
diff --git a/python-api-src/lib_map_tools.cpp b/python-api-src/lib_map_tools.cpp
index 65c421d80f8d6ccbf520bb05a2771f1d74fdce84..b871070a089ad951c63e60e28e59d61a3fee3701 100644
--- a/python-api-src/lib_map_tools.cpp
+++ b/python-api-src/lib_map_tools.cpp
@@ -20,6 +20,7 @@ void define_map_tools(py::module & m)
         .def("draw_line", py::overload_cast<const CCPosition &, const CCPosition &, const CCColor &>(&MapTools::drawLine, py::const_), py::arg("start"), py::arg("stop"), py::arg("color") = sc2::Colors::White)
         .def("draw_box", py::overload_cast<const CCPosition &, const CCPosition &, const CCColor &>(&MapTools::drawBox, py::const_), py::arg("top_left"), py::arg("bottom_right"), py::arg("color") = sc2::Colors::White)
         .def("draw_circle", py::overload_cast<const CCPosition &, CCPositionType, const CCColor &>(&MapTools::drawCircle, py::const_), py::arg("center"), py::arg("radius"), py::arg("color") = sc2::Colors::White)
+		.def("draw_resource_sphere", &MapTools::drawResourceSphere, py::arg("center"), py::arg("radius"), py::arg("color") = sc2::Colors::White)
         .def("draw_text", &MapTools::drawText, "position"_a, "text"_a, "color"_a = sc2::Colors::White)
         .def("draw_text_screen", &MapTools::drawTextScreen, "percentage_x"_a, "percentage_y"_a, "text"_a, "color"_a = sc2::Colors::White)
         .def("is_valid_tile", py::overload_cast<int, int>(&MapTools::isValidTile, py::const_), "x"_a, "y"_a)
diff --git a/python-api-src/lib_sc2_typeenums.cpp b/python-api-src/lib_sc2_typeenums.cpp
index 235056ce29cc1711fc5297aa93dd85ab90013fc3..9fd2551a7050a2534e1fd430b56d2d09b5914fa8 100644
--- a/python-api-src/lib_sc2_typeenums.cpp
+++ b/python-api-src/lib_sc2_typeenums.cpp
@@ -7,226 +7,2075 @@ namespace py = pybind11;
 void define_typeenums(py::module & m)
 {
     py::enum_<sc2::UNIT_TYPEID>(m, "UNIT_TYPEID")
-        .value("INVALID", sc2::UNIT_TYPEID::INVALID)
-        .value("TERRAN_ARMORY", sc2::UNIT_TYPEID::TERRAN_ARMORY)
-        .value("TERRAN_AUTOTURRET", sc2::UNIT_TYPEID::TERRAN_AUTOTURRET)
-        .value("TERRAN_BANSHEE", sc2::UNIT_TYPEID::TERRAN_BANSHEE)
-        .value("TERRAN_BARRACKS", sc2::UNIT_TYPEID::TERRAN_BARRACKS)
-        .value("TERRAN_BARRACKSFLYING", sc2::UNIT_TYPEID::TERRAN_BARRACKSFLYING)
-        .value("TERRAN_BARRACKSREACTOR", sc2::UNIT_TYPEID::TERRAN_BARRACKSREACTOR)
-        .value("TERRAN_BARRACKSTECHLAB", sc2::UNIT_TYPEID::TERRAN_BARRACKSTECHLAB)
-        .value("TERRAN_BATTLECRUISER", sc2::UNIT_TYPEID::TERRAN_BATTLECRUISER)
-        .value("TERRAN_BUNKER", sc2::UNIT_TYPEID::TERRAN_BUNKER)
-        .value("TERRAN_COMMANDCENTER", sc2::UNIT_TYPEID::TERRAN_COMMANDCENTER)
-        .value("TERRAN_COMMANDCENTERFLYING", sc2::UNIT_TYPEID::TERRAN_COMMANDCENTERFLYING)
-        .value("TERRAN_CYCLONE", sc2::UNIT_TYPEID::TERRAN_CYCLONE)
-        .value("TERRAN_ENGINEERINGBAY", sc2::UNIT_TYPEID::TERRAN_ENGINEERINGBAY)
-        .value("TERRAN_FACTORY", sc2::UNIT_TYPEID::TERRAN_FACTORY)
-        .value("TERRAN_FACTORYFLYING", sc2::UNIT_TYPEID::TERRAN_FACTORYFLYING)
-        .value("TERRAN_FACTORYREACTOR", sc2::UNIT_TYPEID::TERRAN_FACTORYREACTOR)
-        .value("TERRAN_FACTORYTECHLAB", sc2::UNIT_TYPEID::TERRAN_FACTORYTECHLAB)
-        .value("TERRAN_FUSIONCORE", sc2::UNIT_TYPEID::TERRAN_FUSIONCORE)
-        .value("TERRAN_GHOST", sc2::UNIT_TYPEID::TERRAN_GHOST)
-        .value("TERRAN_GHOSTACADEMY", sc2::UNIT_TYPEID::TERRAN_GHOSTACADEMY)
-        .value("TERRAN_HELLION", sc2::UNIT_TYPEID::TERRAN_HELLION)
-        .value("TERRAN_HELLIONTANK", sc2::UNIT_TYPEID::TERRAN_HELLIONTANK)
-        .value("TERRAN_LIBERATOR", sc2::UNIT_TYPEID::TERRAN_LIBERATOR)
-        .value("TERRAN_LIBERATORAG", sc2::UNIT_TYPEID::TERRAN_LIBERATORAG)
-        .value("TERRAN_MARAUDER", sc2::UNIT_TYPEID::TERRAN_MARAUDER)
-        .value("TERRAN_MARINE", sc2::UNIT_TYPEID::TERRAN_MARINE)
-        .value("TERRAN_MEDIVAC", sc2::UNIT_TYPEID::TERRAN_MEDIVAC)
-        .value("TERRAN_MISSILETURRET", sc2::UNIT_TYPEID::TERRAN_MISSILETURRET)
-        .value("TERRAN_MULE", sc2::UNIT_TYPEID::TERRAN_MULE)
-        .value("TERRAN_ORBITALCOMMAND", sc2::UNIT_TYPEID::TERRAN_ORBITALCOMMAND)
-        .value("TERRAN_ORBITALCOMMANDFLYING", sc2::UNIT_TYPEID::TERRAN_ORBITALCOMMANDFLYING)
-        .value("TERRAN_PLANETARYFORTRESS", sc2::UNIT_TYPEID::TERRAN_PLANETARYFORTRESS)
-        .value("TERRAN_RAVEN", sc2::UNIT_TYPEID::TERRAN_RAVEN)
-        .value("TERRAN_REAPER", sc2::UNIT_TYPEID::TERRAN_REAPER)
-        .value("TERRAN_REFINERY", sc2::UNIT_TYPEID::TERRAN_REFINERY)
-        .value("TERRAN_SCV", sc2::UNIT_TYPEID::TERRAN_SCV)
-        .value("TERRAN_SENSORTOWER", sc2::UNIT_TYPEID::TERRAN_SENSORTOWER)
-        .value("TERRAN_SIEGETANK", sc2::UNIT_TYPEID::TERRAN_SIEGETANK)
-        .value("TERRAN_SIEGETANKSIEGED", sc2::UNIT_TYPEID::TERRAN_SIEGETANKSIEGED)
-        .value("TERRAN_STARPORT", sc2::UNIT_TYPEID::TERRAN_STARPORT)
-        .value("TERRAN_STARPORTFLYING", sc2::UNIT_TYPEID::TERRAN_STARPORTFLYING)
-        .value("TERRAN_STARPORTREACTOR", sc2::UNIT_TYPEID::TERRAN_STARPORTREACTOR)
-        .value("TERRAN_STARPORTTECHLAB", sc2::UNIT_TYPEID::TERRAN_STARPORTTECHLAB)
-        .value("TERRAN_SUPPLYDEPOT", sc2::UNIT_TYPEID::TERRAN_SUPPLYDEPOT)
-        .value("TERRAN_SUPPLYDEPOTLOWERED", sc2::UNIT_TYPEID::TERRAN_SUPPLYDEPOTLOWERED)
-        .value("TERRAN_THOR", sc2::UNIT_TYPEID::TERRAN_THOR)
-        .value("TERRAN_THORAP", sc2::UNIT_TYPEID::TERRAN_THORAP)
-        .value("TERRAN_VIKINGASSAULT", sc2::UNIT_TYPEID::TERRAN_VIKINGASSAULT)
-        .value("TERRAN_VIKINGFIGHTER", sc2::UNIT_TYPEID::TERRAN_VIKINGFIGHTER)
-        .value("TERRAN_WIDOWMINE", sc2::UNIT_TYPEID::TERRAN_WIDOWMINE)
-        .value("TERRAN_WIDOWMINEBURROWED", sc2::UNIT_TYPEID::TERRAN_WIDOWMINEBURROWED)
-        .value("TERRAN_KD8CHARGE", sc2::UNIT_TYPEID::TERRAN_KD8CHARGE)
-        .value("TERRAN_NUKE", sc2::UNIT_TYPEID::TERRAN_NUKE)
-        .value("TERRAN_POINTDEFENSEDRONE", sc2::UNIT_TYPEID::TERRAN_POINTDEFENSEDRONE)
-        .value("TERRAN_REACTOR", sc2::UNIT_TYPEID::TERRAN_REACTOR)
-        .value("TERRAN_TECHLAB", sc2::UNIT_TYPEID::TERRAN_TECHLAB)
-        .value("ZERG_BANELING", sc2::UNIT_TYPEID::ZERG_BANELING)
-        .value("ZERG_BANELINGBURROWED", sc2::UNIT_TYPEID::ZERG_BANELINGBURROWED)
-        .value("ZERG_BANELINGCOCOON", sc2::UNIT_TYPEID::ZERG_BANELINGCOCOON)
-        .value("ZERG_BANELINGNEST", sc2::UNIT_TYPEID::ZERG_BANELINGNEST)
-        .value("ZERG_BROODLING", sc2::UNIT_TYPEID::ZERG_BROODLING)
-        .value("ZERG_BROODLORD", sc2::UNIT_TYPEID::ZERG_BROODLORD)
-        .value("ZERG_BROODLORDCOCOON", sc2::UNIT_TYPEID::ZERG_BROODLORDCOCOON)
-        .value("ZERG_CHANGELING", sc2::UNIT_TYPEID::ZERG_CHANGELING)
-        .value("ZERG_CHANGELINGMARINE", sc2::UNIT_TYPEID::ZERG_CHANGELINGMARINE)
-        .value("ZERG_CHANGELINGMARINESHIELD", sc2::UNIT_TYPEID::ZERG_CHANGELINGMARINESHIELD)
-        .value("ZERG_CHANGELINGZEALOT", sc2::UNIT_TYPEID::ZERG_CHANGELINGZEALOT)
-        .value("ZERG_CHANGELINGZERGLING", sc2::UNIT_TYPEID::ZERG_CHANGELINGZERGLING)
-        .value("ZERG_CHANGELINGZERGLINGWINGS", sc2::UNIT_TYPEID::ZERG_CHANGELINGZERGLINGWINGS)
-        .value("ZERG_CORRUPTOR", sc2::UNIT_TYPEID::ZERG_CORRUPTOR)
-        .value("ZERG_CREEPTUMOR", sc2::UNIT_TYPEID::ZERG_CREEPTUMOR)
-        .value("ZERG_CREEPTUMORBURROWED", sc2::UNIT_TYPEID::ZERG_CREEPTUMORBURROWED)
-        .value("ZERG_CREEPTUMORQUEEN", sc2::UNIT_TYPEID::ZERG_CREEPTUMORQUEEN)
-        .value("ZERG_DRONE", sc2::UNIT_TYPEID::ZERG_DRONE)
-        .value("ZERG_DRONEBURROWED", sc2::UNIT_TYPEID::ZERG_DRONEBURROWED)
-        .value("ZERG_EGG", sc2::UNIT_TYPEID::ZERG_EGG)
-        .value("ZERG_EVOLUTIONCHAMBER", sc2::UNIT_TYPEID::ZERG_EVOLUTIONCHAMBER)
-        .value("ZERG_EXTRACTOR", sc2::UNIT_TYPEID::ZERG_EXTRACTOR)
-        .value("ZERG_GREATERSPIRE", sc2::UNIT_TYPEID::ZERG_GREATERSPIRE)
-        .value("ZERG_HATCHERY", sc2::UNIT_TYPEID::ZERG_HATCHERY)
-        .value("ZERG_HIVE", sc2::UNIT_TYPEID::ZERG_HIVE)
-        .value("ZERG_HYDRALISK", sc2::UNIT_TYPEID::ZERG_HYDRALISK)
-        .value("ZERG_HYDRALISKBURROWED", sc2::UNIT_TYPEID::ZERG_HYDRALISKBURROWED)
-        .value("ZERG_HYDRALISKDEN", sc2::UNIT_TYPEID::ZERG_HYDRALISKDEN)
-        .value("ZERG_INFESTATIONPIT", sc2::UNIT_TYPEID::ZERG_INFESTATIONPIT)
-        .value("ZERG_INFESTEDTERRANSEGG", sc2::UNIT_TYPEID::ZERG_INFESTEDTERRANSEGG)
-        .value("ZERG_INFESTOR", sc2::UNIT_TYPEID::ZERG_INFESTOR)
-        .value("ZERG_INFESTORBURROWED", sc2::UNIT_TYPEID::ZERG_INFESTORBURROWED)
-        .value("ZERG_INFESTORTERRAN", sc2::UNIT_TYPEID::ZERG_INFESTORTERRAN)
-        .value("ZERG_LAIR", sc2::UNIT_TYPEID::ZERG_LAIR)
-        .value("ZERG_LARVA", sc2::UNIT_TYPEID::ZERG_LARVA)
-        .value("ZERG_LOCUSTMP", sc2::UNIT_TYPEID::ZERG_LOCUSTMP)
-        .value("ZERG_LOCUSTMPFLYING", sc2::UNIT_TYPEID::ZERG_LOCUSTMPFLYING)
-        .value("ZERG_LURKERDENMP", sc2::UNIT_TYPEID::ZERG_LURKERDENMP)
-        .value("ZERG_LURKERMP", sc2::UNIT_TYPEID::ZERG_LURKERMP)
-        .value("ZERG_LURKERMPBURROWED", sc2::UNIT_TYPEID::ZERG_LURKERMPBURROWED)
-        .value("ZERG_LURKERMPEGG", sc2::UNIT_TYPEID::ZERG_LURKERMPEGG)
-        .value("ZERG_MUTALISK", sc2::UNIT_TYPEID::ZERG_MUTALISK)
-        .value("ZERG_NYDUSCANAL", sc2::UNIT_TYPEID::ZERG_NYDUSCANAL)
-        .value("ZERG_NYDUSNETWORK", sc2::UNIT_TYPEID::ZERG_NYDUSNETWORK)
-        .value("ZERG_OVERLORD", sc2::UNIT_TYPEID::ZERG_OVERLORD)
-        .value("ZERG_OVERLORDCOCOON", sc2::UNIT_TYPEID::ZERG_OVERLORDCOCOON)
-        .value("ZERG_OVERLORDTRANSPORT", sc2::UNIT_TYPEID::ZERG_OVERLORDTRANSPORT)
-        .value("ZERG_OVERSEER", sc2::UNIT_TYPEID::ZERG_OVERSEER)
-        .value("ZERG_QUEEN", sc2::UNIT_TYPEID::ZERG_QUEEN)
-        .value("ZERG_QUEENBURROWED", sc2::UNIT_TYPEID::ZERG_QUEENBURROWED)
-        .value("ZERG_RAVAGER", sc2::UNIT_TYPEID::ZERG_RAVAGER)
-        .value("ZERG_RAVAGERCOCOON", sc2::UNIT_TYPEID::ZERG_RAVAGERCOCOON)
-        .value("ZERG_ROACH", sc2::UNIT_TYPEID::ZERG_ROACH)
-        .value("ZERG_ROACHBURROWED", sc2::UNIT_TYPEID::ZERG_ROACHBURROWED)
-        .value("ZERG_ROACHWARREN", sc2::UNIT_TYPEID::ZERG_ROACHWARREN)
-        .value("ZERG_SPAWNINGPOOL", sc2::UNIT_TYPEID::ZERG_SPAWNINGPOOL)
-        .value("ZERG_SPINECRAWLER", sc2::UNIT_TYPEID::ZERG_SPINECRAWLER)
-        .value("ZERG_SPINECRAWLERUPROOTED", sc2::UNIT_TYPEID::ZERG_SPINECRAWLERUPROOTED)
-        .value("ZERG_SPIRE", sc2::UNIT_TYPEID::ZERG_SPIRE)
-        .value("ZERG_SPORECRAWLER", sc2::UNIT_TYPEID::ZERG_SPORECRAWLER)
-        .value("ZERG_SPORECRAWLERUPROOTED", sc2::UNIT_TYPEID::ZERG_SPORECRAWLERUPROOTED)
-        .value("ZERG_SWARMHOSTBURROWEDMP", sc2::UNIT_TYPEID::ZERG_SWARMHOSTBURROWEDMP)
-        .value("ZERG_SWARMHOSTMP", sc2::UNIT_TYPEID::ZERG_SWARMHOSTMP)
-        .value("ZERG_TRANSPORTOVERLORDCOCOON", sc2::UNIT_TYPEID::ZERG_TRANSPORTOVERLORDCOCOON)
-        .value("ZERG_ULTRALISK", sc2::UNIT_TYPEID::ZERG_ULTRALISK)
-        .value("ZERG_ULTRALISKCAVERN", sc2::UNIT_TYPEID::ZERG_ULTRALISKCAVERN)
-        .value("ZERG_VIPER", sc2::UNIT_TYPEID::ZERG_VIPER)
-        .value("ZERG_ZERGLING", sc2::UNIT_TYPEID::ZERG_ZERGLING)
-        .value("ZERG_ZERGLINGBURROWED", sc2::UNIT_TYPEID::ZERG_ZERGLINGBURROWED)
-        .value("ZERG_PARASITICBOMBDUMMY", sc2::UNIT_TYPEID::ZERG_PARASITICBOMBDUMMY)
-        .value("PROTOSS_ADEPT", sc2::UNIT_TYPEID::PROTOSS_ADEPT)
-        .value("PROTOSS_ADEPTPHASESHIFT", sc2::UNIT_TYPEID::PROTOSS_ADEPTPHASESHIFT)
-        .value("PROTOSS_ARCHON", sc2::UNIT_TYPEID::PROTOSS_ARCHON)
-        .value("PROTOSS_ASSIMILATOR", sc2::UNIT_TYPEID::PROTOSS_ASSIMILATOR)
-        .value("PROTOSS_CARRIER", sc2::UNIT_TYPEID::PROTOSS_CARRIER)
-        .value("PROTOSS_COLOSSUS", sc2::UNIT_TYPEID::PROTOSS_COLOSSUS)
-        .value("PROTOSS_CYBERNETICSCORE", sc2::UNIT_TYPEID::PROTOSS_CYBERNETICSCORE)
-        .value("PROTOSS_DARKSHRINE", sc2::UNIT_TYPEID::PROTOSS_DARKSHRINE)
-        .value("PROTOSS_DARKTEMPLAR", sc2::UNIT_TYPEID::PROTOSS_DARKTEMPLAR)
-        .value("PROTOSS_DISRUPTOR", sc2::UNIT_TYPEID::PROTOSS_DISRUPTOR)
-        .value("PROTOSS_DISRUPTORPHASED", sc2::UNIT_TYPEID::PROTOSS_DISRUPTORPHASED)
-        .value("PROTOSS_FLEETBEACON", sc2::UNIT_TYPEID::PROTOSS_FLEETBEACON)
-        .value("PROTOSS_FORGE", sc2::UNIT_TYPEID::PROTOSS_FORGE)
-        .value("PROTOSS_GATEWAY", sc2::UNIT_TYPEID::PROTOSS_GATEWAY)
-        .value("PROTOSS_HIGHTEMPLAR", sc2::UNIT_TYPEID::PROTOSS_HIGHTEMPLAR)
-        .value("PROTOSS_IMMORTAL", sc2::UNIT_TYPEID::PROTOSS_IMMORTAL)
-        .value("PROTOSS_INTERCEPTOR", sc2::UNIT_TYPEID::PROTOSS_INTERCEPTOR)
-        .value("PROTOSS_MOTHERSHIP", sc2::UNIT_TYPEID::PROTOSS_MOTHERSHIP)
-        .value("PROTOSS_MOTHERSHIPCORE", sc2::UNIT_TYPEID::PROTOSS_MOTHERSHIPCORE)
-        .value("PROTOSS_NEXUS", sc2::UNIT_TYPEID::PROTOSS_NEXUS)
-        .value("PROTOSS_OBSERVER", sc2::UNIT_TYPEID::PROTOSS_OBSERVER)
-        .value("PROTOSS_ORACLE", sc2::UNIT_TYPEID::PROTOSS_ORACLE)
-        .value("PROTOSS_ORACLESTASISTRAP", sc2::UNIT_TYPEID::PROTOSS_ORACLESTASISTRAP)
-        .value("PROTOSS_PHOENIX", sc2::UNIT_TYPEID::PROTOSS_PHOENIX)
-        .value("PROTOSS_PHOTONCANNON", sc2::UNIT_TYPEID::PROTOSS_PHOTONCANNON)
-        .value("PROTOSS_PROBE", sc2::UNIT_TYPEID::PROTOSS_PROBE)
-        .value("PROTOSS_PYLON", sc2::UNIT_TYPEID::PROTOSS_PYLON)
-        .value("PROTOSS_PYLONOVERCHARGED", sc2::UNIT_TYPEID::PROTOSS_PYLONOVERCHARGED)
-        .value("PROTOSS_ROBOTICSBAY", sc2::UNIT_TYPEID::PROTOSS_ROBOTICSBAY)
-        .value("PROTOSS_ROBOTICSFACILITY", sc2::UNIT_TYPEID::PROTOSS_ROBOTICSFACILITY)
-        .value("PROTOSS_SENTRY", sc2::UNIT_TYPEID::PROTOSS_SENTRY)
-        .value("PROTOSS_SHIELDBATTERY", sc2::UNIT_TYPEID::PROTOSS_SHIELDBATTERY)
-        .value("PROTOSS_STALKER", sc2::UNIT_TYPEID::PROTOSS_STALKER)
-        .value("PROTOSS_STARGATE", sc2::UNIT_TYPEID::PROTOSS_STARGATE)
-        .value("PROTOSS_TEMPEST", sc2::UNIT_TYPEID::PROTOSS_TEMPEST)
-        .value("PROTOSS_TEMPLARARCHIVE", sc2::UNIT_TYPEID::PROTOSS_TEMPLARARCHIVE)
-        .value("PROTOSS_TWILIGHTCOUNCIL", sc2::UNIT_TYPEID::PROTOSS_TWILIGHTCOUNCIL)
-        .value("PROTOSS_VOIDRAY", sc2::UNIT_TYPEID::PROTOSS_VOIDRAY)
-        .value("PROTOSS_WARPGATE", sc2::UNIT_TYPEID::PROTOSS_WARPGATE)
-        .value("PROTOSS_WARPPRISM", sc2::UNIT_TYPEID::PROTOSS_WARPPRISM)
-        .value("PROTOSS_WARPPRISMPHASING", sc2::UNIT_TYPEID::PROTOSS_WARPPRISMPHASING)
-        .value("PROTOSS_ZEALOT", sc2::UNIT_TYPEID::PROTOSS_ZEALOT)
-        .value("NEUTRAL_BATTLESTATIONMINERALFIELD", sc2::UNIT_TYPEID::NEUTRAL_BATTLESTATIONMINERALFIELD)
-        .value("NEUTRAL_BATTLESTATIONMINERALFIELD750", sc2::UNIT_TYPEID::NEUTRAL_BATTLESTATIONMINERALFIELD750)
-        .value("NEUTRAL_COLLAPSIBLEROCKTOWERDEBRIS", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLEROCKTOWERDEBRIS)
-        .value("NEUTRAL_COLLAPSIBLEROCKTOWERDIAGONAL", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLEROCKTOWERDIAGONAL)
-        .value("NEUTRAL_COLLAPSIBLEROCKTOWERPUSHUNIT", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLEROCKTOWERPUSHUNIT)
-        .value("NEUTRAL_COLLAPSIBLETERRANTOWERDEBRIS", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLETERRANTOWERDEBRIS)
-        .value("NEUTRAL_COLLAPSIBLETERRANTOWERDIAGONAL", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLETERRANTOWERDIAGONAL)
-        .value("NEUTRAL_COLLAPSIBLETERRANTOWERPUSHUNIT", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLETERRANTOWERPUSHUNIT)
-        .value("NEUTRAL_COLLAPSIBLETERRANTOWERPUSHUNITRAMPLEFT", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLETERRANTOWERPUSHUNITRAMPLEFT)
-        .value("NEUTRAL_COLLAPSIBLETERRANTOWERPUSHUNITRAMPRIGHT", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLETERRANTOWERPUSHUNITRAMPRIGHT)
-        .value("NEUTRAL_COLLAPSIBLETERRANTOWERRAMPLEFT", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLETERRANTOWERRAMPLEFT)
-        .value("NEUTRAL_COLLAPSIBLETERRANTOWERRAMPRIGHT", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLETERRANTOWERRAMPRIGHT)
-        .value("NEUTRAL_DEBRISRAMPLEFT", sc2::UNIT_TYPEID::NEUTRAL_DEBRISRAMPLEFT)
-        .value("NEUTRAL_DEBRISRAMPRIGHT", sc2::UNIT_TYPEID::NEUTRAL_DEBRISRAMPRIGHT)
-        .value("NEUTRAL_DESTRUCTIBLEDEBRIS6X6", sc2::UNIT_TYPEID::NEUTRAL_DESTRUCTIBLEDEBRIS6X6)
-        .value("NEUTRAL_DESTRUCTIBLEDEBRISRAMPDIAGONALHUGEBLUR", sc2::UNIT_TYPEID::NEUTRAL_DESTRUCTIBLEDEBRISRAMPDIAGONALHUGEBLUR)
-        .value("NEUTRAL_DESTRUCTIBLEDEBRISRAMPDIAGONALHUGEULBR", sc2::UNIT_TYPEID::NEUTRAL_DESTRUCTIBLEDEBRISRAMPDIAGONALHUGEULBR)
-        .value("NEUTRAL_DESTRUCTIBLEROCK6X6", sc2::UNIT_TYPEID::NEUTRAL_DESTRUCTIBLEROCK6X6)
-        .value("NEUTRAL_DESTRUCTIBLEROCKEX1DIAGONALHUGEBLUR", sc2::UNIT_TYPEID::NEUTRAL_DESTRUCTIBLEROCKEX1DIAGONALHUGEBLUR)
-        .value("NEUTRAL_FORCEFIELD", sc2::UNIT_TYPEID::NEUTRAL_FORCEFIELD)
-        .value("NEUTRAL_KARAKFEMALE", sc2::UNIT_TYPEID::NEUTRAL_KARAKFEMALE)
-        .value("NEUTRAL_LABMINERALFIELD", sc2::UNIT_TYPEID::NEUTRAL_LABMINERALFIELD)
-        .value("NEUTRAL_LABMINERALFIELD750", sc2::UNIT_TYPEID::NEUTRAL_LABMINERALFIELD750)
-        .value("NEUTRAL_MINERALFIELD", sc2::UNIT_TYPEID::NEUTRAL_MINERALFIELD)
-        .value("NEUTRAL_MINERALFIELD750", sc2::UNIT_TYPEID::NEUTRAL_MINERALFIELD750)
-        .value("NEUTRAL_PROTOSSVESPENEGEYSER", sc2::UNIT_TYPEID::NEUTRAL_PROTOSSVESPENEGEYSER)
-        .value("NEUTRAL_PURIFIERMINERALFIELD", sc2::UNIT_TYPEID::NEUTRAL_PURIFIERMINERALFIELD)
-        .value("NEUTRAL_PURIFIERMINERALFIELD750", sc2::UNIT_TYPEID::NEUTRAL_PURIFIERMINERALFIELD750)
-        .value("NEUTRAL_PURIFIERRICHMINERALFIELD", sc2::UNIT_TYPEID::NEUTRAL_PURIFIERRICHMINERALFIELD)
-        .value("NEUTRAL_PURIFIERRICHMINERALFIELD750", sc2::UNIT_TYPEID::NEUTRAL_PURIFIERRICHMINERALFIELD750)
-        .value("NEUTRAL_PURIFIERVESPENEGEYSER", sc2::UNIT_TYPEID::NEUTRAL_PURIFIERVESPENEGEYSER)
-        .value("NEUTRAL_RICHMINERALFIELD", sc2::UNIT_TYPEID::NEUTRAL_RICHMINERALFIELD)
-        .value("NEUTRAL_RICHMINERALFIELD750", sc2::UNIT_TYPEID::NEUTRAL_RICHMINERALFIELD750)
-        .value("NEUTRAL_RICHVESPENEGEYSER", sc2::UNIT_TYPEID::NEUTRAL_RICHVESPENEGEYSER)
-        .value("NEUTRAL_SCANTIPEDE", sc2::UNIT_TYPEID::NEUTRAL_SCANTIPEDE)
-        .value("NEUTRAL_SHAKURASVESPENEGEYSER", sc2::UNIT_TYPEID::NEUTRAL_SHAKURASVESPENEGEYSER)
-        .value("NEUTRAL_SPACEPLATFORMGEYSER", sc2::UNIT_TYPEID::NEUTRAL_SPACEPLATFORMGEYSER)
-        .value("NEUTRAL_UNBUILDABLEBRICKSDESTRUCTIBLE", sc2::UNIT_TYPEID::NEUTRAL_UNBUILDABLEBRICKSDESTRUCTIBLE)
-        .value("NEUTRAL_UNBUILDABLEPLATESDESTRUCTIBLE", sc2::UNIT_TYPEID::NEUTRAL_UNBUILDABLEPLATESDESTRUCTIBLE)
-        .value("NEUTRAL_UTILITYBOT", sc2::UNIT_TYPEID::NEUTRAL_UTILITYBOT)
-        .value("NEUTRAL_VESPENEGEYSER", sc2::UNIT_TYPEID::NEUTRAL_VESPENEGEYSER)
-        .value("NEUTRAL_XELNAGATOWER", sc2::UNIT_TYPEID::NEUTRAL_XELNAGATOWER)
+		.value("ABANDONEDBUILDING", sc2::UNIT_TYPEID::ABANDONEDBUILDING)
+		.value("ABERRATIONACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ABERRATIONACGLUESCREENDUMMY)
+		.value("ACCELERATIONZONEFLYINGLARGE", sc2::UNIT_TYPEID::ACCELERATIONZONEFLYINGLARGE)
+		.value("ACCELERATIONZONEFLYINGMEDIUM", sc2::UNIT_TYPEID::ACCELERATIONZONEFLYINGMEDIUM)
+		.value("ACCELERATIONZONEFLYINGSMALL", sc2::UNIT_TYPEID::ACCELERATIONZONEFLYINGSMALL)
+		.value("ACCELERATIONZONELARGE", sc2::UNIT_TYPEID::ACCELERATIONZONELARGE)
+		.value("ACCELERATIONZONEMEDIUM", sc2::UNIT_TYPEID::ACCELERATIONZONEMEDIUM)
+		.value("ACCELERATIONZONESMALL", sc2::UNIT_TYPEID::ACCELERATIONZONESMALL)
+		.value("ACIDSALIVAWEAPON", sc2::UNIT_TYPEID::ACIDSALIVAWEAPON)
+		.value("ACIDSPINESWEAPON", sc2::UNIT_TYPEID::ACIDSPINESWEAPON)
+		.value("ADEPTFENIXACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ADEPTFENIXACGLUESCREENDUMMY)
+		.value("ADEPTPIERCINGWEAPON", sc2::UNIT_TYPEID::ADEPTPIERCINGWEAPON)
+		.value("ADEPTUPGRADEWEAPON", sc2::UNIT_TYPEID::ADEPTUPGRADEWEAPON)
+		.value("ADEPTWEAPON", sc2::UNIT_TYPEID::ADEPTWEAPON)
+		.value("ADJUTANTCAPSULE", sc2::UNIT_TYPEID::ADJUTANTCAPSULE)
+		.value("AIURLIGHTBRIDGEABANDONEDNE10", sc2::UNIT_TYPEID::AIURLIGHTBRIDGEABANDONEDNE10)
+		.value("AIURLIGHTBRIDGEABANDONEDNE10OUT", sc2::UNIT_TYPEID::AIURLIGHTBRIDGEABANDONEDNE10OUT)
+		.value("AIURLIGHTBRIDGEABANDONEDNE12", sc2::UNIT_TYPEID::AIURLIGHTBRIDGEABANDONEDNE12)
+		.value("AIURLIGHTBRIDGEABANDONEDNE12OUT", sc2::UNIT_TYPEID::AIURLIGHTBRIDGEABANDONEDNE12OUT)
+		.value("AIURLIGHTBRIDGEABANDONEDNE8", sc2::UNIT_TYPEID::AIURLIGHTBRIDGEABANDONEDNE8)
+		.value("AIURLIGHTBRIDGEABANDONEDNE8OUT", sc2::UNIT_TYPEID::AIURLIGHTBRIDGEABANDONEDNE8OUT)
+		.value("AIURLIGHTBRIDGEABANDONEDNW10", sc2::UNIT_TYPEID::AIURLIGHTBRIDGEABANDONEDNW10)
+		.value("AIURLIGHTBRIDGEABANDONEDNW10OUT", sc2::UNIT_TYPEID::AIURLIGHTBRIDGEABANDONEDNW10OUT)
+		.value("AIURLIGHTBRIDGEABANDONEDNW12", sc2::UNIT_TYPEID::AIURLIGHTBRIDGEABANDONEDNW12)
+		.value("AIURLIGHTBRIDGEABANDONEDNW12OUT", sc2::UNIT_TYPEID::AIURLIGHTBRIDGEABANDONEDNW12OUT)
+		.value("AIURLIGHTBRIDGEABANDONEDNW8", sc2::UNIT_TYPEID::AIURLIGHTBRIDGEABANDONEDNW8)
+		.value("AIURLIGHTBRIDGEABANDONEDNW8OUT", sc2::UNIT_TYPEID::AIURLIGHTBRIDGEABANDONEDNW8OUT)
+		.value("AIURLIGHTBRIDGENE10", sc2::UNIT_TYPEID::AIURLIGHTBRIDGENE10)
+		.value("AIURLIGHTBRIDGENE10OUT", sc2::UNIT_TYPEID::AIURLIGHTBRIDGENE10OUT)
+		.value("AIURLIGHTBRIDGENE12", sc2::UNIT_TYPEID::AIURLIGHTBRIDGENE12)
+		.value("AIURLIGHTBRIDGENE12OUT", sc2::UNIT_TYPEID::AIURLIGHTBRIDGENE12OUT)
+		.value("AIURLIGHTBRIDGENE8", sc2::UNIT_TYPEID::AIURLIGHTBRIDGENE8)
+		.value("AIURLIGHTBRIDGENE8OUT", sc2::UNIT_TYPEID::AIURLIGHTBRIDGENE8OUT)
+		.value("AIURLIGHTBRIDGENW10", sc2::UNIT_TYPEID::AIURLIGHTBRIDGENW10)
+		.value("AIURLIGHTBRIDGENW10OUT", sc2::UNIT_TYPEID::AIURLIGHTBRIDGENW10OUT)
+		.value("AIURLIGHTBRIDGENW12", sc2::UNIT_TYPEID::AIURLIGHTBRIDGENW12)
+		.value("AIURLIGHTBRIDGENW12OUT", sc2::UNIT_TYPEID::AIURLIGHTBRIDGENW12OUT)
+		.value("AIURLIGHTBRIDGENW8", sc2::UNIT_TYPEID::AIURLIGHTBRIDGENW8)
+		.value("AIURLIGHTBRIDGENW8OUT", sc2::UNIT_TYPEID::AIURLIGHTBRIDGENW8OUT)
+		.value("AIURTEMPLEBRIDGEDESTRUCTIBLENE10OUT", sc2::UNIT_TYPEID::AIURTEMPLEBRIDGEDESTRUCTIBLENE10OUT)
+		.value("AIURTEMPLEBRIDGEDESTRUCTIBLENE12OUT", sc2::UNIT_TYPEID::AIURTEMPLEBRIDGEDESTRUCTIBLENE12OUT)
+		.value("AIURTEMPLEBRIDGEDESTRUCTIBLENE8OUT", sc2::UNIT_TYPEID::AIURTEMPLEBRIDGEDESTRUCTIBLENE8OUT)
+		.value("AIURTEMPLEBRIDGEDESTRUCTIBLENW10OUT", sc2::UNIT_TYPEID::AIURTEMPLEBRIDGEDESTRUCTIBLENW10OUT)
+		.value("AIURTEMPLEBRIDGEDESTRUCTIBLENW12OUT", sc2::UNIT_TYPEID::AIURTEMPLEBRIDGEDESTRUCTIBLENW12OUT)
+		.value("AIURTEMPLEBRIDGEDESTRUCTIBLENW8OUT", sc2::UNIT_TYPEID::AIURTEMPLEBRIDGEDESTRUCTIBLENW8OUT)
+		.value("AIURTEMPLEBRIDGEDESTRUCTIBLESE10OUT", sc2::UNIT_TYPEID::AIURTEMPLEBRIDGEDESTRUCTIBLESE10OUT)
+		.value("AIURTEMPLEBRIDGEDESTRUCTIBLESE12OUT", sc2::UNIT_TYPEID::AIURTEMPLEBRIDGEDESTRUCTIBLESE12OUT)
+		.value("AIURTEMPLEBRIDGEDESTRUCTIBLESE8OUT", sc2::UNIT_TYPEID::AIURTEMPLEBRIDGEDESTRUCTIBLESE8OUT)
+		.value("AIURTEMPLEBRIDGEDESTRUCTIBLESW10OUT", sc2::UNIT_TYPEID::AIURTEMPLEBRIDGEDESTRUCTIBLESW10OUT)
+		.value("AIURTEMPLEBRIDGEDESTRUCTIBLESW12OUT", sc2::UNIT_TYPEID::AIURTEMPLEBRIDGEDESTRUCTIBLESW12OUT)
+		.value("AIURTEMPLEBRIDGEDESTRUCTIBLESW8OUT", sc2::UNIT_TYPEID::AIURTEMPLEBRIDGEDESTRUCTIBLESW8OUT)
+		.value("AIURTEMPLEBRIDGENE10OUT", sc2::UNIT_TYPEID::AIURTEMPLEBRIDGENE10OUT)
+		.value("AIURTEMPLEBRIDGENE12OUT", sc2::UNIT_TYPEID::AIURTEMPLEBRIDGENE12OUT)
+		.value("AIURTEMPLEBRIDGENE8OUT", sc2::UNIT_TYPEID::AIURTEMPLEBRIDGENE8OUT)
+		.value("AIURTEMPLEBRIDGENW10OUT", sc2::UNIT_TYPEID::AIURTEMPLEBRIDGENW10OUT)
+		.value("AIURTEMPLEBRIDGENW12OUT", sc2::UNIT_TYPEID::AIURTEMPLEBRIDGENW12OUT)
+		.value("AIURTEMPLEBRIDGENW8OUT", sc2::UNIT_TYPEID::AIURTEMPLEBRIDGENW8OUT)
+		.value("ANTEPLOTT", sc2::UNIT_TYPEID::ANTEPLOTT)
+		.value("ARBITERMP", sc2::UNIT_TYPEID::ARBITERMP)
+		.value("ARBITERMPWEAPONMISSILE", sc2::UNIT_TYPEID::ARBITERMPWEAPONMISSILE)
+		.value("ARCHIVE", sc2::UNIT_TYPEID::ARCHIVE)
+		.value("ARCHIVESEALED", sc2::UNIT_TYPEID::ARCHIVESEALED)
+		.value("ARCHONACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ARCHONACGLUESCREENDUMMY)
+		.value("ARTANIS", sc2::UNIT_TYPEID::ARTANIS)
+		.value("ARTIFACT", sc2::UNIT_TYPEID::ARTIFACT)
+		.value("ARTIFACTPIECE1", sc2::UNIT_TYPEID::ARTIFACTPIECE1)
+		.value("ARTIFACTPIECE2", sc2::UNIT_TYPEID::ARTIFACTPIECE2)
+		.value("ARTIFACTPIECE3", sc2::UNIT_TYPEID::ARTIFACTPIECE3)
+		.value("ARTIFACTPIECE4", sc2::UNIT_TYPEID::ARTIFACTPIECE4)
+		.value("ARTIFACTPIECE5", sc2::UNIT_TYPEID::ARTIFACTPIECE5)
+		.value("ARTIFACTVAULT", sc2::UNIT_TYPEID::ARTIFACTVAULT)
+		.value("ARTILLERYMENGSKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ARTILLERYMENGSKACGLUESCREENDUMMY)
+		.value("ARTOSILOPE", sc2::UNIT_TYPEID::ARTOSILOPE)
+		.value("ATALASERBATTERYLMWEAPON", sc2::UNIT_TYPEID::ATALASERBATTERYLMWEAPON)
+		.value("ATSLASERBATTERYLMWEAPON", sc2::UNIT_TYPEID::ATSLASERBATTERYLMWEAPON)
+		.value("AUTOMATEDREFINERY", sc2::UNIT_TYPEID::AUTOMATEDREFINERY)
+		.value("AUTOTESTATTACKER", sc2::UNIT_TYPEID::AUTOTESTATTACKER)
+		.value("AUTOTESTATTACKTARGETAIR", sc2::UNIT_TYPEID::AUTOTESTATTACKTARGETAIR)
+		.value("AUTOTESTATTACKTARGETGROUND", sc2::UNIT_TYPEID::AUTOTESTATTACKTARGETGROUND)
+		.value("AUTOTURRETRELEASEWEAPON", sc2::UNIT_TYPEID::AUTOTURRETRELEASEWEAPON)
+		.value("AVERNUSGATECONTROL", sc2::UNIT_TYPEID::AVERNUSGATECONTROL)
+		.value("BACKLASHROCKETSLMWEAPON", sc2::UNIT_TYPEID::BACKLASHROCKETSLMWEAPON)
+		.value("BALL", sc2::UNIT_TYPEID::BALL)
+		.value("BANELINGACGLUESCREENDUMMY", sc2::UNIT_TYPEID::BANELINGACGLUESCREENDUMMY)
+		.value("BANSHEEACGLUESCREENDUMMY", sc2::UNIT_TYPEID::BANSHEEACGLUESCREENDUMMY)
+		.value("BARRACKSTECHREACTOR", sc2::UNIT_TYPEID::BARRACKSTECHREACTOR)
+		.value("BATTLECRUISERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::BATTLECRUISERACGLUESCREENDUMMY)
+		.value("BATTLECRUISERHELIOS", sc2::UNIT_TYPEID::BATTLECRUISERHELIOS)
+		.value("BATTLECRUISERHELIOSALMWEAPON", sc2::UNIT_TYPEID::BATTLECRUISERHELIOSALMWEAPON)
+		.value("BATTLECRUISERHELIOSGLMWEAPON", sc2::UNIT_TYPEID::BATTLECRUISERHELIOSGLMWEAPON)
+		.value("BATTLECRUISERHELIOSMORPH", sc2::UNIT_TYPEID::BATTLECRUISERHELIOSMORPH)
+		.value("BATTLECRUISERLOKILMWEAPON", sc2::UNIT_TYPEID::BATTLECRUISERLOKILMWEAPON)
+		.value("BATTLECRUISERMENGSKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::BATTLECRUISERMENGSKACGLUESCREENDUMMY)
+		.value("BEACONARMY", sc2::UNIT_TYPEID::BEACONARMY)
+		.value("BEACONATTACK", sc2::UNIT_TYPEID::BEACONATTACK)
+		.value("BEACONAUTO", sc2::UNIT_TYPEID::BEACONAUTO)
+		.value("BEACONCLAIM", sc2::UNIT_TYPEID::BEACONCLAIM)
+		.value("BEACONCUSTOM1", sc2::UNIT_TYPEID::BEACONCUSTOM1)
+		.value("BEACONCUSTOM2", sc2::UNIT_TYPEID::BEACONCUSTOM2)
+		.value("BEACONCUSTOM3", sc2::UNIT_TYPEID::BEACONCUSTOM3)
+		.value("BEACONCUSTOM4", sc2::UNIT_TYPEID::BEACONCUSTOM4)
+		.value("BEACONDEFEND", sc2::UNIT_TYPEID::BEACONDEFEND)
+		.value("BEACONDETECT", sc2::UNIT_TYPEID::BEACONDETECT)
+		.value("BEACONEXPAND", sc2::UNIT_TYPEID::BEACONEXPAND)
+		.value("BEACONHARASS", sc2::UNIT_TYPEID::BEACONHARASS)
+		.value("BEACONIDLE", sc2::UNIT_TYPEID::BEACONIDLE)
+		.value("BEACONRALLY", sc2::UNIT_TYPEID::BEACONRALLY)
+		.value("BEACONSCOUT", sc2::UNIT_TYPEID::BEACONSCOUT)
+		.value("BEACON_NOVA", sc2::UNIT_TYPEID::BEACON_NOVA)
+		.value("BEACON_NOVASMALL", sc2::UNIT_TYPEID::BEACON_NOVASMALL)
+		.value("BEACON_PROTOSS", sc2::UNIT_TYPEID::BEACON_PROTOSS)
+		.value("BEACON_PROTOSSSMALL", sc2::UNIT_TYPEID::BEACON_PROTOSSSMALL)
+		.value("BEACON_TERRAN", sc2::UNIT_TYPEID::BEACON_TERRAN)
+		.value("BEACON_TERRANSMALL", sc2::UNIT_TYPEID::BEACON_TERRANSMALL)
+		.value("BEACON_ZERG", sc2::UNIT_TYPEID::BEACON_ZERG)
+		.value("BEACON_ZERGSMALL", sc2::UNIT_TYPEID::BEACON_ZERGSMALL)
+		.value("BILELAUNCHERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::BILELAUNCHERACGLUESCREENDUMMY)
+		.value("BIODOME", sc2::UNIT_TYPEID::BIODOME)
+		.value("BIODOMECOMMAND", sc2::UNIT_TYPEID::BIODOMECOMMAND)
+		.value("BIODOMECOMMANDFLYING", sc2::UNIT_TYPEID::BIODOMECOMMANDFLYING)
+		.value("BIODOMEHALFBUILT", sc2::UNIT_TYPEID::BIODOMEHALFBUILT)
+		.value("BIOPLASMIDDISCHARGEWEAPON", sc2::UNIT_TYPEID::BIOPLASMIDDISCHARGEWEAPON)
+		.value("BIOSTASISMISSILE", sc2::UNIT_TYPEID::BIOSTASISMISSILE)
+		.value("BLACKOPSMISSILETURRETACGLUESCREENDUMMY", sc2::UNIT_TYPEID::BLACKOPSMISSILETURRETACGLUESCREENDUMMY)
+		.value("BLASTERBILLYACGLUESCREENDUMMY", sc2::UNIT_TYPEID::BLASTERBILLYACGLUESCREENDUMMY)
+		.value("BLIMP", sc2::UNIT_TYPEID::BLIMP)
+		.value("BLIMPADS", sc2::UNIT_TYPEID::BLIMPADS)
+		.value("BLIMPMENGSKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::BLIMPMENGSKACGLUESCREENDUMMY)
+		.value("BLOCKER16X16", sc2::UNIT_TYPEID::BLOCKER16X16)
+		.value("BLOCKER4X4", sc2::UNIT_TYPEID::BLOCKER4X4)
+		.value("BLOCKER6X6", sc2::UNIT_TYPEID::BLOCKER6X6)
+		.value("BLOCKER8X8", sc2::UNIT_TYPEID::BLOCKER8X8)
+		.value("BRAXISALPHADESTRUCTIBLE1X1", sc2::UNIT_TYPEID::BRAXISALPHADESTRUCTIBLE1X1)
+		.value("BRAXISALPHADESTRUCTIBLE2X2", sc2::UNIT_TYPEID::BRAXISALPHADESTRUCTIBLE2X2)
+		.value("BREACHINGCHARGE", sc2::UNIT_TYPEID::BREACHINGCHARGE)
+		.value("BRIDGEBLOCKER4X12", sc2::UNIT_TYPEID::BRIDGEBLOCKER4X12)
+		.value("BROODLINGESCORT", sc2::UNIT_TYPEID::BROODLINGESCORT)
+		.value("BROODLORDACGLUESCREENDUMMY", sc2::UNIT_TYPEID::BROODLORDACGLUESCREENDUMMY)
+		.value("BROODLORDAWEAPON", sc2::UNIT_TYPEID::BROODLORDAWEAPON)
+		.value("BROODLORDBWEAPON", sc2::UNIT_TYPEID::BROODLORDBWEAPON)
+		.value("BROODLORDEGG", sc2::UNIT_TYPEID::BROODLORDEGG)
+		.value("BROODLORDEGGMISSILE", sc2::UNIT_TYPEID::BROODLORDEGGMISSILE)
+		.value("BROODLORDWEAPON", sc2::UNIT_TYPEID::BROODLORDWEAPON)
+		.value("BRUTALISK", sc2::UNIT_TYPEID::BRUTALISK)
+		.value("BRUTALISKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::BRUTALISKACGLUESCREENDUMMY)
+		.value("BRUTALISKWEAPON", sc2::UNIT_TYPEID::BRUTALISKWEAPON)
+		.value("BUBBACOMMERCIAL", sc2::UNIT_TYPEID::BUBBACOMMERCIAL)
+		.value("BUNKERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::BUNKERACGLUESCREENDUMMY)
+		.value("BUNKERDEPOTMENGSKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::BUNKERDEPOTMENGSKACGLUESCREENDUMMY)
+		.value("BUNKERUPGRADEDACGLUESCREENDUMMY", sc2::UNIT_TYPEID::BUNKERUPGRADEDACGLUESCREENDUMMY)
+		.value("BYPASSARMORDRONE", sc2::UNIT_TYPEID::BYPASSARMORDRONE)
+		.value("CABOOSE", sc2::UNIT_TYPEID::CABOOSE)
+		.value("CARGOTRUCKUNITBARRELS", sc2::UNIT_TYPEID::CARGOTRUCKUNITBARRELS)
+		.value("CARGOTRUCKUNITFLATBED", sc2::UNIT_TYPEID::CARGOTRUCKUNITFLATBED)
+		.value("CARGOTRUCKUNITTRAILER", sc2::UNIT_TYPEID::CARGOTRUCKUNITTRAILER)
+		.value("CARRIERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::CARRIERACGLUESCREENDUMMY)
+		.value("CARRIERAIURACGLUESCREENDUMMY", sc2::UNIT_TYPEID::CARRIERAIURACGLUESCREENDUMMY)
+		.value("CARRIERFENIXACGLUESCREENDUMMY", sc2::UNIT_TYPEID::CARRIERFENIXACGLUESCREENDUMMY)
+		.value("CARRIONBIRD", sc2::UNIT_TYPEID::CARRIONBIRD)
+		.value("CASTANARDESTRUCTIBLEDEBRIS", sc2::UNIT_TYPEID::CASTANARDESTRUCTIBLEDEBRIS)
+		.value("CASTANARULTRALISKSHACKLEDUNIT", sc2::UNIT_TYPEID::CASTANARULTRALISKSHACKLEDUNIT)
+		.value("CASTANARWINDOWLARGEDIAGONALBLURUNIT", sc2::UNIT_TYPEID::CASTANARWINDOWLARGEDIAGONALBLURUNIT)
+		.value("CASTANARWINDOWLARGEDIAGONALULBRUNIT", sc2::UNIT_TYPEID::CASTANARWINDOWLARGEDIAGONALULBRUNIT)
+		.value("CAUSTICSPRAYMISSILE", sc2::UNIT_TYPEID::CAUSTICSPRAYMISSILE)
+		.value("CELLBLOCKB", sc2::UNIT_TYPEID::CELLBLOCKB)
+		.value("CHARDESTRUCTIBLEROCKCOVER", sc2::UNIT_TYPEID::CHARDESTRUCTIBLEROCKCOVER)
+		.value("CHARDESTRUCTIBLEROCKCOVERULDR", sc2::UNIT_TYPEID::CHARDESTRUCTIBLEROCKCOVERULDR)
+		.value("CHARDESTRUCTIBLEROCKCOVERURDL", sc2::UNIT_TYPEID::CHARDESTRUCTIBLEROCKCOVERURDL)
+		.value("CHARDESTRUCTIBLEROCKCOVERV", sc2::UNIT_TYPEID::CHARDESTRUCTIBLEROCKCOVERV)
+		.value("CHECKSTATION", sc2::UNIT_TYPEID::CHECKSTATION)
+		.value("CHECKSTATIONDIAGONALBLUR", sc2::UNIT_TYPEID::CHECKSTATIONDIAGONALBLUR)
+		.value("CHECKSTATIONDIAGONALBLUROPENED", sc2::UNIT_TYPEID::CHECKSTATIONDIAGONALBLUROPENED)
+		.value("CHECKSTATIONDIAGONALULBR", sc2::UNIT_TYPEID::CHECKSTATIONDIAGONALULBR)
+		.value("CHECKSTATIONDIAGONALULBROPENED", sc2::UNIT_TYPEID::CHECKSTATIONDIAGONALULBROPENED)
+		.value("CHECKSTATIONOPENED", sc2::UNIT_TYPEID::CHECKSTATIONOPENED)
+		.value("CHECKSTATIONVERTICAL", sc2::UNIT_TYPEID::CHECKSTATIONVERTICAL)
+		.value("CHECKSTATIONVERTICALOPENED", sc2::UNIT_TYPEID::CHECKSTATIONVERTICALOPENED)
+		.value("CHRYSALISEGG", sc2::UNIT_TYPEID::CHRYSALISEGG)
+		.value("CIVILIAN", sc2::UNIT_TYPEID::CIVILIAN)
+		.value("CIVILIANCARSUNIT", sc2::UNIT_TYPEID::CIVILIANCARSUNIT)
+		.value("CIVILIANFEMALE", sc2::UNIT_TYPEID::CIVILIANFEMALE)
+		.value("CIVILIANSHIPWRECKED", sc2::UNIT_TYPEID::CIVILIANSHIPWRECKED)
+		.value("CIVILIANWEAPON", sc2::UNIT_TYPEID::CIVILIANWEAPON)
+		.value("CLEANINGBOT", sc2::UNIT_TYPEID::CLEANINGBOT)
+		.value("COLLAPSIBLEPURIFIERTOWERDEBRIS", sc2::UNIT_TYPEID::COLLAPSIBLEPURIFIERTOWERDEBRIS)
+		.value("COLLAPSIBLEPURIFIERTOWERDIAGONAL", sc2::UNIT_TYPEID::COLLAPSIBLEPURIFIERTOWERDIAGONAL)
+		.value("COLLAPSIBLEPURIFIERTOWERPUSHUNIT", sc2::UNIT_TYPEID::COLLAPSIBLEPURIFIERTOWERPUSHUNIT)
+		.value("COLLAPSIBLEROCKTOWER", sc2::UNIT_TYPEID::COLLAPSIBLEROCKTOWER)
+		.value("COLLAPSIBLEROCKTOWERDEBRISRAMPLEFT", sc2::UNIT_TYPEID::COLLAPSIBLEROCKTOWERDEBRISRAMPLEFT)
+		.value("COLLAPSIBLEROCKTOWERDEBRISRAMPLEFTGREEN", sc2::UNIT_TYPEID::COLLAPSIBLEROCKTOWERDEBRISRAMPLEFTGREEN)
+		.value("COLLAPSIBLEROCKTOWERDEBRISRAMPRIGHT", sc2::UNIT_TYPEID::COLLAPSIBLEROCKTOWERDEBRISRAMPRIGHT)
+		.value("COLLAPSIBLEROCKTOWERDEBRISRAMPRIGHTGREEN", sc2::UNIT_TYPEID::COLLAPSIBLEROCKTOWERDEBRISRAMPRIGHTGREEN)
+		.value("COLLAPSIBLEROCKTOWERPUSHUNITRAMPLEFT", sc2::UNIT_TYPEID::COLLAPSIBLEROCKTOWERPUSHUNITRAMPLEFT)
+		.value("COLLAPSIBLEROCKTOWERPUSHUNITRAMPLEFTGREEN", sc2::UNIT_TYPEID::COLLAPSIBLEROCKTOWERPUSHUNITRAMPLEFTGREEN)
+		.value("COLLAPSIBLEROCKTOWERPUSHUNITRAMPRIGHT", sc2::UNIT_TYPEID::COLLAPSIBLEROCKTOWERPUSHUNITRAMPRIGHT)
+		.value("COLLAPSIBLEROCKTOWERPUSHUNITRAMPRIGHTGREEN", sc2::UNIT_TYPEID::COLLAPSIBLEROCKTOWERPUSHUNITRAMPRIGHTGREEN)
+		.value("COLLAPSIBLEROCKTOWERRAMPLEFT", sc2::UNIT_TYPEID::COLLAPSIBLEROCKTOWERRAMPLEFT)
+		.value("COLLAPSIBLEROCKTOWERRAMPLEFTGREEN", sc2::UNIT_TYPEID::COLLAPSIBLEROCKTOWERRAMPLEFTGREEN)
+		.value("COLLAPSIBLEROCKTOWERRAMPRIGHT", sc2::UNIT_TYPEID::COLLAPSIBLEROCKTOWERRAMPRIGHT)
+		.value("COLLAPSIBLEROCKTOWERRAMPRIGHTGREEN", sc2::UNIT_TYPEID::COLLAPSIBLEROCKTOWERRAMPRIGHTGREEN)
+		.value("COLLAPSIBLETERRANTOWER", sc2::UNIT_TYPEID::COLLAPSIBLETERRANTOWER)
+		.value("COLONIST", sc2::UNIT_TYPEID::COLONIST)
+		.value("COLONISTBIODOME", sc2::UNIT_TYPEID::COLONISTBIODOME)
+		.value("COLONISTBIODOMEHALFBUILT", sc2::UNIT_TYPEID::COLONISTBIODOMEHALFBUILT)
+		.value("COLONISTFEMALE", sc2::UNIT_TYPEID::COLONISTFEMALE)
+		.value("COLONISTHUT", sc2::UNIT_TYPEID::COLONISTHUT)
+		.value("COLONISTSHIP", sc2::UNIT_TYPEID::COLONISTSHIP)
+		.value("COLONISTSHIPFLYING", sc2::UNIT_TYPEID::COLONISTSHIPFLYING)
+		.value("COLONISTSHIPTHANSON02A", sc2::UNIT_TYPEID::COLONISTSHIPTHANSON02A)
+		.value("COLONISTTRANSPORT", sc2::UNIT_TYPEID::COLONISTTRANSPORT)
+		.value("COLONISTVEHICLEUNIT", sc2::UNIT_TYPEID::COLONISTVEHICLEUNIT)
+		.value("COLONISTVEHICLEUNIT01", sc2::UNIT_TYPEID::COLONISTVEHICLEUNIT01)
+		.value("COLONYINFESTATIONWEAPON", sc2::UNIT_TYPEID::COLONYINFESTATIONWEAPON)
+		.value("COLOSSUSACGLUESCREENDUMMY", sc2::UNIT_TYPEID::COLOSSUSACGLUESCREENDUMMY)
+		.value("COLOSSUSFENIXACGLUESCREENDUMMY", sc2::UNIT_TYPEID::COLOSSUSFENIXACGLUESCREENDUMMY)
+		.value("COLOSSUSPURIFIERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::COLOSSUSPURIFIERACGLUESCREENDUMMY)
+		.value("COLOSSUSTALDARIMACGLUESCREENDUMMY", sc2::UNIT_TYPEID::COLOSSUSTALDARIMACGLUESCREENDUMMY)
+		.value("COMMENTATORBOT1", sc2::UNIT_TYPEID::COMMENTATORBOT1)
+		.value("COMMENTATORBOT2", sc2::UNIT_TYPEID::COMMENTATORBOT2)
+		.value("COMMENTATORBOT3", sc2::UNIT_TYPEID::COMMENTATORBOT3)
+		.value("COMMENTATORBOT4", sc2::UNIT_TYPEID::COMMENTATORBOT4)
+		.value("COMPOUNDMANSION_DOORE", sc2::UNIT_TYPEID::COMPOUNDMANSION_DOORE)
+		.value("COMPOUNDMANSION_DOORELOWERED", sc2::UNIT_TYPEID::COMPOUNDMANSION_DOORELOWERED)
+		.value("COMPOUNDMANSION_DOORN", sc2::UNIT_TYPEID::COMPOUNDMANSION_DOORN)
+		.value("COMPOUNDMANSION_DOORNE", sc2::UNIT_TYPEID::COMPOUNDMANSION_DOORNE)
+		.value("COMPOUNDMANSION_DOORNELOWERED", sc2::UNIT_TYPEID::COMPOUNDMANSION_DOORNELOWERED)
+		.value("COMPOUNDMANSION_DOORNLOWERED", sc2::UNIT_TYPEID::COMPOUNDMANSION_DOORNLOWERED)
+		.value("COMPOUNDMANSION_DOORNW", sc2::UNIT_TYPEID::COMPOUNDMANSION_DOORNW)
+		.value("COMPOUNDMANSION_DOORNWLOWERED", sc2::UNIT_TYPEID::COMPOUNDMANSION_DOORNWLOWERED)
+		.value("CONSUMEDNAFEEDBACKWEAPON", sc2::UNIT_TYPEID::CONSUMEDNAFEEDBACKWEAPON)
+		.value("CONTAMINATEWEAPON", sc2::UNIT_TYPEID::CONTAMINATEWEAPON)
+		.value("CORROSIVEPARASITEWEAPON", sc2::UNIT_TYPEID::CORROSIVEPARASITEWEAPON)
+		.value("CORRUPTIONWEAPON", sc2::UNIT_TYPEID::CORRUPTIONWEAPON)
+		.value("CORRUPTORACGLUESCREENDUMMY", sc2::UNIT_TYPEID::CORRUPTORACGLUESCREENDUMMY)
+		.value("CORSAIRACGLUESCREENDUMMY", sc2::UNIT_TYPEID::CORSAIRACGLUESCREENDUMMY)
+		.value("CORSAIRMP", sc2::UNIT_TYPEID::CORSAIRMP)
+		.value("COVERTBANSHEEACGLUESCREENDUMMY", sc2::UNIT_TYPEID::COVERTBANSHEEACGLUESCREENDUMMY)
+		.value("COW", sc2::UNIT_TYPEID::COW)
+		.value("CRABEETLE", sc2::UNIT_TYPEID::CRABEETLE)
+		.value("CREEPBLOCKER1X1", sc2::UNIT_TYPEID::CREEPBLOCKER1X1)
+		.value("CREEPBLOCKER4X4", sc2::UNIT_TYPEID::CREEPBLOCKER4X4)
+		.value("CREEPERHOSTACGLUESCREENDUMMY", sc2::UNIT_TYPEID::CREEPERHOSTACGLUESCREENDUMMY)
+		.value("CREEPONLYBLOCKER4X4", sc2::UNIT_TYPEID::CREEPONLYBLOCKER4X4)
+		.value("CREEPTUMORMISSILE", sc2::UNIT_TYPEID::CREEPTUMORMISSILE)
+		.value("CRUISERBIKE", sc2::UNIT_TYPEID::CRUISERBIKE)
+		.value("CYCLONEACGLUESCREENDUMMY", sc2::UNIT_TYPEID::CYCLONEACGLUESCREENDUMMY)
+		.value("CYCLONEMISSILE", sc2::UNIT_TYPEID::CYCLONEMISSILE)
+		.value("CYCLONEMISSILELARGE", sc2::UNIT_TYPEID::CYCLONEMISSILELARGE)
+		.value("CYCLONEMISSILELARGEAIR", sc2::UNIT_TYPEID::CYCLONEMISSILELARGEAIR)
+		.value("CYCLONEMISSILELARGEAIRALTERNATIVE", sc2::UNIT_TYPEID::CYCLONEMISSILELARGEAIRALTERNATIVE)
+		.value("D8CHARGE", sc2::UNIT_TYPEID::D8CHARGE)
+		.value("D8CHARGEWEAPON", sc2::UNIT_TYPEID::D8CHARGEWEAPON)
+		.value("D8CLUSTERBOMB", sc2::UNIT_TYPEID::D8CLUSTERBOMB)
+		.value("D8CLUSTERBOMBWEAPON", sc2::UNIT_TYPEID::D8CLUSTERBOMBWEAPON)
+		.value("DARKARCHONACGLUESCREENDUMMY", sc2::UNIT_TYPEID::DARKARCHONACGLUESCREENDUMMY)
+		.value("DARKPYLONACGLUESCREENDUMMY", sc2::UNIT_TYPEID::DARKPYLONACGLUESCREENDUMMY)
+		.value("DARKTEMPLARSHAKURASACGLUESCREENDUMMY", sc2::UNIT_TYPEID::DARKTEMPLARSHAKURASACGLUESCREENDUMMY)
+		.value("DATACORE", sc2::UNIT_TYPEID::DATACORE)
+		.value("DEBRIS2X2NONCONJOINED", sc2::UNIT_TYPEID::DEBRIS2X2NONCONJOINED)
+		.value("DEFENSEWALLE", sc2::UNIT_TYPEID::DEFENSEWALLE)
+		.value("DEFENSEWALLN", sc2::UNIT_TYPEID::DEFENSEWALLN)
+		.value("DEFENSEWALLNE", sc2::UNIT_TYPEID::DEFENSEWALLNE)
+		.value("DEFENSEWALLNW", sc2::UNIT_TYPEID::DEFENSEWALLNW)
+		.value("DEFENSEWALLS", sc2::UNIT_TYPEID::DEFENSEWALLS)
+		.value("DEFENSEWALLSE", sc2::UNIT_TYPEID::DEFENSEWALLSE)
+		.value("DEFENSEWALLSW", sc2::UNIT_TYPEID::DEFENSEWALLSW)
+		.value("DEFENSEWALLW", sc2::UNIT_TYPEID::DEFENSEWALLW)
+		.value("DEFILERBONESAMPLE", sc2::UNIT_TYPEID::DEFILERBONESAMPLE)
+		.value("DEFILERMP", sc2::UNIT_TYPEID::DEFILERMP)
+		.value("DEFILERMPBURROWED", sc2::UNIT_TYPEID::DEFILERMPBURROWED)
+		.value("DEFILERMPDARKSWARMWEAPON", sc2::UNIT_TYPEID::DEFILERMPDARKSWARMWEAPON)
+		.value("DEFILERMPPLAGUEWEAPON", sc2::UNIT_TYPEID::DEFILERMPPLAGUEWEAPON)
+		.value("DESERTPLANETSEARCHLIGHT", sc2::UNIT_TYPEID::DESERTPLANETSEARCHLIGHT)
+		.value("DESERTPLANETSTREETLIGHT", sc2::UNIT_TYPEID::DESERTPLANETSTREETLIGHT)
+		.value("DESTRUCTIBLEBILLBOARDSCROLLINGTEXT", sc2::UNIT_TYPEID::DESTRUCTIBLEBILLBOARDSCROLLINGTEXT)
+		.value("DESTRUCTIBLEBILLBOARDTALL", sc2::UNIT_TYPEID::DESTRUCTIBLEBILLBOARDTALL)
+		.value("DESTRUCTIBLEBULLHORNLIGHTS", sc2::UNIT_TYPEID::DESTRUCTIBLEBULLHORNLIGHTS)
+		.value("DESTRUCTIBLECITYDEBRIS2X4HORIZONTAL", sc2::UNIT_TYPEID::DESTRUCTIBLECITYDEBRIS2X4HORIZONTAL)
+		.value("DESTRUCTIBLECITYDEBRIS2X4VERTICAL", sc2::UNIT_TYPEID::DESTRUCTIBLECITYDEBRIS2X4VERTICAL)
+		.value("DESTRUCTIBLECITYDEBRIS2X6HORIZONTAL", sc2::UNIT_TYPEID::DESTRUCTIBLECITYDEBRIS2X6HORIZONTAL)
+		.value("DESTRUCTIBLECITYDEBRIS2X6VERTICAL", sc2::UNIT_TYPEID::DESTRUCTIBLECITYDEBRIS2X6VERTICAL)
+		.value("DESTRUCTIBLECITYDEBRIS4X4", sc2::UNIT_TYPEID::DESTRUCTIBLECITYDEBRIS4X4)
+		.value("DESTRUCTIBLECITYDEBRISHUGEDIAGONALBLUR", sc2::UNIT_TYPEID::DESTRUCTIBLECITYDEBRISHUGEDIAGONALBLUR)
+		.value("DESTRUCTIBLECITYDEBRISHUGEDIAGONALULBR", sc2::UNIT_TYPEID::DESTRUCTIBLECITYDEBRISHUGEDIAGONALULBR)
+		.value("DESTRUCTIBLEDEBRIS4X4", sc2::UNIT_TYPEID::DESTRUCTIBLEDEBRIS4X4)
+		.value("DESTRUCTIBLEEXPEDITIONGATE6X6", sc2::UNIT_TYPEID::DESTRUCTIBLEEXPEDITIONGATE6X6)
+		.value("DESTRUCTIBLEGARAGE", sc2::UNIT_TYPEID::DESTRUCTIBLEGARAGE)
+		.value("DESTRUCTIBLEGARAGELARGE", sc2::UNIT_TYPEID::DESTRUCTIBLEGARAGELARGE)
+		.value("DESTRUCTIBLEGATEDIAGONALBLUR", sc2::UNIT_TYPEID::DESTRUCTIBLEGATEDIAGONALBLUR)
+		.value("DESTRUCTIBLEGATEDIAGONALBLURLOWERED", sc2::UNIT_TYPEID::DESTRUCTIBLEGATEDIAGONALBLURLOWERED)
+		.value("DESTRUCTIBLEGATEDIAGONALULBR", sc2::UNIT_TYPEID::DESTRUCTIBLEGATEDIAGONALULBR)
+		.value("DESTRUCTIBLEGATEDIAGONALULBRLOWERED", sc2::UNIT_TYPEID::DESTRUCTIBLEGATEDIAGONALULBRLOWERED)
+		.value("DESTRUCTIBLEGATESTRAIGHTHORIZONTAL", sc2::UNIT_TYPEID::DESTRUCTIBLEGATESTRAIGHTHORIZONTAL)
+		.value("DESTRUCTIBLEGATESTRAIGHTHORIZONTALBF", sc2::UNIT_TYPEID::DESTRUCTIBLEGATESTRAIGHTHORIZONTALBF)
+		.value("DESTRUCTIBLEGATESTRAIGHTHORIZONTALBFLOWERED", sc2::UNIT_TYPEID::DESTRUCTIBLEGATESTRAIGHTHORIZONTALBFLOWERED)
+		.value("DESTRUCTIBLEGATESTRAIGHTHORIZONTALLOWERED", sc2::UNIT_TYPEID::DESTRUCTIBLEGATESTRAIGHTHORIZONTALLOWERED)
+		.value("DESTRUCTIBLEGATESTRAIGHTVERTICAL", sc2::UNIT_TYPEID::DESTRUCTIBLEGATESTRAIGHTVERTICAL)
+		.value("DESTRUCTIBLEGATESTRAIGHTVERTICALLF", sc2::UNIT_TYPEID::DESTRUCTIBLEGATESTRAIGHTVERTICALLF)
+		.value("DESTRUCTIBLEGATESTRAIGHTVERTICALLFLOWERED", sc2::UNIT_TYPEID::DESTRUCTIBLEGATESTRAIGHTVERTICALLFLOWERED)
+		.value("DESTRUCTIBLEGATESTRAIGHTVERTICALLOWERED", sc2::UNIT_TYPEID::DESTRUCTIBLEGATESTRAIGHTVERTICALLOWERED)
+		.value("DESTRUCTIBLEICE2X4HORIZONTAL", sc2::UNIT_TYPEID::DESTRUCTIBLEICE2X4HORIZONTAL)
+		.value("DESTRUCTIBLEICE2X4VERTICAL", sc2::UNIT_TYPEID::DESTRUCTIBLEICE2X4VERTICAL)
+		.value("DESTRUCTIBLEICE2X6HORIZONTAL", sc2::UNIT_TYPEID::DESTRUCTIBLEICE2X6HORIZONTAL)
+		.value("DESTRUCTIBLEICE2X6VERTICAL", sc2::UNIT_TYPEID::DESTRUCTIBLEICE2X6VERTICAL)
+		.value("DESTRUCTIBLEICE4X4", sc2::UNIT_TYPEID::DESTRUCTIBLEICE4X4)
+		.value("DESTRUCTIBLEICE6X6", sc2::UNIT_TYPEID::DESTRUCTIBLEICE6X6)
+		.value("DESTRUCTIBLEICEDIAGONALHUGEBLUR", sc2::UNIT_TYPEID::DESTRUCTIBLEICEDIAGONALHUGEBLUR)
+		.value("DESTRUCTIBLEICEDIAGONALHUGEULBR", sc2::UNIT_TYPEID::DESTRUCTIBLEICEDIAGONALHUGEULBR)
+		.value("DESTRUCTIBLEICEHORIZONTALHUGE", sc2::UNIT_TYPEID::DESTRUCTIBLEICEHORIZONTALHUGE)
+		.value("DESTRUCTIBLEICEVERTICALHUGE", sc2::UNIT_TYPEID::DESTRUCTIBLEICEVERTICALHUGE)
+		.value("DESTRUCTIBLEKORHALFLAG", sc2::UNIT_TYPEID::DESTRUCTIBLEKORHALFLAG)
+		.value("DESTRUCTIBLEKORHALFOLIAGE", sc2::UNIT_TYPEID::DESTRUCTIBLEKORHALFOLIAGE)
+		.value("DESTRUCTIBLEKORHALPODIUM", sc2::UNIT_TYPEID::DESTRUCTIBLEKORHALPODIUM)
+		.value("DESTRUCTIBLEKORHALTREE", sc2::UNIT_TYPEID::DESTRUCTIBLEKORHALTREE)
+		.value("DESTRUCTIBLERAMPDIAGONALHUGEBLUR", sc2::UNIT_TYPEID::DESTRUCTIBLERAMPDIAGONALHUGEBLUR)
+		.value("DESTRUCTIBLERAMPDIAGONALHUGEULBR", sc2::UNIT_TYPEID::DESTRUCTIBLERAMPDIAGONALHUGEULBR)
+		.value("DESTRUCTIBLERAMPHORIZONTALHUGE", sc2::UNIT_TYPEID::DESTRUCTIBLERAMPHORIZONTALHUGE)
+		.value("DESTRUCTIBLERAMPVERTICALHUGE", sc2::UNIT_TYPEID::DESTRUCTIBLERAMPVERTICALHUGE)
+		.value("DESTRUCTIBLEROCK2X4HORIZONTAL", sc2::UNIT_TYPEID::DESTRUCTIBLEROCK2X4HORIZONTAL)
+		.value("DESTRUCTIBLEROCK2X4VERTICAL", sc2::UNIT_TYPEID::DESTRUCTIBLEROCK2X4VERTICAL)
+		.value("DESTRUCTIBLEROCK2X6HORIZONTAL", sc2::UNIT_TYPEID::DESTRUCTIBLEROCK2X6HORIZONTAL)
+		.value("DESTRUCTIBLEROCK2X6VERTICAL", sc2::UNIT_TYPEID::DESTRUCTIBLEROCK2X6VERTICAL)
+		.value("DESTRUCTIBLEROCK4X4", sc2::UNIT_TYPEID::DESTRUCTIBLEROCK4X4)
+		.value("DESTRUCTIBLEROCK6X6WEAK", sc2::UNIT_TYPEID::DESTRUCTIBLEROCK6X6WEAK)
+		.value("DESTRUCTIBLEROCKEX12X4HORIZONTAL", sc2::UNIT_TYPEID::DESTRUCTIBLEROCKEX12X4HORIZONTAL)
+		.value("DESTRUCTIBLEROCKEX12X4VERTICAL", sc2::UNIT_TYPEID::DESTRUCTIBLEROCKEX12X4VERTICAL)
+		.value("DESTRUCTIBLEROCKEX12X6HORIZONTAL", sc2::UNIT_TYPEID::DESTRUCTIBLEROCKEX12X6HORIZONTAL)
+		.value("DESTRUCTIBLEROCKEX12X6VERTICAL", sc2::UNIT_TYPEID::DESTRUCTIBLEROCKEX12X6VERTICAL)
+		.value("DESTRUCTIBLEROCKEX14X4", sc2::UNIT_TYPEID::DESTRUCTIBLEROCKEX14X4)
+		.value("DESTRUCTIBLEROCKEX16X6", sc2::UNIT_TYPEID::DESTRUCTIBLEROCKEX16X6)
+		.value("DESTRUCTIBLEROCKEX1DIAGONALHUGEULBR", sc2::UNIT_TYPEID::DESTRUCTIBLEROCKEX1DIAGONALHUGEULBR)
+		.value("DESTRUCTIBLEROCKEX1HORIZONTALHUGE", sc2::UNIT_TYPEID::DESTRUCTIBLEROCKEX1HORIZONTALHUGE)
+		.value("DESTRUCTIBLEROCKEX1VERTICALHUGE", sc2::UNIT_TYPEID::DESTRUCTIBLEROCKEX1VERTICALHUGE)
+		.value("DESTRUCTIBLESANDBAGS", sc2::UNIT_TYPEID::DESTRUCTIBLESANDBAGS)
+		.value("DESTRUCTIBLESEARCHLIGHT", sc2::UNIT_TYPEID::DESTRUCTIBLESEARCHLIGHT)
+		.value("DESTRUCTIBLESIGNSCONSTRUCTION", sc2::UNIT_TYPEID::DESTRUCTIBLESIGNSCONSTRUCTION)
+		.value("DESTRUCTIBLESIGNSDIRECTIONAL", sc2::UNIT_TYPEID::DESTRUCTIBLESIGNSDIRECTIONAL)
+		.value("DESTRUCTIBLESIGNSFUNNY", sc2::UNIT_TYPEID::DESTRUCTIBLESIGNSFUNNY)
+		.value("DESTRUCTIBLESIGNSICONS", sc2::UNIT_TYPEID::DESTRUCTIBLESIGNSICONS)
+		.value("DESTRUCTIBLESIGNSWARNING", sc2::UNIT_TYPEID::DESTRUCTIBLESIGNSWARNING)
+		.value("DESTRUCTIBLESPACEPLATFORMBARRIER", sc2::UNIT_TYPEID::DESTRUCTIBLESPACEPLATFORMBARRIER)
+		.value("DESTRUCTIBLESPACEPLATFORMSIGN", sc2::UNIT_TYPEID::DESTRUCTIBLESPACEPLATFORMSIGN)
+		.value("DESTRUCTIBLESTOREFRONTCITYPROPS", sc2::UNIT_TYPEID::DESTRUCTIBLESTOREFRONTCITYPROPS)
+		.value("DESTRUCTIBLESTREETLIGHT", sc2::UNIT_TYPEID::DESTRUCTIBLESTREETLIGHT)
+		.value("DESTRUCTIBLETRAFFICSIGNAL", sc2::UNIT_TYPEID::DESTRUCTIBLETRAFFICSIGNAL)
+		.value("DESTRUCTIBLEWALLCORNER45", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLCORNER45)
+		.value("DESTRUCTIBLEWALLCORNER45BL90R", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLCORNER45BL90R)
+		.value("DESTRUCTIBLEWALLCORNER45BR90T", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLCORNER45BR90T)
+		.value("DESTRUCTIBLEWALLCORNER45UL90B", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLCORNER45UL90B)
+		.value("DESTRUCTIBLEWALLCORNER45ULBL", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLCORNER45ULBL)
+		.value("DESTRUCTIBLEWALLCORNER45ULUR", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLCORNER45ULUR)
+		.value("DESTRUCTIBLEWALLCORNER45UR90L", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLCORNER45UR90L)
+		.value("DESTRUCTIBLEWALLCORNER45URBR", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLCORNER45URBR)
+		.value("DESTRUCTIBLEWALLCORNER90B45UR", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLCORNER90B45UR)
+		.value("DESTRUCTIBLEWALLCORNER90BR", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLCORNER90BR)
+		.value("DESTRUCTIBLEWALLCORNER90L45BR", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLCORNER90L45BR)
+		.value("DESTRUCTIBLEWALLCORNER90LB", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLCORNER90LB)
+		.value("DESTRUCTIBLEWALLCORNER90LT", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLCORNER90LT)
+		.value("DESTRUCTIBLEWALLCORNER90R45UL", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLCORNER90R45UL)
+		.value("DESTRUCTIBLEWALLCORNER90T45BL", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLCORNER90T45BL)
+		.value("DESTRUCTIBLEWALLCORNER90TR", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLCORNER90TR)
+		.value("DESTRUCTIBLEWALLDIAGONALBLUR", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLDIAGONALBLUR)
+		.value("DESTRUCTIBLEWALLDIAGONALBLURLF", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLDIAGONALBLURLF)
+		.value("DESTRUCTIBLEWALLDIAGONALULBR", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLDIAGONALULBR)
+		.value("DESTRUCTIBLEWALLDIAGONALULBRLF", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLDIAGONALULBRLF)
+		.value("DESTRUCTIBLEWALLSTRAIGHTHORIZONTAL", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLSTRAIGHTHORIZONTAL)
+		.value("DESTRUCTIBLEWALLSTRAIGHTHORIZONTALBF", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLSTRAIGHTHORIZONTALBF)
+		.value("DESTRUCTIBLEWALLSTRAIGHTVERTICAL", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLSTRAIGHTVERTICAL)
+		.value("DESTRUCTIBLEWALLVERTICALLF", sc2::UNIT_TYPEID::DESTRUCTIBLEWALLVERTICALLF)
+		.value("DESTRUCTIBLEZERGINFESTATION3X3", sc2::UNIT_TYPEID::DESTRUCTIBLEZERGINFESTATION3X3)
+		.value("DEVASTATIONTURRETACGLUESCREENDUMMY", sc2::UNIT_TYPEID::DEVASTATIONTURRETACGLUESCREENDUMMY)
+		.value("DEVASTATORMISSILEWEAPON", sc2::UNIT_TYPEID::DEVASTATORMISSILEWEAPON)
+		.value("DEVILDOG", sc2::UNIT_TYPEID::DEVILDOG)
+		.value("DEVOURERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::DEVOURERACGLUESCREENDUMMY)
+		.value("DEVOURERCOCOONMP", sc2::UNIT_TYPEID::DEVOURERCOCOONMP)
+		.value("DEVOURERMP", sc2::UNIT_TYPEID::DEVOURERMP)
+		.value("DEVOURERMPWEAPONMISSILE", sc2::UNIT_TYPEID::DEVOURERMPWEAPONMISSILE)
+		.value("DEVOURERTISSUEDOODAD", sc2::UNIT_TYPEID::DEVOURERTISSUEDOODAD)
+		.value("DEVOURERTISSUEMISSILE", sc2::UNIT_TYPEID::DEVOURERTISSUEMISSILE)
+		.value("DEVOURERTISSUESAMPLE", sc2::UNIT_TYPEID::DEVOURERTISSUESAMPLE)
+		.value("DEVOURERTISSUESAMPLETUBE", sc2::UNIT_TYPEID::DEVOURERTISSUESAMPLETUBE)
+		.value("DIAMONDBACK", sc2::UNIT_TYPEID::DIAMONDBACK)
+		.value("DIGESTERCREEPSPRAYTARGETUNIT", sc2::UNIT_TYPEID::DIGESTERCREEPSPRAYTARGETUNIT)
+		.value("DIGESTERCREEPSPRAYUNIT", sc2::UNIT_TYPEID::DIGESTERCREEPSPRAYUNIT)
+		.value("DISRUPTORACGLUESCREENDUMMY", sc2::UNIT_TYPEID::DISRUPTORACGLUESCREENDUMMY)
+		.value("DOG", sc2::UNIT_TYPEID::DOG)
+		.value("DOMINIONKILLTEAM", sc2::UNIT_TYPEID::DOMINIONKILLTEAM)
+		.value("DOMINIONKILLTEAMLMWEAPON", sc2::UNIT_TYPEID::DOMINIONKILLTEAMLMWEAPON)
+		.value("DRAGOONACGLUESCREENDUMMY", sc2::UNIT_TYPEID::DRAGOONACGLUESCREENDUMMY)
+		.value("DRAKKENLASERDRILL", sc2::UNIT_TYPEID::DRAKKENLASERDRILL)
+		.value("DRBATTLECRUISERALMWEAPON", sc2::UNIT_TYPEID::DRBATTLECRUISERALMWEAPON)
+		.value("DRBATTLECRUISERGLMWEAPON", sc2::UNIT_TYPEID::DRBATTLECRUISERGLMWEAPON)
+		.value("DUKESREVENGE", sc2::UNIT_TYPEID::DUKESREVENGE)
+		.value("DUMPTRUCK", sc2::UNIT_TYPEID::DUMPTRUCK)
+		.value("DUSKWING", sc2::UNIT_TYPEID::DUSKWING)
+		.value("DUSKWINGWEAPON", sc2::UNIT_TYPEID::DUSKWINGWEAPON)
+		.value("EGGPURPLE", sc2::UNIT_TYPEID::EGGPURPLE)
+		.value("ELEVATORBLOCKER", sc2::UNIT_TYPEID::ELEVATORBLOCKER)
+		.value("ELITEMARINEACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ELITEMARINEACGLUESCREENDUMMY)
+		.value("ELSECARO_COLONIST_HUT", sc2::UNIT_TYPEID::ELSECARO_COLONIST_HUT)
+		.value("EMP2WEAPON", sc2::UNIT_TYPEID::EMP2WEAPON)
+		.value("ENEMYPATHINGBLOCKER16X16", sc2::UNIT_TYPEID::ENEMYPATHINGBLOCKER16X16)
+		.value("ENEMYPATHINGBLOCKER1X1", sc2::UNIT_TYPEID::ENEMYPATHINGBLOCKER1X1)
+		.value("ENEMYPATHINGBLOCKER2X2", sc2::UNIT_TYPEID::ENEMYPATHINGBLOCKER2X2)
+		.value("ENEMYPATHINGBLOCKER4X4", sc2::UNIT_TYPEID::ENEMYPATHINGBLOCKER4X4)
+		.value("ENEMYPATHINGBLOCKER8X8", sc2::UNIT_TYPEID::ENEMYPATHINGBLOCKER8X8)
+		.value("EXPERIMENTALPLASMAGUNWEAPON", sc2::UNIT_TYPEID::EXPERIMENTALPLASMAGUNWEAPON)
+		.value("EXPLODINGBARRELLARGE", sc2::UNIT_TYPEID::EXPLODINGBARRELLARGE)
+		.value("EXTENDINGBRIDGENEWIDE10", sc2::UNIT_TYPEID::EXTENDINGBRIDGENEWIDE10)
+		.value("EXTENDINGBRIDGENEWIDE10OUT", sc2::UNIT_TYPEID::EXTENDINGBRIDGENEWIDE10OUT)
+		.value("EXTENDINGBRIDGENEWIDE12", sc2::UNIT_TYPEID::EXTENDINGBRIDGENEWIDE12)
+		.value("EXTENDINGBRIDGENEWIDE12OUT", sc2::UNIT_TYPEID::EXTENDINGBRIDGENEWIDE12OUT)
+		.value("EXTENDINGBRIDGENEWIDE8", sc2::UNIT_TYPEID::EXTENDINGBRIDGENEWIDE8)
+		.value("EXTENDINGBRIDGENEWIDE8OUT", sc2::UNIT_TYPEID::EXTENDINGBRIDGENEWIDE8OUT)
+		.value("EXTENDINGBRIDGENWWIDE10", sc2::UNIT_TYPEID::EXTENDINGBRIDGENWWIDE10)
+		.value("EXTENDINGBRIDGENWWIDE10OUT", sc2::UNIT_TYPEID::EXTENDINGBRIDGENWWIDE10OUT)
+		.value("EXTENDINGBRIDGENWWIDE12", sc2::UNIT_TYPEID::EXTENDINGBRIDGENWWIDE12)
+		.value("EXTENDINGBRIDGENWWIDE12OUT", sc2::UNIT_TYPEID::EXTENDINGBRIDGENWWIDE12OUT)
+		.value("EXTENDINGBRIDGENWWIDE8", sc2::UNIT_TYPEID::EXTENDINGBRIDGENWWIDE8)
+		.value("EXTENDINGBRIDGENWWIDE8OUT", sc2::UNIT_TYPEID::EXTENDINGBRIDGENWWIDE8OUT)
+		.value("EYESTALKWEAPON", sc2::UNIT_TYPEID::EYESTALKWEAPON)
+		.value("FACTORYTECHREACTOR", sc2::UNIT_TYPEID::FACTORYTECHREACTOR)
+		.value("FEEDERLING", sc2::UNIT_TYPEID::FEEDERLING)
+		.value("FIREBAT", sc2::UNIT_TYPEID::FIREBAT)
+		.value("FIREBATACGLUESCREENDUMMY", sc2::UNIT_TYPEID::FIREBATACGLUESCREENDUMMY)
+		.value("FIREROACHACGLUESCREENDUMMY", sc2::UNIT_TYPEID::FIREROACHACGLUESCREENDUMMY)
+		.value("FIREWORKSBLUE", sc2::UNIT_TYPEID::FIREWORKSBLUE)
+		.value("FIREWORKSRED", sc2::UNIT_TYPEID::FIREWORKSRED)
+		.value("FIREWORKSYELLOW", sc2::UNIT_TYPEID::FIREWORKSYELLOW)
+		.value("FLAMINGBETTY", sc2::UNIT_TYPEID::FLAMINGBETTY)
+		.value("FLAMINGBETTYACGLUESCREENDUMMY", sc2::UNIT_TYPEID::FLAMINGBETTYACGLUESCREENDUMMY)
+		.value("FLATBEDTRUCK", sc2::UNIT_TYPEID::FLATBEDTRUCK)
+		.value("FLYOVERUNIT", sc2::UNIT_TYPEID::FLYOVERUNIT)
+		.value("FOOD1000", sc2::UNIT_TYPEID::FOOD1000)
+		.value("FREIGHTCAR", sc2::UNIT_TYPEID::FREIGHTCAR)
+		.value("FRENZYWEAPON", sc2::UNIT_TYPEID::FRENZYWEAPON)
+		.value("FUNGALGROWTHMISSILE", sc2::UNIT_TYPEID::FUNGALGROWTHMISSILE)
+		.value("FUSIONREACTOR", sc2::UNIT_TYPEID::FUSIONREACTOR)
+		.value("G4CHARGEWEAPON", sc2::UNIT_TYPEID::G4CHARGEWEAPON)
+		.value("GASCANISTER", sc2::UNIT_TYPEID::GASCANISTER)
+		.value("GASCANISTERPROTOSS", sc2::UNIT_TYPEID::GASCANISTERPROTOSS)
+		.value("GASCANISTERZERG", sc2::UNIT_TYPEID::GASCANISTERZERG)
+		.value("GATECONTROLUNIT", sc2::UNIT_TYPEID::GATECONTROLUNIT)
+		.value("GHOSTALTERNATE", sc2::UNIT_TYPEID::GHOSTALTERNATE)
+		.value("GHOSTLASERLINES", sc2::UNIT_TYPEID::GHOSTLASERLINES)
+		.value("GHOSTMENGSKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::GHOSTMENGSKACGLUESCREENDUMMY)
+		.value("GHOSTNOVA", sc2::UNIT_TYPEID::GHOSTNOVA)
+		.value("GLAIVEWURMBOUNCEWEAPON", sc2::UNIT_TYPEID::GLAIVEWURMBOUNCEWEAPON)
+		.value("GLAIVEWURMM2WEAPON", sc2::UNIT_TYPEID::GLAIVEWURMM2WEAPON)
+		.value("GLAIVEWURMM3WEAPON", sc2::UNIT_TYPEID::GLAIVEWURMM3WEAPON)
+		.value("GLAIVEWURMWEAPON", sc2::UNIT_TYPEID::GLAIVEWURMWEAPON)
+		.value("GLOBESTATUE", sc2::UNIT_TYPEID::GLOBESTATUE)
+		.value("GOLIATH", sc2::UNIT_TYPEID::GOLIATH)
+		.value("GOLIATHACGLUESCREENDUMMY", sc2::UNIT_TYPEID::GOLIATHACGLUESCREENDUMMY)
+		.value("GOLIATHAWEAPON", sc2::UNIT_TYPEID::GOLIATHAWEAPON)
+		.value("GRAPPLEWEAPON", sc2::UNIT_TYPEID::GRAPPLEWEAPON)
+		.value("GUARDIANACGLUESCREENDUMMY", sc2::UNIT_TYPEID::GUARDIANACGLUESCREENDUMMY)
+		.value("GUARDIANCOCOONMP", sc2::UNIT_TYPEID::GUARDIANCOCOONMP)
+		.value("GUARDIANMP", sc2::UNIT_TYPEID::GUARDIANMP)
+		.value("GUARDIANMPWEAPON", sc2::UNIT_TYPEID::GUARDIANMPWEAPON)
+		.value("HAILSTORMMISSILESWEAPON", sc2::UNIT_TYPEID::HAILSTORMMISSILESWEAPON)
+		.value("HAMMERSECURITY", sc2::UNIT_TYPEID::HAMMERSECURITY)
+		.value("HAMMERSECURITYLMWEAPON", sc2::UNIT_TYPEID::HAMMERSECURITYLMWEAPON)
+		.value("HEALINGPOTIONTESTINSTANT", sc2::UNIT_TYPEID::HEALINGPOTIONTESTINSTANT)
+		.value("HEALINGPOTIONTESTTARGET", sc2::UNIT_TYPEID::HEALINGPOTIONTESTTARGET)
+		.value("HEAVYSIEGETANKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::HEAVYSIEGETANKACGLUESCREENDUMMY)
+		.value("HELLBATACGLUESCREENDUMMY", sc2::UNIT_TYPEID::HELLBATACGLUESCREENDUMMY)
+		.value("HELLBATRANGERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::HELLBATRANGERACGLUESCREENDUMMY)
+		.value("HELPEREMITTERSELECTIONARROW", sc2::UNIT_TYPEID::HELPEREMITTERSELECTIONARROW)
+		.value("HELSANGELASSAULT", sc2::UNIT_TYPEID::HELSANGELASSAULT)
+		.value("HELSANGELFIGHTER", sc2::UNIT_TYPEID::HELSANGELFIGHTER)
+		.value("HELSANGELFIGHTERWEAPON", sc2::UNIT_TYPEID::HELSANGELFIGHTERWEAPON)
+		.value("HERC", sc2::UNIT_TYPEID::HERC)
+		.value("HERCPLACEMENT", sc2::UNIT_TYPEID::HERCPLACEMENT)
+		.value("HERCULES", sc2::UNIT_TYPEID::HERCULES)
+		.value("HERCULESACGLUESCREENDUMMY", sc2::UNIT_TYPEID::HERCULESACGLUESCREENDUMMY)
+		.value("HERCULESLANDER", sc2::UNIT_TYPEID::HERCULESLANDER)
+		.value("HERCULESLANDERFLYING", sc2::UNIT_TYPEID::HERCULESLANDERFLYING)
+		.value("HERONUKE", sc2::UNIT_TYPEID::HERONUKE)
+		.value("HHBATTLECRUISERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::HHBATTLECRUISERACGLUESCREENDUMMY)
+		.value("HHBOMBERPLATFORMACGLUESCREENDUMMY", sc2::UNIT_TYPEID::HHBOMBERPLATFORMACGLUESCREENDUMMY)
+		.value("HHHELLIONTANKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::HHHELLIONTANKACGLUESCREENDUMMY)
+		.value("HHMERCSTARPORTACGLUESCREENDUMMY", sc2::UNIT_TYPEID::HHMERCSTARPORTACGLUESCREENDUMMY)
+		.value("HHMISSILETURRETACGLUESCREENDUMMY", sc2::UNIT_TYPEID::HHMISSILETURRETACGLUESCREENDUMMY)
+		.value("HHRAVENACGLUESCREENDUMMY", sc2::UNIT_TYPEID::HHRAVENACGLUESCREENDUMMY)
+		.value("HHREAPERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::HHREAPERACGLUESCREENDUMMY)
+		.value("HHVIKINGACGLUESCREENDUMMY", sc2::UNIT_TYPEID::HHVIKINGACGLUESCREENDUMMY)
+		.value("HHWIDOWMINEACGLUESCREENDUMMY", sc2::UNIT_TYPEID::HHWIDOWMINEACGLUESCREENDUMMY)
+		.value("HHWRAITHACGLUESCREENDUMMY", sc2::UNIT_TYPEID::HHWRAITHACGLUESCREENDUMMY)
+		.value("HIGHTEMPLARACGLUESCREENDUMMY", sc2::UNIT_TYPEID::HIGHTEMPLARACGLUESCREENDUMMY)
+		.value("HIGHTEMPLARSKINPREVIEW", sc2::UNIT_TYPEID::HIGHTEMPLARSKINPREVIEW)
+		.value("HIGHTEMPLARTALDARIMACGLUESCREENDUMMY", sc2::UNIT_TYPEID::HIGHTEMPLARTALDARIMACGLUESCREENDUMMY)
+		.value("HIGHTEMPLARWEAPONMISSILE", sc2::UNIT_TYPEID::HIGHTEMPLARWEAPONMISSILE)
+		.value("HIVEMINDEMULATOR", sc2::UNIT_TYPEID::HIVEMINDEMULATOR)
+		.value("HOLDINGPEN", sc2::UNIT_TYPEID::HOLDINGPEN)
+		.value("HOMELARGE", sc2::UNIT_TYPEID::HOMELARGE)
+		.value("HOMESMALL", sc2::UNIT_TYPEID::HOMESMALL)
+		.value("HUNTERKILLER", sc2::UNIT_TYPEID::HUNTERKILLER)
+		.value("HUNTERKILLERBURROWED", sc2::UNIT_TYPEID::HUNTERKILLERBURROWED)
+		.value("HUNTERKILLERWEAPON", sc2::UNIT_TYPEID::HUNTERKILLERWEAPON)
+		.value("HUNTERSEEKERWEAPON", sc2::UNIT_TYPEID::HUNTERSEEKERWEAPON)
+		.value("HURRICANEMISSILELEFT", sc2::UNIT_TYPEID::HURRICANEMISSILELEFT)
+		.value("HURRICANEMISSILERIGHT", sc2::UNIT_TYPEID::HURRICANEMISSILERIGHT)
+		.value("HUT", sc2::UNIT_TYPEID::HUT)
+		.value("HYBRID", sc2::UNIT_TYPEID::HYBRID)
+		.value("HYBRIDCPLASMAWEAPON", sc2::UNIT_TYPEID::HYBRIDCPLASMAWEAPON)
+		.value("HYBRIDDESTROYER", sc2::UNIT_TYPEID::HYBRIDDESTROYER)
+		.value("HYBRIDREAVER", sc2::UNIT_TYPEID::HYBRIDREAVER)
+		.value("HYBRIDSINGULARITYFEEDBACKWEAPON", sc2::UNIT_TYPEID::HYBRIDSINGULARITYFEEDBACKWEAPON)
+		.value("HYDRALISKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::HYDRALISKACGLUESCREENDUMMY)
+		.value("HYDRALISKIMPALEMISSILE", sc2::UNIT_TYPEID::HYDRALISKIMPALEMISSILE)
+		.value("HYDRALISKLURKERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::HYDRALISKLURKERACGLUESCREENDUMMY)
+		.value("HYPERION", sc2::UNIT_TYPEID::HYPERION)
+		.value("HYPERIONALMWEAPON", sc2::UNIT_TYPEID::HYPERIONALMWEAPON)
+		.value("HYPERIONLMWEAPON", sc2::UNIT_TYPEID::HYPERIONLMWEAPON)
+		.value("HYPERIONYAMATOSPECIALWEAPON", sc2::UNIT_TYPEID::HYPERIONYAMATOSPECIALWEAPON)
+		.value("ICE2X2NONCONJOINED", sc2::UNIT_TYPEID::ICE2X2NONCONJOINED)
+		.value("ICEPROTOSSCRATES", sc2::UNIT_TYPEID::ICEPROTOSSCRATES)
+		.value("IMMORTALACGLUESCREENDUMMY", sc2::UNIT_TYPEID::IMMORTALACGLUESCREENDUMMY)
+		.value("IMMORTALFENIXACGLUESCREENDUMMY", sc2::UNIT_TYPEID::IMMORTALFENIXACGLUESCREENDUMMY)
+		.value("IMMORTALKARAXACGLUESCREENDUMMY", sc2::UNIT_TYPEID::IMMORTALKARAXACGLUESCREENDUMMY)
+		.value("IMMORTALTALDARIMACGLUESCREENDUMMY", sc2::UNIT_TYPEID::IMMORTALTALDARIMACGLUESCREENDUMMY)
+		.value("INFESTABLEBIODOME", sc2::UNIT_TYPEID::INFESTABLEBIODOME)
+		.value("INFESTABLECOLONISTBIODOME", sc2::UNIT_TYPEID::INFESTABLECOLONISTBIODOME)
+		.value("INFESTABLECOLONISTHUT", sc2::UNIT_TYPEID::INFESTABLECOLONISTHUT)
+		.value("INFESTABLEHUT", sc2::UNIT_TYPEID::INFESTABLEHUT)
+		.value("INFESTATIONSPIRE", sc2::UNIT_TYPEID::INFESTATIONSPIRE)
+		.value("INFESTEDABOMINATION", sc2::UNIT_TYPEID::INFESTEDABOMINATION)
+		.value("INFESTEDABOMINATIONBURROWED", sc2::UNIT_TYPEID::INFESTEDABOMINATIONBURROWED)
+		.value("INFESTEDACIDSPINESWEAPON", sc2::UNIT_TYPEID::INFESTEDACIDSPINESWEAPON)
+		.value("INFESTEDARMORY", sc2::UNIT_TYPEID::INFESTEDARMORY)
+		.value("INFESTEDBARRACKS", sc2::UNIT_TYPEID::INFESTEDBARRACKS)
+		.value("INFESTEDBUNKER", sc2::UNIT_TYPEID::INFESTEDBUNKER)
+		.value("INFESTEDCC", sc2::UNIT_TYPEID::INFESTEDCC)
+		.value("INFESTEDCIVILIAN", sc2::UNIT_TYPEID::INFESTEDCIVILIAN)
+		.value("INFESTEDCIVILIANBURROWED", sc2::UNIT_TYPEID::INFESTEDCIVILIANBURROWED)
+		.value("INFESTEDCOCOON", sc2::UNIT_TYPEID::INFESTEDCOCOON)
+		.value("INFESTEDCOLONISTSHIP", sc2::UNIT_TYPEID::INFESTEDCOLONISTSHIP)
+		.value("INFESTEDENGBAY", sc2::UNIT_TYPEID::INFESTEDENGBAY)
+		.value("INFESTEDFACTORY", sc2::UNIT_TYPEID::INFESTEDFACTORY)
+		.value("INFESTEDMERCHAVEN", sc2::UNIT_TYPEID::INFESTEDMERCHAVEN)
+		.value("INFESTEDMISSILETURRET", sc2::UNIT_TYPEID::INFESTEDMISSILETURRET)
+		.value("INFESTEDREFINERY", sc2::UNIT_TYPEID::INFESTEDREFINERY)
+		.value("INFESTEDSTARPORT", sc2::UNIT_TYPEID::INFESTEDSTARPORT)
+		.value("INFESTEDSUPPLY", sc2::UNIT_TYPEID::INFESTEDSUPPLY)
+		.value("INFESTEDTERRAN", sc2::UNIT_TYPEID::INFESTEDTERRAN)
+		.value("INFESTEDTERRANCAMPAIGN", sc2::UNIT_TYPEID::INFESTEDTERRANCAMPAIGN)
+		.value("INFESTEDTERRANCAMPAIGNBURROWED", sc2::UNIT_TYPEID::INFESTEDTERRANCAMPAIGNBURROWED)
+		.value("INFESTEDTERRANSEGGPLACEMENT", sc2::UNIT_TYPEID::INFESTEDTERRANSEGGPLACEMENT)
+		.value("INFESTEDTERRANSWEAPON", sc2::UNIT_TYPEID::INFESTEDTERRANSWEAPON)
+		.value("INFESTEDVENTBROODLORDEGG", sc2::UNIT_TYPEID::INFESTEDVENTBROODLORDEGG)
+		.value("INFESTEDVENTCORRUPTOREGG", sc2::UNIT_TYPEID::INFESTEDVENTCORRUPTOREGG)
+		.value("INFESTEDVENTEGGMISSILE", sc2::UNIT_TYPEID::INFESTEDVENTEGGMISSILE)
+		.value("INFESTEDVENTMUTALISKEGG", sc2::UNIT_TYPEID::INFESTEDVENTMUTALISKEGG)
+		.value("INFESTORENSNAREATTACKMISSILE", sc2::UNIT_TYPEID::INFESTORENSNAREATTACKMISSILE)
+		.value("INFESTORTERRANBURROWED", sc2::UNIT_TYPEID::INFESTORTERRANBURROWED)
+		.value("INFESTORTERRANSWEAPON", sc2::UNIT_TYPEID::INFESTORTERRANSWEAPON)
+		.value("INHIBITORZONEFLYINGLARGE", sc2::UNIT_TYPEID::INHIBITORZONEFLYINGLARGE)
+		.value("INHIBITORZONEFLYINGMEDIUM", sc2::UNIT_TYPEID::INHIBITORZONEFLYINGMEDIUM)
+		.value("INHIBITORZONEFLYINGSMALL", sc2::UNIT_TYPEID::INHIBITORZONEFLYINGSMALL)
+		.value("INHIBITORZONELARGE", sc2::UNIT_TYPEID::INHIBITORZONELARGE)
+		.value("INHIBITORZONEMEDIUM", sc2::UNIT_TYPEID::INHIBITORZONEMEDIUM)
+		.value("INHIBITORZONESMALL", sc2::UNIT_TYPEID::INHIBITORZONESMALL)
+		.value("INVALID", sc2::UNIT_TYPEID::INVALID)
+		.value("INVISIBLEPYLON", sc2::UNIT_TYPEID::INVISIBLEPYLON)
+		.value("INVISIBLETARGETDUMMY", sc2::UNIT_TYPEID::INVISIBLETARGETDUMMY)
+		.value("IONCANNONSWEAPON", sc2::UNIT_TYPEID::IONCANNONSWEAPON)
+		.value("IPISTOLAD", sc2::UNIT_TYPEID::IPISTOLAD)
+		.value("ITEMGRAVITYBOMBS", sc2::UNIT_TYPEID::ITEMGRAVITYBOMBS)
+		.value("ITEMGRAVITYBOMBSWEAPON", sc2::UNIT_TYPEID::ITEMGRAVITYBOMBSWEAPON)
+		.value("ITEMGRENADES", sc2::UNIT_TYPEID::ITEMGRENADES)
+		.value("ITEMGRENADESWEAPON", sc2::UNIT_TYPEID::ITEMGRENADESWEAPON)
+		.value("ITEMMEDKIT", sc2::UNIT_TYPEID::ITEMMEDKIT)
+		.value("ITEMMINES", sc2::UNIT_TYPEID::ITEMMINES)
+		.value("JORIUMSTOCKPILE", sc2::UNIT_TYPEID::JORIUMSTOCKPILE)
+		.value("KARAKMALE", sc2::UNIT_TYPEID::KARAKMALE)
+		.value("KARASS", sc2::UNIT_TYPEID::KARASS)
+		.value("KARASSWEAPON", sc2::UNIT_TYPEID::KARASSWEAPON)
+		.value("KD8CHARGEWEAPON", sc2::UNIT_TYPEID::KD8CHARGEWEAPON)
+		.value("KERRIGAN", sc2::UNIT_TYPEID::KERRIGAN)
+		.value("KERRIGANCHAR", sc2::UNIT_TYPEID::KERRIGANCHAR)
+		.value("KERRIGANCHARBURROWED", sc2::UNIT_TYPEID::KERRIGANCHARBURROWED)
+		.value("KERRIGANCHARWEAPON", sc2::UNIT_TYPEID::KERRIGANCHARWEAPON)
+		.value("KERRIGANEGG", sc2::UNIT_TYPEID::KERRIGANEGG)
+		.value("KERRIGANWEAPON", sc2::UNIT_TYPEID::KERRIGANWEAPON)
+		.value("KHAYDARINMONOLITHACGLUESCREENDUMMY", sc2::UNIT_TYPEID::KHAYDARINMONOLITHACGLUESCREENDUMMY)
+		.value("L800ETC_AD", sc2::UNIT_TYPEID::L800ETC_AD)
+		.value("LABBOT", sc2::UNIT_TYPEID::LABBOT)
+		.value("LARVARELEASEMISSILE", sc2::UNIT_TYPEID::LARVARELEASEMISSILE)
+		.value("LEVIATHAN", sc2::UNIT_TYPEID::LEVIATHAN)
+		.value("LEVIATHANACGLUESCREENDUMMY", sc2::UNIT_TYPEID::LEVIATHANACGLUESCREENDUMMY)
+		.value("LEVIATHANSCOURGEMISSILE", sc2::UNIT_TYPEID::LEVIATHANSCOURGEMISSILE)
+		.value("LIBERATORAGMISSILE", sc2::UNIT_TYPEID::LIBERATORAGMISSILE)
+		.value("LIBERATORDAMAGEMISSILE", sc2::UNIT_TYPEID::LIBERATORDAMAGEMISSILE)
+		.value("LIBERATORMISSILE", sc2::UNIT_TYPEID::LIBERATORMISSILE)
+		.value("LIBERATORSKINPREVIEW", sc2::UNIT_TYPEID::LIBERATORSKINPREVIEW)
+		.value("LIGHTNINGBOMBWEAPON", sc2::UNIT_TYPEID::LIGHTNINGBOMBWEAPON)
+		.value("LOCUSTMPEGGAMISSILEWEAPON", sc2::UNIT_TYPEID::LOCUSTMPEGGAMISSILEWEAPON)
+		.value("LOCUSTMPEGGBMISSILEWEAPON", sc2::UNIT_TYPEID::LOCUSTMPEGGBMISSILEWEAPON)
+		.value("LOCUSTMPPRECURSOR", sc2::UNIT_TYPEID::LOCUSTMPPRECURSOR)
+		.value("LOCUSTMPWEAPON", sc2::UNIT_TYPEID::LOCUSTMPWEAPON)
+		.value("LOGISTICSHEADQUARTERS", sc2::UNIT_TYPEID::LOGISTICSHEADQUARTERS)
+		.value("LOKI", sc2::UNIT_TYPEID::LOKI)
+		.value("LOKIHURRICANEMISSILELEFT", sc2::UNIT_TYPEID::LOKIHURRICANEMISSILELEFT)
+		.value("LOKIHURRICANEMISSILERIGHT", sc2::UNIT_TYPEID::LOKIHURRICANEMISSILERIGHT)
+		.value("LOKIYAMATOWEAPON", sc2::UNIT_TYPEID::LOKIYAMATOWEAPON)
+		.value("LONGBOLTMISSILEWEAPON", sc2::UNIT_TYPEID::LONGBOLTMISSILEWEAPON)
+		.value("LURKER", sc2::UNIT_TYPEID::LURKER)
+		.value("LURKERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::LURKERACGLUESCREENDUMMY)
+		.value("LURKERBURROWED", sc2::UNIT_TYPEID::LURKERBURROWED)
+		.value("LURKERDEN", sc2::UNIT_TYPEID::LURKERDEN)
+		.value("LURKEREGG", sc2::UNIT_TYPEID::LURKEREGG)
+		.value("LYOTE", sc2::UNIT_TYPEID::LYOTE)
+		.value("MAAR", sc2::UNIT_TYPEID::MAAR)
+		.value("MAARWARPINUNIT", sc2::UNIT_TYPEID::MAARWARPINUNIT)
+		.value("MAINCELLBLOCK", sc2::UNIT_TYPEID::MAINCELLBLOCK)
+		.value("MARAUDERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::MARAUDERACGLUESCREENDUMMY)
+		.value("MARAUDERCOMMANDOACGLUESCREENDUMMY", sc2::UNIT_TYPEID::MARAUDERCOMMANDOACGLUESCREENDUMMY)
+		.value("MARAUDERMENGSKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::MARAUDERMENGSKACGLUESCREENDUMMY)
+		.value("MARINEACGLUESCREENDUMMY", sc2::UNIT_TYPEID::MARINEACGLUESCREENDUMMY)
+		.value("MARSARABRIDGEBLUR", sc2::UNIT_TYPEID::MARSARABRIDGEBLUR)
+		.value("MARSARABRIDGEBRUL", sc2::UNIT_TYPEID::MARSARABRIDGEBRUL)
+		.value("MECHABANELINGACGLUESCREENDUMMY", sc2::UNIT_TYPEID::MECHABANELINGACGLUESCREENDUMMY)
+		.value("MECHABATTLECARRIERLORDACGLUESCREENDUMMY", sc2::UNIT_TYPEID::MECHABATTLECARRIERLORDACGLUESCREENDUMMY)
+		.value("MECHACORRUPTORACGLUESCREENDUMMY", sc2::UNIT_TYPEID::MECHACORRUPTORACGLUESCREENDUMMY)
+		.value("MECHAHYDRALISKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::MECHAHYDRALISKACGLUESCREENDUMMY)
+		.value("MECHAINFESTORACGLUESCREENDUMMY", sc2::UNIT_TYPEID::MECHAINFESTORACGLUESCREENDUMMY)
+		.value("MECHALURKERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::MECHALURKERACGLUESCREENDUMMY)
+		.value("MECHAOVERSEERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::MECHAOVERSEERACGLUESCREENDUMMY)
+		.value("MECHASPINECRAWLERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::MECHASPINECRAWLERACGLUESCREENDUMMY)
+		.value("MECHASPORECRAWLERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::MECHASPORECRAWLERACGLUESCREENDUMMY)
+		.value("MECHAULTRALISKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::MECHAULTRALISKACGLUESCREENDUMMY)
+		.value("MECHAZERGLINGACGLUESCREENDUMMY", sc2::UNIT_TYPEID::MECHAZERGLINGACGLUESCREENDUMMY)
+		.value("MEDIC", sc2::UNIT_TYPEID::MEDIC)
+		.value("MEDICACGLUESCREENDUMMY", sc2::UNIT_TYPEID::MEDICACGLUESCREENDUMMY)
+		.value("MEDIVACMENGSKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::MEDIVACMENGSKACGLUESCREENDUMMY)
+		.value("MENGSKHOLOGRAMBILLBOARD", sc2::UNIT_TYPEID::MENGSKHOLOGRAMBILLBOARD)
+		.value("MENGSKSTATUE", sc2::UNIT_TYPEID::MENGSKSTATUE)
+		.value("MENGSKSTATUEALONE", sc2::UNIT_TYPEID::MENGSKSTATUEALONE)
+		.value("MERCCOMPOUND", sc2::UNIT_TYPEID::MERCCOMPOUND)
+		.value("MERCENARYFORTRESS", sc2::UNIT_TYPEID::MERCENARYFORTRESS)
+		.value("METALGATEDIAGONALBLUR", sc2::UNIT_TYPEID::METALGATEDIAGONALBLUR)
+		.value("METALGATEDIAGONALBLURLOWERED", sc2::UNIT_TYPEID::METALGATEDIAGONALBLURLOWERED)
+		.value("METALGATEDIAGONALULBR", sc2::UNIT_TYPEID::METALGATEDIAGONALULBR)
+		.value("METALGATEDIAGONALULBRLOWERED", sc2::UNIT_TYPEID::METALGATEDIAGONALULBRLOWERED)
+		.value("METALGATESTRAIGHTHORIZONTAL", sc2::UNIT_TYPEID::METALGATESTRAIGHTHORIZONTAL)
+		.value("METALGATESTRAIGHTHORIZONTALBF", sc2::UNIT_TYPEID::METALGATESTRAIGHTHORIZONTALBF)
+		.value("METALGATESTRAIGHTHORIZONTALBFLOWERED", sc2::UNIT_TYPEID::METALGATESTRAIGHTHORIZONTALBFLOWERED)
+		.value("METALGATESTRAIGHTHORIZONTALLOWERED", sc2::UNIT_TYPEID::METALGATESTRAIGHTHORIZONTALLOWERED)
+		.value("METALGATESTRAIGHTVERTICAL", sc2::UNIT_TYPEID::METALGATESTRAIGHTVERTICAL)
+		.value("METALGATESTRAIGHTVERTICALLF", sc2::UNIT_TYPEID::METALGATESTRAIGHTVERTICALLF)
+		.value("METALGATESTRAIGHTVERTICALLFLOWERED", sc2::UNIT_TYPEID::METALGATESTRAIGHTVERTICALLFLOWERED)
+		.value("METALGATESTRAIGHTVERTICALLOWERED", sc2::UNIT_TYPEID::METALGATESTRAIGHTVERTICALLOWERED)
+		.value("MINDSIPHONRETURNWEAPON", sc2::UNIT_TYPEID::MINDSIPHONRETURNWEAPON)
+		.value("MINDSIPHONWEAPON", sc2::UNIT_TYPEID::MINDSIPHONWEAPON)
+		.value("MINERALCRYSTAL", sc2::UNIT_TYPEID::MINERALCRYSTAL)
+		.value("MINERALFIELDOPAQUE", sc2::UNIT_TYPEID::MINERALFIELDOPAQUE)
+		.value("MINERALFIELDOPAQUE900", sc2::UNIT_TYPEID::MINERALFIELDOPAQUE900)
+		.value("MINERMALE", sc2::UNIT_TYPEID::MINERMALE)
+		.value("MISSILETURRETACGLUESCREENDUMMY", sc2::UNIT_TYPEID::MISSILETURRETACGLUESCREENDUMMY)
+		.value("MISSILETURRETMENGSKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::MISSILETURRETMENGSKACGLUESCREENDUMMY)
+		.value("MOHANDAR", sc2::UNIT_TYPEID::MOHANDAR)
+		.value("MONLYTHARTIFACTFORCEFIELD", sc2::UNIT_TYPEID::MONLYTHARTIFACTFORCEFIELD)
+		.value("MONLYTHFORCEFIELDSTATUE", sc2::UNIT_TYPEID::MONLYTHFORCEFIELDSTATUE)
+		.value("MONOLITH", sc2::UNIT_TYPEID::MONOLITH)
+		.value("MOOPY", sc2::UNIT_TYPEID::MOOPY)
+		.value("MOTHERSHIPCOREWEAPONWEAPON", sc2::UNIT_TYPEID::MOTHERSHIPCOREWEAPONWEAPON)
+		.value("MULTIKILLOBJECT", sc2::UNIT_TYPEID::MULTIKILLOBJECT)
+		.value("MURLOCMARINE", sc2::UNIT_TYPEID::MURLOCMARINE)
+		.value("MUTALISKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::MUTALISKACGLUESCREENDUMMY)
+		.value("MUTALISKBROODLORDACGLUESCREENDUMMY", sc2::UNIT_TYPEID::MUTALISKBROODLORDACGLUESCREENDUMMY)
+		.value("MUTALISKEGG", sc2::UNIT_TYPEID::MUTALISKEGG)
+		.value("MUTALISKEGGMISSILE", sc2::UNIT_TYPEID::MUTALISKEGGMISSILE)
+		.value("NATURALGAS", sc2::UNIT_TYPEID::NATURALGAS)
+		.value("NATURALMINERALS", sc2::UNIT_TYPEID::NATURALMINERALS)
+		.value("NATURALMINERALSRED", sc2::UNIT_TYPEID::NATURALMINERALSRED)
+		.value("NEEDLESPINESWEAPON", sc2::UNIT_TYPEID::NEEDLESPINESWEAPON)
+		.value("NEURALPARASITETENTACLEMISSILE", sc2::UNIT_TYPEID::NEURALPARASITETENTACLEMISSILE)
+		.value("NEURALPARASITEWEAPON", sc2::UNIT_TYPEID::NEURALPARASITEWEAPON)
+		.value("NEUTRAL_BATTLESTATIONMINERALFIELD", sc2::UNIT_TYPEID::NEUTRAL_BATTLESTATIONMINERALFIELD)
+		.value("NEUTRAL_BATTLESTATIONMINERALFIELD750", sc2::UNIT_TYPEID::NEUTRAL_BATTLESTATIONMINERALFIELD750)
+		.value("NEUTRAL_COLLAPSIBLEROCKTOWERDEBRIS", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLEROCKTOWERDEBRIS)
+		.value("NEUTRAL_COLLAPSIBLEROCKTOWERDIAGONAL", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLEROCKTOWERDIAGONAL)
+		.value("NEUTRAL_COLLAPSIBLEROCKTOWERPUSHUNIT", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLEROCKTOWERPUSHUNIT)
+		.value("NEUTRAL_COLLAPSIBLETERRANTOWERDEBRIS", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLETERRANTOWERDEBRIS)
+		.value("NEUTRAL_COLLAPSIBLETERRANTOWERDIAGONAL", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLETERRANTOWERDIAGONAL)
+		.value("NEUTRAL_COLLAPSIBLETERRANTOWERPUSHUNIT", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLETERRANTOWERPUSHUNIT)
+		.value("NEUTRAL_COLLAPSIBLETERRANTOWERPUSHUNITRAMPLEFT", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLETERRANTOWERPUSHUNITRAMPLEFT)
+		.value("NEUTRAL_COLLAPSIBLETERRANTOWERPUSHUNITRAMPRIGHT", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLETERRANTOWERPUSHUNITRAMPRIGHT)
+		.value("NEUTRAL_COLLAPSIBLETERRANTOWERRAMPLEFT", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLETERRANTOWERRAMPLEFT)
+		.value("NEUTRAL_COLLAPSIBLETERRANTOWERRAMPRIGHT", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLETERRANTOWERRAMPRIGHT)
+		.value("NEUTRAL_DEBRISRAMPLEFT", sc2::UNIT_TYPEID::NEUTRAL_DEBRISRAMPLEFT)
+		.value("NEUTRAL_DEBRISRAMPRIGHT", sc2::UNIT_TYPEID::NEUTRAL_DEBRISRAMPRIGHT)
+		.value("NEUTRAL_DESTRUCTIBLECITYDEBRIS6X6", sc2::UNIT_TYPEID::NEUTRAL_DESTRUCTIBLECITYDEBRIS6X6)
+		.value("NEUTRAL_DESTRUCTIBLEDEBRIS6X6", sc2::UNIT_TYPEID::NEUTRAL_DESTRUCTIBLEDEBRIS6X6)
+		.value("NEUTRAL_DESTRUCTIBLEDEBRISRAMPDIAGONALHUGEBLUR", sc2::UNIT_TYPEID::NEUTRAL_DESTRUCTIBLEDEBRISRAMPDIAGONALHUGEBLUR)
+		.value("NEUTRAL_DESTRUCTIBLEDEBRISRAMPDIAGONALHUGEULBR", sc2::UNIT_TYPEID::NEUTRAL_DESTRUCTIBLEDEBRISRAMPDIAGONALHUGEULBR)
+		.value("NEUTRAL_DESTRUCTIBLEROCK6X6", sc2::UNIT_TYPEID::NEUTRAL_DESTRUCTIBLEROCK6X6)
+		.value("NEUTRAL_DESTRUCTIBLEROCKEX1DIAGONALHUGEBLUR", sc2::UNIT_TYPEID::NEUTRAL_DESTRUCTIBLEROCKEX1DIAGONALHUGEBLUR)
+		.value("NEUTRAL_FORCEFIELD", sc2::UNIT_TYPEID::NEUTRAL_FORCEFIELD)
+		.value("NEUTRAL_KARAKFEMALE", sc2::UNIT_TYPEID::NEUTRAL_KARAKFEMALE)
+		.value("NEUTRAL_LABMINERALFIELD", sc2::UNIT_TYPEID::NEUTRAL_LABMINERALFIELD)
+		.value("NEUTRAL_LABMINERALFIELD750", sc2::UNIT_TYPEID::NEUTRAL_LABMINERALFIELD750)
+		.value("NEUTRAL_MINERALFIELD", sc2::UNIT_TYPEID::NEUTRAL_MINERALFIELD)
+		.value("NEUTRAL_MINERALFIELD450", sc2::UNIT_TYPEID::NEUTRAL_MINERALFIELD450)
+		.value("NEUTRAL_MINERALFIELD750", sc2::UNIT_TYPEID::NEUTRAL_MINERALFIELD750)
+		.value("NEUTRAL_PROTOSSVESPENEGEYSER", sc2::UNIT_TYPEID::NEUTRAL_PROTOSSVESPENEGEYSER)
+		.value("NEUTRAL_PURIFIERMINERALFIELD", sc2::UNIT_TYPEID::NEUTRAL_PURIFIERMINERALFIELD)
+		.value("NEUTRAL_PURIFIERMINERALFIELD750", sc2::UNIT_TYPEID::NEUTRAL_PURIFIERMINERALFIELD750)
+		.value("NEUTRAL_PURIFIERRICHMINERALFIELD", sc2::UNIT_TYPEID::NEUTRAL_PURIFIERRICHMINERALFIELD)
+		.value("NEUTRAL_PURIFIERRICHMINERALFIELD750", sc2::UNIT_TYPEID::NEUTRAL_PURIFIERRICHMINERALFIELD750)
+		.value("NEUTRAL_PURIFIERVESPENEGEYSER", sc2::UNIT_TYPEID::NEUTRAL_PURIFIERVESPENEGEYSER)
+		.value("NEUTRAL_RICHMINERALFIELD", sc2::UNIT_TYPEID::NEUTRAL_RICHMINERALFIELD)
+		.value("NEUTRAL_RICHMINERALFIELD750", sc2::UNIT_TYPEID::NEUTRAL_RICHMINERALFIELD750)
+		.value("NEUTRAL_RICHVESPENEGEYSER", sc2::UNIT_TYPEID::NEUTRAL_RICHVESPENEGEYSER)
+		.value("NEUTRAL_SCANTIPEDE", sc2::UNIT_TYPEID::NEUTRAL_SCANTIPEDE)
+		.value("NEUTRAL_SHAKURASVESPENEGEYSER", sc2::UNIT_TYPEID::NEUTRAL_SHAKURASVESPENEGEYSER)
+		.value("NEUTRAL_SPACEPLATFORMGEYSER", sc2::UNIT_TYPEID::NEUTRAL_SPACEPLATFORMGEYSER)
+		.value("NEUTRAL_UNBUILDABLEBRICKSDESTRUCTIBLE", sc2::UNIT_TYPEID::NEUTRAL_UNBUILDABLEBRICKSDESTRUCTIBLE)
+		.value("NEUTRAL_UNBUILDABLEPLATESDESTRUCTIBLE", sc2::UNIT_TYPEID::NEUTRAL_UNBUILDABLEPLATESDESTRUCTIBLE)
+		.value("NEUTRAL_UTILITYBOT", sc2::UNIT_TYPEID::NEUTRAL_UTILITYBOT)
+		.value("NEUTRAL_VESPENEGEYSER", sc2::UNIT_TYPEID::NEUTRAL_VESPENEGEYSER)
+		.value("NEUTRAL_XELNAGATOWER", sc2::UNIT_TYPEID::NEUTRAL_XELNAGATOWER)
+		.value("NEWFOLSOMPRISONENTRANCE", sc2::UNIT_TYPEID::NEWFOLSOMPRISONENTRANCE)
+		.value("NEWSARCTURUSINTERVIEWSET", sc2::UNIT_TYPEID::NEWSARCTURUSINTERVIEWSET)
+		.value("NEWSARCTURUSPRESSROOM", sc2::UNIT_TYPEID::NEWSARCTURUSPRESSROOM)
+		.value("NEWSMEINHOFFREFUGEECENTER", sc2::UNIT_TYPEID::NEWSMEINHOFFREFUGEECENTER)
+		.value("NEWSRAYNORLOGO", sc2::UNIT_TYPEID::NEWSRAYNORLOGO)
+		.value("NEWSTVEFFECT", sc2::UNIT_TYPEID::NEWSTVEFFECT)
+		.value("NOVA", sc2::UNIT_TYPEID::NOVA)
+		.value("NUKENOODLESCOMMERCIAL", sc2::UNIT_TYPEID::NUKENOODLESCOMMERCIAL)
+		.value("NUKEPACK", sc2::UNIT_TYPEID::NUKEPACK)
+		.value("NUKESILONOVA", sc2::UNIT_TYPEID::NUKESILONOVA)
+		.value("NYDUSCANALATTACKER", sc2::UNIT_TYPEID::NYDUSCANALATTACKER)
+		.value("NYDUSCANALATTACKERWEAPON", sc2::UNIT_TYPEID::NYDUSCANALATTACKERWEAPON)
+		.value("NYDUSCANALCREEPER", sc2::UNIT_TYPEID::NYDUSCANALCREEPER)
+		.value("NYDUSNETWORKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::NYDUSNETWORKACGLUESCREENDUMMY)
+		.value("NYDUSWORMLAVADEATH", sc2::UNIT_TYPEID::NYDUSWORMLAVADEATH)
+		.value("OBELISK", sc2::UNIT_TYPEID::OBELISK)
+		.value("OBSERVERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::OBSERVERACGLUESCREENDUMMY)
+		.value("OBSERVERFENIXACGLUESCREENDUMMY", sc2::UNIT_TYPEID::OBSERVERFENIXACGLUESCREENDUMMY)
+		.value("ODIN", sc2::UNIT_TYPEID::ODIN)
+		.value("ODINAAWEAPON", sc2::UNIT_TYPEID::ODINAAWEAPON)
+		.value("ODINBUILD", sc2::UNIT_TYPEID::ODINBUILD)
+		.value("ODINWRECKAGE", sc2::UNIT_TYPEID::ODINWRECKAGE)
+		.value("OMEGALISK", sc2::UNIT_TYPEID::OMEGALISK)
+		.value("OMEGALISKBURROWED", sc2::UNIT_TYPEID::OMEGALISKBURROWED)
+		.value("OMEGANETWORKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::OMEGANETWORKACGLUESCREENDUMMY)
+		.value("ORACLEACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ORACLEACGLUESCREENDUMMY)
+		.value("ORACLEWEAPON", sc2::UNIT_TYPEID::ORACLEWEAPON)
+		.value("ORBITALCOMMANDACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ORBITALCOMMANDACGLUESCREENDUMMY)
+		.value("OVERLORDGENERATECREEPKEYBIND", sc2::UNIT_TYPEID::OVERLORDGENERATECREEPKEYBIND)
+		.value("OVERMIND", sc2::UNIT_TYPEID::OVERMIND)
+		.value("OVERMINDREMAINS", sc2::UNIT_TYPEID::OVERMINDREMAINS)
+		.value("OVERSEERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::OVERSEERACGLUESCREENDUMMY)
+		.value("OVERSEERZAGARAACGLUESCREENDUMMY", sc2::UNIT_TYPEID::OVERSEERZAGARAACGLUESCREENDUMMY)
+		.value("PALLETGAS", sc2::UNIT_TYPEID::PALLETGAS)
+		.value("PALLETMINERALS", sc2::UNIT_TYPEID::PALLETMINERALS)
+		.value("PARASITESPOREWEAPON", sc2::UNIT_TYPEID::PARASITESPOREWEAPON)
+		.value("PARASITICBOMBMISSILE", sc2::UNIT_TYPEID::PARASITICBOMBMISSILE)
+		.value("PARASITICBOMBRELAYDUMMY", sc2::UNIT_TYPEID::PARASITICBOMBRELAYDUMMY)
+		.value("PATHINGBLOCKER1X1", sc2::UNIT_TYPEID::PATHINGBLOCKER1X1)
+		.value("PATHINGBLOCKER2X2", sc2::UNIT_TYPEID::PATHINGBLOCKER2X2)
+		.value("PATHINGBLOCKERRADIUS1", sc2::UNIT_TYPEID::PATHINGBLOCKERRADIUS1)
+		.value("PERDITIONTURRET", sc2::UNIT_TYPEID::PERDITIONTURRET)
+		.value("PERDITIONTURRETACGLUESCREENDUMMY", sc2::UNIT_TYPEID::PERDITIONTURRETACGLUESCREENDUMMY)
+		.value("PERDITIONTURRETUNDERGROUND", sc2::UNIT_TYPEID::PERDITIONTURRETUNDERGROUND)
+		.value("PERMANENTCREEPBLOCKER1X1", sc2::UNIT_TYPEID::PERMANENTCREEPBLOCKER1X1)
+		.value("PHOENIXAIURACGLUESCREENDUMMY", sc2::UNIT_TYPEID::PHOENIXAIURACGLUESCREENDUMMY)
+		.value("PHOENIXPURIFIERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::PHOENIXPURIFIERACGLUESCREENDUMMY)
+		.value("PHOTONCANNONACGLUESCREENDUMMY", sc2::UNIT_TYPEID::PHOTONCANNONACGLUESCREENDUMMY)
+		.value("PHOTONCANNONFENIXACGLUESCREENDUMMY", sc2::UNIT_TYPEID::PHOTONCANNONFENIXACGLUESCREENDUMMY)
+		.value("PHOTONCANNONTALDARIMACGLUESCREENDUMMY", sc2::UNIT_TYPEID::PHOTONCANNONTALDARIMACGLUESCREENDUMMY)
+		.value("PHOTONCANNONWEAPON", sc2::UNIT_TYPEID::PHOTONCANNONWEAPON)
+		.value("PHYSICSCAPSULE", sc2::UNIT_TYPEID::PHYSICSCAPSULE)
+		.value("PHYSICSCUBE", sc2::UNIT_TYPEID::PHYSICSCUBE)
+		.value("PHYSICSCYLINDER", sc2::UNIT_TYPEID::PHYSICSCYLINDER)
+		.value("PHYSICSKNOT", sc2::UNIT_TYPEID::PHYSICSKNOT)
+		.value("PHYSICSL", sc2::UNIT_TYPEID::PHYSICSL)
+		.value("PHYSICSPRIMITIVES", sc2::UNIT_TYPEID::PHYSICSPRIMITIVES)
+		.value("PHYSICSSPHERE", sc2::UNIT_TYPEID::PHYSICSSPHERE)
+		.value("PHYSICSSTAR", sc2::UNIT_TYPEID::PHYSICSSTAR)
+		.value("PICKUPCHRONORIFTCHARGE", sc2::UNIT_TYPEID::PICKUPCHRONORIFTCHARGE)
+		.value("PICKUPCHRONORIFTDEVICE", sc2::UNIT_TYPEID::PICKUPCHRONORIFTDEVICE)
+		.value("PICKUPENERGY100", sc2::UNIT_TYPEID::PICKUPENERGY100)
+		.value("PICKUPENERGY25", sc2::UNIT_TYPEID::PICKUPENERGY25)
+		.value("PICKUPENERGY50", sc2::UNIT_TYPEID::PICKUPENERGY50)
+		.value("PICKUPENERGYFULL", sc2::UNIT_TYPEID::PICKUPENERGYFULL)
+		.value("PICKUPGRENADES", sc2::UNIT_TYPEID::PICKUPGRENADES)
+		.value("PICKUPHEALTH100", sc2::UNIT_TYPEID::PICKUPHEALTH100)
+		.value("PICKUPHEALTH25", sc2::UNIT_TYPEID::PICKUPHEALTH25)
+		.value("PICKUPHEALTH50", sc2::UNIT_TYPEID::PICKUPHEALTH50)
+		.value("PICKUPHEALTHFULL", sc2::UNIT_TYPEID::PICKUPHEALTHFULL)
+		.value("PICKUPMANARECHARGE", sc2::UNIT_TYPEID::PICKUPMANARECHARGE)
+		.value("PICKUPMEDICRECHARGE", sc2::UNIT_TYPEID::PICKUPMEDICRECHARGE)
+		.value("PICKUPMINES", sc2::UNIT_TYPEID::PICKUPMINES)
+		.value("PICKUPPALLETGAS", sc2::UNIT_TYPEID::PICKUPPALLETGAS)
+		.value("PICKUPPALLETMINERALS", sc2::UNIT_TYPEID::PICKUPPALLETMINERALS)
+		.value("PICKUPPLASMAGUN", sc2::UNIT_TYPEID::PICKUPPLASMAGUN)
+		.value("PICKUPPLASMAROUNDS", sc2::UNIT_TYPEID::PICKUPPLASMAROUNDS)
+		.value("PICKUPPSISTORM", sc2::UNIT_TYPEID::PICKUPPSISTORM)
+		.value("PICKUPRESTORATIONCHARGE", sc2::UNIT_TYPEID::PICKUPRESTORATIONCHARGE)
+		.value("PICKUPSCRAPSALVAGE1X1", sc2::UNIT_TYPEID::PICKUPSCRAPSALVAGE1X1)
+		.value("PICKUPSCRAPSALVAGE2X2", sc2::UNIT_TYPEID::PICKUPSCRAPSALVAGE2X2)
+		.value("PICKUPSCRAPSALVAGE3X3", sc2::UNIT_TYPEID::PICKUPSCRAPSALVAGE3X3)
+		.value("PLASMATORPEDOESWEAPON", sc2::UNIT_TYPEID::PLASMATORPEDOESWEAPON)
+		.value("PLATFORMCONNECTOR", sc2::UNIT_TYPEID::PLATFORMCONNECTOR)
+		.value("POINTDEFENSEDRONERELEASEWEAPON", sc2::UNIT_TYPEID::POINTDEFENSEDRONERELEASEWEAPON)
+		.value("PORTCITY_BRIDGE_UNITE10", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITE10)
+		.value("PORTCITY_BRIDGE_UNITE10OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITE10OUT)
+		.value("PORTCITY_BRIDGE_UNITE12", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITE12)
+		.value("PORTCITY_BRIDGE_UNITE12OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITE12OUT)
+		.value("PORTCITY_BRIDGE_UNITE8", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITE8)
+		.value("PORTCITY_BRIDGE_UNITE8OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITE8OUT)
+		.value("PORTCITY_BRIDGE_UNITN10", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITN10)
+		.value("PORTCITY_BRIDGE_UNITN10OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITN10OUT)
+		.value("PORTCITY_BRIDGE_UNITN12", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITN12)
+		.value("PORTCITY_BRIDGE_UNITN12OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITN12OUT)
+		.value("PORTCITY_BRIDGE_UNITN8", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITN8)
+		.value("PORTCITY_BRIDGE_UNITN8OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITN8OUT)
+		.value("PORTCITY_BRIDGE_UNITNE10", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITNE10)
+		.value("PORTCITY_BRIDGE_UNITNE10OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITNE10OUT)
+		.value("PORTCITY_BRIDGE_UNITNE12", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITNE12)
+		.value("PORTCITY_BRIDGE_UNITNE12OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITNE12OUT)
+		.value("PORTCITY_BRIDGE_UNITNE8", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITNE8)
+		.value("PORTCITY_BRIDGE_UNITNE8OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITNE8OUT)
+		.value("PORTCITY_BRIDGE_UNITNW10", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITNW10)
+		.value("PORTCITY_BRIDGE_UNITNW10OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITNW10OUT)
+		.value("PORTCITY_BRIDGE_UNITNW12", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITNW12)
+		.value("PORTCITY_BRIDGE_UNITNW12OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITNW12OUT)
+		.value("PORTCITY_BRIDGE_UNITNW8", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITNW8)
+		.value("PORTCITY_BRIDGE_UNITNW8OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITNW8OUT)
+		.value("PORTCITY_BRIDGE_UNITS10", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITS10)
+		.value("PORTCITY_BRIDGE_UNITS10OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITS10OUT)
+		.value("PORTCITY_BRIDGE_UNITS12", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITS12)
+		.value("PORTCITY_BRIDGE_UNITS12OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITS12OUT)
+		.value("PORTCITY_BRIDGE_UNITS8", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITS8)
+		.value("PORTCITY_BRIDGE_UNITS8OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITS8OUT)
+		.value("PORTCITY_BRIDGE_UNITSE10", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITSE10)
+		.value("PORTCITY_BRIDGE_UNITSE10OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITSE10OUT)
+		.value("PORTCITY_BRIDGE_UNITSE12", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITSE12)
+		.value("PORTCITY_BRIDGE_UNITSE12OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITSE12OUT)
+		.value("PORTCITY_BRIDGE_UNITSE8", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITSE8)
+		.value("PORTCITY_BRIDGE_UNITSE8OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITSE8OUT)
+		.value("PORTCITY_BRIDGE_UNITSW10", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITSW10)
+		.value("PORTCITY_BRIDGE_UNITSW10OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITSW10OUT)
+		.value("PORTCITY_BRIDGE_UNITSW12", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITSW12)
+		.value("PORTCITY_BRIDGE_UNITSW12OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITSW12OUT)
+		.value("PORTCITY_BRIDGE_UNITSW8", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITSW8)
+		.value("PORTCITY_BRIDGE_UNITSW8OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITSW8OUT)
+		.value("PORTCITY_BRIDGE_UNITW10", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITW10)
+		.value("PORTCITY_BRIDGE_UNITW10OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITW10OUT)
+		.value("PORTCITY_BRIDGE_UNITW12", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITW12)
+		.value("PORTCITY_BRIDGE_UNITW12OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITW12OUT)
+		.value("PORTCITY_BRIDGE_UNITW8", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITW8)
+		.value("PORTCITY_BRIDGE_UNITW8OUT", sc2::UNIT_TYPEID::PORTCITY_BRIDGE_UNITW8OUT)
+		.value("PORTJUNKER", sc2::UNIT_TYPEID::PORTJUNKER)
+		.value("PREDATOR", sc2::UNIT_TYPEID::PREDATOR)
+		.value("PRESERVERA", sc2::UNIT_TYPEID::PRESERVERA)
+		.value("PRESERVERB", sc2::UNIT_TYPEID::PRESERVERB)
+		.value("PRESERVERBASE", sc2::UNIT_TYPEID::PRESERVERBASE)
+		.value("PRESERVERC", sc2::UNIT_TYPEID::PRESERVERC)
+		.value("PRESERVERPRISON", sc2::UNIT_TYPEID::PRESERVERPRISON)
+		.value("PRIMALGUARDIANACGLUESCREENDUMMY", sc2::UNIT_TYPEID::PRIMALGUARDIANACGLUESCREENDUMMY)
+		.value("PRIMALHYDRALISKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::PRIMALHYDRALISKACGLUESCREENDUMMY)
+		.value("PRIMALIMPALERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::PRIMALIMPALERACGLUESCREENDUMMY)
+		.value("PRIMALMUTALISKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::PRIMALMUTALISKACGLUESCREENDUMMY)
+		.value("PRIMALROACHACGLUESCREENDUMMY", sc2::UNIT_TYPEID::PRIMALROACHACGLUESCREENDUMMY)
+		.value("PRIMALSWARMHOSTACGLUESCREENDUMMY", sc2::UNIT_TYPEID::PRIMALSWARMHOSTACGLUESCREENDUMMY)
+		.value("PRIMALULTRALISKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::PRIMALULTRALISKACGLUESCREENDUMMY)
+		.value("PRIMALWURMACGLUESCREENDUMMY", sc2::UNIT_TYPEID::PRIMALWURMACGLUESCREENDUMMY)
+		.value("PRIMALZERGLINGACGLUESCREENDUMMY", sc2::UNIT_TYPEID::PRIMALZERGLINGACGLUESCREENDUMMY)
+		.value("PRISONERCIVILIAN", sc2::UNIT_TYPEID::PRISONERCIVILIAN)
+		.value("PRISONERSPECTRE", sc2::UNIT_TYPEID::PRISONERSPECTRE)
+		.value("PRISONZEALOT", sc2::UNIT_TYPEID::PRISONZEALOT)
+		.value("PROTOSSCRATES", sc2::UNIT_TYPEID::PROTOSSCRATES)
+		.value("PROTOSSPSIELEMENTS", sc2::UNIT_TYPEID::PROTOSSPSIELEMENTS)
+		.value("PROTOSSRELIC", sc2::UNIT_TYPEID::PROTOSSRELIC)
+		.value("PROTOSSSNAKESEGMENTDEMO", sc2::UNIT_TYPEID::PROTOSSSNAKESEGMENTDEMO)
+		.value("PROTOSS_ADEPT", sc2::UNIT_TYPEID::PROTOSS_ADEPT)
+		.value("PROTOSS_ADEPTPHASESHIFT", sc2::UNIT_TYPEID::PROTOSS_ADEPTPHASESHIFT)
+		.value("PROTOSS_ARCHON", sc2::UNIT_TYPEID::PROTOSS_ARCHON)
+		.value("PROTOSS_ASSIMILATOR", sc2::UNIT_TYPEID::PROTOSS_ASSIMILATOR)
+		.value("PROTOSS_ASSIMILATORRICH", sc2::UNIT_TYPEID::PROTOSS_ASSIMILATORRICH)
+		.value("PROTOSS_CARRIER", sc2::UNIT_TYPEID::PROTOSS_CARRIER)
+		.value("PROTOSS_COLOSSUS", sc2::UNIT_TYPEID::PROTOSS_COLOSSUS)
+		.value("PROTOSS_CYBERNETICSCORE", sc2::UNIT_TYPEID::PROTOSS_CYBERNETICSCORE)
+		.value("PROTOSS_DARKSHRINE", sc2::UNIT_TYPEID::PROTOSS_DARKSHRINE)
+		.value("PROTOSS_DARKTEMPLAR", sc2::UNIT_TYPEID::PROTOSS_DARKTEMPLAR)
+		.value("PROTOSS_DISRUPTOR", sc2::UNIT_TYPEID::PROTOSS_DISRUPTOR)
+		.value("PROTOSS_DISRUPTORPHASED", sc2::UNIT_TYPEID::PROTOSS_DISRUPTORPHASED)
+		.value("PROTOSS_FLEETBEACON", sc2::UNIT_TYPEID::PROTOSS_FLEETBEACON)
+		.value("PROTOSS_FORGE", sc2::UNIT_TYPEID::PROTOSS_FORGE)
+		.value("PROTOSS_GATEWAY", sc2::UNIT_TYPEID::PROTOSS_GATEWAY)
+		.value("PROTOSS_HIGHTEMPLAR", sc2::UNIT_TYPEID::PROTOSS_HIGHTEMPLAR)
+		.value("PROTOSS_IMMORTAL", sc2::UNIT_TYPEID::PROTOSS_IMMORTAL)
+		.value("PROTOSS_INTERCEPTOR", sc2::UNIT_TYPEID::PROTOSS_INTERCEPTOR)
+		.value("PROTOSS_MOTHERSHIP", sc2::UNIT_TYPEID::PROTOSS_MOTHERSHIP)
+		.value("PROTOSS_MOTHERSHIPCORE", sc2::UNIT_TYPEID::PROTOSS_MOTHERSHIPCORE)
+		.value("PROTOSS_NEXUS", sc2::UNIT_TYPEID::PROTOSS_NEXUS)
+		.value("PROTOSS_OBSERVER", sc2::UNIT_TYPEID::PROTOSS_OBSERVER)
+		.value("PROTOSS_OBSERVERSIEGEMODE", sc2::UNIT_TYPEID::PROTOSS_OBSERVERSIEGEMODE)
+		.value("PROTOSS_ORACLE", sc2::UNIT_TYPEID::PROTOSS_ORACLE)
+		.value("PROTOSS_ORACLESTASISTRAP", sc2::UNIT_TYPEID::PROTOSS_ORACLESTASISTRAP)
+		.value("PROTOSS_PHOENIX", sc2::UNIT_TYPEID::PROTOSS_PHOENIX)
+		.value("PROTOSS_PHOTONCANNON", sc2::UNIT_TYPEID::PROTOSS_PHOTONCANNON)
+		.value("PROTOSS_PROBE", sc2::UNIT_TYPEID::PROTOSS_PROBE)
+		.value("PROTOSS_PYLON", sc2::UNIT_TYPEID::PROTOSS_PYLON)
+		.value("PROTOSS_PYLONOVERCHARGED", sc2::UNIT_TYPEID::PROTOSS_PYLONOVERCHARGED)
+		.value("PROTOSS_ROBOTICSBAY", sc2::UNIT_TYPEID::PROTOSS_ROBOTICSBAY)
+		.value("PROTOSS_ROBOTICSFACILITY", sc2::UNIT_TYPEID::PROTOSS_ROBOTICSFACILITY)
+		.value("PROTOSS_SENTRY", sc2::UNIT_TYPEID::PROTOSS_SENTRY)
+		.value("PROTOSS_SHIELDBATTERY", sc2::UNIT_TYPEID::PROTOSS_SHIELDBATTERY)
+		.value("PROTOSS_STALKER", sc2::UNIT_TYPEID::PROTOSS_STALKER)
+		.value("PROTOSS_STARGATE", sc2::UNIT_TYPEID::PROTOSS_STARGATE)
+		.value("PROTOSS_TEMPEST", sc2::UNIT_TYPEID::PROTOSS_TEMPEST)
+		.value("PROTOSS_TEMPLARARCHIVE", sc2::UNIT_TYPEID::PROTOSS_TEMPLARARCHIVE)
+		.value("PROTOSS_TWILIGHTCOUNCIL", sc2::UNIT_TYPEID::PROTOSS_TWILIGHTCOUNCIL)
+		.value("PROTOSS_VOIDRAY", sc2::UNIT_TYPEID::PROTOSS_VOIDRAY)
+		.value("PROTOSS_WARPGATE", sc2::UNIT_TYPEID::PROTOSS_WARPGATE)
+		.value("PROTOSS_WARPPRISM", sc2::UNIT_TYPEID::PROTOSS_WARPPRISM)
+		.value("PROTOSS_WARPPRISMPHASING", sc2::UNIT_TYPEID::PROTOSS_WARPPRISMPHASING)
+		.value("PROTOSS_ZEALOT", sc2::UNIT_TYPEID::PROTOSS_ZEALOT)
+		.value("PSIDISRUPTOR", sc2::UNIT_TYPEID::PSIDISRUPTOR)
+		.value("PSIINDOCTRINATOR", sc2::UNIT_TYPEID::PSIINDOCTRINATOR)
+		.value("PSIOPSCOMMERCIAL", sc2::UNIT_TYPEID::PSIOPSCOMMERCIAL)
+		.value("PSISHOCKWEAPON", sc2::UNIT_TYPEID::PSISHOCKWEAPON)
+		.value("PUNISHERGRENADESLMWEAPON", sc2::UNIT_TYPEID::PUNISHERGRENADESLMWEAPON)
+		.value("PURIFIER", sc2::UNIT_TYPEID::PURIFIER)
+		.value("PURIFIERBLASTMARKUNIT", sc2::UNIT_TYPEID::PURIFIERBLASTMARKUNIT)
+		.value("PYGALISK", sc2::UNIT_TYPEID::PYGALISK)
+		.value("PYGALISKCOCOON", sc2::UNIT_TYPEID::PYGALISKCOCOON)
+		.value("QUEENCOOPACGLUESCREENDUMMY", sc2::UNIT_TYPEID::QUEENCOOPACGLUESCREENDUMMY)
+		.value("QUEENMP", sc2::UNIT_TYPEID::QUEENMP)
+		.value("QUEENMPENSNAREMISSILE", sc2::UNIT_TYPEID::QUEENMPENSNAREMISSILE)
+		.value("QUEENMPSPAWNBROODLINGSMISSILE", sc2::UNIT_TYPEID::QUEENMPSPAWNBROODLINGSMISSILE)
+		.value("QUEENZAGARAACGLUESCREENDUMMY", sc2::UNIT_TYPEID::QUEENZAGARAACGLUESCREENDUMMY)
+		.value("QUESTIONMARK", sc2::UNIT_TYPEID::QUESTIONMARK)
+		.value("RAIDLIBERATORACGLUESCREENDUMMY", sc2::UNIT_TYPEID::RAIDLIBERATORACGLUESCREENDUMMY)
+		.value("RAILGUNTURRETACGLUESCREENDUMMY", sc2::UNIT_TYPEID::RAILGUNTURRETACGLUESCREENDUMMY)
+		.value("RAPTORACGLUESCREENDUMMY", sc2::UNIT_TYPEID::RAPTORACGLUESCREENDUMMY)
+		.value("RAVAGERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::RAVAGERACGLUESCREENDUMMY)
+		.value("RAVAGERBURROWED", sc2::UNIT_TYPEID::RAVAGERBURROWED)
+		.value("RAVAGERCORROSIVEBILEMISSILE", sc2::UNIT_TYPEID::RAVAGERCORROSIVEBILEMISSILE)
+		.value("RAVAGERWEAPONMISSILE", sc2::UNIT_TYPEID::RAVAGERWEAPONMISSILE)
+		.value("RAVASAURACGLUESCREENDUMMY", sc2::UNIT_TYPEID::RAVASAURACGLUESCREENDUMMY)
+		.value("RAVENREPAIRDRONE", sc2::UNIT_TYPEID::RAVENREPAIRDRONE)
+		.value("RAVENREPAIRDRONERELEASEWEAPON", sc2::UNIT_TYPEID::RAVENREPAIRDRONERELEASEWEAPON)
+		.value("RAVENSCRAMBLERMISSILE", sc2::UNIT_TYPEID::RAVENSCRAMBLERMISSILE)
+		.value("RAVENSHREDDERMISSILEWEAPON", sc2::UNIT_TYPEID::RAVENSHREDDERMISSILEWEAPON)
+		.value("RAVENTYPEIIACGLUESCREENDUMMY", sc2::UNIT_TYPEID::RAVENTYPEIIACGLUESCREENDUMMY)
+		.value("RAYNOR", sc2::UNIT_TYPEID::RAYNOR)
+		.value("RAYNOR01", sc2::UNIT_TYPEID::RAYNOR01)
+		.value("RAYNORCOMMANDO", sc2::UNIT_TYPEID::RAYNORCOMMANDO)
+		.value("REAPERPLACEHOLDER", sc2::UNIT_TYPEID::REAPERPLACEHOLDER)
+		.value("REAPERPLACEMENT", sc2::UNIT_TYPEID::REAPERPLACEMENT)
+		.value("REAVERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::REAVERACGLUESCREENDUMMY)
+		.value("REDSTONELAVACRITTER", sc2::UNIT_TYPEID::REDSTONELAVACRITTER)
+		.value("REDSTONELAVACRITTERBURROWED", sc2::UNIT_TYPEID::REDSTONELAVACRITTERBURROWED)
+		.value("REDSTONELAVACRITTERINJURED", sc2::UNIT_TYPEID::REDSTONELAVACRITTERINJURED)
+		.value("REDSTONELAVACRITTERINJUREDBURROWED", sc2::UNIT_TYPEID::REDSTONELAVACRITTERINJUREDBURROWED)
+		.value("RELEASEINTERCEPTORSBEACON", sc2::UNIT_TYPEID::RELEASEINTERCEPTORSBEACON)
+		.value("RENEGADELONGBOLTMISSILEWEAPON", sc2::UNIT_TYPEID::RENEGADELONGBOLTMISSILEWEAPON)
+		.value("RENEGADEMISSILETURRET", sc2::UNIT_TYPEID::RENEGADEMISSILETURRET)
+		.value("REPLICANT", sc2::UNIT_TYPEID::REPLICANT)
+		.value("REPTILECRATE", sc2::UNIT_TYPEID::REPTILECRATE)
+		.value("REPULSERFIELD10", sc2::UNIT_TYPEID::REPULSERFIELD10)
+		.value("REPULSERFIELD12", sc2::UNIT_TYPEID::REPULSERFIELD12)
+		.value("REPULSERFIELD6", sc2::UNIT_TYPEID::REPULSERFIELD6)
+		.value("REPULSERFIELD8", sc2::UNIT_TYPEID::REPULSERFIELD8)
+		.value("REPULSORCANNONWEAPON", sc2::UNIT_TYPEID::REPULSORCANNONWEAPON)
+		.value("RESOURCEBLOCKER", sc2::UNIT_TYPEID::RESOURCEBLOCKER)
+		.value("RIPFIELDGENERATOR", sc2::UNIT_TYPEID::RIPFIELDGENERATOR)
+		.value("RIPFIELDGENERATORSMALL", sc2::UNIT_TYPEID::RIPFIELDGENERATORSMALL)
+		.value("ROACHACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ROACHACGLUESCREENDUMMY)
+		.value("ROACHVILEACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ROACHVILEACGLUESCREENDUMMY)
+		.value("ROCKS2X2NONCONJOINED", sc2::UNIT_TYPEID::ROCKS2X2NONCONJOINED)
+		.value("ROUGHTERRAIN", sc2::UNIT_TYPEID::ROUGHTERRAIN)
+		.value("SCIENCEFACILITY", sc2::UNIT_TYPEID::SCIENCEFACILITY)
+		.value("SCIENCEVESSEL", sc2::UNIT_TYPEID::SCIENCEVESSEL)
+		.value("SCIENCEVESSELACGLUESCREENDUMMY", sc2::UNIT_TYPEID::SCIENCEVESSELACGLUESCREENDUMMY)
+		.value("SCIENTIST", sc2::UNIT_TYPEID::SCIENTIST)
+		.value("SCOPETEST", sc2::UNIT_TYPEID::SCOPETEST)
+		.value("SCOURGE", sc2::UNIT_TYPEID::SCOURGE)
+		.value("SCOURGEACGLUESCREENDUMMY", sc2::UNIT_TYPEID::SCOURGEACGLUESCREENDUMMY)
+		.value("SCOURGEMP", sc2::UNIT_TYPEID::SCOURGEMP)
+		.value("SCOUT", sc2::UNIT_TYPEID::SCOUT)
+		.value("SCOUTACGLUESCREENDUMMY", sc2::UNIT_TYPEID::SCOUTACGLUESCREENDUMMY)
+		.value("SCOUTAIRWEAPONLEFT", sc2::UNIT_TYPEID::SCOUTAIRWEAPONLEFT)
+		.value("SCOUTAIRWEAPONRIGHT", sc2::UNIT_TYPEID::SCOUTAIRWEAPONRIGHT)
+		.value("SCOUTMP", sc2::UNIT_TYPEID::SCOUTMP)
+		.value("SCOUTMPAIRWEAPONLEFT", sc2::UNIT_TYPEID::SCOUTMPAIRWEAPONLEFT)
+		.value("SCOUTMPAIRWEAPONRIGHT", sc2::UNIT_TYPEID::SCOUTMPAIRWEAPONRIGHT)
+		.value("SCRAPHUGE", sc2::UNIT_TYPEID::SCRAPHUGE)
+		.value("SCRAPSALVAGE1X1", sc2::UNIT_TYPEID::SCRAPSALVAGE1X1)
+		.value("SCRAPSALVAGE2X2", sc2::UNIT_TYPEID::SCRAPSALVAGE2X2)
+		.value("SCRAPSALVAGE3X3", sc2::UNIT_TYPEID::SCRAPSALVAGE3X3)
+		.value("SECRETDOCUMENTS", sc2::UNIT_TYPEID::SECRETDOCUMENTS)
+		.value("SECURITYGATEDIAGONALBLUR", sc2::UNIT_TYPEID::SECURITYGATEDIAGONALBLUR)
+		.value("SECURITYGATEDIAGONALBLURLOWERED", sc2::UNIT_TYPEID::SECURITYGATEDIAGONALBLURLOWERED)
+		.value("SECURITYGATEDIAGONALULBR", sc2::UNIT_TYPEID::SECURITYGATEDIAGONALULBR)
+		.value("SECURITYGATEDIAGONALULBRLOWERED", sc2::UNIT_TYPEID::SECURITYGATEDIAGONALULBRLOWERED)
+		.value("SECURITYGATESTRAIGHTHORIZONTAL", sc2::UNIT_TYPEID::SECURITYGATESTRAIGHTHORIZONTAL)
+		.value("SECURITYGATESTRAIGHTHORIZONTALBF", sc2::UNIT_TYPEID::SECURITYGATESTRAIGHTHORIZONTALBF)
+		.value("SECURITYGATESTRAIGHTHORIZONTALBFLOWERED", sc2::UNIT_TYPEID::SECURITYGATESTRAIGHTHORIZONTALBFLOWERED)
+		.value("SECURITYGATESTRAIGHTHORIZONTALLOWERED", sc2::UNIT_TYPEID::SECURITYGATESTRAIGHTHORIZONTALLOWERED)
+		.value("SECURITYGATESTRAIGHTVERTICAL", sc2::UNIT_TYPEID::SECURITYGATESTRAIGHTVERTICAL)
+		.value("SECURITYGATESTRAIGHTVERTICALLF", sc2::UNIT_TYPEID::SECURITYGATESTRAIGHTVERTICALLF)
+		.value("SECURITYGATESTRAIGHTVERTICALLFLOWERED", sc2::UNIT_TYPEID::SECURITYGATESTRAIGHTVERTICALLFLOWERED)
+		.value("SECURITYGATESTRAIGHTVERTICALLOWERED", sc2::UNIT_TYPEID::SECURITYGATESTRAIGHTVERTICALLOWERED)
+		.value("SEEKERMISSILE", sc2::UNIT_TYPEID::SEEKERMISSILE)
+		.value("SELENDIS", sc2::UNIT_TYPEID::SELENDIS)
+		.value("SELENDISINTERCEPTOR", sc2::UNIT_TYPEID::SELENDISINTERCEPTOR)
+		.value("SENTRYACGLUESCREENDUMMY", sc2::UNIT_TYPEID::SENTRYACGLUESCREENDUMMY)
+		.value("SENTRYFENIXACGLUESCREENDUMMY", sc2::UNIT_TYPEID::SENTRYFENIXACGLUESCREENDUMMY)
+		.value("SENTRYGUN", sc2::UNIT_TYPEID::SENTRYGUN)
+		.value("SENTRYGUNUNDERGROUND", sc2::UNIT_TYPEID::SENTRYGUNUNDERGROUND)
+		.value("SENTRYPURIFIERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::SENTRYPURIFIERACGLUESCREENDUMMY)
+		.value("SENTRYTALDARIMACGLUESCREENDUMMY", sc2::UNIT_TYPEID::SENTRYTALDARIMACGLUESCREENDUMMY)
+		.value("SHAKURASLIGHTBRIDGENE10", sc2::UNIT_TYPEID::SHAKURASLIGHTBRIDGENE10)
+		.value("SHAKURASLIGHTBRIDGENE10OUT", sc2::UNIT_TYPEID::SHAKURASLIGHTBRIDGENE10OUT)
+		.value("SHAKURASLIGHTBRIDGENE12", sc2::UNIT_TYPEID::SHAKURASLIGHTBRIDGENE12)
+		.value("SHAKURASLIGHTBRIDGENE12OUT", sc2::UNIT_TYPEID::SHAKURASLIGHTBRIDGENE12OUT)
+		.value("SHAKURASLIGHTBRIDGENE8", sc2::UNIT_TYPEID::SHAKURASLIGHTBRIDGENE8)
+		.value("SHAKURASLIGHTBRIDGENE8OUT", sc2::UNIT_TYPEID::SHAKURASLIGHTBRIDGENE8OUT)
+		.value("SHAKURASLIGHTBRIDGENW10", sc2::UNIT_TYPEID::SHAKURASLIGHTBRIDGENW10)
+		.value("SHAKURASLIGHTBRIDGENW10OUT", sc2::UNIT_TYPEID::SHAKURASLIGHTBRIDGENW10OUT)
+		.value("SHAKURASLIGHTBRIDGENW12", sc2::UNIT_TYPEID::SHAKURASLIGHTBRIDGENW12)
+		.value("SHAKURASLIGHTBRIDGENW12OUT", sc2::UNIT_TYPEID::SHAKURASLIGHTBRIDGENW12OUT)
+		.value("SHAKURASLIGHTBRIDGENW8", sc2::UNIT_TYPEID::SHAKURASLIGHTBRIDGENW8)
+		.value("SHAKURASLIGHTBRIDGENW8OUT", sc2::UNIT_TYPEID::SHAKURASLIGHTBRIDGENW8OUT)
+		.value("SHAPE4POINTSTAR", sc2::UNIT_TYPEID::SHAPE4POINTSTAR)
+		.value("SHAPE5POINTSTAR", sc2::UNIT_TYPEID::SHAPE5POINTSTAR)
+		.value("SHAPE6POINTSTAR", sc2::UNIT_TYPEID::SHAPE6POINTSTAR)
+		.value("SHAPE8POINTSTAR", sc2::UNIT_TYPEID::SHAPE8POINTSTAR)
+		.value("SHAPEAPPLE", sc2::UNIT_TYPEID::SHAPEAPPLE)
+		.value("SHAPEARROWPOINTER", sc2::UNIT_TYPEID::SHAPEARROWPOINTER)
+		.value("SHAPEBANANA", sc2::UNIT_TYPEID::SHAPEBANANA)
+		.value("SHAPEBASEBALL", sc2::UNIT_TYPEID::SHAPEBASEBALL)
+		.value("SHAPEBASEBALLBAT", sc2::UNIT_TYPEID::SHAPEBASEBALLBAT)
+		.value("SHAPEBASKETBALL", sc2::UNIT_TYPEID::SHAPEBASKETBALL)
+		.value("SHAPEBOWL", sc2::UNIT_TYPEID::SHAPEBOWL)
+		.value("SHAPEBOX", sc2::UNIT_TYPEID::SHAPEBOX)
+		.value("SHAPECAPSULE", sc2::UNIT_TYPEID::SHAPECAPSULE)
+		.value("SHAPECARROT", sc2::UNIT_TYPEID::SHAPECARROT)
+		.value("SHAPECASHLARGE", sc2::UNIT_TYPEID::SHAPECASHLARGE)
+		.value("SHAPECASHMEDIUM", sc2::UNIT_TYPEID::SHAPECASHMEDIUM)
+		.value("SHAPECASHSMALL", sc2::UNIT_TYPEID::SHAPECASHSMALL)
+		.value("SHAPECHERRY", sc2::UNIT_TYPEID::SHAPECHERRY)
+		.value("SHAPECONE", sc2::UNIT_TYPEID::SHAPECONE)
+		.value("SHAPECRESCENTMOON", sc2::UNIT_TYPEID::SHAPECRESCENTMOON)
+		.value("SHAPECUBE", sc2::UNIT_TYPEID::SHAPECUBE)
+		.value("SHAPECYLINDER", sc2::UNIT_TYPEID::SHAPECYLINDER)
+		.value("SHAPEDECAHEDRON", sc2::UNIT_TYPEID::SHAPEDECAHEDRON)
+		.value("SHAPEDIAMOND", sc2::UNIT_TYPEID::SHAPEDIAMOND)
+		.value("SHAPEDODECAHEDRON", sc2::UNIT_TYPEID::SHAPEDODECAHEDRON)
+		.value("SHAPEDOLLARSIGN", sc2::UNIT_TYPEID::SHAPEDOLLARSIGN)
+		.value("SHAPEEGG", sc2::UNIT_TYPEID::SHAPEEGG)
+		.value("SHAPEEUROSIGN", sc2::UNIT_TYPEID::SHAPEEUROSIGN)
+		.value("SHAPEFOOTBALL", sc2::UNIT_TYPEID::SHAPEFOOTBALL)
+		.value("SHAPEFOOTBALLCOLORED", sc2::UNIT_TYPEID::SHAPEFOOTBALLCOLORED)
+		.value("SHAPEGEMSTONE", sc2::UNIT_TYPEID::SHAPEGEMSTONE)
+		.value("SHAPEGOLFBALL", sc2::UNIT_TYPEID::SHAPEGOLFBALL)
+		.value("SHAPEGOLFCLUB", sc2::UNIT_TYPEID::SHAPEGOLFCLUB)
+		.value("SHAPEGRAPE", sc2::UNIT_TYPEID::SHAPEGRAPE)
+		.value("SHAPEHAND", sc2::UNIT_TYPEID::SHAPEHAND)
+		.value("SHAPEHEART", sc2::UNIT_TYPEID::SHAPEHEART)
+		.value("SHAPEHOCKEYPUCK", sc2::UNIT_TYPEID::SHAPEHOCKEYPUCK)
+		.value("SHAPEHOCKEYSTICK", sc2::UNIT_TYPEID::SHAPEHOCKEYSTICK)
+		.value("SHAPEHORSESHOE", sc2::UNIT_TYPEID::SHAPEHORSESHOE)
+		.value("SHAPEICOSAHEDRON", sc2::UNIT_TYPEID::SHAPEICOSAHEDRON)
+		.value("SHAPEJACK", sc2::UNIT_TYPEID::SHAPEJACK)
+		.value("SHAPELEMON", sc2::UNIT_TYPEID::SHAPELEMON)
+		.value("SHAPELEMONSMALL", sc2::UNIT_TYPEID::SHAPELEMONSMALL)
+		.value("SHAPEMONEYBAG", sc2::UNIT_TYPEID::SHAPEMONEYBAG)
+		.value("SHAPEO", sc2::UNIT_TYPEID::SHAPEO)
+		.value("SHAPEOCTAHEDRON", sc2::UNIT_TYPEID::SHAPEOCTAHEDRON)
+		.value("SHAPEORANGE", sc2::UNIT_TYPEID::SHAPEORANGE)
+		.value("SHAPEORANGESMALL", sc2::UNIT_TYPEID::SHAPEORANGESMALL)
+		.value("SHAPEPEANUT", sc2::UNIT_TYPEID::SHAPEPEANUT)
+		.value("SHAPEPEAR", sc2::UNIT_TYPEID::SHAPEPEAR)
+		.value("SHAPEPINEAPPLE", sc2::UNIT_TYPEID::SHAPEPINEAPPLE)
+		.value("SHAPEPLUSSIGN", sc2::UNIT_TYPEID::SHAPEPLUSSIGN)
+		.value("SHAPEPOUNDSIGN", sc2::UNIT_TYPEID::SHAPEPOUNDSIGN)
+		.value("SHAPEPYRAMID", sc2::UNIT_TYPEID::SHAPEPYRAMID)
+		.value("SHAPERAINBOW", sc2::UNIT_TYPEID::SHAPERAINBOW)
+		.value("SHAPEROUNDEDCUBE", sc2::UNIT_TYPEID::SHAPEROUNDEDCUBE)
+		.value("SHAPESADFACE", sc2::UNIT_TYPEID::SHAPESADFACE)
+		.value("SHAPESHAMROCK", sc2::UNIT_TYPEID::SHAPESHAMROCK)
+		.value("SHAPESMILEYFACE", sc2::UNIT_TYPEID::SHAPESMILEYFACE)
+		.value("SHAPESOCCERBALL", sc2::UNIT_TYPEID::SHAPESOCCERBALL)
+		.value("SHAPESPADE", sc2::UNIT_TYPEID::SHAPESPADE)
+		.value("SHAPESPHERE", sc2::UNIT_TYPEID::SHAPESPHERE)
+		.value("SHAPESTRAWBERRY", sc2::UNIT_TYPEID::SHAPESTRAWBERRY)
+		.value("SHAPETENNISBALL", sc2::UNIT_TYPEID::SHAPETENNISBALL)
+		.value("SHAPETETRAHEDRON", sc2::UNIT_TYPEID::SHAPETETRAHEDRON)
+		.value("SHAPETHICKTORUS", sc2::UNIT_TYPEID::SHAPETHICKTORUS)
+		.value("SHAPETHINTORUS", sc2::UNIT_TYPEID::SHAPETHINTORUS)
+		.value("SHAPETORUS", sc2::UNIT_TYPEID::SHAPETORUS)
+		.value("SHAPETREASURECHESTCLOSED", sc2::UNIT_TYPEID::SHAPETREASURECHESTCLOSED)
+		.value("SHAPETREASURECHESTOPEN", sc2::UNIT_TYPEID::SHAPETREASURECHESTOPEN)
+		.value("SHAPETUBE", sc2::UNIT_TYPEID::SHAPETUBE)
+		.value("SHAPEWATERMELON", sc2::UNIT_TYPEID::SHAPEWATERMELON)
+		.value("SHAPEWATERMELONSMALL", sc2::UNIT_TYPEID::SHAPEWATERMELONSMALL)
+		.value("SHAPEWONSIGN", sc2::UNIT_TYPEID::SHAPEWONSIGN)
+		.value("SHAPEX", sc2::UNIT_TYPEID::SHAPEX)
+		.value("SHAPEYENSIGN", sc2::UNIT_TYPEID::SHAPEYENSIGN)
+		.value("SHEEP", sc2::UNIT_TYPEID::SHEEP)
+		.value("SHIELDBATTERYACGLUESCREENDUMMY", sc2::UNIT_TYPEID::SHIELDBATTERYACGLUESCREENDUMMY)
+		.value("SHIPALARM", sc2::UNIT_TYPEID::SHIPALARM)
+		.value("SHORTBRIDGEHORIZONTAL", sc2::UNIT_TYPEID::SHORTBRIDGEHORIZONTAL)
+		.value("SHORTBRIDGEVERTICAL", sc2::UNIT_TYPEID::SHORTBRIDGEVERTICAL)
+		.value("SIEGEBREAKER", sc2::UNIT_TYPEID::SIEGEBREAKER)
+		.value("SIEGEBREAKERSIEGED", sc2::UNIT_TYPEID::SIEGEBREAKERSIEGED)
+		.value("SIEGETANKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::SIEGETANKACGLUESCREENDUMMY)
+		.value("SIEGETANKMENGSKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::SIEGETANKMENGSKACGLUESCREENDUMMY)
+		.value("SIEGETANKSKINPREVIEW", sc2::UNIT_TYPEID::SIEGETANKSKINPREVIEW)
+		.value("SILIBERATORACGLUESCREENDUMMY", sc2::UNIT_TYPEID::SILIBERATORACGLUESCREENDUMMY)
+		.value("SLAYNELEMENTAL", sc2::UNIT_TYPEID::SLAYNELEMENTAL)
+		.value("SLAYNELEMENTALGRABAIRUNIT", sc2::UNIT_TYPEID::SLAYNELEMENTALGRABAIRUNIT)
+		.value("SLAYNELEMENTALGRABGROUNDUNIT", sc2::UNIT_TYPEID::SLAYNELEMENTALGRABGROUNDUNIT)
+		.value("SLAYNELEMENTALGRABWEAPON", sc2::UNIT_TYPEID::SLAYNELEMENTALGRABWEAPON)
+		.value("SLAYNELEMENTALWEAPON", sc2::UNIT_TYPEID::SLAYNELEMENTALWEAPON)
+		.value("SLAYNSWARMHOSTSPAWNFLYER", sc2::UNIT_TYPEID::SLAYNSWARMHOSTSPAWNFLYER)
+		.value("SMADJUTANT", sc2::UNIT_TYPEID::SMADJUTANT)
+		.value("SMADJUTANTHOLOGRAM", sc2::UNIT_TYPEID::SMADJUTANTHOLOGRAM)
+		.value("SMANNABELLE", sc2::UNIT_TYPEID::SMANNABELLE)
+		.value("SMARCTURUSHOLOGRAM", sc2::UNIT_TYPEID::SMARCTURUSHOLOGRAM)
+		.value("SMARCTURUSMENGSK", sc2::UNIT_TYPEID::SMARCTURUSMENGSK)
+		.value("SMARMORYBANSHEE", sc2::UNIT_TYPEID::SMARMORYBANSHEE)
+		.value("SMARMORYBANSHEEPHCRATE", sc2::UNIT_TYPEID::SMARMORYBANSHEEPHCRATE)
+		.value("SMARMORYDROPSHIP", sc2::UNIT_TYPEID::SMARMORYDROPSHIP)
+		.value("SMARMORYDROPSHIPPHCRATE", sc2::UNIT_TYPEID::SMARMORYDROPSHIPPHCRATE)
+		.value("SMARMORYGHOSTCRATE", sc2::UNIT_TYPEID::SMARMORYGHOSTCRATE)
+		.value("SMARMORYGHOSTCRATEPHCRATE", sc2::UNIT_TYPEID::SMARMORYGHOSTCRATEPHCRATE)
+		.value("SMARMORYRIFLE", sc2::UNIT_TYPEID::SMARMORYRIFLE)
+		.value("SMARMORYSPECTRECRATE", sc2::UNIT_TYPEID::SMARMORYSPECTRECRATE)
+		.value("SMARMORYSPECTRECRATEPHCRATE", sc2::UNIT_TYPEID::SMARMORYSPECTRECRATEPHCRATE)
+		.value("SMARMORYSPIDERMINE", sc2::UNIT_TYPEID::SMARMORYSPIDERMINE)
+		.value("SMARMORYSPIDERMINEPHCRATE", sc2::UNIT_TYPEID::SMARMORYSPIDERMINEPHCRATE)
+		.value("SMARMORYTANK", sc2::UNIT_TYPEID::SMARMORYTANK)
+		.value("SMARMORYTANKPHCRATE", sc2::UNIT_TYPEID::SMARMORYTANKPHCRATE)
+		.value("SMARMORYVIKING", sc2::UNIT_TYPEID::SMARMORYVIKING)
+		.value("SMARMORYVIKINGPHCRATE", sc2::UNIT_TYPEID::SMARMORYVIKINGPHCRATE)
+		.value("SMBANSHEE", sc2::UNIT_TYPEID::SMBANSHEE)
+		.value("SMBOUNTYHUNTER", sc2::UNIT_TYPEID::SMBOUNTYHUNTER)
+		.value("SMBRALIK", sc2::UNIT_TYPEID::SMBRALIK)
+		.value("SMBRIDGEPLANETAGRIA", sc2::UNIT_TYPEID::SMBRIDGEPLANETAGRIA)
+		.value("SMBRIDGEPLANETAIUR", sc2::UNIT_TYPEID::SMBRIDGEPLANETAIUR)
+		.value("SMBRIDGEPLANETAVERNUS", sc2::UNIT_TYPEID::SMBRIDGEPLANETAVERNUS)
+		.value("SMBRIDGEPLANETBELSHIR", sc2::UNIT_TYPEID::SMBRIDGEPLANETBELSHIR)
+		.value("SMBRIDGEPLANETCASTANAR", sc2::UNIT_TYPEID::SMBRIDGEPLANETCASTANAR)
+		.value("SMBRIDGEPLANETCHAR", sc2::UNIT_TYPEID::SMBRIDGEPLANETCHAR)
+		.value("SMBRIDGEPLANETHAVEN", sc2::UNIT_TYPEID::SMBRIDGEPLANETHAVEN)
+		.value("SMBRIDGEPLANETKORHAL", sc2::UNIT_TYPEID::SMBRIDGEPLANETKORHAL)
+		.value("SMBRIDGEPLANETMEINHOFF", sc2::UNIT_TYPEID::SMBRIDGEPLANETMEINHOFF)
+		.value("SMBRIDGEPLANETMONLYTH", sc2::UNIT_TYPEID::SMBRIDGEPLANETMONLYTH)
+		.value("SMBRIDGEPLANETNEWFOLSOM", sc2::UNIT_TYPEID::SMBRIDGEPLANETNEWFOLSOM)
+		.value("SMBRIDGEPLANETPORTZION", sc2::UNIT_TYPEID::SMBRIDGEPLANETPORTZION)
+		.value("SMBRIDGEPLANETREDSTONE", sc2::UNIT_TYPEID::SMBRIDGEPLANETREDSTONE)
+		.value("SMBRIDGEPLANETSHAKURAS", sc2::UNIT_TYPEID::SMBRIDGEPLANETSHAKURAS)
+		.value("SMBRIDGEPLANETSPACE", sc2::UNIT_TYPEID::SMBRIDGEPLANETSPACE)
+		.value("SMBRIDGEPLANETSPACEASTEROIDS", sc2::UNIT_TYPEID::SMBRIDGEPLANETSPACEASTEROIDS)
+		.value("SMBRIDGEPLANETTARSONIS", sc2::UNIT_TYPEID::SMBRIDGEPLANETTARSONIS)
+		.value("SMBRIDGEPLANETTYPHON", sc2::UNIT_TYPEID::SMBRIDGEPLANETTYPHON)
+		.value("SMBRIDGEPLANETTYRADOR", sc2::UNIT_TYPEID::SMBRIDGEPLANETTYRADOR)
+		.value("SMBRIDGEPLANETULAAN", sc2::UNIT_TYPEID::SMBRIDGEPLANETULAAN)
+		.value("SMBRIDGEPLANETULNAR", sc2::UNIT_TYPEID::SMBRIDGEPLANETULNAR)
+		.value("SMBRIDGEPLANETVALHALLA", sc2::UNIT_TYPEID::SMBRIDGEPLANETVALHALLA)
+		.value("SMBRIDGEPLANETXIL", sc2::UNIT_TYPEID::SMBRIDGEPLANETXIL)
+		.value("SMBRIDGEPLANETZHAKULDAS", sc2::UNIT_TYPEID::SMBRIDGEPLANETZHAKULDAS)
+		.value("SMBRIDGEWINDOWSPACE", sc2::UNIT_TYPEID::SMBRIDGEWINDOWSPACE)
+		.value("SMCADE", sc2::UNIT_TYPEID::SMCADE)
+		.value("SMCAMERABRIDGE", sc2::UNIT_TYPEID::SMCAMERABRIDGE)
+		.value("SMCAMERATERRAN01", sc2::UNIT_TYPEID::SMCAMERATERRAN01)
+		.value("SMCAMERATERRAN02A", sc2::UNIT_TYPEID::SMCAMERATERRAN02A)
+		.value("SMCAMERATERRAN02B", sc2::UNIT_TYPEID::SMCAMERATERRAN02B)
+		.value("SMCAMERATERRAN03", sc2::UNIT_TYPEID::SMCAMERATERRAN03)
+		.value("SMCAMERATERRAN04", sc2::UNIT_TYPEID::SMCAMERATERRAN04)
+		.value("SMCAMERATERRAN04A", sc2::UNIT_TYPEID::SMCAMERATERRAN04A)
+		.value("SMCAMERATERRAN04B", sc2::UNIT_TYPEID::SMCAMERATERRAN04B)
+		.value("SMCAMERATERRAN05", sc2::UNIT_TYPEID::SMCAMERATERRAN05)
+		.value("SMCAMERATERRAN06A", sc2::UNIT_TYPEID::SMCAMERATERRAN06A)
+		.value("SMCAMERATERRAN06B", sc2::UNIT_TYPEID::SMCAMERATERRAN06B)
+		.value("SMCAMERATERRAN06C", sc2::UNIT_TYPEID::SMCAMERATERRAN06C)
+		.value("SMCAMERATERRAN07", sc2::UNIT_TYPEID::SMCAMERATERRAN07)
+		.value("SMCAMERATERRAN08", sc2::UNIT_TYPEID::SMCAMERATERRAN08)
+		.value("SMCAMERATERRAN09", sc2::UNIT_TYPEID::SMCAMERATERRAN09)
+		.value("SMCAMERATERRAN10", sc2::UNIT_TYPEID::SMCAMERATERRAN10)
+		.value("SMCAMERATERRAN11", sc2::UNIT_TYPEID::SMCAMERATERRAN11)
+		.value("SMCAMERATERRAN12", sc2::UNIT_TYPEID::SMCAMERATERRAN12)
+		.value("SMCAMERATERRAN13", sc2::UNIT_TYPEID::SMCAMERATERRAN13)
+		.value("SMCAMERATERRAN14", sc2::UNIT_TYPEID::SMCAMERATERRAN14)
+		.value("SMCAMERATERRAN15", sc2::UNIT_TYPEID::SMCAMERATERRAN15)
+		.value("SMCAMERATERRAN16", sc2::UNIT_TYPEID::SMCAMERATERRAN16)
+		.value("SMCAMERATERRAN17", sc2::UNIT_TYPEID::SMCAMERATERRAN17)
+		.value("SMCAMERATERRAN20", sc2::UNIT_TYPEID::SMCAMERATERRAN20)
+		.value("SMCHARBATTLEFIELDENDPROPS", sc2::UNIT_TYPEID::SMCHARBATTLEFIELDENDPROPS)
+		.value("SMCHARBATTLEZONEARTIFACTHS", sc2::UNIT_TYPEID::SMCHARBATTLEZONEARTIFACTHS)
+		.value("SMCHARBATTLEZONEBRIEFCASEHS", sc2::UNIT_TYPEID::SMCHARBATTLEZONEBRIEFCASEHS)
+		.value("SMCHARBATTLEZONEBRIEFINGSET", sc2::UNIT_TYPEID::SMCHARBATTLEZONEBRIEFINGSET)
+		.value("SMCHARBATTLEZONEBRIEFINGSET2", sc2::UNIT_TYPEID::SMCHARBATTLEZONEBRIEFINGSET2)
+		.value("SMCHARBATTLEZONEBRIEFINGSETLEFT", sc2::UNIT_TYPEID::SMCHARBATTLEZONEBRIEFINGSETLEFT)
+		.value("SMCHARBATTLEZONEBRIEFINGSETRIGHT", sc2::UNIT_TYPEID::SMCHARBATTLEZONEBRIEFINGSETRIGHT)
+		.value("SMCHARBATTLEZONEDROPSHIPHS", sc2::UNIT_TYPEID::SMCHARBATTLEZONEDROPSHIPHS)
+		.value("SMCHARBATTLEZONEFLAG", sc2::UNIT_TYPEID::SMCHARBATTLEZONEFLAG)
+		.value("SMCHARBATTLEZONERADIOHS", sc2::UNIT_TYPEID::SMCHARBATTLEZONERADIOHS)
+		.value("SMCHARBATTLEZONESET", sc2::UNIT_TYPEID::SMCHARBATTLEZONESET)
+		.value("SMCHARBATTLEZONESET2", sc2::UNIT_TYPEID::SMCHARBATTLEZONESET2)
+		.value("SMCHARBATTLEZONESET3", sc2::UNIT_TYPEID::SMCHARBATTLEZONESET3)
+		.value("SMCHARBATTLEZONESET4", sc2::UNIT_TYPEID::SMCHARBATTLEZONESET4)
+		.value("SMCHARBATTLEZONESET5", sc2::UNIT_TYPEID::SMCHARBATTLEZONESET5)
+		.value("SMCHARBATTLEZONESHADOWBOX", sc2::UNIT_TYPEID::SMCHARBATTLEZONESHADOWBOX)
+		.value("SMCHARBATTLEZONETURRET", sc2::UNIT_TYPEID::SMCHARBATTLEZONETURRET)
+		.value("SMCHARCUTSCENES00", sc2::UNIT_TYPEID::SMCHARCUTSCENES00)
+		.value("SMCHARCUTSCENES01", sc2::UNIT_TYPEID::SMCHARCUTSCENES01)
+		.value("SMCHARCUTSCENES02", sc2::UNIT_TYPEID::SMCHARCUTSCENES02)
+		.value("SMCHARCUTSCENES03", sc2::UNIT_TYPEID::SMCHARCUTSCENES03)
+		.value("SMCHARGATLINGGUN", sc2::UNIT_TYPEID::SMCHARGATLINGGUN)
+		.value("SMCHARINTERACTIVE02SKYPARALLAX", sc2::UNIT_TYPEID::SMCHARINTERACTIVE02SKYPARALLAX)
+		.value("SMCHARINTERACTIVESKYPARALLAX", sc2::UNIT_TYPEID::SMCHARINTERACTIVESKYPARALLAX)
+		.value("SMCIVILIAN", sc2::UNIT_TYPEID::SMCIVILIAN)
+		.value("SMCOOPER", sc2::UNIT_TYPEID::SMCOOPER)
+		.value("SMDONNYVERMILLION", sc2::UNIT_TYPEID::SMDONNYVERMILLION)
+		.value("SMDONNYVERMILLIONDEATH", sc2::UNIT_TYPEID::SMDONNYVERMILLIONDEATH)
+		.value("SMDONNYVERMILLIONSET", sc2::UNIT_TYPEID::SMDONNYVERMILLIONSET)
+		.value("SMDROPSHIP", sc2::UNIT_TYPEID::SMDROPSHIP)
+		.value("SMDROPSHIPBLUE", sc2::UNIT_TYPEID::SMDROPSHIPBLUE)
+		.value("SMEARL", sc2::UNIT_TYPEID::SMEARL)
+		.value("SMFIREBAT", sc2::UNIT_TYPEID::SMFIREBAT)
+		.value("SMFIREBATPHCRATE", sc2::UNIT_TYPEID::SMFIREBATPHCRATE)
+		.value("SMFIRSTOFFICER", sc2::UNIT_TYPEID::SMFIRSTOFFICER)
+		.value("SMFLY", sc2::UNIT_TYPEID::SMFLY)
+		.value("SMGENERICMALEGREASEMONKEY01", sc2::UNIT_TYPEID::SMGENERICMALEGREASEMONKEY01)
+		.value("SMGENERICMALEGREASEMONKEY02", sc2::UNIT_TYPEID::SMGENERICMALEGREASEMONKEY02)
+		.value("SMGENERICMALEOFFICER01", sc2::UNIT_TYPEID::SMGENERICMALEOFFICER01)
+		.value("SMGENERICMALEOFFICER02", sc2::UNIT_TYPEID::SMGENERICMALEOFFICER02)
+		.value("SMHALL", sc2::UNIT_TYPEID::SMHALL)
+		.value("SMHAVENPLANET", sc2::UNIT_TYPEID::SMHAVENPLANET)
+		.value("SMHILL", sc2::UNIT_TYPEID::SMHILL)
+		.value("SMHYDRALISK", sc2::UNIT_TYPEID::SMHYDRALISK)
+		.value("SMHYDRALISKDEAD", sc2::UNIT_TYPEID::SMHYDRALISKDEAD)
+		.value("SMHYPERIONARMORER", sc2::UNIT_TYPEID::SMHYPERIONARMORER)
+		.value("SMHYPERIONARMORYSPACELIGHTING", sc2::UNIT_TYPEID::SMHYPERIONARMORYSPACELIGHTING)
+		.value("SMHYPERIONARMORYSTAGE1SET", sc2::UNIT_TYPEID::SMHYPERIONARMORYSTAGE1SET)
+		.value("SMHYPERIONARMORYSTAGE1SET01", sc2::UNIT_TYPEID::SMHYPERIONARMORYSTAGE1SET01)
+		.value("SMHYPERIONARMORYSTAGE1SET02", sc2::UNIT_TYPEID::SMHYPERIONARMORYSTAGE1SET02)
+		.value("SMHYPERIONARMORYSTAGE1SET03", sc2::UNIT_TYPEID::SMHYPERIONARMORYSTAGE1SET03)
+		.value("SMHYPERIONARMORYSTAGE1SWANNCAMERAS", sc2::UNIT_TYPEID::SMHYPERIONARMORYSTAGE1SWANNCAMERAS)
+		.value("SMHYPERIONARMORYSTAGE1TECHNOLOGYCONSOLEHS", sc2::UNIT_TYPEID::SMHYPERIONARMORYSTAGE1TECHNOLOGYCONSOLEHS)
+		.value("SMHYPERIONARMORYVIKING", sc2::UNIT_TYPEID::SMHYPERIONARMORYVIKING)
+		.value("SMHYPERIONBRIDGEBRIEFING", sc2::UNIT_TYPEID::SMHYPERIONBRIDGEBRIEFING)
+		.value("SMHYPERIONBRIDGEBRIEFINGCENTER", sc2::UNIT_TYPEID::SMHYPERIONBRIDGEBRIEFINGCENTER)
+		.value("SMHYPERIONBRIDGEBRIEFINGLEFT", sc2::UNIT_TYPEID::SMHYPERIONBRIDGEBRIEFINGLEFT)
+		.value("SMHYPERIONBRIDGEBRIEFINGRIGHT", sc2::UNIT_TYPEID::SMHYPERIONBRIDGEBRIEFINGRIGHT)
+		.value("SMHYPERIONBRIDGEHOLOMAP", sc2::UNIT_TYPEID::SMHYPERIONBRIDGEHOLOMAP)
+		.value("SMHYPERIONBRIDGEPROPS", sc2::UNIT_TYPEID::SMHYPERIONBRIDGEPROPS)
+		.value("SMHYPERIONBRIDGESTAGE1BATTLECOMMANDHS", sc2::UNIT_TYPEID::SMHYPERIONBRIDGESTAGE1BATTLECOMMANDHS)
+		.value("SMHYPERIONBRIDGESTAGE1BATTLEREPORTSHS", sc2::UNIT_TYPEID::SMHYPERIONBRIDGESTAGE1BATTLEREPORTSHS)
+		.value("SMHYPERIONBRIDGESTAGE1BOW", sc2::UNIT_TYPEID::SMHYPERIONBRIDGESTAGE1BOW)
+		.value("SMHYPERIONBRIDGESTAGE1CANTINAHS", sc2::UNIT_TYPEID::SMHYPERIONBRIDGESTAGE1CANTINAHS)
+		.value("SMHYPERIONBRIDGESTAGE1CENTERCONSOLEHS", sc2::UNIT_TYPEID::SMHYPERIONBRIDGESTAGE1CENTERCONSOLEHS)
+		.value("SMHYPERIONBRIDGESTAGE1HANSONCAMERAS", sc2::UNIT_TYPEID::SMHYPERIONBRIDGESTAGE1HANSONCAMERAS)
+		.value("SMHYPERIONBRIDGESTAGE1HORNERCAMERAS", sc2::UNIT_TYPEID::SMHYPERIONBRIDGESTAGE1HORNERCAMERAS)
+		.value("SMHYPERIONBRIDGESTAGE1SET", sc2::UNIT_TYPEID::SMHYPERIONBRIDGESTAGE1SET)
+		.value("SMHYPERIONBRIDGESTAGE1SET2", sc2::UNIT_TYPEID::SMHYPERIONBRIDGESTAGE1SET2)
+		.value("SMHYPERIONBRIDGESTAGE1SET3", sc2::UNIT_TYPEID::SMHYPERIONBRIDGESTAGE1SET3)
+		.value("SMHYPERIONBRIDGESTAGE1TOSHCAMERAS", sc2::UNIT_TYPEID::SMHYPERIONBRIDGESTAGE1TOSHCAMERAS)
+		.value("SMHYPERIONBRIDGESTAGE1TYCHUSCAMERAS", sc2::UNIT_TYPEID::SMHYPERIONBRIDGESTAGE1TYCHUSCAMERAS)
+		.value("SMHYPERIONBRIDGESTAGE1WINDOWHS", sc2::UNIT_TYPEID::SMHYPERIONBRIDGESTAGE1WINDOWHS)
+		.value("SMHYPERIONBRIDGETRAYNOR03BRIEFINGCAMERA", sc2::UNIT_TYPEID::SMHYPERIONBRIDGETRAYNOR03BRIEFINGCAMERA)
+		.value("SMHYPERIONCANTINABADGEHS", sc2::UNIT_TYPEID::SMHYPERIONCANTINABADGEHS)
+		.value("SMHYPERIONCANTINAHYDRACLAWSHS", sc2::UNIT_TYPEID::SMHYPERIONCANTINAHYDRACLAWSHS)
+		.value("SMHYPERIONCANTINAMERCCOMPUTERHS", sc2::UNIT_TYPEID::SMHYPERIONCANTINAMERCCOMPUTERHS)
+		.value("SMHYPERIONCANTINAPOSTER1HS", sc2::UNIT_TYPEID::SMHYPERIONCANTINAPOSTER1HS)
+		.value("SMHYPERIONCANTINAPOSTER2HS", sc2::UNIT_TYPEID::SMHYPERIONCANTINAPOSTER2HS)
+		.value("SMHYPERIONCANTINAPOSTER3HS", sc2::UNIT_TYPEID::SMHYPERIONCANTINAPOSTER3HS)
+		.value("SMHYPERIONCANTINAPOSTER4HS", sc2::UNIT_TYPEID::SMHYPERIONCANTINAPOSTER4HS)
+		.value("SMHYPERIONCANTINAPOSTER5HS", sc2::UNIT_TYPEID::SMHYPERIONCANTINAPOSTER5HS)
+		.value("SMHYPERIONCANTINAPROGRESSFRAME", sc2::UNIT_TYPEID::SMHYPERIONCANTINAPROGRESSFRAME)
+		.value("SMHYPERIONCANTINAPROPS", sc2::UNIT_TYPEID::SMHYPERIONCANTINAPROPS)
+		.value("SMHYPERIONCANTINASTAGE1ARCADEGAMEHS", sc2::UNIT_TYPEID::SMHYPERIONCANTINASTAGE1ARCADEGAMEHS)
+		.value("SMHYPERIONCANTINASTAGE1CORKBOARDHS", sc2::UNIT_TYPEID::SMHYPERIONCANTINASTAGE1CORKBOARDHS)
+		.value("SMHYPERIONCANTINASTAGE1EXITHS", sc2::UNIT_TYPEID::SMHYPERIONCANTINASTAGE1EXITHS)
+		.value("SMHYPERIONCANTINASTAGE1JUKEBOXHS", sc2::UNIT_TYPEID::SMHYPERIONCANTINASTAGE1JUKEBOXHS)
+		.value("SMHYPERIONCANTINASTAGE1PROGRESS1HS", sc2::UNIT_TYPEID::SMHYPERIONCANTINASTAGE1PROGRESS1HS)
+		.value("SMHYPERIONCANTINASTAGE1PROGRESS2HS", sc2::UNIT_TYPEID::SMHYPERIONCANTINASTAGE1PROGRESS2HS)
+		.value("SMHYPERIONCANTINASTAGE1PROGRESS3HS", sc2::UNIT_TYPEID::SMHYPERIONCANTINASTAGE1PROGRESS3HS)
+		.value("SMHYPERIONCANTINASTAGE1PROGRESS4HS", sc2::UNIT_TYPEID::SMHYPERIONCANTINASTAGE1PROGRESS4HS)
+		.value("SMHYPERIONCANTINASTAGE1PROGRESS5HS", sc2::UNIT_TYPEID::SMHYPERIONCANTINASTAGE1PROGRESS5HS)
+		.value("SMHYPERIONCANTINASTAGE1PROGRESS6HS", sc2::UNIT_TYPEID::SMHYPERIONCANTINASTAGE1PROGRESS6HS)
+		.value("SMHYPERIONCANTINASTAGE1SET", sc2::UNIT_TYPEID::SMHYPERIONCANTINASTAGE1SET)
+		.value("SMHYPERIONCANTINASTAGE1SET2", sc2::UNIT_TYPEID::SMHYPERIONCANTINASTAGE1SET2)
+		.value("SMHYPERIONCANTINASTAGE1STAIRCASEHS", sc2::UNIT_TYPEID::SMHYPERIONCANTINASTAGE1STAIRCASEHS)
+		.value("SMHYPERIONCANTINASTAGE1TVHS", sc2::UNIT_TYPEID::SMHYPERIONCANTINASTAGE1TVHS)
+		.value("SMHYPERIONCANTINASTAGE1WALLPIECE", sc2::UNIT_TYPEID::SMHYPERIONCANTINASTAGE1WALLPIECE)
+		.value("SMHYPERIONCANTINATOSHCAMERAS", sc2::UNIT_TYPEID::SMHYPERIONCANTINATOSHCAMERAS)
+		.value("SMHYPERIONCANTINATYCHUSCAMERAS", sc2::UNIT_TYPEID::SMHYPERIONCANTINATYCHUSCAMERAS)
+		.value("SMHYPERIONCANTINAYBARRACAMERAS", sc2::UNIT_TYPEID::SMHYPERIONCANTINAYBARRACAMERAS)
+		.value("SMHYPERIONCORRIDORPROPS", sc2::UNIT_TYPEID::SMHYPERIONCORRIDORPROPS)
+		.value("SMHYPERIONCORRIDORSET", sc2::UNIT_TYPEID::SMHYPERIONCORRIDORSET)
+		.value("SMHYPERIONEXTERIOR", sc2::UNIT_TYPEID::SMHYPERIONEXTERIOR)
+		.value("SMHYPERIONEXTERIORHOLOGRAM", sc2::UNIT_TYPEID::SMHYPERIONEXTERIORHOLOGRAM)
+		.value("SMHYPERIONEXTERIORLOW", sc2::UNIT_TYPEID::SMHYPERIONEXTERIORLOW)
+		.value("SMHYPERIONLABADJUTANTCAMERAS", sc2::UNIT_TYPEID::SMHYPERIONLABADJUTANTCAMERAS)
+		.value("SMHYPERIONLABARTIFACTBASEHS", sc2::UNIT_TYPEID::SMHYPERIONLABARTIFACTBASEHS)
+		.value("SMHYPERIONLABARTIFACTPART1HS", sc2::UNIT_TYPEID::SMHYPERIONLABARTIFACTPART1HS)
+		.value("SMHYPERIONLABARTIFACTPART2HS", sc2::UNIT_TYPEID::SMHYPERIONLABARTIFACTPART2HS)
+		.value("SMHYPERIONLABARTIFACTPART3HS", sc2::UNIT_TYPEID::SMHYPERIONLABARTIFACTPART3HS)
+		.value("SMHYPERIONLABARTIFACTPART4HS", sc2::UNIT_TYPEID::SMHYPERIONLABARTIFACTPART4HS)
+		.value("SMHYPERIONLABCOWINCAMERAS", sc2::UNIT_TYPEID::SMHYPERIONLABCOWINCAMERAS)
+		.value("SMHYPERIONLABHANSONCAMERAS", sc2::UNIT_TYPEID::SMHYPERIONLABHANSONCAMERAS)
+		.value("SMHYPERIONMEDLABBRIEFING", sc2::UNIT_TYPEID::SMHYPERIONMEDLABBRIEFING)
+		.value("SMHYPERIONMEDLABBRIEFINGCENTER", sc2::UNIT_TYPEID::SMHYPERIONMEDLABBRIEFINGCENTER)
+		.value("SMHYPERIONMEDLABBRIEFINGLEFT", sc2::UNIT_TYPEID::SMHYPERIONMEDLABBRIEFINGLEFT)
+		.value("SMHYPERIONMEDLABBRIEFINGRIGHT", sc2::UNIT_TYPEID::SMHYPERIONMEDLABBRIEFINGRIGHT)
+		.value("SMHYPERIONMEDLABCRYOTUBEA", sc2::UNIT_TYPEID::SMHYPERIONMEDLABCRYOTUBEA)
+		.value("SMHYPERIONMEDLABCRYOTUBEB", sc2::UNIT_TYPEID::SMHYPERIONMEDLABCRYOTUBEB)
+		.value("SMHYPERIONMEDLABPROPS", sc2::UNIT_TYPEID::SMHYPERIONMEDLABPROPS)
+		.value("SMHYPERIONMEDLABPROTOSSCRYOTUBE0HS", sc2::UNIT_TYPEID::SMHYPERIONMEDLABPROTOSSCRYOTUBE0HS)
+		.value("SMHYPERIONMEDLABPROTOSSCRYOTUBE1HS", sc2::UNIT_TYPEID::SMHYPERIONMEDLABPROTOSSCRYOTUBE1HS)
+		.value("SMHYPERIONMEDLABPROTOSSCRYOTUBE2HS", sc2::UNIT_TYPEID::SMHYPERIONMEDLABPROTOSSCRYOTUBE2HS)
+		.value("SMHYPERIONMEDLABPROTOSSCRYOTUBE3HS", sc2::UNIT_TYPEID::SMHYPERIONMEDLABPROTOSSCRYOTUBE3HS)
+		.value("SMHYPERIONMEDLABPROTOSSCRYOTUBE4HS", sc2::UNIT_TYPEID::SMHYPERIONMEDLABPROTOSSCRYOTUBE4HS)
+		.value("SMHYPERIONMEDLABPROTOSSCRYOTUBE5HS", sc2::UNIT_TYPEID::SMHYPERIONMEDLABPROTOSSCRYOTUBE5HS)
+		.value("SMHYPERIONMEDLABSTAGE1ARTIFACTHS", sc2::UNIT_TYPEID::SMHYPERIONMEDLABSTAGE1ARTIFACTHS)
+		.value("SMHYPERIONMEDLABSTAGE1CONSOLEHS", sc2::UNIT_TYPEID::SMHYPERIONMEDLABSTAGE1CONSOLEHS)
+		.value("SMHYPERIONMEDLABSTAGE1CRYSTALHS", sc2::UNIT_TYPEID::SMHYPERIONMEDLABSTAGE1CRYSTALHS)
+		.value("SMHYPERIONMEDLABSTAGE1DOORHS", sc2::UNIT_TYPEID::SMHYPERIONMEDLABSTAGE1DOORHS)
+		.value("SMHYPERIONMEDLABSTAGE1SET", sc2::UNIT_TYPEID::SMHYPERIONMEDLABSTAGE1SET)
+		.value("SMHYPERIONMEDLABSTAGE1SET2", sc2::UNIT_TYPEID::SMHYPERIONMEDLABSTAGE1SET2)
+		.value("SMHYPERIONMEDLABSTAGE1SETLIGHTS", sc2::UNIT_TYPEID::SMHYPERIONMEDLABSTAGE1SETLIGHTS)
+		.value("SMHYPERIONMEDLABZERGCRYOTUBE0HS", sc2::UNIT_TYPEID::SMHYPERIONMEDLABZERGCRYOTUBE0HS)
+		.value("SMHYPERIONMEDLABZERGCRYOTUBE1HS", sc2::UNIT_TYPEID::SMHYPERIONMEDLABZERGCRYOTUBE1HS)
+		.value("SMHYPERIONMEDLABZERGCRYOTUBE2HS", sc2::UNIT_TYPEID::SMHYPERIONMEDLABZERGCRYOTUBE2HS)
+		.value("SMHYPERIONMEDLABZERGCRYOTUBE3HS", sc2::UNIT_TYPEID::SMHYPERIONMEDLABZERGCRYOTUBE3HS)
+		.value("SMHYPERIONMEDLABZERGCRYOTUBE4HS", sc2::UNIT_TYPEID::SMHYPERIONMEDLABZERGCRYOTUBE4HS)
+		.value("SMHYPERIONMEDLABZERGCRYOTUBE5HS", sc2::UNIT_TYPEID::SMHYPERIONMEDLABZERGCRYOTUBE5HS)
+		.value("SMKACHINSKY", sc2::UNIT_TYPEID::SMKACHINSKY)
+		.value("SMKATELOCKWELL", sc2::UNIT_TYPEID::SMKATELOCKWELL)
+		.value("SMKERRIGANPHOTO", sc2::UNIT_TYPEID::SMKERRIGANPHOTO)
+		.value("SMLABASSISTANT", sc2::UNIT_TYPEID::SMLABASSISTANT)
+		.value("SMLEEKENO", sc2::UNIT_TYPEID::SMLEEKENO)
+		.value("SMLEEKENOSET", sc2::UNIT_TYPEID::SMLEEKENOSET)
+		.value("SMMARAUDER", sc2::UNIT_TYPEID::SMMARAUDER)
+		.value("SMMARAUDERPHCRATE", sc2::UNIT_TYPEID::SMMARAUDERPHCRATE)
+		.value("SMMARINE01", sc2::UNIT_TYPEID::SMMARINE01)
+		.value("SMMARINE02", sc2::UNIT_TYPEID::SMMARINE02)
+		.value("SMMARINE02AOD", sc2::UNIT_TYPEID::SMMARINE02AOD)
+		.value("SMMARINE03", sc2::UNIT_TYPEID::SMMARINE03)
+		.value("SMMARINE04", sc2::UNIT_TYPEID::SMMARINE04)
+		.value("SMMARINERIFLE", sc2::UNIT_TYPEID::SMMARINERIFLE)
+		.value("SMMARSARABARBADGEHS", sc2::UNIT_TYPEID::SMMARSARABARBADGEHS)
+		.value("SMMARSARABARBOTTLESHS", sc2::UNIT_TYPEID::SMMARSARABARBOTTLESHS)
+		.value("SMMARSARABARBRIEFINGSET", sc2::UNIT_TYPEID::SMMARSARABARBRIEFINGSET)
+		.value("SMMARSARABARBRIEFINGSET2", sc2::UNIT_TYPEID::SMMARSARABARBRIEFINGSET2)
+		.value("SMMARSARABARBRIEFINGSETLEFT", sc2::UNIT_TYPEID::SMMARSARABARBRIEFINGSETLEFT)
+		.value("SMMARSARABARBRIEFINGSETRIGHT", sc2::UNIT_TYPEID::SMMARSARABARBRIEFINGSETRIGHT)
+		.value("SMMARSARABARBRIEFINGTVMAIN", sc2::UNIT_TYPEID::SMMARSARABARBRIEFINGTVMAIN)
+		.value("SMMARSARABARBRIEFINGTVMAIN2", sc2::UNIT_TYPEID::SMMARSARABARBRIEFINGTVMAIN2)
+		.value("SMMARSARABARBRIEFINGTVMAIN3", sc2::UNIT_TYPEID::SMMARSARABARBRIEFINGTVMAIN3)
+		.value("SMMARSARABARBRIEFINGTVPORTRAIT1", sc2::UNIT_TYPEID::SMMARSARABARBRIEFINGTVPORTRAIT1)
+		.value("SMMARSARABARBRIEFINGTVPORTRAIT2", sc2::UNIT_TYPEID::SMMARSARABARBRIEFINGTVPORTRAIT2)
+		.value("SMMARSARABARBRIEFINGTVPORTRAIT3", sc2::UNIT_TYPEID::SMMARSARABARBRIEFINGTVPORTRAIT3)
+		.value("SMMARSARABARBRIEFINGTVPORTRAIT4", sc2::UNIT_TYPEID::SMMARSARABARBRIEFINGTVPORTRAIT4)
+		.value("SMMARSARABARBRIEFINGTVPORTRAIT5", sc2::UNIT_TYPEID::SMMARSARABARBRIEFINGTVPORTRAIT5)
+		.value("SMMARSARABARCORKBOARDBACKGROUND", sc2::UNIT_TYPEID::SMMARSARABARCORKBOARDBACKGROUND)
+		.value("SMMARSARABARCORKBOARDHS", sc2::UNIT_TYPEID::SMMARSARABARCORKBOARDHS)
+		.value("SMMARSARABARCORKBOARDITEM1HS", sc2::UNIT_TYPEID::SMMARSARABARCORKBOARDITEM1HS)
+		.value("SMMARSARABARCORKBOARDITEM2HS", sc2::UNIT_TYPEID::SMMARSARABARCORKBOARDITEM2HS)
+		.value("SMMARSARABARCORKBOARDITEM3HS", sc2::UNIT_TYPEID::SMMARSARABARCORKBOARDITEM3HS)
+		.value("SMMARSARABARCORKBOARDITEM4HS", sc2::UNIT_TYPEID::SMMARSARABARCORKBOARDITEM4HS)
+		.value("SMMARSARABARCORKBOARDITEM5HS", sc2::UNIT_TYPEID::SMMARSARABARCORKBOARDITEM5HS)
+		.value("SMMARSARABARCORKBOARDITEM6HS", sc2::UNIT_TYPEID::SMMARSARABARCORKBOARDITEM6HS)
+		.value("SMMARSARABARCORKBOARDITEM7HS", sc2::UNIT_TYPEID::SMMARSARABARCORKBOARDITEM7HS)
+		.value("SMMARSARABARCORKBOARDITEM8HS", sc2::UNIT_TYPEID::SMMARSARABARCORKBOARDITEM8HS)
+		.value("SMMARSARABARCORKBOARDITEM9HS", sc2::UNIT_TYPEID::SMMARSARABARCORKBOARDITEM9HS)
+		.value("SMMARSARABARHYDRALISKSKULLHS", sc2::UNIT_TYPEID::SMMARSARABARHYDRALISKSKULLHS)
+		.value("SMMARSARABARJUKEBOXHS", sc2::UNIT_TYPEID::SMMARSARABARJUKEBOXHS)
+		.value("SMMARSARABARKERRIGANPHOTOHS", sc2::UNIT_TYPEID::SMMARSARABARKERRIGANPHOTOHS)
+		.value("SMMARSARABARPROPS", sc2::UNIT_TYPEID::SMMARSARABARPROPS)
+		.value("SMMARSARABARSET", sc2::UNIT_TYPEID::SMMARSARABARSET)
+		.value("SMMARSARABARSET2", sc2::UNIT_TYPEID::SMMARSARABARSET2)
+		.value("SMMARSARABARSTARMAPHS", sc2::UNIT_TYPEID::SMMARSARABARSTARMAPHS)
+		.value("SMMARSARABARTVHS", sc2::UNIT_TYPEID::SMMARSARABARTVHS)
+		.value("SMMARSARABARTYCHUSCAMERAS", sc2::UNIT_TYPEID::SMMARSARABARTYCHUSCAMERAS)
+		.value("SMMARSARAPLANET", sc2::UNIT_TYPEID::SMMARSARAPLANET)
+		.value("SMMIKELIBERTY", sc2::UNIT_TYPEID::SMMIKELIBERTY)
+		.value("SMMUTALISK", sc2::UNIT_TYPEID::SMMUTALISK)
+		.value("SMNOVA", sc2::UNIT_TYPEID::SMNOVA)
+		.value("SMPRESSROOMPROPS", sc2::UNIT_TYPEID::SMPRESSROOMPROPS)
+		.value("SMRAYNORCOMMANDER", sc2::UNIT_TYPEID::SMRAYNORCOMMANDER)
+		.value("SMRAYNORGUN", sc2::UNIT_TYPEID::SMRAYNORGUN)
+		.value("SMRAYNORHANDS", sc2::UNIT_TYPEID::SMRAYNORHANDS)
+		.value("SMRAYNORMARINE", sc2::UNIT_TYPEID::SMRAYNORMARINE)
+		.value("SMSHADOWBOX", sc2::UNIT_TYPEID::SMSHADOWBOX)
+		.value("SMSTETMANN", sc2::UNIT_TYPEID::SMSTETMANN)
+		.value("SMTERRAN01FX", sc2::UNIT_TYPEID::SMTERRAN01FX)
+		.value("SMTERRAN03FX", sc2::UNIT_TYPEID::SMTERRAN03FX)
+		.value("SMTERRAN05FX", sc2::UNIT_TYPEID::SMTERRAN05FX)
+		.value("SMTERRAN05FXMUTALISKS", sc2::UNIT_TYPEID::SMTERRAN05FXMUTALISKS)
+		.value("SMTERRAN05PROPS", sc2::UNIT_TYPEID::SMTERRAN05PROPS)
+		.value("SMTERRAN06AFX", sc2::UNIT_TYPEID::SMTERRAN06AFX)
+		.value("SMTERRAN06APROPS", sc2::UNIT_TYPEID::SMTERRAN06APROPS)
+		.value("SMTERRAN06BFX", sc2::UNIT_TYPEID::SMTERRAN06BFX)
+		.value("SMTERRAN06BPROPS", sc2::UNIT_TYPEID::SMTERRAN06BPROPS)
+		.value("SMTERRAN06CFX", sc2::UNIT_TYPEID::SMTERRAN06CFX)
+		.value("SMTERRAN07FX", sc2::UNIT_TYPEID::SMTERRAN07FX)
+		.value("SMTERRAN07PROPS", sc2::UNIT_TYPEID::SMTERRAN07PROPS)
+		.value("SMTERRAN08PROPS", sc2::UNIT_TYPEID::SMTERRAN08PROPS)
+		.value("SMTERRAN09FX", sc2::UNIT_TYPEID::SMTERRAN09FX)
+		.value("SMTERRAN09PROPS", sc2::UNIT_TYPEID::SMTERRAN09PROPS)
+		.value("SMTERRAN11FX", sc2::UNIT_TYPEID::SMTERRAN11FX)
+		.value("SMTERRAN11FXBLOOD", sc2::UNIT_TYPEID::SMTERRAN11FXBLOOD)
+		.value("SMTERRAN11FXDEBRIS", sc2::UNIT_TYPEID::SMTERRAN11FXDEBRIS)
+		.value("SMTERRAN11FXDEBRIS1", sc2::UNIT_TYPEID::SMTERRAN11FXDEBRIS1)
+		.value("SMTERRAN11FXDEBRIS2", sc2::UNIT_TYPEID::SMTERRAN11FXDEBRIS2)
+		.value("SMTERRAN11FXEXPLOSIONS", sc2::UNIT_TYPEID::SMTERRAN11FXEXPLOSIONS)
+		.value("SMTERRAN11FXMISSILES", sc2::UNIT_TYPEID::SMTERRAN11FXMISSILES)
+		.value("SMTERRAN11PROPS", sc2::UNIT_TYPEID::SMTERRAN11PROPS)
+		.value("SMTERRAN11PROPSBURROWROCKS", sc2::UNIT_TYPEID::SMTERRAN11PROPSBURROWROCKS)
+		.value("SMTERRAN11PROPSRIFLESHELLS", sc2::UNIT_TYPEID::SMTERRAN11PROPSRIFLESHELLS)
+		.value("SMTERRAN12FX", sc2::UNIT_TYPEID::SMTERRAN12FX)
+		.value("SMTERRAN12PROPS", sc2::UNIT_TYPEID::SMTERRAN12PROPS)
+		.value("SMTERRAN13PROPS", sc2::UNIT_TYPEID::SMTERRAN13PROPS)
+		.value("SMTERRAN14FX", sc2::UNIT_TYPEID::SMTERRAN14FX)
+		.value("SMTERRAN14PROPS", sc2::UNIT_TYPEID::SMTERRAN14PROPS)
+		.value("SMTERRAN15FX", sc2::UNIT_TYPEID::SMTERRAN15FX)
+		.value("SMTERRAN15PROPS", sc2::UNIT_TYPEID::SMTERRAN15PROPS)
+		.value("SMTERRAN16FX", sc2::UNIT_TYPEID::SMTERRAN16FX)
+		.value("SMTERRAN16FXFLAK", sc2::UNIT_TYPEID::SMTERRAN16FXFLAK)
+		.value("SMTERRAN17FX", sc2::UNIT_TYPEID::SMTERRAN17FX)
+		.value("SMTERRAN17PROPS", sc2::UNIT_TYPEID::SMTERRAN17PROPS)
+		.value("SMTERRANREADYROOMLEFTTV", sc2::UNIT_TYPEID::SMTERRANREADYROOMLEFTTV)
+		.value("SMTERRANREADYROOMMAINTV", sc2::UNIT_TYPEID::SMTERRANREADYROOMMAINTV)
+		.value("SMTERRANREADYROOMRIGHTTV", sc2::UNIT_TYPEID::SMTERRANREADYROOMRIGHTTV)
+		.value("SMTERRANREADYROOMSET", sc2::UNIT_TYPEID::SMTERRANREADYROOMSET)
+		.value("SMTESTCAMERA", sc2::UNIT_TYPEID::SMTESTCAMERA)
+		.value("SMTOSHKNIFE", sc2::UNIT_TYPEID::SMTOSHKNIFE)
+		.value("SMTOSHSHUTTLEPROPS", sc2::UNIT_TYPEID::SMTOSHSHUTTLEPROPS)
+		.value("SMTOSHSHUTTLESET", sc2::UNIT_TYPEID::SMTOSHSHUTTLESET)
+		.value("SMTOSHSHUTTLESET2", sc2::UNIT_TYPEID::SMTOSHSHUTTLESET2)
+		.value("SMTVSTATIC", sc2::UNIT_TYPEID::SMTVSTATIC)
+		.value("SMUNNCAMERA", sc2::UNIT_TYPEID::SMUNNCAMERA)
+		.value("SMUNNSCREEN", sc2::UNIT_TYPEID::SMUNNSCREEN)
+		.value("SMUNNSET", sc2::UNIT_TYPEID::SMUNNSET)
+		.value("SMVALERIANFLAGSHIPCORRIDORSSET", sc2::UNIT_TYPEID::SMVALERIANFLAGSHIPCORRIDORSSET)
+		.value("SMVALERIANFLAGSHIPCORRIDORSSET2", sc2::UNIT_TYPEID::SMVALERIANFLAGSHIPCORRIDORSSET2)
+		.value("SMVALERIANFLAGSHIPCORRIDORSSET3", sc2::UNIT_TYPEID::SMVALERIANFLAGSHIPCORRIDORSSET3)
+		.value("SMVALERIANFLAGSHIPCORRIDORSSET4", sc2::UNIT_TYPEID::SMVALERIANFLAGSHIPCORRIDORSSET4)
+		.value("SMVALERIANMENGSK", sc2::UNIT_TYPEID::SMVALERIANMENGSK)
+		.value("SMVALERIANOBSERVATORYPAINTINGHS", sc2::UNIT_TYPEID::SMVALERIANOBSERVATORYPAINTINGHS)
+		.value("SMVALERIANOBSERVATORYPROPS", sc2::UNIT_TYPEID::SMVALERIANOBSERVATORYPROPS)
+		.value("SMVALERIANOBSERVATORYSET", sc2::UNIT_TYPEID::SMVALERIANOBSERVATORYSET)
+		.value("SMVALERIANOBSERVATORYSET2", sc2::UNIT_TYPEID::SMVALERIANOBSERVATORYSET2)
+		.value("SMVALERIANOBSERVATORYSET3", sc2::UNIT_TYPEID::SMVALERIANOBSERVATORYSET3)
+		.value("SMVALERIANOBSERVATORYSTARMAP", sc2::UNIT_TYPEID::SMVALERIANOBSERVATORYSTARMAP)
+		.value("SMVIKING", sc2::UNIT_TYPEID::SMVIKING)
+		.value("SMYBARRA", sc2::UNIT_TYPEID::SMYBARRA)
+		.value("SMZERATUL", sc2::UNIT_TYPEID::SMZERATUL)
+		.value("SMZERGEDHANSON", sc2::UNIT_TYPEID::SMZERGEDHANSON)
+		.value("SMZERGLING", sc2::UNIT_TYPEID::SMZERGLING)
+		.value("SNARE_PLACEHOLDER", sc2::UNIT_TYPEID::SNARE_PLACEHOLDER)
+		.value("SNOWGLAZESTARTERMP", sc2::UNIT_TYPEID::SNOWGLAZESTARTERMP)
+		.value("SNOWREFINERY_TERRAN_EXTENDINGBRIDGENESHORT8", sc2::UNIT_TYPEID::SNOWREFINERY_TERRAN_EXTENDINGBRIDGENESHORT8)
+		.value("SNOWREFINERY_TERRAN_EXTENDINGBRIDGENESHORT8OUT", sc2::UNIT_TYPEID::SNOWREFINERY_TERRAN_EXTENDINGBRIDGENESHORT8OUT)
+		.value("SNOWREFINERY_TERRAN_EXTENDINGBRIDGENWSHORT8", sc2::UNIT_TYPEID::SNOWREFINERY_TERRAN_EXTENDINGBRIDGENWSHORT8)
+		.value("SNOWREFINERY_TERRAN_EXTENDINGBRIDGENWSHORT8OUT", sc2::UNIT_TYPEID::SNOWREFINERY_TERRAN_EXTENDINGBRIDGENWSHORT8OUT)
+		.value("SPACEDIABLO", sc2::UNIT_TYPEID::SPACEDIABLO)
+		.value("SPACEPLATFORMCLIFFDOOR0", sc2::UNIT_TYPEID::SPACEPLATFORMCLIFFDOOR0)
+		.value("SPACEPLATFORMCLIFFDOOR1", sc2::UNIT_TYPEID::SPACEPLATFORMCLIFFDOOR1)
+		.value("SPACEPLATFORMCLIFFDOOROPEN0", sc2::UNIT_TYPEID::SPACEPLATFORMCLIFFDOOROPEN0)
+		.value("SPACEPLATFORMCLIFFDOOROPEN1", sc2::UNIT_TYPEID::SPACEPLATFORMCLIFFDOOROPEN1)
+		.value("SPACEPLATFORMDESTRUCTIBLEJUMBOBLOCKER", sc2::UNIT_TYPEID::SPACEPLATFORMDESTRUCTIBLEJUMBOBLOCKER)
+		.value("SPACEPLATFORMDESTRUCTIBLELARGEBLOCKER", sc2::UNIT_TYPEID::SPACEPLATFORMDESTRUCTIBLELARGEBLOCKER)
+		.value("SPACEPLATFORMDESTRUCTIBLEMEDIUMBLOCKER", sc2::UNIT_TYPEID::SPACEPLATFORMDESTRUCTIBLEMEDIUMBLOCKER)
+		.value("SPACEPLATFORMDESTRUCTIBLESMALLBLOCKER", sc2::UNIT_TYPEID::SPACEPLATFORMDESTRUCTIBLESMALLBLOCKER)
+		.value("SPACEPLATFORMREACTORPATHINGBLOCKER", sc2::UNIT_TYPEID::SPACEPLATFORMREACTORPATHINGBLOCKER)
+		.value("SPACEPLATFORMVENTSUNIT", sc2::UNIT_TYPEID::SPACEPLATFORMVENTSUNIT)
+		.value("SPARTANCOMPANY", sc2::UNIT_TYPEID::SPARTANCOMPANY)
+		.value("SPARTANCOMPANYAWEAPON", sc2::UNIT_TYPEID::SPARTANCOMPANYAWEAPON)
+		.value("SPECIALOPSDROPSHIP", sc2::UNIT_TYPEID::SPECIALOPSDROPSHIP)
+		.value("SPECOPSGHOSTACGLUESCREENDUMMY", sc2::UNIT_TYPEID::SPECOPSGHOSTACGLUESCREENDUMMY)
+		.value("SPECTRE", sc2::UNIT_TYPEID::SPECTRE)
+		.value("SPECTRENUKE", sc2::UNIT_TYPEID::SPECTRENUKE)
+		.value("SPIDERMINE", sc2::UNIT_TYPEID::SPIDERMINE)
+		.value("SPIDERMINEBURROWED", sc2::UNIT_TYPEID::SPIDERMINEBURROWED)
+		.value("SPINECRAWLERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::SPINECRAWLERACGLUESCREENDUMMY)
+		.value("SPINECRAWLERWEAPON", sc2::UNIT_TYPEID::SPINECRAWLERWEAPON)
+		.value("SPINNINGDIZZYACGLUESCREENDUMMY", sc2::UNIT_TYPEID::SPINNINGDIZZYACGLUESCREENDUMMY)
+		.value("SPLITTERLINGACGLUESCREENDUMMY", sc2::UNIT_TYPEID::SPLITTERLINGACGLUESCREENDUMMY)
+		.value("SPORECANNON", sc2::UNIT_TYPEID::SPORECANNON)
+		.value("SPORECANNONFIREMISSILE", sc2::UNIT_TYPEID::SPORECANNONFIREMISSILE)
+		.value("SPORECRAWLERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::SPORECRAWLERACGLUESCREENDUMMY)
+		.value("SPORECRAWLERWEAPON", sc2::UNIT_TYPEID::SPORECRAWLERWEAPON)
+		.value("SS_BACKGROUNDSPACE00", sc2::UNIT_TYPEID::SS_BACKGROUNDSPACE00)
+		.value("SS_BACKGROUNDSPACE01", sc2::UNIT_TYPEID::SS_BACKGROUNDSPACE01)
+		.value("SS_BACKGROUNDSPACE02", sc2::UNIT_TYPEID::SS_BACKGROUNDSPACE02)
+		.value("SS_BACKGROUNDSPACELARGE", sc2::UNIT_TYPEID::SS_BACKGROUNDSPACELARGE)
+		.value("SS_BACKGROUNDSPACEPROT00", sc2::UNIT_TYPEID::SS_BACKGROUNDSPACEPROT00)
+		.value("SS_BACKGROUNDSPACEPROT01", sc2::UNIT_TYPEID::SS_BACKGROUNDSPACEPROT01)
+		.value("SS_BACKGROUNDSPACEPROT02", sc2::UNIT_TYPEID::SS_BACKGROUNDSPACEPROT02)
+		.value("SS_BACKGROUNDSPACEPROT03", sc2::UNIT_TYPEID::SS_BACKGROUNDSPACEPROT03)
+		.value("SS_BACKGROUNDSPACEPROT04", sc2::UNIT_TYPEID::SS_BACKGROUNDSPACEPROT04)
+		.value("SS_BACKGROUNDSPACEPROTOSSLARGE", sc2::UNIT_TYPEID::SS_BACKGROUNDSPACEPROTOSSLARGE)
+		.value("SS_BACKGROUNDSPACETERRAN00", sc2::UNIT_TYPEID::SS_BACKGROUNDSPACETERRAN00)
+		.value("SS_BACKGROUNDSPACETERRAN01", sc2::UNIT_TYPEID::SS_BACKGROUNDSPACETERRAN01)
+		.value("SS_BACKGROUNDSPACETERRAN02", sc2::UNIT_TYPEID::SS_BACKGROUNDSPACETERRAN02)
+		.value("SS_BACKGROUNDSPACETERRANLARGE", sc2::UNIT_TYPEID::SS_BACKGROUNDSPACETERRANLARGE)
+		.value("SS_BACKGROUNDSPACEZERG00", sc2::UNIT_TYPEID::SS_BACKGROUNDSPACEZERG00)
+		.value("SS_BACKGROUNDSPACEZERG01", sc2::UNIT_TYPEID::SS_BACKGROUNDSPACEZERG01)
+		.value("SS_BACKGROUNDSPACEZERG02", sc2::UNIT_TYPEID::SS_BACKGROUNDSPACEZERG02)
+		.value("SS_BACKGROUNDSPACEZERGLARGE", sc2::UNIT_TYPEID::SS_BACKGROUNDSPACEZERGLARGE)
+		.value("SS_BACKGROUNDZERG01", sc2::UNIT_TYPEID::SS_BACKGROUNDZERG01)
+		.value("SS_BATTLECRUISER", sc2::UNIT_TYPEID::SS_BATTLECRUISER)
+		.value("SS_BATTLECRUISERHUNTERSEEKERMISSILE", sc2::UNIT_TYPEID::SS_BATTLECRUISERHUNTERSEEKERMISSILE)
+		.value("SS_BATTLECRUISERMISSILE", sc2::UNIT_TYPEID::SS_BATTLECRUISERMISSILE)
+		.value("SS_BATTLECRUISERMISSILELAUNCHER", sc2::UNIT_TYPEID::SS_BATTLECRUISERMISSILELAUNCHER)
+		.value("SS_BLACKEDGEBORDER", sc2::UNIT_TYPEID::SS_BLACKEDGEBORDER)
+		.value("SS_CARRIER", sc2::UNIT_TYPEID::SS_CARRIER)
+		.value("SS_CARRIERBOSS", sc2::UNIT_TYPEID::SS_CARRIERBOSS)
+		.value("SS_CARRIERBOSSMISSILE", sc2::UNIT_TYPEID::SS_CARRIERBOSSMISSILE)
+		.value("SS_CORRUPTOR", sc2::UNIT_TYPEID::SS_CORRUPTOR)
+		.value("SS_CORRUPTORMISSILE", sc2::UNIT_TYPEID::SS_CORRUPTORMISSILE)
+		.value("SS_FIGHTER", sc2::UNIT_TYPEID::SS_FIGHTER)
+		.value("SS_FIGHTERDRONEMISSILE", sc2::UNIT_TYPEID::SS_FIGHTERDRONEMISSILE)
+		.value("SS_FIGHTERMISSILELEFT", sc2::UNIT_TYPEID::SS_FIGHTERMISSILELEFT)
+		.value("SS_FIGHTERMISSILERIGHT", sc2::UNIT_TYPEID::SS_FIGHTERMISSILERIGHT)
+		.value("SS_INTERCEPTOR", sc2::UNIT_TYPEID::SS_INTERCEPTOR)
+		.value("SS_INTERCEPTORMISSILE", sc2::UNIT_TYPEID::SS_INTERCEPTORMISSILE)
+		.value("SS_INTERCEPTORSPAWNMISSILE", sc2::UNIT_TYPEID::SS_INTERCEPTORSPAWNMISSILE)
+		.value("SS_LEVIATHAN", sc2::UNIT_TYPEID::SS_LEVIATHAN)
+		.value("SS_LEVIATHANBOMB", sc2::UNIT_TYPEID::SS_LEVIATHANBOMB)
+		.value("SS_LEVIATHANBOMBMISSILE", sc2::UNIT_TYPEID::SS_LEVIATHANBOMBMISSILE)
+		.value("SS_LEVIATHANSPAWNBOMBMISSILE", sc2::UNIT_TYPEID::SS_LEVIATHANSPAWNBOMBMISSILE)
+		.value("SS_LEVIATHANTENTACLEL1MISSILE", sc2::UNIT_TYPEID::SS_LEVIATHANTENTACLEL1MISSILE)
+		.value("SS_LEVIATHANTENTACLEL2MISSILE", sc2::UNIT_TYPEID::SS_LEVIATHANTENTACLEL2MISSILE)
+		.value("SS_LEVIATHANTENTACLER1MISSILE", sc2::UNIT_TYPEID::SS_LEVIATHANTENTACLER1MISSILE)
+		.value("SS_LEVIATHANTENTACLER2MISSILE", sc2::UNIT_TYPEID::SS_LEVIATHANTENTACLER2MISSILE)
+		.value("SS_LEVIATHANTENTACLETARGET", sc2::UNIT_TYPEID::SS_LEVIATHANTENTACLETARGET)
+		.value("SS_LIGHTNINGPROJECTORFACELEFT", sc2::UNIT_TYPEID::SS_LIGHTNINGPROJECTORFACELEFT)
+		.value("SS_LIGHTNINGPROJECTORFACERIGHT", sc2::UNIT_TYPEID::SS_LIGHTNINGPROJECTORFACERIGHT)
+		.value("SS_PHOENIX", sc2::UNIT_TYPEID::SS_PHOENIX)
+		.value("SS_PHOENIXMISSILE", sc2::UNIT_TYPEID::SS_PHOENIXMISSILE)
+		.value("SS_POWERUPBOMB", sc2::UNIT_TYPEID::SS_POWERUPBOMB)
+		.value("SS_POWERUPHEALTH", sc2::UNIT_TYPEID::SS_POWERUPHEALTH)
+		.value("SS_POWERUPSIDEMISSILES", sc2::UNIT_TYPEID::SS_POWERUPSIDEMISSILES)
+		.value("SS_POWERUPSTRONGERMISSILES", sc2::UNIT_TYPEID::SS_POWERUPSTRONGERMISSILES)
+		.value("SS_SCIENCEVESSEL", sc2::UNIT_TYPEID::SS_SCIENCEVESSEL)
+		.value("SS_SCIENCEVESSELMISSILE", sc2::UNIT_TYPEID::SS_SCIENCEVESSELMISSILE)
+		.value("SS_SCOURGE", sc2::UNIT_TYPEID::SS_SCOURGE)
+		.value("SS_SCOURGEMISSILE", sc2::UNIT_TYPEID::SS_SCOURGEMISSILE)
+		.value("SS_SCOUT", sc2::UNIT_TYPEID::SS_SCOUT)
+		.value("SS_SCOUTMISSILE", sc2::UNIT_TYPEID::SS_SCOUTMISSILE)
+		.value("SS_STRONGMISSILE1", sc2::UNIT_TYPEID::SS_STRONGMISSILE1)
+		.value("SS_STRONGMISSILE2", sc2::UNIT_TYPEID::SS_STRONGMISSILE2)
+		.value("SS_SWARMGUARDIAN", sc2::UNIT_TYPEID::SS_SWARMGUARDIAN)
+		.value("SS_SWARMGUARDIANMISSILE", sc2::UNIT_TYPEID::SS_SWARMGUARDIANMISSILE)
+		.value("SS_TERRATRON", sc2::UNIT_TYPEID::SS_TERRATRON)
+		.value("SS_TERRATRONBEAMTARGET", sc2::UNIT_TYPEID::SS_TERRATRONBEAMTARGET)
+		.value("SS_TERRATRONMISSILE", sc2::UNIT_TYPEID::SS_TERRATRONMISSILE)
+		.value("SS_TERRATRONMISSILELAUNCHER", sc2::UNIT_TYPEID::SS_TERRATRONMISSILELAUNCHER)
+		.value("SS_TERRATRONMISSILESPINNER", sc2::UNIT_TYPEID::SS_TERRATRONMISSILESPINNER)
+		.value("SS_TERRATRONMISSILESPINNERLAUNCHER", sc2::UNIT_TYPEID::SS_TERRATRONMISSILESPINNERLAUNCHER)
+		.value("SS_TERRATRONMISSILESPINNERMISSILE", sc2::UNIT_TYPEID::SS_TERRATRONMISSILESPINNERMISSILE)
+		.value("SS_TERRATRONSAW", sc2::UNIT_TYPEID::SS_TERRATRONSAW)
+		.value("SS_WRAITH", sc2::UNIT_TYPEID::SS_WRAITH)
+		.value("SS_WRAITHMISSILE", sc2::UNIT_TYPEID::SS_WRAITHMISSILE)
+		.value("STALKERSHAKURASACGLUESCREENDUMMY", sc2::UNIT_TYPEID::STALKERSHAKURASACGLUESCREENDUMMY)
+		.value("STALKERTALDARIMACGLUESCREENDUMMY", sc2::UNIT_TYPEID::STALKERTALDARIMACGLUESCREENDUMMY)
+		.value("STALKERWEAPON", sc2::UNIT_TYPEID::STALKERWEAPON)
+		.value("STARPORTTECHREACTOR", sc2::UNIT_TYPEID::STARPORTTECHREACTOR)
+		.value("STEREOSCOPICOPTIONSUNIT", sc2::UNIT_TYPEID::STEREOSCOPICOPTIONSUNIT)
+		.value("STETMANN", sc2::UNIT_TYPEID::STETMANN)
+		.value("STONEZEALOT", sc2::UNIT_TYPEID::STONEZEALOT)
+		.value("STRIKEGOLIATHACGLUESCREENDUMMY", sc2::UNIT_TYPEID::STRIKEGOLIATHACGLUESCREENDUMMY)
+		.value("STUKOVBROODQUEENACGLUESCREENDUMMY", sc2::UNIT_TYPEID::STUKOVBROODQUEENACGLUESCREENDUMMY)
+		.value("STUKOVINFESTEDBANSHEEACGLUESCREENDUMMY", sc2::UNIT_TYPEID::STUKOVINFESTEDBANSHEEACGLUESCREENDUMMY)
+		.value("STUKOVINFESTEDBUNKERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::STUKOVINFESTEDBUNKERACGLUESCREENDUMMY)
+		.value("STUKOVINFESTEDCIVILIANACGLUESCREENDUMMY", sc2::UNIT_TYPEID::STUKOVINFESTEDCIVILIANACGLUESCREENDUMMY)
+		.value("STUKOVINFESTEDDIAMONDBACKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::STUKOVINFESTEDDIAMONDBACKACGLUESCREENDUMMY)
+		.value("STUKOVINFESTEDMARINEACGLUESCREENDUMMY", sc2::UNIT_TYPEID::STUKOVINFESTEDMARINEACGLUESCREENDUMMY)
+		.value("STUKOVINFESTEDMISSILETURRETACGLUESCREENDUMMY", sc2::UNIT_TYPEID::STUKOVINFESTEDMISSILETURRETACGLUESCREENDUMMY)
+		.value("STUKOVINFESTEDSIEGETANKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::STUKOVINFESTEDSIEGETANKACGLUESCREENDUMMY)
+		.value("STUKOVINFESTEDTROOPERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::STUKOVINFESTEDTROOPERACGLUESCREENDUMMY)
+		.value("SUPERWARPGATE", sc2::UNIT_TYPEID::SUPERWARPGATE)
+		.value("SUPPLICANTACGLUESCREENDUMMY", sc2::UNIT_TYPEID::SUPPLICANTACGLUESCREENDUMMY)
+		.value("SUPPLYDEPOTDROP", sc2::UNIT_TYPEID::SUPPLYDEPOTDROP)
+		.value("SWANN", sc2::UNIT_TYPEID::SWANN)
+		.value("SWANNWEAPON", sc2::UNIT_TYPEID::SWANNWEAPON)
+		.value("SWARMHOSTACGLUESCREENDUMMY", sc2::UNIT_TYPEID::SWARMHOSTACGLUESCREENDUMMY)
+		.value("SWARMLING", sc2::UNIT_TYPEID::SWARMLING)
+		.value("SWARMLINGACGLUESCREENDUMMY", sc2::UNIT_TYPEID::SWARMLINGACGLUESCREENDUMMY)
+		.value("SWARMQUEENACGLUESCREENDUMMY", sc2::UNIT_TYPEID::SWARMQUEENACGLUESCREENDUMMY)
+		.value("SYSTEM_SNAPSHOT_DUMMY", sc2::UNIT_TYPEID::SYSTEM_SNAPSHOT_DUMMY)
+		.value("TALDARIMMOTHERSHIP", sc2::UNIT_TYPEID::TALDARIMMOTHERSHIP)
+		.value("TALDARIMPRISON", sc2::UNIT_TYPEID::TALDARIMPRISON)
+		.value("TALDARIMPRISONCRYSTAL", sc2::UNIT_TYPEID::TALDARIMPRISONCRYSTAL)
+		.value("TALONSMISSILEWEAPON", sc2::UNIT_TYPEID::TALONSMISSILEWEAPON)
+		.value("TANKERTRUCK", sc2::UNIT_TYPEID::TANKERTRUCK)
+		.value("TARSONISENGINE", sc2::UNIT_TYPEID::TARSONISENGINE)
+		.value("TARSONISENGINEFAST", sc2::UNIT_TYPEID::TARSONISENGINEFAST)
+		.value("TARSONIS_DOORE", sc2::UNIT_TYPEID::TARSONIS_DOORE)
+		.value("TARSONIS_DOORELOWERED", sc2::UNIT_TYPEID::TARSONIS_DOORELOWERED)
+		.value("TARSONIS_DOORN", sc2::UNIT_TYPEID::TARSONIS_DOORN)
+		.value("TARSONIS_DOORNE", sc2::UNIT_TYPEID::TARSONIS_DOORNE)
+		.value("TARSONIS_DOORNELOWERED", sc2::UNIT_TYPEID::TARSONIS_DOORNELOWERED)
+		.value("TARSONIS_DOORNLOWERED", sc2::UNIT_TYPEID::TARSONIS_DOORNLOWERED)
+		.value("TARSONIS_DOORNW", sc2::UNIT_TYPEID::TARSONIS_DOORNW)
+		.value("TARSONIS_DOORNWLOWERED", sc2::UNIT_TYPEID::TARSONIS_DOORNWLOWERED)
+		.value("TASSADAR", sc2::UNIT_TYPEID::TASSADAR)
+		.value("TAURENOUTHOUSE", sc2::UNIT_TYPEID::TAURENOUTHOUSE)
+		.value("TAURENSPACEMARINE", sc2::UNIT_TYPEID::TAURENSPACEMARINE)
+		.value("TECHREACTOR", sc2::UNIT_TYPEID::TECHREACTOR)
+		.value("TEMPESTACGLUESCREENDUMMY", sc2::UNIT_TYPEID::TEMPESTACGLUESCREENDUMMY)
+		.value("TEMPESTWEAPON", sc2::UNIT_TYPEID::TEMPESTWEAPON)
+		.value("TEMPESTWEAPONGROUND", sc2::UNIT_TYPEID::TEMPESTWEAPONGROUND)
+		.value("TENTACLEAMISSILE", sc2::UNIT_TYPEID::TENTACLEAMISSILE)
+		.value("TENTACLEBMISSILE", sc2::UNIT_TYPEID::TENTACLEBMISSILE)
+		.value("TENTACLECMISSILE", sc2::UNIT_TYPEID::TENTACLECMISSILE)
+		.value("TENTACLEDMISSILE", sc2::UNIT_TYPEID::TENTACLEDMISSILE)
+		.value("TERRANBUGGY", sc2::UNIT_TYPEID::TERRANBUGGY)
+		.value("TERRANDROPPOD", sc2::UNIT_TYPEID::TERRANDROPPOD)
+		.value("TERRAN_ARMORY", sc2::UNIT_TYPEID::TERRAN_ARMORY)
+		.value("TERRAN_AUTOTURRET", sc2::UNIT_TYPEID::TERRAN_AUTOTURRET)
+		.value("TERRAN_BANSHEE", sc2::UNIT_TYPEID::TERRAN_BANSHEE)
+		.value("TERRAN_BARRACKS", sc2::UNIT_TYPEID::TERRAN_BARRACKS)
+		.value("TERRAN_BARRACKSFLYING", sc2::UNIT_TYPEID::TERRAN_BARRACKSFLYING)
+		.value("TERRAN_BARRACKSREACTOR", sc2::UNIT_TYPEID::TERRAN_BARRACKSREACTOR)
+		.value("TERRAN_BARRACKSTECHLAB", sc2::UNIT_TYPEID::TERRAN_BARRACKSTECHLAB)
+		.value("TERRAN_BATTLECRUISER", sc2::UNIT_TYPEID::TERRAN_BATTLECRUISER)
+		.value("TERRAN_BUNKER", sc2::UNIT_TYPEID::TERRAN_BUNKER)
+		.value("TERRAN_COMMANDCENTER", sc2::UNIT_TYPEID::TERRAN_COMMANDCENTER)
+		.value("TERRAN_COMMANDCENTERFLYING", sc2::UNIT_TYPEID::TERRAN_COMMANDCENTERFLYING)
+		.value("TERRAN_CYCLONE", sc2::UNIT_TYPEID::TERRAN_CYCLONE)
+		.value("TERRAN_ENGINEERINGBAY", sc2::UNIT_TYPEID::TERRAN_ENGINEERINGBAY)
+		.value("TERRAN_FACTORY", sc2::UNIT_TYPEID::TERRAN_FACTORY)
+		.value("TERRAN_FACTORYFLYING", sc2::UNIT_TYPEID::TERRAN_FACTORYFLYING)
+		.value("TERRAN_FACTORYREACTOR", sc2::UNIT_TYPEID::TERRAN_FACTORYREACTOR)
+		.value("TERRAN_FACTORYTECHLAB", sc2::UNIT_TYPEID::TERRAN_FACTORYTECHLAB)
+		.value("TERRAN_FUSIONCORE", sc2::UNIT_TYPEID::TERRAN_FUSIONCORE)
+		.value("TERRAN_GHOST", sc2::UNIT_TYPEID::TERRAN_GHOST)
+		.value("TERRAN_GHOSTACADEMY", sc2::UNIT_TYPEID::TERRAN_GHOSTACADEMY)
+		.value("TERRAN_HELLION", sc2::UNIT_TYPEID::TERRAN_HELLION)
+		.value("TERRAN_HELLIONTANK", sc2::UNIT_TYPEID::TERRAN_HELLIONTANK)
+		.value("TERRAN_KD8CHARGE", sc2::UNIT_TYPEID::TERRAN_KD8CHARGE)
+		.value("TERRAN_LIBERATOR", sc2::UNIT_TYPEID::TERRAN_LIBERATOR)
+		.value("TERRAN_LIBERATORAG", sc2::UNIT_TYPEID::TERRAN_LIBERATORAG)
+		.value("TERRAN_MARAUDER", sc2::UNIT_TYPEID::TERRAN_MARAUDER)
+		.value("TERRAN_MARINE", sc2::UNIT_TYPEID::TERRAN_MARINE)
+		.value("TERRAN_MEDIVAC", sc2::UNIT_TYPEID::TERRAN_MEDIVAC)
+		.value("TERRAN_MISSILETURRET", sc2::UNIT_TYPEID::TERRAN_MISSILETURRET)
+		.value("TERRAN_MULE", sc2::UNIT_TYPEID::TERRAN_MULE)
+		.value("TERRAN_NUKE", sc2::UNIT_TYPEID::TERRAN_NUKE)
+		.value("TERRAN_ORBITALCOMMAND", sc2::UNIT_TYPEID::TERRAN_ORBITALCOMMAND)
+		.value("TERRAN_ORBITALCOMMANDFLYING", sc2::UNIT_TYPEID::TERRAN_ORBITALCOMMANDFLYING)
+		.value("TERRAN_PLANETARYFORTRESS", sc2::UNIT_TYPEID::TERRAN_PLANETARYFORTRESS)
+		.value("TERRAN_POINTDEFENSEDRONE", sc2::UNIT_TYPEID::TERRAN_POINTDEFENSEDRONE)
+		.value("TERRAN_PREVIEWBUNKERUPGRADED", sc2::UNIT_TYPEID::TERRAN_PREVIEWBUNKERUPGRADED)
+		.value("TERRAN_RAVEN", sc2::UNIT_TYPEID::TERRAN_RAVEN)
+		.value("TERRAN_REACTOR", sc2::UNIT_TYPEID::TERRAN_REACTOR)
+		.value("TERRAN_REAPER", sc2::UNIT_TYPEID::TERRAN_REAPER)
+		.value("TERRAN_REFINERY", sc2::UNIT_TYPEID::TERRAN_REFINERY)
+		.value("TERRAN_REFINERYRICH", sc2::UNIT_TYPEID::TERRAN_REFINERYRICH)
+		.value("TERRAN_SCV", sc2::UNIT_TYPEID::TERRAN_SCV)
+		.value("TERRAN_SENSORTOWER", sc2::UNIT_TYPEID::TERRAN_SENSORTOWER)
+		.value("TERRAN_SIEGETANK", sc2::UNIT_TYPEID::TERRAN_SIEGETANK)
+		.value("TERRAN_SIEGETANKSIEGED", sc2::UNIT_TYPEID::TERRAN_SIEGETANKSIEGED)
+		.value("TERRAN_STARPORT", sc2::UNIT_TYPEID::TERRAN_STARPORT)
+		.value("TERRAN_STARPORTFLYING", sc2::UNIT_TYPEID::TERRAN_STARPORTFLYING)
+		.value("TERRAN_STARPORTREACTOR", sc2::UNIT_TYPEID::TERRAN_STARPORTREACTOR)
+		.value("TERRAN_STARPORTTECHLAB", sc2::UNIT_TYPEID::TERRAN_STARPORTTECHLAB)
+		.value("TERRAN_SUPPLYDEPOT", sc2::UNIT_TYPEID::TERRAN_SUPPLYDEPOT)
+		.value("TERRAN_SUPPLYDEPOTLOWERED", sc2::UNIT_TYPEID::TERRAN_SUPPLYDEPOTLOWERED)
+		.value("TERRAN_TECHLAB", sc2::UNIT_TYPEID::TERRAN_TECHLAB)
+		.value("TERRAN_THOR", sc2::UNIT_TYPEID::TERRAN_THOR)
+		.value("TERRAN_THORAP", sc2::UNIT_TYPEID::TERRAN_THORAP)
+		.value("TERRAN_VIKINGASSAULT", sc2::UNIT_TYPEID::TERRAN_VIKINGASSAULT)
+		.value("TERRAN_VIKINGFIGHTER", sc2::UNIT_TYPEID::TERRAN_VIKINGFIGHTER)
+		.value("TERRAN_WIDOWMINE", sc2::UNIT_TYPEID::TERRAN_WIDOWMINE)
+		.value("TERRAN_WIDOWMINEBURROWED", sc2::UNIT_TYPEID::TERRAN_WIDOWMINEBURROWED)
+		.value("TERRAZINECANISTER", sc2::UNIT_TYPEID::TERRAZINECANISTER)
+		.value("TERRAZINENODE", sc2::UNIT_TYPEID::TERRAZINENODE)
+		.value("TERRAZINENODEDEADTERRAN", sc2::UNIT_TYPEID::TERRAZINENODEDEADTERRAN)
+		.value("TERRAZINENODEHAPPYPROTOSS", sc2::UNIT_TYPEID::TERRAZINENODEHAPPYPROTOSS)
+		.value("TERRAZINETANK", sc2::UNIT_TYPEID::TERRAZINETANK)
+		.value("TESTHERO", sc2::UNIT_TYPEID::TESTHERO)
+		.value("TESTHERODEBUGMISSILEABILITY1WEAPON", sc2::UNIT_TYPEID::TESTHERODEBUGMISSILEABILITY1WEAPON)
+		.value("TESTHERODEBUGMISSILEABILITY2WEAPON", sc2::UNIT_TYPEID::TESTHERODEBUGMISSILEABILITY2WEAPON)
+		.value("TESTHEROTHROWMISSILE", sc2::UNIT_TYPEID::TESTHEROTHROWMISSILE)
+		.value("TESTSHOP", sc2::UNIT_TYPEID::TESTSHOP)
+		.value("TESTZERG", sc2::UNIT_TYPEID::TESTZERG)
+		.value("THORAALANCE", sc2::UNIT_TYPEID::THORAALANCE)
+		.value("THORAAWEAPON", sc2::UNIT_TYPEID::THORAAWEAPON)
+		.value("THORACGLUESCREENDUMMY", sc2::UNIT_TYPEID::THORACGLUESCREENDUMMY)
+		.value("THORMENGSKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::THORMENGSKACGLUESCREENDUMMY)
+		.value("THORNLIZARD", sc2::UNIT_TYPEID::THORNLIZARD)
+		.value("THORWRECKAGE", sc2::UNIT_TYPEID::THORWRECKAGE)
+		.value("TORNADOMISSILEDUMMYWEAPON", sc2::UNIT_TYPEID::TORNADOMISSILEDUMMYWEAPON)
+		.value("TORNADOMISSILEWEAPON", sc2::UNIT_TYPEID::TORNADOMISSILEWEAPON)
+		.value("TORRASQUEACGLUESCREENDUMMY", sc2::UNIT_TYPEID::TORRASQUEACGLUESCREENDUMMY)
+		.value("TOSH", sc2::UNIT_TYPEID::TOSH)
+		.value("TOSSGRENADEWEAPON", sc2::UNIT_TYPEID::TOSSGRENADEWEAPON)
+		.value("TOWERMINE", sc2::UNIT_TYPEID::TOWERMINE)
+		.value("TRAFFICSIGNAL", sc2::UNIT_TYPEID::TRAFFICSIGNAL)
+		.value("TRANSPORTTRUCK", sc2::UNIT_TYPEID::TRANSPORTTRUCK)
+		.value("TRAYNOR01SIGNSDESTRUCTIBLE1", sc2::UNIT_TYPEID::TRAYNOR01SIGNSDESTRUCTIBLE1)
+		.value("TROOPERMENGSKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::TROOPERMENGSKACGLUESCREENDUMMY)
+		.value("TRUCKFLATBEDUNIT", sc2::UNIT_TYPEID::TRUCKFLATBEDUNIT)
+		.value("TRUCKSEMIUNIT", sc2::UNIT_TYPEID::TRUCKSEMIUNIT)
+		.value("TRUCKUTILITYUNIT", sc2::UNIT_TYPEID::TRUCKUTILITYUNIT)
+		.value("TYCHUSCHAINGUN", sc2::UNIT_TYPEID::TYCHUSCHAINGUN)
+		.value("TYCHUSCOMMANDO", sc2::UNIT_TYPEID::TYCHUSCOMMANDO)
+		.value("TYCHUSEJECTMISSILE", sc2::UNIT_TYPEID::TYCHUSEJECTMISSILE)
+		.value("TYCHUSFIREBATACGLUESCREENDUMMY", sc2::UNIT_TYPEID::TYCHUSFIREBATACGLUESCREENDUMMY)
+		.value("TYCHUSGHOSTACGLUESCREENDUMMY", sc2::UNIT_TYPEID::TYCHUSGHOSTACGLUESCREENDUMMY)
+		.value("TYCHUSGRENADEWEAPON", sc2::UNIT_TYPEID::TYCHUSGRENADEWEAPON)
+		.value("TYCHUSHERCACGLUESCREENDUMMY", sc2::UNIT_TYPEID::TYCHUSHERCACGLUESCREENDUMMY)
+		.value("TYCHUSMARAUDERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::TYCHUSMARAUDERACGLUESCREENDUMMY)
+		.value("TYCHUSMEDICACGLUESCREENDUMMY", sc2::UNIT_TYPEID::TYCHUSMEDICACGLUESCREENDUMMY)
+		.value("TYCHUSREAPERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::TYCHUSREAPERACGLUESCREENDUMMY)
+		.value("TYCHUSSCVAUTOTURRETACGLUESCREENDUMMY", sc2::UNIT_TYPEID::TYCHUSSCVAUTOTURRETACGLUESCREENDUMMY)
+		.value("TYCHUSSPECTREACGLUESCREENDUMMY", sc2::UNIT_TYPEID::TYCHUSSPECTREACGLUESCREENDUMMY)
+		.value("TYCHUSWARHOUNDACGLUESCREENDUMMY", sc2::UNIT_TYPEID::TYCHUSWARHOUNDACGLUESCREENDUMMY)
+		.value("TYRANNOZORACGLUESCREENDUMMY", sc2::UNIT_TYPEID::TYRANNOZORACGLUESCREENDUMMY)
+		.value("ULAANSMOKEBRIDGE", sc2::UNIT_TYPEID::ULAANSMOKEBRIDGE)
+		.value("ULTRALISKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ULTRALISKACGLUESCREENDUMMY)
+		.value("ULTRASONICPULSEWEAPON", sc2::UNIT_TYPEID::ULTRASONICPULSEWEAPON)
+		.value("UNBUILDABLEBRICKSSMALLUNIT", sc2::UNIT_TYPEID::UNBUILDABLEBRICKSSMALLUNIT)
+		.value("UNBUILDABLEBRICKSUNIT", sc2::UNIT_TYPEID::UNBUILDABLEBRICKSUNIT)
+		.value("UNBUILDABLEPLATESSMALLUNIT", sc2::UNIT_TYPEID::UNBUILDABLEPLATESSMALLUNIT)
+		.value("UNBUILDABLEPLATESUNIT", sc2::UNIT_TYPEID::UNBUILDABLEPLATESUNIT)
+		.value("UNBUILDABLEROCKSDESTRUCTIBLE", sc2::UNIT_TYPEID::UNBUILDABLEROCKSDESTRUCTIBLE)
+		.value("UNBUILDABLEROCKSSMALLUNIT", sc2::UNIT_TYPEID::UNBUILDABLEROCKSSMALLUNIT)
+		.value("UNBUILDABLEROCKSUNIT", sc2::UNIT_TYPEID::UNBUILDABLEROCKSUNIT)
+		.value("URSADAKCALF", sc2::UNIT_TYPEID::URSADAKCALF)
+		.value("URSADAKFEMALE", sc2::UNIT_TYPEID::URSADAKFEMALE)
+		.value("URSADAKFEMALEEXOTIC", sc2::UNIT_TYPEID::URSADAKFEMALEEXOTIC)
+		.value("URSADAKMALE", sc2::UNIT_TYPEID::URSADAKMALE)
+		.value("URSADAKMALEEXOTIC", sc2::UNIT_TYPEID::URSADAKMALEEXOTIC)
+		.value("URSADON", sc2::UNIT_TYPEID::URSADON)
+		.value("URSULA", sc2::UNIT_TYPEID::URSULA)
+		.value("URUN", sc2::UNIT_TYPEID::URUN)
+		.value("URUNWEAPONLEFT", sc2::UNIT_TYPEID::URUNWEAPONLEFT)
+		.value("URUNWEAPONRIGHT", sc2::UNIT_TYPEID::URUNWEAPONRIGHT)
+		.value("VALHALLABASEDESTRUCTIBLEDOOR", sc2::UNIT_TYPEID::VALHALLABASEDESTRUCTIBLEDOOR)
+		.value("VALHALLABASEDESTRUCTIBLEDOORDEAD", sc2::UNIT_TYPEID::VALHALLABASEDESTRUCTIBLEDOORDEAD)
+		.value("VALHALLADESTRUCTIBLEWALL", sc2::UNIT_TYPEID::VALHALLADESTRUCTIBLEWALL)
+		.value("VIKING", sc2::UNIT_TYPEID::VIKING)
+		.value("VIKINGACGLUESCREENDUMMY", sc2::UNIT_TYPEID::VIKINGACGLUESCREENDUMMY)
+		.value("VIKINGFIGHTERWEAPON", sc2::UNIT_TYPEID::VIKINGFIGHTERWEAPON)
+		.value("VIKINGMENGSKACGLUESCREENDUMMY", sc2::UNIT_TYPEID::VIKINGMENGSKACGLUESCREENDUMMY)
+		.value("VIKINGSKINPREVIEW", sc2::UNIT_TYPEID::VIKINGSKINPREVIEW)
+		.value("VIKINGSKY_UNIT", sc2::UNIT_TYPEID::VIKINGSKY_UNIT)
+		.value("VILESTREAMWEAPON", sc2::UNIT_TYPEID::VILESTREAMWEAPON)
+		.value("VIPERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::VIPERACGLUESCREENDUMMY)
+		.value("VIPERCONSUMESTRUCTUREWEAPON", sc2::UNIT_TYPEID::VIPERCONSUMESTRUCTUREWEAPON)
+		.value("VIROPHAGE", sc2::UNIT_TYPEID::VIROPHAGE)
+		.value("VOIDMPIMMORTALREVIVECORPSE", sc2::UNIT_TYPEID::VOIDMPIMMORTALREVIVECORPSE)
+		.value("VOIDRAYACGLUESCREENDUMMY", sc2::UNIT_TYPEID::VOIDRAYACGLUESCREENDUMMY)
+		.value("VOIDRAYSHAKURASACGLUESCREENDUMMY", sc2::UNIT_TYPEID::VOIDRAYSHAKURASACGLUESCREENDUMMY)
+		.value("VOIDSEEKER", sc2::UNIT_TYPEID::VOIDSEEKER)
+		.value("VOIDSEEKERPHASEMINEBLASTSECONDARYWEAPON", sc2::UNIT_TYPEID::VOIDSEEKERPHASEMINEBLASTSECONDARYWEAPON)
+		.value("VOIDSEEKERPHASEMINEBLASTWEAPON", sc2::UNIT_TYPEID::VOIDSEEKERPHASEMINEBLASTWEAPON)
+		.value("VOIDSEEKERWEAPON", sc2::UNIT_TYPEID::VOIDSEEKERWEAPON)
+		.value("VULTURE", sc2::UNIT_TYPEID::VULTURE)
+		.value("VULTUREACGLUESCREENDUMMY", sc2::UNIT_TYPEID::VULTUREACGLUESCREENDUMMY)
+		.value("VULTUREWEAPON", sc2::UNIT_TYPEID::VULTUREWEAPON)
+		.value("WALLOFFIRE", sc2::UNIT_TYPEID::WALLOFFIRE)
+		.value("WARBOT", sc2::UNIT_TYPEID::WARBOT)
+		.value("WARBOTBMISSILE", sc2::UNIT_TYPEID::WARBOTBMISSILE)
+		.value("WARHOUND", sc2::UNIT_TYPEID::WARHOUND)
+		.value("WARHOUNDWEAPON", sc2::UNIT_TYPEID::WARHOUNDWEAPON)
+		.value("WARPIG", sc2::UNIT_TYPEID::WARPIG)
+		.value("WARPPRISMSKINPREVIEW", sc2::UNIT_TYPEID::WARPPRISMSKINPREVIEW)
+		.value("WARPPRISMTALDARIMACGLUESCREENDUMMY", sc2::UNIT_TYPEID::WARPPRISMTALDARIMACGLUESCREENDUMMY)
+		.value("WEAPON", sc2::UNIT_TYPEID::WEAPON)
+		.value("WEAPONHYBRIDC", sc2::UNIT_TYPEID::WEAPONHYBRIDC)
+		.value("WEAPONHYBRIDD", sc2::UNIT_TYPEID::WEAPONHYBRIDD)
+		.value("WIDOWMINEAIRWEAPON", sc2::UNIT_TYPEID::WIDOWMINEAIRWEAPON)
+		.value("WIDOWMINEWEAPON", sc2::UNIT_TYPEID::WIDOWMINEWEAPON)
+		.value("WOLFSTATUE", sc2::UNIT_TYPEID::WOLFSTATUE)
+		.value("WRAITH", sc2::UNIT_TYPEID::WRAITH)
+		.value("WRAITHACGLUESCREENDUMMY", sc2::UNIT_TYPEID::WRAITHACGLUESCREENDUMMY)
+		.value("WRAITHAIRWEAPONLEFT", sc2::UNIT_TYPEID::WRAITHAIRWEAPONLEFT)
+		.value("WRAITHAIRWEAPONRIGHT", sc2::UNIT_TYPEID::WRAITHAIRWEAPONRIGHT)
+		.value("WRAITHGROUNDWEAPON", sc2::UNIT_TYPEID::WRAITHGROUNDWEAPON)
+		.value("WRECKEDBATTLECRUISERHELIOSFINAL", sc2::UNIT_TYPEID::WRECKEDBATTLECRUISERHELIOSFINAL)
+		.value("XELNAGADESTRUCTIBLEBLOCKER6E", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLEBLOCKER6E)
+		.value("XELNAGADESTRUCTIBLEBLOCKER6N", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLEBLOCKER6N)
+		.value("XELNAGADESTRUCTIBLEBLOCKER6NE", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLEBLOCKER6NE)
+		.value("XELNAGADESTRUCTIBLEBLOCKER6NW", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLEBLOCKER6NW)
+		.value("XELNAGADESTRUCTIBLEBLOCKER6S", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLEBLOCKER6S)
+		.value("XELNAGADESTRUCTIBLEBLOCKER6SE", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLEBLOCKER6SE)
+		.value("XELNAGADESTRUCTIBLEBLOCKER6SW", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLEBLOCKER6SW)
+		.value("XELNAGADESTRUCTIBLEBLOCKER6W", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLEBLOCKER6W)
+		.value("XELNAGADESTRUCTIBLEBLOCKER8E", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLEBLOCKER8E)
+		.value("XELNAGADESTRUCTIBLEBLOCKER8N", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLEBLOCKER8N)
+		.value("XELNAGADESTRUCTIBLEBLOCKER8NE", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLEBLOCKER8NE)
+		.value("XELNAGADESTRUCTIBLEBLOCKER8NW", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLEBLOCKER8NW)
+		.value("XELNAGADESTRUCTIBLEBLOCKER8S", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLEBLOCKER8S)
+		.value("XELNAGADESTRUCTIBLEBLOCKER8SE", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLEBLOCKER8SE)
+		.value("XELNAGADESTRUCTIBLEBLOCKER8SW", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLEBLOCKER8SW)
+		.value("XELNAGADESTRUCTIBLEBLOCKER8W", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLEBLOCKER8W)
+		.value("XELNAGADESTRUCTIBLERAMPBLOCKER6E", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLERAMPBLOCKER6E)
+		.value("XELNAGADESTRUCTIBLERAMPBLOCKER6N", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLERAMPBLOCKER6N)
+		.value("XELNAGADESTRUCTIBLERAMPBLOCKER6NE", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLERAMPBLOCKER6NE)
+		.value("XELNAGADESTRUCTIBLERAMPBLOCKER6NW", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLERAMPBLOCKER6NW)
+		.value("XELNAGADESTRUCTIBLERAMPBLOCKER6S", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLERAMPBLOCKER6S)
+		.value("XELNAGADESTRUCTIBLERAMPBLOCKER6SE", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLERAMPBLOCKER6SE)
+		.value("XELNAGADESTRUCTIBLERAMPBLOCKER6SW", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLERAMPBLOCKER6SW)
+		.value("XELNAGADESTRUCTIBLERAMPBLOCKER6W", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLERAMPBLOCKER6W)
+		.value("XELNAGADESTRUCTIBLERAMPBLOCKER8E", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLERAMPBLOCKER8E)
+		.value("XELNAGADESTRUCTIBLERAMPBLOCKER8N", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLERAMPBLOCKER8N)
+		.value("XELNAGADESTRUCTIBLERAMPBLOCKER8NE", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLERAMPBLOCKER8NE)
+		.value("XELNAGADESTRUCTIBLERAMPBLOCKER8NW", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLERAMPBLOCKER8NW)
+		.value("XELNAGADESTRUCTIBLERAMPBLOCKER8S", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLERAMPBLOCKER8S)
+		.value("XELNAGADESTRUCTIBLERAMPBLOCKER8SE", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLERAMPBLOCKER8SE)
+		.value("XELNAGADESTRUCTIBLERAMPBLOCKER8SW", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLERAMPBLOCKER8SW)
+		.value("XELNAGADESTRUCTIBLERAMPBLOCKER8W", sc2::UNIT_TYPEID::XELNAGADESTRUCTIBLERAMPBLOCKER8W)
+		.value("XELNAGAHEALINGSHRINE", sc2::UNIT_TYPEID::XELNAGAHEALINGSHRINE)
+		.value("XELNAGAPRISON", sc2::UNIT_TYPEID::XELNAGAPRISON)
+		.value("XELNAGAPRISONCONSOLE", sc2::UNIT_TYPEID::XELNAGAPRISONCONSOLE)
+		.value("XELNAGAPRISONHEIGHT2", sc2::UNIT_TYPEID::XELNAGAPRISONHEIGHT2)
+		.value("XELNAGAPRISONNORTH", sc2::UNIT_TYPEID::XELNAGAPRISONNORTH)
+		.value("XELNAGAPRISONNORTHHEIGHT2", sc2::UNIT_TYPEID::XELNAGAPRISONNORTHHEIGHT2)
+		.value("XELNAGASHRINE", sc2::UNIT_TYPEID::XELNAGASHRINE)
+		.value("XELNAGASHRINEXIL", sc2::UNIT_TYPEID::XELNAGASHRINEXIL)
+		.value("XELNAGATEMPLE", sc2::UNIT_TYPEID::XELNAGATEMPLE)
+		.value("XELNAGATEMPLEDOOR", sc2::UNIT_TYPEID::XELNAGATEMPLEDOOR)
+		.value("XELNAGATEMPLEDOORBURROWED", sc2::UNIT_TYPEID::XELNAGATEMPLEDOORBURROWED)
+		.value("XELNAGATEMPLEDOORURDL", sc2::UNIT_TYPEID::XELNAGATEMPLEDOORURDL)
+		.value("XELNAGATEMPLEDOORURDLBURROWED", sc2::UNIT_TYPEID::XELNAGATEMPLEDOORURDLBURROWED)
+		.value("XELNAGAVAULT", sc2::UNIT_TYPEID::XELNAGAVAULT)
+		.value("XELNAGAWORLDSHIPVAULT", sc2::UNIT_TYPEID::XELNAGAWORLDSHIPVAULT)
+		.value("XELNAGA_CAVERNS_DOORE", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_DOORE)
+		.value("XELNAGA_CAVERNS_DOOREOPENED", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_DOOREOPENED)
+		.value("XELNAGA_CAVERNS_DOORN", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_DOORN)
+		.value("XELNAGA_CAVERNS_DOORNE", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_DOORNE)
+		.value("XELNAGA_CAVERNS_DOORNEOPENED", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_DOORNEOPENED)
+		.value("XELNAGA_CAVERNS_DOORNOPENED", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_DOORNOPENED)
+		.value("XELNAGA_CAVERNS_DOORNW", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_DOORNW)
+		.value("XELNAGA_CAVERNS_DOORNWOPENED", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_DOORNWOPENED)
+		.value("XELNAGA_CAVERNS_DOORS", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_DOORS)
+		.value("XELNAGA_CAVERNS_DOORSE", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_DOORSE)
+		.value("XELNAGA_CAVERNS_DOORSEOPENED", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_DOORSEOPENED)
+		.value("XELNAGA_CAVERNS_DOORSOPENED", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_DOORSOPENED)
+		.value("XELNAGA_CAVERNS_DOORSW", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_DOORSW)
+		.value("XELNAGA_CAVERNS_DOORSWOPENED", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_DOORSWOPENED)
+		.value("XELNAGA_CAVERNS_DOORW", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_DOORW)
+		.value("XELNAGA_CAVERNS_DOORWOPENED", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_DOORWOPENED)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGEH10", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGEH10)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGEH10OUT", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGEH10OUT)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGEH12", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGEH12)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGEH12OUT", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGEH12OUT)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGEH8", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGEH8)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGEH8OUT", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGEH8OUT)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGENE10", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGENE10)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGENE10OUT", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGENE10OUT)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGENE12", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGENE12)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGENE12OUT", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGENE12OUT)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGENE8", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGENE8)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGENE8OUT", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGENE8OUT)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGENW10", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGENW10)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGENW10OUT", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGENW10OUT)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGENW12", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGENW12)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGENW12OUT", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGENW12OUT)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGENW8", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGENW8)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGENW8OUT", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGENW8OUT)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGEV10", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGEV10)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGEV10OUT", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGEV10OUT)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGEV12", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGEV12)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGEV12OUT", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGEV12OUT)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGEV8", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGEV8)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGEV8OUT", sc2::UNIT_TYPEID::XELNAGA_CAVERNS_FLOATING_BRIDGEV8OUT)
+		.value("YAMATOWEAPON", sc2::UNIT_TYPEID::YAMATOWEAPON)
+		.value("YOINKMISSILE", sc2::UNIT_TYPEID::YOINKMISSILE)
+		.value("YOINKSIEGETANKMISSILE", sc2::UNIT_TYPEID::YOINKSIEGETANKMISSILE)
+		.value("YOINKVIKINGAIRMISSILE", sc2::UNIT_TYPEID::YOINKVIKINGAIRMISSILE)
+		.value("YOINKVIKINGGROUNDMISSILE", sc2::UNIT_TYPEID::YOINKVIKINGGROUNDMISSILE)
+		.value("ZEALOTACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ZEALOTACGLUESCREENDUMMY)
+		.value("ZEALOTAIURACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ZEALOTAIURACGLUESCREENDUMMY)
+		.value("ZEALOTFENIXACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ZEALOTFENIXACGLUESCREENDUMMY)
+		.value("ZEALOTPURIFIERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ZEALOTPURIFIERACGLUESCREENDUMMY)
+		.value("ZEALOTSHAKURASACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ZEALOTSHAKURASACGLUESCREENDUMMY)
+		.value("ZEALOTVORAZUNACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ZEALOTVORAZUNACGLUESCREENDUMMY)
+		.value("ZERATUL", sc2::UNIT_TYPEID::ZERATUL)
+		.value("ZERATULCRYSTALCHARGE", sc2::UNIT_TYPEID::ZERATULCRYSTALCHARGE)
+		.value("ZERATULDARKTEMPLARACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ZERATULDARKTEMPLARACGLUESCREENDUMMY)
+		.value("ZERATULDISRUPTORACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ZERATULDISRUPTORACGLUESCREENDUMMY)
+		.value("ZERATULIMMORTALACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ZERATULIMMORTALACGLUESCREENDUMMY)
+		.value("ZERATULOBSERVERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ZERATULOBSERVERACGLUESCREENDUMMY)
+		.value("ZERATULPHOTONCANNONACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ZERATULPHOTONCANNONACGLUESCREENDUMMY)
+		.value("ZERATULSENTRYACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ZERATULSENTRYACGLUESCREENDUMMY)
+		.value("ZERATULSTALKERACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ZERATULSTALKERACGLUESCREENDUMMY)
+		.value("ZERATULWARPPRISMACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ZERATULWARPPRISMACGLUESCREENDUMMY)
+		.value("ZERGDROPPOD", sc2::UNIT_TYPEID::ZERGDROPPOD)
+		.value("ZERGDROPPODCREEP", sc2::UNIT_TYPEID::ZERGDROPPODCREEP)
+		.value("ZERGLINGKERRIGANACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ZERGLINGKERRIGANACGLUESCREENDUMMY)
+		.value("ZERGLINGZAGARAACGLUESCREENDUMMY", sc2::UNIT_TYPEID::ZERGLINGZAGARAACGLUESCREENDUMMY)
+		.value("ZERG_BANELING", sc2::UNIT_TYPEID::ZERG_BANELING)
+		.value("ZERG_BANELINGBURROWED", sc2::UNIT_TYPEID::ZERG_BANELINGBURROWED)
+		.value("ZERG_BANELINGCOCOON", sc2::UNIT_TYPEID::ZERG_BANELINGCOCOON)
+		.value("ZERG_BANELINGNEST", sc2::UNIT_TYPEID::ZERG_BANELINGNEST)
+		.value("ZERG_BROODLING", sc2::UNIT_TYPEID::ZERG_BROODLING)
+		.value("ZERG_BROODLORD", sc2::UNIT_TYPEID::ZERG_BROODLORD)
+		.value("ZERG_BROODLORDCOCOON", sc2::UNIT_TYPEID::ZERG_BROODLORDCOCOON)
+		.value("ZERG_CHANGELING", sc2::UNIT_TYPEID::ZERG_CHANGELING)
+		.value("ZERG_CHANGELINGMARINE", sc2::UNIT_TYPEID::ZERG_CHANGELINGMARINE)
+		.value("ZERG_CHANGELINGMARINESHIELD", sc2::UNIT_TYPEID::ZERG_CHANGELINGMARINESHIELD)
+		.value("ZERG_CHANGELINGZEALOT", sc2::UNIT_TYPEID::ZERG_CHANGELINGZEALOT)
+		.value("ZERG_CHANGELINGZERGLING", sc2::UNIT_TYPEID::ZERG_CHANGELINGZERGLING)
+		.value("ZERG_CHANGELINGZERGLINGWINGS", sc2::UNIT_TYPEID::ZERG_CHANGELINGZERGLINGWINGS)
+		.value("ZERG_CORRUPTOR", sc2::UNIT_TYPEID::ZERG_CORRUPTOR)
+		.value("ZERG_CREEPTUMOR", sc2::UNIT_TYPEID::ZERG_CREEPTUMOR)
+		.value("ZERG_CREEPTUMORBURROWED", sc2::UNIT_TYPEID::ZERG_CREEPTUMORBURROWED)
+		.value("ZERG_CREEPTUMORQUEEN", sc2::UNIT_TYPEID::ZERG_CREEPTUMORQUEEN)
+		.value("ZERG_DRONE", sc2::UNIT_TYPEID::ZERG_DRONE)
+		.value("ZERG_DRONEBURROWED", sc2::UNIT_TYPEID::ZERG_DRONEBURROWED)
+		.value("ZERG_EGG", sc2::UNIT_TYPEID::ZERG_EGG)
+		.value("ZERG_EVOLUTIONCHAMBER", sc2::UNIT_TYPEID::ZERG_EVOLUTIONCHAMBER)
+		.value("ZERG_EXTRACTOR", sc2::UNIT_TYPEID::ZERG_EXTRACTOR)
+		.value("ZERG_EXTRACTORRICH", sc2::UNIT_TYPEID::ZERG_EXTRACTORRICH)
+		.value("ZERG_GREATERSPIRE", sc2::UNIT_TYPEID::ZERG_GREATERSPIRE)
+		.value("ZERG_HATCHERY", sc2::UNIT_TYPEID::ZERG_HATCHERY)
+		.value("ZERG_HIVE", sc2::UNIT_TYPEID::ZERG_HIVE)
+		.value("ZERG_HYDRALISK", sc2::UNIT_TYPEID::ZERG_HYDRALISK)
+		.value("ZERG_HYDRALISKBURROWED", sc2::UNIT_TYPEID::ZERG_HYDRALISKBURROWED)
+		.value("ZERG_HYDRALISKDEN", sc2::UNIT_TYPEID::ZERG_HYDRALISKDEN)
+		.value("ZERG_INFESTATIONPIT", sc2::UNIT_TYPEID::ZERG_INFESTATIONPIT)
+		.value("ZERG_INFESTEDTERRANSEGG", sc2::UNIT_TYPEID::ZERG_INFESTEDTERRANSEGG)
+		.value("ZERG_INFESTOR", sc2::UNIT_TYPEID::ZERG_INFESTOR)
+		.value("ZERG_INFESTORBURROWED", sc2::UNIT_TYPEID::ZERG_INFESTORBURROWED)
+		.value("ZERG_INFESTORTERRAN", sc2::UNIT_TYPEID::ZERG_INFESTORTERRAN)
+		.value("ZERG_LAIR", sc2::UNIT_TYPEID::ZERG_LAIR)
+		.value("ZERG_LARVA", sc2::UNIT_TYPEID::ZERG_LARVA)
+		.value("ZERG_LOCUSTMP", sc2::UNIT_TYPEID::ZERG_LOCUSTMP)
+		.value("ZERG_LOCUSTMPFLYING", sc2::UNIT_TYPEID::ZERG_LOCUSTMPFLYING)
+		.value("ZERG_LURKERDENMP", sc2::UNIT_TYPEID::ZERG_LURKERDENMP)
+		.value("ZERG_LURKERMP", sc2::UNIT_TYPEID::ZERG_LURKERMP)
+		.value("ZERG_LURKERMPBURROWED", sc2::UNIT_TYPEID::ZERG_LURKERMPBURROWED)
+		.value("ZERG_LURKERMPEGG", sc2::UNIT_TYPEID::ZERG_LURKERMPEGG)
+		.value("ZERG_MUTALISK", sc2::UNIT_TYPEID::ZERG_MUTALISK)
+		.value("ZERG_NYDUSCANAL", sc2::UNIT_TYPEID::ZERG_NYDUSCANAL)
+		.value("ZERG_NYDUSNETWORK", sc2::UNIT_TYPEID::ZERG_NYDUSNETWORK)
+		.value("ZERG_OVERLORD", sc2::UNIT_TYPEID::ZERG_OVERLORD)
+		.value("ZERG_OVERLORDCOCOON", sc2::UNIT_TYPEID::ZERG_OVERLORDCOCOON)
+		.value("ZERG_OVERLORDTRANSPORT", sc2::UNIT_TYPEID::ZERG_OVERLORDTRANSPORT)
+		.value("ZERG_OVERSEER", sc2::UNIT_TYPEID::ZERG_OVERSEER)
+		.value("ZERG_OVERSEERSIEGEMODE", sc2::UNIT_TYPEID::ZERG_OVERSEERSIEGEMODE)
+		.value("ZERG_PARASITICBOMBDUMMY", sc2::UNIT_TYPEID::ZERG_PARASITICBOMBDUMMY)
+		.value("ZERG_QUEEN", sc2::UNIT_TYPEID::ZERG_QUEEN)
+		.value("ZERG_QUEENBURROWED", sc2::UNIT_TYPEID::ZERG_QUEENBURROWED)
+		.value("ZERG_RAVAGER", sc2::UNIT_TYPEID::ZERG_RAVAGER)
+		.value("ZERG_RAVAGERCOCOON", sc2::UNIT_TYPEID::ZERG_RAVAGERCOCOON)
+		.value("ZERG_ROACH", sc2::UNIT_TYPEID::ZERG_ROACH)
+		.value("ZERG_ROACHBURROWED", sc2::UNIT_TYPEID::ZERG_ROACHBURROWED)
+		.value("ZERG_ROACHWARREN", sc2::UNIT_TYPEID::ZERG_ROACHWARREN)
+		.value("ZERG_SPAWNINGPOOL", sc2::UNIT_TYPEID::ZERG_SPAWNINGPOOL)
+		.value("ZERG_SPINECRAWLER", sc2::UNIT_TYPEID::ZERG_SPINECRAWLER)
+		.value("ZERG_SPINECRAWLERUPROOTED", sc2::UNIT_TYPEID::ZERG_SPINECRAWLERUPROOTED)
+		.value("ZERG_SPIRE", sc2::UNIT_TYPEID::ZERG_SPIRE)
+		.value("ZERG_SPORECRAWLER", sc2::UNIT_TYPEID::ZERG_SPORECRAWLER)
+		.value("ZERG_SPORECRAWLERUPROOTED", sc2::UNIT_TYPEID::ZERG_SPORECRAWLERUPROOTED)
+		.value("ZERG_SWARMHOSTBURROWEDMP", sc2::UNIT_TYPEID::ZERG_SWARMHOSTBURROWEDMP)
+		.value("ZERG_SWARMHOSTMP", sc2::UNIT_TYPEID::ZERG_SWARMHOSTMP)
+		.value("ZERG_TRANSPORTOVERLORDCOCOON", sc2::UNIT_TYPEID::ZERG_TRANSPORTOVERLORDCOCOON)
+		.value("ZERG_ULTRALISK", sc2::UNIT_TYPEID::ZERG_ULTRALISK)
+		.value("ZERG_ULTRALISKBURROWED", sc2::UNIT_TYPEID::ZERG_ULTRALISKBURROWED)
+		.value("ZERG_ULTRALISKCAVERN", sc2::UNIT_TYPEID::ZERG_ULTRALISKCAVERN)
+		.value("ZERG_VIPER", sc2::UNIT_TYPEID::ZERG_VIPER)
+		.value("ZERG_ZERGLING", sc2::UNIT_TYPEID::ZERG_ZERGLING)
+		.value("ZERG_ZERGLINGBURROWED", sc2::UNIT_TYPEID::ZERG_ZERGLINGBURROWED)
+		.value("ZERUSDESTRUCTIBLEARCH", sc2::UNIT_TYPEID::ZERUSDESTRUCTIBLEARCH)
+		.value("ZHAKULDASLIBRARYUNIT", sc2::UNIT_TYPEID::ZHAKULDASLIBRARYUNIT)
+		.value("ZHAKULDASLIBRARYUNITBURROWED", sc2::UNIT_TYPEID::ZHAKULDASLIBRARYUNITBURROWED)
+		.value("ZHAKULDASLIGHTBRIDGE", sc2::UNIT_TYPEID::ZHAKULDASLIGHTBRIDGE)
+		.value("ZHAKULDASLIGHTBRIDGEOFF", sc2::UNIT_TYPEID::ZHAKULDASLIGHTBRIDGEOFF)
+		.value("ZHAKULDASLIGHTBRIDGEOFFTOPRIGHT", sc2::UNIT_TYPEID::ZHAKULDASLIGHTBRIDGEOFFTOPRIGHT)
+		.value("ZHAKULDASLIGHTBRIDGETOPRIGHT", sc2::UNIT_TYPEID::ZHAKULDASLIGHTBRIDGETOPRIGHT)
+		.value("_10SLOTBAG", sc2::UNIT_TYPEID::_10SLOTBAG)
+		.value("_12SLOTBAG", sc2::UNIT_TYPEID::_12SLOTBAG)
+		.value("_14SLOTBAG", sc2::UNIT_TYPEID::_14SLOTBAG)
+		.value("_16SLOTBAG", sc2::UNIT_TYPEID::_16SLOTBAG)
+		.value("_18SLOTBAG", sc2::UNIT_TYPEID::_18SLOTBAG)
+		.value("_20SLOTBAG", sc2::UNIT_TYPEID::_20SLOTBAG)
+		.value("_22SLOTBAG", sc2::UNIT_TYPEID::_22SLOTBAG)
+		.value("_24SLOTBAG", sc2::UNIT_TYPEID::_24SLOTBAG)
+		.value("_4SLOTBAG", sc2::UNIT_TYPEID::_4SLOTBAG)
+		.value("_6SLOTBAG", sc2::UNIT_TYPEID::_6SLOTBAG)
+		.value("_8SLOTBAG", sc2::UNIT_TYPEID::_8SLOTBAG)
         .def("__eq__", [](const sc2::UNIT_TYPEID &value, sc2::UnitTypeID &value2) { return value == value2; });
 
     py::enum_<sc2::ABILITY_ID>(m, "ABILITY_ID")
         .value("INVALID", sc2::ABILITY_ID::INVALID)
-        .value("SMART", sc2::ABILITY_ID::SMART)
+        .value("ADVANCEDCONSTRUCTION_CANCEL", sc2::ABILITY_ID::ADVANCEDCONSTRUCTION_CANCEL)
+        .value("AGGRESSIVEMUTATION", sc2::ABILITY_ID::AGGRESSIVEMUTATION)
+        .value("AIURLIGHTBRIDGEABANDONEDNE10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::AIURLIGHTBRIDGEABANDONEDNE10OUT_BRIDGEEXTEND)
+        .value("AIURLIGHTBRIDGEABANDONEDNE10_BRIDGERETRACT", sc2::ABILITY_ID::AIURLIGHTBRIDGEABANDONEDNE10_BRIDGERETRACT)
+        .value("AIURLIGHTBRIDGEABANDONEDNE12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::AIURLIGHTBRIDGEABANDONEDNE12OUT_BRIDGEEXTEND)
+        .value("AIURLIGHTBRIDGEABANDONEDNE12_BRIDGERETRACT", sc2::ABILITY_ID::AIURLIGHTBRIDGEABANDONEDNE12_BRIDGERETRACT)
+        .value("AIURLIGHTBRIDGEABANDONEDNE8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::AIURLIGHTBRIDGEABANDONEDNE8OUT_BRIDGEEXTEND)
+        .value("AIURLIGHTBRIDGEABANDONEDNE8_BRIDGERETRACT", sc2::ABILITY_ID::AIURLIGHTBRIDGEABANDONEDNE8_BRIDGERETRACT)
+        .value("AIURLIGHTBRIDGEABANDONEDNW10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::AIURLIGHTBRIDGEABANDONEDNW10OUT_BRIDGEEXTEND)
+        .value("AIURLIGHTBRIDGEABANDONEDNW10_BRIDGERETRACT", sc2::ABILITY_ID::AIURLIGHTBRIDGEABANDONEDNW10_BRIDGERETRACT)
+        .value("AIURLIGHTBRIDGEABANDONEDNW12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::AIURLIGHTBRIDGEABANDONEDNW12OUT_BRIDGEEXTEND)
+        .value("AIURLIGHTBRIDGEABANDONEDNW12_BRIDGERETRACT", sc2::ABILITY_ID::AIURLIGHTBRIDGEABANDONEDNW12_BRIDGERETRACT)
+        .value("AIURLIGHTBRIDGEABANDONEDNW8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::AIURLIGHTBRIDGEABANDONEDNW8OUT_BRIDGEEXTEND)
+        .value("AIURLIGHTBRIDGEABANDONEDNW8_BRIDGERETRACT", sc2::ABILITY_ID::AIURLIGHTBRIDGEABANDONEDNW8_BRIDGERETRACT)
+        .value("AIURLIGHTBRIDGENE10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::AIURLIGHTBRIDGENE10OUT_BRIDGEEXTEND)
+        .value("AIURLIGHTBRIDGENE10_BRIDGERETRACT", sc2::ABILITY_ID::AIURLIGHTBRIDGENE10_BRIDGERETRACT)
+        .value("AIURLIGHTBRIDGENE12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::AIURLIGHTBRIDGENE12OUT_BRIDGEEXTEND)
+        .value("AIURLIGHTBRIDGENE12_BRIDGERETRACT", sc2::ABILITY_ID::AIURLIGHTBRIDGENE12_BRIDGERETRACT)
+        .value("AIURLIGHTBRIDGENE8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::AIURLIGHTBRIDGENE8OUT_BRIDGEEXTEND)
+        .value("AIURLIGHTBRIDGENE8_BRIDGERETRACT", sc2::ABILITY_ID::AIURLIGHTBRIDGENE8_BRIDGERETRACT)
+        .value("AIURLIGHTBRIDGENW10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::AIURLIGHTBRIDGENW10OUT_BRIDGEEXTEND)
+        .value("AIURLIGHTBRIDGENW10_BRIDGERETRACT", sc2::ABILITY_ID::AIURLIGHTBRIDGENW10_BRIDGERETRACT)
+        .value("AIURLIGHTBRIDGENW12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::AIURLIGHTBRIDGENW12OUT_BRIDGEEXTEND)
+        .value("AIURLIGHTBRIDGENW12_BRIDGERETRACT", sc2::ABILITY_ID::AIURLIGHTBRIDGENW12_BRIDGERETRACT)
+        .value("AIURLIGHTBRIDGENW8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::AIURLIGHTBRIDGENW8OUT_BRIDGEEXTEND)
+        .value("AIURLIGHTBRIDGENW8_BRIDGERETRACT", sc2::ABILITY_ID::AIURLIGHTBRIDGENW8_BRIDGERETRACT)
+        .value("AIURTEMPLEBRIDGENE10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::AIURTEMPLEBRIDGENE10OUT_BRIDGEEXTEND)
+        .value("AIURTEMPLEBRIDGENE10_BRIDGERETRACT", sc2::ABILITY_ID::AIURTEMPLEBRIDGENE10_BRIDGERETRACT)
+        .value("AIURTEMPLEBRIDGENE12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::AIURTEMPLEBRIDGENE12OUT_BRIDGEEXTEND)
+        .value("AIURTEMPLEBRIDGENE12_BRIDGERETRACT", sc2::ABILITY_ID::AIURTEMPLEBRIDGENE12_BRIDGERETRACT)
+        .value("AIURTEMPLEBRIDGENE8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::AIURTEMPLEBRIDGENE8OUT_BRIDGEEXTEND)
+        .value("AIURTEMPLEBRIDGENE8_BRIDGERETRACT", sc2::ABILITY_ID::AIURTEMPLEBRIDGENE8_BRIDGERETRACT)
+        .value("AIURTEMPLEBRIDGENW10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::AIURTEMPLEBRIDGENW10OUT_BRIDGEEXTEND)
+        .value("AIURTEMPLEBRIDGENW10_BRIDGERETRACT", sc2::ABILITY_ID::AIURTEMPLEBRIDGENW10_BRIDGERETRACT)
+        .value("AIURTEMPLEBRIDGENW12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::AIURTEMPLEBRIDGENW12OUT_BRIDGEEXTEND)
+        .value("AIURTEMPLEBRIDGENW12_BRIDGERETRACT", sc2::ABILITY_ID::AIURTEMPLEBRIDGENW12_BRIDGERETRACT)
+        .value("AIURTEMPLEBRIDGENW8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::AIURTEMPLEBRIDGENW8OUT_BRIDGEEXTEND)
+        .value("AIURTEMPLEBRIDGENW8_BRIDGERETRACT", sc2::ABILITY_ID::AIURTEMPLEBRIDGENW8_BRIDGERETRACT)
+        .value("ARBITERMPRECALL", sc2::ABILITY_ID::ARBITERMPRECALL)
+        .value("ARBITERMPSTASISFIELD", sc2::ABILITY_ID::ARBITERMPSTASISFIELD)
+        .value("ARCHIVESEAL", sc2::ABILITY_ID::ARCHIVESEAL)
+        .value("ARCHONWARP_ARCHONWARPTARGET", sc2::ABILITY_ID::ARCHONWARP_ARCHONWARPTARGET)
+        .value("ARMORYRESEARCHSWARM_TERRANVEHICLEANDSHIPPLATINGLEVEL1", sc2::ABILITY_ID::ARMORYRESEARCHSWARM_TERRANVEHICLEANDSHIPPLATINGLEVEL1)
+        .value("ARMORYRESEARCHSWARM_TERRANVEHICLEANDSHIPPLATINGLEVEL2", sc2::ABILITY_ID::ARMORYRESEARCHSWARM_TERRANVEHICLEANDSHIPPLATINGLEVEL2)
+        .value("ARMORYRESEARCHSWARM_TERRANVEHICLEANDSHIPPLATINGLEVEL3", sc2::ABILITY_ID::ARMORYRESEARCHSWARM_TERRANVEHICLEANDSHIPPLATINGLEVEL3)
+        .value("ARMORYRESEARCHSWARM_TERRANVEHICLEANDSHIPWEAPONSLEVEL1", sc2::ABILITY_ID::ARMORYRESEARCHSWARM_TERRANVEHICLEANDSHIPWEAPONSLEVEL1)
+        .value("ARMORYRESEARCHSWARM_TERRANVEHICLEANDSHIPWEAPONSLEVEL2", sc2::ABILITY_ID::ARMORYRESEARCHSWARM_TERRANVEHICLEANDSHIPWEAPONSLEVEL2)
+        .value("ARMORYRESEARCHSWARM_TERRANVEHICLEANDSHIPWEAPONSLEVEL3", sc2::ABILITY_ID::ARMORYRESEARCHSWARM_TERRANVEHICLEANDSHIPWEAPONSLEVEL3)
+        .value("ARTANISVORTEX_VORTEX", sc2::ABILITY_ID::ARTANISVORTEX_VORTEX)
+        .value("ARTANISWORMHOLETRANSIT_WORMHOLETRANSIT", sc2::ABILITY_ID::ARTANISWORMHOLETRANSIT_WORMHOLETRANSIT)
         .value("ATTACK", sc2::ABILITY_ID::ATTACK)
         .value("ATTACK_ATTACK", sc2::ABILITY_ID::ATTACK_ATTACK)
+        .value("ATTACK_ATTACKALLOWSINVULNERABLE", sc2::ABILITY_ID::ATTACK_ATTACKALLOWSINVULNERABLE)
+        .value("ATTACK_ATTACKBARRAGE", sc2::ABILITY_ID::ATTACK_ATTACKBARRAGE)
         .value("ATTACK_ATTACKBUILDING", sc2::ABILITY_ID::ATTACK_ATTACKBUILDING)
+        .value("ATTACK_ATTACKTOWARDS", sc2::ABILITY_ID::ATTACK_ATTACKTOWARDS)
+        .value("ATTACK_ATTACKWARPPRISM", sc2::ABILITY_ID::ATTACK_ATTACKWARPPRISM)
+        .value("ATTACK_BATTLECRUISER", sc2::ABILITY_ID::ATTACK_BATTLECRUISER)
         .value("ATTACK_REDIRECT", sc2::ABILITY_ID::ATTACK_REDIRECT)
+        .value("BARRACKSREACTORMORPH_REACTOR", sc2::ABILITY_ID::BARRACKSREACTORMORPH_REACTOR)
+        .value("BARRACKSTECHLABMORPH_TECHLABBARRACKS", sc2::ABILITY_ID::BARRACKSTECHLABMORPH_TECHLABBARRACKS)
+        .value("BARRACKSTECHREACTORMORPH_TECHLABBARRACKS", sc2::ABILITY_ID::BARRACKSTECHREACTORMORPH_TECHLABBARRACKS)
+        .value("BATTLECRUISERATTACKEVALUATOR_MOTHERSHIPCOREATTACK", sc2::ABILITY_ID::BATTLECRUISERATTACKEVALUATOR_MOTHERSHIPCOREATTACK)
+        .value("BATTLECRUISERMOVE_ACQUIREMOVE", sc2::ABILITY_ID::BATTLECRUISERMOVE_ACQUIREMOVE)
+        .value("BATTLECRUISERMOVE_MOVE", sc2::ABILITY_ID::BATTLECRUISERMOVE_MOVE)
+        .value("BATTLECRUISERMOVE_MOVEHOLDPOSITION", sc2::ABILITY_ID::BATTLECRUISERMOVE_MOVEHOLDPOSITION)
+        .value("BATTLECRUISERMOVE_MOVEPATROL", sc2::ABILITY_ID::BATTLECRUISERMOVE_MOVEPATROL)
+        .value("BATTLECRUISERMOVE_TURN", sc2::ABILITY_ID::BATTLECRUISERMOVE_TURN)
+        .value("BATTLECRUISERSTOPEVALUATOR_STOP", sc2::ABILITY_ID::BATTLECRUISERSTOPEVALUATOR_STOP)
+        .value("BATTLECRUISERSTOP_CHEER", sc2::ABILITY_ID::BATTLECRUISERSTOP_CHEER)
+        .value("BATTLECRUISERSTOP_DANCE", sc2::ABILITY_ID::BATTLECRUISERSTOP_DANCE)
+        .value("BATTLECRUISERSTOP_HOLDFIRE", sc2::ABILITY_ID::BATTLECRUISERSTOP_HOLDFIRE)
+        .value("BEACON_BEACONMOVE", sc2::ABILITY_ID::BEACON_BEACONMOVE)
+        .value("BEACON_CANCEL", sc2::ABILITY_ID::BEACON_CANCEL)
         .value("BEHAVIOR_BUILDINGATTACKOFF", sc2::ABILITY_ID::BEHAVIOR_BUILDINGATTACKOFF)
         .value("BEHAVIOR_BUILDINGATTACKON", sc2::ABILITY_ID::BEHAVIOR_BUILDINGATTACKON)
         .value("BEHAVIOR_CLOAKOFF", sc2::ABILITY_ID::BEHAVIOR_CLOAKOFF)
@@ -238,17 +2087,35 @@ void define_typeenums(py::module & m)
         .value("BEHAVIOR_GENERATECREEPOFF", sc2::ABILITY_ID::BEHAVIOR_GENERATECREEPOFF)
         .value("BEHAVIOR_GENERATECREEPON", sc2::ABILITY_ID::BEHAVIOR_GENERATECREEPON)
         .value("BEHAVIOR_HOLDFIREOFF", sc2::ABILITY_ID::BEHAVIOR_HOLDFIREOFF)
+        .value("BEHAVIOR_HOLDFIREOFF_GHOST", sc2::ABILITY_ID::BEHAVIOR_HOLDFIREOFF_GHOST)
         .value("BEHAVIOR_HOLDFIREOFF_LURKER", sc2::ABILITY_ID::BEHAVIOR_HOLDFIREOFF_LURKER)
         .value("BEHAVIOR_HOLDFIREON", sc2::ABILITY_ID::BEHAVIOR_HOLDFIREON)
         .value("BEHAVIOR_HOLDFIREON_GHOST", sc2::ABILITY_ID::BEHAVIOR_HOLDFIREON_GHOST)
         .value("BEHAVIOR_HOLDFIREON_LURKER", sc2::ABILITY_ID::BEHAVIOR_HOLDFIREON_LURKER)
         .value("BEHAVIOR_PULSARBEAMOFF", sc2::ABILITY_ID::BEHAVIOR_PULSARBEAMOFF)
         .value("BEHAVIOR_PULSARBEAMON", sc2::ABILITY_ID::BEHAVIOR_PULSARBEAMON)
+        .value("BIODOMECOMMANDLAND_LAND", sc2::ABILITY_ID::BIODOMECOMMANDLAND_LAND)
+        .value("BIODOMECOMMANDLIFTOFF_LIFT", sc2::ABILITY_ID::BIODOMECOMMANDLIFTOFF_LIFT)
+        .value("BIODOMETRANSPORT_BIODOMELOAD", sc2::ABILITY_ID::BIODOMETRANSPORT_BIODOMELOAD)
+        .value("BIODOMETRANSPORT_BIODOMEUNLOADALL", sc2::ABILITY_ID::BIODOMETRANSPORT_BIODOMEUNLOADALL)
+        .value("BIOPLASMIDDISCHARGE", sc2::ABILITY_ID::BIOPLASMIDDISCHARGE)
+        .value("BIOSTASIS", sc2::ABILITY_ID::BIOSTASIS)
+        .value("BONESHEAL", sc2::ABILITY_ID::BONESHEAL)
+        .value("BONESTOSSGRENADE_TOSSGRENADETYCHUS", sc2::ABILITY_ID::BONESTOSSGRENADE_TOSSGRENADETYCHUS)
+        .value("BROODLORDQUEUE2_CANCEL", sc2::ABILITY_ID::BROODLORDQUEUE2_CANCEL)
+        .value("BROODLORDQUEUE2_CANCELSLOT", sc2::ABILITY_ID::BROODLORDQUEUE2_CANCELSLOT)
+        .value("BUILDINGSHIELD", sc2::ABILITY_ID::BUILDINGSHIELD)
+        .value("BUILDINGSTASIS", sc2::ABILITY_ID::BUILDINGSTASIS)
+        .value("BUILDINPROGRESSNONCANCELLABLE_CANCEL", sc2::ABILITY_ID::BUILDINPROGRESSNONCANCELLABLE_CANCEL)
+        .value("BUILDINPROGRESSNYDUSCANAL_CANCEL", sc2::ABILITY_ID::BUILDINPROGRESSNYDUSCANAL_CANCEL)
+        .value("BUILDNYDUSCANAL_CANCEL", sc2::ABILITY_ID::BUILDNYDUSCANAL_CANCEL)
+        .value("BUILDNYDUSCANAL_SUMMONNYDUSCANALATTACKER", sc2::ABILITY_ID::BUILDNYDUSCANAL_SUMMONNYDUSCANALATTACKER)
         .value("BUILD_ARMORY", sc2::ABILITY_ID::BUILD_ARMORY)
         .value("BUILD_ASSIMILATOR", sc2::ABILITY_ID::BUILD_ASSIMILATOR)
         .value("BUILD_BANELINGNEST", sc2::ABILITY_ID::BUILD_BANELINGNEST)
         .value("BUILD_BARRACKS", sc2::ABILITY_ID::BUILD_BARRACKS)
         .value("BUILD_BUNKER", sc2::ABILITY_ID::BUILD_BUNKER)
+        .value("BUILD_CANCEL", sc2::ABILITY_ID::BUILD_CANCEL)
         .value("BUILD_COMMANDCENTER", sc2::ABILITY_ID::BUILD_COMMANDCENTER)
         .value("BUILD_CREEPTUMOR", sc2::ABILITY_ID::BUILD_CREEPTUMOR)
         .value("BUILD_CREEPTUMOR_QUEEN", sc2::ABILITY_ID::BUILD_CREEPTUMOR_QUEEN)
@@ -268,6 +2135,7 @@ void define_typeenums(py::module & m)
         .value("BUILD_HYDRALISKDEN", sc2::ABILITY_ID::BUILD_HYDRALISKDEN)
         .value("BUILD_INFESTATIONPIT", sc2::ABILITY_ID::BUILD_INFESTATIONPIT)
         .value("BUILD_INTERCEPTORS", sc2::ABILITY_ID::BUILD_INTERCEPTORS)
+        .value("BUILD_LURKERDEN", sc2::ABILITY_ID::BUILD_LURKERDEN)
         .value("BUILD_MISSILETURRET", sc2::ABILITY_ID::BUILD_MISSILETURRET)
         .value("BUILD_NEXUS", sc2::ABILITY_ID::BUILD_NEXUS)
         .value("BUILD_NUKE", sc2::ABILITY_ID::BUILD_NUKE)
@@ -300,36 +2168,74 @@ void define_typeenums(py::module & m)
         .value("BUILD_TEMPLARARCHIVE", sc2::ABILITY_ID::BUILD_TEMPLARARCHIVE)
         .value("BUILD_TWILIGHTCOUNCIL", sc2::ABILITY_ID::BUILD_TWILIGHTCOUNCIL)
         .value("BUILD_ULTRALISKCAVERN", sc2::ABILITY_ID::BUILD_ULTRALISKCAVERN)
+        .value("BUNKERATTACK", sc2::ABILITY_ID::BUNKERATTACK)
+        .value("BUNKERSTOP_HOLDFIRESPECIAL", sc2::ABILITY_ID::BUNKERSTOP_HOLDFIRESPECIAL)
+        .value("BUNKERSTOP_STOPBUNKER", sc2::ABILITY_ID::BUNKERSTOP_STOPBUNKER)
+        .value("BURROWBANELINGDOWN_CANCEL", sc2::ABILITY_ID::BURROWBANELINGDOWN_CANCEL)
+        .value("BURROWCREEPTUMORDOWN_BURROWDOWN", sc2::ABILITY_ID::BURROWCREEPTUMORDOWN_BURROWDOWN)
         .value("BURROWDOWN", sc2::ABILITY_ID::BURROWDOWN)
         .value("BURROWDOWN_BANELING", sc2::ABILITY_ID::BURROWDOWN_BANELING)
         .value("BURROWDOWN_DRONE", sc2::ABILITY_ID::BURROWDOWN_DRONE)
         .value("BURROWDOWN_HYDRALISK", sc2::ABILITY_ID::BURROWDOWN_HYDRALISK)
         .value("BURROWDOWN_INFESTOR", sc2::ABILITY_ID::BURROWDOWN_INFESTOR)
+        .value("BURROWDOWN_INFESTORTERRAN", sc2::ABILITY_ID::BURROWDOWN_INFESTORTERRAN)
         .value("BURROWDOWN_LURKER", sc2::ABILITY_ID::BURROWDOWN_LURKER)
         .value("BURROWDOWN_QUEEN", sc2::ABILITY_ID::BURROWDOWN_QUEEN)
         .value("BURROWDOWN_RAVAGER", sc2::ABILITY_ID::BURROWDOWN_RAVAGER)
         .value("BURROWDOWN_ROACH", sc2::ABILITY_ID::BURROWDOWN_ROACH)
         .value("BURROWDOWN_SWARMHOST", sc2::ABILITY_ID::BURROWDOWN_SWARMHOST)
+        .value("BURROWDOWN_ULTRALISK", sc2::ABILITY_ID::BURROWDOWN_ULTRALISK)
         .value("BURROWDOWN_WIDOWMINE", sc2::ABILITY_ID::BURROWDOWN_WIDOWMINE)
         .value("BURROWDOWN_ZERGLING", sc2::ABILITY_ID::BURROWDOWN_ZERGLING)
+        .value("BURROWDRONEDOWN_CANCEL", sc2::ABILITY_ID::BURROWDRONEDOWN_CANCEL)
+        .value("BURROWEDBANELINGSTOP_HOLDFIRESPECIAL", sc2::ABILITY_ID::BURROWEDBANELINGSTOP_HOLDFIRESPECIAL)
+        .value("BURROWEDBANELINGSTOP_STOPROACHBURROWED", sc2::ABILITY_ID::BURROWEDBANELINGSTOP_STOPROACHBURROWED)
+        .value("BURROWEDSTOP_HOLDFIRESPECIAL", sc2::ABILITY_ID::BURROWEDSTOP_HOLDFIRESPECIAL)
+        .value("BURROWEDSTOP_STOPROACHBURROWED", sc2::ABILITY_ID::BURROWEDSTOP_STOPROACHBURROWED)
+        .value("BURROWHUNTERKILLERDOWN_BURROWDOWN", sc2::ABILITY_ID::BURROWHUNTERKILLERDOWN_BURROWDOWN)
+        .value("BURROWHUNTERKILLERDOWN_CANCEL", sc2::ABILITY_ID::BURROWHUNTERKILLERDOWN_CANCEL)
+        .value("BURROWHUNTERKILLERUP_BURROWUP", sc2::ABILITY_ID::BURROWHUNTERKILLERUP_BURROWUP)
+        .value("BURROWHYDRALISKDOWN_CANCEL", sc2::ABILITY_ID::BURROWHYDRALISKDOWN_CANCEL)
+        .value("BURROWINFESTEDABOMINATIONDOWN_BURROWDOWN", sc2::ABILITY_ID::BURROWINFESTEDABOMINATIONDOWN_BURROWDOWN)
+        .value("BURROWINFESTEDABOMINATIONUP_BURROWUP", sc2::ABILITY_ID::BURROWINFESTEDABOMINATIONUP_BURROWUP)
+        .value("BURROWINFESTEDCIVILIANDOWN_BURROWDOWN", sc2::ABILITY_ID::BURROWINFESTEDCIVILIANDOWN_BURROWDOWN)
+        .value("BURROWINFESTEDCIVILIANUP_BURROWUP", sc2::ABILITY_ID::BURROWINFESTEDCIVILIANUP_BURROWUP)
+        .value("BURROWINFESTEDTERRANCAMPAIGNDOWN_BURROWDOWN", sc2::ABILITY_ID::BURROWINFESTEDTERRANCAMPAIGNDOWN_BURROWDOWN)
+        .value("BURROWINFESTEDTERRANCAMPAIGNUP_BURROWUP", sc2::ABILITY_ID::BURROWINFESTEDTERRANCAMPAIGNUP_BURROWUP)
+        .value("BURROWINFESTORDOWN_CANCEL", sc2::ABILITY_ID::BURROWINFESTORDOWN_CANCEL)
+        .value("BURROWLURKERDOWN_BURROWDOWN", sc2::ABILITY_ID::BURROWLURKERDOWN_BURROWDOWN)
+        .value("BURROWLURKERDOWN_CANCEL", sc2::ABILITY_ID::BURROWLURKERDOWN_CANCEL)
+        .value("BURROWLURKERMPDOWN_CANCEL", sc2::ABILITY_ID::BURROWLURKERMPDOWN_CANCEL)
+        .value("BURROWLURKERUP_BURROWUP", sc2::ABILITY_ID::BURROWLURKERUP_BURROWUP)
+        .value("BURROWOMEGALISKDOWN_BURROWDOWN", sc2::ABILITY_ID::BURROWOMEGALISKDOWN_BURROWDOWN)
+        .value("BURROWOMEGALISKUP_BURROWUP", sc2::ABILITY_ID::BURROWOMEGALISKUP_BURROWUP)
+        .value("BURROWQUEENDOWN_CANCEL", sc2::ABILITY_ID::BURROWQUEENDOWN_CANCEL)
+        .value("BURROWRAVAGERDOWN_CANCEL", sc2::ABILITY_ID::BURROWRAVAGERDOWN_CANCEL)
+        .value("BURROWROACHDOWN_CANCEL", sc2::ABILITY_ID::BURROWROACHDOWN_CANCEL)
         .value("BURROWUP", sc2::ABILITY_ID::BURROWUP)
         .value("BURROWUP_BANELING", sc2::ABILITY_ID::BURROWUP_BANELING)
         .value("BURROWUP_DRONE", sc2::ABILITY_ID::BURROWUP_DRONE)
         .value("BURROWUP_HYDRALISK", sc2::ABILITY_ID::BURROWUP_HYDRALISK)
         .value("BURROWUP_INFESTOR", sc2::ABILITY_ID::BURROWUP_INFESTOR)
+        .value("BURROWUP_INFESTORTERRAN", sc2::ABILITY_ID::BURROWUP_INFESTORTERRAN)
         .value("BURROWUP_LURKER", sc2::ABILITY_ID::BURROWUP_LURKER)
         .value("BURROWUP_QUEEN", sc2::ABILITY_ID::BURROWUP_QUEEN)
         .value("BURROWUP_RAVAGER", sc2::ABILITY_ID::BURROWUP_RAVAGER)
         .value("BURROWUP_ROACH", sc2::ABILITY_ID::BURROWUP_ROACH)
         .value("BURROWUP_SWARMHOST", sc2::ABILITY_ID::BURROWUP_SWARMHOST)
+        .value("BURROWUP_ULTRALISK", sc2::ABILITY_ID::BURROWUP_ULTRALISK)
         .value("BURROWUP_WIDOWMINE", sc2::ABILITY_ID::BURROWUP_WIDOWMINE)
         .value("BURROWUP_ZERGLING", sc2::ABILITY_ID::BURROWUP_ZERGLING)
+        .value("BURROWZERGLINGDOWN_CANCEL", sc2::ABILITY_ID::BURROWZERGLINGDOWN_CANCEL)
         .value("CANCEL", sc2::ABILITY_ID::CANCEL)
         .value("CANCELSLOT_ADDON", sc2::ABILITY_ID::CANCELSLOT_ADDON)
+        .value("CANCELSLOT_HANGARQUEUE5", sc2::ABILITY_ID::CANCELSLOT_HANGARQUEUE5)
         .value("CANCELSLOT_QUEUE1", sc2::ABILITY_ID::CANCELSLOT_QUEUE1)
         .value("CANCELSLOT_QUEUE5", sc2::ABILITY_ID::CANCELSLOT_QUEUE5)
         .value("CANCELSLOT_QUEUECANCELTOSELECTION", sc2::ABILITY_ID::CANCELSLOT_QUEUECANCELTOSELECTION)
         .value("CANCELSLOT_QUEUEPASSIVE", sc2::ABILITY_ID::CANCELSLOT_QUEUEPASSIVE)
+        .value("CANCELSLOT_QUEUEPASSIVECANCELTOSELECTION", sc2::ABILITY_ID::CANCELSLOT_QUEUEPASSIVECANCELTOSELECTION)
+        .value("CANCELTERRAZINEHARVEST_CANCEL", sc2::ABILITY_ID::CANCELTERRAZINEHARVEST_CANCEL)
         .value("CANCEL_ADEPTPHASESHIFT", sc2::ABILITY_ID::CANCEL_ADEPTPHASESHIFT)
         .value("CANCEL_ADEPTSHADEPHASESHIFT", sc2::ABILITY_ID::CANCEL_ADEPTSHADEPHASESHIFT)
         .value("CANCEL_BARRACKSADDON", sc2::ABILITY_ID::CANCEL_BARRACKSADDON)
@@ -337,8 +2243,12 @@ void define_typeenums(py::module & m)
         .value("CANCEL_CREEPTUMOR", sc2::ABILITY_ID::CANCEL_CREEPTUMOR)
         .value("CANCEL_FACTORYADDON", sc2::ABILITY_ID::CANCEL_FACTORYADDON)
         .value("CANCEL_GRAVITONBEAM", sc2::ABILITY_ID::CANCEL_GRAVITONBEAM)
+        .value("CANCEL_HANGARQUEUE5", sc2::ABILITY_ID::CANCEL_HANGARQUEUE5)
         .value("CANCEL_LAST", sc2::ABILITY_ID::CANCEL_LAST)
+        .value("CANCEL_LOCKON", sc2::ABILITY_ID::CANCEL_LOCKON)
         .value("CANCEL_MORPHBROODLORD", sc2::ABILITY_ID::CANCEL_MORPHBROODLORD)
+        .value("CANCEL_MORPHGREATERSPIRE", sc2::ABILITY_ID::CANCEL_MORPHGREATERSPIRE)
+        .value("CANCEL_MORPHHIVE", sc2::ABILITY_ID::CANCEL_MORPHHIVE)
         .value("CANCEL_MORPHLAIR", sc2::ABILITY_ID::CANCEL_MORPHLAIR)
         .value("CANCEL_MORPHLURKER", sc2::ABILITY_ID::CANCEL_MORPHLURKER)
         .value("CANCEL_MORPHLURKERDEN", sc2::ABILITY_ID::CANCEL_MORPHLURKERDEN)
@@ -348,16 +2258,86 @@ void define_typeenums(py::module & m)
         .value("CANCEL_MORPHOVERSEER", sc2::ABILITY_ID::CANCEL_MORPHOVERSEER)
         .value("CANCEL_MORPHPLANETARYFORTRESS", sc2::ABILITY_ID::CANCEL_MORPHPLANETARYFORTRESS)
         .value("CANCEL_MORPHRAVAGER", sc2::ABILITY_ID::CANCEL_MORPHRAVAGER)
+        .value("CANCEL_MORPHTHOREXPLOSIVEMODE", sc2::ABILITY_ID::CANCEL_MORPHTHOREXPLOSIVEMODE)
+        .value("CANCEL_MOTHERSHIPSTASIS", sc2::ABILITY_ID::CANCEL_MOTHERSHIPSTASIS)
+        .value("CANCEL_NEURALPARASITE", sc2::ABILITY_ID::CANCEL_NEURALPARASITE)
+        .value("CANCEL_NUKE", sc2::ABILITY_ID::CANCEL_NUKE)
+        .value("CANCEL_PROTOSSBUILDINGQUEUE", sc2::ABILITY_ID::CANCEL_PROTOSSBUILDINGQUEUE)
         .value("CANCEL_QUEUE1", sc2::ABILITY_ID::CANCEL_QUEUE1)
         .value("CANCEL_QUEUE5", sc2::ABILITY_ID::CANCEL_QUEUE5)
         .value("CANCEL_QUEUEADDON", sc2::ABILITY_ID::CANCEL_QUEUEADDON)
         .value("CANCEL_QUEUECANCELTOSELECTION", sc2::ABILITY_ID::CANCEL_QUEUECANCELTOSELECTION)
         .value("CANCEL_QUEUEPASIVE", sc2::ABILITY_ID::CANCEL_QUEUEPASIVE)
         .value("CANCEL_QUEUEPASSIVECANCELTOSELECTION", sc2::ABILITY_ID::CANCEL_QUEUEPASSIVECANCELTOSELECTION)
+        .value("CANCEL_SLOT", sc2::ABILITY_ID::CANCEL_SLOT)
         .value("CANCEL_SPINECRAWLERROOT", sc2::ABILITY_ID::CANCEL_SPINECRAWLERROOT)
+        .value("CANCEL_SPORECRAWLERROOT", sc2::ABILITY_ID::CANCEL_SPORECRAWLERROOT)
         .value("CANCEL_STARPORTADDON", sc2::ABILITY_ID::CANCEL_STARPORTADDON)
+        .value("CANCEL_STASISTRAP", sc2::ABILITY_ID::CANCEL_STASISTRAP)
+        .value("CANCEL_TEMPESTDISRUPTIONBLAST", sc2::ABILITY_ID::CANCEL_TEMPESTDISRUPTIONBLAST)
+        .value("CANCEL_VOIDRAYPRISMATICALIGNMENT", sc2::ABILITY_ID::CANCEL_VOIDRAYPRISMATICALIGNMENT)
+        .value("CHANGESHRINEPROTOSS", sc2::ABILITY_ID::CHANGESHRINEPROTOSS)
+        .value("CHANGESHRINETERRAN", sc2::ABILITY_ID::CHANGESHRINETERRAN)
+        .value("CLIFFDOORCLOSE0_SPACEPLATFORMDOORCLOSE", sc2::ABILITY_ID::CLIFFDOORCLOSE0_SPACEPLATFORMDOORCLOSE)
+        .value("CLIFFDOORCLOSE1_SPACEPLATFORMDOORCLOSE", sc2::ABILITY_ID::CLIFFDOORCLOSE1_SPACEPLATFORMDOORCLOSE)
+        .value("CLIFFDOOROPEN0_SPACEPLATFORMDOOROPEN", sc2::ABILITY_ID::CLIFFDOOROPEN0_SPACEPLATFORMDOOROPEN)
+        .value("CLIFFDOOROPEN1_SPACEPLATFORMDOOROPEN", sc2::ABILITY_ID::CLIFFDOOROPEN1_SPACEPLATFORMDOOROPEN)
+        .value("CLOAKINGDRONE", sc2::ABILITY_ID::CLOAKINGDRONE)
+        .value("CLONE", sc2::ABILITY_ID::CLONE)
+        .value("COLONISTSHIPLAND_LAND", sc2::ABILITY_ID::COLONISTSHIPLAND_LAND)
+        .value("COLONISTSHIPLIFTOFF_LIFT", sc2::ABILITY_ID::COLONISTSHIPLIFTOFF_LIFT)
+        .value("COLONISTTRANSPORTTRANSPORT_COLONISTTRANSPORTLOAD", sc2::ABILITY_ID::COLONISTTRANSPORTTRANSPORT_COLONISTTRANSPORTLOAD)
+        .value("COLONISTTRANSPORTTRANSPORT_COLONISTTRANSPORTUNLOADALL", sc2::ABILITY_ID::COLONISTTRANSPORTTRANSPORT_COLONISTTRANSPORTUNLOADALL)
+        .value("COLONYINFESTATION", sc2::ABILITY_ID::COLONYINFESTATION)
+        .value("COLONYSHIPTRANSPORT_MEDIVACLOAD", sc2::ABILITY_ID::COLONYSHIPTRANSPORT_MEDIVACLOAD)
+        .value("COLONYSHIPTRANSPORT_MEDIVACUNLOADALL", sc2::ABILITY_ID::COLONYSHIPTRANSPORT_MEDIVACUNLOADALL)
+        .value("CONSUMEDNA", sc2::ABILITY_ID::CONSUMEDNA)
+        .value("CONSUMPTION", sc2::ABILITY_ID::CONSUMPTION)
+        .value("CORRUPTIONBOMB", sc2::ABILITY_ID::CORRUPTIONBOMB)
+        .value("CORRUPTIONBOMB_CANCEL", sc2::ABILITY_ID::CORRUPTIONBOMB_CANCEL)
+        .value("CORRUPTION_CANCEL", sc2::ABILITY_ID::CORRUPTION_CANCEL)
+        .value("CORRUPTION_CORRUPTIONABILITY", sc2::ABILITY_ID::CORRUPTION_CORRUPTIONABILITY)
+        .value("CORSAIRMPDISRUPTIONWEB", sc2::ABILITY_ID::CORSAIRMPDISRUPTIONWEB)
+        .value("CRITTERFLEE", sc2::ABILITY_ID::CRITTERFLEE)
+        .value("D8CHARGE", sc2::ABILITY_ID::D8CHARGE)
+        .value("DEFENSIVEMATRIX", sc2::ABILITY_ID::DEFENSIVEMATRIX)
+        .value("DEFILERMPBURROW_BURROWDOWN", sc2::ABILITY_ID::DEFILERMPBURROW_BURROWDOWN)
+        .value("DEFILERMPBURROW_CANCEL", sc2::ABILITY_ID::DEFILERMPBURROW_CANCEL)
+        .value("DEFILERMPCONSUME", sc2::ABILITY_ID::DEFILERMPCONSUME)
+        .value("DEFILERMPDARKSWARM", sc2::ABILITY_ID::DEFILERMPDARKSWARM)
+        .value("DEFILERMPPLAGUE", sc2::ABILITY_ID::DEFILERMPPLAGUE)
+        .value("DEFILERMPUNBURROW_BURROWUP", sc2::ABILITY_ID::DEFILERMPUNBURROW_BURROWUP)
+        .value("DESTRUCTIBLEGATEDIAGONALBLURLOWERED_GATEOPEN", sc2::ABILITY_ID::DESTRUCTIBLEGATEDIAGONALBLURLOWERED_GATEOPEN)
+        .value("DESTRUCTIBLEGATEDIAGONALBLUR_GATECLOSE", sc2::ABILITY_ID::DESTRUCTIBLEGATEDIAGONALBLUR_GATECLOSE)
+        .value("DESTRUCTIBLEGATEDIAGONALULBRLOWERED_GATEOPEN", sc2::ABILITY_ID::DESTRUCTIBLEGATEDIAGONALULBRLOWERED_GATEOPEN)
+        .value("DESTRUCTIBLEGATEDIAGONALULBR_GATECLOSE", sc2::ABILITY_ID::DESTRUCTIBLEGATEDIAGONALULBR_GATECLOSE)
+        .value("DESTRUCTIBLEGATESTRAIGHTHORIZONTALBFLOWERED_GATEOPEN", sc2::ABILITY_ID::DESTRUCTIBLEGATESTRAIGHTHORIZONTALBFLOWERED_GATEOPEN)
+        .value("DESTRUCTIBLEGATESTRAIGHTHORIZONTALBF_GATECLOSE", sc2::ABILITY_ID::DESTRUCTIBLEGATESTRAIGHTHORIZONTALBF_GATECLOSE)
+        .value("DESTRUCTIBLEGATESTRAIGHTHORIZONTALLOWERED_GATEOPEN", sc2::ABILITY_ID::DESTRUCTIBLEGATESTRAIGHTHORIZONTALLOWERED_GATEOPEN)
+        .value("DESTRUCTIBLEGATESTRAIGHTHORIZONTAL_GATECLOSE", sc2::ABILITY_ID::DESTRUCTIBLEGATESTRAIGHTHORIZONTAL_GATECLOSE)
+        .value("DESTRUCTIBLEGATESTRAIGHTVERTICALLFLOWERED_GATEOPEN", sc2::ABILITY_ID::DESTRUCTIBLEGATESTRAIGHTVERTICALLFLOWERED_GATEOPEN)
+        .value("DESTRUCTIBLEGATESTRAIGHTVERTICALLF_GATECLOSE", sc2::ABILITY_ID::DESTRUCTIBLEGATESTRAIGHTVERTICALLF_GATECLOSE)
+        .value("DESTRUCTIBLEGATESTRAIGHTVERTICALLOWERED_GATEOPEN", sc2::ABILITY_ID::DESTRUCTIBLEGATESTRAIGHTVERTICALLOWERED_GATEOPEN)
+        .value("DESTRUCTIBLEGATESTRAIGHTVERTICAL_GATECLOSE", sc2::ABILITY_ID::DESTRUCTIBLEGATESTRAIGHTVERTICAL_GATECLOSE)
+        .value("DIGESTERCREEPSPRAY", sc2::ABILITY_ID::DIGESTERCREEPSPRAY)
+        .value("DIGESTERTRANSPORT_LOADDIGESTER", sc2::ABILITY_ID::DIGESTERTRANSPORT_LOADDIGESTER)
+        .value("DISGUISEASMARINEWITHOUTSHIELD_MARINE", sc2::ABILITY_ID::DISGUISEASMARINEWITHOUTSHIELD_MARINE)
+        .value("DISGUISEASMARINEWITHSHIELD_MARINE", sc2::ABILITY_ID::DISGUISEASMARINEWITHSHIELD_MARINE)
+        .value("DISGUISEASZEALOT_ZEALOT", sc2::ABILITY_ID::DISGUISEASZEALOT_ZEALOT)
+        .value("DISGUISEASZERGLINGWITHOUTWINGS_ZERGLING", sc2::ABILITY_ID::DISGUISEASZERGLINGWITHOUTWINGS_ZERGLING)
+        .value("DISGUISEASZERGLINGWITHWINGS_ZERGLING", sc2::ABILITY_ID::DISGUISEASZERGLINGWITHWINGS_ZERGLING)
+        .value("DOMINATION", sc2::ABILITY_ID::DOMINATION)
+        .value("DOMINATION_CANCEL", sc2::ABILITY_ID::DOMINATION_CANCEL)
+        .value("DROPTOSUPPLYDEPOT_RAISE", sc2::ABILITY_ID::DROPTOSUPPLYDEPOT_RAISE)
+        .value("DUKESREVENGEDEFENSIVEMATRIX_DEFENSIVEMATRIX", sc2::ABILITY_ID::DUKESREVENGEDEFENSIVEMATRIX_DEFENSIVEMATRIX)
+        .value("DUKESREVENGEMISSILEPODS_MISSILEPODS", sc2::ABILITY_ID::DUKESREVENGEMISSILEPODS_MISSILEPODS)
+        .value("DUSKWINGBANSHEECLOAKINGFIELD_CLOAKOFF", sc2::ABILITY_ID::DUSKWINGBANSHEECLOAKINGFIELD_CLOAKOFF)
+        .value("DUSKWINGBANSHEECLOAKINGFIELD_CLOAKONBANSHEE", sc2::ABILITY_ID::DUSKWINGBANSHEECLOAKINGFIELD_CLOAKONBANSHEE)
+        .value("DUTCHPLACETURRET", sc2::ABILITY_ID::DUTCHPLACETURRET)
         .value("EFFECT_ABDUCT", sc2::ABILITY_ID::EFFECT_ABDUCT)
         .value("EFFECT_ADEPTPHASESHIFT", sc2::ABILITY_ID::EFFECT_ADEPTPHASESHIFT)
+        .value("EFFECT_AMORPHOUSARMORCLOUD", sc2::ABILITY_ID::EFFECT_AMORPHOUSARMORCLOUD)
+        .value("EFFECT_ANTIARMORMISSILE", sc2::ABILITY_ID::EFFECT_ANTIARMORMISSILE)
         .value("EFFECT_AUTOTURRET", sc2::ABILITY_ID::EFFECT_AUTOTURRET)
         .value("EFFECT_BLINDINGCLOUD", sc2::ABILITY_ID::EFFECT_BLINDINGCLOUD)
         .value("EFFECT_BLINK", sc2::ABILITY_ID::EFFECT_BLINK)
@@ -366,6 +2346,7 @@ void define_typeenums(py::module & m)
         .value("EFFECT_CAUSTICSPRAY", sc2::ABILITY_ID::EFFECT_CAUSTICSPRAY)
         .value("EFFECT_CHARGE", sc2::ABILITY_ID::EFFECT_CHARGE)
         .value("EFFECT_CHRONOBOOST", sc2::ABILITY_ID::EFFECT_CHRONOBOOST)
+        .value("EFFECT_CHRONOBOOSTENERGYCOST", sc2::ABILITY_ID::EFFECT_CHRONOBOOSTENERGYCOST)
         .value("EFFECT_CONTAMINATE", sc2::ABILITY_ID::EFFECT_CONTAMINATE)
         .value("EFFECT_CORROSIVEBILE", sc2::ABILITY_ID::EFFECT_CORROSIVEBILE)
         .value("EFFECT_EMP", sc2::ABILITY_ID::EFFECT_EMP)
@@ -381,12 +2362,15 @@ void define_typeenums(py::module & m)
         .value("EFFECT_IMMORTALBARRIER", sc2::ABILITY_ID::EFFECT_IMMORTALBARRIER)
         .value("EFFECT_INFESTEDTERRANS", sc2::ABILITY_ID::EFFECT_INFESTEDTERRANS)
         .value("EFFECT_INJECTLARVA", sc2::ABILITY_ID::EFFECT_INJECTLARVA)
+        .value("EFFECT_INTERFERENCEMATRIX", sc2::ABILITY_ID::EFFECT_INTERFERENCEMATRIX)
         .value("EFFECT_KD8CHARGE", sc2::ABILITY_ID::EFFECT_KD8CHARGE)
         .value("EFFECT_LOCKON", sc2::ABILITY_ID::EFFECT_LOCKON)
         .value("EFFECT_LOCUSTSWOOP", sc2::ABILITY_ID::EFFECT_LOCUSTSWOOP)
         .value("EFFECT_MASSRECALL", sc2::ABILITY_ID::EFFECT_MASSRECALL)
         .value("EFFECT_MASSRECALL_MOTHERSHIP", sc2::ABILITY_ID::EFFECT_MASSRECALL_MOTHERSHIP)
         .value("EFFECT_MASSRECALL_MOTHERSHIPCORE", sc2::ABILITY_ID::EFFECT_MASSRECALL_MOTHERSHIPCORE)
+        .value("EFFECT_MASSRECALL_NEXUS", sc2::ABILITY_ID::EFFECT_MASSRECALL_NEXUS)
+        .value("EFFECT_MASSRECALL_STRATEGICRECALL", sc2::ABILITY_ID::EFFECT_MASSRECALL_STRATEGICRECALL)
         .value("EFFECT_MEDIVACIGNITEAFTERBURNERS", sc2::ABILITY_ID::EFFECT_MEDIVACIGNITEAFTERBURNERS)
         .value("EFFECT_NEURALPARASITE", sc2::ABILITY_ID::EFFECT_NEURALPARASITE)
         .value("EFFECT_NUKECALLDOWN", sc2::ABILITY_ID::EFFECT_NUKECALLDOWN)
@@ -397,7 +2381,9 @@ void define_typeenums(py::module & m)
         .value("EFFECT_PSISTORM", sc2::ABILITY_ID::EFFECT_PSISTORM)
         .value("EFFECT_PURIFICATIONNOVA", sc2::ABILITY_ID::EFFECT_PURIFICATIONNOVA)
         .value("EFFECT_REPAIR", sc2::ABILITY_ID::EFFECT_REPAIR)
+        .value("EFFECT_REPAIRDRONE", sc2::ABILITY_ID::EFFECT_REPAIRDRONE)
         .value("EFFECT_REPAIR_MULE", sc2::ABILITY_ID::EFFECT_REPAIR_MULE)
+        .value("EFFECT_REPAIR_REPAIRDRONE", sc2::ABILITY_ID::EFFECT_REPAIR_REPAIRDRONE)
         .value("EFFECT_REPAIR_SCV", sc2::ABILITY_ID::EFFECT_REPAIR_SCV)
         .value("EFFECT_RESTORE", sc2::ABILITY_ID::EFFECT_RESTORE)
         .value("EFFECT_SALVAGE", sc2::ABILITY_ID::EFFECT_SALVAGE)
@@ -411,6 +2397,7 @@ void define_typeenums(py::module & m)
         .value("EFFECT_SPRAY_ZERG", sc2::ABILITY_ID::EFFECT_SPRAY_ZERG)
         .value("EFFECT_STIM", sc2::ABILITY_ID::EFFECT_STIM)
         .value("EFFECT_STIM_MARAUDER", sc2::ABILITY_ID::EFFECT_STIM_MARAUDER)
+        .value("EFFECT_STIM_MARAUDER_REDIRECT", sc2::ABILITY_ID::EFFECT_STIM_MARAUDER_REDIRECT)
         .value("EFFECT_STIM_MARINE", sc2::ABILITY_ID::EFFECT_STIM_MARINE)
         .value("EFFECT_STIM_MARINE_REDIRECT", sc2::ABILITY_ID::EFFECT_STIM_MARINE_REDIRECT)
         .value("EFFECT_SUPPLYDROP", sc2::ABILITY_ID::EFFECT_SUPPLYDROP)
@@ -422,6 +2409,37 @@ void define_typeenums(py::module & m)
         .value("EFFECT_VOIDRAYPRISMATICALIGNMENT", sc2::ABILITY_ID::EFFECT_VOIDRAYPRISMATICALIGNMENT)
         .value("EFFECT_WIDOWMINEATTACK", sc2::ABILITY_ID::EFFECT_WIDOWMINEATTACK)
         .value("EFFECT_YAMATOGUN", sc2::ABILITY_ID::EFFECT_YAMATOGUN)
+        .value("EGGPOP", sc2::ABILITY_ID::EGGPOP)
+        .value("ENERGYNOVA", sc2::ABILITY_ID::ENERGYNOVA)
+        .value("EVOLUTIONCHAMBERRESEARCH_EVOLVEPROPULSIVEPERISTALSIS", sc2::ABILITY_ID::EVOLUTIONCHAMBERRESEARCH_EVOLVEPROPULSIVEPERISTALSIS)
+        .value("EXPERIMENTALPLASMAGUN", sc2::ABILITY_ID::EXPERIMENTALPLASMAGUN)
+        .value("EXTENDINGBRIDGENEWIDE10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::EXTENDINGBRIDGENEWIDE10OUT_BRIDGEEXTEND)
+        .value("EXTENDINGBRIDGENEWIDE10_BRIDGERETRACT", sc2::ABILITY_ID::EXTENDINGBRIDGENEWIDE10_BRIDGERETRACT)
+        .value("EXTENDINGBRIDGENEWIDE12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::EXTENDINGBRIDGENEWIDE12OUT_BRIDGEEXTEND)
+        .value("EXTENDINGBRIDGENEWIDE12_BRIDGERETRACT", sc2::ABILITY_ID::EXTENDINGBRIDGENEWIDE12_BRIDGERETRACT)
+        .value("EXTENDINGBRIDGENEWIDE8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::EXTENDINGBRIDGENEWIDE8OUT_BRIDGEEXTEND)
+        .value("EXTENDINGBRIDGENEWIDE8_BRIDGERETRACT", sc2::ABILITY_ID::EXTENDINGBRIDGENEWIDE8_BRIDGERETRACT)
+        .value("EXTENDINGBRIDGENWWIDE10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::EXTENDINGBRIDGENWWIDE10OUT_BRIDGEEXTEND)
+        .value("EXTENDINGBRIDGENWWIDE10_BRIDGERETRACT", sc2::ABILITY_ID::EXTENDINGBRIDGENWWIDE10_BRIDGERETRACT)
+        .value("EXTENDINGBRIDGENWWIDE12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::EXTENDINGBRIDGENWWIDE12OUT_BRIDGEEXTEND)
+        .value("EXTENDINGBRIDGENWWIDE12_BRIDGERETRACT", sc2::ABILITY_ID::EXTENDINGBRIDGENWWIDE12_BRIDGERETRACT)
+        .value("EXTENDINGBRIDGENWWIDE8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::EXTENDINGBRIDGENWWIDE8OUT_BRIDGEEXTEND)
+        .value("EXTENDINGBRIDGENWWIDE8_BRIDGERETRACT", sc2::ABILITY_ID::EXTENDINGBRIDGENWWIDE8_BRIDGERETRACT)
+        .value("EYESTALK", sc2::ABILITY_ID::EYESTALK)
+        .value("EYESTALK_CANCEL", sc2::ABILITY_ID::EYESTALK_CANCEL)
+        .value("FACTORYREACTORMORPH_REACTOR", sc2::ABILITY_ID::FACTORYREACTORMORPH_REACTOR)
+        .value("FACTORYTECHLABMORPH_TECHLABFACTORY", sc2::ABILITY_ID::FACTORYTECHLABMORPH_TECHLABFACTORY)
+        .value("FACTORYTECHREACTORMORPH_TECHLABFACTORY", sc2::ABILITY_ID::FACTORYTECHREACTORMORPH_TECHLABFACTORY)
+        .value("FLYERSHIELD", sc2::ABILITY_ID::FLYERSHIELD)
+        .value("FORCEFIELD_CANCEL", sc2::ABILITY_ID::FORCEFIELD_CANCEL)
+        .value("FRENZY", sc2::ABILITY_ID::FRENZY)
+        .value("GATHERSPECIALOBJECT", sc2::ABILITY_ID::GATHERSPECIALOBJECT)
+        .value("GENERAL_HOLDPOSITION", sc2::ABILITY_ID::GENERAL_HOLDPOSITION)
+        .value("GENERAL_MOVE", sc2::ABILITY_ID::GENERAL_MOVE)
+        .value("GENERAL_PATROL", sc2::ABILITY_ID::GENERAL_PATROL)
+        .value("GRAPPLE", sc2::ABILITY_ID::GRAPPLE)
+        .value("GRAVITONPRISON", sc2::ABILITY_ID::GRAVITONPRISON)
+        .value("GWALEARN_TESTLEARN", sc2::ABILITY_ID::GWALEARN_TESTLEARN)
         .value("HALLUCINATION_ADEPT", sc2::ABILITY_ID::HALLUCINATION_ADEPT)
         .value("HALLUCINATION_ARCHON", sc2::ABILITY_ID::HALLUCINATION_ARCHON)
         .value("HALLUCINATION_COLOSSUS", sc2::ABILITY_ID::HALLUCINATION_COLOSSUS)
@@ -440,6 +2458,7 @@ void define_typeenums(py::module & m)
         .value("HALT_TERRANBUILD", sc2::ABILITY_ID::HALT_TERRANBUILD)
         .value("HARVEST_GATHER", sc2::ABILITY_ID::HARVEST_GATHER)
         .value("HARVEST_GATHER_DRONE", sc2::ABILITY_ID::HARVEST_GATHER_DRONE)
+        .value("HARVEST_GATHER_MULE", sc2::ABILITY_ID::HARVEST_GATHER_MULE)
         .value("HARVEST_GATHER_PROBE", sc2::ABILITY_ID::HARVEST_GATHER_PROBE)
         .value("HARVEST_GATHER_SCV", sc2::ABILITY_ID::HARVEST_GATHER_SCV)
         .value("HARVEST_RETURN", sc2::ABILITY_ID::HARVEST_RETURN)
@@ -447,385 +2466,1360 @@ void define_typeenums(py::module & m)
         .value("HARVEST_RETURN_MULE", sc2::ABILITY_ID::HARVEST_RETURN_MULE)
         .value("HARVEST_RETURN_PROBE", sc2::ABILITY_ID::HARVEST_RETURN_PROBE)
         .value("HARVEST_RETURN_SCV", sc2::ABILITY_ID::HARVEST_RETURN_SCV)
-        .value("HOLDPOSITION", sc2::ABILITY_ID::HOLDPOSITION)
-        .value("LAND", sc2::ABILITY_ID::LAND)
-        .value("LAND_BARRACKS", sc2::ABILITY_ID::LAND_BARRACKS)
-        .value("LAND_COMMANDCENTER", sc2::ABILITY_ID::LAND_COMMANDCENTER)
-        .value("LAND_FACTORY", sc2::ABILITY_ID::LAND_FACTORY)
-        .value("LAND_ORBITALCOMMAND", sc2::ABILITY_ID::LAND_ORBITALCOMMAND)
-        .value("LAND_STARPORT", sc2::ABILITY_ID::LAND_STARPORT)
-        .value("LIFT", sc2::ABILITY_ID::LIFT)
-        .value("LIFT_BARRACKS", sc2::ABILITY_ID::LIFT_BARRACKS)
-        .value("LIFT_COMMANDCENTER", sc2::ABILITY_ID::LIFT_COMMANDCENTER)
-        .value("LIFT_FACTORY", sc2::ABILITY_ID::LIFT_FACTORY)
-        .value("LIFT_ORBITALCOMMAND", sc2::ABILITY_ID::LIFT_ORBITALCOMMAND)
-        .value("LIFT_STARPORT", sc2::ABILITY_ID::LIFT_STARPORT)
-        .value("LOAD", sc2::ABILITY_ID::LOAD)
-        .value("LOADALL", sc2::ABILITY_ID::LOADALL)
-        .value("LOADALL_COMMANDCENTER", sc2::ABILITY_ID::LOADALL_COMMANDCENTER)
-        .value("LOAD_BUNKER", sc2::ABILITY_ID::LOAD_BUNKER)
-        .value("LOAD_MEDIVAC", sc2::ABILITY_ID::LOAD_MEDIVAC)
-        .value("MORPH_ARCHON", sc2::ABILITY_ID::MORPH_ARCHON)
-        .value("MORPH_BROODLORD", sc2::ABILITY_ID::MORPH_BROODLORD)
-        .value("MORPH_GATEWAY", sc2::ABILITY_ID::MORPH_GATEWAY)
-        .value("MORPH_GREATERSPIRE", sc2::ABILITY_ID::MORPH_GREATERSPIRE)
-        .value("MORPH_HELLBAT", sc2::ABILITY_ID::MORPH_HELLBAT)
-        .value("MORPH_HELLION", sc2::ABILITY_ID::MORPH_HELLION)
-        .value("MORPH_HIVE", sc2::ABILITY_ID::MORPH_HIVE)
-        .value("MORPH_LAIR", sc2::ABILITY_ID::MORPH_LAIR)
-        .value("MORPH_LIBERATORAAMODE", sc2::ABILITY_ID::MORPH_LIBERATORAAMODE)
-        .value("MORPH_LIBERATORAGMODE", sc2::ABILITY_ID::MORPH_LIBERATORAGMODE)
-        .value("MORPH_LURKER", sc2::ABILITY_ID::MORPH_LURKER)
-        .value("MORPH_LURKERDEN", sc2::ABILITY_ID::MORPH_LURKERDEN)
-        .value("MORPH_MOTHERSHIP", sc2::ABILITY_ID::MORPH_MOTHERSHIP)
-        .value("MORPH_ORBITALCOMMAND", sc2::ABILITY_ID::MORPH_ORBITALCOMMAND)
-        .value("MORPH_OVERLORDTRANSPORT", sc2::ABILITY_ID::MORPH_OVERLORDTRANSPORT)
-        .value("MORPH_OVERSEER", sc2::ABILITY_ID::MORPH_OVERSEER)
-        .value("MORPH_PLANETARYFORTRESS", sc2::ABILITY_ID::MORPH_PLANETARYFORTRESS)
-        .value("MORPH_RAVAGER", sc2::ABILITY_ID::MORPH_RAVAGER)
-        .value("MORPH_ROOT", sc2::ABILITY_ID::MORPH_ROOT)
-        .value("MORPH_SIEGEMODE", sc2::ABILITY_ID::MORPH_SIEGEMODE)
-        .value("MORPH_SPINECRAWLERROOT", sc2::ABILITY_ID::MORPH_SPINECRAWLERROOT)
-        .value("MORPH_SPINECRAWLERUPROOT", sc2::ABILITY_ID::MORPH_SPINECRAWLERUPROOT)
-        .value("MORPH_SPORECRAWLERROOT", sc2::ABILITY_ID::MORPH_SPORECRAWLERROOT)
-        .value("MORPH_SPORECRAWLERUPROOT", sc2::ABILITY_ID::MORPH_SPORECRAWLERUPROOT)
-        .value("MORPH_SUPPLYDEPOT_LOWER", sc2::ABILITY_ID::MORPH_SUPPLYDEPOT_LOWER)
-        .value("MORPH_SUPPLYDEPOT_RAISE", sc2::ABILITY_ID::MORPH_SUPPLYDEPOT_RAISE)
-        .value("MORPH_THOREXPLOSIVEMODE", sc2::ABILITY_ID::MORPH_THOREXPLOSIVEMODE)
-        .value("MORPH_THORHIGHIMPACTMODE", sc2::ABILITY_ID::MORPH_THORHIGHIMPACTMODE)
-        .value("MORPH_UNSIEGE", sc2::ABILITY_ID::MORPH_UNSIEGE)
-        .value("MORPH_UPROOT", sc2::ABILITY_ID::MORPH_UPROOT)
-        .value("MORPH_VIKINGASSAULTMODE", sc2::ABILITY_ID::MORPH_VIKINGASSAULTMODE)
-        .value("MORPH_VIKINGFIGHTERMODE", sc2::ABILITY_ID::MORPH_VIKINGFIGHTERMODE)
-        .value("MORPH_WARPGATE", sc2::ABILITY_ID::MORPH_WARPGATE)
-        .value("MORPH_WARPPRISMPHASINGMODE", sc2::ABILITY_ID::MORPH_WARPPRISMPHASINGMODE)
-        .value("MORPH_WARPPRISMTRANSPORTMODE", sc2::ABILITY_ID::MORPH_WARPPRISMTRANSPORTMODE)
-        .value("MOVE", sc2::ABILITY_ID::MOVE)
-        .value("PATROL", sc2::ABILITY_ID::PATROL)
-        .value("RALLY_BUILDING", sc2::ABILITY_ID::RALLY_BUILDING)
-        .value("RALLY_COMMANDCENTER", sc2::ABILITY_ID::RALLY_COMMANDCENTER)
-        .value("RALLY_HATCHERY_UNITS", sc2::ABILITY_ID::RALLY_HATCHERY_UNITS)
-        .value("RALLY_HATCHERY_WORKERS", sc2::ABILITY_ID::RALLY_HATCHERY_WORKERS)
-        .value("RALLY_MORPHING_UNIT", sc2::ABILITY_ID::RALLY_MORPHING_UNIT)
-        .value("RALLY_NEXUS", sc2::ABILITY_ID::RALLY_NEXUS)
-        .value("RALLY_UNITS", sc2::ABILITY_ID::RALLY_UNITS)
-        .value("RALLY_WORKERS", sc2::ABILITY_ID::RALLY_WORKERS)
-        .value("RESEARCH_ADEPTRESONATINGGLAIVES", sc2::ABILITY_ID::RESEARCH_ADEPTRESONATINGGLAIVES)
-        .value("RESEARCH_ADVANCEDBALLISTICS", sc2::ABILITY_ID::RESEARCH_ADVANCEDBALLISTICS)
-        .value("RESEARCH_BANSHEECLOAKINGFIELD", sc2::ABILITY_ID::RESEARCH_BANSHEECLOAKINGFIELD)
-        .value("RESEARCH_BANSHEEHYPERFLIGHTROTORS", sc2::ABILITY_ID::RESEARCH_BANSHEEHYPERFLIGHTROTORS)
-        .value("RESEARCH_BATTLECRUISERWEAPONREFIT", sc2::ABILITY_ID::RESEARCH_BATTLECRUISERWEAPONREFIT)
-        .value("RESEARCH_BLINK", sc2::ABILITY_ID::RESEARCH_BLINK)
-        .value("RESEARCH_BURROW", sc2::ABILITY_ID::RESEARCH_BURROW)
-        .value("RESEARCH_CENTRIFUGALHOOKS", sc2::ABILITY_ID::RESEARCH_CENTRIFUGALHOOKS)
-        .value("RESEARCH_CHARGE", sc2::ABILITY_ID::RESEARCH_CHARGE)
-        .value("RESEARCH_CHITINOUSPLATING", sc2::ABILITY_ID::RESEARCH_CHITINOUSPLATING)
-        .value("RESEARCH_COMBATSHIELD", sc2::ABILITY_ID::RESEARCH_COMBATSHIELD)
-        .value("RESEARCH_CONCUSSIVESHELLS", sc2::ABILITY_ID::RESEARCH_CONCUSSIVESHELLS)
-        .value("RESEARCH_DRILLINGCLAWS", sc2::ABILITY_ID::RESEARCH_DRILLINGCLAWS)
-        .value("RESEARCH_ENHANCEDMUNITIONS", sc2::ABILITY_ID::RESEARCH_ENHANCEDMUNITIONS)
-        .value("RESEARCH_EXTENDEDTHERMALLANCE", sc2::ABILITY_ID::RESEARCH_EXTENDEDTHERMALLANCE)
-        .value("RESEARCH_GLIALREGENERATION", sc2::ABILITY_ID::RESEARCH_GLIALREGENERATION)
-        .value("RESEARCH_GRAVITICBOOSTER", sc2::ABILITY_ID::RESEARCH_GRAVITICBOOSTER)
-        .value("RESEARCH_GRAVITICDRIVE", sc2::ABILITY_ID::RESEARCH_GRAVITICDRIVE)
-        .value("RESEARCH_GROOVEDSPINES", sc2::ABILITY_ID::RESEARCH_GROOVEDSPINES)
-        .value("RESEARCH_HIGHCAPACITYFUELTANKS", sc2::ABILITY_ID::RESEARCH_HIGHCAPACITYFUELTANKS)
-        .value("RESEARCH_HISECAUTOTRACKING", sc2::ABILITY_ID::RESEARCH_HISECAUTOTRACKING)
-        .value("RESEARCH_INFERNALPREIGNITER", sc2::ABILITY_ID::RESEARCH_INFERNALPREIGNITER)
-        .value("RESEARCH_INTERCEPTORGRAVITONCATAPULT", sc2::ABILITY_ID::RESEARCH_INTERCEPTORGRAVITONCATAPULT)
-        .value("RESEARCH_MAGFIELDLAUNCHERS", sc2::ABILITY_ID::RESEARCH_MAGFIELDLAUNCHERS)
-        .value("RESEARCH_MUSCULARAUGMENTS", sc2::ABILITY_ID::RESEARCH_MUSCULARAUGMENTS)
-        .value("RESEARCH_NEOSTEELFRAME", sc2::ABILITY_ID::RESEARCH_NEOSTEELFRAME)
-        .value("RESEARCH_NEURALPARASITE", sc2::ABILITY_ID::RESEARCH_NEURALPARASITE)
-        .value("RESEARCH_PATHOGENGLANDS", sc2::ABILITY_ID::RESEARCH_PATHOGENGLANDS)
-        .value("RESEARCH_PERSONALCLOAKING", sc2::ABILITY_ID::RESEARCH_PERSONALCLOAKING)
-        .value("RESEARCH_PHOENIXANIONPULSECRYSTALS", sc2::ABILITY_ID::RESEARCH_PHOENIXANIONPULSECRYSTALS)
-        .value("RESEARCH_PNEUMATIZEDCARAPACE", sc2::ABILITY_ID::RESEARCH_PNEUMATIZEDCARAPACE)
-        .value("RESEARCH_PROTOSSAIRARMOR", sc2::ABILITY_ID::RESEARCH_PROTOSSAIRARMOR)
-        .value("RESEARCH_PROTOSSAIRARMORLEVEL1", sc2::ABILITY_ID::RESEARCH_PROTOSSAIRARMORLEVEL1)
-        .value("RESEARCH_PROTOSSAIRARMORLEVEL2", sc2::ABILITY_ID::RESEARCH_PROTOSSAIRARMORLEVEL2)
-        .value("RESEARCH_PROTOSSAIRARMORLEVEL3", sc2::ABILITY_ID::RESEARCH_PROTOSSAIRARMORLEVEL3)
-        .value("RESEARCH_PROTOSSAIRWEAPONS", sc2::ABILITY_ID::RESEARCH_PROTOSSAIRWEAPONS)
-        .value("RESEARCH_PROTOSSAIRWEAPONSLEVEL1", sc2::ABILITY_ID::RESEARCH_PROTOSSAIRWEAPONSLEVEL1)
-        .value("RESEARCH_PROTOSSAIRWEAPONSLEVEL2", sc2::ABILITY_ID::RESEARCH_PROTOSSAIRWEAPONSLEVEL2)
-        .value("RESEARCH_PROTOSSAIRWEAPONSLEVEL3", sc2::ABILITY_ID::RESEARCH_PROTOSSAIRWEAPONSLEVEL3)
-        .value("RESEARCH_PROTOSSGROUNDARMOR", sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDARMOR)
-        .value("RESEARCH_PROTOSSGROUNDARMORLEVEL1", sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDARMORLEVEL1)
-        .value("RESEARCH_PROTOSSGROUNDARMORLEVEL2", sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDARMORLEVEL2)
-        .value("RESEARCH_PROTOSSGROUNDARMORLEVEL3", sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDARMORLEVEL3)
-        .value("RESEARCH_PROTOSSGROUNDWEAPONS", sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDWEAPONS)
-        .value("RESEARCH_PROTOSSGROUNDWEAPONSLEVEL1", sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDWEAPONSLEVEL1)
-        .value("RESEARCH_PROTOSSGROUNDWEAPONSLEVEL2", sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDWEAPONSLEVEL2)
-        .value("RESEARCH_PROTOSSGROUNDWEAPONSLEVEL3", sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDWEAPONSLEVEL3)
-        .value("RESEARCH_PROTOSSSHIELDS", sc2::ABILITY_ID::RESEARCH_PROTOSSSHIELDS)
-        .value("RESEARCH_PROTOSSSHIELDSLEVEL1", sc2::ABILITY_ID::RESEARCH_PROTOSSSHIELDSLEVEL1)
-        .value("RESEARCH_PROTOSSSHIELDSLEVEL2", sc2::ABILITY_ID::RESEARCH_PROTOSSSHIELDSLEVEL2)
-        .value("RESEARCH_PROTOSSSHIELDSLEVEL3", sc2::ABILITY_ID::RESEARCH_PROTOSSSHIELDSLEVEL3)
-        .value("RESEARCH_PSISTORM", sc2::ABILITY_ID::RESEARCH_PSISTORM)
-        .value("RESEARCH_RAPIDFIRELAUNCHERS", sc2::ABILITY_ID::RESEARCH_RAPIDFIRELAUNCHERS)
-        .value("RESEARCH_RAVENCORVIDREACTOR", sc2::ABILITY_ID::RESEARCH_RAVENCORVIDREACTOR)
-        .value("RESEARCH_RAVENRECALIBRATEDEXPLOSIVES", sc2::ABILITY_ID::RESEARCH_RAVENRECALIBRATEDEXPLOSIVES)
-        .value("RESEARCH_SHADOWSTRIKE", sc2::ABILITY_ID::RESEARCH_SHADOWSTRIKE)
-        .value("RESEARCH_SMARTSERVOS", sc2::ABILITY_ID::RESEARCH_SMARTSERVOS)
-        .value("RESEARCH_STIMPACK", sc2::ABILITY_ID::RESEARCH_STIMPACK)
-        .value("RESEARCH_TERRANINFANTRYARMOR", sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYARMOR)
-        .value("RESEARCH_TERRANINFANTRYARMORLEVEL1", sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYARMORLEVEL1)
-        .value("RESEARCH_TERRANINFANTRYARMORLEVEL2", sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYARMORLEVEL2)
-        .value("RESEARCH_TERRANINFANTRYARMORLEVEL3", sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYARMORLEVEL3)
-        .value("RESEARCH_TERRANINFANTRYWEAPONS", sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYWEAPONS)
-        .value("RESEARCH_TERRANINFANTRYWEAPONSLEVEL1", sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYWEAPONSLEVEL1)
-        .value("RESEARCH_TERRANINFANTRYWEAPONSLEVEL2", sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYWEAPONSLEVEL2)
-        .value("RESEARCH_TERRANINFANTRYWEAPONSLEVEL3", sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYWEAPONSLEVEL3)
-        .value("RESEARCH_TERRANSHIPWEAPONS", sc2::ABILITY_ID::RESEARCH_TERRANSHIPWEAPONS)
-        .value("RESEARCH_TERRANSHIPWEAPONSLEVEL1", sc2::ABILITY_ID::RESEARCH_TERRANSHIPWEAPONSLEVEL1)
-        .value("RESEARCH_TERRANSHIPWEAPONSLEVEL2", sc2::ABILITY_ID::RESEARCH_TERRANSHIPWEAPONSLEVEL2)
-        .value("RESEARCH_TERRANSHIPWEAPONSLEVEL3", sc2::ABILITY_ID::RESEARCH_TERRANSHIPWEAPONSLEVEL3)
-        .value("RESEARCH_TERRANSTRUCTUREARMORUPGRADE", sc2::ABILITY_ID::RESEARCH_TERRANSTRUCTUREARMORUPGRADE)
-        .value("RESEARCH_TERRANVEHICLEANDSHIPPLATING", sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEANDSHIPPLATING)
-        .value("RESEARCH_TERRANVEHICLEANDSHIPPLATINGLEVEL1", sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEANDSHIPPLATINGLEVEL1)
-        .value("RESEARCH_TERRANVEHICLEANDSHIPPLATINGLEVEL2", sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEANDSHIPPLATINGLEVEL2)
-        .value("RESEARCH_TERRANVEHICLEANDSHIPPLATINGLEVEL3", sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEANDSHIPPLATINGLEVEL3)
-        .value("RESEARCH_TERRANVEHICLEWEAPONS", sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEWEAPONS)
-        .value("RESEARCH_TERRANVEHICLEWEAPONSLEVEL1", sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEWEAPONSLEVEL1)
-        .value("RESEARCH_TERRANVEHICLEWEAPONSLEVEL2", sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEWEAPONSLEVEL2)
-        .value("RESEARCH_TERRANVEHICLEWEAPONSLEVEL3", sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEWEAPONSLEVEL3)
-        .value("RESEARCH_TUNNELINGCLAWS", sc2::ABILITY_ID::RESEARCH_TUNNELINGCLAWS)
-        .value("RESEARCH_WARPGATE", sc2::ABILITY_ID::RESEARCH_WARPGATE)
-        .value("RESEARCH_ZERGFLYERARMOR", sc2::ABILITY_ID::RESEARCH_ZERGFLYERARMOR)
-        .value("RESEARCH_ZERGFLYERARMORLEVEL1", sc2::ABILITY_ID::RESEARCH_ZERGFLYERARMORLEVEL1)
-        .value("RESEARCH_ZERGFLYERARMORLEVEL2", sc2::ABILITY_ID::RESEARCH_ZERGFLYERARMORLEVEL2)
-        .value("RESEARCH_ZERGFLYERARMORLEVEL3", sc2::ABILITY_ID::RESEARCH_ZERGFLYERARMORLEVEL3)
-        .value("RESEARCH_ZERGFLYERATTACK", sc2::ABILITY_ID::RESEARCH_ZERGFLYERATTACK)
-        .value("RESEARCH_ZERGFLYERATTACKLEVEL1", sc2::ABILITY_ID::RESEARCH_ZERGFLYERATTACKLEVEL1)
-        .value("RESEARCH_ZERGFLYERATTACKLEVEL2", sc2::ABILITY_ID::RESEARCH_ZERGFLYERATTACKLEVEL2)
-        .value("RESEARCH_ZERGFLYERATTACKLEVEL3", sc2::ABILITY_ID::RESEARCH_ZERGFLYERATTACKLEVEL3)
-        .value("RESEARCH_ZERGGROUNDARMOR", sc2::ABILITY_ID::RESEARCH_ZERGGROUNDARMOR)
-        .value("RESEARCH_ZERGGROUNDARMORLEVEL1", sc2::ABILITY_ID::RESEARCH_ZERGGROUNDARMORLEVEL1)
-        .value("RESEARCH_ZERGGROUNDARMORLEVEL2", sc2::ABILITY_ID::RESEARCH_ZERGGROUNDARMORLEVEL2)
-        .value("RESEARCH_ZERGGROUNDARMORLEVEL3", sc2::ABILITY_ID::RESEARCH_ZERGGROUNDARMORLEVEL3)
-        .value("RESEARCH_ZERGLINGADRENALGLANDS", sc2::ABILITY_ID::RESEARCH_ZERGLINGADRENALGLANDS)
-        .value("RESEARCH_ZERGLINGMETABOLICBOOST", sc2::ABILITY_ID::RESEARCH_ZERGLINGMETABOLICBOOST)
-        .value("RESEARCH_ZERGMELEEWEAPONS", sc2::ABILITY_ID::RESEARCH_ZERGMELEEWEAPONS)
-        .value("RESEARCH_ZERGMELEEWEAPONSLEVEL1", sc2::ABILITY_ID::RESEARCH_ZERGMELEEWEAPONSLEVEL1)
-        .value("RESEARCH_ZERGMELEEWEAPONSLEVEL2", sc2::ABILITY_ID::RESEARCH_ZERGMELEEWEAPONSLEVEL2)
-        .value("RESEARCH_ZERGMELEEWEAPONSLEVEL3", sc2::ABILITY_ID::RESEARCH_ZERGMELEEWEAPONSLEVEL3)
-        .value("RESEARCH_ZERGMISSILEWEAPONS", sc2::ABILITY_ID::RESEARCH_ZERGMISSILEWEAPONS)
-        .value("RESEARCH_ZERGMISSILEWEAPONSLEVEL1", sc2::ABILITY_ID::RESEARCH_ZERGMISSILEWEAPONSLEVEL1)
-        .value("RESEARCH_ZERGMISSILEWEAPONSLEVEL2", sc2::ABILITY_ID::RESEARCH_ZERGMISSILEWEAPONSLEVEL2)
-        .value("RESEARCH_ZERGMISSILEWEAPONSLEVEL3", sc2::ABILITY_ID::RESEARCH_ZERGMISSILEWEAPONSLEVEL3)
-        .value("SCAN_MOVE", sc2::ABILITY_ID::SCAN_MOVE)
-        .value("STOP", sc2::ABILITY_ID::STOP)
-        .value("STOP_BUILDING", sc2::ABILITY_ID::STOP_BUILDING)
-        .value("STOP_CHEER", sc2::ABILITY_ID::STOP_CHEER)
-        .value("STOP_DANCE", sc2::ABILITY_ID::STOP_DANCE)
-        .value("STOP_REDIRECT", sc2::ABILITY_ID::STOP_REDIRECT)
-        .value("STOP_STOP", sc2::ABILITY_ID::STOP_STOP)
-        .value("TRAINWARP_ADEPT", sc2::ABILITY_ID::TRAINWARP_ADEPT)
-        .value("TRAINWARP_DARKTEMPLAR", sc2::ABILITY_ID::TRAINWARP_DARKTEMPLAR)
-        .value("TRAINWARP_HIGHTEMPLAR", sc2::ABILITY_ID::TRAINWARP_HIGHTEMPLAR)
-        .value("TRAINWARP_SENTRY", sc2::ABILITY_ID::TRAINWARP_SENTRY)
-        .value("TRAINWARP_STALKER", sc2::ABILITY_ID::TRAINWARP_STALKER)
-        .value("TRAINWARP_ZEALOT", sc2::ABILITY_ID::TRAINWARP_ZEALOT)
-        .value("TRAIN_ADEPT", sc2::ABILITY_ID::TRAIN_ADEPT)
-        .value("TRAIN_BANELING", sc2::ABILITY_ID::TRAIN_BANELING)
-        .value("TRAIN_BANSHEE", sc2::ABILITY_ID::TRAIN_BANSHEE)
-        .value("TRAIN_BATTLECRUISER", sc2::ABILITY_ID::TRAIN_BATTLECRUISER)
-        .value("TRAIN_CARRIER", sc2::ABILITY_ID::TRAIN_CARRIER)
-        .value("TRAIN_COLOSSUS", sc2::ABILITY_ID::TRAIN_COLOSSUS)
-        .value("TRAIN_CORRUPTOR", sc2::ABILITY_ID::TRAIN_CORRUPTOR)
-        .value("TRAIN_CYCLONE", sc2::ABILITY_ID::TRAIN_CYCLONE)
-        .value("TRAIN_DARKTEMPLAR", sc2::ABILITY_ID::TRAIN_DARKTEMPLAR)
-        .value("TRAIN_DISRUPTOR", sc2::ABILITY_ID::TRAIN_DISRUPTOR)
-        .value("TRAIN_DRONE", sc2::ABILITY_ID::TRAIN_DRONE)
-        .value("TRAIN_GHOST", sc2::ABILITY_ID::TRAIN_GHOST)
-        .value("TRAIN_HELLBAT", sc2::ABILITY_ID::TRAIN_HELLBAT)
-        .value("TRAIN_HELLION", sc2::ABILITY_ID::TRAIN_HELLION)
-        .value("TRAIN_HIGHTEMPLAR", sc2::ABILITY_ID::TRAIN_HIGHTEMPLAR)
-        .value("TRAIN_HYDRALISK", sc2::ABILITY_ID::TRAIN_HYDRALISK)
-        .value("TRAIN_IMMORTAL", sc2::ABILITY_ID::TRAIN_IMMORTAL)
-        .value("TRAIN_INFESTOR", sc2::ABILITY_ID::TRAIN_INFESTOR)
-        .value("TRAIN_LIBERATOR", sc2::ABILITY_ID::TRAIN_LIBERATOR)
-        .value("TRAIN_MARAUDER", sc2::ABILITY_ID::TRAIN_MARAUDER)
-        .value("TRAIN_MARINE", sc2::ABILITY_ID::TRAIN_MARINE)
-        .value("TRAIN_MEDIVAC", sc2::ABILITY_ID::TRAIN_MEDIVAC)
-        .value("TRAIN_MOTHERSHIP", sc2::ABILITY_ID::TRAIN_MOTHERSHIP)
-        .value("TRAIN_MOTHERSHIPCORE", sc2::ABILITY_ID::TRAIN_MOTHERSHIPCORE)
-        .value("TRAIN_MUTALISK", sc2::ABILITY_ID::TRAIN_MUTALISK)
-        .value("TRAIN_OBSERVER", sc2::ABILITY_ID::TRAIN_OBSERVER)
-        .value("TRAIN_ORACLE", sc2::ABILITY_ID::TRAIN_ORACLE)
-        .value("TRAIN_OVERLORD", sc2::ABILITY_ID::TRAIN_OVERLORD)
-        .value("TRAIN_PHOENIX", sc2::ABILITY_ID::TRAIN_PHOENIX)
-        .value("TRAIN_PROBE", sc2::ABILITY_ID::TRAIN_PROBE)
-        .value("TRAIN_QUEEN", sc2::ABILITY_ID::TRAIN_QUEEN)
-        .value("TRAIN_RAVEN", sc2::ABILITY_ID::TRAIN_RAVEN)
-        .value("TRAIN_REAPER", sc2::ABILITY_ID::TRAIN_REAPER)
-        .value("TRAIN_ROACH", sc2::ABILITY_ID::TRAIN_ROACH)
-        .value("TRAIN_SCV", sc2::ABILITY_ID::TRAIN_SCV)
-        .value("TRAIN_SENTRY", sc2::ABILITY_ID::TRAIN_SENTRY)
-        .value("TRAIN_SIEGETANK", sc2::ABILITY_ID::TRAIN_SIEGETANK)
-        .value("TRAIN_STALKER", sc2::ABILITY_ID::TRAIN_STALKER)
-        .value("TRAIN_SWARMHOST", sc2::ABILITY_ID::TRAIN_SWARMHOST)
-        .value("TRAIN_TEMPEST", sc2::ABILITY_ID::TRAIN_TEMPEST)
-        .value("TRAIN_THOR", sc2::ABILITY_ID::TRAIN_THOR)
-        .value("TRAIN_ULTRALISK", sc2::ABILITY_ID::TRAIN_ULTRALISK)
-        .value("TRAIN_VIKINGFIGHTER", sc2::ABILITY_ID::TRAIN_VIKINGFIGHTER)
-        .value("TRAIN_VIPER", sc2::ABILITY_ID::TRAIN_VIPER)
-        .value("TRAIN_VOIDRAY", sc2::ABILITY_ID::TRAIN_VOIDRAY)
-        .value("TRAIN_WARPPRISM", sc2::ABILITY_ID::TRAIN_WARPPRISM)
-        .value("TRAIN_WIDOWMINE", sc2::ABILITY_ID::TRAIN_WIDOWMINE)
-        .value("TRAIN_ZEALOT", sc2::ABILITY_ID::TRAIN_ZEALOT)
-        .value("TRAIN_ZERGLING", sc2::ABILITY_ID::TRAIN_ZERGLING)
-        .value("UNLOADALL", sc2::ABILITY_ID::UNLOADALL)
-        .value("UNLOADALLAT", sc2::ABILITY_ID::UNLOADALLAT)
-        .value("UNLOADALLAT_MEDIVAC", sc2::ABILITY_ID::UNLOADALLAT_MEDIVAC)
-        .value("UNLOADALLAT_OVERLORD", sc2::ABILITY_ID::UNLOADALLAT_OVERLORD)
-        .value("UNLOADALLAT_WARPPRISM", sc2::ABILITY_ID::UNLOADALLAT_WARPPRISM)
-        .value("UNLOADALL_BUNKER", sc2::ABILITY_ID::UNLOADALL_BUNKER)
-        .value("UNLOADALL_COMMANDCENTER", sc2::ABILITY_ID::UNLOADALL_COMMANDCENTER)
-        .value("UNLOADALL_NYDASNETWORK", sc2::ABILITY_ID::UNLOADALL_NYDASNETWORK)
-        .value("UNLOADALL_NYDUSWORM", sc2::ABILITY_ID::UNLOADALL_NYDUSWORM)
-        .value("UNLOADUNIT_BUNKER", sc2::ABILITY_ID::UNLOADUNIT_BUNKER)
-        .value("UNLOADUNIT_COMMANDCENTER", sc2::ABILITY_ID::UNLOADUNIT_COMMANDCENTER)
-        .value("UNLOADUNIT_MEDIVAC", sc2::ABILITY_ID::UNLOADUNIT_MEDIVAC)
-        .value("UNLOADUNIT_NYDASNETWORK", sc2::ABILITY_ID::UNLOADUNIT_NYDASNETWORK)
-        .value("UNLOADUNIT_OVERLORD", sc2::ABILITY_ID::UNLOADUNIT_OVERLORD)
-        .value("UNLOADUNIT_WARPPRISM", sc2::ABILITY_ID::UNLOADUNIT_WARPPRISM);
+		.value("HEAL_MEDICHEAL", sc2::ABILITY_ID::HEAL_MEDICHEAL)
+		.value("HELIOSCRASHMORPH_CRASHMORPH", sc2::ABILITY_ID::HELIOSCRASHMORPH_CRASHMORPH)
+		.value("HERCULESLAND", sc2::ABILITY_ID::HERCULESLAND)
+		.value("HERCULESLIFTOFF_LIFT", sc2::ABILITY_ID::HERCULESLIFTOFF_LIFT)
+		.value("HERCULESTRANSPORT_MEDIVACLOAD", sc2::ABILITY_ID::HERCULESTRANSPORT_MEDIVACLOAD)
+		.value("HERCULESTRANSPORT_MEDIVACUNLOADALL", sc2::ABILITY_ID::HERCULESTRANSPORT_MEDIVACUNLOADALL)
+		.value("HERDINTERACT_HERD", sc2::ABILITY_ID::HERDINTERACT_HERD)
+		.value("HEROARMNUKE_NUKEARM", sc2::ABILITY_ID::HEROARMNUKE_NUKEARM)
+		.value("HERONUCLEARSTRIKE_CANCEL", sc2::ABILITY_ID::HERONUCLEARSTRIKE_CANCEL)
+		.value("HOLDFIRE", sc2::ABILITY_ID::HOLDFIRE)
+		.value("HOLDFIRE_STOPSPECIAL", sc2::ABILITY_ID::HOLDFIRE_STOPSPECIAL)
+		.value("HUTTRANSPORT_HUTLOAD", sc2::ABILITY_ID::HUTTRANSPORT_HUTLOAD)
+		.value("HUTTRANSPORT_HUTUNLOADALL", sc2::ABILITY_ID::HUTTRANSPORT_HUTUNLOADALL)
+		.value("HYBRIDBLINK_ZERATULBLINK", sc2::ABILITY_ID::HYBRIDBLINK_ZERATULBLINK)
+		.value("HYBRIDCPLASMABLAST", sc2::ABILITY_ID::HYBRIDCPLASMABLAST)
+		.value("HYBRIDFAOESTUN", sc2::ABILITY_ID::HYBRIDFAOESTUN)
+		.value("HYPERIONYAMATOSPECIAL_HYPERIONYAMATOGUN", sc2::ABILITY_ID::HYPERIONYAMATOSPECIAL_HYPERIONYAMATOGUN)
+		.value("IMPALE", sc2::ABILITY_ID::IMPALE)
+		.value("IMPLOSION", sc2::ABILITY_ID::IMPLOSION)
+		.value("INFESTABLEHUTTRANSPORT_HUTLOAD", sc2::ABILITY_ID::INFESTABLEHUTTRANSPORT_HUTLOAD)
+		.value("INFESTABLEHUTTRANSPORT_HUTUNLOADALL", sc2::ABILITY_ID::INFESTABLEHUTTRANSPORT_HUTUNLOADALL)
+		.value("INFESTEDVENTSPAWNBROODLORD_SPAWNBROODLORD", sc2::ABILITY_ID::INFESTEDVENTSPAWNBROODLORD_SPAWNBROODLORD)
+		.value("INFESTEDVENTSPAWNCORRUPTOR_SPAWNCORRUPTOR", sc2::ABILITY_ID::INFESTEDVENTSPAWNCORRUPTOR_SPAWNCORRUPTOR)
+		.value("INFESTEDVENTSPAWNMUTALISK_LEVIATHANSPAWNMUTALISK", sc2::ABILITY_ID::INFESTEDVENTSPAWNMUTALISK_LEVIATHANSPAWNMUTALISK)
+		.value("INFESTORENSNARE", sc2::ABILITY_ID::INFESTORENSNARE)
+		.value("INVULNERABILITYSHIELD", sc2::ABILITY_ID::INVULNERABILITYSHIELD)
+		.value("IRRADIATE", sc2::ABILITY_ID::IRRADIATE)
+		.value("IRRADIATE_CANCEL", sc2::ABILITY_ID::IRRADIATE_CANCEL)
+		.value("KARASSPLASMASURGE", sc2::ABILITY_ID::KARASSPLASMASURGE)
+		.value("LAND", sc2::ABILITY_ID::LAND)
+		.value("LAND_BARRACKS", sc2::ABILITY_ID::LAND_BARRACKS)
+		.value("LAND_COMMANDCENTER", sc2::ABILITY_ID::LAND_COMMANDCENTER)
+		.value("LAND_FACTORY", sc2::ABILITY_ID::LAND_FACTORY)
+		.value("LAND_ORBITALCOMMAND", sc2::ABILITY_ID::LAND_ORBITALCOMMAND)
+		.value("LAND_STARPORT", sc2::ABILITY_ID::LAND_STARPORT)
+		.value("LEECH", sc2::ABILITY_ID::LEECH)
+		.value("LEECHRESOURCES_CANCEL", sc2::ABILITY_ID::LEECHRESOURCES_CANCEL)
+		.value("LEVIATHANSPAWNBROODLORD_SPAWNBROODLORD", sc2::ABILITY_ID::LEVIATHANSPAWNBROODLORD_SPAWNBROODLORD)
+		.value("LEVIATHANSPAWNMUTALISK", sc2::ABILITY_ID::LEVIATHANSPAWNMUTALISK)
+		.value("LIBERATORMORPHTOAA_LIBERATORAAMODE", sc2::ABILITY_ID::LIBERATORMORPHTOAA_LIBERATORAAMODE)
+		.value("LIBERATORMORPHTOAG_LIBERATORAGMODE", sc2::ABILITY_ID::LIBERATORMORPHTOAG_LIBERATORAGMODE)
+		.value("LIBRARYDOWN", sc2::ABILITY_ID::LIBRARYDOWN)
+		.value("LIBRARYUP", sc2::ABILITY_ID::LIBRARYUP)
+		.value("LIFT", sc2::ABILITY_ID::LIFT)
+		.value("LIFT_BARRACKS", sc2::ABILITY_ID::LIFT_BARRACKS)
+		.value("LIFT_COMMANDCENTER", sc2::ABILITY_ID::LIFT_COMMANDCENTER)
+		.value("LIFT_FACTORY", sc2::ABILITY_ID::UNLOADALL_NYDASNETWORK)
+		.value("LIFT_ORBITALCOMMAND", sc2::ABILITY_ID::LIFT_ORBITALCOMMAND)
+		.value("LIFT_STARPORT", sc2::ABILITY_ID::LIFT_STARPORT)
+		.value("LIGHTBRIDGEOFF", sc2::ABILITY_ID::LIGHTBRIDGEOFF)
+		.value("LIGHTBRIDGEOFFTOPRIGHT_LIGHTBRIDGEOFF", sc2::ABILITY_ID::LIGHTBRIDGEOFFTOPRIGHT_LIGHTBRIDGEOFF)
+		.value("LIGHTBRIDGEON", sc2::ABILITY_ID::LIGHTBRIDGEON)
+		.value("LIGHTBRIDGEONTOPRIGHT_LIGHTBRIDGEON", sc2::ABILITY_ID::LIGHTBRIDGEONTOPRIGHT_LIGHTBRIDGEON)
+		.value("LIGHTNINGBOMB", sc2::ABILITY_ID::LIGHTNINGBOMB)
+		.value("LIGHTOFAIUR", sc2::ABILITY_ID::LIGHTOFAIUR)
+		.value("LOAD", sc2::ABILITY_ID::LOAD)
+		.value("LOADALL", sc2::ABILITY_ID::LOADALL)
+		.value("LOADALL_COMMANDCENTER", sc2::ABILITY_ID::LOADALL_COMMANDCENTER)
+		.value("LOAD_BUNKER", sc2::ABILITY_ID::LOAD_BUNKER)
+		.value("LOAD_MEDIVAC", sc2::ABILITY_ID::LOAD_MEDIVAC)
+		.value("LOAD_NYDUSNETWORK", sc2::ABILITY_ID::LOAD_NYDUSNETWORK)
+		.value("LOAD_NYDUSWORM", sc2::ABILITY_ID::LOAD_NYDUSWORM)
+		.value("LOAD_OVERLORD", sc2::ABILITY_ID::LOAD_OVERLORD)
+		.value("LOAD_WARPPRISM", sc2::ABILITY_ID::LOAD_WARPPRISM)
+		.value("LOCKONAIR", sc2::ABILITY_ID::LOCKONAIR)
+		.value("LOCUSTMPFLYINGMORPHTOGROUND_LOCUSTMPFLYINGSWOOP", sc2::ABILITY_ID::LOCUSTMPFLYINGMORPHTOGROUND_LOCUSTMPFLYINGSWOOP)
+		.value("LOCUSTMPFLYINGSWOOPATTACK_LOCUSTMPFLYINGSWOOP", sc2::ABILITY_ID::LOCUSTMPFLYINGSWOOPATTACK_LOCUSTMPFLYINGSWOOP)
+		.value("LOCUSTMPMORPHTOAIR_LOCUSTMPFLYINGSWOOP", sc2::ABILITY_ID::LOCUSTMPMORPHTOAIR_LOCUSTMPFLYINGSWOOP)
+		.value("LOKIMISSILEPODS_MISSILEPODS", sc2::ABILITY_ID::LOKIMISSILEPODS_MISSILEPODS)
+		.value("LOKIUNDOCK_LIFT", sc2::ABILITY_ID::LOKIUNDOCK_LIFT)
+		.value("LOKIYAMATO_LOKIYAMATOGUN", sc2::ABILITY_ID::LOKIYAMATO_LOKIYAMATOGUN)
+		.value("LURKERASPECTFROMHYDRALISKBURROWED_CANCEL", sc2::ABILITY_ID::LURKERASPECTFROMHYDRALISKBURROWED_CANCEL)
+		.value("LURKERASPECTFROMHYDRALISKBURROWED_LURKERFROMHYDRALISKBURROWED", sc2::ABILITY_ID::LURKERASPECTFROMHYDRALISKBURROWED_LURKERFROMHYDRALISKBURROWED)
+		.value("LURKERASPECTMPFROMHYDRALISKBURROWED_CANCEL", sc2::ABILITY_ID::LURKERASPECTMPFROMHYDRALISKBURROWED_CANCEL)
+		.value("LURKERASPECTMPFROMHYDRALISKBURROWED_LURKERMPFROMHYDRALISKBURROWED", sc2::ABILITY_ID::LURKERASPECTMPFROMHYDRALISKBURROWED_LURKERMPFROMHYDRALISKBURROWED)
+		.value("LURKERASPECTMP_CANCEL", sc2::ABILITY_ID::LURKERASPECTMP_CANCEL)
+		.value("LURKERASPECTMP_LURKERMP", sc2::ABILITY_ID::LURKERASPECTMP_LURKERMP)
+		.value("LURKERASPECT_CANCEL", sc2::ABILITY_ID::LURKERASPECT_CANCEL)
+		.value("LURKERASPECT_LURKER", sc2::ABILITY_ID::LURKERASPECT_LURKER)
+		.value("LIGHTBRIDGEONTOPRIGHT_LIGHTBRIDGEON", sc2::ABILITY_ID::LIGHTBRIDGEONTOPRIGHT_LIGHTBRIDGEON)
+		.value("MAKEVULTURESPIDERMINES_SPIDERMINEREPLENISH", sc2::ABILITY_ID::MAKEVULTURESPIDERMINES_SPIDERMINEREPLENISH)
+		.value("MASSIVEKNOCKOVER", sc2::ABILITY_ID::MASSIVEKNOCKOVER)
+		.value("MAXIUMTHRUST_MAXIMUMTHRUST", sc2::ABILITY_ID::MAXIUMTHRUST_MAXIMUMTHRUST)
+		.value("MERGEABLE_CANCEL", sc2::ABILITY_ID::MERGEABLE_CANCEL)
+		.value("METALGATEDIAGONALBLURLOWERED_GATEOPEN", sc2::ABILITY_ID::METALGATEDIAGONALBLURLOWERED_GATEOPEN)
+		.value("METALGATEDIAGONALBLUR_GATECLOSE", sc2::ABILITY_ID::METALGATEDIAGONALBLUR_GATECLOSE)
+		.value("METALGATEDIAGONALULBRLOWERED_GATEOPEN", sc2::ABILITY_ID::METALGATEDIAGONALULBRLOWERED_GATEOPEN)
+		.value("METALGATEDIAGONALULBR_GATECLOSE", sc2::ABILITY_ID::METALGATEDIAGONALULBR_GATECLOSE)
+		.value("METALGATESTRAIGHTHORIZONTALBFLOWERED_GATEOPEN", sc2::ABILITY_ID::METALGATESTRAIGHTHORIZONTALBFLOWERED_GATEOPEN)
+		.value("METALGATESTRAIGHTHORIZONTALBF_GATECLOSE", sc2::ABILITY_ID::METALGATESTRAIGHTHORIZONTALBF_GATECLOSE)
+		.value("METALGATESTRAIGHTHORIZONTALLOWERED_GATEOPEN", sc2::ABILITY_ID::METALGATESTRAIGHTHORIZONTALLOWERED_GATEOPEN)
+		.value("METALGATESTRAIGHTHORIZONTAL_GATECLOSE", sc2::ABILITY_ID::METALGATESTRAIGHTHORIZONTAL_GATECLOSE)
+		.value("METALGATESTRAIGHTVERTICALLFLOWERED_GATEOPEN", sc2::ABILITY_ID::METALGATESTRAIGHTVERTICALLFLOWERED_GATEOPEN)
+		.value("METALGATESTRAIGHTVERTICALLF_GATECLOSE", sc2::ABILITY_ID::METALGATESTRAIGHTVERTICALLF_GATECLOSE)
+		.value("METALGATESTRAIGHTVERTICALLOWERED_GATEOPEN", sc2::ABILITY_ID::METALGATESTRAIGHTVERTICALLOWERED_GATEOPEN)
+		.value("METALGATESTRAIGHTVERTICAL_GATECLOSE", sc2::ABILITY_ID::METALGATESTRAIGHTVERTICAL_GATECLOSE)
+		.value("MINDBLAST", sc2::ABILITY_ID::MINDBLAST)
+		.value("MINDCONTROL", sc2::ABILITY_ID::MINDCONTROL)
+		.value("MISSILEPODS", sc2::ABILITY_ID::MISSILEPODS)
+		.value("MORPH_ARCHON", sc2::ABILITY_ID::MORPH_ARCHON)
+		.value("MORPH_BANELING", sc2::ABILITY_ID::MORPH_BANELING)
+		.value("MORPH_BROODLORD", sc2::ABILITY_ID::MORPH_BROODLORD)
+		.value("MORPH_CANCEL", sc2::ABILITY_ID::MORPH_CANCEL)
+		.value("MORPH_GATEWAY", sc2::ABILITY_ID::MORPH_GATEWAY)
+		.value("MORPH_GREATERSPIRE", sc2::ABILITY_ID::MORPH_GREATERSPIRE)
+		.value("MORPH_HELLBAT", sc2::ABILITY_ID::MORPH_HELLBAT)
+		.value("MORPH_HELLION", sc2::ABILITY_ID::MORPH_HELLION)
+		.value("MORPH_HIVE", sc2::ABILITY_ID::MORPH_HIVE)
+		.value("MORPH_LAIR", sc2::ABILITY_ID::MORPH_LAIR)
+		.value("MORPH_LIBERATORAAMODE", sc2::ABILITY_ID::MORPH_LIBERATORAAMODE)
+		.value("MORPH_LIBERATORAGMODE", sc2::ABILITY_ID::MORPH_LIBERATORAGMODE)
+		.value("MORPH_LURKER", sc2::ABILITY_ID::MORPH_LURKER)
+		.value("MORPH_LURKERDEN", sc2::ABILITY_ID::MORPH_LURKERDEN)
+		.value("MORPH_MORPHTODEVOURERMP", sc2::ABILITY_ID::MORPH_MORPHTODEVOURERMP)
+		.value("MORPH_MORPHTOGUARDIANMP", sc2::ABILITY_ID::MORPH_MORPHTOGUARDIANMP)
+		.value("MORPH_MORPHTOINFESTEDCIVILIAN", sc2::ABILITY_ID::MORPH_MORPHTOINFESTEDCIVILIAN)
+		.value("MORPH_MOTHERSHIP", sc2::ABILITY_ID::MORPH_MOTHERSHIP)
+		.value("MORPH_MOVE", sc2::ABILITY_ID::MORPH_MOVE)
+		.value("MORPH_OBSERVERMODE", sc2::ABILITY_ID::MORPH_OBSERVERMODE)
+		.value("MORPH_ORBITALCOMMAND", sc2::ABILITY_ID::MORPH_ORBITALCOMMAND)
+		.value("MORPH_OVERLORDTRANSPORT", sc2::ABILITY_ID::MORPH_OVERLORDTRANSPORT)
+		.value("MORPH_OVERSEER", sc2::ABILITY_ID::MORPH_OVERSEER)
+		.value("MORPH_OVERSEERMODE", sc2::ABILITY_ID::MORPH_OVERSEERMODE)
+		.value("MORPH_OVERSIGHTMODE", sc2::ABILITY_ID::MORPH_OVERSIGHTMODE)
+		.value("MORPH_PLANETARYFORTRESS", sc2::ABILITY_ID::MORPH_PLANETARYFORTRESS)
+		.value("MORPH_RAVAGER", sc2::ABILITY_ID::MORPH_RAVAGER)
+		.value("MORPH_ROOT", sc2::ABILITY_ID::MORPH_ROOT)
+		.value("MORPH_SIEGEMODE", sc2::ABILITY_ID::MORPH_SIEGEMODE)
+		.value("MORPH_SPINECRAWLERROOT", sc2::ABILITY_ID::MORPH_SPINECRAWLERROOT)
+		.value("MORPH_SPINECRAWLERUPROOT", sc2::ABILITY_ID::MORPH_SPINECRAWLERUPROOT)
+		.value("MORPH_SPORECRAWLERROOT", sc2::ABILITY_ID::MORPH_SPORECRAWLERROOT)
+		.value("MORPH_SPORECRAWLERUPROOT", sc2::ABILITY_ID::MORPH_SPORECRAWLERUPROOT)
+		.value("MORPH_SUPPLYDEPOT_LOWER", sc2::ABILITY_ID::MORPH_SUPPLYDEPOT_LOWER)
+		.value("MORPH_SUPPLYDEPOT_RAISE", sc2::ABILITY_ID::MORPH_SUPPLYDEPOT_RAISE)
+		.value("MORPH_SURVEILLANCEMODE", sc2::ABILITY_ID::MORPH_SURVEILLANCEMODE)
+		.value("MORPH_THOREXPLOSIVEMODE", sc2::ABILITY_ID::MORPH_THOREXPLOSIVEMODE)
+		.value("MORPH_THORHIGHIMPACTMODE", sc2::ABILITY_ID::MORPH_THORHIGHIMPACTMODE)
+		.value("MORPH_UNSIEGE", sc2::ABILITY_ID::MORPH_UNSIEGE)
+		.value("MORPH_UPROOT", sc2::ABILITY_ID::MORPH_UPROOT)
+		.value("MORPH_VIKINGASSAULTMODE", sc2::ABILITY_ID::MORPH_VIKINGASSAULTMODE)
+		.value("MORPH_VIKINGFIGHTERMODE", sc2::ABILITY_ID::MORPH_VIKINGFIGHTERMODE)
+		.value("MORPH_WARPGATE", sc2::ABILITY_ID::MORPH_WARPGATE)
+		.value("MORPH_WARPPRISMPHASINGMODE", sc2::ABILITY_ID::MORPH_WARPPRISMPHASINGMODE)
+		.value("MORPH_WARPPRISMTRANSPORTMODE", sc2::ABILITY_ID::MORPH_WARPPRISMTRANSPORTMODE)
+		.value("MOTHERSHIPCOREENERGIZE", sc2::ABILITY_ID::MOTHERSHIPCOREENERGIZE)
+		.value("MOTHERSHIPCOREENERGIZE_CANCEL", sc2::ABILITY_ID::MOTHERSHIPCOREENERGIZE_CANCEL)
+		.value("MOTHERSHIPCOREPURIFYNEXUSCANCEL_CANCEL", sc2::ABILITY_ID::MOTHERSHIPCOREPURIFYNEXUSCANCEL_CANCEL)
+		.value("MOTHERSHIPCORETELEPORT", sc2::ABILITY_ID::MOTHERSHIPCORETELEPORT)
+		.value("MOTHERSHIPCOREWEAPON_MOTHERSHIPSTASIS", sc2::ABILITY_ID::MOTHERSHIPCOREWEAPON_MOTHERSHIPSTASIS)
+		.value("MOTHERSHIPSTASIS", sc2::ABILITY_ID::MOTHERSHIPSTASIS)
+		.value("MOVE_ACQUIREMOVE", sc2::ABILITY_ID::MOVE_ACQUIREMOVE)
+		.value("MOVE_MOVE", sc2::ABILITY_ID::MOVE_MOVE)
+		.value("MOVE_MOVEHOLDPOSITION", sc2::ABILITY_ID::MOVE_MOVEHOLDPOSITION)
+		.value("MOVE_MOVEPATROL", sc2::ABILITY_ID::MOVE_MOVEPATROL)
+		.value("MOVE_TURN", sc2::ABILITY_ID::MOVE_TURN)
+		.value("NEXUSINVULNERABILITY", sc2::ABILITY_ID::NEXUSINVULNERABILITY)
+		.value("NEXUSPHASESHIFT", sc2::ABILITY_ID::NEXUSPHASESHIFT)
+		.value("NEXUSSHIELDOVERCHARGE", sc2::ABILITY_ID::NEXUSSHIELDOVERCHARGE)
+		.value("NEXUSSHIELDOVERCHARGEOFF", sc2::ABILITY_ID::NEXUSSHIELDOVERCHARGEOFF)
+		.value("NEXUSSHIELDRECHARGE", sc2::ABILITY_ID::NEXUSSHIELDRECHARGE)
+		.value("NEXUSSHIELDRECHARGEONPYLON", sc2::ABILITY_ID::NEXUSSHIELDRECHARGEONPYLON)
+		.value("NOVASNIPE", sc2::ABILITY_ID::NOVASNIPE)
+		.value("OBLITERATE", sc2::ABILITY_ID::OBLITERATE)
+		.value("ODINBARRAGE", sc2::ABILITY_ID::ODINBARRAGE)
+		.value("ODINBARRAGE_CANCEL", sc2::ABILITY_ID::ODINBARRAGE_CANCEL)
+		.value("ODINNUCLEARSTRIKE_CANCEL", sc2::ABILITY_ID::ODINNUCLEARSTRIKE_CANCEL)
+		.value("ODINNUCLEARSTRIKE_ODINNUKECALLDOWN", sc2::ABILITY_ID::ODINNUCLEARSTRIKE_ODINNUKECALLDOWN)
+		.value("ODINWRECKAGE_ODIN", sc2::ABILITY_ID::ODINWRECKAGE_ODIN)
+		.value("OMEGASTORM", sc2::ABILITY_ID::OMEGASTORM)
+		.value("ORACLECLOAKFIELD", sc2::ABILITY_ID::ORACLECLOAKFIELD)
+		.value("ORACLECLOAKINGFIELDTARGETED", sc2::ABILITY_ID::ORACLECLOAKINGFIELDTARGETED)
+		.value("ORACLENORMALMODE", sc2::ABILITY_ID::ORACLENORMALMODE)
+		.value("ORACLENORMALMODE_CANCEL", sc2::ABILITY_ID::ORACLENORMALMODE_CANCEL)
+		.value("ORACLEPHASESHIFT", sc2::ABILITY_ID::ORACLEPHASESHIFT)
+		.value("ORACLEREVELATIONMODE", sc2::ABILITY_ID::ORACLEREVELATIONMODE)
+		.value("ORACLEREVELATIONMODE_CANCEL", sc2::ABILITY_ID::ORACLEREVELATIONMODE_CANCEL)
+		.value("ORACLESTASISTRAPACTIVATE_ACTIVATESTASISWARD", sc2::ABILITY_ID::ORACLESTASISTRAPACTIVATE_ACTIVATESTASISWARD)
+		.value("ORACLESTASISTRAP_ORACLEBUILDSTASISTRAP", sc2::ABILITY_ID::ORACLESTASISTRAP_ORACLEBUILDSTASISTRAP)
+		.value("OVERCHARGE", sc2::ABILITY_ID::OVERCHARGE)
+		.value("PARKCOLONISTVEHICLE", sc2::ABILITY_ID::PARKCOLONISTVEHICLE)
+		.value("PENETRATINGSHOT", sc2::ABILITY_ID::PENETRATINGSHOT)
+		.value("PHASEMINEBLAST", sc2::ABILITY_ID::PHASEMINEBLAST)
+		.value("PHASESHIFT", sc2::ABILITY_ID::PHASESHIFT)
+		.value("PICKUP", sc2::ABILITY_ID::PICKUP)
+		.value("PICKUPARCADE_PICKUP", sc2::ABILITY_ID::PICKUPARCADE_PICKUP)
+		.value("PICKUPGAS100", sc2::ABILITY_ID::PICKUPGAS100)
+		.value("PICKUPMINERALS100", sc2::ABILITY_ID::PICKUPMINERALS100)
+		.value("PICKUPPALLETGAS", sc2::ABILITY_ID::PICKUPPALLETGAS)
+		.value("PICKUPPALLETMINERALS", sc2::ABILITY_ID::PICKUPPALLETMINERALS)
+		.value("PICKUPSCRAPLARGE", sc2::ABILITY_ID::PICKUPSCRAPLARGE)
+		.value("PICKUPSCRAPMEDIUM", sc2::ABILITY_ID::PICKUPSCRAPMEDIUM)
+		.value("PICKUPSCRAPSMALL", sc2::ABILITY_ID::PICKUPSCRAPSMALL)
+		.value("PORTCITY_BRIDGE_UNITE10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITE10OUT_BRIDGEEXTEND)
+		.value("PORTCITY_BRIDGE_UNITE10_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITE10_BRIDGERETRACT)
+		.value("PORTCITY_BRIDGE_UNITE12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITE12OUT_BRIDGEEXTEND)
+		.value("PORTCITY_BRIDGE_UNITE12_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITE12_BRIDGERETRACT)
+		.value("PORTCITY_BRIDGE_UNITE8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITE8OUT_BRIDGEEXTEND)
+		.value("PORTCITY_BRIDGE_UNITE8_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITE8_BRIDGERETRACT)
+		.value("PORTCITY_BRIDGE_UNITN10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITN10OUT_BRIDGEEXTEND)
+		.value("PORTCITY_BRIDGE_UNITN10_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITN10_BRIDGERETRACT)
+		.value("PORTCITY_BRIDGE_UNITN12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITN12OUT_BRIDGEEXTEND)
+		.value("PORTCITY_BRIDGE_UNITN12_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITN12_BRIDGERETRACT)
+		.value("PORTCITY_BRIDGE_UNITN8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITN8OUT_BRIDGEEXTEND)
+		.value("PORTCITY_BRIDGE_UNITN8_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITN8_BRIDGERETRACT)
+		.value("PORTCITY_BRIDGE_UNITNE10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITNE10OUT_BRIDGEEXTEND)
+		.value("PORTCITY_BRIDGE_UNITNE10_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITNE10_BRIDGERETRACT)
+		.value("PORTCITY_BRIDGE_UNITNE12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITNE12OUT_BRIDGEEXTEND)
+		.value("PORTCITY_BRIDGE_UNITNE12_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITNE12_BRIDGERETRACT)
+		.value("PORTCITY_BRIDGE_UNITNE8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITNE8OUT_BRIDGEEXTEND)
+		.value("PORTCITY_BRIDGE_UNITNE8_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITNE8_BRIDGERETRACT)
+		.value("PORTCITY_BRIDGE_UNITNW10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITNW10OUT_BRIDGEEXTEND)
+		.value("PORTCITY_BRIDGE_UNITNW10_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITNW10_BRIDGERETRACT)
+		.value("PORTCITY_BRIDGE_UNITNW12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITNW12OUT_BRIDGEEXTEND)
+		.value("PORTCITY_BRIDGE_UNITNW12_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITNW12_BRIDGERETRACT)
+		.value("PORTCITY_BRIDGE_UNITNW8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITNW8OUT_BRIDGEEXTEND)
+		.value("PORTCITY_BRIDGE_UNITNW8_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITNW8_BRIDGERETRACT)
+		.value("PORTCITY_BRIDGE_UNITS10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITS10OUT_BRIDGEEXTEND)
+		.value("PORTCITY_BRIDGE_UNITS10_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITS10_BRIDGERETRACT)
+		.value("PORTCITY_BRIDGE_UNITS12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITS12OUT_BRIDGEEXTEND)
+		.value("PORTCITY_BRIDGE_UNITS12_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITS12_BRIDGERETRACT)
+		.value("PORTCITY_BRIDGE_UNITS8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITS8OUT_BRIDGEEXTEND)
+		.value("PORTCITY_BRIDGE_UNITS8_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITS8_BRIDGERETRACT)
+		.value("PORTCITY_BRIDGE_UNITSE10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITSE10OUT_BRIDGEEXTEND)
+		.value("PORTCITY_BRIDGE_UNITSE10_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITSE10_BRIDGERETRACT)
+		.value("PORTCITY_BRIDGE_UNITSE12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITSE12OUT_BRIDGEEXTEND)
+		.value("PORTCITY_BRIDGE_UNITSE12_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITSE12_BRIDGERETRACT)
+		.value("PORTCITY_BRIDGE_UNITSE8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITSE8OUT_BRIDGEEXTEND)
+		.value("PORTCITY_BRIDGE_UNITSE8_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITSE8_BRIDGERETRACT)
+		.value("PORTCITY_BRIDGE_UNITSW10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITSW10OUT_BRIDGEEXTEND)
+		.value("PORTCITY_BRIDGE_UNITSW10_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITSW10_BRIDGERETRACT)
+		.value("PORTCITY_BRIDGE_UNITSW12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITSW12OUT_BRIDGEEXTEND)
+		.value("PORTCITY_BRIDGE_UNITSW12_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITSW12_BRIDGERETRACT)
+		.value("PORTCITY_BRIDGE_UNITSW8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITSW8OUT_BRIDGEEXTEND)
+		.value("PORTCITY_BRIDGE_UNITSW8_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITSW8_BRIDGERETRACT)
+		.value("PORTCITY_BRIDGE_UNITW10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITW10OUT_BRIDGEEXTEND)
+		.value("PORTCITY_BRIDGE_UNITW10_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITW10_BRIDGERETRACT)
+		.value("PORTCITY_BRIDGE_UNITW12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITW12OUT_BRIDGEEXTEND)
+		.value("PORTCITY_BRIDGE_UNITW12_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITW12_BRIDGERETRACT)
+		.value("PORTCITY_BRIDGE_UNITW8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITW8OUT_BRIDGEEXTEND)
+		.value("PORTCITY_BRIDGE_UNITW8_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITW8_BRIDGERETRACT)
+		.value("PROTOSSBUILDINGQUEUE_CANCELSLOT", sc2::ABILITY_ID::PROTOSSBUILDINGQUEUE_CANCELSLOT)
+		.value("PSIONICSHOCKWAVE", sc2::ABILITY_ID::PSIONICSHOCKWAVE)
+		.value("PSYTROUSOXIDE_PSYTROUSOXIDEOFF", sc2::ABILITY_ID::PSYTROUSOXIDE_PSYTROUSOXIDEOFF)
+		.value("PSYTROUSOXIDE_PSYTROUSOXIDEON", sc2::ABILITY_ID::PSYTROUSOXIDE_PSYTROUSOXIDEON)
+		.value("PULSARBEAM_RIPFIELD", sc2::ABILITY_ID::PULSARBEAM_RIPFIELD)
+		.value("PULSARCANNON", sc2::ABILITY_ID::PULSARCANNON)
+		.value("PURIFICATIONNOVA", sc2::ABILITY_ID::PURIFICATIONNOVA)
+		.value("PURIFICATIONNOVAMORPHBACK_PURIFICATIONNOVA", sc2::ABILITY_ID::PURIFICATIONNOVAMORPHBACK_PURIFICATIONNOVA)
+		.value("PURIFICATIONNOVAMORPH_PURIFICATIONNOVA", sc2::ABILITY_ID::PURIFICATIONNOVAMORPH_PURIFICATIONNOVA)
+		.value("PURIFIERPLANETCRACKER_PLANETCRACKER", sc2::ABILITY_ID::PURIFIERPLANETCRACKER_PLANETCRACKER)
+		.value("PURIFIERTOGGLEPOWER_PURIFIERPOWERDOWN", sc2::ABILITY_ID::PURIFIERTOGGLEPOWER_PURIFIERPOWERDOWN)
+		.value("PURIFIERTOGGLEPOWER_PURIFIERPOWERUP", sc2::ABILITY_ID::PURIFIERTOGGLEPOWER_PURIFIERPOWERUP)
+		.value("PURIFYMORPHPYLONBACK_MOTHERSHIPCOREWEAPON", sc2::ABILITY_ID::PURIFYMORPHPYLONBACK_MOTHERSHIPCOREWEAPON)
+		.value("PURIFYMORPHPYLON_MOTHERSHIPCOREWEAPON", sc2::ABILITY_ID::PURIFYMORPHPYLON_MOTHERSHIPCOREWEAPON)
+		.value("QUE5LONGBLEND_CANCEL", sc2::ABILITY_ID::QUE5LONGBLEND_CANCEL)
+		.value("QUE5LONGBLEND_CANCELSLOT", sc2::ABILITY_ID::QUE5LONGBLEND_CANCELSLOT)
+		.value("QUE8_CANCEL", sc2::ABILITY_ID::QUE8_CANCEL)
+		.value("QUE8_CANCELSLOT", sc2::ABILITY_ID::QUE8_CANCELSLOT)
+		.value("QUEENBUILD_CANCEL", sc2::ABILITY_ID::QUEENBUILD_CANCEL)
+		.value("QUEENFLY", sc2::ABILITY_ID::QUEENFLY)
+		.value("QUEENLAND", sc2::ABILITY_ID::QUEENLAND)
+		.value("QUEENMPENSNARE", sc2::ABILITY_ID::QUEENMPENSNARE)
+		.value("QUEENMPINFESTCOMMANDCENTER", sc2::ABILITY_ID::QUEENMPINFESTCOMMANDCENTER)
+		.value("QUEENMPSPAWNBROODLINGS", sc2::ABILITY_ID::QUEENMPSPAWNBROODLINGS)
+		.value("QUEENSHOCKWAVE", sc2::ABILITY_ID::QUEENSHOCKWAVE)
+		.value("RALLY_BUILDING", sc2::ABILITY_ID::RALLY_BUILDING)
+		.value("RALLY_COMMANDCENTER", sc2::ABILITY_ID::RALLY_COMMANDCENTER)
+		.value("RALLY_HATCHERY_UNITS", sc2::ABILITY_ID::RALLY_HATCHERY_UNITS)
+		.value("RALLY_HATCHERY_WORKERS", sc2::ABILITY_ID::RALLY_HATCHERY_WORKERS)
+		.value("RALLY_MORPHING_UNIT", sc2::ABILITY_ID::RALLY_MORPHING_UNIT)
+		.value("RALLY_NEXUS", sc2::ABILITY_ID::RALLY_NEXUS)
+		.value("RALLY_UNITS", sc2::ABILITY_ID::RALLY_UNITS)
+		.value("RALLY_WORKERS", sc2::ABILITY_ID::RALLY_WORKERS)
+		.value("RAVENBUILD_CANCEL", sc2::ABILITY_ID::RAVENBUILD_CANCEL)
+		.value("RAYNORC4_PLANTC4CHARGE", sc2::ABILITY_ID::RAYNORC4_PLANTC4CHARGE)
+		.value("RAYNORSNIPE", sc2::ABILITY_ID::RAYNORSNIPE)
+		.value("REDSTONELAVACRITTERBURROW_BURROWDOWN", sc2::ABILITY_ID::REDSTONELAVACRITTERBURROW_BURROWDOWN)
+		.value("REDSTONELAVACRITTERINJUREDBURROW_BURROWDOWN", sc2::ABILITY_ID::REDSTONELAVACRITTERINJUREDBURROW_BURROWDOWN)
+		.value("REDSTONELAVACRITTERINJUREDUNBURROW_BURROWUP", sc2::ABILITY_ID::REDSTONELAVACRITTERINJUREDUNBURROW_BURROWUP)
+		.value("REDSTONELAVACRITTERUNBURROW_BURROWUP", sc2::ABILITY_ID::REDSTONELAVACRITTERUNBURROW_BURROWUP)
+		.value("REFINERYTOAUTOMATEDREFINERY_RAISE", sc2::ABILITY_ID::REFINERYTOAUTOMATEDREFINERY_RAISE)
+		.value("RELEASEINTERCEPTORS", sc2::ABILITY_ID::RELEASEINTERCEPTORS)
+		.value("RELEASEMINION", sc2::ABILITY_ID::RELEASEMINION)
+		.value("RESEARCHLABTRANSPORT_HUTLOAD", sc2::ABILITY_ID::RESEARCHLABTRANSPORT_HUTLOAD)
+		.value("RESEARCHLABTRANSPORT_HUTUNLOADALL", sc2::ABILITY_ID::RESEARCHLABTRANSPORT_HUTUNLOADALL)
+		.value("RESEARCH_ADAPTIVETALONS", sc2::ABILITY_ID::RESEARCH_ADAPTIVETALONS)
+		.value("RESEARCH_ADEPTRESONATINGGLAIVES", sc2::ABILITY_ID::RESEARCH_ADEPTRESONATINGGLAIVES)
+		.value("RESEARCH_ADVANCEDBALLISTICS", sc2::ABILITY_ID::RESEARCH_ADVANCEDBALLISTICS)
+		.value("RESEARCH_AMPLIFIEDSHIELDING", sc2::ABILITY_ID::RESEARCH_AMPLIFIEDSHIELDING)
+		.value("RESEARCH_ANABOLICSYNTHESIS", sc2::ABILITY_ID::RESEARCH_ANABOLICSYNTHESIS)
+		.value("RESEARCH_ARMORPIERCINGROCKETS", sc2::ABILITY_ID::RESEARCH_ARMORPIERCINGROCKETS)
+		.value("RESEARCH_BALLISTICRANGE", sc2::ABILITY_ID::RESEARCH_BALLISTICRANGE)
+		.value("RESEARCH_BANSHEECLOAKINGFIELD", sc2::ABILITY_ID::RESEARCH_BANSHEECLOAKINGFIELD)
+		.value("RESEARCH_BANSHEEHYPERFLIGHTROTORS", sc2::ABILITY_ID::RESEARCH_BANSHEEHYPERFLIGHTROTORS)
+		.value("RESEARCH_BATTLECRUISERWEAPONREFIT", sc2::ABILITY_ID::RESEARCH_BATTLECRUISERWEAPONREFIT)
+		.value("RESEARCH_BLINK", sc2::ABILITY_ID::RESEARCH_BLINK)
+		.value("RESEARCH_BURROW", sc2::ABILITY_ID::RESEARCH_BURROW)
+		.value("RESEARCH_CENTRIFUGALHOOKS", sc2::ABILITY_ID::RESEARCH_CENTRIFUGALHOOKS)
+		.value("RESEARCH_CHARGE", sc2::ABILITY_ID::RESEARCH_CHARGE)
+		.value("RESEARCH_CHITINOUSPLATING", sc2::ABILITY_ID::RESEARCH_CHITINOUSPLATING)
+		.value("RESEARCH_COMBATSHIELD", sc2::ABILITY_ID::RESEARCH_COMBATSHIELD)
+		.value("RESEARCH_CONCUSSIVESHELLS", sc2::ABILITY_ID::RESEARCH_CONCUSSIVESHELLS)
+		.value("RESEARCH_CYCLONELOCKONDAMAGE", sc2::ABILITY_ID::RESEARCH_CYCLONELOCKONDAMAGE)
+		.value("RESEARCH_CYCLONERAPIDFIRELAUNCHERS", sc2::ABILITY_ID::RESEARCH_CYCLONERAPIDFIRELAUNCHERS)
+		.value("RESEARCH_DRILLINGCLAWS", sc2::ABILITY_ID::RESEARCH_DRILLINGCLAWS)
+		.value("RESEARCH_DURABLEMATERIALS", sc2::ABILITY_ID::RESEARCH_DURABLEMATERIALS)
+		.value("RESEARCH_ENHANCEDMUNITIONS", sc2::ABILITY_ID::RESEARCH_ENHANCEDMUNITIONS)
+		.value("RESEARCH_ENHANCEDSHOCKWAVES", sc2::ABILITY_ID::RESEARCH_ENHANCEDSHOCKWAVES)
+		.value("RESEARCH_EVOLVEAMORPHOUSARMORCLOUD", sc2::ABILITY_ID::RESEARCH_EVOLVEAMORPHOUSARMORCLOUD)
+		.value("RESEARCH_EVOLVEVENTRALSACKS", sc2::ABILITY_ID::RESEARCH_EVOLVEVENTRALSACKS)
+		.value("RESEARCH_EXTENDEDTHERMALLANCE", sc2::ABILITY_ID::RESEARCH_EXTENDEDTHERMALLANCE)
+		.value("RESEARCH_GHOSTENERGYUPGRADE", sc2::ABILITY_ID::RESEARCH_GHOSTENERGYUPGRADE)
+		.value("RESEARCH_GLIALREGENERATION", sc2::ABILITY_ID::RESEARCH_GLIALREGENERATION)
+		.value("RESEARCH_GRAVITICBOOSTER", sc2::ABILITY_ID::RESEARCH_GRAVITICBOOSTER)
+		.value("RESEARCH_GRAVITICDRIVE", sc2::ABILITY_ID::RESEARCH_GRAVITICDRIVE)
+		.value("RESEARCH_GROOVEDSPINES", sc2::ABILITY_ID::RESEARCH_GROOVEDSPINES)
+		.value("RESEARCH_HALLUCINATION", sc2::ABILITY_ID::RESEARCH_HALLUCINATION)
+		.value("RESEARCH_HIGHCAPACITYFUELTANKS", sc2::ABILITY_ID::RESEARCH_HIGHCAPACITYFUELTANKS)
+		.value("RESEARCH_HISECAUTOTRACKING", sc2::ABILITY_ID::RESEARCH_HISECAUTOTRACKING)
+		.value("RESEARCH_IMMORTALREVIVE", sc2::ABILITY_ID::RESEARCH_IMMORTALREVIVE)
+		.value("RESEARCH_INFERNALPREIGNITER", sc2::ABILITY_ID::RESEARCH_INFERNALPREIGNITER)
+		.value("RESEARCH_INTERCEPTORGRAVITONCATAPULT", sc2::ABILITY_ID::RESEARCH_INTERCEPTORGRAVITONCATAPULT)
+		.value("RESEARCH_INTERCEPTORLAUNCHSPEEDUPGRADE", sc2::ABILITY_ID::RESEARCH_INTERCEPTORLAUNCHSPEEDUPGRADE)
+		.value("RESEARCH_LIBERATORAGMODE", sc2::ABILITY_ID::RESEARCH_LIBERATORAGMODE)
+		.value("RESEARCH_LOCKONRANGEUPGRADE", sc2::ABILITY_ID::RESEARCH_LOCKONRANGEUPGRADE)
+		.value("RESEARCH_LOCUSTLIFETIMEINCREASE", sc2::ABILITY_ID::RESEARCH_LOCUSTLIFETIMEINCREASE)
+		.value("RESEARCH_LURKERRANGE", sc2::ABILITY_ID::RESEARCH_LURKERRANGE)
+		.value("RESEARCH_MEDIVACENERGYUPGRADE", sc2::ABILITY_ID::RESEARCH_MEDIVACENERGYUPGRADE)
+		.value("RESEARCH_MUSCULARAUGMENTS", sc2::ABILITY_ID::RESEARCH_MUSCULARAUGMENTS)
+		.value("RESEARCH_NEOSTEELFRAME", sc2::ABILITY_ID::RESEARCH_NEOSTEELFRAME)
+		.value("RESEARCH_NEURALPARASITE", sc2::ABILITY_ID::RESEARCH_NEURALPARASITE)
+		.value("RESEARCH_PATHOGENGLANDS", sc2::ABILITY_ID::RESEARCH_PATHOGENGLANDS)
+		.value("RESEARCH_PERSONALCLOAKING", sc2::ABILITY_ID::RESEARCH_PERSONALCLOAKING)
+		.value("RESEARCH_PHOENIXANIONPULSECRYSTALS", sc2::ABILITY_ID::RESEARCH_PHOENIXANIONPULSECRYSTALS)
+		.value("RESEARCH_PNEUMATIZEDCARAPACE", sc2::ABILITY_ID::RESEARCH_PNEUMATIZEDCARAPACE)
+		.value("RESEARCH_PROTOSSAIRARMOR", sc2::ABILITY_ID::RESEARCH_PROTOSSAIRARMOR)
+		.value("RESEARCH_PROTOSSAIRARMORLEVEL1", sc2::ABILITY_ID::RESEARCH_PROTOSSAIRARMORLEVEL1)
+		.value("RESEARCH_PROTOSSAIRARMORLEVEL2", sc2::ABILITY_ID::RESEARCH_PROTOSSAIRARMORLEVEL2)
+		.value("RESEARCH_PROTOSSAIRARMORLEVEL3", sc2::ABILITY_ID::RESEARCH_PROTOSSAIRARMORLEVEL3)
+		.value("RESEARCH_PROTOSSAIRWEAPONS", sc2::ABILITY_ID::RESEARCH_PROTOSSAIRWEAPONS)
+		.value("RESEARCH_PROTOSSAIRWEAPONSLEVEL1", sc2::ABILITY_ID::RESEARCH_PROTOSSAIRWEAPONSLEVEL1)
+		.value("RESEARCH_PROTOSSAIRWEAPONSLEVEL2", sc2::ABILITY_ID::RESEARCH_PROTOSSAIRWEAPONSLEVEL2)
+		.value("RESEARCH_PROTOSSAIRWEAPONSLEVEL3", sc2::ABILITY_ID::RESEARCH_PROTOSSAIRWEAPONSLEVEL3)
+		.value("RESEARCH_PROTOSSGROUNDARMOR", sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDARMOR)
+		.value("RESEARCH_PROTOSSGROUNDARMORLEVEL1", sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDARMORLEVEL1)
+		.value("RESEARCH_PROTOSSGROUNDARMORLEVEL2", sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDARMORLEVEL2)
+		.value("RESEARCH_PROTOSSGROUNDARMORLEVEL3", sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDARMORLEVEL3)
+		.value("RESEARCH_PROTOSSGROUNDWEAPONS", sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDWEAPONS)
+		.value("RESEARCH_PROTOSSGROUNDWEAPONSLEVEL1", sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDWEAPONSLEVEL1)
+		.value("RESEARCH_PROTOSSGROUNDWEAPONSLEVEL2", sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDWEAPONSLEVEL2)
+		.value("RESEARCH_PROTOSSGROUNDWEAPONSLEVEL3", sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDWEAPONSLEVEL3)
+		.value("RESEARCH_PROTOSSSHIELDS", sc2::ABILITY_ID::RESEARCH_PROTOSSSHIELDS)
+		.value("RESEARCH_PROTOSSSHIELDSLEVEL1", sc2::ABILITY_ID::RESEARCH_PROTOSSSHIELDSLEVEL1)
+		.value("RESEARCH_PROTOSSSHIELDSLEVEL2", sc2::ABILITY_ID::RESEARCH_PROTOSSSHIELDSLEVEL2)
+		.value("RESEARCH_PROTOSSSHIELDSLEVEL3", sc2::ABILITY_ID::RESEARCH_PROTOSSSHIELDSLEVEL3)
+		.value("RESEARCH_PSIONICAMPLIFIERS", sc2::ABILITY_ID::RESEARCH_PSIONICAMPLIFIERS)
+		.value("RESEARCH_PSIONICSURGE", sc2::ABILITY_ID::RESEARCH_PSIONICSURGE)
+		.value("RESEARCH_PSISTORM", sc2::ABILITY_ID::RESEARCH_PSISTORM)
+		.value("RESEARCH_RAPIDDEPLOYMENT", sc2::ABILITY_ID::RESEARCH_RAPIDDEPLOYMENT)
+		.value("RESEARCH_RAPIDREIGNITIONSYSTEM", sc2::ABILITY_ID::RESEARCH_RAPIDREIGNITIONSYSTEM)
+		.value("RESEARCH_RAVENCORVIDREACTOR", sc2::ABILITY_ID::RESEARCH_RAVENCORVIDREACTOR)
+		.value("RESEARCH_RAVENRECALIBRATEDEXPLOSIVES", sc2::ABILITY_ID::RESEARCH_RAVENRECALIBRATEDEXPLOSIVES)
+		.value("RESEARCH_REAPERSPEED", sc2::ABILITY_ID::RESEARCH_REAPERSPEED)
+		.value("RESEARCH_ROACHSUPPLY", sc2::ABILITY_ID::RESEARCH_ROACHSUPPLY)
+		.value("RESEARCH_SEEKERMISSILE", sc2::ABILITY_ID::RESEARCH_SEEKERMISSILE)
+		.value("RESEARCH_SHADOWSTRIKE", sc2::ABILITY_ID::RESEARCH_SHADOWSTRIKE)
+		.value("RESEARCH_SMARTSERVOS", sc2::ABILITY_ID::RESEARCH_SMARTSERVOS)
+		.value("RESEARCH_STIMPACK", sc2::ABILITY_ID::RESEARCH_STIMPACK)
+		.value("RESEARCH_TEMPESTRANGEUPGRADE", sc2::ABILITY_ID::RESEARCH_TEMPESTRANGEUPGRADE)
+		.value("RESEARCH_TERRANINFANTRYARMOR", sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYARMOR)
+		.value("RESEARCH_TERRANINFANTRYARMORLEVEL1", sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYARMORLEVEL1)
+		.value("RESEARCH_TERRANINFANTRYARMORLEVEL2", sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYARMORLEVEL2)
+		.value("RESEARCH_TERRANINFANTRYARMORLEVEL3", sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYARMORLEVEL3)
+		.value("RESEARCH_TERRANINFANTRYWEAPONS", sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYWEAPONS)
+		.value("RESEARCH_TERRANINFANTRYWEAPONSLEVEL1", sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYWEAPONSLEVEL1)
+		.value("RESEARCH_TERRANINFANTRYWEAPONSLEVEL2", sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYWEAPONSLEVEL2)
+		.value("RESEARCH_TERRANINFANTRYWEAPONSLEVEL3", sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYWEAPONSLEVEL3)
+		.value("RESEARCH_TERRANSHIPPLATINGLEVEL1", sc2::ABILITY_ID::RESEARCH_TERRANSHIPPLATINGLEVEL1)
+		.value("RESEARCH_TERRANSHIPPLATINGLEVEL2", sc2::ABILITY_ID::RESEARCH_TERRANSHIPPLATINGLEVEL2)
+		.value("RESEARCH_TERRANSHIPPLATINGLEVEL3", sc2::ABILITY_ID::RESEARCH_TERRANSHIPPLATINGLEVEL3)
+		.value("RESEARCH_TERRANSHIPWEAPONS", sc2::ABILITY_ID::RESEARCH_TERRANSHIPWEAPONS)
+		.value("RESEARCH_TERRANSHIPWEAPONSLEVEL1", sc2::ABILITY_ID::RESEARCH_TERRANSHIPWEAPONSLEVEL1)
+		.value("RESEARCH_TERRANSHIPWEAPONSLEVEL2", sc2::ABILITY_ID::RESEARCH_TERRANSHIPWEAPONSLEVEL2)
+		.value("RESEARCH_TERRANSHIPWEAPONSLEVEL3", sc2::ABILITY_ID::RESEARCH_TERRANSHIPWEAPONSLEVEL3)
+		.value("RESEARCH_TERRANSTRUCTUREARMORUPGRADE", sc2::ABILITY_ID::RESEARCH_TERRANSTRUCTUREARMORUPGRADE)
+		.value("RESEARCH_TERRANVEHICLEANDSHIPPLATING", sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEANDSHIPPLATING)
+		.value("RESEARCH_TERRANVEHICLEANDSHIPPLATINGLEVEL1", sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEANDSHIPPLATINGLEVEL1)
+		.value("RESEARCH_TERRANVEHICLEANDSHIPPLATINGLEVEL2", sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEANDSHIPPLATINGLEVEL2)
+		.value("RESEARCH_TERRANVEHICLEANDSHIPPLATINGLEVEL3", sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEANDSHIPPLATINGLEVEL3)
+		.value("RESEARCH_TERRANVEHICLEPLATINGLEVEL1", sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEPLATINGLEVEL1)
+		.value("RESEARCH_TERRANVEHICLEPLATINGLEVEL2", sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEPLATINGLEVEL2)
+		.value("RESEARCH_TERRANVEHICLEPLATINGLEVEL3", sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEPLATINGLEVEL3)
+		.value("RESEARCH_TERRANVEHICLEWEAPONS", sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEWEAPONS)
+		.value("RESEARCH_TERRANVEHICLEWEAPONSLEVEL1", sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEWEAPONSLEVEL1)
+		.value("RESEARCH_TERRANVEHICLEWEAPONSLEVEL2", sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEWEAPONSLEVEL2)
+		.value("RESEARCH_TERRANVEHICLEWEAPONSLEVEL3", sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEWEAPONSLEVEL3)
+		.value("RESEARCH_TRANSFORMATIONSERVOS", sc2::ABILITY_ID::RESEARCH_TRANSFORMATIONSERVOS)
+		.value("RESEARCH_TUNNELINGCLAWS", sc2::ABILITY_ID::RESEARCH_TUNNELINGCLAWS)
+		.value("RESEARCH_VOIDRAYSPEEDUPGRADE", sc2::ABILITY_ID::RESEARCH_VOIDRAYSPEEDUPGRADE)
+		.value("RESEARCH_WARPGATE", sc2::ABILITY_ID::RESEARCH_WARPGATE)
+		.value("RESEARCH_ZERGFLYERARMOR", sc2::ABILITY_ID::RESEARCH_ZERGFLYERARMOR)
+		.value("RESEARCH_ZERGFLYERARMORLEVEL1", sc2::ABILITY_ID::RESEARCH_ZERGFLYERARMORLEVEL1)
+		.value("RESEARCH_ZERGFLYERARMORLEVEL2", sc2::ABILITY_ID::RESEARCH_ZERGFLYERARMORLEVEL2)
+		.value("RESEARCH_ZERGFLYERARMORLEVEL3", sc2::ABILITY_ID::RESEARCH_ZERGFLYERARMORLEVEL3)
+		.value("RESEARCH_ZERGFLYERATTACK", sc2::ABILITY_ID::RESEARCH_ZERGFLYERATTACK)
+		.value("RESEARCH_ZERGFLYERATTACKLEVEL1", sc2::ABILITY_ID::RESEARCH_ZERGFLYERATTACKLEVEL1)
+		.value("RESEARCH_ZERGFLYERATTACKLEVEL2", sc2::ABILITY_ID::RESEARCH_ZERGFLYERATTACKLEVEL2)
+		.value("RESEARCH_ZERGFLYERATTACKLEVEL3", sc2::ABILITY_ID::RESEARCH_ZERGFLYERATTACKLEVEL3)
+		.value("RESEARCH_ZERGGROUNDARMOR", sc2::ABILITY_ID::RESEARCH_ZERGGROUNDARMOR)
+		.value("RESEARCH_ZERGGROUNDARMORLEVEL1", sc2::ABILITY_ID::RESEARCH_ZERGGROUNDARMORLEVEL1)
+		.value("RESEARCH_ZERGGROUNDARMORLEVEL2", sc2::ABILITY_ID::RESEARCH_ZERGGROUNDARMORLEVEL2)
+		.value("RESEARCH_ZERGGROUNDARMORLEVEL3", sc2::ABILITY_ID::RESEARCH_ZERGGROUNDARMORLEVEL3)
+		.value("RESEARCH_ZERGLINGADRENALGLANDS", sc2::ABILITY_ID::RESEARCH_ZERGLINGADRENALGLANDS)
+		.value("RESEARCH_ZERGLINGMETABOLICBOOST", sc2::ABILITY_ID::RESEARCH_ZERGLINGMETABOLICBOOST)
+		.value("RESEARCH_ZERGMELEEWEAPONS", sc2::ABILITY_ID::RESEARCH_ZERGMELEEWEAPONS)
+		.value("RESEARCH_ZERGMELEEWEAPONSLEVEL1", sc2::ABILITY_ID::RESEARCH_ZERGMELEEWEAPONSLEVEL1)
+		.value("RESEARCH_ZERGMELEEWEAPONSLEVEL2", sc2::ABILITY_ID::RESEARCH_ZERGMELEEWEAPONSLEVEL2)
+		.value("RESEARCH_ZERGMELEEWEAPONSLEVEL3", sc2::ABILITY_ID::RESEARCH_ZERGMELEEWEAPONSLEVEL3)
+		.value("RESEARCH_ZERGMISSILEWEAPONS", sc2::ABILITY_ID::RESEARCH_ZERGMISSILEWEAPONS)
+		.value("RESEARCH_ZERGMISSILEWEAPONSLEVEL1", sc2::ABILITY_ID::RESEARCH_ZERGMISSILEWEAPONSLEVEL1)
+		.value("RESEARCH_ZERGMISSILEWEAPONSLEVEL2", sc2::ABILITY_ID::RESEARCH_ZERGMISSILEWEAPONSLEVEL2)
+		.value("RESEARCH_ZERGMISSILEWEAPONSLEVEL3", sc2::ABILITY_ID::RESEARCH_ZERGMISSILEWEAPONSLEVEL3)
+		.value("RESTORESHIELDS", sc2::ABILITY_ID::RESTORESHIELDS)
+		.value("ROGUEGHOSTCLOAK_CLOAKOFF", sc2::ABILITY_ID::ROGUEGHOSTCLOAK_CLOAKOFF)
+		.value("ROGUEGHOSTCLOAK_CLOAKONSPECTRE", sc2::ABILITY_ID::ROGUEGHOSTCLOAK_CLOAKONSPECTRE)
+		.value("SALVAGEBANELINGREFUND_SALVAGE", sc2::ABILITY_ID::SALVAGEBANELINGREFUND_SALVAGE)
+		.value("SALVAGEBANELING_SALVAGE", sc2::ABILITY_ID::SALVAGEBANELING_SALVAGE)
+		.value("SALVAGEBUNKERREFUND_SALVAGE", sc2::ABILITY_ID::SALVAGEBUNKERREFUND_SALVAGE)
+		.value("SALVAGEBUNKER_SALVAGE", sc2::ABILITY_ID::SALVAGEBUNKER_SALVAGE)
+		.value("SALVAGEDRONEREFUND_SALVAGE", sc2::ABILITY_ID::SALVAGEDRONEREFUND_SALVAGE)
+		.value("SALVAGEDRONE_SALVAGE", sc2::ABILITY_ID::SALVAGEDRONE_SALVAGE)
+		.value("SALVAGEHYDRALISKREFUND_SALVAGE", sc2::ABILITY_ID::SALVAGEHYDRALISKREFUND_SALVAGE)
+		.value("SALVAGEHYDRALISK_SALVAGE", sc2::ABILITY_ID::SALVAGEHYDRALISK_SALVAGE)
+		.value("SALVAGEINFESTORREFUND_SALVAGE", sc2::ABILITY_ID::SALVAGEINFESTORREFUND_SALVAGE)
+		.value("SALVAGEINFESTOR_SALVAGE", sc2::ABILITY_ID::SALVAGEINFESTOR_SALVAGE)
+		.value("SALVAGEQUEENREFUND_SALVAGE", sc2::ABILITY_ID::SALVAGEQUEENREFUND_SALVAGE)
+		.value("SALVAGEQUEEN_SALVAGE", sc2::ABILITY_ID::SALVAGEQUEEN_SALVAGE)
+		.value("SALVAGEROACHREFUND_SALVAGE", sc2::ABILITY_ID::SALVAGEROACHREFUND_SALVAGE)
+		.value("SALVAGEROACH_SALVAGE", sc2::ABILITY_ID::SALVAGEROACH_SALVAGE)
+		.value("SALVAGESWARMHOSTREFUND_SALVAGE", sc2::ABILITY_ID::SALVAGESWARMHOSTREFUND_SALVAGE)
+		.value("SALVAGESWARMHOST_SALVAGE", sc2::ABILITY_ID::SALVAGESWARMHOST_SALVAGE)
+		.value("SALVAGEULTRALISKREFUND_SALVAGE", sc2::ABILITY_ID::SALVAGEULTRALISKREFUND_SALVAGE)
+		.value("SALVAGEULTRALISK_SALVAGE", sc2::ABILITY_ID::SALVAGEULTRALISK_SALVAGE)
+		.value("SALVAGEZERGLINGREFUND_SALVAGE", sc2::ABILITY_ID::SALVAGEZERGLINGREFUND_SALVAGE)
+		.value("SALVAGEZERGLING_SALVAGE", sc2::ABILITY_ID::SALVAGEZERGLING_SALVAGE)
+		.value("SAPSTRUCTURE", sc2::ABILITY_ID::SAPSTRUCTURE)
+		.value("SCRYER", sc2::ABILITY_ID::SCRYER)
+		.value("SECURITYGATEDIAGONALBLURLOWERED_GATEOPEN", sc2::ABILITY_ID::SECURITYGATEDIAGONALBLURLOWERED_GATEOPEN)
+		.value("SECURITYGATEDIAGONALBLUR_GATECLOSE", sc2::ABILITY_ID::SECURITYGATEDIAGONALBLUR_GATECLOSE)
+		.value("SECURITYGATEDIAGONALULBRLOWERED_GATEOPEN", sc2::ABILITY_ID::SECURITYGATEDIAGONALULBRLOWERED_GATEOPEN)
+		.value("SECURITYGATEDIAGONALULBR_GATECLOSE", sc2::ABILITY_ID::SECURITYGATEDIAGONALULBR_GATECLOSE)
+		.value("SECURITYGATESTRAIGHTHORIZONTALBFLOWERED_GATEOPEN", sc2::ABILITY_ID::SECURITYGATESTRAIGHTHORIZONTALBFLOWERED_GATEOPEN)
+		.value("SECURITYGATESTRAIGHTHORIZONTALBF_GATECLOSE", sc2::ABILITY_ID::SECURITYGATESTRAIGHTHORIZONTALBF_GATECLOSE)
+		.value("SECURITYGATESTRAIGHTHORIZONTALLOWERED_GATEOPEN", sc2::ABILITY_ID::SECURITYGATESTRAIGHTHORIZONTALLOWERED_GATEOPEN)
+		.value("SECURITYGATESTRAIGHTHORIZONTAL_GATECLOSE", sc2::ABILITY_ID::SECURITYGATESTRAIGHTHORIZONTAL_GATECLOSE)
+		.value("SECURITYGATESTRAIGHTVERTICALLFLOWERED_GATEOPEN", sc2::ABILITY_ID::SECURITYGATESTRAIGHTVERTICALLFLOWERED_GATEOPEN)
+		.value("SECURITYGATESTRAIGHTVERTICALLF_GATECLOSE", sc2::ABILITY_ID::SECURITYGATESTRAIGHTVERTICALLF_GATECLOSE)
+		.value("SECURITYGATESTRAIGHTVERTICALLOWERED_GATEOPEN", sc2::ABILITY_ID::SECURITYGATESTRAIGHTVERTICALLOWERED_GATEOPEN)
+		.value("SECURITYGATESTRAIGHTVERTICAL_GATECLOSE", sc2::ABILITY_ID::SECURITYGATESTRAIGHTVERTICAL_GATECLOSE)
+		.value("SELENDISHANGAR_INTERCEPTOR", sc2::ABILITY_ID::SELENDISHANGAR_INTERCEPTOR)
+		.value("SELFREPAIR", sc2::ABILITY_ID::SELFREPAIR)
+		.value("SELFREPAIR_CANCEL", sc2::ABILITY_ID::SELFREPAIR_CANCEL)
+		.value("SENTRYGUNBURROW_BURROWTURRET", sc2::ABILITY_ID::SENTRYGUNBURROW_BURROWTURRET)
+		.value("SENTRYGUNUNBURROW_UNBURROWTURRET", sc2::ABILITY_ID::SENTRYGUNUNBURROW_UNBURROWTURRET)
+		.value("SHAKURASLIGHTBRIDGENE10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::SHAKURASLIGHTBRIDGENE10OUT_BRIDGEEXTEND)
+		.value("SHAKURASLIGHTBRIDGENE10_BRIDGERETRACT", sc2::ABILITY_ID::PORTCITY_BRIDGE_UNITNW12OUT_BRIDGEEXTEND)
+		.value("PORTCITY_BRIDGE_UNITNW12_BRIDGERETRACT", sc2::ABILITY_ID::SHAKURASLIGHTBRIDGENE10_BRIDGERETRACT)
+		.value("SHAKURASLIGHTBRIDGENE12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::SHAKURASLIGHTBRIDGENE12OUT_BRIDGEEXTEND)
+		.value("SHAKURASLIGHTBRIDGENE12_BRIDGERETRACT", sc2::ABILITY_ID::SHAKURASLIGHTBRIDGENE12_BRIDGERETRACT)
+		.value("SHAKURASLIGHTBRIDGENE8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::SHAKURASLIGHTBRIDGENE8OUT_BRIDGEEXTEND)
+		.value("SHAKURASLIGHTBRIDGENE8_BRIDGERETRACT", sc2::ABILITY_ID::SHAKURASLIGHTBRIDGENE8_BRIDGERETRACT)
+		.value("SHAKURASLIGHTBRIDGENW10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::SHAKURASLIGHTBRIDGENW10OUT_BRIDGEEXTEND)
+		.value("SHAKURASLIGHTBRIDGENW10_BRIDGERETRACT", sc2::ABILITY_ID::SHAKURASLIGHTBRIDGENW10_BRIDGERETRACT)
+		.value("SHAKURASLIGHTBRIDGENW12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::SHAKURASLIGHTBRIDGENW12OUT_BRIDGEEXTEND)
+		.value("SHAKURASLIGHTBRIDGENW12_BRIDGERETRACT", sc2::ABILITY_ID::SHAKURASLIGHTBRIDGENW12_BRIDGERETRACT)
+		.value("SHAKURASLIGHTBRIDGENW8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::SHAKURASLIGHTBRIDGENW8OUT_BRIDGEEXTEND)
+		.value("SHAKURASLIGHTBRIDGENW8_BRIDGERETRACT", sc2::ABILITY_ID::SHAKURASLIGHTBRIDGENW8_BRIDGERETRACT)
+		.value("SINGLERECALL", sc2::ABILITY_ID::SINGLERECALL)
+		.value("SIPHON", sc2::ABILITY_ID::SIPHON)
+		.value("SIPHON_CANCEL", sc2::ABILITY_ID::SIPHON_CANCEL)
+		.value("SLAYNELEMENTALGRAB", sc2::ABILITY_ID::SLAYNELEMENTALGRAB)
+		.value("SMART", sc2::ABILITY_ID::SMART)
+		.value("SNIPE", sc2::ABILITY_ID::SNIPE)
+		.value("SNIPEDOT", sc2::ABILITY_ID::SNIPEDOT)
+		.value("SNOWREFINERY_TERRAN_EXTENDINGBRIDGENESHORT10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::SNOWREFINERY_TERRAN_EXTENDINGBRIDGENESHORT10OUT_BRIDGEEXTEND)
+		.value("SNOWREFINERY_TERRAN_EXTENDINGBRIDGENESHORT10_BRIDGERETRACT", sc2::ABILITY_ID::SNOWREFINERY_TERRAN_EXTENDINGBRIDGENESHORT10_BRIDGERETRACT)
+		.value("SNOWREFINERY_TERRAN_EXTENDINGBRIDGENESHORT8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::SNOWREFINERY_TERRAN_EXTENDINGBRIDGENESHORT8OUT_BRIDGEEXTEND)
+		.value("SNOWREFINERY_TERRAN_EXTENDINGBRIDGENESHORT8_BRIDGERETRACT", sc2::ABILITY_ID::SNOWREFINERY_TERRAN_EXTENDINGBRIDGENESHORT8_BRIDGERETRACT)
+		.value("SNOWREFINERY_TERRAN_EXTENDINGBRIDGENWSHORT10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::SNOWREFINERY_TERRAN_EXTENDINGBRIDGENWSHORT10OUT_BRIDGEEXTEND)
+		.value("SNOWREFINERY_TERRAN_EXTENDINGBRIDGENWSHORT10_BRIDGERETRACT", sc2::ABILITY_ID::SNOWREFINERY_TERRAN_EXTENDINGBRIDGENWSHORT10_BRIDGERETRACT)
+		.value("SNOWREFINERY_TERRAN_EXTENDINGBRIDGENWSHORT8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::SNOWREFINERY_TERRAN_EXTENDINGBRIDGENWSHORT8OUT_BRIDGEEXTEND)
+		.value("SNOWREFINERY_TERRAN_EXTENDINGBRIDGENWSHORT8_BRIDGERETRACT", sc2::ABILITY_ID::SNOWREFINERY_TERRAN_EXTENDINGBRIDGENWSHORT8_BRIDGERETRACT)
+		.value("SOULCHANNEL_CANCEL", sc2::ABILITY_ID::SOULCHANNEL_CANCEL)
+		.value("SPAWNINFESTEDTERRAN_LOCUSTMP", sc2::ABILITY_ID::SPAWNINFESTEDTERRAN_LOCUSTMP)
+		.value("SPECOPSDROPSHIPTRANSPORT_MEDIVACLOAD", sc2::ABILITY_ID::SPECOPSDROPSHIPTRANSPORT_MEDIVACLOAD)
+		.value("SPECOPSDROPSHIPTRANSPORT_MEDIVACUNLOADALL", sc2::ABILITY_ID::SPECOPSDROPSHIPTRANSPORT_MEDIVACUNLOADALL)
+		.value("SPECTREHOLDFIRE", sc2::ABILITY_ID::SPECTREHOLDFIRE)
+		.value("SPECTRENUKESILOARMMAGAZINE_SPECTRENUKEARM", sc2::ABILITY_ID::SPECTRENUKESILOARMMAGAZINE_SPECTRENUKEARM)
+		.value("SPECTRENUKE_CANCEL", sc2::ABILITY_ID::SPECTRENUKE_CANCEL)
+		.value("SPECTRENUKE_SPECTRENUKECALLDOWN", sc2::ABILITY_ID::SPECTRENUKE_SPECTRENUKECALLDOWN)
+		.value("SPECTRESHIELD", sc2::ABILITY_ID::SPECTRESHIELD)
+		.value("SPECTREWEAPONSFREE_WEAPONSFREE", sc2::ABILITY_ID::SPECTREWEAPONSFREE_WEAPONSFREE)
+		.value("SPINECRAWLERUPROOT_CANCEL", sc2::ABILITY_ID::SPINECRAWLERUPROOT_CANCEL)
+		.value("SPORECRAWLERUPROOT_CANCEL", sc2::ABILITY_ID::SPORECRAWLERUPROOT_CANCEL)
+		.value("SS_BATTLECRUISERHUNTERSEEKERATTACK_SS_SHOOTING", sc2::ABILITY_ID::SS_BATTLECRUISERHUNTERSEEKERATTACK_SS_SHOOTING)
+		.value("SS_BATTLECRUISERMISSILEATTACK_SS_SHOOTING", sc2::ABILITY_ID::SS_BATTLECRUISERMISSILEATTACK_SS_SHOOTING)
+		.value("SS_CARRIERBOSSATTACKLAUNCH_SS_SHOOTING", sc2::ABILITY_ID::SS_CARRIERBOSSATTACKLAUNCH_SS_SHOOTING)
+		.value("SS_CARRIERBOSSATTACKTARGET_SS_SHOOTING", sc2::ABILITY_ID::SS_CARRIERBOSSATTACKTARGET_SS_SHOOTING)
+		.value("SS_CARRIERSPAWNINTERCEPTOR", sc2::ABILITY_ID::SS_CARRIERSPAWNINTERCEPTOR)
+		.value("SS_CORRUPTORATTACK_SS_SHOOTING", sc2::ABILITY_ID::SS_CORRUPTORATTACK_SS_SHOOTING)
+		.value("SS_FIGHTERBOMB", sc2::ABILITY_ID::SS_FIGHTERBOMB)
+		.value("SS_FIGHTERSHOOTING_SS_SHOOTING", sc2::ABILITY_ID::SS_FIGHTERSHOOTING_SS_SHOOTING)
+		.value("SS_INTERCEPTORATTACK_SS_SHOOTING", sc2::ABILITY_ID::SS_INTERCEPTORATTACK_SS_SHOOTING)
+		.value("SS_LEVIATHANSPAWNBOMBS", sc2::ABILITY_ID::SS_LEVIATHANSPAWNBOMBS)
+		.value("SS_LEVIATHANTENTACLEATTACKL1", sc2::ABILITY_ID::SS_LEVIATHANTENTACLEATTACKL1)
+		.value("SS_LEVIATHANTENTACLEATTACKL1NODELAY", sc2::ABILITY_ID::SS_LEVIATHANTENTACLEATTACKL1NODELAY)
+		.value("SS_LEVIATHANTENTACLEATTACKL2", sc2::ABILITY_ID::SS_LEVIATHANTENTACLEATTACKL2)
+		.value("SS_LEVIATHANTENTACLEATTACKL2NODELAY", sc2::ABILITY_ID::SS_LEVIATHANTENTACLEATTACKL2NODELAY)
+		.value("SS_LEVIATHANTENTACLEATTACKR1", sc2::ABILITY_ID::SS_LEVIATHANTENTACLEATTACKR1)
+		.value("SS_LEVIATHANTENTACLEATTACKR1NODELAY", sc2::ABILITY_ID::SS_LEVIATHANTENTACLEATTACKR1NODELAY)
+		.value("SS_LEVIATHANTENTACLEATTACKR2", sc2::ABILITY_ID::SS_LEVIATHANTENTACLEATTACKR2)
+		.value("SS_LEVIATHANTENTACLEATTACKR2NODELAY", sc2::ABILITY_ID::SS_LEVIATHANTENTACLEATTACKR2NODELAY)
+		.value("SS_PHOENIXSHOOTING_SS_SHOOTING", sc2::ABILITY_ID::SS_PHOENIXSHOOTING_SS_SHOOTING)
+		.value("SS_SCIENCEVESSELATTACK_SS_SHOOTING", sc2::ABILITY_ID::SS_SCIENCEVESSELATTACK_SS_SHOOTING)
+		.value("SS_SCIENCEVESSELTELEPORT_ZERATULBLINK", sc2::ABILITY_ID::SS_SCIENCEVESSELTELEPORT_ZERATULBLINK)
+		.value("SS_SCOUTATTACK_SS_SHOOTING", sc2::ABILITY_ID::SS_SCOUTATTACK_SS_SHOOTING)
+		.value("SS_SWARMGUARDIANATTACK_SS_SHOOTING", sc2::ABILITY_ID::SS_SWARMGUARDIANATTACK_SS_SHOOTING)
+		.value("SS_TERRATRONBEAMATTACK", sc2::ABILITY_ID::SS_TERRATRONBEAMATTACK)
+		.value("SS_TERRATRONSAWATTACK", sc2::ABILITY_ID::SS_TERRATRONSAWATTACK)
+		.value("SS_WRAITHATTACK_SS_SHOOTING", sc2::ABILITY_ID::SS_WRAITHATTACK_SS_SHOOTING)
+		.value("STARPORTREACTORMORPH_REACTOR", sc2::ABILITY_ID::STARPORTREACTORMORPH_REACTOR)
+		.value("STARPORTTECHLABMORPH_TECHLABSTARPORT", sc2::ABILITY_ID::STARPORTTECHLABMORPH_TECHLABSTARPORT)
+		.value("STARPORTTECHREACTORMORPH_TECHLABSTARPORT", sc2::ABILITY_ID::STARPORTTECHREACTORMORPH_TECHLABSTARPORT)
+		.value("STARTCOLONISTVEHICLE", sc2::ABILITY_ID::STARTCOLONISTVEHICLE)
+		.value("STOP", sc2::ABILITY_ID::STOP)
+		.value("STOPPROTOSSBUILDING_CHEER", sc2::ABILITY_ID::STOPPROTOSSBUILDING_CHEER)
+		.value("STOPPROTOSSBUILDING_DANCE", sc2::ABILITY_ID::STOPPROTOSSBUILDING_DANCE)
+		.value("STOPPROTOSSBUILDING_HOLDFIRE", sc2::ABILITY_ID::STOPPROTOSSBUILDING_HOLDFIRE)
+		.value("STOP_BATTLECRUISER", sc2::ABILITY_ID::STOP_BATTLECRUISER)
+		.value("STOP_BUILDING", sc2::ABILITY_ID::STOP_BUILDING)
+		.value("STOP_CHEER", sc2::ABILITY_ID::STOP_CHEER)
+		.value("STOP_DANCE", sc2::ABILITY_ID::STOP_DANCE)
+		.value("STOP_HOLDFIRESPECIAL", sc2::ABILITY_ID::STOP_HOLDFIRESPECIAL)
+		.value("STOP_REDIRECT", sc2::ABILITY_ID::STOP_REDIRECT)
+		.value("STOP_STOP", sc2::ABILITY_ID::STOP_STOP)
+		.value("SUMMONMERCENARIESPH_HIREKELMORIANMINERSPH", sc2::ABILITY_ID::SUMMONMERCENARIESPH_HIREKELMORIANMINERSPH)
+		.value("SUMMONMERCENARIES_HIREDEVILDOGS", sc2::ABILITY_ID::SUMMONMERCENARIES_HIREDEVILDOGS)
+		.value("SUMMONMERCENARIES_HIREDUKESREVENGE", sc2::ABILITY_ID::SUMMONMERCENARIES_HIREDUKESREVENGE)
+		.value("SUMMONMERCENARIES_HIREDUSKWING", sc2::ABILITY_ID::SUMMONMERCENARIES_HIREDUSKWING)
+		.value("SUMMONMERCENARIES_HIREHAMMERSECURITIES", sc2::ABILITY_ID::SUMMONMERCENARIES_HIREHAMMERSECURITIES)
+		.value("SUMMONMERCENARIES_HIREHELSANGELS", sc2::ABILITY_ID::SUMMONMERCENARIES_HIREHELSANGELS)
+		.value("SUMMONMERCENARIES_HIREKELMORIANMINERS", sc2::ABILITY_ID::SUMMONMERCENARIES_HIREKELMORIANMINERS)
+		.value("SUMMONMERCENARIES_HIRESIEGEBREAKERS", sc2::ABILITY_ID::SUMMONMERCENARIES_HIRESIEGEBREAKERS)
+		.value("SUMMONMERCENARIES_HIRESPARTANCOMPANY", sc2::ABILITY_ID::SUMMONMERCENARIES_HIRESPARTANCOMPANY)
+		.value("SWARMHOSTSPAWNLOCUSTS_LOCUSTMP", sc2::ABILITY_ID::SWARMHOSTSPAWNLOCUSTS_LOCUSTMP)
+		.value("TALDARIMVORTEX_VORTEX", sc2::ABILITY_ID::TALDARIMVORTEX_VORTEX)
+		.value("TAUNT", sc2::ABILITY_ID::TAUNT)
+		.value("TAURENOUTHOUSELIFTOFF_TAURENOUTHOUSEFLY", sc2::ABILITY_ID::TAURENOUTHOUSELIFTOFF_TAURENOUTHOUSEFLY)
+		.value("TAURENOUTHOUSETRANSPORT_LOADTAURENOUTHOUSE", sc2::ABILITY_ID::TAURENOUTHOUSETRANSPORT_LOADTAURENOUTHOUSE)
+		.value("TAURENOUTHOUSETRANSPORT_UNLOADTAURENOUTHOUSE", sc2::ABILITY_ID::TAURENOUTHOUSETRANSPORT_UNLOADTAURENOUTHOUSE)
+		.value("TAURENSTIMPACK_STIM", sc2::ABILITY_ID::TAURENSTIMPACK_STIM)
+		.value("TEMPLEDOORDOWN", sc2::ABILITY_ID::TEMPLEDOORDOWN)
+		.value("TEMPLEDOORDOWNURDL", sc2::ABILITY_ID::TEMPLEDOORDOWNURDL)
+		.value("TEMPLEDOORUP", sc2::ABILITY_ID::TEMPLEDOORUP)
+		.value("TEMPLEDOORUPURDL", sc2::ABILITY_ID::TEMPLEDOORUPURDL)
+		.value("TEMPORALRIFT", sc2::ABILITY_ID::TEMPORALRIFT)
+		.value("TERRANBUILDDROP_CANCEL", sc2::ABILITY_ID::TERRANBUILDDROP_CANCEL)
+		.value("TERRANBUILDDROP_SUPPLYDEPOTDROP", sc2::ABILITY_ID::TERRANBUILDDROP_SUPPLYDEPOTDROP)
+		.value("TESTHERODEBUGMISSILEABILITY", sc2::ABILITY_ID::TESTHERODEBUGMISSILEABILITY)
+		.value("TESTHERODEBUGTRACKINGABILITY", sc2::ABILITY_ID::TESTHERODEBUGTRACKINGABILITY)
+		.value("TESTHERODEBUGTRACKINGABILITY_CANCEL", sc2::ABILITY_ID::TESTHERODEBUGTRACKINGABILITY_CANCEL)
+		.value("TESTHEROGRAB_GRABZERGLING", sc2::ABILITY_ID::TESTHEROGRAB_GRABZERGLING)
+		.value("TESTHEROTHROW_THROWZERGLING", sc2::ABILITY_ID::TESTHEROTHROW_THROWZERGLING)
+		.value("TESTINTERACT_DESIGNATE", sc2::ABILITY_ID::TESTINTERACT_DESIGNATE)
+		.value("TESTLEARN", sc2::ABILITY_ID::TESTLEARN)
+		.value("TESTREVIVE_SCV", sc2::ABILITY_ID::TESTREVIVE_SCV)
+		.value("TESTZERG_CANCEL", sc2::ABILITY_ID::TESTZERG_CANCEL)
+		.value("THEMOROSDEVICE", sc2::ABILITY_ID::THEMOROSDEVICE)
+		.value("THORAPMODE_CANCEL", sc2::ABILITY_ID::THORAPMODE_CANCEL)
+		.value("THORREBORN_CANCEL", sc2::ABILITY_ID::THORREBORN_CANCEL)
+		.value("THORREBORN_THOR", sc2::ABILITY_ID::THORREBORN_THOR)
+		.value("THORWRECKAGE_THOR", sc2::ABILITY_ID::THORWRECKAGE_THOR)
+		.value("TIMESTOP", sc2::ABILITY_ID::TIMESTOP)
+		.value("TIMESTOP_CANCEL", sc2::ABILITY_ID::TIMESTOP_CANCEL)
+		.value("TORNADOMISSILE", sc2::ABILITY_ID::TORNADOMISSILE)
+		.value("TOSSGRENADE", sc2::ABILITY_ID::TOSSGRENADE)
+		.value("TRAINWARP_ADEPT", sc2::ABILITY_ID::TRAINWARP_ADEPT)
+		.value("TRAINWARP_DARKTEMPLAR", sc2::ABILITY_ID::TRAINWARP_DARKTEMPLAR)
+		.value("TRAINWARP_HIGHTEMPLAR", sc2::ABILITY_ID::TRAINWARP_HIGHTEMPLAR)
+		.value("TRAINWARP_SENTRY", sc2::ABILITY_ID::TRAINWARP_SENTRY)
+		.value("TRAINWARP_STALKER", sc2::ABILITY_ID::TRAINWARP_STALKER)
+		.value("TRAINWARP_ZEALOT", sc2::ABILITY_ID::TRAINWARP_ZEALOT)
+		.value("TRAIN_ADEPT", sc2::ABILITY_ID::TRAIN_ADEPT)
+		.value("TRAIN_ARCHON", sc2::ABILITY_ID::TRAIN_ARCHON)
+		.value("TRAIN_BANSHEE", sc2::ABILITY_ID::TRAIN_BANSHEE)
+		.value("TRAIN_BATTLECRUISER", sc2::ABILITY_ID::TRAIN_BATTLECRUISER)
+		.value("TRAIN_CARRIER", sc2::ABILITY_ID::TRAIN_CARRIER)
+		.value("TRAIN_COLOSSUS", sc2::ABILITY_ID::TRAIN_COLOSSUS)
+		.value("TRAIN_CORRUPTOR", sc2::ABILITY_ID::TRAIN_CORRUPTOR)
+		.value("TRAIN_CYCLONE", sc2::ABILITY_ID::TRAIN_CYCLONE)
+		.value("TRAIN_DARKTEMPLAR", sc2::ABILITY_ID::TRAIN_DARKTEMPLAR)
+		.value("TRAIN_DISRUPTOR", sc2::ABILITY_ID::TRAIN_DISRUPTOR)
+		.value("TRAIN_DRONE", sc2::ABILITY_ID::TRAIN_DRONE)
+		.value("TRAIN_GHOST", sc2::ABILITY_ID::TRAIN_GHOST)
+		.value("TRAIN_HELLBAT", sc2::ABILITY_ID::TRAIN_HELLBAT)
+		.value("TRAIN_HELLION", sc2::ABILITY_ID::TRAIN_HELLION)
+		.value("TRAIN_HIGHTEMPLAR", sc2::ABILITY_ID::TRAIN_HIGHTEMPLAR)
+		.value("TRAIN_HYDRALISK", sc2::ABILITY_ID::TRAIN_HYDRALISK)
+		.value("TRAIN_IMMORTAL", sc2::ABILITY_ID::TRAIN_IMMORTAL)
+		.value("TRAIN_INFESTEDABOMINATION", sc2::ABILITY_ID::TRAIN_INFESTEDABOMINATION)
+		.value("TRAIN_INFESTEDCIVILIAN", sc2::ABILITY_ID::TRAIN_INFESTEDCIVILIAN)
+		.value("TRAIN_INFESTEDTERRANCAMPAIGN", sc2::ABILITY_ID::TRAIN_INFESTEDTERRANCAMPAIGN)
+		.value("TRAIN_INFESTOR", sc2::ABILITY_ID::TRAIN_INFESTOR)
+		.value("TRAIN_LIBERATOR", sc2::ABILITY_ID::TRAIN_LIBERATOR)
+		.value("TRAIN_MARAUDER", sc2::ABILITY_ID::TRAIN_MARAUDER)
+		.value("TRAIN_MARINE", sc2::ABILITY_ID::TRAIN_MARINE)
+		.value("TRAIN_MEDIVAC", sc2::ABILITY_ID::TRAIN_MEDIVAC)
+		.value("TRAIN_MOTHERSHIP", sc2::ABILITY_ID::TRAIN_MOTHERSHIP)
+		.value("TRAIN_MOTHERSHIPCORE", sc2::ABILITY_ID::TRAIN_MOTHERSHIPCORE)
+		.value("TRAIN_MUTALISK", sc2::ABILITY_ID::TRAIN_MUTALISK)
+		.value("TRAIN_OBSERVER", sc2::ABILITY_ID::TRAIN_OBSERVER)
+		.value("TRAIN_ORACLE", sc2::ABILITY_ID::TRAIN_ORACLE)
+		.value("TRAIN_OVERLORD", sc2::ABILITY_ID::TRAIN_OVERLORD)
+		.value("TRAIN_PHOENIX", sc2::ABILITY_ID::TRAIN_PHOENIX)
+		.value("TRAIN_PROBE", sc2::ABILITY_ID::TRAIN_PROBE)
+		.value("TRAIN_QUEEN", sc2::ABILITY_ID::TRAIN_QUEEN)
+		.value("SPECTREHOLDFIRE", sc2::ABILITY_ID::SPECTREHOLDFIRE)
+		.value("TRAIN_RAVEN", sc2::ABILITY_ID::TRAIN_RAVEN)
+		.value("TRAIN_REAPER", sc2::ABILITY_ID::TRAIN_REAPER)
+		.value("TRAIN_ROACH", sc2::ABILITY_ID::TRAIN_ROACH)
+		.value("TRAIN_SCV", sc2::ABILITY_ID::TRAIN_SCV)
+		.value("TRAIN_SENTRY", sc2::ABILITY_ID::TRAIN_SENTRY)
+		.value("TRAIN_SIEGETANK", sc2::ABILITY_ID::TRAIN_SIEGETANK)
+		.value("TRAIN_STALKER", sc2::ABILITY_ID::TRAIN_STALKER)
+		.value("TRAIN_SWARMHOST", sc2::ABILITY_ID::TRAIN_SWARMHOST)
+		.value("TRAIN_TEMPEST", sc2::ABILITY_ID::TRAIN_TEMPEST)
+		.value("TRAIN_THOR", sc2::ABILITY_ID::TRAIN_THOR)
+		.value("TRAIN_ULTRALISK", sc2::ABILITY_ID::TRAIN_ULTRALISK)
+		.value("TRAIN_VIKINGFIGHTER", sc2::ABILITY_ID::TRAIN_VIKINGFIGHTER)
+		.value("TRAIN_VIPER", sc2::ABILITY_ID::TRAIN_VIPER)
+		.value("TRAIN_VOIDRAY", sc2::ABILITY_ID::TRAIN_VOIDRAY)
+		.value("TRAIN_WARPINMOHANDAR", sc2::ABILITY_ID::TRAIN_WARPINMOHANDAR)
+		.value("TRAIN_WARPINSCOUT", sc2::ABILITY_ID::TRAIN_WARPINSCOUT)
+		.value("TRAIN_WARPINSELENDIS", sc2::ABILITY_ID::TRAIN_WARPINSELENDIS)
+		.value("TRAIN_WARPINURUN", sc2::ABILITY_ID::TRAIN_WARPINURUN)
+		.value("TRAIN_WARPINZERATUL", sc2::ABILITY_ID::TRAIN_WARPINZERATUL)
+		.value("TRAIN_WARPPRISM", sc2::ABILITY_ID::TRAIN_WARPPRISM)
+		.value("TRAIN_WIDOWMINE", sc2::ABILITY_ID::TRAIN_WIDOWMINE)
+		.value("TRAIN_ZEALOT", sc2::ABILITY_ID::TRAIN_ZEALOT)
+		.value("TRAIN_ZERGLING", sc2::ABILITY_ID::TRAIN_ZERGLING)
+		.value("TRANSPORTMODE_CANCEL", sc2::ABILITY_ID::TRANSPORTMODE_CANCEL)
+		.value("TRANSPORTTRUCKTRANSPORT_TRANSPORTTRUCKLOAD", sc2::ABILITY_ID::TRANSPORTTRUCKTRANSPORT_TRANSPORTTRUCKLOAD)
+		.value("TRANSPORTTRUCKTRANSPORT_TRANSPORTTRUCKUNLOADALL", sc2::ABILITY_ID::TRANSPORTTRUCKTRANSPORT_TRANSPORTTRUCKUNLOADALL)
+		.value("TYCHUS03OMEGASTORM_OMEGASTORM", sc2::ABILITY_ID::TYCHUS03OMEGASTORM_OMEGASTORM)
+		.value("ULTRALISKWEAPONCOOLDOWN", sc2::ABILITY_ID::ULTRALISKWEAPONCOOLDOWN)
+		.value("ULTRASONICPULSE", sc2::ABILITY_ID::ULTRASONICPULSE)
+		.value("UNLOADALL", sc2::ABILITY_ID::UNLOADALL)
+		.value("UNLOADALLAT", sc2::ABILITY_ID::UNLOADALLAT)
+		.value("UNLOADALLAT_MEDIVAC", sc2::ABILITY_ID::UNLOADALLAT_MEDIVAC)
+		.value("UNLOADALLAT_OVERLORD", sc2::ABILITY_ID::UNLOADALLAT_OVERLORD)
+		.value("UNLOADALLAT_WARPPRISM", sc2::ABILITY_ID::UNLOADALLAT_WARPPRISM)
+		.value("UNLOADALL_BUNKER", sc2::ABILITY_ID::UNLOADALL_BUNKER)
+		.value("UNLOADALL_COMMANDCENTER", sc2::ABILITY_ID::UNLOADALL_COMMANDCENTER)
+		.value("UNLOADALL_NYDASNETWORK", sc2::ABILITY_ID::UNLOADALL_NYDASNETWORK)
+		.value("UNLOADALL_NYDUSWORM", sc2::ABILITY_ID::UNLOADALL_NYDUSWORM)
+		.value("UNLOADALL_WARPPRISM", sc2::ABILITY_ID::UNLOADALL_WARPPRISM)
+		.value("UNLOADUNIT", sc2::ABILITY_ID::UNLOADUNIT)
+		.value("UNLOADUNIT_BUNKER", sc2::ABILITY_ID::UNLOADUNIT_BUNKER)
+		.value("UNLOADUNIT_COMMANDCENTER", sc2::ABILITY_ID::UNLOADUNIT_COMMANDCENTER)
+		.value("UNLOADUNIT_MEDIVAC", sc2::ABILITY_ID::UNLOADUNIT_MEDIVAC)
+		.value("UNLOADUNIT_NYDASNETWORK", sc2::ABILITY_ID::UNLOADUNIT_NYDASNETWORK)
+		.value("UNLOADUNIT_OVERLORD", sc2::ABILITY_ID::UNLOADUNIT_OVERLORD)
+		.value("UNLOADUNIT_WARPPRISM", sc2::ABILITY_ID::UNLOADUNIT_WARPPRISM)
+		.value("VAL03QUEENOFBLADESBURROW_BURROWDOWN", sc2::ABILITY_ID::VAL03QUEENOFBLADESBURROW_BURROWDOWN)
+		.value("VAL03QUEENOFBLADESDEEPTUNNEL_DEEPTUNNEL", sc2::ABILITY_ID::VAL03QUEENOFBLADESDEEPTUNNEL_DEEPTUNNEL)
+		.value("VAL03QUEENOFBLADESUNBURROW_BURROWUP", sc2::ABILITY_ID::VAL03QUEENOFBLADESUNBURROW_BURROWUP)
+		.value("VOIDMPIMMORTALREVIVEDEATH_IMMORTAL", sc2::ABILITY_ID::VOIDMPIMMORTALREVIVEDEATH_IMMORTAL)
+		.value("VOIDMPIMMORTALREVIVEREBUILD_IMMORTAL", sc2::ABILITY_ID::VOIDMPIMMORTALREVIVEREBUILD_IMMORTAL)
+		.value("VOIDSEEKERPHASEMINEBLAST_PHASEMINEBLAST", sc2::ABILITY_ID::VOIDSEEKERPHASEMINEBLAST_PHASEMINEBLAST)
+		.value("VOIDSEEKERTRANSPORT_MEDIVACLOAD", sc2::ABILITY_ID::VOIDSEEKERTRANSPORT_MEDIVACLOAD)
+		.value("VOIDSEEKERTRANSPORT_MEDIVACUNLOADALL", sc2::ABILITY_ID::VOIDSEEKERTRANSPORT_MEDIVACUNLOADALL)
+		.value("VOIDSIPHON", sc2::ABILITY_ID::VOIDSIPHON)
+		.value("VOIDSWARMHOSTSPAWNLOCUST", sc2::ABILITY_ID::VOIDSWARMHOSTSPAWNLOCUST)
+		.value("VOODOOSHIELD", sc2::ABILITY_ID::VOODOOSHIELD)
+		.value("VORTEX", sc2::ABILITY_ID::VORTEX)
+		.value("VORTEXPURIFIER_VORTEX", sc2::ABILITY_ID::VORTEXPURIFIER_VORTEX)
+		.value("VULTUREQUEUE3_CANCEL", sc2::ABILITY_ID::VULTUREQUEUE3_CANCEL)
+		.value("VULTUREQUEUE3_CANCELSLOT", sc2::ABILITY_ID::VULTUREQUEUE3_CANCELSLOT)
+		.value("VULTURESPIDERMINES_SPIDERMINE", sc2::ABILITY_ID::VULTURESPIDERMINES_SPIDERMINE)
+		.value("WARPABLE_CANCEL", sc2::ABILITY_ID::WARPABLE_CANCEL)
+		.value("WIDOWMINEBURROW_CANCEL", sc2::ABILITY_ID::WIDOWMINEBURROW_CANCEL)
+		.value("WORMHOLETRANSIT", sc2::ABILITY_ID::WORMHOLETRANSIT)
+		.value("WRAITHCLOAK_CLOAKOFF", sc2::ABILITY_ID::WRAITHCLOAK_CLOAKOFF)
+		.value("WRECKINGCREWASSAULTMODE_ASSAULTMODE", sc2::ABILITY_ID::WRECKINGCREWASSAULTMODE_ASSAULTMODE)
+		.value("WRECKINGCREWFIGHTERMODE_FIGHTERMODE", sc2::ABILITY_ID::WRECKINGCREWFIGHTERMODE_FIGHTERMODE)
+		.value("XELNAGAHEALINGSHRINE", sc2::ABILITY_ID::XELNAGAHEALINGSHRINE)
+		.value("XELNAGA_CAVERNS_DOOREOPENED_XELNAGA_CAVERNS_DOORDEFAULTCLOSE", sc2::ABILITY_ID::XELNAGA_CAVERNS_DOOREOPENED_XELNAGA_CAVERNS_DOORDEFAULTCLOSE)
+		.value("XELNAGA_CAVERNS_DOORE_XELNAGA_CAVERNS_DOORDEFAULTCLOSE", sc2::ABILITY_ID::XELNAGA_CAVERNS_DOORE_XELNAGA_CAVERNS_DOORDEFAULTCLOSE)
+		.value("XELNAGA_CAVERNS_DOORNEOPENED_XELNAGA_CAVERNS_DOORDEFAULTOPEN", sc2::ABILITY_ID::XELNAGA_CAVERNS_DOORNEOPENED_XELNAGA_CAVERNS_DOORDEFAULTOPEN)
+		.value("XELNAGA_CAVERNS_DOORNE_XELNAGA_CAVERNS_DOORDEFAULTCLOSE", sc2::ABILITY_ID::XELNAGA_CAVERNS_DOORNE_XELNAGA_CAVERNS_DOORDEFAULTCLOSE)
+		.value("XELNAGA_CAVERNS_DOORNOPENED_XELNAGA_CAVERNS_DOORDEFAULTOPEN", sc2::ABILITY_ID::XELNAGA_CAVERNS_DOORNWOPENED_XELNAGA_CAVERNS_DOORDEFAULTOPEN)
+		.value("XELNAGA_CAVERNS_DOORNW_XELNAGA_CAVERNS_DOORDEFAULTCLOSE", sc2::ABILITY_ID::XELNAGA_CAVERNS_DOORNW_XELNAGA_CAVERNS_DOORDEFAULTCLOSE)
+		.value("XELNAGA_CAVERNS_DOORN_XELNAGA_CAVERNS_DOORDEFAULTCLOSE", sc2::ABILITY_ID::XELNAGA_CAVERNS_DOORN_XELNAGA_CAVERNS_DOORDEFAULTCLOSE)
+		.value("XELNAGA_CAVERNS_DOORSEOPENED_XELNAGA_CAVERNS_DOORDEFAULTOPEN", sc2::ABILITY_ID::XELNAGA_CAVERNS_DOORSEOPENED_XELNAGA_CAVERNS_DOORDEFAULTOPEN)
+		.value("XELNAGA_CAVERNS_DOORSE_XELNAGA_CAVERNS_DOORDEFAULTCLOSE", sc2::ABILITY_ID::XELNAGA_CAVERNS_DOORSE_XELNAGA_CAVERNS_DOORDEFAULTCLOSE)
+		.value("XELNAGA_CAVERNS_DOORSOPENED_XELNAGA_CAVERNS_DOORDEFAULTOPEN", sc2::ABILITY_ID::XELNAGA_CAVERNS_DOORSOPENED_XELNAGA_CAVERNS_DOORDEFAULTOPEN)
+		.value("XELNAGA_CAVERNS_DOORSWOPENED_XELNAGA_CAVERNS_DOORDEFAULTOPEN", sc2::ABILITY_ID::XELNAGA_CAVERNS_DOORSWOPENED_XELNAGA_CAVERNS_DOORDEFAULTOPEN)
+		.value("XELNAGA_CAVERNS_DOORSW_XELNAGA_CAVERNS_DOORDEFAULTCLOSE", sc2::ABILITY_ID::XELNAGA_CAVERNS_DOORSW_XELNAGA_CAVERNS_DOORDEFAULTCLOSE)
+		.value("XELNAGA_CAVERNS_DOORS_XELNAGA_CAVERNS_DOORDEFAULTCLOSE", sc2::ABILITY_ID::XELNAGA_CAVERNS_DOORS_XELNAGA_CAVERNS_DOORDEFAULTCLOSE)
+		.value("XELNAGA_CAVERNS_DOORWOPENED_XELNAGA_CAVERNS_DOORDEFAULTOPEN", sc2::ABILITY_ID::XELNAGA_CAVERNS_DOORWOPENED_XELNAGA_CAVERNS_DOORDEFAULTOPEN)
+		.value("XELNAGA_CAVERNS_DOORW_XELNAGA_CAVERNS_DOORDEFAULTCLOSE", sc2::ABILITY_ID::XELNAGA_CAVERNS_DOORW_XELNAGA_CAVERNS_DOORDEFAULTCLOSE)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGEH10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGEH10OUT_BRIDGEEXTEND)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGEH10_BRIDGERETRACT", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGEH10_BRIDGERETRACT)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGEH12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGEH12OUT_BRIDGEEXTEND)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGEH12_BRIDGERETRACT", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGEH12_BRIDGERETRACT)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGEH8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGEH8OUT_BRIDGEEXTEND)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGEH8_BRIDGERETRACT", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGEH8_BRIDGERETRACT)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGENE10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGENE10OUT_BRIDGEEXTEND)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGENE10_BRIDGERETRACT", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGENE10_BRIDGERETRACT)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGENE12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGENE12OUT_BRIDGEEXTEND)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGENE12_BRIDGERETRACT", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGENE12_BRIDGERETRACT)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGENE8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGENE8OUT_BRIDGEEXTEND)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGENE8_BRIDGERETRACT", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGENE8_BRIDGERETRACT)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGENW10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGENW10OUT_BRIDGEEXTEND)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGENW10_BRIDGERETRACT", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGENW10_BRIDGERETRACT)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGENW12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGENW12OUT_BRIDGEEXTEND)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGENW12_BRIDGERETRACT", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGENW12_BRIDGERETRACT)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGENW8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGENW8OUT_BRIDGEEXTEND)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGENW8_BRIDGERETRACT", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGENW8_BRIDGERETRACT)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGEV10OUT_BRIDGEEXTEND", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGEV10OUT_BRIDGEEXTEND)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGEV10_BRIDGERETRACT", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGEV10_BRIDGERETRACT)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGEV12OUT_BRIDGEEXTEND", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGEV12OUT_BRIDGEEXTEND)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGEV12_BRIDGERETRACT", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGEV12_BRIDGERETRACT)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGEV8OUT_BRIDGEEXTEND", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGEV8OUT_BRIDGEEXTEND)
+		.value("XELNAGA_CAVERNS_FLOATING_BRIDGEV8_BRIDGERETRACT", sc2::ABILITY_ID::XELNAGA_CAVERNS_FLOATING_BRIDGEV8_BRIDGERETRACT)
+		.value("ZERATULBLINK", sc2::ABILITY_ID::ZERATULBLINK)
+		.value("ZERATULSTUN", sc2::ABILITY_ID::ZERATULSTUN)
+		.value("_250MMSTRIKECANNONS", sc2::ABILITY_ID::_250MMSTRIKECANNONS)
+		.value("_250MMSTRIKECANNONS_CANCEL", sc2::ABILITY_ID::_250MMSTRIKECANNONS_CANCEL)
+		.value("_330MMBARRAGECANNONS", sc2::ABILITY_ID::_330MMBARRAGECANNONS)
+		.value("_330MMBARRAGECANNONS_CANCEL", sc2::ABILITY_ID::_330MMBARRAGECANNONS_CANCEL);
 
       py::enum_<sc2::UPGRADE_ID>(m, "UPGRADE_ID")
-        .value("INVALID", sc2::UPGRADE_ID::INVALID)
-        .value("CARRIERLAUNCHSPEEDUPGRADE", sc2::UPGRADE_ID::CARRIERLAUNCHSPEEDUPGRADE)
-        .value("GLIALRECONSTITUTION", sc2::UPGRADE_ID::GLIALRECONSTITUTION)
-        .value("TUNNELINGCLAWS", sc2::UPGRADE_ID::TUNNELINGCLAWS)
-        .value("CHITINOUSPLATING", sc2::UPGRADE_ID::CHITINOUSPLATING)
-        .value("HISECAUTOTRACKING", sc2::UPGRADE_ID::HISECAUTOTRACKING)
-        .value("TERRANBUILDINGARMOR", sc2::UPGRADE_ID::TERRANBUILDINGARMOR)
-        .value("TERRANINFANTRYWEAPONSLEVEL1", sc2::UPGRADE_ID::TERRANINFANTRYWEAPONSLEVEL1)
-        .value("TERRANINFANTRYWEAPONSLEVEL2", sc2::UPGRADE_ID::TERRANINFANTRYWEAPONSLEVEL2)
-        .value("TERRANINFANTRYWEAPONSLEVEL3", sc2::UPGRADE_ID::TERRANINFANTRYWEAPONSLEVEL3)
-        .value("NEOSTEELFRAME", sc2::UPGRADE_ID::NEOSTEELFRAME)
-        .value("TERRANINFANTRYARMORSLEVEL1", sc2::UPGRADE_ID::TERRANINFANTRYARMORSLEVEL1)
-        .value("TERRANINFANTRYARMORSLEVEL2", sc2::UPGRADE_ID::TERRANINFANTRYARMORSLEVEL2)
-        .value("TERRANINFANTRYARMORSLEVEL3", sc2::UPGRADE_ID::TERRANINFANTRYARMORSLEVEL3)
-        .value("STIMPACK", sc2::UPGRADE_ID::STIMPACK)
-        .value("SHIELDWALL", sc2::UPGRADE_ID::SHIELDWALL)
-        .value("PUNISHERGRENADES", sc2::UPGRADE_ID::PUNISHERGRENADES)
-        .value("HIGHCAPACITYBARRELS", sc2::UPGRADE_ID::HIGHCAPACITYBARRELS)
+        .value("ABDOMINALFORTITUDE", sc2::UPGRADE_ID::ABDOMINALFORTITUDE)
+        .value("ADEPTKILLBOUNCE", sc2::UPGRADE_ID::ADEPTKILLBOUNCE)
+        .value("ADEPTPIERCINGATTACK", sc2::UPGRADE_ID::ADEPTPIERCINGATTACK)
+        .value("ADEPTSHIELDUPGRADE", sc2::UPGRADE_ID::ADEPTSHIELDUPGRADE)
+        .value("ADVANCEDCONSTRUCTION", sc2::UPGRADE_ID::ADVANCEDCONSTRUCTION)
+        .value("ADVANCEDHEALINGAI", sc2::UPGRADE_ID::ADVANCEDHEALINGAI)
+        .value("ADVANCEDMEDICTRAINING", sc2::UPGRADE_ID::ADVANCEDMEDICTRAINING)
+        .value("AMPLIFIEDSHIELDING", sc2::UPGRADE_ID::AMPLIFIEDSHIELDING)
+        .value("ANABOLICSYNTHESIS", sc2::UPGRADE_ID::ANABOLICSYNTHESIS)
+        .value("ANIONPULSECRYSTALS", sc2::UPGRADE_ID::ANIONPULSECRYSTALS)
+        .value("ARESCLASSWEAPONSSYSTEM", sc2::UPGRADE_ID::ARESCLASSWEAPONSSYSTEM)
+        .value("ARESCLASSWEAPONSSYSTEMVIKING", sc2::UPGRADE_ID::ARESCLASSWEAPONSSYSTEMVIKING)
+        .value("ARMORPIERCINGROCKETS", sc2::UPGRADE_ID::ARMORPIERCINGROCKETS)
+        .value("AUTOHARVESTER", sc2::UPGRADE_ID::AUTOHARVESTER)
+        .value("AUXILIARYMEDBOTS", sc2::UPGRADE_ID::AUXILIARYMEDBOTS)
+        .value("BANELINGBURROWMOVE", sc2::UPGRADE_ID::BANELINGBURROWMOVE)
         .value("BANSHEECLOAK", sc2::UPGRADE_ID::BANSHEECLOAK)
-        .value("RAVENCORVIDREACTOR", sc2::UPGRADE_ID::RAVENCORVIDREACTOR)
-        .value("PERSONALCLOAKING", sc2::UPGRADE_ID::PERSONALCLOAKING)
-        .value("TERRANVEHICLEWEAPONSLEVEL1", sc2::UPGRADE_ID::TERRANVEHICLEWEAPONSLEVEL1)
-        .value("TERRANVEHICLEWEAPONSLEVEL2", sc2::UPGRADE_ID::TERRANVEHICLEWEAPONSLEVEL2)
-        .value("TERRANVEHICLEWEAPONSLEVEL3", sc2::UPGRADE_ID::TERRANVEHICLEWEAPONSLEVEL3)
-        .value("TERRANSHIPWEAPONSLEVEL1", sc2::UPGRADE_ID::TERRANSHIPWEAPONSLEVEL1)
-        .value("TERRANSHIPWEAPONSLEVEL2", sc2::UPGRADE_ID::TERRANSHIPWEAPONSLEVEL2)
-        .value("TERRANSHIPWEAPONSLEVEL3", sc2::UPGRADE_ID::TERRANSHIPWEAPONSLEVEL3)
-        .value("PROTOSSGROUNDWEAPONSLEVEL1", sc2::UPGRADE_ID::PROTOSSGROUNDWEAPONSLEVEL1)
-        .value("PROTOSSGROUNDWEAPONSLEVEL2", sc2::UPGRADE_ID::PROTOSSGROUNDWEAPONSLEVEL2)
-        .value("PROTOSSGROUNDWEAPONSLEVEL3", sc2::UPGRADE_ID::PROTOSSGROUNDWEAPONSLEVEL3)
-        .value("PROTOSSGROUNDARMORSLEVEL1", sc2::UPGRADE_ID::PROTOSSGROUNDARMORSLEVEL1)
-        .value("PROTOSSGROUNDARMORSLEVEL2", sc2::UPGRADE_ID::PROTOSSGROUNDARMORSLEVEL2)
-        .value("PROTOSSGROUNDARMORSLEVEL3", sc2::UPGRADE_ID::PROTOSSGROUNDARMORSLEVEL3)
-        .value("PROTOSSSHIELDSLEVEL1", sc2::UPGRADE_ID::PROTOSSSHIELDSLEVEL1)
-        .value("PROTOSSSHIELDSLEVEL2", sc2::UPGRADE_ID::PROTOSSSHIELDSLEVEL2)
-        .value("PROTOSSSHIELDSLEVEL3", sc2::UPGRADE_ID::PROTOSSSHIELDSLEVEL3)
-        .value("OBSERVERGRAVITICBOOSTER", sc2::UPGRADE_ID::OBSERVERGRAVITICBOOSTER)
-        .value("GRAVITICDRIVE", sc2::UPGRADE_ID::GRAVITICDRIVE)
-        .value("EXTENDEDTHERMALLANCE", sc2::UPGRADE_ID::EXTENDEDTHERMALLANCE)
-        .value("PSISTORMTECH", sc2::UPGRADE_ID::PSISTORMTECH)
-        .value("ZERGMELEEWEAPONSLEVEL1", sc2::UPGRADE_ID::ZERGMELEEWEAPONSLEVEL1)
-        .value("ZERGMELEEWEAPONSLEVEL2", sc2::UPGRADE_ID::ZERGMELEEWEAPONSLEVEL2)
-        .value("ZERGMELEEWEAPONSLEVEL3", sc2::UPGRADE_ID::ZERGMELEEWEAPONSLEVEL3)
-        .value("ZERGGROUNDARMORSLEVEL1", sc2::UPGRADE_ID::ZERGGROUNDARMORSLEVEL1)
-        .value("ZERGGROUNDARMORSLEVEL2", sc2::UPGRADE_ID::ZERGGROUNDARMORSLEVEL2)
-        .value("ZERGGROUNDARMORSLEVEL3", sc2::UPGRADE_ID::ZERGGROUNDARMORSLEVEL3)
-        .value("ZERGMISSILEWEAPONSLEVEL1", sc2::UPGRADE_ID::ZERGMISSILEWEAPONSLEVEL1)
-        .value("ZERGMISSILEWEAPONSLEVEL2", sc2::UPGRADE_ID::ZERGMISSILEWEAPONSLEVEL2)
-        .value("ZERGMISSILEWEAPONSLEVEL3", sc2::UPGRADE_ID::ZERGMISSILEWEAPONSLEVEL3)
-        .value("OVERLORDSPEED", sc2::UPGRADE_ID::OVERLORDSPEED)
+        .value("BANSHEECLOAKEDDAMAGE", sc2::UPGRADE_ID::BANSHEECLOAKEDDAMAGE)
+        .value("BANSHEESPEED", sc2::UPGRADE_ID::BANSHEESPEED)
+        .value("BATTLECRUISERBEHEMOTHREACTOR", sc2::UPGRADE_ID::BATTLECRUISERBEHEMOTHREACTOR)
+        .value("BATTLECRUISERENABLESPECIALIZATIONS", sc2::UPGRADE_ID::BATTLECRUISERENABLESPECIALIZATIONS)
+        .value("BEARCLAWNOZZLES", sc2::UPGRADE_ID::BEARCLAWNOZZLES)
+        .value("BLINKTECH", sc2::UPGRADE_ID::BLINKTECH)
         .value("BURROW", sc2::UPGRADE_ID::BURROW)
-        .value("ZERGLINGATTACKSPEED", sc2::UPGRADE_ID::ZERGLINGATTACKSPEED)
-        .value("ZERGLINGMOVEMENTSPEED", sc2::UPGRADE_ID::ZERGLINGMOVEMENTSPEED)
-        .value("ZERGFLYERWEAPONSLEVEL1", sc2::UPGRADE_ID::ZERGFLYERWEAPONSLEVEL1)
-        .value("ZERGFLYERWEAPONSLEVEL2", sc2::UPGRADE_ID::ZERGFLYERWEAPONSLEVEL2)
-        .value("ZERGFLYERWEAPONSLEVEL3", sc2::UPGRADE_ID::ZERGFLYERWEAPONSLEVEL3)
-        .value("ZERGFLYERARMORSLEVEL1", sc2::UPGRADE_ID::ZERGFLYERARMORSLEVEL1)
-        .value("ZERGFLYERARMORSLEVEL2", sc2::UPGRADE_ID::ZERGFLYERARMORSLEVEL2)
-        .value("ZERGFLYERARMORSLEVEL3", sc2::UPGRADE_ID::ZERGFLYERARMORSLEVEL3)
-        .value("INFESTORENERGYUPGRADE", sc2::UPGRADE_ID::INFESTORENERGYUPGRADE)
+        .value("BURSTCAPACITORS", sc2::UPGRADE_ID::BURSTCAPACITORS)
+        .value("CAMPAIGNJOTUNBOOSTERS", sc2::UPGRADE_ID::CAMPAIGNJOTUNBOOSTERS)
+        .value("CARRIERCARRIERCAPACITY", sc2::UPGRADE_ID::CARRIERCARRIERCAPACITY)
+        .value("CARRIERLAUNCHSPEEDUPGRADE", sc2::UPGRADE_ID::CARRIERLAUNCHSPEEDUPGRADE)
+        .value("CARRIERLEASHRANGEUPGRADE", sc2::UPGRADE_ID::CARRIERLEASHRANGEUPGRADE)
+        .value("CELLULARREACTORS", sc2::UPGRADE_ID::CELLULARREACTORS)
         .value("CENTRIFICALHOOKS", sc2::UPGRADE_ID::CENTRIFICALHOOKS)
-        .value("BATTLECRUISERENABLESPECIALIZATIONS", sc2::UPGRADE_ID::BATTLECRUISERENABLESPECIALIZATIONS)
-        .value("PROTOSSAIRWEAPONSLEVEL1", sc2::UPGRADE_ID::PROTOSSAIRWEAPONSLEVEL1)
-        .value("PROTOSSAIRWEAPONSLEVEL2", sc2::UPGRADE_ID::PROTOSSAIRWEAPONSLEVEL2)
-        .value("PROTOSSAIRWEAPONSLEVEL3", sc2::UPGRADE_ID::PROTOSSAIRWEAPONSLEVEL3)
-        .value("PROTOSSAIRARMORSLEVEL1", sc2::UPGRADE_ID::PROTOSSAIRARMORSLEVEL1)
-        .value("PROTOSSAIRARMORSLEVEL2", sc2::UPGRADE_ID::PROTOSSAIRARMORSLEVEL2)
-        .value("PROTOSSAIRARMORSLEVEL3", sc2::UPGRADE_ID::PROTOSSAIRARMORSLEVEL3)
-        .value("WARPGATERESEARCH", sc2::UPGRADE_ID::WARPGATERESEARCH)
+        .value("CERBERUSMINES", sc2::UPGRADE_ID::CERBERUSMINES)
         .value("CHARGE", sc2::UPGRADE_ID::CHARGE)
-        .value("BLINKTECH", sc2::UPGRADE_ID::BLINKTECH)
-        .value("PHOENIXRANGEUPGRADE", sc2::UPGRADE_ID::PHOENIXRANGEUPGRADE)
-        .value("NEURALPARASITE", sc2::UPGRADE_ID::NEURALPARASITE)
-        .value("TERRANVEHICLEANDSHIPARMORSLEVEL1", sc2::UPGRADE_ID::TERRANVEHICLEANDSHIPARMORSLEVEL1)
-        .value("TERRANVEHICLEANDSHIPARMORSLEVEL2", sc2::UPGRADE_ID::TERRANVEHICLEANDSHIPARMORSLEVEL2)
-        .value("TERRANVEHICLEANDSHIPARMORSLEVEL3", sc2::UPGRADE_ID::TERRANVEHICLEANDSHIPARMORSLEVEL3)
+        .value("CHITINOUSPLATING", sc2::UPGRADE_ID::CHITINOUSPLATING)
+        .value("CINEMATICMODE", sc2::UPGRADE_ID::CINEMATICMODE)
+        .value("CLOAKDISTORTIONFIELD", sc2::UPGRADE_ID::CLOAKDISTORTIONFIELD)
+        .value("CLUSTERBOMB", sc2::UPGRADE_ID::CLUSTERBOMB)
+        .value("CLUSTERWARHEADS", sc2::UPGRADE_ID::CLUSTERWARHEADS)
+        .value("COMBATDRUGS", sc2::UPGRADE_ID::COMBATDRUGS)
+        .value("COMBATSHIELD", sc2::UPGRADE_ID::COMBATSHIELD)
+        .value("COMMANDCENTERREACTOR", sc2::UPGRADE_ID::COMMANDCENTERREACTOR)
+        .value("CROSSSPECTRUMDAMPENERS", sc2::UPGRADE_ID::CROSSSPECTRUMDAMPENERS)
+        .value("CURSORDEBUG", sc2::UPGRADE_ID::CURSORDEBUG)
+        .value("CYCLONEAIRUPGRADE", sc2::UPGRADE_ID::CYCLONEAIRUPGRADE)
+        .value("CYCLONELOCKONDAMAGEUPGRADE", sc2::UPGRADE_ID::CYCLONELOCKONDAMAGEUPGRADE)
+        .value("CYCLONELOCKONRANGEUPGRADE", sc2::UPGRADE_ID::CYCLONELOCKONRANGEUPGRADE)
+        .value("CYCLONERAPIDFIRELAUNCHERS", sc2::UPGRADE_ID::CYCLONERAPIDFIRELAUNCHERS)
+        .value("DARKPROTOSS", sc2::UPGRADE_ID::DARKPROTOSS)
+        .value("DARKTEMPLARBLINKUPGRADE", sc2::UPGRADE_ID::DARKTEMPLARBLINKUPGRADE)
+        .value("DARKTEMPLARTACTICS", sc2::UPGRADE_ID::DARKTEMPLARTACTICS)
+        .value("DEFENSIVEMATRIX", sc2::UPGRADE_ID::DEFENSIVEMATRIX)
+        .value("DEVASTATORMISSILES", sc2::UPGRADE_ID::DEVASTATORMISSILES)
+        .value("DIGGINGCLAWS", sc2::UPGRADE_ID::DIGGINGCLAWS)
+        .value("DISTORTIONBLASTERS", sc2::UPGRADE_ID::DISTORTIONBLASTERS)
+        .value("DISTORTIONSENSORS", sc2::UPGRADE_ID::DISTORTIONSENSORS)
+        .value("DISTORTIONTHRUSTERS", sc2::UPGRADE_ID::DISTORTIONTHRUSTERS)
         .value("DRILLCLAWS", sc2::UPGRADE_ID::DRILLCLAWS)
-        .value("ADEPTPIERCINGATTACK", sc2::UPGRADE_ID::ADEPTPIERCINGATTACK)
-        .value("MAGFIELDLAUNCHERS", sc2::UPGRADE_ID::MAGFIELDLAUNCHERS)
+        .value("DUALFUSIONWELDERS", sc2::UPGRADE_ID::DUALFUSIONWELDERS)
+        .value("DURABLEMATERIALS", sc2::UPGRADE_ID::DURABLEMATERIALS)
+        .value("DYNAMICPOWERROUTING", sc2::UPGRADE_ID::DYNAMICPOWERROUTING)
+        .value("EMPTOWER", sc2::UPGRADE_ID::EMPTOWER)
+        .value("ENERGYSTORAGE", sc2::UPGRADE_ID::ENERGYSTORAGE)
+        .value("ENHANCEDSHOCKWAVES", sc2::UPGRADE_ID::ENHANCEDSHOCKWAVES)
         .value("EVOLVEGROOVEDSPINES", sc2::UPGRADE_ID::EVOLVEGROOVEDSPINES)
         .value("EVOLVEMUSCULARAUGMENTS", sc2::UPGRADE_ID::EVOLVEMUSCULARAUGMENTS)
-        .value("BANSHEESPEED", sc2::UPGRADE_ID::BANSHEESPEED)
-        .value("RAVENRECALIBRATEDEXPLOSIVES", sc2::UPGRADE_ID::RAVENRECALIBRATEDEXPLOSIVES)
-        .value("MEDIVACINCREASESPEEDBOOST", sc2::UPGRADE_ID::MEDIVACINCREASESPEEDBOOST)
-        .value("LIBERATORAGRANGEUPGRADE", sc2::UPGRADE_ID::LIBERATORAGRANGEUPGRADE)
-        .value("DARKTEMPLARBLINKUPGRADE", sc2::UPGRADE_ID::DARKTEMPLARBLINKUPGRADE)
-        .value("SMARTSERVOS", sc2::UPGRADE_ID::SMARTSERVOS)
-        .value("RAPIDFIRELAUNCHERS", sc2::UPGRADE_ID::RAPIDFIRELAUNCHERS)
-        .value("ENHANCEDMUNITIONS", sc2::UPGRADE_ID::ENHANCEDMUNITIONS);
-
+        .value("EXPANDEDHULL", sc2::UPGRADE_ID::EXPANDEDHULL)
+        .value("EXTENDEDTHERMALLANCE", sc2::UPGRADE_ID::EXTENDEDTHERMALLANCE)
+        .value("EXTRAMINES", sc2::UPGRADE_ID::EXTRAMINES)
+        .value("FIREBATJUGGERNAUTPLATING", sc2::UPGRADE_ID::FIREBATJUGGERNAUTPLATING)
+        .value("FIRESUPPRESSIONSYSTEMS", sc2::UPGRADE_ID::FIRESUPPRESSIONSYSTEMS)
+        .value("FLARERESEARCH", sc2::UPGRADE_ID::FLARERESEARCH)
+        .value("FLYINGLOCUSTS", sc2::UPGRADE_ID::FLYINGLOCUSTS)
+        .value("FORTIFIEDBUNKERCARAPACE", sc2::UPGRADE_ID::FORTIFIEDBUNKERCARAPACE)
+        .value("FULLBORECANISTERAMMO", sc2::UPGRADE_ID::FULLBORECANISTERAMMO)
+        .value("GHOSTMOEBIUSREACTOR", sc2::UPGRADE_ID::GHOSTMOEBIUSREACTOR)
+        .value("GLIALRECONSTITUTION", sc2::UPGRADE_ID::GLIALRECONSTITUTION)
+        .value("GRAVITICDRIVE", sc2::UPGRADE_ID::GRAVITICDRIVE)
+        .value("GRAVITICTHRUSTERS", sc2::UPGRADE_ID::GRAVITICTHRUSTERS)
+        .value("HAILSTORMMISSILEPODS", sc2::UPGRADE_ID::HAILSTORMMISSILEPODS)
+        .value("HALOROCKETS", sc2::UPGRADE_ID::HALOROCKETS)
+        .value("HALTECH", sc2::UPGRADE_ID::HALTECH)
+        .value("HELLIONCAMPAIGNINFERNALPREIGNITER", sc2::UPGRADE_ID::HELLIONCAMPAIGNINFERNALPREIGNITER)
+        .value("HIGHCAPACITYBARRELS", sc2::UPGRADE_ID::HIGHCAPACITYBARRELS)
+        .value("HIGHTEMPLARKHAYDARINAMULET", sc2::UPGRADE_ID::HIGHTEMPLARKHAYDARINAMULET)
+        .value("HIREDEVILDOGSPH", sc2::UPGRADE_ID::HIREDEVILDOGSPH)
+        .value("HIREDUKESREVENGE", sc2::UPGRADE_ID::HIREDUKESREVENGE)
+        .value("HIREDUSKWINGPH", sc2::UPGRADE_ID::HIREDUSKWINGPH)
+        .value("HIREHAMMERSECURITIESPH", sc2::UPGRADE_ID::HIREHAMMERSECURITIESPH)
+        .value("HIREHELSANGELSPH", sc2::UPGRADE_ID::HIREHELSANGELSPH)
+		.value("HIREKELMORIANMINERSPH", sc2::UPGRADE_ID::HIREKELMORIANMINERSPH)
+		.value("HIRESIEGEBREAKERSPH", sc2::UPGRADE_ID::HIRESIEGEBREAKERSPH)
+		.value("HIRESPARTANCOMPANYPH", sc2::UPGRADE_ID::HIRESPARTANCOMPANYPH)
+		.value("HISECAUTOTRACKING", sc2::UPGRADE_ID::HISECAUTOTRACKING)
+		.value("HIVEMINDEMULATOR", sc2::UPGRADE_ID::HIVEMINDEMULATOR)
+		.value("HUNTERSEEKER", sc2::UPGRADE_ID::HUNTERSEEKER)
+		.value("HURRICANEMISSILES", sc2::UPGRADE_ID::HURRICANEMISSILES)
+		.value("HYBRIDCPLASMAUPGRADEHARD", sc2::UPGRADE_ID::HYBRIDCPLASMAUPGRADEHARD)
+		.value("HYBRIDCPLASMAUPGRADEINSANE", sc2::UPGRADE_ID::HYBRIDCPLASMAUPGRADEINSANE)
+		.value("HYDRALISKSPEED", sc2::UPGRADE_ID::HYDRALISKSPEED)
+		.value("HYDRALISKSPEEDUPGRADE", sc2::UPGRADE_ID::HYDRALISKSPEEDUPGRADE)
+		.value("HYPERFLUXOR", sc2::UPGRADE_ID::HYPERFLUXOR)
+		.value("IMMORTALBARRIER", sc2::UPGRADE_ID::IMMORTALBARRIER)
+		.value("IMMORTALREVIVE", sc2::UPGRADE_ID::IMMORTALREVIVE)
+		.value("IMPALERROUNDS", sc2::UPGRADE_ID::IMPALERROUNDS)
+		.value("INCREASEDRANGE", sc2::UPGRADE_ID::INCREASEDRANGE)
+		.value("INFERNALPREIGNITERS", sc2::UPGRADE_ID::INFERNALPREIGNITERS)
+		.value("INFESTORENERGYUPGRADE", sc2::UPGRADE_ID::INFESTORENERGYUPGRADE)
+		.value("INFESTORPERISTALSIS", sc2::UPGRADE_ID::INFESTORPERISTALSIS)
+		.value("INTERCEPTORLIMIT4", sc2::UPGRADE_ID::INTERCEPTORLIMIT4)
+		.value("INTERCEPTORLIMIT6", sc2::UPGRADE_ID::INTERCEPTORLIMIT6)
+		.value("INVALID", sc2::UPGRADE_ID::INVALID)
+		.value("JACKHAMMERCONCUSSIONGRENADES", sc2::UPGRADE_ID::JACKHAMMERCONCUSSIONGRENADES)
+		.value("JUGGERNAUTPLATING", sc2::UPGRADE_ID::JUGGERNAUTPLATING)
+		.value("KINETICFIELDS", sc2::UPGRADE_ID::KINETICFIELDS)
+		.value("LIBERATORAGRANGEUPGRADE", sc2::UPGRADE_ID::LIBERATORAGRANGEUPGRADE)
+		.value("LIBERATORMORPH", sc2::UPGRADE_ID::LIBERATORMORPH)
+		.value("LOCUSTLIFETIMEINCREASE", sc2::UPGRADE_ID::LOCUSTLIFETIMEINCREASE)
+		.value("LURKERRANGE", sc2::UPGRADE_ID::LURKERRANGE)
+		.value("MAELSTROMROUNDS", sc2::UPGRADE_ID::MAELSTROMROUNDS)
+		.value("MAGFIELDLAUNCHERS", sc2::UPGRADE_ID::MAGFIELDLAUNCHERS)
+		.value("MARAUDERLIFEBOOST", sc2::UPGRADE_ID::MARAUDERLIFEBOOST)
+		.value("MARINESTIMPACK", sc2::UPGRADE_ID::MARINESTIMPACK)
+		.value("MECHANICALREBIRTH", sc2::UPGRADE_ID::MECHANICALREBIRTH)
+		.value("MEDIVACCADUCEUSREACTOR", sc2::UPGRADE_ID::MEDIVACCADUCEUSREACTOR)
+		.value("MEDIVACINCREASESPEEDBOOST", sc2::UPGRADE_ID::MEDIVACINCREASESPEEDBOOST)
+		.value("MEDIVACRAPIDDEPLOYMENT", sc2::UPGRADE_ID::MEDIVACRAPIDDEPLOYMENT)
+		.value("MICROBIALSHROUD", sc2::UPGRADE_ID::MICROBIALSHROUD)
+		.value("MICROFILTERING", sc2::UPGRADE_ID::MICROFILTERING)
+		.value("MICROFUSIONREACTORS", sc2::UPGRADE_ID::MICROFUSIONREACTORS)
+		.value("MODULARCONSTRUCTION", sc2::UPGRADE_ID::MODULARCONSTRUCTION)
+		.value("MULE", sc2::UPGRADE_ID::MULE)
+		.value("MULTILOCKTARGETINGSYSTEMS", sc2::UPGRADE_ID::MULTILOCKTARGETINGSYSTEMS)
+		.value("NANOBOTINJECTORS", sc2::UPGRADE_ID::NANOBOTINJECTORS)
+		.value("NANOCONSTRUCTOR", sc2::UPGRADE_ID::NANOCONSTRUCTOR)
+		.value("NAPALMFUELTANKS", sc2::UPGRADE_ID::NAPALMFUELTANKS)
+		.value("NEOSTEELANDSHRIKETURRETICONUPGRADE", sc2::UPGRADE_ID::NEOSTEELANDSHRIKETURRETICONUPGRADE)
+		.value("NEOSTEELFRAME", sc2::UPGRADE_ID::NEOSTEELFRAME)
+		.value("NEURALPARASITE", sc2::UPGRADE_ID::NEURALPARASITE)
+		.value("NOTPOSSIBLESIEGEMODE", sc2::UPGRADE_ID::NOTPOSSIBLESIEGEMODE)
+		.value("OBSERVERGRAVITICBOOSTER", sc2::UPGRADE_ID::OBSERVERGRAVITICBOOSTER)
+		.value("OBVERSEINCUBATION", sc2::UPGRADE_ID::OBVERSEINCUBATION)
+		.value("OCULARIMPLANTS", sc2::UPGRADE_ID::OCULARIMPLANTS)
+		.value("ORACLEENERGYUPGRADE", sc2::UPGRADE_ID::ORACLEENERGYUPGRADE)
+		.value("ORBITALRELAY", sc2::UPGRADE_ID::ORBITALRELAY)
+		.value("ORBITALSTRIKE", sc2::UPGRADE_ID::ORBITALSTRIKE)
+		.value("ORGANICCARAPACE", sc2::UPGRADE_ID::ORGANICCARAPACE)
+		.value("OVERLORDSPEED", sc2::UPGRADE_ID::OVERLORDSPEED)
+		.value("OVERLORDTRANSPORT", sc2::UPGRADE_ID::OVERLORDTRANSPORT)
+		.value("PARTICLECANNONAIR", sc2::UPGRADE_ID::PARTICLECANNONAIR)
+		.value("PERMANENTCLOAKGHOST", sc2::UPGRADE_ID::PERMANENTCLOAKGHOST)
+		.value("PERMANENTCLOAKSPECTRE", sc2::UPGRADE_ID::PERMANENTCLOAKSPECTRE)
+		.value("PERSONALCLOAKING", sc2::UPGRADE_ID::PERSONALCLOAKING)
+		.value("PHOENIXRANGEUPGRADE", sc2::UPGRADE_ID::PHOENIXRANGEUPGRADE)
+		.value("PREDATOR", sc2::UPGRADE_ID::PREDATOR)
+		.value("PROJECTILEACCELERATORS", sc2::UPGRADE_ID::PROJECTILEACCELERATORS)
+		.value("PROTOSSAIRARMORSLEVEL1", sc2::UPGRADE_ID::PROTOSSAIRARMORSLEVEL1)
+		.value("PROTOSSAIRARMORSLEVEL2", sc2::UPGRADE_ID::PROTOSSAIRARMORSLEVEL2)
+		.value("PROTOSSAIRARMORSLEVEL3", sc2::UPGRADE_ID::PROTOSSAIRARMORSLEVEL3)
+		.value("PROTOSSAIRWEAPONSLEVEL1", sc2::UPGRADE_ID::PROTOSSAIRWEAPONSLEVEL1)
+		.value("PROTOSSAIRWEAPONSLEVEL2", sc2::UPGRADE_ID::PROTOSSAIRWEAPONSLEVEL2)
+		.value("PROTOSSAIRWEAPONSLEVEL3", sc2::UPGRADE_ID::PROTOSSAIRWEAPONSLEVEL3)
+		.value("PROTOSSGROUNDARMORSLEVEL1", sc2::UPGRADE_ID::PROTOSSGROUNDARMORSLEVEL1)
+		.value("PROTOSSGROUNDARMORSLEVEL2", sc2::UPGRADE_ID::PROTOSSGROUNDARMORSLEVEL2)
+		.value("PROTOSSGROUNDARMORSLEVEL3", sc2::UPGRADE_ID::PROTOSSGROUNDARMORSLEVEL3)
+		.value("PROTOSSGROUNDWEAPONSLEVEL1", sc2::UPGRADE_ID::PROTOSSGROUNDWEAPONSLEVEL1)
+		.value("PROTOSSGROUNDWEAPONSLEVEL2", sc2::UPGRADE_ID::PROTOSSGROUNDWEAPONSLEVEL2)
+		.value("PROTOSSGROUNDWEAPONSLEVEL3", sc2::UPGRADE_ID::PROTOSSGROUNDWEAPONSLEVEL3)
+		.value("PROTOSSHEROSHIPDETECTOR", sc2::UPGRADE_ID::PROTOSSHEROSHIPDETECTOR)
+		.value("PROTOSSHEROSHIPSPELL", sc2::UPGRADE_ID::PROTOSSHEROSHIPSPELL)
+		.value("PROTOSSHEROSHIPWEAPON", sc2::UPGRADE_ID::PROTOSSHEROSHIPWEAPON)
+		.value("PROTOSSSHIELDSLEVEL1", sc2::UPGRADE_ID::PROTOSSSHIELDSLEVEL1)
+		.value("PROTOSSSHIELDSLEVEL2", sc2::UPGRADE_ID::PROTOSSSHIELDSLEVEL2)
+		.value("PROTOSSSHIELDSLEVEL3", sc2::UPGRADE_ID::PROTOSSSHIELDSLEVEL3)
+		.value("PSIDISRUPTOR", sc2::UPGRADE_ID::PSIDISRUPTOR)
+		.value("PSIONICAMPLIFIERS", sc2::UPGRADE_ID::PSIONICAMPLIFIERS)
+		.value("PSISTORMTECH", sc2::UPGRADE_ID::PSISTORMTECH)
+		.value("PUNISHERGRENADES", sc2::UPGRADE_ID::PUNISHERGRENADES)
+		.value("RAPIDDEPLOYMENT", sc2::UPGRADE_ID::RAPIDDEPLOYMENT)
+		.value("RAVAGERRANGE", sc2::UPGRADE_ID::RAVAGERRANGE)
+		.value("RAVENCORVIDREACTOR", sc2::UPGRADE_ID::RAVENCORVIDREACTOR)
+		.value("RAVENDAMAGEUPGRADE", sc2::UPGRADE_ID::RAVENDAMAGEUPGRADE)
+		.value("RAVENENHANCEDMUNITIONS", sc2::UPGRADE_ID::RAVENENHANCEDMUNITIONS)
+		.value("RAVENRECALIBRATEDEXPLOSIVES", sc2::UPGRADE_ID::RAVENRECALIBRATEDEXPLOSIVES)
+		.value("RAZORWIRE", sc2::UPGRADE_ID::RAZORWIRE)
+		.value("REAPERD8CHARGE", sc2::UPGRADE_ID::REAPERD8CHARGE)
+		.value("REAPERJUMP", sc2::UPGRADE_ID::REAPERJUMP)
+		.value("REAPERSPEED", sc2::UPGRADE_ID::REAPERSPEED)
+		.value("REAPERSTIMPACK", sc2::UPGRADE_ID::REAPERSTIMPACK)
+		.value("REAPERU238ROUNDS", sc2::UPGRADE_ID::REAPERU238ROUNDS)
+		.value("REGENERATIVEBIOSTEEL", sc2::UPGRADE_ID::REGENERATIVEBIOSTEEL)
+		.value("REINFORCEDSUPERSTRUCTURE", sc2::UPGRADE_ID::REINFORCEDSUPERSTRUCTURE)
+		.value("RESTORESHIELDS", sc2::UPGRADE_ID::RESTORESHIELDS)
+		.value("ROACHSUPPLY", sc2::UPGRADE_ID::ROACHSUPPLY)
+		.value("SCAVENGINGSYSTEMS", sc2::UPGRADE_ID::SCAVENGINGSYSTEMS)
+		.value("SCIENCEVESSEL", sc2::UPGRADE_ID::SCIENCEVESSEL)
+		.value("SCIENCEVESSELENERGYMANIPULATION", sc2::UPGRADE_ID::SCIENCEVESSELENERGYMANIPULATION)
+		.value("SCIENCEVESSELPLASMAWEAPONRY", sc2::UPGRADE_ID::SCIENCEVESSELPLASMAWEAPONRY)
+		.value("SECRETEDCOATING", sc2::UPGRADE_ID::SECRETEDCOATING)
+		.value("SHAPEDHULL", sc2::UPGRADE_ID::SHAPEDHULL)
+		.value("SHIELDWALL", sc2::UPGRADE_ID::SHIELDWALL)
+		.value("SHOWGATLINGGUN", sc2::UPGRADE_ID::SHOWGATLINGGUN)
+		.value("SHRIKETURRET", sc2::UPGRADE_ID::SHRIKETURRET)
+		.value("SIEGETANKSHAPEDBLAST", sc2::UPGRADE_ID::SIEGETANKSHAPEDBLAST)
+		.value("SIEGETECH", sc2::UPGRADE_ID::SIEGETECH)
+		.value("SINGULARITYCHARGE", sc2::UPGRADE_ID::SINGULARITYCHARGE)
+		.value("SMARTSERVOS", sc2::UPGRADE_ID::SMARTSERVOS)
+		.value("SPECTRETOOLTIPUPGRADE", sc2::UPGRADE_ID::SPECTRETOOLTIPUPGRADE)
+		.value("STABILIZERMEDPACKS", sc2::UPGRADE_ID::STABILIZERMEDPACKS)
+		.value("STIMPACK", sc2::UPGRADE_ID::STIMPACK)
+		.value("STRIKECANNONS", sc2::UPGRADE_ID::STRIKECANNONS)
+		.value("SUNDERINGIMPACT", sc2::UPGRADE_ID::SUNDERINGIMPACT)
+		.value("SUPPLYDEPOTDROP", sc2::UPGRADE_ID::SUPPLYDEPOTDROP)
+		.value("SURVIVALPODS", sc2::UPGRADE_ID::SURVIVALPODS)
+		.value("TECHREACTOR", sc2::UPGRADE_ID::TECHREACTOR)
+		.value("TECHREACTORAI", sc2::UPGRADE_ID::TECHREACTORAI)
+		.value("TEMPESTRANGEUPGRADE", sc2::UPGRADE_ID::TEMPESTRANGEUPGRADE)
+		.value("TERRANBUILDINGARMOR", sc2::UPGRADE_ID::TERRANBUILDINGARMOR)
+		.value("TERRANDEFENSERANGEBONUS", sc2::UPGRADE_ID::TERRANDEFENSERANGEBONUS)
+		.value("TERRANINFANTRYARMORSLEVEL1", sc2::UPGRADE_ID::TERRANINFANTRYARMORSLEVEL1)
+		.value("TERRANINFANTRYARMORSLEVEL2", sc2::UPGRADE_ID::TERRANINFANTRYARMORSLEVEL2)
+		.value("TERRANINFANTRYARMORSLEVEL3", sc2::UPGRADE_ID::TERRANINFANTRYARMORSLEVEL3)
+		.value("TERRANINFANTRYARMORSVANADIUMPLATINGLEVEL1", sc2::UPGRADE_ID::TERRANINFANTRYARMORSVANADIUMPLATINGLEVEL1)
+		.value("TERRANINFANTRYARMORSVANADIUMPLATINGLEVEL2", sc2::UPGRADE_ID::TERRANINFANTRYARMORSVANADIUMPLATINGLEVEL2)
+		.value("TERRANINFANTRYARMORSVANADIUMPLATINGLEVEL3", sc2::UPGRADE_ID::TERRANINFANTRYARMORSVANADIUMPLATINGLEVEL3)
+		.value("TERRANINFANTRYWEAPONSLEVEL1", sc2::UPGRADE_ID::TERRANINFANTRYWEAPONSLEVEL1)
+		.value("TERRANINFANTRYWEAPONSLEVEL2", sc2::UPGRADE_ID::TERRANINFANTRYWEAPONSLEVEL2)
+		.value("TERRANINFANTRYWEAPONSLEVEL3", sc2::UPGRADE_ID::TERRANINFANTRYWEAPONSLEVEL3)
+		.value("TERRANINFANTRYWEAPONSULTRACAPACITORSLEVEL1", sc2::UPGRADE_ID::TERRANINFANTRYWEAPONSULTRACAPACITORSLEVEL1)
+		.value("TERRANINFANTRYWEAPONSULTRACAPACITORSLEVEL2", sc2::UPGRADE_ID::TERRANINFANTRYWEAPONSULTRACAPACITORSLEVEL2)
+		.value("TERRANINFANTRYWEAPONSULTRACAPACITORSLEVEL3", sc2::UPGRADE_ID::TERRANINFANTRYWEAPONSULTRACAPACITORSLEVEL3)
+		.value("TERRANSHIPARMORSLEVEL1", sc2::UPGRADE_ID::TERRANSHIPARMORSLEVEL1)
+		.value("TERRANSHIPARMORSLEVEL2", sc2::UPGRADE_ID::TERRANSHIPARMORSLEVEL2)
+		.value("TERRANSHIPARMORSLEVEL3", sc2::UPGRADE_ID::TERRANSHIPARMORSLEVEL3)
+		.value("TERRANSHIPARMORSVANADIUMPLATINGLEVEL1", sc2::UPGRADE_ID::TERRANSHIPARMORSVANADIUMPLATINGLEVEL1)
+		.value("TERRANSHIPARMORSVANADIUMPLATINGLEVEL2", sc2::UPGRADE_ID::TERRANSHIPARMORSVANADIUMPLATINGLEVEL2)
+		.value("TERRANSHIPARMORSVANADIUMPLATINGLEVEL3", sc2::UPGRADE_ID::TERRANSHIPARMORSVANADIUMPLATINGLEVEL3)
+		.value("TERRANSHIPWEAPONSLEVEL1", sc2::UPGRADE_ID::TERRANSHIPWEAPONSLEVEL1)
+		.value("TERRANSHIPWEAPONSLEVEL2", sc2::UPGRADE_ID::TERRANSHIPWEAPONSLEVEL2)
+		.value("TERRANSHIPWEAPONSLEVEL3", sc2::UPGRADE_ID::TERRANSHIPWEAPONSLEVEL3)
+		.value("TERRANSHIPWEAPONSULTRACAPACITORSLEVEL1", sc2::UPGRADE_ID::TERRANSHIPWEAPONSULTRACAPACITORSLEVEL1)
+		.value("TERRANSHIPWEAPONSULTRACAPACITORSLEVEL2", sc2::UPGRADE_ID::TERRANSHIPWEAPONSULTRACAPACITORSLEVEL2)
+		.value("TERRANSHIPWEAPONSULTRACAPACITORSLEVEL3", sc2::UPGRADE_ID::TERRANSHIPWEAPONSULTRACAPACITORSLEVEL3)
+		.value("TERRANVEHICLEANDSHIPARMORSLEVEL1", sc2::UPGRADE_ID::TERRANVEHICLEANDSHIPARMORSLEVEL1)
+		.value("TERRANVEHICLEANDSHIPARMORSLEVEL2", sc2::UPGRADE_ID::TERRANVEHICLEANDSHIPARMORSLEVEL2)
+		.value("TERRANVEHICLEANDSHIPARMORSLEVEL3", sc2::UPGRADE_ID::TERRANVEHICLEANDSHIPARMORSLEVEL3)
+		.value("TERRANVEHICLEANDSHIPWEAPONSLEVEL1", sc2::UPGRADE_ID::TERRANVEHICLEANDSHIPWEAPONSLEVEL1)
+		.value("TERRANVEHICLEANDSHIPWEAPONSLEVEL2", sc2::UPGRADE_ID::TERRANVEHICLEANDSHIPWEAPONSLEVEL2)
+		.value("TERRANVEHICLEANDSHIPWEAPONSLEVEL3", sc2::UPGRADE_ID::TERRANVEHICLEANDSHIPWEAPONSLEVEL3)
+		.value("TERRANVEHICLEARMORSLEVEL1", sc2::UPGRADE_ID::TERRANVEHICLEARMORSLEVEL1)
+		.value("TERRANVEHICLEARMORSLEVEL2", sc2::UPGRADE_ID::TERRANVEHICLEARMORSLEVEL2)
+		.value("TERRANVEHICLEARMORSLEVEL3", sc2::UPGRADE_ID::TERRANVEHICLEARMORSLEVEL3)
+		.value("TERRANVEHICLEARMORSVANADIUMPLATINGLEVEL1", sc2::UPGRADE_ID::TERRANVEHICLEARMORSVANADIUMPLATINGLEVEL1)
+		.value("TERRANVEHICLEARMORSVANADIUMPLATINGLEVEL2", sc2::UPGRADE_ID::TERRANVEHICLEARMORSVANADIUMPLATINGLEVEL2)
+		.value("TERRANVEHICLEARMORSVANADIUMPLATINGLEVEL3", sc2::UPGRADE_ID::TERRANVEHICLEARMORSVANADIUMPLATINGLEVEL3)
+		.value("TERRANVEHICLEWEAPONSLEVEL1", sc2::UPGRADE_ID::TERRANVEHICLEWEAPONSLEVEL1)
+		.value("TERRANVEHICLEWEAPONSLEVEL2", sc2::UPGRADE_ID::TERRANVEHICLEWEAPONSLEVEL2)
+		.value("TERRANVEHICLEWEAPONSLEVEL3", sc2::UPGRADE_ID::TERRANVEHICLEWEAPONSLEVEL3)
+		.value("TERRANVEHICLEWEAPONSULTRACAPACITORSLEVEL1", sc2::UPGRADE_ID::TERRANVEHICLEWEAPONSULTRACAPACITORSLEVEL1)
+		.value("TERRANVEHICLEWEAPONSULTRACAPACITORSLEVEL2", sc2::UPGRADE_ID::TERRANVEHICLEWEAPONSULTRACAPACITORSLEVEL2)
+		.value("TERRANVEHICLEWEAPONSULTRACAPACITORSLEVEL3", sc2::UPGRADE_ID::TERRANVEHICLEWEAPONSULTRACAPACITORSLEVEL3)
+		.value("TOSHEASYMODE", sc2::UPGRADE_ID::TOSHEASYMODE)
+		.value("TRANSFORMATIONSERVOS", sc2::UPGRADE_ID::TRANSFORMATIONSERVOS)
+		.value("TRILITHIUMPOWERCELLS", sc2::UPGRADE_ID::TRILITHIUMPOWERCELLS)
+		.value("TUNGSTENSPIKES", sc2::UPGRADE_ID::TUNGSTENSPIKES)
+		.value("TUNNELINGCLAWS", sc2::UPGRADE_ID::TUNNELINGCLAWS)
+		.value("TURBOCHARGEDENGINES", sc2::UPGRADE_ID::TURBOCHARGEDENGINES)
+		.value("TWINLINKEDFLAMETHROWERS", sc2::UPGRADE_ID::TWINLINKEDFLAMETHROWERS)
+		.value("TYCHUS05BATTLECRUISERPENETRATION", sc2::UPGRADE_ID::TYCHUS05BATTLECRUISERPENETRATION)
+		.value("ULTRACAPACITORS", sc2::UPGRADE_ID::ULTRACAPACITORS)
+		.value("ULTRALISKBURROWCHARGEUPGRADE", sc2::UPGRADE_ID::ULTRALISKBURROWCHARGEUPGRADE)
+		.value("ULTRASONICPULSE", sc2::UPGRADE_ID::ULTRASONICPULSE)
+		.value("VANADIUMPLATING", sc2::UPGRADE_ID::VANADIUMPLATING)
+		.value("VIKINGJOTUNBOOSTERS", sc2::UPGRADE_ID::VIKINGJOTUNBOOSTERS)
+		.value("VIRALMUNITIONS", sc2::UPGRADE_ID::VIRALMUNITIONS)
+		.value("VIRALPLASMA", sc2::UPGRADE_ID::VIRALPLASMA)
+		.value("VOIDRAYSPEEDUPGRADE", sc2::UPGRADE_ID::VOIDRAYSPEEDUPGRADE)
+		.value("VULTUREAUTOREPAIR", sc2::UPGRADE_ID::VULTUREAUTOREPAIR)
+		.value("WARPGATERESEARCH", sc2::UPGRADE_ID::WARPGATERESEARCH)
+		.value("WHITENAPALM", sc2::UPGRADE_ID::WHITENAPALM)
+		.value("WRAITHCLOAK", sc2::UPGRADE_ID::WRAITHCLOAK)
+		.value("X88TNAPALMUPGRADE", sc2::UPGRADE_ID::X88TNAPALMUPGRADE)
+		.value("YAMATOCANNON", sc2::UPGRADE_ID::YAMATOCANNON)
+		.value("ZERGBURROWMOVE", sc2::UPGRADE_ID::ZERGBURROWMOVE)
+		.value("ZERGFLYERARMORSLEVEL1", sc2::UPGRADE_ID::ZERGFLYERARMORSLEVEL1)
+		.value("ZERGFLYERARMORSLEVEL2", sc2::UPGRADE_ID::ZERGFLYERARMORSLEVEL2)
+		.value("ZERGFLYERARMORSLEVEL3", sc2::UPGRADE_ID::ZERGFLYERARMORSLEVEL3)
+		.value("ZERGFLYERWEAPONSLEVEL1", sc2::UPGRADE_ID::ZERGFLYERWEAPONSLEVEL1)
+		.value("ZERGFLYERWEAPONSLEVEL2", sc2::UPGRADE_ID::ZERGFLYERWEAPONSLEVEL2)
+		.value("ZERGFLYERWEAPONSLEVEL3", sc2::UPGRADE_ID::ZERGFLYERWEAPONSLEVEL3)
+		.value("ZERGGROUNDARMORSLEVEL1", sc2::UPGRADE_ID::ZERGGROUNDARMORSLEVEL1)
+		.value("ZERGGROUNDARMORSLEVEL2", sc2::UPGRADE_ID::ZERGGROUNDARMORSLEVEL2)
+		.value("ZERGGROUNDARMORSLEVEL3", sc2::UPGRADE_ID::ZERGGROUNDARMORSLEVEL3)
+		.value("ZERGLINGATTACKSPEED", sc2::UPGRADE_ID::ZERGLINGATTACKSPEED)
+		.value("ZERGLINGMOVEMENTSPEED", sc2::UPGRADE_ID::ZERGLINGMOVEMENTSPEED)
+		.value("ZERGMELEEWEAPONSLEVEL1", sc2::UPGRADE_ID::ZERGMELEEWEAPONSLEVEL1)
+		.value("ZERGMELEEWEAPONSLEVEL2", sc2::UPGRADE_ID::ZERGMELEEWEAPONSLEVEL2)
+		.value("ZERGMELEEWEAPONSLEVEL3", sc2::UPGRADE_ID::ZERGMELEEWEAPONSLEVEL3)
+		.value("ZERGMISSILEWEAPONSLEVEL1", sc2::UPGRADE_ID::ZERGMISSILEWEAPONSLEVEL1)
+		.value("ZERGMISSILEWEAPONSLEVEL2", sc2::UPGRADE_ID::ZERGMISSILEWEAPONSLEVEL2)
+		.value("ZERGMISSILEWEAPONSLEVEL3", sc2::UPGRADE_ID::ZERGMISSILEWEAPONSLEVEL3)
+		.value("_330MMBARRAGECANNONS", sc2::UPGRADE_ID::_330MMBARRAGECANNONS);
+		
     py::enum_<sc2::BUFF_ID>(m, "BUFF_ID")
-       .value("INVALID", sc2::BUFF_ID::INVALID)
-       .value("GRAVITONBEAM", sc2::BUFF_ID::GRAVITONBEAM)
-       .value("GHOSTCLOAK", sc2::BUFF_ID::GHOSTCLOAK)
-       .value("BANSHEECLOAK", sc2::BUFF_ID::BANSHEECLOAK)
-       .value("POWERUSERWARPABLE", sc2::BUFF_ID::POWERUSERWARPABLE)
-       .value("QUEENSPAWNLARVATIMER", sc2::BUFF_ID::QUEENSPAWNLARVATIMER)
-       .value("GHOSTHOLDFIRE", sc2::BUFF_ID::GHOSTHOLDFIRE)
-       .value("GHOSTHOLDFIREB", sc2::BUFF_ID::GHOSTHOLDFIREB)
-       .value("EMPDECLOAK", sc2::BUFF_ID::EMPDECLOAK)
-       .value("FUNGALGROWTH", sc2::BUFF_ID::FUNGALGROWTH)
-       .value("GUARDIANSHIELD", sc2::BUFF_ID::GUARDIANSHIELD)
-       .value("TIMEWARPPRODUCTION", sc2::BUFF_ID::TIMEWARPPRODUCTION)
-       .value("NEURALPARASITE", sc2::BUFF_ID::NEURALPARASITE)
-       .value("STIMPACKMARAUDER", sc2::BUFF_ID::STIMPACKMARAUDER)
-       .value("SUPPLYDROP", sc2::BUFF_ID::SUPPLYDROP)
-       .value("STIMPACK", sc2::BUFF_ID::STIMPACK)
-       .value("PSISTORM", sc2::BUFF_ID::PSISTORM)
-       .value("CLOAKFIELDEFFECT", sc2::BUFF_ID::CLOAKFIELDEFFECT)
-       .value("CHARGING", sc2::BUFF_ID::CHARGING)
-       .value("SLOW", sc2::BUFF_ID::SLOW)
-       .value("CONTAMINATED", sc2::BUFF_ID::CONTAMINATED)
-       .value("BLINDINGCLOUDSTRUCTURE", sc2::BUFF_ID::BLINDINGCLOUDSTRUCTURE)
-       .value("ORACLEREVELATION", sc2::BUFF_ID::ORACLEREVELATION)
-       .value("VIPERCONSUMESTRUCTURE", sc2::BUFF_ID::VIPERCONSUMESTRUCTURE)
-       .value("BLINDINGCLOUD", sc2::BUFF_ID::BLINDINGCLOUD)
-       .value("MEDIVACSPEEDBOOST", sc2::BUFF_ID::MEDIVACSPEEDBOOST)
-       .value("PURIFY", sc2::BUFF_ID::PURIFY)
-       .value("ORACLEWEAPON", sc2::BUFF_ID::ORACLEWEAPON)
-       .value("IMMORTALOVERLOAD", sc2::BUFF_ID::IMMORTALOVERLOAD)
-       .value("LOCKON", sc2::BUFF_ID::LOCKON)
-       .value("SEEKERMISSILE", sc2::BUFF_ID::SEEKERMISSILE)
-       .value("TEMPORALFIELD", sc2::BUFF_ID::TEMPORALFIELD)
-       .value("VOIDRAYSWARMDAMAGEBOOST", sc2::BUFF_ID::VOIDRAYSWARMDAMAGEBOOST)
-       .value("ORACLESTASISTRAPTARGET", sc2::BUFF_ID::ORACLESTASISTRAPTARGET)
-       .value("PARASITICBOMB", sc2::BUFF_ID::PARASITICBOMB)
-       .value("PARASITICBOMBUNITKU", sc2::BUFF_ID::PARASITICBOMBUNITKU)
-       .value("PARASITICBOMBSECONDARYUNITSEARCH", sc2::BUFF_ID::PARASITICBOMBSECONDARYUNITSEARCH)
-       .value("LURKERHOLDFIREB", sc2::BUFF_ID::LURKERHOLDFIREB)
-       .value("CHANNELSNIPECOMBAT", sc2::BUFF_ID::CHANNELSNIPECOMBAT)
-       .value("TEMPESTDISRUPTIONBLASTSTUNBEHAVIOR", sc2::BUFF_ID::TEMPESTDISRUPTIONBLASTSTUNBEHAVIOR)
-       .value("CARRYMINERALFIELDMINERALS", sc2::BUFF_ID::CARRYMINERALFIELDMINERALS)
-       .value("CARRYHIGHYIELDMINERALFIELDMINERALS", sc2::BUFF_ID::CARRYHIGHYIELDMINERALFIELDMINERALS)
-       .value("CARRYHARVESTABLEVESPENEGEYSERGAS", sc2::BUFF_ID::CARRYHARVESTABLEVESPENEGEYSERGAS)
-       .value("CARRYHARVESTABLEVESPENEGEYSERGASPROTOSS", sc2::BUFF_ID::CARRYHARVESTABLEVESPENEGEYSERGASPROTOSS)
-       .value("CARRYHARVESTABLEVESPENEGEYSERGASZERG", sc2::BUFF_ID::CARRYHARVESTABLEVESPENEGEYSERGASZERG);
+		.value("ACCELERATIONZONEFLYINGTEMPORALFIELD", sc2::BUFF_ID::ACCELERATIONZONEFLYINGTEMPORALFIELD)
+		.value("ACCELERATIONZONETEMPORALFIELD", sc2::BUFF_ID::ACCELERATIONZONETEMPORALFIELD)
+		.value("ADEPTDEATHCHECK", sc2::BUFF_ID::ADEPTDEATHCHECK)
+		.value("AGGRESSIVEMUTATION", sc2::BUFF_ID::AIDANGERBUFF)
+		.value("AMORPHOUSARMORCLOUD", sc2::BUFF_ID::AMORPHOUSARMORCLOUD)
+		.value("ANTIAIRWEAPONSWITCHCOOLDOWN", sc2::BUFF_ID::ANTIAIRWEAPONSWITCHCOOLDOWN)
+		.value("ARBITERMPCLOAKFIELDEFFECT", sc2::BUFF_ID::ARBITERMPCLOAKFIELDEFFECT)
+		.value("ARBITERMPSTASISFIELD", sc2::BUFF_ID::ARBITERMPSTASISFIELD)
+		.value("ARTANISCLOAKINGFIELDEFFECT", sc2::BUFF_ID::ARTANISCLOAKINGFIELDEFFECT)
+		.value("ARTANISTEMPORALRIFTUNIT", sc2::BUFF_ID::ARTANISTEMPORALRIFTUNIT)
+		.value("ARTANISVORTEXBEHAVIOR", sc2::BUFF_ID::ARTANISVORTEXBEHAVIOR)
+		.value("AUTOMATEDREPAIR", sc2::BUFF_ID::AUTOMATEDREPAIR)
+		.value("BANSHEECLOAK", sc2::BUFF_ID::BANSHEECLOAK)
+		.value("BANSHEECLOAKCROSSSPECTRUMDAMPENERS", sc2::BUFF_ID::BANSHEECLOAKCROSSSPECTRUMDAMPENERS)
+		.value("BATTLECRUISERANTIAIRDISABLE", sc2::BUFF_ID::BATTLECRUISERANTIAIRDISABLE)
+		.value("BENIGN", sc2::BUFF_ID::BENIGN)
+		.value("BIOSTASIS", sc2::BUFF_ID::BIOSTASIS)
+		.value("BLINDINGCLOUD", sc2::BUFF_ID::BLINDINGCLOUD)
+		.value("BLINDINGCLOUDSTRUCTURE", sc2::BUFF_ID::BLINDINGCLOUDSTRUCTURE)
+		.value("BUILDINGSCARAB", sc2::BUFF_ID::BUILDINGSCARAB)
+		.value("BUILDINGSHIELD", sc2::BUFF_ID::BUILDINGSHIELD)
+		.value("BUILDINGSTASIS", sc2::BUFF_ID::BUILDINGSTASIS)
+		.value("BURROWCHARGE", sc2::BUFF_ID::BURROWCHARGE)
+		.value("BURSTCAPACITORSDAMAGEBUFF", sc2::BUFF_ID::BURSTCAPACITORSDAMAGEBUFF)
+		.value("BYPASSARMORDEBUFFONE", sc2::BUFF_ID::BYPASSARMORDEBUFFONE)
+		.value("BYPASSARMORDEBUFFTHREE", sc2::BUFF_ID::BYPASSARMORDEBUFFTHREE)
+		.value("BYPASSARMORDEBUFFTWO", sc2::BUFF_ID::BYPASSARMORDEBUFFTWO)
+		.value("CANNONRADAR", sc2::BUFF_ID::CANNONRADAR)
+		.value("CAPRESOURCE", sc2::BUFF_ID::CAPRESOURCE)
+		.value("CARRYHARVESTABLEVESPENEGEYSERGAS", sc2::BUFF_ID::CARRYHARVESTABLEVESPENEGEYSERGAS)
+		.value("CARRYHARVESTABLEVESPENEGEYSERGASPROTOSS", sc2::BUFF_ID::CARRYHARVESTABLEVESPENEGEYSERGASPROTOSS)
+		.value("CARRYHARVESTABLEVESPENEGEYSERGASZERG", sc2::BUFF_ID::CARRYHARVESTABLEVESPENEGEYSERGASZERG)
+		.value("CARRYHIGHYIELDMINERALFIELDMINERALS", sc2::BUFF_ID::CARRYHIGHYIELDMINERALFIELDMINERALS)
+		.value("CARRYMINERALFIELDMINERALS", sc2::BUFF_ID::CARRYMINERALFIELDMINERALS)
+		.value("CHANNELSNIPECOMBAT", sc2::BUFF_ID::CHANNELSNIPECOMBAT)
+		.value("CHARGEUP", sc2::BUFF_ID::CHARGEUP)
+		.value("CHARGING", sc2::BUFF_ID::CHARGING)
+		.value("CHRONOBOOSTENERGYCOST", sc2::BUFF_ID::CHRONOBOOSTENERGYCOST)
+		.value("CLOAKFIELDEFFECT", sc2::BUFF_ID::CLOAKFIELDEFFECT)
+		.value("CLOAKINGFIELDTARGETED", sc2::BUFF_ID::CLOAKINGFIELDTARGETED)
+		.value("CLOAKUNIT", sc2::BUFF_ID::CLOAKUNIT)
+		.value("COLLAPSIBLEROCKTOWERCONJOINEDSEARCH", sc2::BUFF_ID::COLLAPSIBLEROCKTOWERCONJOINEDSEARCH)
+		.value("COLLAPSIBLEROCKTOWERRAMPDIAGONALCONJOINEDSEARCH", sc2::BUFF_ID::COLLAPSIBLEROCKTOWERRAMPDIAGONALCONJOINEDSEARCH)
+		.value("COLLAPSIBLETERRANTOWERCONJOINEDSEARCH", sc2::BUFF_ID::COLLAPSIBLETERRANTOWERCONJOINEDSEARCH)
+		.value("COLLAPSIBLETERRANTOWERRAMPDIAGONALCONJOINEDSEARCH", sc2::BUFF_ID::COLLAPSIBLETERRANTOWERRAMPDIAGONALCONJOINEDSEARCH)
+		.value("COLONYINFESTATION", sc2::BUFF_ID::COLONYINFESTATION)
+		.value("CONTAMINATED", sc2::BUFF_ID::CONTAMINATED)
+		.value("CORRUPTION", sc2::BUFF_ID::CORRUPTION)
+		.value("CORRUPTIONBOMBDAMAGE", sc2::BUFF_ID::CORRUPTIONBOMBDAMAGE)
+		.value("CORRUPTORGROUNDATTACKDEBUFF", sc2::BUFF_ID::CORRUPTORGROUNDATTACKDEBUFF)
+		.value("CORRUPTORINFESTING", sc2::BUFF_ID::CORRUPTORINFESTING)
+		.value("CORSAIRMPDISRUPTIONWEB", sc2::BUFF_ID::CORSAIRMPDISRUPTIONWEB)
+		.value("DEFENSIVEMATRIX", sc2::BUFF_ID::DEFENSIVEMATRIX)
+		.value("DEFILERMPCONSUME", sc2::BUFF_ID::DEFILERMPCONSUME)
+		.value("DEFILERMPDARKSWARM", sc2::BUFF_ID::DEFILERMPDARKSWARM)
+		.value("DEFILERMPPLAGUE", sc2::BUFF_ID::DEFILERMPPLAGUE)
+		.value("DEVOURERMPACIDSPORES", sc2::BUFF_ID::DEVOURERMPACIDSPORES)
+		.value("DIGESTERCREEPSPRAYVISION", sc2::BUFF_ID::DIGESTERCREEPSPRAYVISION)
+		.value("DISABLEABILS", sc2::BUFF_ID::DISABLEABILS)
+		.value("DISABLEINTERCEPTORS", sc2::BUFF_ID::DISABLEINTERCEPTORS)
+		.value("DISRUPTORPUSH", sc2::BUFF_ID::DISRUPTORPUSH)
+		.value("DOMINATION", sc2::BUFF_ID::DOMINATION)
+		.value("DOOMDAMAGEDELAY", sc2::BUFF_ID::DOOMDAMAGEDELAY)
+		.value("DUTCHMARAUDERSLOW", sc2::BUFF_ID::DUTCHMARAUDERSLOW)
+		.value("EMPBURST", sc2::BUFF_ID::EMPBURST)
+		.value("EMPDECLOAK", sc2::BUFF_ID::EMPDECLOAK)
+		.value("EMPDRAIN", sc2::BUFF_ID::EMPDRAIN)
+		.value("ENGAGE", sc2::BUFF_ID::ENGAGE)
+		.value("ETHEREAL", sc2::BUFF_ID::ETHEREAL)
+		.value("EXTENDBRIDGEEXTENDINGBRIDGENEWIDE10OUT", sc2::BUFF_ID::EXTENDBRIDGEEXTENDINGBRIDGENEWIDE10OUT)
+		.value("EXTENDBRIDGEEXTENDINGBRIDGENEWIDE12OUT", sc2::BUFF_ID::EXTENDBRIDGEEXTENDINGBRIDGENEWIDE12OUT)
+		.value("EXTENDBRIDGEEXTENDINGBRIDGENEWIDE8OUT", sc2::BUFF_ID::EXTENDBRIDGEEXTENDINGBRIDGENEWIDE8OUT)
+		.value("EXTENDBRIDGEEXTENDINGBRIDGENWWIDE10OUT", sc2::BUFF_ID::EXTENDBRIDGEEXTENDINGBRIDGENWWIDE10OUT)
+		.value("EXTENDBRIDGEEXTENDINGBRIDGENWWIDE12OUT", sc2::BUFF_ID::EXTENDBRIDGEEXTENDINGBRIDGENWWIDE12OUT)
+		.value("EXTENDBRIDGEEXTENDINGBRIDGENWWIDE8OUT", sc2::BUFF_ID::EXTENDBRIDGEEXTENDINGBRIDGENWWIDE8OUT)
+		.value("EYESTALK", sc2::BUFF_ID::EYESTALK)
+		.value("FUNGALGROWTH", sc2::BUFF_ID::FUNGALGROWTH)
+		.value("GHOSTBLAST", sc2::BUFF_ID::GHOSTBLAST)
+		.value("GHOSTCLOAK", sc2::BUFF_ID::GHOSTCLOAK)
+		.value("GHOSTHOLDFIRE", sc2::BUFF_ID::GHOSTHOLDFIRE)
+		.value("GHOSTHOLDFIREB", sc2::BUFF_ID::GHOSTHOLDFIREB)
+		.value("GHOSTSNIPEDOT", sc2::BUFF_ID::GHOSTSNIPEDOT)
+		.value("GRAVITONBEAM", sc2::BUFF_ID::GRAVITONBEAM)
+		.value("GRAVITONPRISON", sc2::BUFF_ID::GRAVITONPRISON)
+		.value("HEROICBUFF03", sc2::BUFF_ID::HEROICBUFF03)
+		.value("HIDDEN", sc2::BUFF_ID::HIDDEN)
+		.value("HYBRIDCZERGYROOTS", sc2::BUFF_ID::HYBRIDCZERGYROOTS)
+		.value("HYBRIDFZERGYROOTS", sc2::BUFF_ID::HYBRIDFZERGYROOTS)
+		.value("IMMORTALOVERLOAD", sc2::BUFF_ID::IMMORTALOVERLOAD)
+		.value("INCAPACITATED", sc2::BUFF_ID::INCAPACITATED)
+		.value("INFESTORDISEASE", sc2::BUFF_ID::INFESTORDISEASE)
+		.value("INFESTORENSNARE", sc2::BUFF_ID::INFESTORENSNARE)
+		.value("INFESTORENSNAREMAKEPRECURSORREHEIGHTSOURCE", sc2::BUFF_ID::INFESTORENSNAREMAKEPRECURSORREHEIGHTSOURCE)
+		.value("INHIBITORZONEFLYINGTEMPORALFIELD", sc2::BUFF_ID::INHIBITORZONEFLYINGTEMPORALFIELD)
+		.value("INHIBITORZONETEMPORALFIELD", sc2::BUFF_ID::INHIBITORZONETEMPORALFIELD)
+		.value("INVALID", sc2::BUFF_ID::INVALID)
+		.value("INVULNERABILITYSHIELD", sc2::BUFF_ID::INVULNERABILITYSHIELD)
+		.value("IRRADIATE", sc2::BUFF_ID::IRRADIATE)
+		.value("ITEMGRAVITYBOMBS", sc2::BUFF_ID::ITEMGRAVITYBOMBS)
+		.value("JUMPSTOMPFSTUN", sc2::BUFF_ID::JUMPSTOMPFSTUN)
+		.value("JUMPSTOMPSTUN", sc2::BUFF_ID::JUMPSTOMPSTUN)
+		.value("KARASSPSISTORM", sc2::BUFF_ID::KARASSPSISTORM)
+		.value("LASERSIGHT", sc2::BUFF_ID::LASERSIGHT)
+		.value("LASERTARGETING", sc2::BUFF_ID::LASERTARGETING)
+		.value("LEECH", sc2::BUFF_ID::LEECH)
+		.value("LEECHDISABLEABILITIES", sc2::BUFF_ID::LEECHDISABLEABILITIES)
+		.value("LIGHTNINGBOMB", sc2::BUFF_ID::LIGHTNINGBOMB)
+		.value("LIGHTOFAIUR", sc2::BUFF_ID::LIGHTOFAIUR)
+		.value("LOCKDOWNB", sc2::BUFF_ID::LOCKDOWNB)
+		.value("LOCKON", sc2::BUFF_ID::LOCKON)
+		.value("LURKERHOLDFIRE", sc2::BUFF_ID::LURKERHOLDFIRE)
+		.value("LURKERHOLDFIREB", sc2::BUFF_ID::LURKERHOLDFIREB)
+		.value("MAXIMUMTHRUST", sc2::BUFF_ID::MAXIMUMTHRUST)
+		.value("MEDIVACSPEEDBOOST", sc2::BUFF_ID::MEDIVACSPEEDBOOST)
+		.value("MERCAIRDROPDELAY", sc2::BUFF_ID::MERCAIRDROPDELAY)
+		.value("MERCENARYCYCLONEMISSILES", sc2::BUFF_ID::MERCENARYCYCLONEMISSILES)
+		.value("MERCENARYSENSORDISH", sc2::BUFF_ID::MERCENARYSENSORDISH)
+		.value("MERCENARYSHIELD", sc2::BUFF_ID::MERCENARYSHIELD)
+		.value("MERCGROUNDDROP", sc2::BUFF_ID::MERCGROUNDDROP)
+		.value("MERCGROUNDDROPDELAY", sc2::BUFF_ID::MERCGROUNDDROPDELAY)
+		.value("MINDBLASTSTUN", sc2::BUFF_ID::MINDBLASTSTUN)
+		.value("MINDCONTROL", sc2::BUFF_ID::MINDCONTROL)
+		.value("MINEDRONECOUNTDOWN", sc2::BUFF_ID::MINEDRONECOUNTDOWN)
+		.value("MINEDRONEDOT", sc2::BUFF_ID::MINEDRONEDOT)
+		.value("MOTHERSHIPCOREENERGIZEVISUAL", sc2::BUFF_ID::MOTHERSHIPCOREENERGIZEVISUAL)
+		.value("MOTHERSHIPSTASIS", sc2::BUFF_ID::MOTHERSHIPSTASIS)
+		.value("MOTHERSHIPSTASISCASTER", sc2::BUFF_ID::MOTHERSHIPSTASISCASTER)
+		.value("NAPALM", sc2::BUFF_ID::NAPALM)
+		.value("NEURALPARASITE", sc2::BUFF_ID::NEURALPARASITE)
+		.value("NEURALPARASITEWAIT", sc2::BUFF_ID::NEURALPARASITEWAIT)
+		.value("NEXUSINVULNERABILITY", sc2::BUFF_ID::NEXUSINVULNERABILITY)
+		.value("NEXUSPHASESHIFT", sc2::BUFF_ID::NEXUSPHASESHIFT)
+		.value("NEXUSSHIELDOVERCHARGE", sc2::BUFF_ID::NEXUSSHIELDOVERCHARGE)
+		.value("NEXUSSHIELDRECHARGEONPYLONBEHAVIOR", sc2::BUFF_ID::NEXUSSHIELDRECHARGEONPYLONBEHAVIOR)
+		.value("NEXUSSHIELDRECHARGEONPYLONBEHAVIORSECONDARYONTARGET", sc2::BUFF_ID::NEXUSSHIELDRECHARGEONPYLONBEHAVIORSECONDARYONTARGET)
+		.value("NULLFIELD", sc2::BUFF_ID::NULLFIELD)
+		.value("NYDUSWORMLAVAINSTANTDEATH", sc2::BUFF_ID::NYDUSWORMLAVAINSTANTDEATH)
+		.value("ORACLECLOAKFIELD", sc2::BUFF_ID::ORACLECLOAKFIELD)
+		.value("ORACLECLOAKFIELDEFFECT", sc2::BUFF_ID::ORACLECLOAKFIELDEFFECT)
+		.value("ORACLEPHASESHIFT", sc2::BUFF_ID::ORACLEPHASESHIFT)
+		.value("ORACLEREVELATION", sc2::BUFF_ID::ORACLEREVELATION)
+		.value("ORACLESTASISTRAPTARGET", sc2::BUFF_ID::ORACLESTASISTRAPTARGET)
+		.value("ORACLEWEAPON", sc2::BUFF_ID::ORACLEWEAPON)
+		.value("OVERCHARGE", sc2::BUFF_ID::OVERCHARGE)
+		.value("OVERCHARGEDAMAGE", sc2::BUFF_ID::OVERCHARGEDAMAGE)
+		.value("OVERCHARGESPEEDBOOST", sc2::BUFF_ID::OVERCHARGESPEEDBOOST)
+		.value("PARASITICBOMB", sc2::BUFF_ID::PARASITICBOMB)
+		.value("PARASITICBOMBDELAYTIMEDLIFE", sc2::BUFF_ID::PARASITICBOMBDELAYTIMEDLIFE)
+		.value("PARASITICBOMBSECONDARYUNITSEARCH", sc2::BUFF_ID::PARASITICBOMBSECONDARYUNITSEARCH)
+		.value("PARASITICBOMBUNITKU", sc2::BUFF_ID::PARASITICBOMBUNITKU)
+		.value("PERMANENTLYCLOAKED", sc2::BUFF_ID::PERMANENTLYCLOAKED)
+		.value("PERSONALCLOAKINGFREE", sc2::BUFF_ID::PERSONALCLOAKINGFREE)
+		.value("PHASESHIELD", sc2::BUFF_ID::PHASESHIELD)
+		.value("POWERUSERWARPABLE", sc2::BUFF_ID::POWERUSERWARPABLE)
+		.value("PREDATORCLOAKING", sc2::BUFF_ID::PREDATORCLOAKING)
+		.value("PROTECTIVEBARRIER", sc2::BUFF_ID::PROTECTIVEBARRIER)
+		.value("PSIDISRUPTION", sc2::BUFF_ID::PSIDISRUPTION)
+		.value("PSIONICSHOCKWAVEHEIGHTANDSTUN", sc2::BUFF_ID::PSIONICSHOCKWAVEHEIGHTANDSTUN)
+		.value("PSISTORM", sc2::BUFF_ID::PSISTORM)
+		.value("PSYTROUSOXIDE", sc2::BUFF_ID::PSYTROUSOXIDE)
+		.value("PURIFICATIONNOVA", sc2::BUFF_ID::PURIFICATIONNOVA)
+		.value("PURIFICATIONNOVAPOST", sc2::BUFF_ID::PURIFICATIONNOVAPOST)
+		.value("PURIFIERPLANETCRACKERCHARGE", sc2::BUFF_ID::PURIFIERPLANETCRACKERCHARGE)
+		.value("PURIFY", sc2::BUFF_ID::PURIFY)
+		.value("QUEENKNOCKDOWN", sc2::BUFF_ID::QUEENKNOCKDOWN)
+		.value("QUEENMPENSNARE", sc2::BUFF_ID::QUEENMPENSNARE)
+		.value("QUEENSPAWNLARVATIMER", sc2::BUFF_ID::QUEENSPAWNLARVATIMER)
+		.value("RADAR25", sc2::BUFF_ID::RADAR25)
+		.value("RAVENSCRAMBLERMISSILE", sc2::BUFF_ID::RAVENSCRAMBLERMISSILE)
+		.value("RAVENSHREDDERMISSILEARMORREDUCTION", sc2::BUFF_ID::RAVENSHREDDERMISSILEARMORREDUCTION)
+		.value("RAVENSHREDDERMISSILEARMORREDUCTIONUISUBTRUCT", sc2::BUFF_ID::RAVENSHREDDERMISSILEARMORREDUCTIONUISUBTRUCT)
+		.value("RAVENSHREDDERMISSILETIMEOUT", sc2::BUFF_ID::RAVENSHREDDERMISSILETIMEOUT)
+		.value("RAVENSHREDDERMISSILETINT", sc2::BUFF_ID::RAVENSHREDDERMISSILETINT)
+		.value("RAYNORMISSILETIMEDLIFE", sc2::BUFF_ID::RAYNORMISSILETIMEDLIFE)
+		.value("RAYNORTIMEBOMBMISSILE", sc2::BUFF_ID::RAYNORTIMEBOMBMISSILE)
+		.value("RAYNORTIMEBOMBUNIT", sc2::BUFF_ID::RAYNORTIMEBOMBUNIT)
+		.value("RELEASEINTERCEPTORSBEACON", sc2::BUFF_ID::RELEASEINTERCEPTORSBEACON)
+		.value("RELEASEINTERCEPTORSCOOLDOWN", sc2::BUFF_ID::RELEASEINTERCEPTORSCOOLDOWN)
+		.value("RELEASEINTERCEPTORSTIMEDLIFEWARNING", sc2::BUFF_ID::RELEASEINTERCEPTORSTIMEDLIFEWARNING)
+		.value("RELEASEINTERCEPTORSWANDERDELAY", sc2::BUFF_ID::RELEASEINTERCEPTORSWANDERDELAY)
+		.value("RESCUE", sc2::BUFF_ID::RESCUE)
+		.value("RESONATINGGLAIVESPHASESHIFT", sc2::BUFF_ID::RESONATINGGLAIVESPHASESHIFT)
+		.value("RESOURCESTUN", sc2::BUFF_ID::RESOURCESTUN)
+		.value("RESTORESHIELDS", sc2::BUFF_ID::RESTORESHIELDS)
+		.value("ROUGHTERRAINSEARCH", sc2::BUFF_ID::ROUGHTERRAINSEARCH)
+		.value("ROUGHTERRAINSLOW", sc2::BUFF_ID::ROUGHTERRAINSLOW)
+		.value("SCIENCEVESSELCLOAKFIELD", sc2::BUFF_ID::SCIENCEVESSELCLOAKFIELD)
+		.value("SCRYER", sc2::BUFF_ID::SCRYER)
+		.value("SCRYERFRIENDLY", sc2::BUFF_ID::SCRYERFRIENDLY)
+		.value("SEEKERMISSILE", sc2::BUFF_ID::SEEKERMISSILE)
+		.value("SEEKERMISSILETIMEOUT", sc2::BUFF_ID::SEEKERMISSILETIMEOUT)
+		.value("SELFREPAIR", sc2::BUFF_ID::SELFREPAIR)
+		.value("SHADOWCLONE", sc2::BUFF_ID::SHADOWCLONE)
+		.value("SHEEPBUSY", sc2::BUFF_ID::SHEEPBUSY)
+		.value("SHIFTDELAY", sc2::BUFF_ID::SHIFTDELAY)
+		.value("SHREDDERSWARMDAMAGEAPPLY", sc2::BUFF_ID::SHREDDERSWARMDAMAGEAPPLY)
+		.value("SLAYNELEMENTALGRABSTUN", sc2::BUFF_ID::SLAYNELEMENTALGRABSTUN)
+		.value("SLIMED", sc2::BUFF_ID::SLIMED)
+		.value("SLOW", sc2::BUFF_ID::SLOW)
+		.value("SPECTRECLOAKING", sc2::BUFF_ID::SPECTRECLOAKING)
+		.value("SPECTRECLOAKINGFREE", sc2::BUFF_ID::SPECTRECLOAKINGFREE)
+		.value("SPECTREHOLDFIRE", sc2::BUFF_ID::SPECTREHOLDFIRE)
+		.value("SPECTREHOLDFIREB", sc2::BUFF_ID::SPECTREHOLDFIREB)
+		.value("SPECTRELOCKDOWNB", sc2::BUFF_ID::SPECTRELOCKDOWNB)
+		.value("SPECTRESHIELD", sc2::BUFF_ID::SPECTRESHIELD)
+		.value("SPORECANNONMISSILE", sc2::BUFF_ID::SPORECANNONMISSILE)
+		.value("SS_BATTLECRUISERCOLLISIONCHECK", sc2::BUFF_ID::SS_BATTLECRUISERCOLLISIONCHECK)
+		.value("SS_BATTLECRUISERHUNTERSEEKERTIMEOUT", sc2::BUFF_ID::SS_BATTLECRUISERHUNTERSEEKERTIMEOUT)
+		.value("SS_BATTLECRUISERMISSILELAUNCHER", sc2::BUFF_ID::SS_BATTLECRUISERMISSILELAUNCHER)
+		.value("SS_CARRIERBOSSCOLLISIONCHECK", sc2::BUFF_ID::SS_CARRIERBOSSCOLLISIONCHECK)
+		.value("SS_CARRIERCOLLISIONCHECK", sc2::BUFF_ID::SS_CARRIERCOLLISIONCHECK)
+		.value("SS_CORRUPTORCOLLISIONCHECK", sc2::BUFF_ID::SS_CORRUPTORCOLLISIONCHECK)
+		.value("SS_CORRUPTORMISSILETARGETCHECK", sc2::BUFF_ID::SS_CORRUPTORMISSILETARGETCHECK)
+		.value("SS_FIGHTERBOMBMISSILEDEATH", sc2::BUFF_ID::SS_FIGHTERBOMBMISSILEDEATH)
+		.value("SS_FIGHTERDRONEDAMAGERESPONSE", sc2::BUFF_ID::SS_FIGHTERDRONEDAMAGERESPONSE)
+		.value("SS_INTERCEPTORCOLLISIONCHECK", sc2::BUFF_ID::SS_INTERCEPTORCOLLISIONCHECK)
+		.value("SS_INVULNERABLE", sc2::BUFF_ID::SS_INVULNERABLE)
+		.value("SS_LEVIATHANBOMBCOLLISIONCHECK", sc2::BUFF_ID::SS_LEVIATHANBOMBCOLLISIONCHECK)
+		.value("SS_LEVIATHANBOMBEXPLODETIMER", sc2::BUFF_ID::SS_LEVIATHANBOMBEXPLODETIMER)
+		.value("SS_LEVIATHANBOMBMISSILETARGETCHECK", sc2::BUFF_ID::SS_LEVIATHANBOMBMISSILETARGETCHECK)
+		.value("SS_LEVIATHANCOLLISIONCHECK", sc2::BUFF_ID::SS_LEVIATHANCOLLISIONCHECK)
+		.value("SS_LEVIATHANTENTACLEMISSILESCANSWAPDELAY", sc2::BUFF_ID::SS_LEVIATHANTENTACLEMISSILESCANSWAPDELAY)
+		.value("SS_LEVIATHANTENTACLEMISSILETARGETCHECK", sc2::BUFF_ID::SS_LEVIATHANTENTACLEMISSILETARGETCHECK)
+		.value("SS_LEVIATHANTENTACLEMISSILETARGETCHECKINVERTED", sc2::BUFF_ID::SS_LEVIATHANTENTACLEMISSILETARGETCHECKINVERTED)
+		.value("SS_LEVIATHANTENTACLETARGETDEATHDELAY", sc2::BUFF_ID::SS_LEVIATHANTENTACLETARGETDEATHDELAY)
+		.value("SS_LIGHTNINGPROJECTOR", sc2::BUFF_ID::SS_LIGHTNINGPROJECTOR)
+		.value("SS_LIGHTNINGPROJECTORCOLLISIONCHECK", sc2::BUFF_ID::SS_LIGHTNINGPROJECTORCOLLISIONCHECK)
+		.value("SS_MAXACCELERATION", sc2::BUFF_ID::SS_MAXACCELERATION)
+		.value("SS_MAXSPEED", sc2::BUFF_ID::SS_MAXSPEED)
+		.value("SS_MISSILETARGETCHECK", sc2::BUFF_ID::SS_MISSILETARGETCHECK)
+		.value("SS_MISSILETARGETCHECKVIKING", sc2::BUFF_ID::SS_MISSILETARGETCHECKVIKING)
+		.value("SS_MISSILETARGETCHECKVIKINGDRONE", sc2::BUFF_ID::SS_MISSILETARGETCHECKVIKINGDRONE)
+		.value("SS_MISSILETARGETCHECKVIKINGSTRONG1", sc2::BUFF_ID::SS_MISSILETARGETCHECKVIKINGSTRONG1)
+		.value("SS_MISSILETARGETCHECKVIKINGSTRONG2", sc2::BUFF_ID::SS_MISSILETARGETCHECKVIKINGSTRONG2)
+		.value("SS_MISSILETIMEOUT", sc2::BUFF_ID::SS_MISSILETIMEOUT)
+		.value("SS_PHOENIXCOLLISIONCHECK", sc2::BUFF_ID::SS_PHOENIXCOLLISIONCHECK)
+		.value("SS_POWERUPDIAGONAL1", sc2::BUFF_ID::SS_POWERUPDIAGONAL1)
+		.value("SS_POWERUPDIAGONAL2", sc2::BUFF_ID::SS_POWERUPDIAGONAL2)
+		.value("SS_POWERUPHEALTH1", sc2::BUFF_ID::SS_POWERUPHEALTH1)
+		.value("SS_POWERUPHEALTH2", sc2::BUFF_ID::SS_POWERUPHEALTH2)
+		.value("SS_POWERUPMORPHTOBOMB", sc2::BUFF_ID::SS_POWERUPMORPHTOBOMB)
+		.value("SS_POWERUPMORPHTOHEALTH", sc2::BUFF_ID::SS_POWERUPMORPHTOHEALTH)
+		.value("SS_POWERUPMORPHTOSIDEMISSILES", sc2::BUFF_ID::SS_POWERUPMORPHTOSIDEMISSILES)
+		.value("SS_POWERUPMORPHTOSTRONGERMISSILES", sc2::BUFF_ID::SS_POWERUPMORPHTOSTRONGERMISSILES)
+		.value("SS_POWERUPSTRONG", sc2::BUFF_ID::SS_POWERUPSTRONG)
+		.value("SS_SCIENCEVESSELCOLLISIONCHECK", sc2::BUFF_ID::SS_SCIENCEVESSELCOLLISIONCHECK)
+		.value("SS_SCOURGECOLLISIONCHECK", sc2::BUFF_ID::SS_SCOURGECOLLISIONCHECK)
+		.value("SS_SCOURGEDEATH", sc2::BUFF_ID::SS_SCOURGEDEATH)
+		.value("SS_SCOURGEMISSILETARGETCHECK", sc2::BUFF_ID::SS_SCOURGEMISSILETARGETCHECK)
+		.value("SS_SCOUTCOLLISIONCHECK", sc2::BUFF_ID::SS_SCOUTCOLLISIONCHECK)
+		.value("SS_STRONGERENEMYBUFF", sc2::BUFF_ID::SS_STRONGERENEMYBUFF)
+		.value("SS_SWARMGUARDIANCOLLISIONCHECK", sc2::BUFF_ID::SS_SWARMGUARDIANCOLLISIONCHECK)
+		.value("SS_TERRATRONARMMISSILETARGETCHECK", sc2::BUFF_ID::SS_TERRATRONARMMISSILETARGETCHECK)
+		.value("SS_TERRATRONCOLLISIONCHECK", sc2::BUFF_ID::SS_TERRATRONCOLLISIONCHECK)
+		.value("SS_TERRATRONMISSILELAUNCHER", sc2::BUFF_ID::SS_TERRATRONMISSILELAUNCHER)
+		.value("SS_TERRATRONMISSILESPINNERCOLLISIONCHECK", sc2::BUFF_ID::SS_TERRATRONMISSILESPINNERCOLLISIONCHECK)
+		.value("SS_TERRATRONMISSILESPINNERMISSILELAUNCHER", sc2::BUFF_ID::SS_TERRATRONMISSILESPINNERMISSILELAUNCHER)
+		.value("SS_TERRATRONSAWCOLLISIONCHECK", sc2::BUFF_ID::SS_TERRATRONSAWCOLLISIONCHECK)
+		.value("SS_TERRATRONSTUN", sc2::BUFF_ID::SS_TERRATRONSTUN)
+		.value("SS_VIKINGRESPAWN", sc2::BUFF_ID::SS_VIKINGRESPAWN)
+		.value("SS_WRAITHCOLLISIONCHECK", sc2::BUFF_ID::SS_WRAITHCOLLISIONCHECK)
+		.value("STASIS", sc2::BUFF_ID::STASIS)
+		.value("STIMPACK", sc2::BUFF_ID::STIMPACK)
+		.value("STIMPACKMARAUDER", sc2::BUFF_ID::STIMPACKMARAUDER)
+		.value("STUNROUNDINITIALBEHAVIOR", sc2::BUFF_ID::STUNROUNDINITIALBEHAVIOR)
+		.value("SUPPLYDROP", sc2::BUFF_ID::SUPPLYDROP)
+		.value("TAUNTB", sc2::BUFF_ID::TAUNTB)
+		.value("TEMPESTDISRUPTIONBLASTSTUNBEHAVIOR", sc2::BUFF_ID::TEMPESTDISRUPTIONBLASTSTUNBEHAVIOR)
+		.value("TEMPORALFIELD", sc2::BUFF_ID::TEMPORALFIELD)
+		.value("TEMPORALRIFTUNIT", sc2::BUFF_ID::TEMPORALRIFTUNIT)
+		.value("TESTATTRIBUTE", sc2::BUFF_ID::TESTATTRIBUTE)
+		.value("TESTVETERANCY", sc2::BUFF_ID::TESTVETERANCY)
+		.value("TIMESCALECONVERSIONBEHAVIOR", sc2::BUFF_ID::TIMESCALECONVERSIONBEHAVIOR)
+		.value("TIMESTOPSTUN", sc2::BUFF_ID::TIMESTOPSTUN)
+		.value("TIMEWARPPRODUCTION", sc2::BUFF_ID::TIMEWARPPRODUCTION)
+		.value("TRANSFUSION", sc2::BUFF_ID::TRANSFUSION)
+		.value("TRANSIENTMORPH", sc2::BUFF_ID::TRANSIENTMORPH)
+		.value("TYCHUSCOMMANDOSTIMPACK", sc2::BUFF_ID::TYCHUSCOMMANDOSTIMPACK)
+		.value("ULTRASONICPULSESTUN", sc2::BUFF_ID::ULTRASONICPULSESTUN)
+		.value("VIPERCONSUMESTRUCTURE", sc2::BUFF_ID::VIPERCONSUMESTRUCTURE)
+		.value("VIRALPLASMA", sc2::BUFF_ID::VIRALPLASMA)
+		.value("VOIDMPIMMORTALREVIVESUPRESSED", sc2::BUFF_ID::VOIDMPIMMORTALREVIVESUPRESSED)
+		.value("VOIDRAYSWARMDAMAGEBOOST", sc2::BUFF_ID::VOIDRAYSWARMDAMAGEBOOST)
+		.value("VOIDSIPHON", sc2::BUFF_ID::VOIDSIPHON)
+		.value("VOODOOLOCKDOWN", sc2::BUFF_ID::VOODOOLOCKDOWN)
+		.value("VOODOOSHIELD", sc2::BUFF_ID::VOODOOSHIELD)
+		.value("VORTEXBEHAVIOR", sc2::BUFF_ID::VORTEXBEHAVIOR)
+		.value("VORTEXBEHAVIORENEMY", sc2::BUFF_ID::VORTEXBEHAVIORENEMY)
+		.value("VORTEXBEHAVIORERADICATOR", sc2::BUFF_ID::VORTEXBEHAVIORERADICATOR)
+		.value("WATER", sc2::BUFF_ID::WATER)
+		.value("WRAITHCLOAK", sc2::BUFF_ID::WRAITHCLOAK)
+		.value("ZERATULSTUN", sc2::BUFF_ID::ZERATULSTUN)
+		.value("_250MMSTRIKECANNONS", sc2::BUFF_ID::_250MMSTRIKECANNONS)
+		.value("_330MMBARRAGECANNONS", sc2::BUFF_ID::_330MMBARRAGECANNONS);
+
+	py::enum_<sc2::EFFECT_ID>(m, "EFFECT_ID")
+		.value("BLINDINGCLOUD", sc2::EFFECT_ID::BLINDINGCLOUD)
+		.value("CORROSIVEBILE", sc2::EFFECT_ID::CORROSIVEBILE)
+		.value("GUARDIANSHIELD", sc2::EFFECT_ID::GUARDIANSHIELD)
+		.value("INVALID", sc2::EFFECT_ID::INVALID)
+		.value("LIBERATORDEFENDERZONE", sc2::EFFECT_ID::LIBERATORDEFENDERZONE)
+		.value("LIBERATORDEFENDERZONESETUP", sc2::EFFECT_ID::LIBERATORDEFENDERZONESETUP)
+		.value("LURKERSPINES", sc2::EFFECT_ID::LURKERSPINES)
+		.value("NUKEDOT", sc2::EFFECT_ID::NUKEDOT)
+		.value("PSISTORM", sc2::EFFECT_ID::PSISTORM)
+		.value("SCANNERSWEEP", sc2::EFFECT_ID::SCANNERSWEEP)
+		.value("TEMPORALFIELD", sc2::EFFECT_ID::TEMPORALFIELD)
+		.value("TEMPORALFIELDGROWING", sc2::EFFECT_ID::TEMPORALFIELDGROWING)
+		.value("THERMALLANCE", sc2::EFFECT_ID::THERMALLANCE);
+
 };
diff --git a/python-api-src/lib_tech_tree.cpp b/python-api-src/lib_tech_tree.cpp
index 69b4e27752e05c58c45a5f81dc7d7ed22977a7c5..44012c40d5833fb2530e2c3c156786885473b442 100644
--- a/python-api-src/lib_tech_tree.cpp
+++ b/python-api-src/lib_tech_tree.cpp
@@ -20,9 +20,9 @@ void define_tech_tree(py::module & m)
         .def_readonly("build_ability",        &TypeData::buildAbility,                 "the ability that creates this item")
         .def_readonly("warp_ability",         &TypeData::warpAbility,                  "the ability that creates this item via warp-in")
         .def_readonly("what_builds",          &TypeData::whatBuilds,                   "any of these units can build the item")
-        .def_readonly("required_units",       &TypeData::requiredUnits,                "owning ONE of these is required to make")
-        .def_readonly("required_upgrades",    &TypeData::requiredUpgrades,             "having ALL of these is required to make")
-        .def_readonly("required_addons",      &TypeData::requiredAddons,               "a unit of this type must be present next to the producer");
+        .def_readonly("required_units",       &TypeData::requiredUnits,                "owning ONE of these is required to make  -> List[UnitType]")
+        .def_readonly("required_upgrades",    &TypeData::requiredUpgrades,             "having ALL of these is required to make  -> List[UPGRADE_ID]")
+        .def_readonly("required_addons",      &TypeData::requiredAddons,               "a unit of this type must be present next to the producer  -> List[UnitType]");
 
     py::class_<TechTree>(m, "TechTree")
         .def("get_data", py::overload_cast<const UnitType &>(&TechTree::getData, py::const_))
diff --git a/python-api-src/lib_unit.cpp b/python-api-src/lib_unit.cpp
index 83b3166272f4303cabb444eec4da2b6bda75d084..de09cc58769e8068353ffaab5d94be400208919c 100644
--- a/python-api-src/lib_unit.cpp
+++ b/python-api-src/lib_unit.cpp
@@ -35,6 +35,12 @@ void define_unit(py::module & m)
         .def_property_readonly("facing", &Unit::getFacing)
         .def_property_readonly("radius", &Unit::getRadius)
         .def_property_readonly("is_carrying_minerals", &Unit::isCarryingMinerals)
+		.def_property_readonly("is_carrying_gas", &Unit::isCarryingGas)
+		.def_property_readonly("gas_left_in_refinery", &Unit::gasLeftInGeyser)
+		.def_property_readonly("minerals_left_in_mineralfield", &Unit::mineralsLeftInMineralfield)
+		.def_property_readonly("owner", &Unit::getOwner)
+		.def_property_readonly("max_shields", &Unit::maxShields)
+		.def_property_readonly("max_energy", &Unit::maxEnergy)
         .def("hold_position", &Unit::holdPosition)
         .def("patrol", py::overload_cast<const CCPosition &>(&Unit::patrol, py::const_))
         .def("stop_dance", &Unit::stopDance)
diff --git a/python-api-src/lib_unittype.cpp b/python-api-src/lib_unittype.cpp
index a5dcc01544e89c9ff41d95e27ab9193a7ee0837a..723f5e1f170076ff82ea437b25c77a14bf593ffd 100644
--- a/python-api-src/lib_unittype.cpp
+++ b/python-api-src/lib_unittype.cpp
@@ -40,6 +40,9 @@ void define_unittype(py::module & m)
         .def_property_readonly("is_egg", &UnitType::isEgg)
         .def_property_readonly("is_queen", &UnitType::isQueen)
         .def_property_readonly("is_tank", &UnitType::isTank)
+		.def_property_readonly("get_equivalent_units", &UnitType::getEquivalentUnits)
+		.def_property_readonly("required_attached", &UnitType::requiredAttached)
+		.def_property_readonly("build_time", &UnitType::getBuildTime)
         .def("__hash__", [](const UnitType & unit_type) { return std::hash<CCUnitID>{}(unit_type.getAPIUnitType()); })
         .def(py::self == py::self)
         .def("__repr__", [](const UnitType & unit_type) { return "<UnitType: '" + unit_type.getName() + "'>"; });
diff --git a/python-api-src/library.cpp b/python-api-src/library.cpp
index 29d5c965330768fc54193ac2ec1fc4378315a1bd..0206f191b3998d9a31e31c8924e9bd72fe9623c1 100644
--- a/python-api-src/library.cpp
+++ b/python-api-src/library.cpp
@@ -58,6 +58,11 @@ PYBIND11_MODULE(library, m)
 
     py::implicitly_convertible<sc2::UPGRADE_ID, sc2::UpgradeID>();
 
+	py::class_<sc2::EffectID>(m, "EffectID")
+		.def(py::init<sc2::EFFECT_ID>());
+
+	py::implicitly_convertible<sc2::EFFECT_ID, sc2::EffectID>();
+
     py::class_<sc2::AbilityID>(m, "AbilityID")
         .def(py::init<sc2::ABILITY_ID>());
 
@@ -69,24 +74,55 @@ PYBIND11_MODULE(library, m)
 
     // IDABot is a specialization of Agent
 	py::class_<IDABot, PyIDABot, sc2::Agent>(m, "IDABot")
-        .def(py::init())
-        .def("on_game_start", &IDABot::OnGameStart)
-        .def("on_step", &IDABot::OnStep)
-        .def("send_chat", &IDABot::SendChat, "Send a message to the game chat", "message"_a)
-        .def("get_all_units", &IDABot::GetAllUnits, "Returns a list of all units")
-        .def("get_my_units", &IDABot::GetMyUnits, "Returns a list of all units beloning to the player")
-        .def("get_player_race", &IDABot::GetPlayerRace)
-        .def_property_readonly("base_location_manager", &IDABot::Bases)
-        .def_property_readonly("tech_tree", &IDABot::GetTechTree)
-        .def_property_readonly("map_tools", &IDABot::Map)
-        .def_property_readonly("building_placer", &IDABot::GetBuildingPlacer)
-        .def_property_readonly("start_location", &IDABot::GetStartLocation, "CCPosition representing the start location")
-        .def_property_readonly("start_locations", &IDABot::GetStartLocations, "CCPosition representing the start locations")
-        .def_property_readonly("minerals", &IDABot::GetMinerals, "How much minerals we currently have")
-        .def_property_readonly("current_supply", &IDABot::GetCurrentSupply, "How much supply we are currently using")
-        .def_property_readonly("max_supply", &IDABot::GetMaxSupply, "How much supply we can currently use")
-        .def_property_readonly("gas", &IDABot::GetGas, "How much gas we currently have")
-        .def_property_readonly("current_frame", &IDABot::GetCurrentFrame, "Which frame we are currently on"); 
+		.def(py::init())
+		.def("on_game_start", &IDABot::OnGameStart)
+		.def("on_step", &IDABot::OnStep)
+		.def("send_chat", &IDABot::SendChat, "Send a message to the game chat", "message"_a)
+		.def("get_all_units", &IDABot::GetAllUnits, "Returns a list of all units")
+		.def("get_my_units", &IDABot::GetMyUnits, "Returns a list of all units beloning to the player")
+		.def("get_player_race", &IDABot::GetPlayerRace)
+		.def("debug_create_unit", &IDABot::DebugCreateUnit, "unit_type"_a, "p"_a, "player_id"_a = 1, "count"_a = 1)
+		.def("debug_kill_unit", &IDABot::DebugKillUnit, "Kill unit from debug mode")
+		.def("debug_show_map", &IDABot::DebugShowMap, "Show the entire map through debug mode")
+		.def("debug_fast_build", &IDABot::DebugFastBuild, "Set build time to 1 through debug mode")
+		.def("debug_enemy_control", &IDABot::DebugEnemyControl, "Control the enemy through debug mode")
+		.def("debug_ignore_food", &IDABot::DebugIgnoreFood, "Ignore the food through debug mode")
+		.def("debug_ignore_resource_cost", &IDABot::DebugIgnoreResourceCost, "Ignore the resource cost through debug mode")
+		.def("debug_give_all_resources", &IDABot::DebugGiveAllResources, "Give all the resources through debug mode")
+		.def("debug_god_mode", &IDABot::DebugGodMode, "Give the player god mode")
+		.def("debug_ignore_mineral", &IDABot::DebugIgnoreMineral, "Ignore the mineral cost through debug mode")
+		.def("debug_no_cooldowns", &IDABot::DebugNoCooldowns, "Deactive cooldowns through debug mode")
+		.def("debug_give_all_tech", &IDABot::DebugGiveAllTech, "Give all the tech to the player through debug mode")
+		.def("debug_give_all_upgrades", &IDABot::DebugGiveAllUpgrades, "Give all the upgrades to the player trough debug mode")
+		.def("debug_set_score", &IDABot::DebugSetScore, "Set the Players score through debug mode")
+		.def("debug_end_game", &IDABot::DebugEndGame, "End the game through debug mode")
+		.def("debug_set_energy", &IDABot::DebugSetEnergy, "Set the energy on a unit through debug mode")
+		.def("debug_set_life", &IDABot::DebugSetLife, "Set the life on a unit through debug mode")
+		.def("debug_set_shields", &IDABot::DebugSetShields, "Set the shields on a unit through debug mode")
+		.def("get_enemy_base_location", &IDABot::GetEnemyBaseLocations, "Return the CCpostion of the enemy base")
+		.def("move_camera", &IDABot::CameraMove, "Move the camera to p postion", "p"_a)
+		.def("has_creep", &IDABot::HasCreep, "Returns true if there is creep at position p", "p"_a)
+		.def("ability_for_upgrade", &IDABot::abilityForUpgrade, "Ability that researches this upgrade", "upgrade"_a)
+		.def("upgrade_mineral_cost", &IDABot::UpgradeMineralCost, "Mineral cost of researching the upgrade", "upgrade"_a)
+		.def("upgrade_gas_cost", &IDABot::UpgradeGasCost, "Vespene/gas cost of researching the upgrade", "upgrade"_a)
+		.def("upgrade_research_time", &IDABot::UpgradeResearchTime, "Time in GameLoops to research this upgrade", "upgrade"_a)
+		.def("effect_radius", &IDABot::RadiusEffect, "Size of the circle the effect impacts", "effect"_a)
+		.def_property_readonly("base_location_manager", &IDABot::Bases)
+		.def_property_readonly("tech_tree", &IDABot::GetTechTree)
+		.def_property_readonly("map_tools", &IDABot::Map)
+		.def_property_readonly("building_placer", &IDABot::GetBuildingPlacer)
+		.def_property_readonly("start_location", &IDABot::GetStartLocation, "CCPosition representing the start location")
+		.def_property_readonly("start_locations", &IDABot::GetStartLocations, "CCPosition representing the start locations")
+		.def_property_readonly("minerals", &IDABot::GetMinerals, "How much minerals we currently have")
+		.def_property_readonly("current_supply", &IDABot::GetCurrentSupply, "How much supply we are currently using")
+		.def_property_readonly("max_supply", &IDABot::GetMaxSupply, "How much supply we can currently use")
+		.def_property_readonly("gas", &IDABot::GetGas, "How much gas we currently have")
+		.def_property_readonly("current_frame", &IDABot::GetCurrentFrame, "Which frame we are currently on");
+
+
+
+
+	// API extended summer 2020
 
 
 
@@ -116,8 +152,17 @@ PYBIND11_MODULE(library, m)
         .value("CheatMoney", sc2::Difficulty::CheatMoney)
         .value("CheatInsane", sc2::Difficulty::CheatInsane);
 
-    m.def("create_participants", &sc2::CreateParticipant, "Create participant from bot", "race"_a, "bot"_a);
-    m.def("create_computer", &sc2::CreateComputer, "Create participant from built-in Starcraft computer", "race"_a, "difficulty"_a);
+	py::enum_<sc2::AIBuild>(m, "AIBuild")
+		.value("RandomBuild", sc2::AIBuild::RandomBuild)
+		.value("Rush", sc2::AIBuild::Rush)
+		.value("Timing", sc2::AIBuild::Timing)
+		.value("Power", sc2::AIBuild::Power)
+		.value("Macro", sc2::AIBuild::Macro)
+		.value("Air", sc2::AIBuild::Air);
+
+
+	m.def("create_participants", &sc2::CreateParticipant, "Create participant from bot", "race"_a, "bot"_a, "player_name"_a = "");
+	m.def("create_computer", &sc2::CreateComputer, "Create participant from built-in Starcraft computer", "race"_a, "difficulty"_a, "ai_build"_a = sc2::AIBuild::RandomBuild, "player_name"_a = "");
 
     /*
     py::class_<BuildDescription>(m, "BuildDescription")
diff --git a/src/BaseLocation.cpp b/src/BaseLocation.cpp
index d5f89e36834216d2a396286eb852fc1522f0e19c..b74c4b8e6199e32452bcbec83e793b684316f888 100644
--- a/src/BaseLocation.cpp
+++ b/src/BaseLocation.cpp
@@ -202,7 +202,9 @@ void BaseLocation::draw()
 {
     CCPositionType radius = Util::TileToPosition(1.0f);
 
-    m_bot.Map().drawCircle(m_centerOfResources, radius, CCColor(255, 255, 0));
+	// Take first mineral for the Z-pos.
+	sc2::Point3D center_pos = sc2::Point3D(m_centerOfResources.x, m_centerOfResources.y, m_minerals[0].getUnitPtr()->pos.z);
+    m_bot.Map().drawResourceSphere(center_pos, radius, CCColor(255, 255, 0));
 
     std::stringstream ss;
     ss << "BaseLocation: " << m_baseID << "\n";
@@ -237,14 +239,14 @@ void BaseLocation::draw()
         //m_bot.Map().drawLine(m_left, y, m_right, y, CCColor(160, 160, 160));
     }
 
-    for (auto & mineralPos : m_mineralPositions)
+    for (auto & mineral : m_minerals)
     {
-        m_bot.Map().drawCircle(mineralPos, radius, CCColor(0, 128, 128));
+        m_bot.Map().drawResourceSphere(mineral.getUnitPtr()->pos, radius, CCColor(0, 128, 128));
     }
 
-    for (auto & geyserPos : m_geyserPositions)
+    for (auto & geyser : m_geysers)
     {
-        m_bot.Map().drawCircle(geyserPos, radius, CCColor(0, 255, 0));
+        m_bot.Map().drawResourceSphere(geyser.getUnitPtr()->pos, radius, CCColor(0, 255, 0));
     }
 
     if (m_isStartLocation)
diff --git a/src/BaseLocationManager.cpp b/src/BaseLocationManager.cpp
index 0e44fc4448b348c2cbb53c9319e56418dc068f0b..848c23fcb7d25a7e86ab1ffdb0108206eff39d3d 100644
--- a/src/BaseLocationManager.cpp
+++ b/src/BaseLocationManager.cpp
@@ -269,7 +269,7 @@ void BaseLocationManager::drawBaseLocations()
     const BaseLocation * next_expansion = getNextExpansion(Players::Self);
     CCTilePosition nextExpansionPosition = next_expansion->getDepotPosition();
 
-    m_bot.Map().drawCircle(Util::GetPosition(nextExpansionPosition), 1, CCColor(255, 0, 255));
+    m_bot.Map().drawResourceSphere(sc2::Point3D(Util::GetPosition(nextExpansionPosition).x, Util::GetPosition(nextExpansionPosition).y, next_expansion->getMinerals()[0].getUnitPtr()->pos.z), 1, CCColor(255, 0, 255));
     m_bot.Map().drawText(Util::GetPosition(nextExpansionPosition), "Next Expansion Location", CCColor(255, 0, 255));
 }
 
diff --git a/src/BuildingPlacer.cpp b/src/BuildingPlacer.cpp
index 4b048ed71de265e42b17041faa17ba528559855a..9638349f5ee62fe63449ac8bf44e4af5c644bf91 100644
--- a/src/BuildingPlacer.cpp
+++ b/src/BuildingPlacer.cpp
@@ -27,10 +27,15 @@ bool BuildingPlacer::canBuildHere(int bx, int by, const UnitType & type) const
         return false;
     }
 
+	int width = type.tileWidth();
+	int height = type.tileHeight();
+	int xdelta = (int)std::ceil((width - 1.0) / 2);
+	int ydelta = (int)std::ceil((height - 1.0) / 2);
+
     // check the reserve map
-    for (int x = bx; x < bx + type.tileWidth(); x++)
+    for (int x = bx - xdelta; x < bx + width - xdelta; x++)
     {
-        for (int y = by; y < by + type.tileHeight(); y++)
+        for (int y = by - ydelta; y < by + height - ydelta; y++)
         {
             if (!m_bot.Map().isValidTile(x, y) || m_reserveMap[x][y])
             {
@@ -60,23 +65,31 @@ bool BuildingPlacer::canBuildHereWithSpace(int bx, int by, const UnitType & type
     // height and width of the building
     int width  = type.tileWidth();
     int height = type.tileHeight();
+	int xdelta = (int)std::ceil((width - 1.0) / 2);
+	int ydelta = (int)std::ceil((height - 1.0) / 2);
 
     // TODO: make sure we leave space for add-ons. These types of units can have addons:
 
     // define the rectangle of the building spot
-    int startx = bx - buildDist;
-    int starty = by - buildDist;
-    int endx   = bx + width + buildDist;
-    int endy   = by + height + buildDist;
+    int startx = bx - buildDist - xdelta;
+    int starty = by - buildDist - ydelta;
+    int endx   = bx + width + buildDist - xdelta;
+    int endy   = by + height + buildDist - ydelta;
 
     // TODO: recalculate start and end positions for addons
 
     // if this rectangle doesn't fit on the map we can't build here
-    if (startx < 0 || starty < 0 || endx > m_bot.Map().width() || endx < bx + width || endy > m_bot.Map().height())
+    if (startx < 0 || starty < 0 || endx > m_bot.Map().width() || endx < bx + width - xdelta || endy > m_bot.Map().height() || endy < by + height - ydelta)
     {
         return false;
     }
 
+	if (!m_bot.Map().canBuildTypeAtPosition(bx, by, type))
+	{
+		return false;
+	}
+
+
     // if we can't build here, or space is reserved, or it's in the resource box, we can't build here
     for (int x = startx; x < endx; x++)
     {
@@ -95,6 +108,8 @@ bool BuildingPlacer::canBuildHereWithSpace(int bx, int by, const UnitType & type
     return true;
 }
 
+// BuildDist is the distance from the position where the building is gonna be placed.
+
 CCTilePosition BuildingPlacer::getBuildLocationNear(const CCTilePosition & p, const UnitType & t, int buildDist, size_t search_count) const
 {
     //Timer t;
@@ -135,10 +150,14 @@ bool BuildingPlacer::tileOverlapsBaseLocation(int x, int y, UnitType type) const
     }
 
     // dimensions of the proposed location
-    int tx1 = x;
-    int ty1 = y;
-    int tx2 = tx1 + type.tileWidth();
-    int ty2 = ty1 + type.tileHeight();
+
+	int xdelta = (int)std::ceil((type.tileWidth() - 1.0) / 2);
+	int ydelta = (int)std::ceil((type.tileHeight() - 1.0) / 2);
+
+    int tx1 = x - xdelta;
+    int ty1 = y - ydelta;
+    int tx2 = tx1 + type.tileWidth() - xdelta;
+    int ty2 = ty1 + type.tileHeight() - ydelta;
 
     // for each base location
     for (const BaseLocation * base : m_bot.Bases().getBaseLocations())
@@ -166,7 +185,7 @@ bool BuildingPlacer::tileOverlapsBaseLocation(int x, int y, UnitType type) const
 bool BuildingPlacer::buildable(const UnitType & type, int x, int y) const
 {
     // TODO: does this take units on the map into account?
-    if (!m_bot.Map().isValidTile(x, y) || !m_bot.Map().canBuildTypeAtPosition(x, y, type))
+    if (!m_bot.Map().isValidTile(x, y))
     {
         return false;
     }
@@ -180,9 +199,13 @@ void BuildingPlacer::reserveTiles(int bx, int by, int width, int height)
 {
     int rwidth = (int)m_reserveMap.size();
     int rheight = (int)m_reserveMap[0].size();
-    for (int x = bx; x < bx + width && x < rwidth; x++)
+
+	int xdelta = (int)std::ceil((width - 1.0) / 2);
+	int ydelta = (int)std::ceil((height - 1.0) / 2);
+
+    for (int x = bx - xdelta; x < bx + width - xdelta && x < rwidth; x++)
     {
-        for (int y = by; y < by + height && y < rheight; y++)
+        for (int y = by - ydelta; y < by + height - ydelta && y < rheight; y++)
         {
             m_reserveMap[x][y] = true;
         }
@@ -191,6 +214,7 @@ void BuildingPlacer::reserveTiles(int bx, int by, int width, int height)
 
 void BuildingPlacer::drawReservedTiles()
 {
+	// Why is there a return here? Should we not use the function? /Hannes Jämtner
     return;
     int rwidth = (int)m_reserveMap.size();
     int rheight = (int)m_reserveMap[0].size();
@@ -212,9 +236,12 @@ void BuildingPlacer::freeTiles(int bx, int by, int width, int height)
     int rwidth = (int)m_reserveMap.size();
     int rheight = (int)m_reserveMap[0].size();
 
-    for (int x = bx; x < bx + width && x < rwidth; x++)
+	int xdelta = (int)std::ceil((width - 1.0) / 2);
+	int ydelta = (int)std::ceil((height - 1.0) / 2);
+
+    for (int x = bx - xdelta; x < bx + width - xdelta && x < rwidth; x++)
     {
-        for (int y = by; y < by + height && y < rheight; y++)
+        for (int y = by - ydelta; y < by + height - ydelta && y < rheight; y++)
         {
             m_reserveMap[x][y] = false;
         }
@@ -227,8 +254,12 @@ CCTilePosition BuildingPlacer::getRefineryPosition()
     double minGeyserDistanceFromHome = std::numeric_limits<double>::max();
     CCPosition homePosition = m_bot.GetStartLocation();
 
+
     for (auto & unit : m_bot.GetAllUnits())
     {
+		UnitType refinery = Util::GetRefinery(m_bot.GetPlayerRace(Players::Self), m_bot);
+
+
         if (!unit.getType().isGeyser())
         {
             continue;
@@ -236,6 +267,13 @@ CCTilePosition BuildingPlacer::getRefineryPosition()
 
         CCPosition geyserPos(unit.getPosition());
 
+
+		// can't build a refinery on top of another
+		if (!m_bot.Map().canBuildTypeAtPosition((int)geyserPos.x, (int)geyserPos.y, refinery))
+		{
+			continue;
+		}
+
         // check to see if it's next to one of our depots
         bool nearDepot = false;
         for (auto & unit : m_bot.UnitInfo().getUnits(Players::Self))
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 3c540390a0c1d6d73f9486fb28f6c7480e6c4b57..31e2f6846a2291f4013d8d13ce062b35ab13e6a6 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -2,13 +2,13 @@
 file(GLOB BOT_SOURCES "*.cpp" "*.h" "*.hpp")
 
 include_directories(SYSTEM
-    ${PROJECT_SOURCE_DIR}/lib/s2client-api/include
-    ${PROJECT_SOURCE_DIR}/lib/s2client-api/contrib/protobuf/src
-    ${PROJECT_BINARY_DIR}/lib/s2client-api/generated
+    ${PROJECT_SOURCE_DIR}/lib/cpp-sc2/include
+    ${PROJECT_SOURCE_DIR}/lib/cpp-sc2/contrib/protobuf/src
+    ${PROJECT_BINARY_DIR}/lib/cpp-sc2/generated
     ${PROJECT_SOURCE_DIR}/lib/json/include
 )
 
-link_directories(${PROJECT_BINARY_DIR}/s2client-api/bin)
+link_directories(${PROJECT_BINARY_DIR}/cpp-sc2/bin)
 
 # Enable compilation of the SC2 version of the bot.
 add_definitions(-DSC2API)
diff --git a/src/IDABot.cpp b/src/IDABot.cpp
index d0908f789cb42ab5675a0028889085a4918d79bd..cda0ce75922c415a037b86161fb74089a09cede9 100644
--- a/src/IDABot.cpp
+++ b/src/IDABot.cpp
@@ -1,6 +1,7 @@
 #include "IDABot.h"
 #include "Util.h"
 
+
 IDABot::IDABot()
 	: m_map(*this)
 	, m_bases(*this)
@@ -224,3 +225,141 @@ const TypeData & IDABot::Data(const MetaType & type) const
 {
 	return m_techTree.getData(type);
 }
+
+/*
+	API extended summer 2020
+*/
+
+void IDABot::DebugCreateUnit(UnitTypeID unit_type, const CCPosition& p, uint32_t player_id, uint32_t count) 
+{
+	Debug()->DebugCreateUnit(unit_type, p, player_id, count);
+}
+
+void IDABot::DebugKillUnit(const Unit unit) 
+{
+	Debug()->DebugKillUnit(unit.getUnitPtr());
+}
+
+void IDABot::DebugShowMap() 
+{
+	Debug()->DebugShowMap();
+}
+
+void IDABot::DebugFastBuild() 
+{
+	Debug()->DebugFastBuild();
+}
+
+void IDABot::DebugEnemyControl() 
+{
+	Debug()->DebugEnemyControl();
+}
+
+void IDABot::DebugIgnoreFood() 
+{
+	Debug()->DebugIgnoreFood();
+}
+
+void IDABot::DebugIgnoreResourceCost() 
+{
+	Debug()->DebugIgnoreResourceCost();
+}
+
+void IDABot::DebugGiveAllResources() 
+{
+	Debug()->DebugGiveAllResources();
+}
+
+void IDABot::DebugGodMode() 
+{
+	Debug()->DebugGodMode();
+}
+
+void IDABot::DebugIgnoreMineral() 
+{
+	Debug()->DebugIgnoreMineral();
+}
+
+void IDABot::DebugNoCooldowns() 
+{
+	Debug()->DebugIgnoreMineral();
+}
+
+void IDABot::DebugGiveAllTech()
+{
+	Debug()->DebugGiveAllTech();
+}
+
+void IDABot::DebugGiveAllUpgrades() 
+{
+	Debug()->DebugGiveAllUpgrades();
+}
+
+void IDABot::DebugSetScore(float score) 
+{
+	Debug()->DebugSetScore(score);
+}
+
+void IDABot::DebugEndGame(bool victory)
+{
+	Debug()->DebugEndGame(victory);
+}
+
+void IDABot::DebugSetEnergy(float value, const Unit unit)
+{
+	Debug()->DebugSetEnergy(value, unit.getUnitPtr());
+}
+
+void IDABot::DebugSetLife(float value, const Unit unit)
+{
+	Debug()->DebugSetLife(value, unit.getUnitPtr());
+}
+
+void IDABot::DebugSetShields(float value, const Unit unit)
+{
+	Debug()->DebugSetShields(value, unit.getUnitPtr());
+}
+
+// There is a bug in the latest SC2 (if using Blizzard API with game >=4.10)
+// This a function to get the enemy base instead of using build location manager
+// Switched over to other API where this is solved
+// Leaving function incase of it breaking
+const std::vector<Point2D> IDABot::GetEnemyBaseLocations()
+{
+	return Observation()->GetGameInfo().enemy_start_locations;
+}
+
+bool IDABot::HasCreep(Point2D p) const 
+{
+	return Observation()->HasCreep(p);
+}
+
+void IDABot::CameraMove(Point2DI p) 
+{
+	ActionsFeatureLayer()->CameraMove(p);
+}
+
+sc2::ABILITY_ID IDABot::abilityForUpgrade(sc2::UpgradeID upgrade_id) const
+{
+	return (sc2::ABILITY_ID)Observation()->GetUpgradeData()[upgrade_id].ability_id;
+}
+
+uint32_t IDABot::UpgradeMineralCost(sc2::UpgradeID upgrade_id) const
+{
+	return Observation()->GetUpgradeData()[upgrade_id].mineral_cost;
+}
+
+uint32_t IDABot::UpgradeGasCost(sc2::UpgradeID upgrade_id) const
+{
+	return Observation()->GetUpgradeData()[upgrade_id].vespene_cost;
+}
+
+float IDABot::UpgradeResearchTime(sc2::UpgradeID upgrade_id) const
+{
+	return Observation()->GetUpgradeData()[upgrade_id].research_time;
+}
+
+float IDABot::RadiusEffect(sc2::EffectID effect_id) const
+{
+	return Observation()->GetEffectData()[effect_id].radius;
+}
\ No newline at end of file
diff --git a/src/IDABot.h b/src/IDABot.h
index a1567ac9f75b75b6d5268cb3c4f3e372e8eac23e..84e38978f0c93f1328d5a6506b4f8495e0b7d5d8 100644
--- a/src/IDABot.h
+++ b/src/IDABot.h
@@ -14,6 +14,10 @@
 #include "MetaType.h"
 #include "Unit.h"
 
+using sc2::UnitTypeID;
+using sc2::Point2D;
+using sc2::Point2DI;
+
 class IDABot : public sc2::Agent 
 {
     MapTools                m_map;
@@ -59,6 +63,38 @@ public:
     const std::vector<Unit> GetUnits(const UnitType & type, int player = Players::Self) const;
     const std::vector<CCPosition> & GetStartLocations() const;
 
+	/*
+		API extended summer 2020
+	*/
+	void DebugCreateUnit(UnitTypeID unit_type, const CCPosition& p, uint32_t player_id = 1, uint32_t count = 1);
+	void DebugKillUnit(const Unit unit);
+	void DebugShowMap();
+	void DebugFastBuild();
+	void DebugEnemyControl();
+	void DebugIgnoreFood();
+	void DebugIgnoreResourceCost();
+	void DebugGiveAllResources();
+	void DebugGodMode();
+	void DebugIgnoreMineral();
+	void DebugNoCooldowns();
+	void DebugGiveAllTech();
+	void DebugGiveAllUpgrades();
+	void DebugSetScore(float score);
+	void DebugEndGame(bool victory);
+	void DebugSetEnergy(float value, const Unit unit);
+	void DebugSetLife(float value, const Unit unit);
+	void DebugSetShields(float value, const Unit unit);
+	const std::vector<Point2D> GetEnemyBaseLocations();
+	bool HasCreep(Point2D p) const;
+	void CameraMove(Point2DI p);
+	sc2::ABILITY_ID abilityForUpgrade(sc2::UpgradeID upgrade_id) const;
+	uint32_t UpgradeMineralCost(sc2::UpgradeID upgrade_id) const;
+	uint32_t UpgradeGasCost(sc2::UpgradeID upgrade_id) const;
+	float UpgradeResearchTime(sc2::UpgradeID upgrade_id) const;
+	float RadiusEffect(sc2::EffectID effect_id) const;
+
+
+
     // Not needed, just convenience functions
     const TypeData & Data(const UnitType & type) const;
     const TypeData & Data(const CCUpgrade & type) const;
diff --git a/src/MapTools.cpp b/src/MapTools.cpp
index 9adad0de01b7c3736c7cbfdc5e1be8765dd7adb4..74363174179090016da9be8037b70bf90f09b0fd 100644
--- a/src/MapTools.cpp
+++ b/src/MapTools.cpp
@@ -7,6 +7,23 @@
 #include <fstream>
 #include <array>
 
+namespace {
+	bool getBit(const sc2::ImageData& grid, int tileX, int tileY) {
+		assert(grid.bits_per_pixel == 1);
+
+		sc2::Point2DI pointI(tileX, tileY);
+		if (pointI.x < 0 || pointI.x >= grid.width || pointI.y < 0 || pointI.y >= grid.height)
+		{
+			return false;
+		}
+
+		div_t idx = div(pointI.x + pointI.y * grid.width, 8);
+		return (grid.data[idx.quot] >> (7 - idx.rem)) & 1;
+	}
+
+}  // namespace
+
+
 const size_t LegalActions = 4;
 const int actionX[LegalActions] ={1, -1, 0, 0};
 const int actionY[LegalActions] ={0, 0, 1, -1};
@@ -384,6 +401,15 @@ void MapTools::drawCircle(const CCPosition & pos, CCPositionType radius, const C
 #endif
 }
 
+void MapTools::drawResourceSphere(const sc2::Point3D & pos, CCPositionType radius, const CCColor & color) const
+{
+#ifdef SC2API
+	m_bot.Debug()->DebugSphereOut(pos, radius, color);
+#else
+	BWAPI::Broodwar->drawCircleMap(pos, radius, color);
+#endif
+}
+
 void MapTools::drawCircle(CCPositionType x, CCPositionType y, CCPositionType radius, const CCColor & color) const
 {
 #ifdef SC2API
@@ -541,17 +567,7 @@ CCTilePosition MapTools::getLeastRecentlySeenTile() const
 bool MapTools::canWalk(int tileX, int tileY) 
 {
 #ifdef SC2API
-    auto & info = m_bot.Observation()->GetGameInfo();
-    sc2::Point2DI pointI(tileX, tileY);
-    if (pointI.x < 0 || pointI.x >= info.width || pointI.y < 0 || pointI.y >= info.width)
-    {
-        return false;
-    }
-
-    assert(info.pathing_grid.data.size() == info.width * info.height);
-    unsigned char encodedPlacement = info.pathing_grid.data[pointI.x + ((info.height - 1) - pointI.y) * info.width];
-    bool decodedPlacement = encodedPlacement == 255 ? false : true;
-    return decodedPlacement;
+	return getBit(m_bot.Observation()->GetGameInfo().pathing_grid, tileX, tileY);
 #else
     for (int i=0; i<4; ++i)
     {
@@ -571,17 +587,7 @@ bool MapTools::canWalk(int tileX, int tileY)
 bool MapTools::canBuild(int tileX, int tileY) 
 {
 #ifdef SC2API
-    auto & info = m_bot.Observation()->GetGameInfo();
-    sc2::Point2DI pointI(tileX, tileY);
-    if (pointI.x < 0 || pointI.x >= info.width || pointI.y < 0 || pointI.y >= info.width)
-    {
-        return false;
-    }
-
-    assert(info.placement_grid.data.size() == info.width * info.height);
-    unsigned char encodedPlacement = info.placement_grid.data[pointI.x + ((info.height - 1) - pointI.y) * info.width];
-    bool decodedPlacement = encodedPlacement == 255 ? true : false;
-    return decodedPlacement;
+	return getBit(m_bot.Observation()->GetGameInfo().placement_grid, tileX, tileY);
 #else
     return BWAPI::Broodwar->isBuildable(BWAPI::TilePosition(tileX, tileY));
 #endif
@@ -604,4 +610,5 @@ float MapTools::terrainHeight(const CCPosition & point) const
 #else
     return 0;
 #endif
-}
\ No newline at end of file
+}
+
diff --git a/src/MapTools.h b/src/MapTools.h
index 51f0533986cfb7a0c4b791d8c20178d346ab94c2..870052aaa453330c54037fd70ba4f2027022743e 100644
--- a/src/MapTools.h
+++ b/src/MapTools.h
@@ -42,6 +42,7 @@ public:
     void    onStart();
     void    onFrame();
 
+
     int     width() const;
     int     height() const;
     float   terrainHeight(float x, float y) const;
@@ -53,6 +54,7 @@ public:
     void    drawBox(const CCPosition & tl, const CCPosition & br, const CCColor & color = CCColor(255, 255, 255)) const;
     void    drawCircle(CCPositionType x1, CCPositionType x2, CCPositionType radius, const CCColor & color = CCColor(255, 255, 255)) const;
     void    drawCircle(const CCPosition & pos, CCPositionType radius, const CCColor & color = CCColor(255, 255, 255)) const;
+	void    drawResourceSphere(const sc2::Point3D & pos, CCPositionType radius, const CCColor & color = CCColor(255, 255, 255)) const;
     void    drawText(const CCPosition & pos, const std::string & str, const CCColor & color = CCColor(255, 255, 255)) const;
     void    drawTextScreen(float xPerc, float yPerc, const std::string & str, const CCColor & color = CCColor(255, 255, 255)) const;
     
diff --git a/src/TechTree.cpp b/src/TechTree.cpp
index 89d511f7a0d7a0fb8fc752c0c009474cab4d50a8..aca2be4e7d6614d41de6714f8523e2cbbc634b5d 100644
--- a/src/TechTree.cpp
+++ b/src/TechTree.cpp
@@ -216,7 +216,7 @@ void TechTree::initUnitTypeData()
 
     // Zerg Units                                                                          m  g  s  t  unit  bld    wrk    rfn    sup    hall   add
     m_unitTypeData[UnitType(sc2::UNIT_TYPEID::ZERG_OVERLORD, m_bot)] =                   { sc2::Race::Zerg, 0, 0, 0, 0, true, false, false, false,  true, false, false, sc2::ABILITY_ID::TRAIN_OVERLORD, 0, { UnitType(sc2::UNIT_TYPEID::ZERG_LARVA, m_bot) }, {}, {} }; 
-    m_unitTypeData[UnitType(sc2::UNIT_TYPEID::ZERG_BANELING, m_bot)] =                   { sc2::Race::Zerg, 0, 0, 0, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_BANELING, 0, { UnitType(sc2::UNIT_TYPEID::ZERG_LARVA, m_bot) }, { UnitType(sc2::UNIT_TYPEID::ZERG_BANELINGNEST, m_bot) }, {} }; 
+    m_unitTypeData[UnitType(sc2::UNIT_TYPEID::ZERG_BANELING, m_bot)] =                   { sc2::Race::Zerg, 0, 0, 0, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::MORPH_BANELING, 0, { UnitType(sc2::UNIT_TYPEID::ZERG_LARVA, m_bot) }, { UnitType(sc2::UNIT_TYPEID::ZERG_BANELINGNEST, m_bot) }, {} }; 
     m_unitTypeData[UnitType(sc2::UNIT_TYPEID::ZERG_CORRUPTOR, m_bot)] =                  { sc2::Race::Zerg, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_CORRUPTOR, 0, { UnitType(sc2::UNIT_TYPEID::ZERG_LARVA, m_bot) }, { UnitType(sc2::UNIT_TYPEID::ZERG_SPIRE, m_bot), UnitType(sc2::UNIT_TYPEID::ZERG_GREATERSPIRE, m_bot) }, {} };
     m_unitTypeData[UnitType(sc2::UNIT_TYPEID::ZERG_DRONE, m_bot)] =                      { sc2::Race::Zerg, 0, 0, 1, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_DRONE, 0, { UnitType(sc2::UNIT_TYPEID::ZERG_LARVA, m_bot) }, {}, {} }; 
     m_unitTypeData[UnitType(sc2::UNIT_TYPEID::ZERG_HYDRALISK, m_bot)] =                  { sc2::Race::Zerg, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_HYDRALISK, 0, { UnitType(sc2::UNIT_TYPEID::ZERG_LARVA, m_bot) }, { UnitType(sc2::UNIT_TYPEID::ZERG_HYDRALISKDEN, m_bot), UnitType(sc2::UNIT_TYPEID::ZERG_LURKERDENMP, m_bot) }, {} };
@@ -263,7 +263,7 @@ void TechTree::initUpgradeData()
     m_upgradeData[sc2::UPGRADE_ID::HIGHCAPACITYBARRELS] =               { sc2::Race::Terran, 150, 150, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_INFERNALPREIGNITER, 0, { UnitType(sc2::UNIT_TYPEID::TERRAN_SCV, m_bot) }, {}, {} };
     m_upgradeData[sc2::UPGRADE_ID::HISECAUTOTRACKING] =                 { sc2::Race::Terran, 100, 100, 0, 1280, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_HISECAUTOTRACKING, 0, { UnitType(sc2::UNIT_TYPEID::TERRAN_ENGINEERINGBAY, m_bot) }, {}, {} };
     m_upgradeData[sc2::UPGRADE_ID::LIBERATORAGRANGEUPGRADE] =           { sc2::Race::Terran, 150, 150, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_ADVANCEDBALLISTICS, 0, { UnitType(sc2::UNIT_TYPEID::TERRAN_STARPORTTECHLAB, m_bot) }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::MAGFIELDLAUNCHERS] =                 { sc2::Race::Terran, 100, 100, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_MAGFIELDLAUNCHERS, 0, { UnitType(sc2::UNIT_TYPEID::TERRAN_SCV, m_bot) }, {}, {} };
+    m_upgradeData[sc2::UPGRADE_ID::MAGFIELDLAUNCHERS] =                 { sc2::Race::Terran, 100, 100, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_CYCLONELOCKONDAMAGE, 0, { UnitType(sc2::UNIT_TYPEID::TERRAN_SCV, m_bot) }, {}, {} };
     m_upgradeData[sc2::UPGRADE_ID::MEDIVACINCREASESPEEDBOOST] =         { sc2::Race::Terran, 100, 100, 0, 1280, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_HIGHCAPACITYFUELTANKS, 0, { UnitType(sc2::UNIT_TYPEID::TERRAN_SCV, m_bot) }, {}, {} };
     m_upgradeData[sc2::UPGRADE_ID::NEOSTEELFRAME] =                     { sc2::Race::Terran, 100, 100, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_NEOSTEELFRAME, 0, { UnitType(sc2::UNIT_TYPEID::TERRAN_ENGINEERINGBAY, m_bot) }, {}, {} };
     m_upgradeData[sc2::UPGRADE_ID::PERSONALCLOAKING] =                  { sc2::Race::Terran, 150, 150, 0, 1920, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_PERSONALCLOAKING, 0, { UnitType(sc2::UNIT_TYPEID::TERRAN_GHOSTACADEMY, m_bot) }, {}, {} };
diff --git a/src/TechTree.json b/src/TechTree.json
deleted file mode 100644
index 4e48786c391c367027fe97e2ed33083366f07dcf..0000000000000000000000000000000000000000
--- a/src/TechTree.json
+++ /dev/null
@@ -1,296 +0,0 @@
-#include "TechTree.h"
-#include "Util.h"
-#include "CCBot.h"
-#include "BuildType.h"
-#include "Timer.hpp"
-
-TechTree::TechTree(CCBot & bot)
-    : m_bot(bot)
-{
-
-}
-
-void TechTree::onStart()
-{
-    initUnitTypeData();
-    initUpgradeData();
-}
-
-void TechTree::initUnitTypeData()
-{
-    m_upgradeData[0] = TypeData();
-
-    // Protoss Buildings                                                                                  unit  bld   wrk    rfn    sup    hall   add
-    m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_PYLON] =                   { sc2::Race::Protoss, 0, 0, 0, 0, true, true, false, false,  true, false, false, sc2::ABILITY_ID::BUILD_PYLON, 0, { sc2::UNIT_TYPEID::PROTOSS_PROBE }, {}, {} }; 
-    m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_NEXUS] =                   { sc2::Race::Protoss, 0, 0, 0, 0, true, true, false, false, false,  true, false, sc2::ABILITY_ID::BUILD_NEXUS, 0, { sc2::UNIT_TYPEID::PROTOSS_PROBE }, {}, {} }; 
-    m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_ASSIMILATOR] =             { sc2::Race::Protoss, 0, 0, 0, 0, true, true, false,  true, false, false, false, sc2::ABILITY_ID::BUILD_ASSIMILATOR, 0, { sc2::UNIT_TYPEID::PROTOSS_PROBE }, {}, {} }; 
-    m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_CYBERNETICSCORE] =         { sc2::Race::Protoss, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_CYBERNETICSCORE, 0, { sc2::UNIT_TYPEID::PROTOSS_PROBE }, { sc2::UNIT_TYPEID::PROTOSS_GATEWAY, sc2::UNIT_TYPEID::PROTOSS_WARPGATE }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_DARKSHRINE] =              { sc2::Race::Protoss, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_DARKSHRINE, 0, { sc2::UNIT_TYPEID::PROTOSS_PROBE }, { sc2::UNIT_TYPEID::PROTOSS_TWILIGHTCOUNCIL }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_FLEETBEACON] =             { sc2::Race::Protoss, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_FLEETBEACON, 0, { sc2::UNIT_TYPEID::PROTOSS_PROBE }, { sc2::UNIT_TYPEID::PROTOSS_STARGATE }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_FORGE] =                   { sc2::Race::Protoss, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_FORGE, 0, { sc2::UNIT_TYPEID::PROTOSS_PROBE }, { sc2::UNIT_TYPEID::PROTOSS_NEXUS }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_GATEWAY] =                 { sc2::Race::Protoss, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_GATEWAY, 0, { sc2::UNIT_TYPEID::PROTOSS_PROBE }, { sc2::UNIT_TYPEID::PROTOSS_NEXUS }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_STARGATE] =                { sc2::Race::Protoss, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_STARGATE, 0, { sc2::UNIT_TYPEID::PROTOSS_PROBE }, { sc2::UNIT_TYPEID::PROTOSS_CYBERNETICSCORE }, {} }; 
-    m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_PHOTONCANNON] =            { sc2::Race::Protoss, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_PHOTONCANNON, 0, { sc2::UNIT_TYPEID::PROTOSS_PROBE }, { sc2::UNIT_TYPEID::PROTOSS_FORGE }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_ROBOTICSBAY] =             { sc2::Race::Protoss, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_ROBOTICSBAY, 0, { sc2::UNIT_TYPEID::PROTOSS_PROBE }, { sc2::UNIT_TYPEID::PROTOSS_ROBOTICSFACILITY }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_ROBOTICSFACILITY] =        { sc2::Race::Protoss, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_ROBOTICSFACILITY, 0, { sc2::UNIT_TYPEID::PROTOSS_PROBE }, { sc2::UNIT_TYPEID::PROTOSS_CYBERNETICSCORE }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_TEMPLARARCHIVE] =          { sc2::Race::Protoss, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_TEMPLARARCHIVE, 0, { sc2::UNIT_TYPEID::PROTOSS_PROBE }, { sc2::UNIT_TYPEID::PROTOSS_TWILIGHTCOUNCIL }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_TWILIGHTCOUNCIL] =         { sc2::Race::Protoss, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_TWILIGHTCOUNCIL, 0, { sc2::UNIT_TYPEID::PROTOSS_PROBE }, { sc2::UNIT_TYPEID::PROTOSS_CYBERNETICSCORE }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_WARPGATE] =                { sc2::Race::Protoss, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::MORPH_WARPGATE, 0, { sc2::UNIT_TYPEID::PROTOSS_GATEWAY }, {}, { sc2::UPGRADE_ID::WARPGATERESEARCH } }; 
-
-    // Protoss Units                                                                                      unit  bld   wrk    rfn    sup    hall   add
-    m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_PROBE] =                   { sc2::Race::Protoss, 0, 0, 1, 0, true, false,  true, false, false, false, false, sc2::ABILITY_ID::TRAIN_PROBE, 0, { sc2::UNIT_TYPEID::PROTOSS_NEXUS }, {}, {} }; 
-    m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_MOTHERSHIPCORE] =          { sc2::Race::Protoss, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_MOTHERSHIPCORE, 0, { sc2::UNIT_TYPEID::PROTOSS_NEXUS }, {}, {} }; 
-    m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_ZEALOT] =                  { sc2::Race::Protoss, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_ZEALOT, sc2::ABILITY_ID::TRAINWARP_ZEALOT, { sc2::UNIT_TYPEID::PROTOSS_GATEWAY }, {}, {} }; 
-    m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_SENTRY] =                  { sc2::Race::Protoss, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_SENTRY, sc2::ABILITY_ID::TRAINWARP_SENTRY, { sc2::UNIT_TYPEID::PROTOSS_GATEWAY }, { sc2::UNIT_TYPEID::PROTOSS_CYBERNETICSCORE }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_STALKER] =                 { sc2::Race::Protoss, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_STALKER, sc2::ABILITY_ID::TRAINWARP_STALKER, { sc2::UNIT_TYPEID::PROTOSS_GATEWAY }, { sc2::UNIT_TYPEID::PROTOSS_CYBERNETICSCORE }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_HIGHTEMPLAR] =             { sc2::Race::Protoss, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_HIGHTEMPLAR, sc2::ABILITY_ID::TRAINWARP_HIGHTEMPLAR, { sc2::UNIT_TYPEID::PROTOSS_GATEWAY }, { sc2::UNIT_TYPEID::PROTOSS_TEMPLARARCHIVE }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_DARKTEMPLAR] =             { sc2::Race::Protoss, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_DARKTEMPLAR, sc2::ABILITY_ID::TRAINWARP_DARKTEMPLAR, { sc2::UNIT_TYPEID::PROTOSS_GATEWAY }, { sc2::UNIT_TYPEID::PROTOSS_DARKSHRINE }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_ADEPT] =                   { sc2::Race::Protoss, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_ADEPT, sc2::ABILITY_ID::TRAINWARP_ADEPT, { sc2::UNIT_TYPEID::PROTOSS_GATEWAY }, { sc2::UNIT_TYPEID::PROTOSS_CYBERNETICSCORE }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_COLOSSUS] =                { sc2::Race::Protoss, 0, 0, 6, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_COLOSSUS,  0, { sc2::UNIT_TYPEID::PROTOSS_ROBOTICSFACILITY }, { sc2::UNIT_TYPEID::PROTOSS_ROBOTICSBAY }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_DISRUPTOR] =               { sc2::Race::Protoss, 0, 0, 3, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_DISRUPTOR, 0, { sc2::UNIT_TYPEID::PROTOSS_ROBOTICSFACILITY }, { sc2::UNIT_TYPEID::PROTOSS_ROBOTICSBAY }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_WARPPRISM] =               { sc2::Race::Protoss, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_WARPPRISM, 0, { sc2::UNIT_TYPEID::PROTOSS_ROBOTICSFACILITY }, {}, {} }; 
-    m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_OBSERVER] =                { sc2::Race::Protoss, 0, 0, 1, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_OBSERVER, 0, { sc2::UNIT_TYPEID::PROTOSS_ROBOTICSFACILITY }, {}, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_IMMORTAL] =                { sc2::Race::Protoss, 0, 0, 4, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_IMMORTAL, 0, { sc2::UNIT_TYPEID::PROTOSS_ROBOTICSFACILITY }, {}, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_CARRIER] =                 { sc2::Race::Protoss, 0, 0, 6, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_CARRIER, 0, { sc2::UNIT_TYPEID::PROTOSS_STARGATE }, { sc2::UNIT_TYPEID::PROTOSS_FLEETBEACON }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_ORACLE] =                  { sc2::Race::Protoss, 0, 0, 3, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_ORACLE, 0, { sc2::UNIT_TYPEID::PROTOSS_STARGATE }, {}, {} }; 
-    m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_PHOENIX] =                 { sc2::Race::Protoss, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_PHOENIX, 0, { sc2::UNIT_TYPEID::PROTOSS_STARGATE }, {}, {} }; 
-    m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_VOIDRAY] =                 { sc2::Race::Protoss, 0, 0, 4, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_VOIDRAY, 0, { sc2::UNIT_TYPEID::PROTOSS_STARGATE }, {}, {} };  
-    m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_TEMPEST] =                 { sc2::Race::Protoss, 0, 0, 4, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_TEMPEST, 0, { sc2::UNIT_TYPEID::PROTOSS_STARGATE }, { sc2::UNIT_TYPEID::PROTOSS_FLEETBEACON }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_INTERCEPTOR] =             { sc2::Race::Protoss, 0, 0, 0, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::BUILD_INTERCEPTORS, 0, { sc2::UNIT_TYPEID::PROTOSS_CARRIER }, {}, {} }; 
-    m_unitTypeData[sc2::UNIT_TYPEID::PROTOSS_ORACLESTASISTRAP] =        { sc2::Race::Protoss, 0, 0, 0, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::BUILD_STASISTRAP, 0, { sc2::UNIT_TYPEID::PROTOSS_ORACLE }, {}, {} }; 
-
-    // Terran Buildings                                                                      m  g  s  t  unit  bld   wrk    rfn    sup    hall   add
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_COMMANDCENTER] =            { sc2::Race::Terran, 0, 0, 0, 0, true, true, false, false, false,  true, false, sc2::ABILITY_ID::BUILD_COMMANDCENTER, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, {}, {} }; 
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_SUPPLYDEPOT] =              { sc2::Race::Terran, 0, 0, 0, 0, true, true, false, false,  true, false, false, sc2::ABILITY_ID::BUILD_SUPPLYDEPOT, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, {}, {} };  
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_REFINERY] =                 { sc2::Race::Terran, 0, 0, 0, 0, true, true, false,  true, false, false, false, sc2::ABILITY_ID::BUILD_REFINERY, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, {}, {} }; 
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_ARMORY] =                   { sc2::Race::Terran, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_ARMORY, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, { sc2::UNIT_TYPEID::TERRAN_FACTORY, sc2::UNIT_TYPEID::TERRAN_FACTORYFLYING }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_BARRACKS] =                 { sc2::Race::Terran, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_BARRACKS, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, { sc2::UNIT_TYPEID::TERRAN_SUPPLYDEPOT, sc2::UNIT_TYPEID::TERRAN_SUPPLYDEPOTLOWERED }, {} }; 
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_SENSORTOWER] =              { sc2::Race::Terran, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_SENSORTOWER, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, { sc2::UNIT_TYPEID::TERRAN_ENGINEERINGBAY }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_FACTORY] =                  { sc2::Race::Terran, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_FACTORY, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, { sc2::UNIT_TYPEID::TERRAN_BARRACKS, sc2::UNIT_TYPEID::TERRAN_BARRACKSFLYING }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_FUSIONCORE] =               { sc2::Race::Terran, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_FUSIONCORE, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, { sc2::UNIT_TYPEID::TERRAN_STARPORT, sc2::UNIT_TYPEID::TERRAN_STARPORTFLYING }, {} }; 
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_STARPORT] =                 { sc2::Race::Terran, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_STARPORT, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, { sc2::UNIT_TYPEID::TERRAN_FACTORY, sc2::UNIT_TYPEID::TERRAN_FACTORYFLYING }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_GHOSTACADEMY] =             { sc2::Race::Terran, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_GHOSTACADEMY, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, { sc2::UNIT_TYPEID::TERRAN_BARRACKS, sc2::UNIT_TYPEID::TERRAN_BARRACKSFLYING }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_BUNKER] =                   { sc2::Race::Terran, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_BUNKER, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, { sc2::UNIT_TYPEID::TERRAN_BARRACKS, sc2::UNIT_TYPEID::TERRAN_BARRACKSFLYING }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_ENGINEERINGBAY] =           { sc2::Race::Terran, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_ENGINEERINGBAY, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, { sc2::UNIT_TYPEID::TERRAN_COMMANDCENTER, sc2::UNIT_TYPEID::TERRAN_COMMANDCENTERFLYING, sc2::UNIT_TYPEID::TERRAN_PLANETARYFORTRESS, sc2::UNIT_TYPEID::TERRAN_ORBITALCOMMAND, sc2::UNIT_TYPEID::TERRAN_ORBITALCOMMANDFLYING }, {} }; 
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_MISSILETURRET] =            { sc2::Race::Terran, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_MISSILETURRET, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, { sc2::UNIT_TYPEID::TERRAN_ENGINEERINGBAY }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_ORBITALCOMMAND] =           { sc2::Race::Terran, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::MORPH_ORBITALCOMMAND, 0, { sc2::UNIT_TYPEID::TERRAN_COMMANDCENTER }, {}, {} }; 
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_PLANETARYFORTRESS] =        { sc2::Race::Terran, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::MORPH_PLANETARYFORTRESS, 0, { sc2::UNIT_TYPEID::TERRAN_COMMANDCENTER }, {}, {} };
-
-    // Terran Addons                                                                         m  g  s  t  unit  bld   wrk    rfn    sup    hall   add
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_BARRACKSREACTOR] =          { sc2::Race::Terran, 0, 0, 0, 0, true, true, false, false, false, false, true, sc2::ABILITY_ID::BUILD_REACTOR_BARRACKS, 0, { sc2::UNIT_TYPEID::TERRAN_BARRACKS }, {}, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_BARRACKSTECHLAB] =          { sc2::Race::Terran, 0, 0, 0, 0, true, true, false, false, false, false, true, sc2::ABILITY_ID::BUILD_TECHLAB_BARRACKS, 0, { sc2::UNIT_TYPEID::TERRAN_BARRACKS }, {}, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_FACTORYREACTOR] =           { sc2::Race::Terran, 0, 0, 0, 0, true, true, false, false, false, false, true, sc2::ABILITY_ID::BUILD_REACTOR_FACTORY, 0, { sc2::UNIT_TYPEID::TERRAN_FACTORY }, {}, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_FACTORYTECHLAB] =           { sc2::Race::Terran, 0, 0, 0, 0, true, true, false, false, false, false, true, sc2::ABILITY_ID::BUILD_TECHLAB_FACTORY, 0, { sc2::UNIT_TYPEID::TERRAN_FACTORY }, {}, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_STARPORTREACTOR] =          { sc2::Race::Terran, 0, 0, 0, 0, true, true, false, false, false, false, true, sc2::ABILITY_ID::BUILD_REACTOR_STARPORT, 0, { sc2::UNIT_TYPEID::TERRAN_STARPORT }, {}, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_STARPORTTECHLAB] =          { sc2::Race::Terran, 0, 0, 0, 0, true, true, false, false, false, false, true, sc2::ABILITY_ID::BUILD_TECHLAB_STARPORT, 0, { sc2::UNIT_TYPEID::TERRAN_STARPORT }, {}, {} };
-
-    // Terran Equivalent Buildings
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_SUPPLYDEPOTLOWERED] =       m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_SUPPLYDEPOT];
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_BARRACKSFLYING] =           m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_BARRACKS];
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_COMMANDCENTERFLYING] =      m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_COMMANDCENTER];
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_FACTORYFLYING] =            m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_FACTORY];
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_ORBITALCOMMANDFLYING] =     m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_ORBITALCOMMAND];
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_STARPORTFLYING] =           m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_STARPORT];
-
-    // Terran Units                                                                          m  g  s  t  unit  bld    wrk    rfn    sup    hall   add
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_SCV] =                      { sc2::Race::Terran, 0, 0, 1, 0, true, false,  true, false, false, false, false, sc2::ABILITY_ID::TRAIN_SCV, 0, { sc2::UNIT_TYPEID::TERRAN_COMMANDCENTER }, {}, {} }; 
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_GHOST] =                    { sc2::Race::Terran, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_GHOST, 0, { sc2::UNIT_TYPEID::TERRAN_BARRACKS }, {}, {} }; 
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_MARAUDER] =                 { sc2::Race::Terran, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_MARAUDER, 0, { sc2::UNIT_TYPEID::TERRAN_BARRACKS }, { sc2::UNIT_TYPEID::TERRAN_TECHLAB, sc2::UNIT_TYPEID::TERRAN_BARRACKSTECHLAB, sc2::UNIT_TYPEID::TERRAN_FACTORYTECHLAB, sc2::UNIT_TYPEID::TERRAN_STARPORTTECHLAB }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_MARINE] =                   { sc2::Race::Terran, 0, 0, 1, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_MARINE, 0, { sc2::UNIT_TYPEID::TERRAN_BARRACKS }, {}, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_REAPER] =                   { sc2::Race::Terran, 0, 0, 1, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_REAPER, 0, { sc2::UNIT_TYPEID::TERRAN_BARRACKS }, {}, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_HELLION] =                  { sc2::Race::Terran, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_HELLION, 0, { sc2::UNIT_TYPEID::TERRAN_FACTORY }, {}, {} }; 
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_CYCLONE] =                  { sc2::Race::Terran, 0, 0, 3, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_CYCLONE, 0, { sc2::UNIT_TYPEID::TERRAN_FACTORY }, {}, {} };  
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_SIEGETANK] =                { sc2::Race::Terran, 0, 0, 3, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_SIEGETANK, 0, { sc2::UNIT_TYPEID::TERRAN_FACTORY }, { sc2::UNIT_TYPEID::TERRAN_TECHLAB, sc2::UNIT_TYPEID::TERRAN_BARRACKSTECHLAB, sc2::UNIT_TYPEID::TERRAN_FACTORYTECHLAB, sc2::UNIT_TYPEID::TERRAN_STARPORTTECHLAB }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_THOR] =                     { sc2::Race::Terran, 0, 0, 6, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_THOR, 0, { sc2::UNIT_TYPEID::TERRAN_FACTORY }, {}, {} };  
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_WIDOWMINE] =                { sc2::Race::Terran, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_WIDOWMINE, 0, { sc2::UNIT_TYPEID::TERRAN_FACTORY }, {}, {} }; 
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_NUKE] =                     { sc2::Race::Terran, 0, 0, 0, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::BUILD_NUKE, 0, { sc2::UNIT_TYPEID::TERRAN_GHOSTACADEMY }, {}, {} }; 
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_BANSHEE] =                  { sc2::Race::Terran, 0, 0, 3, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_BANSHEE, 0, { sc2::UNIT_TYPEID::TERRAN_STARPORT }, { sc2::UNIT_TYPEID::TERRAN_TECHLAB, sc2::UNIT_TYPEID::TERRAN_BARRACKSTECHLAB, sc2::UNIT_TYPEID::TERRAN_FACTORYTECHLAB, sc2::UNIT_TYPEID::TERRAN_STARPORTTECHLAB }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_BATTLECRUISER] =            { sc2::Race::Terran, 0, 0, 6, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_BATTLECRUISER, 0, { sc2::UNIT_TYPEID::TERRAN_STARPORT }, {}, {} }; 
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_LIBERATOR] =                { sc2::Race::Terran, 0, 0, 3, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_LIBERATOR, 0, { sc2::UNIT_TYPEID::TERRAN_STARPORT }, {}, {} }; 
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_VIKINGFIGHTER] =            { sc2::Race::Terran, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_VIKINGFIGHTER, 0, { sc2::UNIT_TYPEID::TERRAN_STARPORT }, {}, {} }; 
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_RAVEN] =                    { sc2::Race::Terran, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_RAVEN, 0, { sc2::UNIT_TYPEID::TERRAN_STARPORT }, { sc2::UNIT_TYPEID::TERRAN_TECHLAB, sc2::UNIT_TYPEID::TERRAN_BARRACKSTECHLAB, sc2::UNIT_TYPEID::TERRAN_FACTORYTECHLAB, sc2::UNIT_TYPEID::TERRAN_STARPORTTECHLAB }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_MEDIVAC] =                  { sc2::Race::Terran, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_MEDIVAC, 0, { sc2::UNIT_TYPEID::TERRAN_STARPORT }, {}, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::TERRAN_MULE] =                     { sc2::Race::Terran, 0, 0, 0, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::EFFECT_CALLDOWNMULE, 0, { sc2::UNIT_TYPEID::TERRAN_ORBITALCOMMAND }, {}, {} }; 
-
-    // Zerg Buildings                                                                      m  g  s  t  unit  bld   wrk    rfn    sup    hall   add
-    m_unitTypeData[sc2::UNIT_TYPEID::ZERG_HATCHERY] =                   { sc2::Race::Zerg, 0, 0, 0, 0, true, true, false, false, false,  true, false, sc2::ABILITY_ID::BUILD_HATCHERY, 0, { sc2::UNIT_TYPEID::ZERG_DRONE }, {}, {} }; 
-    m_unitTypeData[sc2::UNIT_TYPEID::ZERG_EXTRACTOR] =                  { sc2::Race::Zerg, 0, 0, 0, 0, true, true, false,  true, false, false, false, sc2::ABILITY_ID::BUILD_EXTRACTOR, 0, { sc2::UNIT_TYPEID::ZERG_DRONE }, {}, {} }; 
-    m_unitTypeData[sc2::UNIT_TYPEID::ZERG_SPAWNINGPOOL] =               { sc2::Race::Zerg, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_SPAWNINGPOOL, 0, { sc2::UNIT_TYPEID::ZERG_DRONE }, { sc2::UNIT_TYPEID::ZERG_HATCHERY, sc2::UNIT_TYPEID::ZERG_LAIR, sc2::UNIT_TYPEID::ZERG_HIVE }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::ZERG_EVOLUTIONCHAMBER] =           { sc2::Race::Zerg, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_EVOLUTIONCHAMBER, 0, { sc2::UNIT_TYPEID::ZERG_DRONE }, { sc2::UNIT_TYPEID::ZERG_HATCHERY, sc2::UNIT_TYPEID::ZERG_LAIR, sc2::UNIT_TYPEID::ZERG_HIVE }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::ZERG_BANELINGNEST] =               { sc2::Race::Zerg, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_BANELINGNEST, 0, { sc2::UNIT_TYPEID::ZERG_DRONE }, { sc2::UNIT_TYPEID::ZERG_SPAWNINGPOOL }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::ZERG_HYDRALISKDEN] =               { sc2::Race::Zerg, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_HYDRALISKDEN, 0, { sc2::UNIT_TYPEID::ZERG_DRONE }, { sc2::UNIT_TYPEID::ZERG_LAIR, sc2::UNIT_TYPEID::ZERG_HIVE }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::ZERG_INFESTATIONPIT] =             { sc2::Race::Zerg, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_INFESTATIONPIT, 0, { sc2::UNIT_TYPEID::ZERG_DRONE }, { sc2::UNIT_TYPEID::ZERG_LAIR, sc2::UNIT_TYPEID::ZERG_HIVE }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::ZERG_NYDUSCANAL] =                 { sc2::Race::Zerg, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_NYDUSWORM, 0, { sc2::UNIT_TYPEID::ZERG_DRONE }, { sc2::UNIT_TYPEID::ZERG_NYDUSNETWORK }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::ZERG_NYDUSNETWORK] =               { sc2::Race::Zerg, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_NYDUSNETWORK, 0, { sc2::UNIT_TYPEID::ZERG_DRONE }, { sc2::UNIT_TYPEID::ZERG_LAIR, sc2::UNIT_TYPEID::ZERG_HIVE }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::ZERG_ROACHWARREN] =                { sc2::Race::Zerg, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_ROACHWARREN, 0, { sc2::UNIT_TYPEID::ZERG_DRONE }, { sc2::UNIT_TYPEID::ZERG_SPAWNINGPOOL }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::ZERG_SPINECRAWLER] =               { sc2::Race::Zerg, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_SPINECRAWLER, 0, { sc2::UNIT_TYPEID::ZERG_DRONE }, { sc2::UNIT_TYPEID::ZERG_SPAWNINGPOOL }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::ZERG_SPIRE] =                      { sc2::Race::Zerg, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_SPIRE, 0, { sc2::UNIT_TYPEID::ZERG_DRONE }, { sc2::UNIT_TYPEID::ZERG_LAIR, sc2::UNIT_TYPEID::ZERG_HIVE }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::ZERG_GREATERSPIRE] =               { sc2::Race::Zerg, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::MORPH_GREATERSPIRE, 0, { sc2::UNIT_TYPEID::ZERG_SPIRE }, { sc2::UNIT_TYPEID::ZERG_HIVE }, {} }; 
-    m_unitTypeData[sc2::UNIT_TYPEID::ZERG_SPORECRAWLER] =               { sc2::Race::Zerg, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_SPORECRAWLER, 0, { sc2::UNIT_TYPEID::ZERG_DRONE }, { sc2::UNIT_TYPEID::ZERG_SPAWNINGPOOL }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::ZERG_ULTRALISKCAVERN] =            { sc2::Race::Zerg, 0, 0, 0, 0, true, true, false, false, false, false, false, sc2::ABILITY_ID::BUILD_ULTRALISKCAVERN, 0, { sc2::UNIT_TYPEID::ZERG_DRONE }, { sc2::UNIT_TYPEID::ZERG_HIVE }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::ZERG_LAIR] =                       { sc2::Race::Zerg, 0, 0, 0, 0, true, true, false, false, false,  true, false, sc2::ABILITY_ID::MORPH_LAIR, 0, { sc2::UNIT_TYPEID::ZERG_HATCHERY }, {}, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::ZERG_HIVE] =                       { sc2::Race::Zerg, 0, 0, 0, 0, true, true, false, false, false,  true, false, sc2::ABILITY_ID::MORPH_HIVE, 0, { sc2::UNIT_TYPEID::ZERG_LAIR }, {}, {} };  
-
-    // Zerg Units                                                                          m  g  s  t  unit  bld    wrk    rfn    sup    hall   add
-    m_unitTypeData[sc2::UNIT_TYPEID::ZERG_OVERLORD] =                   { sc2::Race::Zerg, 0, 0, 0, 0, true, false, false, false,  true, false, false, sc2::ABILITY_ID::TRAIN_OVERLORD, 0, { sc2::UNIT_TYPEID::ZERG_LARVA }, {}, {} }; 
-    m_unitTypeData[sc2::UNIT_TYPEID::ZERG_BANELING] =                   { sc2::Race::Zerg, 0, 0, 0, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_BANELING, 0, { sc2::UNIT_TYPEID::ZERG_LARVA }, { sc2::UNIT_TYPEID::ZERG_BANELINGNEST }, {} }; 
-    m_unitTypeData[sc2::UNIT_TYPEID::ZERG_CORRUPTOR] =                  { sc2::Race::Zerg, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_CORRUPTOR, 0, { sc2::UNIT_TYPEID::ZERG_LARVA }, { sc2::UNIT_TYPEID::ZERG_SPIRE, sc2::UNIT_TYPEID::ZERG_GREATERSPIRE }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::ZERG_DRONE] =                      { sc2::Race::Zerg, 0, 0, 1, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_DRONE, 0, { sc2::UNIT_TYPEID::ZERG_LARVA }, {}, {} }; 
-    m_unitTypeData[sc2::UNIT_TYPEID::ZERG_HYDRALISK] =                  { sc2::Race::Zerg, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_HYDRALISK, 0, { sc2::UNIT_TYPEID::ZERG_LARVA }, { sc2::UNIT_TYPEID::ZERG_HYDRALISKDEN, sc2::UNIT_TYPEID::ZERG_LURKERDENMP }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::ZERG_INFESTOR] =                   { sc2::Race::Zerg, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_INFESTOR, 0, { sc2::UNIT_TYPEID::ZERG_LARVA }, { sc2::UNIT_TYPEID::ZERG_INFESTATIONPIT }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::ZERG_MUTALISK] =                   { sc2::Race::Zerg, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_MUTALISK, 0, { sc2::UNIT_TYPEID::ZERG_LARVA }, { sc2::UNIT_TYPEID::ZERG_SPIRE, sc2::UNIT_TYPEID::ZERG_GREATERSPIRE }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::ZERG_ROACH] =                      { sc2::Race::Zerg, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_ROACH, 0, { sc2::UNIT_TYPEID::ZERG_LARVA }, { sc2::UNIT_TYPEID::ZERG_ROACHWARREN }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::ZERG_SWARMHOSTMP] =                { sc2::Race::Zerg, 0, 0, 3, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_SWARMHOST, 0, { sc2::UNIT_TYPEID::ZERG_LARVA }, { sc2::UNIT_TYPEID::ZERG_INFESTATIONPIT }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::ZERG_ULTRALISK] =                  { sc2::Race::Zerg, 0, 0, 6, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_ULTRALISK, 0, { sc2::UNIT_TYPEID::ZERG_LARVA }, { sc2::UNIT_TYPEID::ZERG_ULTRALISKCAVERN }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::ZERG_VIPER] =                      { sc2::Race::Zerg, 0, 0, 3, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_VIPER, 0, { sc2::UNIT_TYPEID::ZERG_LARVA }, { sc2::UNIT_TYPEID::ZERG_HIVE }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::ZERG_ZERGLING] =                   { sc2::Race::Zerg, 0, 0, 1, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_ZERGLING, 0, { sc2::UNIT_TYPEID::ZERG_LARVA }, { sc2::UNIT_TYPEID::ZERG_SPAWNINGPOOL }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::ZERG_QUEEN] =                      { sc2::Race::Zerg, 0, 0, 2, 0, true, false, false, false, false, false, false, sc2::ABILITY_ID::TRAIN_QUEEN, 0, { sc2::UNIT_TYPEID::ZERG_HATCHERY }, { sc2::UNIT_TYPEID::ZERG_SPAWNINGPOOL }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::ZERG_LARVA] =                      { sc2::Race::Zerg, 0, 0, 2, 0, true, false, false, false, false, false, false, 0, 0, { 0 }, { 0 }, {} };
-    m_unitTypeData[sc2::UNIT_TYPEID::ZERG_EGG] =                        { sc2::Race::Zerg, 0, 0, 2, 0, true, false, false, false, false, false, false, 0, 0, { 0 }, { 0 }, {} };
-
-    // Set the Mineral / Gas cost of each unit
-    for (auto & kv : m_unitTypeData)
-    {
-        if (kv.first == 0) { continue; }
-        
-        auto & data = m_bot.Observation()->GetUnitTypeData();
-
-        kv.second.mineralCost = m_bot.Observation()->GetUnitTypeData()[kv.first].mineral_cost;
-        kv.second.gasCost     = m_bot.Observation()->GetUnitTypeData()[kv.first].vespene_cost;
-    }
-}
-
-void TechTree::initUpgradeData()
-{
-    // 0 data for null / error return
-    m_upgradeData[0] = TypeData();
-
-    // Terran Upgrades
-    m_upgradeData[sc2::UPGRADE_ID::BANSHEECLOAK] =                      { sc2::Race::Terran, 100, 100, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_BANSHEECLOAKINGFIELD, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::BANSHEESPEED] =                      { sc2::Race::Terran, 200, 200, 0, 2720, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_BANSHEEHYPERFLIGHTROTORS, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::BATTLECRUISERENABLESPECIALIZATIONS]= { sc2::Race::Terran, 150, 150, 0,  960, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_BATTLECRUISERWEAPONREFIT, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::DRILLCLAWS] =                        { sc2::Race::Terran, 150, 150, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_DRILLINGCLAWS, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::HIGHCAPACITYBARRELS] =               { sc2::Race::Terran, 150, 150, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_INFERNALPREIGNITER, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::HISECAUTOTRACKING] =                 { sc2::Race::Terran, 100, 100, 0, 1280, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_HISECAUTOTRACKING, 0, { sc2::UNIT_TYPEID::TERRAN_ENGINEERINGBAY }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::LIBERATORAGRANGEUPGRADE] =           { sc2::Race::Terran, 150, 150, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_ADVANCEDBALLISTICS, 0, { sc2::UNIT_TYPEID::TERRAN_STARPORTTECHLAB }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::MAGFIELDLAUNCHERS] =                 { sc2::Race::Terran, 100, 100, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_MAGFIELDLAUNCHERS, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::MEDIVACINCREASESPEEDBOOST] =         { sc2::Race::Terran, 100, 100, 0, 1280, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_HIGHCAPACITYFUELTANKS, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::NEOSTEELFRAME] =                     { sc2::Race::Terran, 100, 100, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_NEOSTEELFRAME, 0, { sc2::UNIT_TYPEID::TERRAN_ENGINEERINGBAY }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::PERSONALCLOAKING] =                  { sc2::Race::Terran, 150, 150, 0, 1920, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_PERSONALCLOAKING, 0, { sc2::UNIT_TYPEID::TERRAN_GHOSTACADEMY }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::PUNISHERGRENADES] =                  { sc2::Race::Terran,  50,  50, 0,  960, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_CONCUSSIVESHELLS, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::RAVENCORVIDREACTOR] =                { sc2::Race::Terran, 150, 150, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_RAVENCORVIDREACTOR, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::RAVENRECALIBRATEDEXPLOSIVES] =       { sc2::Race::Terran, 150, 150, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_RAVENRECALIBRATEDEXPLOSIVES, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::SHIELDWALL] =                        { sc2::Race::Terran, 100, 100, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_COMBATSHIELD, 0, { sc2::UNIT_TYPEID::TERRAN_BARRACKSTECHLAB }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::STIMPACK] =                          { sc2::Race::Terran, 100, 100, 0, 2720, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_STIMPACK, 0, { sc2::UNIT_TYPEID::TERRAN_SCV }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::TERRANBUILDINGARMOR] =               { sc2::Race::Terran, 150, 150, 0, 2240, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_TERRANSTRUCTUREARMORUPGRADE, 0, { sc2::UNIT_TYPEID::TERRAN_ENGINEERINGBAY }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::TERRANINFANTRYARMORSLEVEL1] =        { sc2::Race::Terran, 100, 100, 0, 2560, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYARMORLEVEL1, 0, { sc2::UNIT_TYPEID::TERRAN_ENGINEERINGBAY }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::TERRANINFANTRYARMORSLEVEL2] =        { sc2::Race::Terran, 175, 175, 0, 3040, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYARMORLEVEL2, 0, { sc2::UNIT_TYPEID::TERRAN_ENGINEERINGBAY }, { sc2::UNIT_TYPEID::TERRAN_ARMORY }, {sc2::UPGRADE_ID::TERRANINFANTRYARMORSLEVEL1} };
-    m_upgradeData[sc2::UPGRADE_ID::TERRANINFANTRYARMORSLEVEL3] =        { sc2::Race::Terran, 250, 250, 0, 3520, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYARMORLEVEL3, 0, { sc2::UNIT_TYPEID::TERRAN_ENGINEERINGBAY }, { sc2::UNIT_TYPEID::TERRAN_ARMORY }, {sc2::UPGRADE_ID::TERRANINFANTRYARMORSLEVEL2} };
-    m_upgradeData[sc2::UPGRADE_ID::TERRANINFANTRYWEAPONSLEVEL1] =       { sc2::Race::Terran, 100, 100, 0, 2560, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYWEAPONSLEVEL1, 0, { sc2::UNIT_TYPEID::TERRAN_ENGINEERINGBAY }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::TERRANINFANTRYWEAPONSLEVEL2] =       { sc2::Race::Terran, 175, 175, 0, 3040, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYWEAPONSLEVEL2, 0, { sc2::UNIT_TYPEID::TERRAN_ENGINEERINGBAY }, { sc2::UNIT_TYPEID::TERRAN_ARMORY }, {sc2::UPGRADE_ID::TERRANINFANTRYWEAPONSLEVEL1} };
-    m_upgradeData[sc2::UPGRADE_ID::TERRANINFANTRYWEAPONSLEVEL3] =       { sc2::Race::Terran, 250, 250, 0, 3520, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_TERRANINFANTRYWEAPONSLEVEL3, 0, { sc2::UNIT_TYPEID::TERRAN_ENGINEERINGBAY }, { sc2::UNIT_TYPEID::TERRAN_ARMORY }, {sc2::UPGRADE_ID::TERRANINFANTRYWEAPONSLEVEL2} };
-    m_upgradeData[sc2::UPGRADE_ID::TERRANSHIPWEAPONSLEVEL1] =           { sc2::Race::Terran, 100, 100, 0, 2560, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_TERRANSHIPWEAPONSLEVEL1, 0, { sc2::UNIT_TYPEID::TERRAN_ARMORY }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::TERRANSHIPWEAPONSLEVEL2] =           { sc2::Race::Terran, 175, 175, 0, 3040, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_TERRANSHIPWEAPONSLEVEL2, 0, { sc2::UNIT_TYPEID::TERRAN_ARMORY }, {}, {sc2::UPGRADE_ID::TERRANSHIPWEAPONSLEVEL1} };
-    m_upgradeData[sc2::UPGRADE_ID::TERRANSHIPWEAPONSLEVEL3] =           { sc2::Race::Terran, 250, 250, 0, 3520, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_TERRANSHIPWEAPONSLEVEL3, 0, { sc2::UNIT_TYPEID::TERRAN_ARMORY }, {}, {sc2::UPGRADE_ID::TERRANSHIPWEAPONSLEVEL2} };
-    m_upgradeData[sc2::UPGRADE_ID::TERRANVEHICLEANDSHIPARMORSLEVEL1] =  { sc2::Race::Terran, 100, 100, 0, 2560, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEANDSHIPPLATINGLEVEL1, 0, { sc2::UNIT_TYPEID::TERRAN_ARMORY }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::TERRANVEHICLEANDSHIPARMORSLEVEL2] =  { sc2::Race::Terran, 175, 175, 0, 3040, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEANDSHIPPLATINGLEVEL2, 0, { sc2::UNIT_TYPEID::TERRAN_ARMORY }, {}, {sc2::UPGRADE_ID::TERRANVEHICLEANDSHIPARMORSLEVEL1} };
-    m_upgradeData[sc2::UPGRADE_ID::TERRANVEHICLEANDSHIPARMORSLEVEL3] =  { sc2::Race::Terran, 250, 250, 0, 3520, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEANDSHIPPLATINGLEVEL3, 0, { sc2::UNIT_TYPEID::TERRAN_ARMORY }, {}, {sc2::UPGRADE_ID::TERRANVEHICLEANDSHIPARMORSLEVEL2} };
-    m_upgradeData[sc2::UPGRADE_ID::TERRANVEHICLEWEAPONSLEVEL1] =        { sc2::Race::Terran, 100, 100, 0, 2560, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEWEAPONSLEVEL1, 0, { sc2::UNIT_TYPEID::TERRAN_ARMORY }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::TERRANVEHICLEWEAPONSLEVEL2] =        { sc2::Race::Terran, 175, 175, 0, 3040, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEWEAPONSLEVEL2, 0, { sc2::UNIT_TYPEID::TERRAN_ARMORY }, {}, {sc2::UPGRADE_ID::TERRANVEHICLEWEAPONSLEVEL1} };
-    m_upgradeData[sc2::UPGRADE_ID::TERRANVEHICLEWEAPONSLEVEL3] =        { sc2::Race::Terran, 250, 250, 0, 3520, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_TERRANVEHICLEWEAPONSLEVEL3, 0, { sc2::UNIT_TYPEID::TERRAN_ARMORY }, {}, {sc2::UPGRADE_ID::TERRANVEHICLEWEAPONSLEVEL2} };
-
-    // Protoss Upgrades
-    m_upgradeData[sc2::UPGRADE_ID::ADEPTPIERCINGATTACK] =               { sc2::Race::Protoss, 100, 100, 0, 2240, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_ADEPTRESONATINGGLAIVES, 0, { sc2::UNIT_TYPEID::PROTOSS_TWILIGHTCOUNCIL }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::BLINKTECH] =                         { sc2::Race::Protoss, 150, 150, 0, 2720, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_BLINK, 0, { sc2::UNIT_TYPEID::PROTOSS_TWILIGHTCOUNCIL }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::CARRIERLAUNCHSPEEDUPGRADE] =         { sc2::Race::Protoss, 150, 150, 0, 1280, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_INTERCEPTORGRAVITONCATAPULT, 0, { sc2::UNIT_TYPEID::PROTOSS_FLEETBEACON }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::CHARGE] =                            { sc2::Race::Protoss, 100, 100, 0, 2240, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_CHARGE, 0, { sc2::UNIT_TYPEID::PROTOSS_TWILIGHTCOUNCIL }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::DARKTEMPLARBLINKUPGRADE] =           { sc2::Race::Protoss, 100, 100, 0, 2720, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_SHADOWSTRIKE, 0, { sc2::UNIT_TYPEID::PROTOSS_DARKSHRINE }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::EXTENDEDTHERMALLANCE] =              { sc2::Race::Protoss, 200, 200, 0, 2240, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_EXTENDEDTHERMALLANCE, 0, { sc2::UNIT_TYPEID::PROTOSS_ROBOTICSBAY }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::GRAVITICDRIVE] =                     { sc2::Race::Protoss, 100, 100, 0, 1280, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_GRAVITICDRIVE, 0, { sc2::UNIT_TYPEID::PROTOSS_ROBOTICSBAY }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::OBSERVERGRAVITICBOOSTER] =           { sc2::Race::Protoss, 100, 100, 0, 1280, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_GRAVITICBOOSTER, 0, { sc2::UNIT_TYPEID::PROTOSS_ROBOTICSBAY }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::PHOENIXRANGEUPGRADE] =               { sc2::Race::Protoss, 150, 150, 0, 1440, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_PHOENIXANIONPULSECRYSTALS, 0, { sc2::UNIT_TYPEID::PROTOSS_FLEETBEACON }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::PROTOSSAIRARMORSLEVEL1] =            { sc2::Race::Protoss, 150, 150, 0, 2560, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_PROTOSSAIRARMORLEVEL1, 0,   { sc2::UNIT_TYPEID::PROTOSS_CYBERNETICSCORE }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::PROTOSSAIRARMORSLEVEL2] =            { sc2::Race::Protoss, 225, 225, 0, 3040, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_PROTOSSAIRARMORLEVEL2, 0,   { sc2::UNIT_TYPEID::PROTOSS_CYBERNETICSCORE }, { sc2::UNIT_TYPEID::PROTOSS_FLEETBEACON }, {sc2::UPGRADE_ID::PROTOSSAIRARMORSLEVEL1} };
-    m_upgradeData[sc2::UPGRADE_ID::PROTOSSAIRARMORSLEVEL3] =            { sc2::Race::Protoss, 300, 300, 0, 3520, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_PROTOSSAIRARMORLEVEL3, 0,   { sc2::UNIT_TYPEID::PROTOSS_CYBERNETICSCORE }, { sc2::UNIT_TYPEID::PROTOSS_FLEETBEACON }, {sc2::UPGRADE_ID::PROTOSSAIRARMORSLEVEL2} };
-    m_upgradeData[sc2::UPGRADE_ID::PROTOSSAIRWEAPONSLEVEL1] =           { sc2::Race::Protoss, 100, 100, 0, 2560, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_PROTOSSAIRWEAPONSLEVEL1, 0, { sc2::UNIT_TYPEID::PROTOSS_CYBERNETICSCORE }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::PROTOSSAIRWEAPONSLEVEL2] =           { sc2::Race::Protoss, 175, 175, 0, 3040, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_PROTOSSAIRWEAPONSLEVEL2, 0, { sc2::UNIT_TYPEID::PROTOSS_CYBERNETICSCORE }, { sc2::UNIT_TYPEID::PROTOSS_FLEETBEACON }, {sc2::UPGRADE_ID::PROTOSSAIRWEAPONSLEVEL1} };
-    m_upgradeData[sc2::UPGRADE_ID::PROTOSSAIRWEAPONSLEVEL3] =           { sc2::Race::Protoss, 250, 250, 0, 3520, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_PROTOSSAIRWEAPONSLEVEL3, 0, { sc2::UNIT_TYPEID::PROTOSS_CYBERNETICSCORE }, { sc2::UNIT_TYPEID::PROTOSS_FLEETBEACON }, {sc2::UPGRADE_ID::PROTOSSAIRWEAPONSLEVEL3} };
-    m_upgradeData[sc2::UPGRADE_ID::PROTOSSGROUNDARMORSLEVEL1] =         { sc2::Race::Protoss, 100, 100, 0, 2560, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDARMORLEVEL1, 0, { sc2::UNIT_TYPEID::PROTOSS_FORGE }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::PROTOSSGROUNDARMORSLEVEL2] =         { sc2::Race::Protoss, 150, 150, 0, 3040, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDARMORLEVEL2, 0, { sc2::UNIT_TYPEID::PROTOSS_FORGE }, { sc2::UNIT_TYPEID::PROTOSS_TWILIGHTCOUNCIL }, { sc2::UPGRADE_ID::PROTOSSGROUNDARMORSLEVEL1 } };
-    m_upgradeData[sc2::UPGRADE_ID::PROTOSSGROUNDARMORSLEVEL3] =         { sc2::Race::Protoss, 200, 200, 0, 3520, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDARMORLEVEL3, 0, { sc2::UNIT_TYPEID::PROTOSS_FORGE }, { sc2::UNIT_TYPEID::PROTOSS_TWILIGHTCOUNCIL }, { sc2::UPGRADE_ID::PROTOSSGROUNDARMORSLEVEL2 } };
-    m_upgradeData[sc2::UPGRADE_ID::PROTOSSGROUNDWEAPONSLEVEL1] =        { sc2::Race::Protoss, 100, 100, 0, 2560, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDWEAPONSLEVEL1, 0, { sc2::UNIT_TYPEID::PROTOSS_FORGE }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::PROTOSSGROUNDWEAPONSLEVEL2] =        { sc2::Race::Protoss, 150, 150, 0, 3040, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDWEAPONSLEVEL2, 0, { sc2::UNIT_TYPEID::PROTOSS_FORGE }, { sc2::UNIT_TYPEID::PROTOSS_TWILIGHTCOUNCIL }, { sc2::UPGRADE_ID::PROTOSSGROUNDWEAPONSLEVEL1 } };
-    m_upgradeData[sc2::UPGRADE_ID::PROTOSSGROUNDWEAPONSLEVEL3] =        { sc2::Race::Protoss, 200, 200, 0, 3520, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_PROTOSSGROUNDWEAPONSLEVEL3, 0, { sc2::UNIT_TYPEID::PROTOSS_FORGE }, { sc2::UNIT_TYPEID::PROTOSS_TWILIGHTCOUNCIL }, { sc2::UPGRADE_ID::PROTOSSGROUNDWEAPONSLEVEL2 } };
-    m_upgradeData[sc2::UPGRADE_ID::PROTOSSSHIELDSLEVEL1] =              { sc2::Race::Protoss, 150, 150, 0, 2560, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_PROTOSSSHIELDSLEVEL1, 0, { sc2::UNIT_TYPEID::PROTOSS_FORGE }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::PROTOSSSHIELDSLEVEL2] =              { sc2::Race::Protoss, 225, 225, 0, 3040, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_PROTOSSSHIELDSLEVEL2, 0, { sc2::UNIT_TYPEID::PROTOSS_FORGE }, { sc2::UNIT_TYPEID::PROTOSS_TWILIGHTCOUNCIL }, { sc2::UPGRADE_ID::PROTOSSSHIELDSLEVEL1 } };
-    m_upgradeData[sc2::UPGRADE_ID::PROTOSSSHIELDSLEVEL3] =              { sc2::Race::Protoss, 300, 300, 0, 3520, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_PROTOSSSHIELDSLEVEL3, 0, { sc2::UNIT_TYPEID::PROTOSS_FORGE }, { sc2::UNIT_TYPEID::PROTOSS_TWILIGHTCOUNCIL }, { sc2::UPGRADE_ID::PROTOSSSHIELDSLEVEL2} };
-    m_upgradeData[sc2::UPGRADE_ID::PSISTORMTECH] =                      { sc2::Race::Protoss, 200, 200, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_PSISTORM, 0, { sc2::UNIT_TYPEID::PROTOSS_TEMPLARARCHIVE }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::WARPGATERESEARCH] =                  { sc2::Race::Protoss,  50,  50, 0, 2560, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_WARPGATE, 0, { sc2::UNIT_TYPEID::PROTOSS_CYBERNETICSCORE }, {}, {} };
-
-    // Zerg Upgrades
-    m_upgradeData[sc2::UPGRADE_ID::BURROW] =                            { sc2::Race::Zerg, 100, 100, 0, 1600, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_BURROW, 0, { sc2::UNIT_TYPEID::ZERG_HATCHERY, sc2::UNIT_TYPEID::ZERG_LAIR, sc2::UNIT_TYPEID::ZERG_HIVE }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::CENTRIFICALHOOKS] =                  { sc2::Race::Zerg, 150, 150, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_CENTRIFUGALHOOKS, 0, { sc2::UNIT_TYPEID::ZERG_BANELINGNEST }, {}, {} }; 
-    m_upgradeData[sc2::UPGRADE_ID::CHITINOUSPLATING] =                  { sc2::Race::Zerg, 150, 150, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_CHITINOUSPLATING, 0, { sc2::UNIT_TYPEID::ZERG_ULTRALISKCAVERN }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::EVOLVEGROOVEDSPINES] =               { sc2::Race::Zerg, 150, 150, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_GROOVEDSPINES, 0, { sc2::UNIT_TYPEID::ZERG_HYDRALISKDEN }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::EVOLVEMUSCULARAUGMENTS] =            { sc2::Race::Zerg, 150, 150, 0, 1600, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_MUSCULARAUGMENTS, 0, { sc2::UNIT_TYPEID::ZERG_HYDRALISKDEN }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::GLIALRECONSTITUTION] =               { sc2::Race::Zerg, 100, 100, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_GLIALREGENERATION, 0, { sc2::UNIT_TYPEID::ZERG_ROACHWARREN }, { sc2::UNIT_TYPEID::ZERG_LAIR, sc2::UNIT_TYPEID::ZERG_HIVE }, {} };
-    m_upgradeData[sc2::UPGRADE_ID::INFESTORENERGYUPGRADE] =             { sc2::Race::Zerg, 150, 150, 0, 1280, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_PATHOGENGLANDS, 0, { sc2::UNIT_TYPEID::ZERG_INFESTATIONPIT }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::NEURALPARASITE] =                    { sc2::Race::Zerg, 150, 150, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_NEURALPARASITE, 0, { sc2::UNIT_TYPEID::ZERG_INFESTATIONPIT }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::OVERLORDSPEED] =                     { sc2::Race::Zerg, 100, 100, 0,  960, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_PNEUMATIZEDCARAPACE, 0, { sc2::UNIT_TYPEID::ZERG_HATCHERY, sc2::UNIT_TYPEID::ZERG_LAIR, sc2::UNIT_TYPEID::ZERG_HIVE }, {}, {} };                       
-    m_upgradeData[sc2::UPGRADE_ID::TUNNELINGCLAWS] =                    { sc2::Race::Zerg, 150, 150, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_TUNNELINGCLAWS, 0, { sc2::UNIT_TYPEID::ZERG_ROACHWARREN }, { sc2::UNIT_TYPEID::ZERG_LAIR, sc2::UNIT_TYPEID::ZERG_HIVE }, {} };
-    m_upgradeData[sc2::UPGRADE_ID::ZERGFLYERARMORSLEVEL1] =             { sc2::Race::Zerg, 150, 150, 0, 2560, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_ZERGFLYERARMORLEVEL1, 0, { sc2::UNIT_TYPEID::ZERG_SPIRE, sc2::UNIT_TYPEID::ZERG_GREATERSPIRE }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::ZERGFLYERARMORSLEVEL2] =             { sc2::Race::Zerg, 225, 225, 0, 3040, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_ZERGFLYERARMORLEVEL2, 0, { sc2::UNIT_TYPEID::ZERG_SPIRE, sc2::UNIT_TYPEID::ZERG_GREATERSPIRE }, { sc2::UNIT_TYPEID::ZERG_LAIR, sc2::UNIT_TYPEID::ZERG_HIVE }, { sc2::UPGRADE_ID::ZERGFLYERARMORSLEVEL1 } };
-    m_upgradeData[sc2::UPGRADE_ID::ZERGFLYERARMORSLEVEL3] =             { sc2::Race::Zerg, 300, 300, 0, 3520, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_ZERGFLYERARMORLEVEL3, 0, { sc2::UNIT_TYPEID::ZERG_SPIRE, sc2::UNIT_TYPEID::ZERG_GREATERSPIRE }, { sc2::UNIT_TYPEID::ZERG_HIVE }, { sc2::UPGRADE_ID::ZERGFLYERARMORSLEVEL2 } };
-    m_upgradeData[sc2::UPGRADE_ID::ZERGFLYERWEAPONSLEVEL1] =            { sc2::Race::Zerg, 100, 100, 0, 2560, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_ZERGFLYERATTACKLEVEL1, 0, { sc2::UNIT_TYPEID::ZERG_SPIRE, sc2::UNIT_TYPEID::ZERG_GREATERSPIRE }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::ZERGFLYERWEAPONSLEVEL2] =            { sc2::Race::Zerg, 175, 175, 0, 3040, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_ZERGFLYERATTACKLEVEL2, 0, { sc2::UNIT_TYPEID::ZERG_SPIRE, sc2::UNIT_TYPEID::ZERG_GREATERSPIRE }, { sc2::UNIT_TYPEID::ZERG_LAIR, sc2::UNIT_TYPEID::ZERG_HIVE }, { sc2::UPGRADE_ID::ZERGFLYERWEAPONSLEVEL1 } };
-    m_upgradeData[sc2::UPGRADE_ID::ZERGFLYERWEAPONSLEVEL3] =            { sc2::Race::Zerg, 250, 250, 0, 3520, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_ZERGFLYERATTACKLEVEL3, 0, { sc2::UNIT_TYPEID::ZERG_SPIRE, sc2::UNIT_TYPEID::ZERG_GREATERSPIRE }, { sc2::UNIT_TYPEID::ZERG_HIVE }, { sc2::UPGRADE_ID::ZERGFLYERWEAPONSLEVEL2 } };
-    m_upgradeData[sc2::UPGRADE_ID::ZERGGROUNDARMORSLEVEL1] =            { sc2::Race::Zerg, 150, 150, 0, 2560, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_ZERGGROUNDARMORLEVEL1, 0, { sc2::UNIT_TYPEID::ZERG_EVOLUTIONCHAMBER }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::ZERGGROUNDARMORSLEVEL2] =            { sc2::Race::Zerg, 225, 225, 0, 3040, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_ZERGGROUNDARMORLEVEL2, 0, { sc2::UNIT_TYPEID::ZERG_EVOLUTIONCHAMBER }, { sc2::UNIT_TYPEID::ZERG_LAIR, sc2::UNIT_TYPEID::ZERG_HIVE }, {sc2::UPGRADE_ID::ZERGGROUNDARMORSLEVEL1} };
-    m_upgradeData[sc2::UPGRADE_ID::ZERGGROUNDARMORSLEVEL3] =            { sc2::Race::Zerg, 300, 300, 0, 3520, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_ZERGGROUNDARMORLEVEL3, 0, { sc2::UNIT_TYPEID::ZERG_EVOLUTIONCHAMBER }, { sc2::UNIT_TYPEID::ZERG_HIVE }, {sc2::UPGRADE_ID::ZERGGROUNDARMORSLEVEL2} };
-    m_upgradeData[sc2::UPGRADE_ID::ZERGLINGATTACKSPEED] =               { sc2::Race::Zerg, 200, 200, 0, 2080, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_ZERGLINGADRENALGLANDS, 0, { sc2::UNIT_TYPEID::ZERG_SPAWNINGPOOL }, { sc2::UNIT_TYPEID::ZERG_HIVE }, {} };
-    m_upgradeData[sc2::UPGRADE_ID::ZERGLINGMOVEMENTSPEED] =             { sc2::Race::Zerg, 100, 100, 0, 1760, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_ZERGLINGMETABOLICBOOST, 0, { sc2::UNIT_TYPEID::ZERG_SPAWNINGPOOL }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::ZERGMELEEWEAPONSLEVEL1] =            { sc2::Race::Zerg, 100, 100, 0, 2560, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_ZERGMELEEWEAPONSLEVEL1, 0, { sc2::UNIT_TYPEID::ZERG_EVOLUTIONCHAMBER }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::ZERGMELEEWEAPONSLEVEL2] =            { sc2::Race::Zerg, 150, 150, 0, 3040, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_ZERGMELEEWEAPONSLEVEL2, 0, { sc2::UNIT_TYPEID::ZERG_EVOLUTIONCHAMBER }, { sc2::UNIT_TYPEID::ZERG_LAIR, sc2::UNIT_TYPEID::ZERG_HIVE }, {sc2::UPGRADE_ID::ZERGMELEEWEAPONSLEVEL1} };
-    m_upgradeData[sc2::UPGRADE_ID::ZERGMELEEWEAPONSLEVEL3] =            { sc2::Race::Zerg, 200, 200, 0, 3520, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_ZERGMELEEWEAPONSLEVEL3, 0, { sc2::UNIT_TYPEID::ZERG_EVOLUTIONCHAMBER }, { sc2::UNIT_TYPEID::ZERG_HIVE }, {sc2::UPGRADE_ID::ZERGMELEEWEAPONSLEVEL2} };
-    m_upgradeData[sc2::UPGRADE_ID::ZERGMISSILEWEAPONSLEVEL1] =          { sc2::Race::Zerg, 100, 100, 0, 2560, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_ZERGMISSILEWEAPONSLEVEL1, 0, { sc2::UNIT_TYPEID::ZERG_EVOLUTIONCHAMBER }, {}, {} };
-    m_upgradeData[sc2::UPGRADE_ID::ZERGMISSILEWEAPONSLEVEL2] =          { sc2::Race::Zerg, 150, 150, 0, 3040, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_ZERGMISSILEWEAPONSLEVEL2, 0, { sc2::UNIT_TYPEID::ZERG_EVOLUTIONCHAMBER }, { sc2::UNIT_TYPEID::ZERG_LAIR, sc2::UNIT_TYPEID::ZERG_HIVE }, {sc2::UPGRADE_ID::ZERGMISSILEWEAPONSLEVEL1} };
-    m_upgradeData[sc2::UPGRADE_ID::ZERGMISSILEWEAPONSLEVEL3] =          { sc2::Race::Zerg, 200, 200, 0, 3520, false, false, false, false, false, false, false, sc2::ABILITY_ID::RESEARCH_ZERGMISSILEWEAPONSLEVEL3, 0, { sc2::UNIT_TYPEID::ZERG_EVOLUTIONCHAMBER }, { sc2::UNIT_TYPEID::ZERG_HIVE }, {sc2::UPGRADE_ID::ZERGMISSILEWEAPONSLEVEL2} };
-}
-
-const TypeData & TechTree::getData(const sc2::UnitTypeID & type) const
-{
-    if (m_unitTypeData.find(type) == m_unitTypeData.end())
-    {
-        //std::cout << "WARNING: Unit type not found: " << sc2::UnitTypeToName(type) << "\n";
-        return m_unitTypeData.at(0);
-    }
-
-    return m_unitTypeData.at(type);
-}
-
-const TypeData & TechTree::getData(const sc2::UpgradeID & type)  const
-{
-    if (m_upgradeData.find(type) == m_upgradeData.end())
-    {
-        //std::cout << "WARNING: Upgrade not found: " << sc2::UpgradeIDToName(type) << "\n";
-        return m_unitTypeData.at(0);
-    }
-
-    return m_upgradeData.at(type);
-}
-
-const TypeData & TechTree::getData(const BuildType & type) const
-{
-    if (type.getBuildType() == BuildTypes::Unit)
-    {
-        return getData(type.getUnitTypeID());
-    }
-    else if (type.getBuildType() == BuildTypes::Upgrade)
-    {
-        return getData(type.getUpgradeID());
-    }
-    
-    BOT_ASSERT(false, "Can't getData this type: %s", type.getName().c_str());
-
-    return m_unitTypeData.at(0);
-}
diff --git a/src/Unit.cpp b/src/Unit.cpp
index 3ca5c6ca465100368d06a14b0a05a4e8ee94a19a..d3db2c69ea5a3036a5ae192443f9601747af3a41 100644
--- a/src/Unit.cpp
+++ b/src/Unit.cpp
@@ -243,7 +243,7 @@ void Unit::move(const CCPosition & targetPosition) const
 {
 	BOT_ASSERT(isValid(), "Unit is not valid");
 #ifdef SC2API
-	m_bot->Actions()->UnitCommand(m_unit, sc2::ABILITY_ID::MOVE, targetPosition);
+	m_bot->Actions()->UnitCommand(m_unit, sc2::ABILITY_ID::GENERAL_MOVE, targetPosition);
 #else
 	m_unit->move(targetPosition);
 #endif
@@ -253,7 +253,7 @@ void Unit::move(const CCTilePosition & targetPosition) const
 {
 	BOT_ASSERT(isValid(), "Unit is not valid");
 #ifdef SC2API
-	m_bot->Actions()->UnitCommand(m_unit, sc2::ABILITY_ID::MOVE, CCPosition((float)targetPosition.x, (float)targetPosition.y));
+	m_bot->Actions()->UnitCommand(m_unit, sc2::ABILITY_ID::GENERAL_MOVE, CCPosition((float)targetPosition.x, (float)targetPosition.y));
 #else
 	m_unit->move(CCPosition(targetPosition));
 #endif
@@ -418,13 +418,13 @@ sc2::AbilityID Unit::getCurrentAbilityID() const
 void Unit::holdPosition() const
 {
 	BOT_ASSERT(isValid(), "Unit is not valid");
-	m_bot->Actions()->UnitCommand(m_unit, sc2::ABILITY_ID::HOLDPOSITION);
+	m_bot->Actions()->UnitCommand(m_unit, sc2::ABILITY_ID::GENERAL_HOLDPOSITION);
 }
 
 void Unit::patrol(const CCPosition & targetPosition) const
 {
 	BOT_ASSERT(isValid(), "Unit is not valid");
-	m_bot->Actions()->UnitCommand(m_unit, sc2::ABILITY_ID::PATROL, targetPosition);
+	m_bot->Actions()->UnitCommand(m_unit, sc2::ABILITY_ID::GENERAL_PATROL, targetPosition);
 }
 
 void Unit::stopDance() const
@@ -433,6 +433,8 @@ void Unit::stopDance() const
 	m_bot->Actions()->UnitCommand(m_unit, sc2::ABILITY_ID::STOP_DANCE);
 }
 
+/*
+// Implementation by Dawid Abucewicz
 bool Unit::isCarryingMinerals() const
 {
     BOT_ASSERT(isValid(), "Unit is not valid");
@@ -446,3 +448,43 @@ bool Unit::isCarryingMinerals() const
     }
     return false;
 }
+*/
+
+int Unit::gasLeftInGeyser() const
+{
+	BOT_ASSERT(isValid(), "Unit is not valid");
+	return m_unit->vespene_contents;
+}
+
+int Unit::mineralsLeftInMineralfield() const
+{
+	BOT_ASSERT(isValid(), "Unit is not valid");
+	return m_unit->mineral_contents;
+}
+
+int Unit::getOwner() const
+{
+	BOT_ASSERT(isValid(), "Unit is not valid");
+	return m_unit->owner;
+}
+
+// Implemented with Blizzard SC2 API
+bool Unit::isCarryingGas() const
+{
+	return sc2::IsCarryingVespene(*m_unit);
+}
+
+bool Unit::isCarryingMinerals() const
+{
+	return sc2::IsCarryingMinerals(*m_unit);
+}
+
+float Unit::maxShields() const
+{
+	return m_unit->shield_max;
+}
+
+float Unit::maxEnergy() const
+{
+	return m_unit->energy_max;
+}
\ No newline at end of file
diff --git a/src/Unit.h b/src/Unit.h
index 24a3d631624e4eaf1001431f85665b85396b9513..f68a09bf1b3e4dd4fad4043265e52cf85a0a49e9 100644
--- a/src/Unit.h
+++ b/src/Unit.h
@@ -62,6 +62,17 @@ public:
     void stopDance() const;
     float getFacing() const;
     float getRadius() const;
+	
+	/*
+		API extended summer 2020
+	*/
+	int gasLeftInGeyser() const;
+	int mineralsLeftInMineralfield() const;
+	int getOwner() const;
+	bool isCarryingGas() const;
+	float maxShields() const;
+	float maxEnergy() const;
+
 
     void stop           () const;
     void attackUnit     (const Unit & target) const;
diff --git a/src/UnitType.cpp b/src/UnitType.cpp
index 9fcad4336a89816dd923588b151013d6bb0de22d..dd564f7e0b74ee97125b95faff718bd3becde1c5 100644
--- a/src/UnitType.cpp
+++ b/src/UnitType.cpp
@@ -164,6 +164,8 @@ bool UnitType::isMineral() const
         case sc2::UNIT_TYPEID::NEUTRAL_MINERALFIELD750      : return true;
         case sc2::UNIT_TYPEID::NEUTRAL_RICHMINERALFIELD     : return true;
         case sc2::UNIT_TYPEID::NEUTRAL_RICHMINERALFIELD750  : return true;
+		case sc2::UNIT_TYPEID::NEUTRAL_LABMINERALFIELD		: return true;
+		case sc2::UNIT_TYPEID::NEUTRAL_LABMINERALFIELD750	: return true;
         default: return false;
     }
 #else
@@ -383,7 +385,22 @@ int UnitType::getSightRange() const
     return m_bot->Observation()->GetUnitTypeData()[m_type].sight_range;
 }
 
-sc2::UnitTypeID UnitType::getRequiredStructure() const
+UnitTypeID UnitType::getRequiredStructure() const
 {
     return m_bot->Observation()->GetUnitTypeData()[m_type].tech_requirement;
 }
+
+std::vector<sc2::UnitTypeID> UnitType::getEquivalentUnits() const
+{
+	return m_bot->Observation()->GetUnitTypeData()[m_type].tech_alias;
+}
+
+bool UnitType::requiredAttached() const
+{
+	return m_bot->Observation()->GetUnitTypeData()[m_type].require_attached;
+}
+
+float UnitType::getBuildTime() const
+{
+	return m_bot->Observation()->GetUnitTypeData()[m_type].build_time;
+}
\ No newline at end of file
diff --git a/src/UnitType.h b/src/UnitType.h
index 72ea02820e92dca208e52e3b72cb0dd087962474..7f3bbbe530ffc6859f7ceb8cff1c691af42afb31 100644
--- a/src/UnitType.h
+++ b/src/UnitType.h
@@ -2,6 +2,7 @@
 
 #include "Common.h"
 
+
 class IDABot;
 
 class UnitType
@@ -25,7 +26,7 @@ public:
 	
     int getMovementSpeed() const;
     int getSightRange() const;
-    sc2::UnitTypeID getRequiredStructure() const;
+	sc2::UnitTypeID getRequiredStructure() const;
     
     bool isValid() const;
     bool isBuilding() const;
@@ -50,6 +51,9 @@ public:
     int gasPrice() const;
 
     const std::vector<UnitType> & whatBuilds() const;
+	std::vector<sc2::UnitTypeID> getEquivalentUnits() const;
+	bool requiredAttached() const;
+	float getBuildTime() const;
 
     static UnitType GetUnitTypeFromName(const std::string & name, IDABot & bot);